Introduction
Free-space laser communication is a method of using lasers to transmit data without the use of media, such as optical cables. I have been interested in the properties of lasers and its applications for more than a year. When I learned that NASA is now working on developing free-space laser communication technologies, I became curious due to its inherent advantages, which are as below:
- Free-space laser communication does not require a fiber optic cable. This makes it adaptable to areas where installing infrastructures are a challenge, such as space communication, communication at remote areas, disastrous areas, and emergency requirements.
- Since free-space communication requires line of sight conditions, it is totally secured, compared to radio communication.
- Since laser beams are collimated and coherent, there is low beam divergence, which results in tremendous power saving. This power saving property is extremely useful in long distance space-ship communication and applications where equipment size is constrained to be small.
As I tried to design a free-space laser communication system, I could not find enough research material that was relevant to my requirement. That prompted me to start this project. This project focused on researching to find the optimum design for a free-space laser communication transceiver system. In this project, a signal was superimposed on a carrier laser beam, using amplitude modulation. The bias voltages were optimized for the system by plotting its input/output characteristics and choosing the right operating voltage range.
Purpose: Is it possible to design a free-space (wireless) laser communication system, with commonly available components, that uses laser as a carrier wave to carry audio signals with minimum distortion?
Objective
The objective of this experiment was to design a modulator circuit for a laser beam and test if the laser beam could be successfully modulated to carry an audio signal through free space.
It is possible to design a modulator for audio signals using a class A amplifier circuit made out of commonly available components. This modulator can modulate the output power of a laser source linearly. The emitted laser can be detected wirelessly at a distance and demodulated to retrieve the audio signal with minimum distortion.
- Using commonly used transistors, it is possible to design a class A amplifier for audio signals. (Class A amplifiers have linear input/output characteristics, which mean that the signals are amplified without distortion. Class A amplification happens over specific voltage ranges.)
- The output currents of the above amplifier can be used to modulate a laser source.
- Laser diodes, when biased forward, have power outputs that are linearly related to the current over specific operating ranges.
- Laser detectors, such as photovoltaic cells, have a range of output voltages that are linearly related to the incident radiation power.
Considering the above premises, it is possible that there could be an overlapping voltage range that is common to all the above systems where their input/output characteristics are linear.
The dreams of yesterday are the hopes of today and the reality of tomorrow. Science has not yet mastered prophecy. We predict too much for the next year and yet far too little for the next ten.
Stage 1
A variable voltage supply circuit was chosen, modified and fabricated, capable of providing stable voltages from 0V - 12V. Potentiometers used for course and fine adjustment of input voltage.
Stage 2
Linear Range of Photovoltaic Output and Corresponding Laser Voltage Range
A class A biased single stage audio amplifier was chosen, modified and fabricated. The laser source was connected to it. The input/output characteristic of the laser source was experimented on, to see if the laser source was capable of responding to audio frequencies.
Afterwards, the output was tested to see if it was linearly related to the input at some input range. The output intensity of the laser beam was detected and measured using a photovoltaic cell, which also worked as a receiver in the final system.
Transistor:
I chose the 2N3904 as it had its β (hfe) peaking at 10mA. 10mA is close to the laser source’s maximum current capacity which was around 30mA
Voltmeter 1 - Connected between the supply voltage and ground.
Voltmeter 2 - Connected across the laser source
Voltmeter 3 - Connected across the output of the photovoltaic cell
Data and Observations
The following are the observations and the graph from Stage 2. The input voltage (supply voltage from the variable voltage power supply) was varied and corresponding voltages from the photovoltaic cell was measured and tabulated.
From the above graph, we can see that the laser’s turn-on threshold is around 2.86V and the saturation voltage is around 3.66V.
From the above graph, we can observe that the input/output characteristic is a straight line between 2.92V and 3.22V.
Based on this range the voltage drop across the laser for the voltages between the above two linear voltage boundaries was measured.
The range of potential difference, 2.447V to 2.597V, for the x-axis values on this graph, was determined from the linear input range from the earlier graph
Stage 3
Amplifier Linear Output Range and Overlap with Laser Voltage Range
The class A biased single stage audio amplifier, from stage 2, was configured to drive and modulate the laser. It was then given different input voltages and the output voltages were measured. The objective was to find if there was an output voltage range for the class A amplifier that would match with the input voltage range of the laser. The match should be in such a way that both these devices would be aligned within the same voltage range that has linear input/output relationship.
The base bias resistor was replaced by a trimmer potentiometer in order to facilitate variable biasing at the transistor base.
For each supply voltage, I changed the bias voltages over a range using the potentiometer, and observed the voltage across the laser for each distinct value. This was to see if it was within the laser’s linear voltage range.
Input Voltage (Laser Voltages in Linear Range): 3.4 V
Since VL was linearly varying with VB (base voltage), the modulator operated in class A configuration
Even though this configuration was offering a linear range between 1.54V and 1.76V for the VB, this entire range was not usable since the linear input/output voltage range for the laser did not exactly coincide with this range.Comparing the graph from Stage 2 as well as the current graph above, I got the following ranges for VL:
- Range of 2.447V to 2.597V from Stage 2
- Range of 2.42V to 2.54V from Stage 3
The overlapping range was from 2.447V to 2.54V. This was the only range where the laser output linearly varied with the base voltage of the modulator for a supply voltage of 3.4V
The voltage bandwidth = 2.54V - 2.447V = 0.093V
I repeated the above analysis with a supply voltage of 3.3 V
Input Voltage (Laser Voltages in Linear Range): 3.3 V
Comparing the graph from Stage 2 as well as the curent graph above, I got the followoing ranges for VL:
- Range of 2.447V to 2.597V from Stage 2
- Range of 2.46V to 2.6V from Stage 3
The voltage bandwidth = 2.597V - 2.46V = 0.137V
Therefore, the two scenarios were:
- For Supply Voltage = 3.4V
Voltage Range for Linear Operation = 2.447V to 2.54V
Therefore, Voltage Bandwidth = 2.54V – 2.447V = 0.093V - For Supply Voltage = 3.3V
Voltage Range for Linear Operation = 2.46V to 2.597V
Therefore, Voltage Bandwidth = 2.597V – 2.46V = 0.137V
The supply voltage of 3.3V gave a better bandwidth. Therefore 3.3V was the ideal supply voltage.
Stage 4
Final Test of Transmitter/Receiver Combination with a 1kHz audio frequency
Supply Voltage: 3.3V
Linear Laser Voltage Range (VL): 2.46V to 2.597V
Base Bias Voltage Range (VB): 1.463V to 1.6V
We can take the mid-value of the above base bias voltage range to obtain the ideal base bias voltage.
Ideal Base Bias Voltage = 1.5315V
An audio transmission was used to test the system. The audio generator was an app called Test Tone that I had downloaded onto my smart-phone. It was tested using a software oscilloscope on my laptop called Soundcard Scope 1.40. A screenshot of the input wave (1kHz) was taken.
The modulated wave which had travelled through free space and was detected by the photovoltaic cell receiver was fed into the ampli-speaker. The output of the speaker, which was sound waves of 1kHz frequencies (demodulated by the photovoltaic cell), was fed into the software oscilloscope using the inbuilt microphone of my laptop. A screenshot of the waveform (output wave) was taken.
The screenshots of the input signal as well as the output signal as mentioned above are given below
Conclusion
Results and Findings
The following supply voltage and base voltage would give a linear input/output characteristic as well as the widest linear range for the entire system (that included the transmitter and the receiver that was designed in this project).
- The Supply Voltage = 3.3V DC
- The Base Bias Voltage = 1.5315V DC
This will also ensure that,
- The Range of Potential Difference across the Laser = 2.46V to 2.597V
I was able to design a modulator for audio signals using a class A amplifier circuit that modulated the output power of a laser source linearly, so that the emitted laser beam could be detected wirelessly at a distance and demodulated to retrieve the audio signal with minimum distortion.
Placeholder text by Space Ipsum. Photographs by NASA on The Commons.


var
Omitting the var
when declaring a variable will make it global by default, which is rarely intended. Not
only do global variables pollute the global namespace, they can also result in hard-to-track bugs if the variable is
updated in different files.
new
keyword
New JS developers will often create objects such as Array and Object with the new keyword (i.e. var arr =
new Array()
and var obj = new Object()
). These constructors are technically correct, but the preferred way is to use the object initializer version of each (i.e. var arr = []
and var obj = {}
). Not only are these more succinct, but in the case of the Array constructor, subtle differences arise in the way the constructor is used compared to the initializer (try passing an integer into new Array() and then inspect its length).
==
instead of ===
There's rarely a good reason to use == instead of ===. The == operand attempts to coerce values of different type into the same type so that they can be compared, whereas === requires that the operands be the same type and value. Instead of relying on =='s unreliable output (see code sidebar), use the safer and predictable ===.
Inexperienced JS developers (or other language developers for that matter) tend to pile on function parameters when creating or editing a function. They'll add "just one more..." parameter until the function is bloated with 8 possible parameters. Furthermore, JavaScript allows you to call a function without passing in all of the parameters, so developers will often add parameters to the end of the function to make them optional.
A cleaner and more maintainable implementation is to design the function to take in a parameter object that acts as a key/value map for any desired parameters:
function doSomething(config) {
smallTask(config.x); // defined elsewhere
anotherTask(config.y);
}
var params = {
x: 42,
y: { /* some object key/values */ }
};
doSomething(params);
Just like ==, eval
should almost never be used. There are a few downsides to eval'ing code, but the most
important one is that it can compromise the security of your application. eval
executes JS code in as a
String, so any String from untrusted sources that gets passed to the eval function could result in a security hole.
Strict mode should be declared by adding 'use strict';
to the beginning of either a JavaScript file or a function. The use strict expression was added in ECMAScript 5 and instructs the browser to run your code in strict mode. Strict mode makes writing JavaScript safer by turning bad syntax into errors. For example, you can't have undeclared variables in strict mode. This means that all variables must be created using a var
statement. If you then mistype the name of the variable later, an error will be thrown as that mistyped variable hasn't been declared. Without strict mode, a new variable would be created without giving you any feedback that something was wrong. Other things such as using the delete
and with
statements are also prohibited.
var array = [1, 2, 3, 4];
for (var i = 0; i < array.length; i++) {
//array[i]
}
When iterating over an object use
var object = {
"firstName": "BTI",
"lastName": "360",
"website": "bti360.com"
}
for (var property in object) {
//property
}


Matteo Bolognese
Electrical Engineer
Hardware Guru
Device Design, Assembly, PCB Design, & Power
Linkedin
Chad Klinefelter
Computer Systems Engineer
Database Guru
Data Management & App Development
Linkedin
Jackie Lagasse
Computer Systems Engineer
UI/UX Guru
Augmented Reality & App Development
Linkedin
Ethan Miller
Electrical Engineer
Algorithms Guru
Device Communication & Sensor Interfacing
Linkedin


(HTML "\n (BODY "\n (P "Here we go! (A Ahref http://bigidea.com/ "Bob )A " (BR )BR "\n and (A Ahref http://larryboy.com/ " Larry )A "\n and friends (A Ahref http://google.com/ "Google )A "\n )P )BODY )HTML


Forgot Password
×
Email sent!
Check your inbox.
×
An account with that email
does not exist
We'll send you an email with a link to reset your password.
Email address
Send Email


The Universal Data Packet (UDP) is a structure to store data on a 1-Wire device. It contains one to two length bytes, data and two inverted CRC16 bytes. The structure is:
+---------------------------------+
| length | data | CRC16 |
| | | binary |
| 0...508 | 0...508 | LO/HI |
| 1-2 bytes | bytes | 2 bytes |
+---------------------------------+
The UDPs always start on page boundaries but can end anywhere. The length is the number of data bytes not including the length byte(s) and the CRC16 bytes. There is one length byte if the number of data bytes is less then 255. If there are 255 or more data bytes then the first length byte is 255 and the next length byte is 0 to 253. The first and second length bytes added together provide the number of data bytes. The CRC16 is first initialized to the starting page number. This provides a check to verify the page that was intended is being read. The CRC16 is then calculated over the length and data bytes. The CRC16 is then inverted and stored low byte first followed by the high byte. A detailed description of the CRC16 can be found in Application Note 27 “Understanding and Using Cyclic Redundancy Checks with Dallas Semiconductor iButtonTM Products”. The Application Note can be found here: http://pdfserv.maxim-ic.com/arpdf/AppNotes/app27.pdf.
The 1-Wire File Structure implemented in TMEX uses a subset of the Universal Data Packet. It limits the length so that the whole structure will fit in one page. For the current devices with 32 bytes per page the length is limited to 29 data bytes. The last data byte is used as a continuation pointer leaving 28 true data bytes.
The Default Data Structure (DDS) is an old standard that specifies only one Universal Data Packet starting at page zero. This standard does not provide a directory or file type operations but it has speed advantages for simple applications.
See Also


%include templates/parts/head.html
%include templates/parts/navBar.htmlMeet Karel, The Java Robot that Stanford uses to introduce university students to programming.
Use Karel's commands to get her to move the beeper to the top of the ledge. Normally you will write your programs in an application called Eclipse, but to get you started we made a mini-eclipse for our website:


{* Copyright 2011-2013 Here's A Hand Limited Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. *} {* Copyright 2011-2013 Here's A Hand Limited Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. *} {extends file="whitelabeladmin/page.htm"} {block name="content"}
| ID | Title | Sys Admin Label | Premium? | Created | Deleted | |
|---|---|---|---|---|---|---|
| {$sg->getID()|escape} | {$sg->getTitle()|escape} | {$sg->getSysAdminLabel()|escape} | {if $supportGroup->isPremium()}Yes{else}No{/if} | {$sg->getCreatedAt()|date_format} | {$sg->getDeletedAt()|date_format} |


Inventory
Understand and discuss concepts around managing inventory through static INI formatted files or through dynamic inventory scripts
Static INI
Create an INI inventory file based off of instructor provided servers, specifying a human readable name and a connection IP address or hostname
We should use a human readable name as the inventory hostname, and specify ansible_ssh_host for the actual IP. Ungrouped for now.
Static INI
web1 ansible_ssh_host=<IP_ADDRESS>
web2 ansible_ssh_host=<IP_ADDRESS>
Groups
Create a web group in the inventory file
Groups
[web]
web1 ansible_ssh_host=<IP_ADDRESS>
web2 ansible_ssh_host=<IP_ADDRESS>
Dynamic Inventory
What are the use cases for dynamic inventory scripts
Limitations of a static inventory with a cloud like environment Query nearly any data source for inventory How ansible knows if the provided inventory is a script
Using a static inventory file with a "living" cloud like environment is inefficient, error prone and difficult to maintain.
Due to the nature of an inventory script, they can mostly leverage the full power of the language they are implemented in. This would enable the script to communicate with nearly any data source for use as inventory.
Ansible determines if the provided inventory is a script, by checking if the file is executable. If the file is not executable it is parsed as an INI file.
Dynamic Inventory Example
Show the output of the dynamic inventory script of your choice
Start a basic playbook
Create a playbook that only has a "hosts" specification targeting all servers and then run it
---
hosts: all
Students should see that the playbook runs an implicit fact gathering step, and should successfully communicate with all servers.
Ansible Ad-Hoc Commands
A Review of Hosts, Tasks, and Modules
Targeting Hosts
all / * Groups (webservers) Exclusion (webservers:!nginxservers) Intersection (webservers:&staging) Combos Hostname / IP Regex --limit
Go over the various methods for targeting hosts for ad-hoc commands.
Include information on rolling release and complex targeting. Use
'-i localhost,' for a quick way to target a single host without
specifying an inventory file.
Executing a task
ad-hoc commands are single-task executions which leverage modules
Modules
Modules are code that is executed on the remote host
Discuss how ansible takes module code and bundles it with arguments,
transfers it to the remote host and executes it (depending on
connection method).
Modules
Ansible provided core modules are
Written in python Are shipped by SSH to the target machine where they are executed Return JSON data that is interpreted by ansible
Modules can be written in other languages, but core ansible only uses python. We don't need to go into the mechanics of how modules are built before being shipped, just mention that they get copied to the remote machine using SCP/SFTP. The echo out JSON data, which gets interpreted by the ansible "control" machine.
Module Documentation
ansible-doc -l
ansible-doc setup
ansible-doc copy
ansible-doc -l lists all the modules. ansible-doc
to see the documentation for a specific module. The ansible-doc
command makes it extremely easy to see all of the available ansible
modules with corresponding documentation and examples.
Example Use Cases
Rebooting all servers
ansible all -m command -a "/sbin/reboot"
This is a simple command that uses the command module to issue a reboot
to all servers in your inventory.
The -m dictates the module, the -a for arguments.
Example Use Cases
Setting fork level to 10
ansible webservers -f 10 -m setup
Fork level means that Ansible will fork 10 times, and then reach out
to up to 10 machines concurrently. Choose carefully the level of concurrency:
higher concurrency executes tasks/plays/playbooks faster, but results in more
resources being consumed.
Example Use Cases
Copy a file from the local host to inventory hosts
ansible dbservers -m copy -a "src=/path/to/file dest=/path/to/dest"
Uses the copy module to copy a file from the local machine, where the ansible
command is being run, to the destination.
Example Use Cases
Install nginx and add a user
ansible all -m apt -a "pkg=nginx state=present"
ansible all -m user -a "name=bob state=present"
Very simple; this uses the apt module to install nginx, and uses
the user module to add user bob.
Example Use Cases
Cloning a git repo to a path
ansible appservers -m git -a "repo=https://github.com/ansible/ansible dest=/home/user/ansible"
This is cloning a repo to a directory, optionally accepting tags and versions. Allows you
to install software (or anything stored in Git) from source control, a cornerstone
piece of functionality for any automation/config mgmt/orchestration tool.
Example Use Cases
Ensure httpd is started
ansible -m service -a "name=httpd state=started"
The service module is used to ensure httpd is started. It does not restart, stop, reload
or do anything but check that the process is running; if it is not running, it starts.
Example Use Cases
Backgrounding tasks, with optional polling every 60 seconds
ansible all -B 3600 -a "/usr/bin/long_running_operation --do-stuff"
ansible all -B 1800 -P 60 -a "/usr/bin/long_running_operation --do-stuff"
Initiate long running tasks with polling. Optionally kick off long running tasks
with backgrounding and no polling, returning you to the shell, with the option of
checking back in on the operation by setting -P to 0, which is otherwise a default of 15.
Example Use Cases
Running setup module to gather and display all facts about a machine known to Ansible
ansible web1.example.com -m setup
Gathers a very large JSON object's worth of data about servers, to include
network information, distro information, shell environment, devices,
CPU, memory, etc. All facts returned by setup are prefixed with ansible_
Cowsay
Cowsay is used by default if enabled on the system, but can be disabled
permanently in the ansible.cfg file, or skill installation of cowsay.
Labs
Using the 'ansible' command
Install nginx and ensure that it is set to start at boot Ensure that nginx is started Create user www-data
Variables
Understand the basics of variables, where they come from, how they get set, and how to evaluate and manipulate them
Host Variables
Host variables are "facts" about a server that contains info such as
Hostname IP addresses Date and Time information CPU, Disk, Memory Hardware Architecture Operating System Information
For an example the students can run 'ansible all -i localhost, -c local -m setup'
Host Variables
Where do they come from?
inventory fact gathering (setup) host_vars directory
Group Variables
"facts" that apply to a grouping of servers
Group Variables
Where do they come from?
inventory group_vars directory
The name of the files in the group_vars directory line up with the group name being targeted. "all" is a special keyword to apply facts to all hosts.
Variable Precedence
Precedence should simply feel natural
The most specific applied variable wins
Using Variables in YAML
Ansible uses "mustache" like variable expansion
group_vars/all
---
apache2_version: 2.2.22-1ubuntu1
Task
- apt: name="apache2={{ apache2_version }}" state=present
Register
A special keyword "register" exists for all tasks, that will assign the output from a module to the variable of the specified name, for later manipulation or evaluation in use with other tasks
- git: repo=git://github.com/ansible/ansible.git dest=/tmp/ansible
register: ansible_git
Different modules produce different data structures. For example, command and shell return a data structure containing the return code of the command, the contents of stderr and stdout, etc. The next section talks about how to explore the contents of a register variable.
Inspecting Variables
Different modules produce different data structures. The 'debug' module will help you inspect that data structure.
- debug: var=ansible_git
Output Sample
ok: [someserver] => {
"ansible_git": {
"after": "1b4ba5431b1070c63b9069d310f42e16f302db10",
"before": "69b2d82be6ffe20f04070cddf11b7629aa8420e5",
"changed": true,
"invocation": {
"module_args": "repo=git://github.com/ansible/ansible.git dest=/tmp/ansible",
"module_name": "git"
}
}
}
Module Output Structure
All modules should return a key titled "changed" with a boolean value of "true" or "false" defining whether the module made a change
Additionally, under a failure scenario, a module would set a key of "failed" with a boolean value of "true"
A failed module may not have a changed key
Dynamically Adding Host Facts
During runtime you can run add additional host vars using the "set_fact" module
- local_action:
module: wait_for
host: "{{ ansible_default_ipv4.address }}"
port: 22
delay: 1
timeout: 1
register: port_test
failed_when: False
- set_fact: ansible_ssh_port=2222
when: port_test|failed
This example uses the wait_for module to attempt communication with port 22 on the remote host via a local action. Don't fail if wait_for fails, and if wait_for fails, set ansible_ssh_port to port 2222 for future communciation with the server.
Magic Variables
There are several standard variables that are created and exposed by ansible
inventory_dir inventory_hostname inventory_hostname_short inventory_file playbook_dir play_hosts hostvars groups group_names ansible_ssh_user
play_hosts is new to 1.5, there is also 'vars' and 'environment' but are not widely used or discussed
http://docs.ansible.com/playbooks_variables.html#magic-variables-and-how-to-access-information-about-other-hosts
Best Practices
content organization version control role based access control platform variance in playbooks proper naming of plays, tasks, and handlers playbook formatting
Best practices are not just conformity for conformity sake.
They will help simplify code, smooth out collaboration, and
avoid gotchas.
Content Organization
Magic happens when you put your files in the right locations
ansible.cfg inventory variables and inclusions tasks handlers playbooks templates and files for use in tasks custom modules roles
Ansible looks in ANSIBLE_CONFIG, ./ansible.cfg, ./.ansible.cfg
and /etc/ansible/ansible.cfg in that order. (1.5 switched
ANSIBLE_CONFIG and ./ansible.cfg order)
Inventory is looked for in config directive, ANSIBLE_HOSTS,
/etc/ansible/hosts in that order.
host_vars / group_vars relative to inventory and playbook
basedirs
file inclusions are relative to the playbook (vars, tasks,
handlers, playbooks, templates, etc...)
Custom modules go in library/ relative to playbook
roles are in roles/ relative to playbook, and have
files, templates, tasks, handlers, vars, meta all relative
to the role itself, making for portability.
Version Control
Version control and Ansible go hand in hand. This topic will walk through many of the benefits of storing your ansible content in SCM and why this is itself a best practice.
Version Control
audit trail / RBAC
Version control provides a record of who changed what, when, and
why, the audit trail. It can also be a part of RBAC strategy,
providing a gateway to who can commit to the playbook content.
Version Control
collaboration and preservation
A centralized (or distributed) store of the content protects
against localized disaster. It also allows for better collaboration
than just passing files back and forth, or co-editing a single
directory.
Version Control
DevOps tie-in
DevOps best practices dictate code to be deployed is already in SCM, natural extension to put code that does the deploying in SCM as well
Version Control
Galaxy, Git, and You!
role sharing joys of modular playbooks deploying code with the git module in a role
Version Control
Sensitive information handling
Version Control
Barriers to entry
pull requests automatic gateway tests local validation checks
All these things can work together to add quality assurance to your
content. Using pull or change requests gives a human the
opportunity to review. Automated tests can tie into them, or be
ran post-commit to continuously validate. Localized hooks can be
used to validate after pulling changes in.
RBAC and execution model
A discussion of RBAC, Ansible, and your team, as well as a comparison of execution stratagies
RBAC and execution model
RBAC
Role Based Access Control is used in many organizations
to seperate out who has access to do what within environments.
Often required for parts of public companies. Sometimes at
odds with DevOps philosophy of self-service.
RBAC and execution model
Execution models
A comparison and contrast of centralized and distributed execution models. Not to be confused with push and pull.
RBAC and execution model
Centralized
access defined by company standards layer of protection against accidents and malice repeatability and guaranteed working environment ITIL/Change Control process friendly
A single point from which to either push changes from, or
have ansible-pull fetch changes from. Can configure systems to
only allow Ansible logins from this host with a particular key
Host can be locked down and managed to ensure unwanted changes
don't creep in and disrupt ability to do repeat runs
RBAC and execution model
Distributed
rapid development and execution loop change control put in hands of playbook/code devs turns operational support from gatekeeping to enabling aligns with other self-service IT services you built it, you deploy it
Each developer could be a distributor, or individual
systems could point to individual sources for ansible-pull
Higher security risk, higher risk of run environment change
but tradeoff for more flexibility and rapid dev/deploy times
Platform Variance in playbooks
Best practices for dealing with the challenge of heterogeneous environments
Platform Variance in playbooks
group_by
Create dyanmic groups matching certain criteria
- name: grouping play
hosts: all
tasks:
- name: create distro groups
group_by: key={{ ansible_distribution }}
- name: CentOS play
hosts: CentOS
gather_facts: False
tasks:
- # tasks that only happen on CentOS go here
Note that roles could also be used here, driven by group_by.
Platform Variance in playbooks
task conditionals
- name: install nginx
yum: name=nginx state=present
when: ansible_distribution == 'CentOS'
- name: install nginx
apt: pkg=nginx state=present
when: ansible_distribution == 'Debian'
A more simple way to deal, could clutter up a large playbook / role set.
Proper naming of plays, tasks, and handlers
Names have significance
--start-at-task handler notification output review
$ ansible-playbook play.yaml --start-at-task="a good task"
- name: a good task
file: path=/etc/foobar state=absent
notify: bounce foo service
handlers:
- name: bounce foo service
service: name=foo state=restarted
Names have meaning. task names in --start-at-task,
handler names for notify. Play names are less important
but uniqueness helps when debugging output
Playbook formatting
whitespace, yaml, line lengths, oh my!
Playbook formatting
order and style of playbook directives
use a name hosts next other options tags vars after a blank line tasks after a blank line
- name: Generate env/cell specific content
hosts: localhost
connection: local
gather_facts: false
tags:
- localprep
vars:
- cachedir: cache/
tasks:
- name: stuff
There is no hard order that things must appear in a playbook,
however if anybody ever looks at your files they will expect
an order. Blank lines help to visually separate logical blocks
of the play and between plays.
Playbook formatting
whitespace, line lengths, continuations
blank lines encouraged less than 80 chars wide blocks can continue on new lines with proper spacing
tasks:
- name: one task
command: echo
- name: lots of arguments
rax_dns_record: credentials=/path/to/my/creds type=A
data=<IP_ADDRESS> name=www.nodomain.not
Playbook syntax is friendly to line continuation, make use of that
to keep your lines under 80 chars. Wrap the text to be at the same
indent level as the preceeding data block, as seen in the example
Playbook formatting
to quote or not to quote
quote strings that have a : in them quote variables if they come directly after a : quote strings that use * directly after a : quote entire string if first character is a quote
- name: "My name has a : in it"
command: "{{ variable_here }}"
when: "'some_string' in varaible_here"
hosts: "*-webs"
quoting is a yaml gotcha. It often trips people up. These
rules here will help you avoid most/all quoting gotchas.
Playbook formatting
variable referencing
use {{ }} almost always do not use {{ }} in conditionals and other task controllers
- name: name here
command: echo {{ variable here }}
register: output
when: variable != "derp"
failed_when: output.stderr == "FAILURE"
Variable decoration is another gotcha. Task controllers can be
treated like lines of python, where variables are referenced
without decoration and raw strings need quotes.
Playbook formatting
YAML gotchas
Booleans: /^(y|yes|n|no|true|false|on|off)$/i
Assume the scenario where you are configuring sshd_config, and you create a variable to disable root login via "PermitRootLogin: no". In this case 'no', evaluates to the boolean False, so you end up literally inserting "PermitRootLogin False" in your config file. To use 'no' as a string literal it must be quoted such as "PermitRootLogin: 'no'".


General support queries. User Guides: https://support.komodoplatform.com/ Support staff: Angelina#6231 gcharang#6833. If you want to ask JL777 a question, use the #ask-jl777 channel.
100 messages
Before 05-Dec-19 12:00 AM
Bryan_Beus24-Jan-19 10:02 PM
I'm going to send them a message and let them know.
Where do you think the error is in this workflow?
Is this a normal practice for distros of Ubuntu to exclude these libraries, so any distro would have this issue? Or is this something unique to Pop OS itself?
Can we add gcc-7 and g++-7 to the libraries that should be installed, in the docs.komodoplatform.com documentation on installing manually?
SHossain24-Jan-19 10:02 PM
they are using updated gcc version. komodo source doesn't use gcc 8
Bryan_Beus24-Jan-19 10:04 PM
I'm not very familiar with gcc.
is this something that we should change in the docs? Or is it something that I should let Pop know is causing issues? Or is it that the Komodo developer workflow hasn't updated to gcc 8 yet, but may at some point in the future?
I just installed Lubuntu 18.04 LTS. There are two options for installing gcc: gcc-7 and gcc-8. Both are available from apt-get install out of the box.
Even after I installed gcc-8, the system is ...
SHossain24-Jan-19 10:10 PM
@Bryan_Beus the gcc8 comes as default with Ubuntu 18.10. popOS got it that way. you need to install gcc7 to run komodo for now.
it may be updated in the future
Bryan_Beus24-Jan-19 10:10 PM
It looks like installing build-essential should add gcc-7 into the libraries?
I see that build-essential is already in our preset commands...
I'm trying to figure out where the issue is, to make sure that we don't have customers who have the same issue.
SHossain24-Jan-19 10:12 PM
ubuntu 18.10 released recently and not a lot devs/users are using it
Bryan_Beus24-Jan-19 10:12 PM
ok
SHossain24-Jan-19 10:12 PM
ubuntu 16.04 still has support and most of notary nodes and other infrastructure are running on it. some of us using 18.04 which is also LTS and doesn't have this issue
the next logical version to update to would be 20.04 for us from 18.04
Overview of the Ubuntu release cycle - maintenance, support and security coverage, lifetime, upgrade paths, kernel versions and the range of editions and images published by Canonical.
SHossain24-Jan-19 10:14 PM
any odd version is test version and any x.10 is test version with short lifecycle
x.04 gets 5 year support
Bryan_Beus24-Jan-19 10:15 PM
gotcha,
Okay, I see now.
So, it seems that it's the 18.10 aspect that's the issue, and it has less to do with Pop itself.
I believe that have an 18.04 version, and that probably should be listed as the default download on their homepage.
On my own time, I will try to roll back my system to 18.04, and I will send Pop a message letting them know about what happened.
Thanks.(edited)
This was all very helpful. I appreciate you taking the time to work through it with me.
Can we add a note somewhere in the docs about this?
For Ubuntu, we recommend only using Ubuntu 16.04 or 18.04
SHossain24-Jan-19 10:18 PM
yes
Bryan_Beus24-Jan-19 10:19 PM
Okay, if I have access to the docs.komodoplatform.com stuff, I can put that in there now, assuming you're okay with it.
SHossain24-Jan-19 10:19 PM
you can always submit a PR if you don't have direct access
you have write access to that repo
Bryan_Beus24-Jan-19 10:22 PM
ok, I'm doing it now
Bryan_Beus24-Jan-19 10:32 PM
and komodod is finally running on my machine.
Thank you!
Bryan_Beus24-Jan-19 11:28 PM
@SHossain
I just put a question up in #dev-general
Do you mind taking a look?
UncutMataii (Sean)25-Jan-19 04:40 AM
is there an app coming to Ledger or should I use magnum wallet now?
jl777c25-Jan-19 07:44 AM
@SHossain if there is some reproducible error based on a new compiler, that seems like we need to have decker look into it? maybe it also happens with zcash itself and they can fix it upstream?
You cant stake coins though Agama if they are not available in Agama Native mode
SHossain27-Jan-19 01:53 PM
@Crabby Paddy OUR is not listed in Agama yet. OUR team didn't submit any PR yet. So, most likely next version of Agama
for now, CLI is the way.
Bryan_Beus27-Jan-19 09:28 PM
@SHossain
I spoke with the developers for the Pop_OS distro, and told them about what happened. (gcc-7 not being installed by default, and only gcc-8, and that causing issues when compiling from source.)
I also told them that you suggested that I only use 18.04, since it's LTS and 18.10 is not.
They responded that when running Ubuntu on server technology you want to stay with an LTS version, when you are working with desktop users you do not.
In the past, when distro developers let their users get behind the latest release of Ubuntu, this ends up causing more issues long-term, as they get stuck on previous releases (16.04, 14.04), and they can't upgrade to the latest release in any timely fashion.
It becomes a trap that keeps open-source projects from being able to progress.
So, they're keeping 18.10 as the default download, and they also plan to push everyone to 19.04 (and 19.10) within six months of the release dates.
FYI. I don't make any opinion myself, and I am happy to roll back to 18.04 myself for my komodo-related machines. Will do it whenever I can find the time.
@jl777c@ca333 You might also find this interesting ^
SHossain27-Jan-19 09:45 PM
@Bryan_Beus Komodo source been updated and you can compile with gcc8 now
Hey guys i'm not sure if you can directly help with the Magnum wallet but i feel like you could help.
I'm unable to claim my reward and have had well over 10KMD in this address for sometime. I don't have the option to claim in the specified wallets dashboard either. Should i just shoot the Magnum support team an email?
https://imgur.com/a/KaV0ASu
SHossain29-Jan-19 12:59 PM
@REX the reward claim function may not be activated yet on magnum wallet. you need to get in touch with magnum team for more info.
PTYX29-Jan-19 02:23 PM
@REX the reward claiming function isn't working on Magnum. They are waiting on a Ledger update that will bring back the ability to claim interest with the hardware wallet. For now, you can send and receive from Magnum.
Alright29-Jan-19 03:21 PM
@PTYX is it setting nlocktime properly for sends?
you should probably clarify that if the user ever sent KMD from the ledger wallet using ledger software, the change output immediately stopped accruing rewards(edited)
1
their software doesn't set nlocktime properly
PTYX29-Jan-19 03:29 PM
If the send transaction set the nlocktime then claim interest would work.
Alright29-Jan-19 03:38 PM
@PTYX yes I'm asking if Magnum is currently setting it
if not, as soon as user sends KMD using it, the change stops accruing rewards
PTYX29-Jan-19 05:09 PM
Sorry lost connection
I agree, I'll make sure I let people know that if they send the nlocktime isn't set
REX29-Jan-19 10:22 PM
Thanks for the info guys!
1
Mr. HashEm01-Feb-19 08:49 AM
Hi
Is there a way to calculate the staking reward in the wallet ?
I followed ptyx guide.
It was a good guude.
But in agama when you click get keys it doesn't activate
Bryan_Beus01-Feb-19 11:14 PM
I'm trying to update agama from 3.2 to 3.3
Getting an error.
Trying to overwrite 'opt/Agama/v8_context_snapshot_bin', which is also in agama-app 0.3.2
Broken pipe
There's no uninstall file in the existing agama directory
smk762 - dracocanis ominator02-Feb-19 03:32 AM
@pbca26
confirmed unable to get BTC keys from pin password in Settings > Export keys. Tested in Win10 and Ubuntu 16, v0.3.3a
6 of the teams you wanted to host an AMA in the #Binance Telegram https://t.co/xYcqyDnJDx
@zilliqa $ZIL
@KomodoPlatform $KMD
@metalpaysme $MTL
@wavesplatform $WAVES
@zcoinofficial $XZC
@NeblioTeam $NEBL
There will be two polls with the rules included on the second
Poll ...
Retweets
180
Likes
338
kennet_h04-Feb-19 04:38 AM
I haven't been keeping up with crypto in a while. I see that KMD has been forked.I keep me KMD keys, on the ledger nano s. Can i lose access to my funds if i just keep them there, or is it okay not to get a new wallet, before i have to move my funds?
Alright04-Feb-19 04:39 AM
They're fine on the ledger
kennet_h04-Feb-19 04:39 AM
thanks!
Is there a way to get rewards, while still only keeping the keys on the Ledger?
Alright04-Feb-19 04:43 AM
There is an app in testing to do this, but as of right now, no


?6
7
8
9
10
T
Hr
V
The
New
York
copyright
reserved
Botanical
Garden
Exanluad
for
THE
NEW
YORK
BOTANICAL
GAWBÈENÇiEiÈÈcAN
Fl0M
PLANTS
FROM
THE
VICINITY
OF
MATANZA8,
QUBA
'
N.
L.
BRITTO
E.
Q.
BRITTON
V
Collectors
J.
A.
8HAFER
J
[xtfiniti
hr
HOITTH
ÈÇÇCM*
±*
(%>£
*~bt.
&
u$LLv,
7\
'
(jus.a
NEW
YORK
BOTANICA
II
Qfc&feOUjdL.
BY
MILDRED
E.
MATHIAS
015010
Legend -
Level of confidence that token is an accurately-transcribed word
extremely low
very low
low
undetermined
medium
high
very high


Welcome to the Index!
Centre's Computer Science Program Staff
Centre's Mathematics Program Staff
Centre's Economics Program Staff
Centre's Politics Program Staff
Centre's Studio Art Program Staff


DJ Tini data uses data to guess the genre of songs just by looking at its lyrics, try it out! It works!.


PROJECTS
Shot Caller
Are you thirsty and don’t know where to turn? Shot caller is an all-in-one solution to help solve your dry spell. This application helps the user find a good drink (with a sense of humor) and even teaches you how to make it. When you choose your booze, you call all the shots. Click here or on the image to view website.
React Movie Review
Share how you really feel about a movie! Users can read or write movie reviews, but more than that - they can share how they viscerally feel about a movie with a GIF. React Movie Review taps into the OMDB API to get the latest movie data that is searchable by the user. When users write their movie review, they have the option to enter a word describing how the movie makes them feel. At that point, GIPHY options pop up for the user to chose. Both the review and the GIF URL are stored so those with a login can view past movie reviews. Passport.js was implemented for login authentication. This app uses a Node and Express server and is backed by a MySql database and follows the MVC (Model-View-Controller) paradigm. Click here or on the image to view the website deployed to Heroku.
Weather Dashboard
This Weather Dashboard give you the current weather and three-hour forecast for cities all over the word. Simply type in the city and press the search button. To view a previously searched city, click the listed city on the left panel. Click here or on the image to view website.
Coding Quiz
This Coding Quiz asks user ten JavaScript questions with four clickable multiple choice answers. Once the user chooses an answer, a prompt appears letting the user know if the answer is "Corret" or "Wrong". There is a timer for 60 seconds on the top right corner Click here or on the image to view website.


|
fop 1.1 | |||||||||
| PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES |
See:
Description
| Interface Summary | |
|---|---|
| AFPConstants | Constants used by the AFP renderer. |
| AFPEventProducer | Event producer interface for AFP-specific events. |
| Completable | Set and expose the internal completeness of an object. |
| PaintingInfo | Generic painting information interface |
| Startable | Set and expose whether an object has started or not. |
| Streamable | Implementing object is able to write to an OutputStream |
| StructuredData | An AFP object which is able to know its own data length prior to writeToStream() |
| Class Summary | |
|---|---|
| AbstractAFPPainter | A base AFP painter |
| AFPBorderPainter | Handles the drawing of borders/lines in AFP |
| AFPDataObjectFactory | Factory for high level data objects (Image/Graphics etc) |
| AFPDataObjectInfo | A list of parameters associated with an AFP data objects |
| AFPDitheredRectanglePainter | A painter of rectangles in AFP |
| AFPEventProducer.Provider | Provider class for the event producer. |
| AFPGraphics2D | This is a concrete implementation of AbstractGraphics2D (and
therefore of Graphics2D ) which is able to generate GOCA byte
codes. |
| AFPGraphicsObjectInfo | A graphics object info which contains necessary painting objects |
| AFPImageObjectInfo | A list of parameters associated with an image |
| AFPLineDataInfo | Line data information |
| AFPObjectAreaInfo | A common class used to convey locations, dimensions and resolutions of data objects. |
| AFPPaintingState | This keeps information about the current painting state when writing to an AFP datastream. |
| AFPRectanglePainter | A painter of rectangles in AFP |
| AFPResourceInfo | The level at which a resource is to reside in the AFP output |
| AFPResourceLevel | A resource level |
| AFPResourceLevelDefaults | This class holds resource levels defaults for the various resource types. |
| AFPResourceManager | Manages the creation and storage of document resources |
| AFPStreamer | Manages the streaming of the AFP output |
| AFPTextDataInfo | Text data information |
| AFPUnitConverter | AFP Unit converter |
| BorderPaintingInfo | Border painting information |
| DataStream | A data stream is a continuous ordered stream of data elements and objects conforming to a given format. |
| Factory | Creator of MO:DCA structured field objects |
| RectanglePaintingInfo | Filled rectangle painting information |
Contains an AFP library.
|
fop 1.1 | |||||||||
| PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES |


GETUSERSHELL
Section: Linux Programmer's Manual (3)
Updated: 2013-06-21
Index
Return to Main Contents
NAME
getusershell, setusershell, endusershell - get permitted user shells
SYNOPSIS
#include <unistd.h>
char *getusershell(void);
void setusershell(void);
void endusershell(void);
Feature Test Macro Requirements for glibc (see
feature_test_macros(7)):
getusershell(),
setusershell(),
endusershell():
-
_BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)
DESCRIPTION
The
getusershell()
function returns the next line from the file
/etc/shells,
opening the file if necessary.
The line should contain
the pathname of a valid user shell.
If
/etc/shells
does not exist or
is unreadable,
getusershell()
behaves as if
/bin/sh
and
/bin/csh
were listed in the file.
The
setusershell()
function rewinds
/etc/shells.
The
endusershell()
function closes
/etc/shells.
RETURN VALUE
The
getusershell()
function returns NULL on end-of-file.
FILES
/etc/shells
ATTRIBUTES
Multithreading (see pthreads(7))
The
getusershell(),
setusershell()
and
endusershell()
functions are not thread-safe.
CONFORMING TO
4.3BSD.
SEE ALSO
shells(5)
Index
- NAME
-
- SYNOPSIS
-
- DESCRIPTION
-
- RETURN VALUE
-
- FILES
-
- ATTRIBUTES
-
- Multithreading (see pthreads(7))
-
- CONFORMING TO
-
- SEE ALSO
-
This document was created by
man2html,
using the manual pages.
Time: 02:55:07 GMT, September 18, 2014


Name
Email Adress
Change Password
Where will your knocki be
Home
Business
Other
Knocki Nickname
What surface
lights
Alarm
Air Conditioner
Clock
Tap or hold on the Green


Doctor Search
Search by Symptom
Search by Doctor
City
Search by Symptom
-- select an option --
Search
City
Specialty
-- select an option --
Search by Doctor Name
Search


© 2019
| iridaceus iridacea iridaceum | Iris like | |||
| iris | irid | noun/f | ιριϛ, ιδοϛ iris; rainbow; female messenger, announcer of the gods | |
| aceus | ace | adj | adjective suffix for nouns: resembles, of..., ...like, mixture using, fragrance of; borrowed from nouns declined like ...ax, ...acis + eus | |
| Paspalum iridaceum Mez Axonopus iridaceus (Mez) Parodi | ||||
| iridoides iridoides iridoides | Iris like | |||
| iris | irid | noun/f | ιριϛ, ιδοϛ iris; rainbow; female messenger, announcer of the gods | |
| oides | oid | adj | -οειδεϛ adjective suffix for nouns: like, resemble | |
| iridollae iridollarum | pots (of gold at the end of the) rainbow | |||
| iris | irid | noun/f | ιριϛ, ιδοϛ iris; rainbow; female messenger, announcer of the gods | |
| generative of olla | oll | noun/f | L. a pot or jar | |
| Lilium iridollae Henry | ||||
| irriguus irrigua irriguum | very wet | |||
| irriguus | irrigu | adj | watered, irrigated; well soaked, saturated | |
| Amblystegium irriguum (Hook. & Wils.) Schimp. in B.S.G. | ||||
| isauricus isaurica isauricum | of Isauria | |||
| isauricus | isauric | adj | Isauria Ισαυρια of Isauria, a country of Asia between Pamphyllia & Cilicia | |
| icus -ικοϛ adjective suffix for nouns: belonging to, from, of | ||||
| isophyllus isophylla isophyllum | equal sized leaves | |||
| isos | is | adj | ισοϛ equal to, same as, like | |
| o | o | cnct | connective vowel in botanical Latin, usually for Greek words but in some cases, such as color tingeing, for Latin words | |
| phyllon | phyll | noun/n | φυλλον leaf; foliage | |
| us | adj | Latinizing suffix | ||
| Campanula isophylla Moretti | ||||
| italicus italica italicum | Italian | |||
| italicus | italic | adj | Italia ιταλοϛ Italy | |
| icus -ικοϛ adjective suffix for nouns: belonging to, from, of | ||||
| Anchusa italica Retz. Arum italicum P.Mill. Gladiolus italicus P.Mill. |


We work as a team in every aspect of the project and be together
We keep direct communication with all concerned people
Everyone has that freedom to share their own ideas
We focus on the best working outcomes to keep our team rejoiced
We conduct Workshops, Trainings & Hackathons to make sure you are not behind this Technology world
We help you to learn better in your interested field with all the supporting materials in collaboration with your kind
The platform you'll get to present your ideas and works with your team of same kind. It is all about the passion
Our team won't make you feel down of yourself, we will be inspiring, motivating & supporting your ethics all the time


Augmented Reality
Spatial Augmented Reality
Spatial Augmented Reality
Inner Mirror
Tangible Mirror
Teegi: Tangible EEG Interface
Teegi: Tangible EEG Interface
Going Further
Acknowledgeable By
Representations
Toolkit Overview
Feedback
3D Printing
SAR
Customization
Use Case
What's Next?
Well-Being Focused Applications
Thank You!
http://github.com/potioc/tobe


GMAC Queue driver. More...
#include <gmacd.h>
Public Attributes | |
| uint8_t * | pTxBuffer |
| uint8_t * | pRxBuffer |
| Pointer to allocated RX buffer. More... | |
| sGmacRxDescriptor * | pRxD |
| Pointer to Rx TDs (must be 8-byte aligned) More... | |
| sGmacTxDescriptor * | pTxD |
| Pointer to Tx TDs (must be 8-byte aligned) More... | |
| fGmacdTransferCallback | fRxCb |
| Optional callback to be invoked once a frame has been received. More... | |
| fGmacdWakeupCallback | fWakupCb |
| Optional callback to be invoked once several TD have been released. More... | |
| fGmacdTransferCallback * | fTxCbList |
| Optional callback list to be invoked once TD has been processed. More... | |
| fGmacdTxPtpEvtCallBack | fTxPtpEvtCb |
| Optional callback to be invoked on transmit of PTP Event messages. More... | |
| uint16_t | wRxListSize |
| RX TD list size. More... | |
| uint16_t | wRxI |
| RX index for current processing TD. More... | |
| uint16_t | wTxListSize |
| TX TD list size. More... | |
| uint16_t | wTxHead |
| Circular buffer head pointer by upper layer (buffer to be sent) More... | |
| uint16_t | wTxTail |
| Circular buffer tail pointer incremented by handlers (buffer sent) More... | |
| uint8_t | bWakeupThreshold |
| Number of free TD before wakeup callback is invoked. More... | |
| uint16_t | wTxBufferSize |
| RX buffer size. More... | |
| uint16_t | wRxBufferSize |
GMAC Queue driver.
| uint8_t _GmacQueueDriver::bWakeupThreshold |
Number of free TD before wakeup callback is invoked.
| fGmacdTransferCallback _GmacQueueDriver::fRxCb |
Optional callback to be invoked once a frame has been received.
| fGmacdTransferCallback* _GmacQueueDriver::fTxCbList |
Optional callback list to be invoked once TD has been processed.
| fGmacdTxPtpEvtCallBack _GmacQueueDriver::fTxPtpEvtCb |
Optional callback to be invoked on transmit of PTP Event messages.
| fGmacdWakeupCallback _GmacQueueDriver::fWakupCb |
Optional callback to be invoked once several TD have been released.
| uint8_t* _GmacQueueDriver::pRxBuffer |
Pointer to allocated RX buffer.
| sGmacRxDescriptor* _GmacQueueDriver::pRxD |
Pointer to Rx TDs (must be 8-byte aligned)
| uint8_t* _GmacQueueDriver::pTxBuffer |
| sGmacTxDescriptor* _GmacQueueDriver::pTxD |
Pointer to Tx TDs (must be 8-byte aligned)
| uint16_t _GmacQueueDriver::wRxBufferSize |
| uint16_t _GmacQueueDriver::wRxI |
RX index for current processing TD.
| uint16_t _GmacQueueDriver::wRxListSize |
RX TD list size.
| uint16_t _GmacQueueDriver::wTxBufferSize |
RX buffer size.
| uint16_t _GmacQueueDriver::wTxHead |
Circular buffer head pointer by upper layer (buffer to be sent)
| uint16_t _GmacQueueDriver::wTxListSize |
TX TD list size.
| uint16_t _GmacQueueDriver::wTxTail |
Circular buffer tail pointer incremented by handlers (buffer sent)


Missouri officials confirm human remains recovered in Missouri, Nebraska are Diemel brothers
by Brandon ArbuckleKINGSTON, Mo. - Missouri officials have confirmed that the human remains recovered in Missouri and Nebraska are those of the Diemel brothers.
According to KCTV, authorities found the remains during an investigation Thursday.
Justin and Nicholas Diemel, who were originally from Shawano County, Wisconsin, vanished in Missouri in July.
Nicholas Diemel's remains were found at a farm in Caldwell County, Missouri, while Justin Diemel's remains were discovered in a livestock trailer in Lincoln County, Nebraska.
Authorities used dental records to confirm the identity of the remains.
Garland Joseph Nelson, who is an alleged suspect in the case, remains in jail in Kingston, Missouri.
KCTV said Nelson was charged with two counts of first-degree murder, two counts of abandonment of a corpse, two counts of tampering with physical evidence, two counts of armed criminal action, tampering with a motor vehicle and unlawful possession of a firearm.


Bootstrap is an open source toolkit for developing with HTML, CSS, and JS. Quickly prototype your ideas or build your entire app with our Sass variables and mixins, responsive grid system, extensive prebuilt components, and powerful plugins built on jQuery.
MySQL is an open-source relational database management system. Its name is a combination of "My", the name of co-founder Michael Widenius's daughter, and "SQL", the abbreviation for Structured Query Language
JavaScript, often abbreviated as JS, is a high-level, interpreted programming language. It is a language which is also characterized as dynamic, weakly typed, prototype-based and multi-paradigm.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sapiente esse necessitatibus neque.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Reiciendis ipsam eos, nam perspiciatis natus commodi similique totam consectetur praesentium molestiae atque exercitationem ut consequuntur, sed eveniet, magni nostrum sint fuga.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sapiente esse necessitatibus neque.


This theme features some wonderful photography courtesy of Death to the Stock Photo.
Email Marketing Did you know that Email Marketing is the most cost-effective method to reach your target audience? Creative Marketing Services (CMS) can help you build your business with Email Marketing..
It's Moderate - an extraordinary return for an insignificant venture. It's Powerful - transform your clients into steadfast clients. It's Quick - create a moment reaction. It's Quantifiable - see who is opening your messages and what joins they tapped on. Here's the manner by which we can give email promoting something to do for you: Make an altered email promoting arrangement that will drive big-time business comes about. Outline proficient looking messages - like email bulletins and advancements - that fabricate dependability and drive activity. Compose convincing duplicate that gets and holds your group of onlookers' consideration. Enable you to assemble, refresh, and fragment your rundown of email locations for most extreme outcomes. Email Showcasing is the ideal fit - it drives rehash business, referrals, and primary concern income. Give us a chance to convey the energy of email advertising to your business!
Learn MoreHow Can You Improve Your Marketing Results?
With CMS as your outer showcasing asset, you'll have more opportunity to concentrate on other basic parts of your business. CMS makes, oversees, actualizes and investigates all parts of your advertising program. You advantage by having a staff of prepared promoting experts proactively deal with your advertising projects and enable you to achieve your objectives.
The CMS group of experts create compelling advertising programs which incorporate conventional, non-customary and grass roots activities with a business person approach customized to meet the objectives and goals of our customers. This incorporates any showcasing activity whether it be key arranging and improvement, Web promoting, WordPress site advancement, marking, showcasing correspondences, publicizing, PR or advancements. See our entire rundown of advertising administrations.
Our Procedure We start by assessing your present advertising projects to recognize where there are open doors for streamlining. This incorporates investigating your top rivals and distinguishing/building up your separation and key points of interest over them. From that point we build up a redid incorporated showcasing arrangement which incorporates our proposals for the top organized promoting activities that all will give you the best outcomes.
Learn MoreInnovative Advertising Administrations is a full administration showcasing office that represents considerable authority in helping customers amplify their business potential by enabling them to concentrate on their qualities and needs while outsourcing their promoting.
We create practical promoting programs which incorporate customary, non-conventional, and grass roots activities with an entrepreneurial approach custom-made to meet the objectives and goals of our customers. CMS, adopts an organization strategy with regards to building associations with our customers.
Email Showcasing Web based Showcasing Web optimization (Website improvement) SEM (Web search tool Showcasing) PPC (Pay-per-click) Web architecture Visual computerization Showcasing Counseling Showcasing Correspondences Key Arranging Statistical surveying Marking Occasions Publicizing Advertising Advancements
Learn MoreInnovative Showcasing Administrations, LLC and our group of first class site engineers have practical experience in the plan and advancement of custom WordPress sites. An organization's site is the establishment to their Web Advertising and it is basic that the site is intended to interest the intended interest group, is anything but difficult to explore and incorporates convincing suggestions to take action that inspire guests to make a move.
We adopt a key advertising strategy to the improvement of sites and join imaginative systems intended to draw in target markets, increment transformation rates, construct mark mindfulness, lead era, R.O.I. also, meet or surpass the desires of our customers. Our group of web designers, showcasing specialists and substance designers (otherwise known as marketing specialists) custom tailor every site extend in light of the particular needs and objectives of every customer whether they're a start-up, little or medium estimated business or Fortune 500 organization. Each of the sites we create incorporate a Responsive Outline - this permits one webpage configuration to work and explore flawlessly crosswise over various gadgets, therefore wiping out the requirement for a different versatile rendition of the site.
After the dispatch of every site, we give custom preparing to show customers how they can without much of a stretch refresh and deal with their sites. We additionally give continuous site bolster, an upkeep program, and an assortment of other web based advertising administrations, for example, site examination, blogging, email promoting, web-based social networking and internet showcasing methodologies.
Get in touch with Us Today to plan an arrangement to talk about how CMS can join forces with you to help achieve your site and internet promoting objectives. Meanwhile, see our Site Agenda: Best 10 Must Have Things for Your Landing page
Learn More


To delete a term from the glossary, access the Glossary tool and follow these steps:
Sakai does not display a warning message before deleting the term. Instead, Sakai immediately removes the term from the list.


IOCL may import 'costly' Russian oil as it aims to diversify sources
he nation is gradually tapping new sources to hedge itself against geopolitical risks.
by ReutersIndian Oil Corp, the country's top refiner, is considering importing Russian oil, its chairman Sanjiv Singh said on Monday, as the company aims to diversify its oil import sources.
India, the world's third-biggest oil importer and consumer, ships in about 60% of its overall crude needs from the middle eastern countries. The nation is gradually tapping new sources to hedge itself against geopolitical risks.
Indian state refiners - IOC, Hindustan Petroleum Corp Ltd, Bharat Petroleum Corp Ltd and Mangalore Refinery and Petrochemicals Ltd - hardly buy Russian oil as high transportation costs make the crude costly compared to the grades in Middle East.
"We are exploring all options, we are discussing," Singh said, when asked if his company would sign a term contract with Russian companies.


Bursa ends morning session lower
KUALA LUMPUR, Nov 20 — Bursa Malaysia ended the morning session lower, tracking the downtrend in regional peers as market sentiment was clouded by bleak prospects for a US-China trade deal.
At 12.30pm, the benchmark FTSE Bursa Malaysia KCLI (FBM KLCI) lost 5.96 points to 1,599.35 from 1,605.31 on Tuesday after moving between 1,598.32 and 1,603.6.
It opened 3.89 points weaker at 1,601.42.
Petronas-related stocks declined on concerns about excess global crude supply.
Petronas Chemicals, which dragged the composite index down by 1.557 points, fell 11 sen to RM7.25, while Petronas Gas and Petronas Dagangan lost 30 sen each to RM16.40 and RM23.92 respectively.
On the broader market, there were 364 losers and 319 gainers, with 359 counters unchanged, 966 untraded and 16 others suspended.
Turnover amounted to 1.55 billion shares worth RM838.33 million.
Among heavyweights, Tenaga erased 12 sen to RM13.64, Public Bank and IHH shed four sen each to RM19.96 and RM5.41 respectively, while CIMB trimmed two sen to RM5.36.
Maybank, however, added one sen to RM8.66.
Of the actives, Alam Maritim bagged 2.5 sen to 12.5 sen, Bumi Armada added one sen to 54 sen, Fintec perked 1.5 sen to 9.5 sen, while Trived inched up half-a-sen to 1.5 sen.
The FBM Emas Index was 20.38 points lower at 11,348.87, the FBMT 100 Index lost 21.76 points to 11,158.27, the FBM Emas Shariah Index declined 23.65 points to 11,872.08 and the FBM Ace slid 18.2 points to 4,933.07.
The FBM 70 bagged 53.83 points to 14,137.97.
Sector-wise, the Financial Services Index gave up 17.63 points for 15,642.76, the Industrial Products & Services Index slipped 1.14 points to 152.16, but the Plantation Index chalked up 49.29 points to 7,013.12. — Bernama


Company A Warehouse: 2 Warehouse name : 2040 ft available of 5000 ft Warehouse name : 2040 ft available of 5000 ft Location: Washington


NOS is the leading entertainment group in Portugal and NOS Play is one of their streaming services. The client wanted to create an onboarding experience for their mobile and web app in hopes to engage their customers to use the service more. After the user research it was understood a redesign was also in order to suit their needs
The problem was that NOS customers were not really using the app because they found the app tedious, confusing and difficult to navigate through.
The goal was to make the service more engaging, intuitive and improve menu navigation
Solutions included static menus with simplified options and layout + engaging features like customizable lists and the option to connect to social media
UX/UI designer responsible for conducting user research, development, creating the onboarding experience and the redesign.
May- June 2020 using the Agile method and delivering prototypes
Google forms, Adobe XD, Photoshop & Illustrator
The research can be divided into four categories; Desk, User, Market and Competitive research. My focus was to get to know NOS and their users to suss out pain points, frustrations and room for improvement. Through the user and competitive research I could get a better idea of the users expectation of a streaming service, and also be able to see where the gaps where to brainstorm design opportunities
Since NOS is Portuguese I choose to do the survey in Portuguese to make sure there wouldn't be any confusion or lack of expression because of a language barrier. At this stage I wanted to know what NOS services they used, what services they use to stream movies and shows and also what they like and don't like about NOS Play. 72 people participated in the survey.
The survey revealed that almost 80% of the NOS customers use Netlix to
stream movies and shows, and 72% use HBO. According to my survey only 20% of NOS customers use NOS Play.
2/9 interviewees said they use NOS Play once a month, otherwise they use Netflix and HBO daily.
I started
looking into their competition to find out what they did well and to see if there was something they could
improve on.
In the interviews and surveys 80% said that they gave up on using NOS Play because they found the interface confusing to use. To dig into this deeper I thought it could be good to do a UX audit in form of giving tasks to first time users and see how they perform on the website. I did 5 user testing with simple tasks like: "find any thriller movie" and "navigate from movies to tv shows"
It was time to inspect all the information gathered in the user research period
and organize and classify everything to get an overview. In order to empathize
with the users to the maxinum I used various tools like affinity map, user journeys, user personas and
user stories to put myself in their shoes.
By looking at the users pain points,
what the competitors were doing and what was missing on the market, a How might we..? question was formed and lead the way during the brainstorming phase
Now for the tricky part - Validating the design solutions with the users through prototypes! To get into it quickly and to save myself from potentially wasting time designing I started with a Low-fi prototype to see if the framework, my intention and navigation made sense and was intuitive. The users gave some feedback which was implemented for the Mid-fi prototype which was tested on Useberry, an amazing platform where you can upload your prototype with a task for the users to complete. It records all their actions so you can see where they got confused. Pretty handy! From there follows more iterations and improvements untill we move on to the Hi-fidelity prototype
Low-fi
Mid-fi
New proposed features of NOS Play on mobile:
1. Fun onboarding experience ensuring a more tailored experience from the start
2. Static menus to not be confused about where you are
3. The ability to connect to social media to engage with friends
Hi-fi mobile
New proposed featurs of NOS Play on desktop:
1. Fun onboarding experience ensuring a more tailored experience from the start
2. Static menus so the viewing always know where they are and making navigation easier
3. Extended filter options so the viewer can get very specific on what they want to watch
4. The option to connect to social media to engage and share content with friends
5. Having IMDB ratings on the movies and TV-shows integrated
When I started with this project I was very unsure on how to tackle it, which left me a bit flustered. I let the research lead the way and decide which path to take and learnt to trust the process! I expected to design an onboarding experience, but ended up redesigning the platform as well because of what the users told me in the research phase.


FILE
New
Open
Save
Save As
Print
Event Trace
groupClick
menuCreate
MouseOver
MouseOut
Click
TabClick
TabSelect
ToggleButtonClick
groupExpand


Distance
: distance
| Values: | Dist | Mid | Prox |
Distance
is typically a feature of demonstrative pronouns,
determiners or adverbs. Its value distinguishes whether we are talking about
something is close to the speaker or something removed from the speaker.
Armenian make a three-way distinction between demonstratives.
Prox
: proximal
Indicate objects near to the speaker.
Examples
- սա, այս, այսպիսի, այսքան, այստեղ, սույն “this, this, such, this many, here, this”
Mid
: medial
Objects are near to the addressee.
Examples
- դա, այդ, այդպիսի, այդքան, այդտեղ “that, that, such, that many, there”
Dist
: distal
Objects far from both.
Examples
- այն, այնպիսի, այնքան, այնտեղ, նույն “that, such, to many, there, same”


Infraction rules can be created to automatically add a user to a group when an infraction with points is issued to a user. When creating an infraction the points level must be unique, such that only a single rule can be applied at a specified number of points. Once infractions expire and the number of points is reduced past the rules points the user will automatically be removed from that group.
Editing an existing rule does not apply to users who already have infraction points. To reassign users to groups, use the recalculate button.
Rules can only assign non-system groups to users, so such groups must be created first.


public abstract class OSCServer extends java.lang.Object implements OSCBidi
In UDP
mode, simply one receiver and transmitter are handling all the
communication. In TCP
mode, a ServerSocketChannel
is set up to
wait for incoming connection requests. Requests are satisfied by opening a new receiver
and transmitter for each connection.
In the following example, a simple TCP server is created that accepts connections at
port 0x5454. The connections understand the OSC commands /pause
(disconnect the server for a few seconds), /quit
(quit the server),
and /dumpOSC
(turn on/off printing of message traffic). Each incoming
message is replied with a /done
message.
private boolean pause = false; // (must be an instance or static field to be useable // from an anonymous inner class) final Object sync = new Object(); final OSCServer c; try { // create TCP server on loopback port 0x5454 c = OSCServer.newUsing( OSCServer.TCP, 0x5454, true ); } catch( IOException e1 ) { e1.printStackTrace(); return; } // now add a listener for incoming messages from // any of the active connections c.addOSCListener( new OSCListener() { public void messageReceived( OSCMessage m, SocketAddress addr, long time ) { // first of all, send a reply message (just a demo) try { c.send( new OSCMessage( "/done", new Object[] { m.getName() }), addr ); } catch( IOException e1 ) { e1.printStackTrace(); } if( m.getName().equals( "/pause" )) { // tell the main thread to pause the server, // wake up the main thread pause = true; synchronized( sync ) { sync.notifyAll(); } } else if( m.getName().equals( "/quit" )) { // wake up the main thread synchronized( sync ) { sync.notifyAll(); } } else if( m.getName().equals( "/dumpOSC" )) { // change dumping behaviour c.dumpOSC( ((Number) m.getArg( 0 )).intValue(), System.err ); } } }); try { do { if( pause ) { System.out.println( " waiting four seconds..." ); try { Thread.sleep( 4000 ); } catch( InterruptedException e1 ) {} pause = false; } System.out.println( " start()" ); // start the server (make it attentive for incoming connection requests) c.start(); try { synchronized( sync ) { sync.wait(); } } catch( InterruptedException e1 ) {} System.out.println( " stop()" ); c.stop(); } while( pause ); } catch( IOException e1 ) { e1.printStackTrace(); } // kill the server, free its resources c.dispose();Here is an example of sending commands to this server from SuperCollider:
n = NetAddr( "<IP_ADDRESS>", 0x5454 ); r = OSCresponderNode( n, '/done', { arg time, resp, msg; ("reply : " ++ msg.asString).postln; }).add; n.connect; n.sendMsg( '/dumpOSC', 3 ); n.sendMsg( '/pause' ); n.isConnected; // --> false n.connect; n.sendMsg( '/quit' ); r.remove;
OSCClient
| Modifier and Type | Field and Description |
|---|---|
protected OSCPacketCodec |
defaultCodec |
DEFAULTBUFSIZE, kDumpBoth, kDumpHex, kDumpOff, kDumpText, TCP, UDP
| Modifier | Constructor and Description |
|---|---|
protected |
OSCServer(OSCPacketCodec c,
java.lang.String protocol) |
| Modifier and Type | Method and Description |
|---|---|
abstract void |
addOSCListener(OSCListener listener)
Registers a listener that gets informed
about incoming messages (from any of the connected clients).
|
abstract void |
dispose()
Destroys the server and frees resources associated with it.
|
abstract void |
dumpIncomingOSC(int mode,
java.io.PrintStream stream)
Changes the way incoming messages are dumped
to the console.
|
void |
dumpOSC(int mode,
java.io.PrintStream stream)
Changes the way processed OSC messages are printed to the standard err console.
|
abstract void |
dumpOutgoingOSC(int mode,
java.io.PrintStream stream)
Changes the way outgoing messages are dumped
to the console.
|
abstract int |
getBufferSize()
Queries the buffer size used for coding or decoding OSC messages.
|
OSCPacketCodec |
getCodec()
Queries the codec used in packet coding and decoding.
|
abstract OSCPacketCodec |
getCodec(java.net.SocketAddress target)
Queries the codec used in packet coding and decoding
for a given client socket.
|
abstract java.net.InetSocketAddress |
getLocalAddress()
Queries the server socket's address.
|
protected java.net.InetSocketAddress |
getLocalAddress(java.net.InetAddress addr,
int port) |
java.lang.String |
getProtocol()
Queries the transport protocol used by this communicator.
|
abstract boolean |
isActive()
Checks whether the server is active (was started) or not (is stopped).
|
static OSCServer |
newUsing(OSCPacketCodec c,
java.lang.String protocol)
Creates a new instance of an
OSCServer , using
a specific codec and transport protocol. |
static OSCServer |
newUsing(OSCPacketCodec c,
java.lang.String protocol,
java.net.InetSocketAddress localAddress)
Creates a new instance of an
OSCServer , using
a given codec, a specific transport protocol and local socket address. |
static OSCServer |
newUsing(OSCPacketCodec c,
java.lang.String protocol,
int port)
Creates a new instance of an
OSCServer , using
a specific codec and transport protocol and port. |
static OSCServer |
newUsing(OSCPacketCodec c,
java.lang.String protocol,
int port,
boolean loopBack)
Creates a new instance of an
OSCServer , using
a specific codec and transport protocol and port. |
static OSCServer |
newUsing(java.lang.String protocol)
Creates a new instance of an
OSCServer , using
default codec and a specific transport protocol. |
static OSCServer |
newUsing(java.lang.String protocol,
java.net.InetSocketAddress localAddress)
Creates a new instance of an
OSCServer , using
default codec and a specific transport protocol and local socket address. |
static OSCServer |
newUsing(java.lang.String protocol,
int port)
Creates a new instance of an
OSCServer , using
default codec and a specific transport protocol and port. |
static OSCServer |
newUsing(java.lang.String protocol,
int port,
boolean loopBack)
Creates a new instance of an
OSCServer , using
default codec and a specific transport protocol and port. |
abstract void |
removeOSCListener(OSCListener listener)
Unregisters a listener that gets informed
about incoming messages
|
abstract void |
send(OSCPacket p,
java.net.SocketAddress target)
Sends an OSC packet (bundle or message) to the given
network address.
|
abstract void |
setBufferSize(int size)
Adjusts the buffer size for OSC messages.
|
void |
setCodec(OSCPacketCodec c)
Specifies which codec is used in packet coding and decoding.
|
abstract void |
setCodec(OSCPacketCodec c,
java.net.SocketAddress target)
Specifies which codec is used in packet coding and decoding
for a given client socket.
|
abstract void |
start()
Starts the server.
|
abstract void |
stop()
Stops the server.
|
protected OSCPacketCodec defaultCodec
protected OSCServer(OSCPacketCodec c, java.lang.String protocol)
public static OSCServer newUsing(java.lang.String protocol) throws java.io.IOException
OSCServer
, using
default codec and a specific transport protocol. It picks an arbitrary free port
and uses the local machine's IP. To determine the resulting
port, you can use getLocalAddress
afterwards.protocol
- the protocol to use, currently either UDP
or TCP
java.io.IOException
- if a networking error occurs while creating the socketjava.lang.IllegalArgumentException
- if an illegal protocol is usedOSCChannel.UDP
,
OSCChannel.TCP
,
getLocalAddress()
public static OSCServer newUsing(OSCPacketCodec c, java.lang.String protocol) throws java.io.IOException
OSCServer
, using
a specific codec and transport protocol. It picks an arbitrary free port
and uses the local machine's IP. To determine the resulting
port, you can use getLocalAddress
afterwards.c
- the codec to useprotocol
- the protocol to use, currently either UDP
or TCP
java.io.IOException
- if a networking error occurs while creating the socketjava.lang.IllegalArgumentException
- if an illegal protocol is usedOSCChannel.UDP
,
OSCChannel.TCP
,
getLocalAddress()
public static OSCServer newUsing(java.lang.String protocol, int port) throws java.io.IOException
OSCServer
, using
default codec and a specific transport protocol and port. It
uses the local machine's IP.
Note that the port
specifies the
local socket (at which the server listens and from which it sends, or
in the case of TCP transport, from which it establishes client connections),
it does not determine the remote sockets. The address of a remote client
communicating to this server is passed in the messageReceived
method of any registered OSCListener
, and must be picked
up and handed in to the send
method to reply back to the client!
protocol
- the protocol to use, currently either UDP
or TCP
port
- the port number for the OSC socket, or 0
to use an arbitrary free portjava.io.IOException
- if a networking error occurs while creating the socketjava.lang.IllegalArgumentException
- if an illegal protocol is usedpublic static OSCServer newUsing(OSCPacketCodec c, java.lang.String protocol, int port) throws java.io.IOException
OSCServer
, using
a specific codec and transport protocol and port. It
uses the local machine's IP.
Note that the port
specifies the
local socket (at which the server listens and from which it sends, or
in the case of TCP transport, from which it establishes client connections),
it does not determine the remote sockets. The address of a remote client
communicating to this server is passed in the messageReceived
method of any registered OSCListener
, and must be picked
up and handed in to the send
method to reply back to the client!
c
- the codec to useprotocol
- the protocol to use, currently either UDP
or TCP
port
- the port number for the OSC socket, or 0
to use an arbitrary free portjava.io.IOException
- if a networking error occurs while creating the socketjava.lang.IllegalArgumentException
- if an illegal protocol is usedpublic static OSCServer newUsing(java.lang.String protocol, int port, boolean loopBack) throws java.io.IOException
OSCServer
, using
default codec and a specific transport protocol and port. It
uses the local machine's IP or the "loopback" address.
Note that the port
specifies the
local socket (at which the server listens and from which it sends, or
in the case of TCP transport, from which it establishes client connections),
it does not determine the remote sockets. The address of a remote client
communicating to this server is passed in the messageReceived
method of any registered OSCListener
, and must be picked
up and handed in to the send
method to reply back to the client!
protocol
- the protocol to use, currently either UDP
or TCP
port
- the port number for the OSC socket, or 0
to use an arbitrary free portloopBack
- if true
, the "loopback" address ("<IP_ADDRESS>"
)
is used which limits communication to the local machine. If false
, the
special IP "<IP_ADDRESS>"
is used which means messages from any IP as well as from
the loopback are acceptedjava.io.IOException
- if a networking error occurs while creating the socketjava.lang.IllegalArgumentException
- if an illegal protocol is usedpublic static OSCServer newUsing(OSCPacketCodec c, java.lang.String protocol, int port, boolean loopBack) throws java.io.IOException
OSCServer
, using
a specific codec and transport protocol and port. It
uses the local machine's IP or the "loopback" address.
Note that the port
specifies the
local socket (at which the server listens and from which it sends, or
in the case of TCP transport, from which it establishes client connections),
it does not determine the remote sockets. The address of a remote client
communicating to this server is passed in the messageReceived
method of any registered OSCListener
, and must be picked
up and handed in to the send
method to reply back to the client!
c
- the codec to useprotocol
- the protocol to use, currently either UDP
or TCP
port
- the port number for the OSC socket, or 0
to use an arbitrary free portloopBack
- if true
, the "loopback" address ("<IP_ADDRESS>"
)
is used which limits communication to the local machine. If false
, the
special IP "<IP_ADDRESS>"
is used which means messages from any IP as well as from
the loopback are acceptedjava.io.IOException
- if a networking error occurs while creating the socketjava.lang.IllegalArgumentException
- if an illegal protocol is usedpublic static OSCServer newUsing(java.lang.String protocol, java.net.InetSocketAddress localAddress) throws java.io.IOException
OSCServer
, using
default codec and a specific transport protocol and local socket address.protocol
- the protocol to use, currently either UDP
or TCP
localAddress
- a valid address to use for the OSC socket. If the port is 0
,
an arbitrary free port is picked when the receiver is started. (you can find out
the actual port in this case by calling getLocalAddress()
after the
server was started).java.io.IOException
- if a networking error occurs while creating the socketjava.lang.IllegalArgumentException
- if an illegal protocol is usedOSCChannel.UDP
,
OSCChannel.TCP
,
getLocalAddress()
public static OSCServer newUsing(OSCPacketCodec c, java.lang.String protocol, java.net.InetSocketAddress localAddress) throws java.io.IOException
OSCServer
, using
a given codec, a specific transport protocol and local socket address.c
- the codec to useprotocol
- the protocol to use, currently either UDP
or TCP
localAddress
- a valid address to use for the OSC socket. If the port is 0
,
an arbitrary free port is picked when the receiver is started. (you can find out
the actual port in this case by calling getLocalAddress()
after the
server was started).java.io.IOException
- if a networking error occurs while creating the socketjava.lang.IllegalArgumentException
- if an illegal protocol is usedOSCChannel.UDP
,
OSCChannel.TCP
,
getLocalAddress()
public java.lang.String getProtocol()
OSCChannel
getProtocol
in interface OSCChannel
UDP
or TCP
OSCChannel.UDP
,
OSCChannel.TCP
public abstract java.net.InetSocketAddress getLocalAddress() throws java.io.IOException
getHostName()
(or for the IP getAddress().getHostAddress()
)
and getPort()
.
Note that if the server is bound to the accept-any IP "<IP_ADDRESS>"
,
which happens for example when calling newUsing( <protocol>, 0, false )
,
the returned IP will be the localhost's IP, so you can
patch the result directly into any setTarget
call.
getLocalAddress
in interface OSCChannel
java.io.IOException
- if the local host could not be resolvedInetSocketAddress.getHostName()
,
InetSocketAddress.getAddress()
,
InetSocketAddress.getPort()
,
getProtocol()
public abstract void send(OSCPacket p, java.net.SocketAddress target) throws java.io.IOException
TCP
mode, trying to send
to a client which is not connected will throw an exception.
In a future version of NetUtil, there will be an interface
to detect clients connecting and disconnecting. For now,
clients can be implicitly detected by a registered OSCListener
.p
- the packet to sendtarget
- the target address to send the packet tojava.io.IOException
- if a write error, OSC encoding error,
buffer overflow error or network error occurs,
if no client connection for the given address existspublic abstract void addOSCListener(OSCListener listener)
listener
- the listener to registerpublic abstract void removeOSCListener(OSCListener listener)
listener
- the listener to remove from
the list of notified objects.public abstract void start() throws java.io.IOException
public abstract boolean isActive()
public abstract void stop() throws java.io.IOException
TCP
mode, this implies
that all client connections are closed. Stops listening for
incoming OSC traffic.public abstract void setBufferSize(int size)
OSCChannel
setBufferSize
in interface OSCChannel
size
- the new size in bytes.OSCChannel.getBufferSize()
public abstract int getBufferSize()
OSCChannel
getBufferSize
in interface OSCChannel
OSCChannel.setBufferSize( int )
public void setCodec(OSCPacketCodec c)
OSCChannel
setCodec
in interface OSCChannel
c
- the codec to usepublic OSCPacketCodec getCodec()
OSCChannel
getCodec
in interface OSCChannel
OSCPacketCodec.getDefaultCodec()
public abstract void setCodec(OSCPacketCodec c, java.net.SocketAddress target) throws java.io.IOException
c
- the codec to usetarget
- the client's address for whom the codec is changedjava.io.IOException
- if a networking error occurs or the client does not existpublic abstract OSCPacketCodec getCodec(java.net.SocketAddress target) throws java.io.IOException
target
- the client's address for whom the codec is queriedjava.io.IOException
- if a networking error occurs or the client does not existOSCPacketCodec.getDefaultCodec()
public final void dumpOSC(int mode, java.io.PrintStream stream)
OSCChannel
dumpOSC
in interface OSCChannel
mode
- one of kDumpOff
(don't dump, default),
kDumpText
(dump human readable string),
kDumpHex
(hexdump), or
kDumpBoth
(both text and hex)stream
- the stream to print on, or null
which
is shorthand for System.err
OSCChannel.kDumpOff
,
OSCChannel.kDumpText
,
OSCChannel.kDumpHex
,
OSCChannel.kDumpBoth
public abstract void dumpIncomingOSC(int mode, java.io.PrintStream stream)
OSCBidi
OSCListener
s.dumpIncomingOSC
in interface OSCBidi
mode
- see dumpOSC( int )
for detailsstream
- the stream to print on, or null
which
is shorthand for System.err
OSCChannel.dumpOSC( int, PrintStream )
,
OSCBidi.dumpOutgoingOSC( int, PrintStream )
public abstract void dumpOutgoingOSC(int mode, java.io.PrintStream stream)
OSCBidi
send
.dumpOutgoingOSC
in interface OSCBidi
mode
- see dumpOSC( int )
for detailsstream
- the stream to print on, or null
which
is shorthand for System.err
OSCChannel.dumpOSC( int, PrintStream )
,
OSCBidi.dumpIncomingOSC( int, PrintStream )
public abstract void dispose()
dispose.
dispose
in interface OSCChannel
protected java.net.InetSocketAddress getLocalAddress(java.net.InetAddress addr, int port) throws java.net.UnknownHostException
java.net.UnknownHostException