4. Learn Ansible¶
To understand how BlueBanquise works, it is essential to learn basis of Ansible.
This section tries to provide key knowledge to at least be able to manipulate and edit the stack to your needs.
It is assumed here that your system is already installed, and that Ansible has also been installed. It is also assumed that BlueBanquise stack has not been installed yet, and so Ansible is freshly installed without modifications.
All work will be done on the current host.
4.1. Minimal inventory¶
Edit /etc/hosts file, and add “management1” on localhost line:
<IP_ADDRESS> localhost localhost.localdomain localhost4 localhost4.localdomain4 management1
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
Then, create some needed directories and files:
mkdir /etc/ansible/inventory
mkdir /etc/ansible/inventory/group_vars
mkdir /etc/ansible/inventory/group_vars/all
mkdir /etc/ansible/roles
mkdir /etc/ansible/playbooks
And edit /etc/ansible/ansible.cfg line to fix /etc/ansible/inventory as default inventory folder:
[defaults]
inventory = /etc/ansible/inventory
Also set, in this same file /etc/ansible/ansible.cfg, the roles_path value to /etc/ansible/roles:
roles_path = /etc/ansible/roles
Finally, add management1 host into the inventory. Create a file called /etc/ansible/inventory/myhost.yml with the following content:
management1
Our very basic Ansible configuration is done. But one thing remains: we need to ensure our host (management1) can ssh to itself without password, as Ansible relies fully on the ssh to connect to remote hosts.
Let’s generate a ssh key (press enter multiple time):
ssh-keygen -N ""
Ensure you can ssh on management1 using a password:
[root@management1 ]# ssh management1
The authenticity of host 'management1 (<IP_ADDRESS>)' can't be established.
ECDSA key fingerprint is SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
ECDSA key fingerprint is MD5:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'management1,<IP_ADDRESS>' (ECDSA) to the list of known hosts.
root@management1's password:
[root@management1 ~]#
If ok, then deploy ssh public key to allow password less authentication, and ensure you can now ssh with the key:
[root@management1 ~]# ssh-copy-id management1
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
root@management1's password:
Number of key(s) added: 1
[root@management1 ~]# ssh management1
[root@management1 ~]#
Finally, check Ansible can connect to management1, and report hosts is up:
[root@management1 ~]# ansible all -m ping
management1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
[root@management1 ~]#
Let’s see the available and useful commands now.
4.2. Ansible commands¶
4.2.1. ansible¶
The ansible command provides few interesting features.
<IP_ADDRESS>. Version¶
First command is to check current Ansible version. It should be >= 2.8.2:
ansible --version
<IP_ADDRESS>. Ping an host or all hosts¶
Use the following command to check if Ansible can contact a specific registered host:
ansible management1 -m ping
Or all hosts:
ansible all -m ping
Also, it is possible to gather facts. Facts are dynamic variables, accessible only when Ansible is running on the target. Facts provides live information about the target: it’s running kernel, it’s Linux distribution, network or cpu information, etc.
ansible -m setup --tree /dev/shm/ management1
Then, open file /dev/shm/management1 to check its content and the result of facts gathering.
4.2.2. ansible-inventory¶
Ansible inventory command is extremely useful and will be massively used on this documentation.
This command allows to gather information from your inventory and check the expected output.
<IP_ADDRESS>. Groups and hosts¶
The command:
ansible-inventory --graph
Provide information about groups and hosts inside each group:
@all:
|--@ungrouped:
| |--management1
It is possible to see here that management1 is member of group @ungrouped, which is part of group @all. More will be seen later in this documentation.
<IP_ADDRESS>. Host variables¶
To output variables for a specific host, and check for example your variable precedence mechanism provided what is expected, use:
ansible-inventory --yaml --host management1
For now, there are no available variables in the inventories, so output will be {}.
4.2.3. ansible-playbook¶
This command is used to run playbooks, and ask Ansible to execute tasks on desired host(s). This is the most used command when using BlueBanquise.
Important parameters are:
-e or –extra-vars, which allows to provide additional variables for execution (keep in mind that variables set here win the whole precedence)
-t or –tags, which allows to execute only specific tasks or part of tasks (seen later)
-s or –skip-tags, which allows to not execute some specific tasks or part of tasks (seen later)
–list-tasks, which allows to list all tasks related to roles used in the playbook, and order they will be executed
–start-at-task, which allows to start/restart playbook at a desired task (to be combined with –list-tasks)
–list-tags, which allows to list all tags seen during this playbook execution
–limit, which limit the playbook execution to a specific list of hosts (if using a group has default host for example)
4.2.4. Debug¶
All of these commands accept verbose flags with -v, -vv, -vvv, etc. The more v, the more verbose.
Also, it is possible to execute all of them with the variable ANSIBLE_DEBUG=1 set, which will dramatically increase output information (but unfortunately not always relevant to our needs…).
For example, a very verbose execution would be:
ANSIBLE_DEBUG=1 ansible -m ping management1 -vvv
4.3. Variables and groups¶
Now that all important commands have been seen, it is time to add some variables inside the inventory, and play with groups.
4.3.1. Adding variables¶
We are going to add few variables, at different positions in the inventories.
Create file /etc/ansible/inventory/group_vars/all/my_ship.yml with the following content:
destination: Deliani
my_ship:
model: USP Talon Light Fighter
price: 6000 # in cr
equipment:
generator: Advanced MicroFusion
shield: Structural Integrity Field
front_gun: Pulse-Cannon
sidekicks:
- Plasma Storm
- Zica SuperCharger
Now, ensure management1 can see these variables:
[root@ ~]# ansible-inventory --yaml --host management1
destination: Deliani
my_ship:
equipment:
front_gun: Pulse-Cannon
generator: Advanced MicroFusion
shield: Structural Integrity Field
sidekicks:
- Plasma Storm
- Zica SuperCharger
model: USP Talon Light Fighter
price: 6000
[root@ ~]#
Nice, we can now use these variables for management1 when working on it.
Let’s add 2 other hosts: login1 and nfs1.
Edit file /etc/ansible/inventory/myhost.yml to obtain:
management1
login1
nfs1
And now let’s check login1 (when will exist) can also access these variables:
[root@ ~]# ansible-inventory --yaml --host login1
destination: Deliani
my_ship:
equipment:
front_gun: Pulse-Cannon
generator: Advanced MicroFusion
shield: Structural Integrity Field
sidekicks:
- Plasma Storm
- Zica SuperCharger
model: USP Talon Light Fighter
price: 6000
[root@ ~]#
Perfect. It is time to play with groups, before coming back to variables to work on variables precedence.
4.3.2. Configuring groups¶
Lets check current groups:
[root@ ~]# ansible-inventory --graph
@all:
|--@ungrouped:
| |--login1
| |--management1
| |--nfs1
[root@ ~]#
All our hosts belong to the ungrouped group and to the all group. But we want to be able to assign specific variables to each kind of equipment. We need to create groups.
There are two ways to create groups. In YAML, directly in the hosts files, or using specific Ansible syntax in separate files. Both are useful, and we will combine them.
<IP_ADDRESS>. In YAML¶
Edit again the /etc/ansible/inventory/myhost.yml file, and this time let’s use real YAML:
master:
hosts:
management1:
slaves:
hosts:
login1:
nfs1:
Now, let’s check again groups:
[root@ ~]# ansible-inventory --graph
@all:
|--@master:
| |--management1
|--@slaves:
| |--login1
| |--nfs1
|--@ungrouped:
[root@ ~]#
We can see that management1 is now member of group master, and that login1 and nfs1 are member of group slaves.
The special string hosts in this file define that the string above is a group, and that strings bellow are hosts member of this group.
It is also possible to set groups in a group in this same file. Edit it again:
my_nodes:
children:
master:
hosts:
management1:
slaves:
hosts:
login1:
nfs1:
And result:
[root@ ~]# ansible-inventory --graph
@all:
|--@my_nodes:
| |--@master:
| | |--management1
| |--@slaves:
| | |--login1
| | |--nfs1
|--@ungrouped:
[root@ ~]#
The children string define that the string above is a group that contains bellow group(s).
<IP_ADDRESS>. In Ansible syntax¶
The second way to create groups is to use the Ansible native syntax, which can be simpler in some cases.
Create a file /etc/ansible/inventory/mygroups and set the following content:
[colors:children]
blue
red
[blue]
management1
login1
[red]
nfs1
And check the result:
[root@ ~]# ansible-inventory --graph
@all:
|--@colors:
| |--@blue:
| | |--login1
| | |--management1
| |--@red:
| | |--nfs1
|--@my_nodes:
| |--@master:
| | |--management1
| |--@slaves:
| | |--login1
| | |--nfs1
|--@ungrouped:
[root@ ~]#
Same concept applies here, with different syntax.
Note that a host can be part of multiple groups.
You can find more information and examples here on intro_inventory .
4.3.3. Variables precedence¶
Time to use all these groups and make full usage of the inventory structure.
If you remember precedence system in Vocabulary section (more here on Ansible dedicated page ) group_vars/all is in position 4 in the precedence. This is where we set our spaceship variables.
Let’s say now we wish to change our ship destination for management1 node only.
Check current destination for all hosts:
[root@ ~]# ansible-inventory --yaml --host management1 | grep destination
destination: Deliani
[root@ ~]# ansible-inventory --yaml --host login1 | grep destination
destination: Deliani
[root@ ~]# ansible-inventory --yaml --host nfs1 | grep destination
destination: Deliani
[root@ ~]#
We can redefine the variable in group_vars/all (that apply to all hosts in the @all group, so everyone), but we only want to impact management1 node.
In the precedence list, you can see that inventory host_vars are in position 9, so they will win against position 4 of group_vars/all. Let’s use this.
Edit file /etc/ansible/inventory/myhost.yml and add a destination variable under management1:
my_nodes:
children:
master:
hosts:
management1:
destination: Ixmucane
slaves:
hosts:
login1:
nfs1:
And check destinations again:
[root@ ~]# ansible-inventory --yaml --host management1 | grep destination
destination: Ixmucane
[root@ ~]# ansible-inventory --yaml --host login1 | grep destination
destination: Deliani
[root@ ~]# ansible-inventory --yaml --host nfs1 | grep destination
destination: Deliani
[root@ ~]#
Perfect.
Note
We could also have used a file in inventory/host_vars/management1/new_values.. Setting a variable in the host definition file above the host is equivalent to using host_vars folder. But host_vars folder is difficult to use when having a very large number of hosts, which is why in BlueBanquise we are often using directly the host file.
Let’s say now we want to change the model of spaceship of all the slave nodes. So not a single host, but all slave members hosts.
We are going to use level 6 in variables precedence: group_vars/. Create a directory called slave (same name than the group we want to work with) in group_vars:
mkdir /etc/ansible/inventory/group_vars/slaves
Then, create file /etc/ansible/inventory/group_vars/slaves/myship.yml with the following content:
my_ship:
equipment:
front_gun: Pulse-Cannon
generator: Advanced MicroFusion
shield: Structural Integrity Field
sidekicks:
- Plasma Storm
- Zica SuperCharger
model: Gencore Maelstrom
price: 6000
And check variables of hosts:
[root@ ~]# ansible-inventory --yaml --host management1 | grep model
model: USP Talon Light Fighter
[root@ ~]# ansible-inventory --yaml --host login1 | grep model
model: Gencore Maelstrom
[root@ ~]# ansible-inventory --yaml --host nfs1 | grep model
model: Gencore Maelstrom
[root@ ~]#
Note
We had to add the whole dictionary in group_vars/slaves/myship.yml. This is due to the replace hash_behaviour of Ansible, as the merge version is deprecated. If you wish to avoid having to replace all variables like here, try to avoid massive dictionaries when not needed.
Perfect. Remember the pizza in Vocabulary section. Ansible just flatten the whole inventory, using precedence, and you obtain variables.
Last point for this part, remember that in variable’s precedence, extra_vars is level 22 and always win, so adding extra vars when executing Ansible later will allow us to force variables at execution time for testing purposes or just because we need it.
4.4. Roles and playbooks¶
Time to apply some configuration on our target host.
We are going to create a role that install a web server package, create a very basic web page with our ship’s information, and start the web server service.
4.4.1. Role¶
Create a role called “shipyard”, with needed folders:
mkdir /etc/ansible/roles/shipyard
mkdir /etc/ansible/roles/shipyard/tasks
mkdir /etc/ansible/roles/shipyard/templates
Tasks folder contains tasks to perform, and main.yml file inside will be the starting point for Ansible. Templates folder will contain our templates (configuration files) in Jinja2 language.
<IP_ADDRESS>. Task¶
Create file /etc/ansible/roles/shipyard/tasks/main.yml with the following content:
---
- name: Package
package:
name: httpd
state: present
- name: Template >> /var/www/html/index.html
template:
src: index.html.j2
dest: /var/www/html/index.html
owner: root
group: root
mode: 0644
tags:
- templates
- name: Start services
service:
name: httpd
state: started
enabled: yes
Content is pretty simple:
Ansible installs httpd package (or do nothing if present)
Then Ansible render the template index.html.j2 and write the result in /var/www/html/index.html
Then Ansible ensure httpd service is started and enabled at boot
You can find all Ansible modules here in the official documentation .
<IP_ADDRESS>. Template¶
Templates are probably the key feature of Ansible and all automation tools.
The idea is simple: you provide Ansible with a copy of your desired configuration file, with variables to be dynamically replaced in order to fill on the fly some parts of the file.
Let’s do this with a simple html page, and first with a static page.
Create the template /etc/ansible/roles/shipyard/templates/index.html.j2 with the following static content:

<title>This is title</title>

Hello world

The current template is static, we will make it dynamic later.
4.4.2. Playbook¶
Lets create our playbook, which will contains a list of roles to apply on management1 host.
Create file /etc/ansible/playbooks/myplaybook.yml with the following content:
---
- name: myplaybook
hosts: "management1"
roles:
- role: shipyard
tags: shipyard
Simply put, target of the playbook is host management1, and role to apply is shipyard.
Skip the tags for now.
Note
Hosts can be a list of hosts (comma separated: management1,login1,nfs1), or a group of hosts (all, slaves, color, etc.).
Now, execute the playbook, and let Ansible do its job:
ansible-playbook /path/to/myplaybook.yml
Note that you need to provide full path to the playbook, as there are no default folder for playbooks in Ansible. Also note that if your shell is currently in the playbook folder, you can skip full path as relative path are accepted.
If all goes well, you should now have the file /var/www/html/index.html generated on management1, and using a web browser you can check the result.
Note that if you cannot reach the web browser, for example you are working in a VM or a server without screen attached, you can use ssh forwarding. From you current computer, open a new terminal and use:
ssh root@my_vm_or_my_server -L 9999:localhost:80
And then open a local web browser and open http://localhost:9999 . Check the web for more on ssh port forwarding.
But this is not very interesting, let’s add some dynamic part into our template.
4.4.3. Jinja2¶
Edit file /etc/ansible/roles/shipyard/templates/index.html.j2 to make it this way:

<title>Shipyard</title>

I am {{inventory_hostname}} << this is me, the current target

Variables access

Ship list: {{groups['all']}} << this is an access to a group members list

management1 ship model: {{hostvars['management1']['my_ship']['model']}} << this is an access to an host specific variable

login1 ship model: {{hostvars['login1']['my_ship']['model']}}

nfs1 ship model: {{hostvars['nfs1']['my_ship']['model']}}

My ship model: {{hostvars[inventory_hostname]['my_ship']['model']}}

Or a better way to get my ship model: {{my_ship.model}}

Loops

{% for ship in groups['all'] %}
Ship {{ship}} is in the shipyard, and has destination {{hostvars[ship]['my_ship']['destination']}}.

{% endfor %}

And let’s re-execute the playbook. But we have already installed the package and started the service, so let’s ask Ansible to only work on the tags ‘templates’ to fasten the execution (this tag was defined in the tasks/mail.yml file previously seen):
ansible-playbook myplaybook.yml -t templates
And check again our web page.
You can see multiple things:
We executed the task on management1, so inventory_hostname variable content is ‘management1’. This is an Ansible reserved variable that contains the target hostname.
groups[‘mygroup’] allows to get a list with all the hosts member of the group.
hostvars[‘myhost’] allows to access variables of this host, using the variable precedence mechanism.
hostvars[inventory_hostname] is equivalent to a direct variables access has we are accessing our current target variables.
Now regarding to Jinja2:
{{ }} allows to insert a variable in the destination file.
{% %} are Jinja2 instructions (for, if, etc.).
{# #} are Jinja2 commentaries.
The remaining is put in the destination file “as is”.
You can experiment with this template to understand the whole mechanism. The whole Jinja2 documentation can be found here: Jinja2 template designer
You should now understand the very basis of Ansible.
Please note also that Ansible provides some built in filters, to be used with Jinja2. A list can be found here: Ansible Filters
Time to investigate tasks advanced elements.
4.4.4. Task again¶
As discussed before, all task available modules can be found in the Ansible modules documentation .
Each of these modules can be combined with general tasks actions. But first, let’s define the basic debug module and registers, that will allow us to play more easily with tasks.
At this point, use previously created task, or create a new role to add following tasks.
<IP_ADDRESS>. Debug module¶
This is a very simple module, to display a message in the shell.
For example:
- name: My message module
debug:
msg: "Hello world ! I am the debug module. You will use me a lot."
You can also display variables this way:
- name: My message module
debug:
msg: "Hello world ! I am host {{ inventory_hostname }}"
<IP_ADDRESS>. Registers¶
Create a file /tmp/valkyrie, and add the string “lenneth” inside, using:
echo "lenneth" > /tmp/valkyrie
Now, lets use a register to gather this content. Registers are a way to gather data about executed modules. Input data, output data, etc. A good usage example is combining registers with templates. Register can inform later tasks that a template was updated or not, and trigger other tasks if needed.
One of the possible usages is registers combined with shell or commands, to gather very specific data from the system.
Try:
- name: Get output from a shell command
shell: "cat /tmp/valkyrie"
register: my_result
ignore_errors: True
- name: Display content of the register
debug:
msg: "{{ my_result }}"
And when running, output is:
TASK [debug : Get output from a shell command] *******************************
changed: [management1]
TASK [debug : My message module] *********************************************
ok: [management1] =>
msg:
changed: true
cmd: cat /tmp/valkyrie
delta: '0:00:00.016261'
end: '2020-04-17 14:46:04.490684'
failed: false
rc: 0
start: '2020-04-17 14:46:04.474423'
stderr: ''
stderr_lines: []
stdout: lenneth
stdout_lines:
- lenneth
So, you can use the register to get status (changed: true, so something happens), to get return code (rc: 0 here), stderr and stdout, if it failed, etc.
For example:
- name: My message module
debug:
msg: "{{ my_result.stdout }}"
Will display “lenneth”.
We are going to use register and debug module to learn generic tasks actions.
<IP_ADDRESS>. Loops¶
It is possible to make modules iterate. All possibilities are available here in loop documentation .
BlueBanquise rely on two methods: with_items and loop. with_items is considered deprecated by the Ansible team. loop, the replacement, is progressively being added into the stack.
A first loop example can be:
- name: My message module
debug:
msg: "Values: {{ item }}"
loop:
- Blue
- Red
- Green
- Yellow
This will execute this module 4 times, with each time an element of the list given as item. When using loops in ansible, the variable item stores the value of the current loop index.
It is also possible to provide the loop with a list from the inventory, like the one we wrote before:
- name: My message module
debug:
msg: "Values: {{ item }}"
loop: "{{ my_ship.equipment.sidekicks }}"
Loop action can accept advanced filters or patterns. Refer to the Ansible documentation.
with_items works the same way:
- name: My message module
debug:
msg: "Values: {{ item }}"
with_items:
- Blue
- Red
- Green
- Yellow
- name: My message module
debug:
msg: "Values: {{ item }}"
with_items: "{{ my_ship.equipment.sidekicks }}"
<IP_ADDRESS>. Conditionals¶
Conditionals are used to skip some modules when not required or optional (or just don’t meet a specific condition). All information can be found in conditionals documentation .
Let’s re-use our previous register, and display a message only if content is “lenneth”:
- name: Get output from a shell command
shell: "cat /tmp/valkyrie"
register: my_result
ignore_errors: True
- name: Display content of the register
debug:
msg: "Profile"
when:
- my_result.stdout == "lenneth"
If content is not “lenneth”, you will see:
TASK [debug : Display content of the register] *******************************
skipping: [management1]
So this part of the task was skipped, because our my_result.stdout does not meet the condition.
Now, let’s combine loop and conditions.
Fill /tmp/valkyrie file with multiple lines:
echo "freya" > /tmp/valkyrie
echo "lenneth" >> /tmp/valkyrie
echo "odin" >> /tmp/valkyrie
echo "loki" >> /tmp/valkyrie
We are now going to use the stdout_lines of our register, as it is a list containing line by line the output of stdout, so here the content of our file.
- name: Get output from a shell command
shell: "cat /tmp/valkyrie"
register: my_result
ignore_errors: True
- name: Display content of the register
debug:
msg: "Profile"
loop: "{{my_result.stdout_lines}}"
when:
- item == "lenneth"
And result should be:
TASK [debug : Display content of the register] *******************************
skipping: [management1] => (item=freya)
ok: [management1] => (item=lenneth) =>
msg: Profile
skipping: [management1] => (item=odin)
skipping: [management1] => (item=loki)
Note that all the items are displayed here.
Last part is to combine conditions. It is possible to stack conditions, considering that the list is interpreted as AND conditions by Ansible.
For example:
- name: Get output from a shell command
shell: "cat /tmp/valkyrie"
register: my_result
ignore_errors: True
- name: Display content of the register
debug:
msg: "Profile"
loop: "{{my_result.stdout_lines}}"
when:
- item == "lenneth"
- sys_admin_is_master == "yes" # <<< this is added as an AND with other conditions
Now execute playbook with an additional variable as extra vars, first with “no”, then with “yes”:
ansible-playbook ... -e sys_admin_is_master=no
ansible-playbook ... -e sys_admin_is_master=yes
First time, you get:
TASK [debug : Display content of the register] *******************************
skipping: [management1] => (item=freya)
skipping: [management1] => (item=lenneth)
skipping: [management1] => (item=odin)
skipping: [management1] => (item=loki)
And second time:
TASK [debug : Display content of the register] *******************************
skipping: [management1] => (item=freya)
ok: [management1] => (item=lenneth) =>
msg: Profile
skipping: [management1] => (item=odin)
skipping: [management1] => (item=loki)
So it acted as a logical AND.
<IP_ADDRESS>. Tags¶
Tags act like the name: they tag part of the task, or role, so you can execute only this part, or skip it.
For example:
- name: Display content of the register
debug:
msg: "Les sanglots longs"
tags:
- first
- name: Display content of the register
debug:
msg: "des violons de l'automne"
tags:
- second
And at execution, use --tags first,second
to execute both, --tags second
to execute second only, or --skip-tags first
that will skip the first one.
<IP_ADDRESS>. Notify¶
Sometime, you may wish that some actions take place at the end of each role, if a module returned a changed status. Best example: your role is dedicated to a service, and Ansible generate the configuration file using a template. You may want that this service is restarted if Ansible detect changes in the file when executing.
Notify will be your friend for such cases.
Create a new directory at root of your role, called handlers, and then inside a file called main.yml, with the following content:
- name: There was a change
debug:
msg: "THE FILE WAS CHANGED!! HOW DARE YOU!!"
Note that the name of this task (There was a change
) is important and will
be targeted by the notify.
Create also a template, called our_file.j2 in templates folder (like handlers above), with the following content:
{{ my_value }}
Now, in the main task, use this code:
- name: Display message
debug:
msg: "Hello world"
- name: Template /tmp/out
template:
src: "our_file.j2"
dest: /tmp/out
owner: root
group: root
mode: 0644
notify: There was a change
- name: Display another message
debug:
msg: "Hello world again. How do you do by the way ?"
And execute adding an extra var:
ansible-playbook ... -e my_value=kirk
First time execution, of course, you will see both:
TASK [debug : Template /tmp/out] *********************************************
changed: [management1]
...
RUNNING HANDLER [debug : There was a change] *********************************
ok: [management1] =>
msg: THE FILE WAS CHANGED!! HOW DARE YOU!!
As expected, because there was a change, so the handler was called at the end of the role.
Now do the exact same command again.
TASK [debug : Template /tmp/out] *********************************************
ok: [management1]
Handler was not activated, because there was no changes.
Last test, change captain of the enterprise (Kirk is on a mission).
ansible-playbook ... -e my_value=spock
And again:
TASK [debug : Template /tmp/out] *********************************************
changed: [management1]
...
RUNNING HANDLER [debug : There was a change] *********************************
ok: [management1] =>
msg: THE FILE WAS CHANGED!! HOW DARE YOU!!
Handler was activated.
<IP_ADDRESS>. Other useful modules¶
A full list of all Ansible modules can be found on the Ansible documentation .
However, lets review the most commonly used modules:
<IP_ADDRESS>.1. Package¶
This module simply installs a list of packages. It can be used instead of the yum or dnf modules, as it covers both.
Example:
- name: Install wget package
package:
name: wget
state: present
- name: Install a list of packages
package:
name: "{{ my_packages_list }}"
state: present
<IP_ADDRESS>.2. Service¶
Manage services, to start/stop/restart, enable/disable.
Example:
- name: Start and enable httpd service
service:
name: httpd
enabled: yes
state: started
<IP_ADDRESS>.3. File¶
This module allows to create folders.
Example:
- name: Create custom folders
file:
path: "{{ item }}"
state: directory
mode: 0755
loop:
- /etc/my_folder
- /var/lib/my_other_folder
<IP_ADDRESS>.4. Copy¶
Act like template, but simply copy file, no rendering. Files to be copied must be put into a files folder, at root of the role.
For example, create file my_role/files/slurm.conf
- name: Copy slurm static file
copy:
src: slurm.conf
dest: /etc/slurm/slurm.conf
mode: 0644
owner: slurm
group: slurm
<IP_ADDRESS>.5. Lineinfile¶
This module allows to manipulate files, using regex. For example, set a value to 0 in a file.
Example:
- name: Add mymanagement string to localhost in /etc/hosts
lineinfile:
path: /etc/hosts
regexp: '^127\.0\.0\.1'
line: <IP_ADDRESS> localhost mymanagement
<IP_ADDRESS>.6. Include_vars¶
Allow to include vars from a file. Mostly used to allow compatibility with multiple architectures / OS versions, etc. To be used when “defaults” cannot be used. Vars file must be placed in a dedicated vars folder at root of the role (myrole/vars/myvars.yml).
Example:
- name: Include vars from file "myvars.yml"
include_vars: myvars.yml
<IP_ADDRESS>.7. Include_tasks¶
Allows to split the main.yml task file into multiple chunks (using or not conditionals).
Example:
- name: Include addon tasks
include_tasks: addon.yml
when: my_role_addon == true
<IP_ADDRESS>.8. Command and shell¶
Sometime, you need to do things manually. Two modules allows that: command and shell.
Command is to be used when you need to execute a very basic command.
Shell is to be used when you need to execute a command inside a shell (to benefit from it).
When using pipes, or output redirections, shell is preferred for example.
- name: Store content of a file into a register
command: cat /etc/myfile
register: myfile_content
- name: Execute a script, pipe it, and stdout goes to log.txt on the remote host
shell: myscript.sh | grep -E "in|out">> log.txt
You can find a lot more on the web regarding Ansible. However, this small guide should have provided you the very basis of Ansible.
If you feel something is missing in this quick Ansible training, please do not hesitate to ask us to add elements.
Time to move on to BlueBanquise stack itself. But before proceeding, a small section is dedicated to containers, and how to simply ask a playbook to execute its tasks inside a container.


--- layout: default title: ICNFA'17 - Scientific Committee meta: Scientific Committee Members for ICNFA keyword: nanotechnology conference, nanofluid conference, nanomaterial conference, nanoparticle conference, nano conference, nanotube conference, nanocatalysis conference, nanoelectronics conference, graphene conference, drug delivery conference, tissue engineering conference, nanotechnology and coating conference, nanotechnology market conference, nanotechnology modeling conference, nanotechnology simulation conference, nanobiotechnology, nanobiomechanics, nanodevices, nanotechnology, nanofluid, nanomaterial, nanoparticle, nano, nanotube, nanocatalysis, nanoelectronics, graphene, drug delivery, tissue engineering, nanotechnology and coating, nanotechnology market, nanotechnology modeling, nanotechnology simulation, nanobiotechnology conference, nanobiomechanics conference, nanodevices conference ---
The Scientific Committee list is currently being updated. We appreciate your patience!
Scientific Committee Members:
Dr. Nicolas Abatzoglou, Université de Sherbrooke, Canada
Dr. Ram Achar, Carleton University, Canada
Dr. Sivaram Arepalli, Rice University, USA
Dr. Yoshinobu Baba, Nagoya University, Japan
Dr. Dayan Ban, University of Waterloo, Canada
Dr. Elena Baranova, University of Ottawa, Canada
Dr. Vladimir Baulin, Universitat Rovira i Virgili, Spain
Dr. Thomas M.S. Chang, McGill University, Canada
Dr. Devika Chithrani, University of Victoria, Canada
Dr. Bernadeta Dobosz, Adam Mickiewicz University in Poznań, Poland
Dr. Wolfgang Ensinger, Technische Universität Darmstadt, Germany
Dr. Luigi Falciola, Università degli Studi di Milano, Italy
Dr. Ralf Greiner, Max Rubner-Institut, Germany
Dr. Redhouane Henda, Laurentian University, Canada
Dr. Jeff Th. M. De Hosson, University of Groningen, The Netherlands
Dr. Yong Hu, Zhejiang Normal University, China
Dr. Sihem Jaziri, Université de Carthage, Tunisie
Dr. Jyh-Chiang Jiang, National Taiwan University of Science and Technology, Taiwan
Dr. Kenichi Kasahara, Ritsumeikan University, Japan
Dr. Jiyoung Kim, University of Texas at Dallas, USA
Dr. Sang Ouk Kim, KAIST, South Korea
Dr. Frank Ko, University of British Columbia, Canada
Dr. Alexander Korsunsky, University of Oxford, UK
Dr. Ryszard Krzyminiewski, Adam Mickiewicz University in Poznań, Poland
Dr. Clifford Larrabee, University of Cincinnati, USA
Dr. Seunghwan Lee, Chonnam National University, South Korea
Dr. Hyo-Chang Lee, Korea Research Institute of Standards and Science (KRISS), South Korea
Dr. Seunghwan Lee, Technical University of Denmark, Denmark
Dr. Dongyang Li, University of Alberta, Canada
Dr. Rob Lipson, University of Victoria, Canada
Dr. Slawomir Mamica, Adam Mickiewicz University in Poznań, Poland
Dr. Arben Merkoçi, Catalan Institute of Nanotechnology, Spain
Dr. Vladimir Muzykantov, University of Pennsylvania, USA
Dr. Roger Narayan, UNC/NCSU Joint Department of Biomedical Engineering, USA
Dr. Suresh Neethirajan, University of Guelph, Canada
Dr. Andrónico Neira-Carrillo, University of Chile, Chile
Dr. Huong Nguyen, Marshall University, USA
Dr. Daisuke Onoshima, Nagoya University, Japan
Dr. Ing Hong Ooi, International Medical University, Malyasia
Dr. Muthukumaran Packirisamy, Concordia University, Canada
Dr. Yu Qi, Xerox Coroporation, Canada
Dr. Joe Shapter, Flinders University of South Australia, Australia
Dr. San-Qiang Shi, Hong Kong Polutechnic University, Hong Kong
Dr. K.K. Singh, BITS Pilani, India
Prof. Nguyen T. K. Thanh, University College London, UK
Dr. Jules Thibault, University of Ottawa, Canada
Dr. Ludwig Vinches, École de Technologie Supérieure, Canada
Dr. Andriy Voronov, North Dakota State University, USA
Dr. Zhong L. Wang, Georgia Tech, USA
Dr. Huizong Xu, St. John's University, USA
Dr. Mehrdad Yazdani-Pedram, University of Chile, Chile
Dr. Jackie Y. Ying, Institute of Bioengineering and Nanotechnology, Singapore
Dr. Pung Swee Yong, Universiti Sains Malaysia, Malaysia
Dr. Jin Zhang, University of Western Ontario, Canada


$(function() {
Initialize the app.
$(function() {
App.init();
Mouse Events
On mousedown detection, initialize drawing properties based on mouse coordinates.
App.canvas.on('mousedown', function(e) {
Allow user drawing only if other users are not drawing.
if (!App.isAnotherUserActive) {
console.log("User has started to draw.");
Initialize mouse position.
App.mouse.click = true;
App.mouse.x = e.offsetX;
App.mouse.y = e.offsetY;
App.initializeMouseDown(App.pen, App.mouse.x, App.mouse.y);
Emit the pen object through socket.
App.socket.emit('start', App.pen);
Add the first mouse coordinates to the stroke
array for storage.
App.stroke.push([App.mouse.x, App.mouse.Y]);
} else {
console.log('Another user is drawing - please wait.');
}
});
On mousedrag detection, start to render drawing elements based on user’s cursor coordinates.
App.canvas.on('drag', function(e) {
Allow user drawing only if other users are not drawing.
if (!App.isAnotherUserActive) {
if (App.mouse.click) {
App.mouse.drag = true;
Find x,y coordinates of the mouse dragging on the anvas.
var x = e.offsetX;
var y = e.offsetY;
Render the drawing.
App.draw(x, y);
console.log("Currently drawing coordinates", [x, y]);
Continue to push coordinates to stroke array (as part of storage).
App.stroke.push([x, y]);
Emit x, y in a tuple through socket.
App.socket.emit('drag', [x, y]);
}
} else {
console.log('Another user is drawing - please wait.');
}
});
On mouse dragend detection, tell socket that we have finished drawing.
App.canvas.on('dragend', function(e) {
if (!App.isAnotherUserActive) {
App.mouse.drag = false;
App.mouse.click = false;
console.log("Drawing is finished and its data is being pushed to the server", [App.stroke, App.pen]);
Empty the App.stroke array.
App.stroke = [];
Tell socket that we’ve finished sending data.
App.socket.emit('end', null);
} else {
console.log('Another user is drawing - please wait.');
}
});
If the cursor leaves the canvas whiteboard, simply stop drawing any more elements (by triggering a ‘dragend’ event).
App.canvas.on('mouseleave', function(e) {
App.canvas.trigger('dragend');
});
});


"x" "1" "NEGISHI,C, YAMAIZUMI,Z AND SATO,S, NUCLEIC ACID BINDING ANDMUTAGENICITY OF ACTIVE METABOLITES OF2-AMINO-3,8-DIMETHYLIMIDAZO[4,5-F]QUINOXALINE, MUTAT. RES. 210(1):127-134,1989"


Hi there.
We are TheReviewIndex.
We thought reading reviews, on sites like Amazon, is a bit too tedious. Most products have hundreds, even thousands of reviews. It’s impossible to make sense of that many reviews, let alone compare across products.
So we built The Review Index that uses Neural Networks to detect and quantify recurring patterns in reviews, enabling one to go through thousands of reviews in a few minutes.
Also - we call out products with significant volumes of spam / fake reviews so that one doesn’t end up trusting them.
We recently launched a public beta for Amazon (US) electronic / gadget / appliance reviews, and are iterating over the website and algorithms. We will expand to include other marketplaces soon.
There is a lot of data waiting to be churned and presented - stay tuned!


WING COMMANDER Reviewed by Jamie Peck
The movie, then, is a missed opportunity for director Chris Roberts, who created the original, groundbreaking PC incarnation of "Wing Commander" back in 1990. How an interactive brainchild so revered could end up such a cinematic pile of junk under the helm of the same guy is a head-scratcher. "Wing Commander"'s story, credited to Roberts and screenwriter Kevin Droney, is clueless chaos melding incoherent narrative and unoriginal ideas. It rips off the finest films of its genre, Top Gun and, in one scene, even those spiffy "stereoscopic freeze" Gap commercials.
Set in 2654, "Wing Commander" stars Freddie Prinze Jr. as a daredevil cosmos cowboy who hopes to be a great fighter pilot like his father before him. Along the way, he plays kissy-face with his stoic superior (Saffron Burrows) at the new galaxy hangout where he's posted, comes to terms with bigots who resent him for his "Pilgrim" heritage (don't ask), and goes on a top-secret mission involving the "jump coordinates" (what, no Death Star plans?) of a nasty alien race known as the Kilrathi. Or something like that. Given the immensely confusing activity, it's hard to tell.
On the other hand, what's easy to see is that "Wing Commander" is a big old mess.  and repeated (and frequently unanswered) calls for a "Medic!" Action sequences fizzle. The character conflict garners unintentional giggles. The sole source of suspense here is what these Kilrathi creeps look like, as they're kept out of view until the concluding 15 minutes. Imagine bearded Siamese cats crossed with something from a ‘50s Roger Corman cheapie and you've got a good idea.
Little but techno-babble happens for an hour, and then it's as if "Wing Commander" tries to do too much at once; when it appears as though the movie's about to show signs of a pulse, it instead provides a hilarious touch of human drama culminating with a use for a bulldozer that has probably never been seen in this kind of space camp before. Matthew Lillard, featured prominently in said sequence, is cast as Prinze's hotshot partner, and though the two are fine young actors - recently paired in the hit "She's All That" - they're fighting more than otherworldly evil here.
Rumor has it that "Wing Commander" was slated as a later-in-the-year release, bumped up to capitalize off this hot casting coup as well as the premiere of the new "Star Wars: Episode I" trailer. But in my audience, there were no females present to make goo-goo eyes at Prinze or Lillard, and many a member exited after the much-ballyhooed sneak peek. Since most cineplexes won't be granting refunds to the latter contingency, "Commander" might rake in some dough, but be warned: The high wears off as soon as the coming attraction gives way to the feature presentation.
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Toggle navigation
Tourism point
Home
Hotels
Travel
About us
Sign Up
Login
Hey there!   We made this.
Pranjal Raj

Amit Khati

Abhishek Narwal


Signup form
Your name
Make sure you enter your name
Your name must be at least 3 characters
Your name cannot be longer than 20 characters
Your Email
Your email is required.
Your email is required to be at least 3 characters
That is not a valid email. Please input a valid email.
Your email cannot be longer than 20 characters
Username
Please input a username
Your username is required to be at least 3 characters
Your username cannot be longer than 20 characters
That username is taken, please try another
Cancel
Submit


Password Features Please toggle features below to determine which characters should be used to generate a random password. Lower Case Characters? No Yes Upper Case Characters? No Yes Special Characters? No Yes Number Characters? No Yes Password Size (Min 8, Max 128) Generate Password


SHARE
POINT
Enter Your Starting Point
Enter Your Destination point
Enter Your Luggage Details
2 wheeler
4 wheeler


In this set of exercises you will analyze compound sentences. Analyze means "split."
For each sentence, you will do the following:
- Get rid of the conjunction and, but, or or that joins the sentences.
- You will usually make the comma into a period.
- If the original sentence ended with a question mark, you will use question marks at the ends of the new sentences.
- You will capitalize the first word of each sentence.
- Sometimes you will replace but with However,— be sure to include that comma after "However"!
- Sometimes you will replace or with Otherwise,— be sure to include that comma after "Otherwise"!
Hint: It may be helpful to review "
Joining Sentences to Make Compound Sentences."


{% load staticfiles %}
{{form_error}}
(Your status should be "Available" if you haven't got a roomie yet)
All Fields are compulsory
HOSTEL:
STATUS:


The MTN Marathon on this day 10 years ago
by Charles MutebiIt rained heavily on the morning of the 2009 race but that would not stop the thousands from taking part
On this day, 10 years ago, the MTN Marathon marked six years and attracted a cool 15,000 runners. It was a special mark for an event that had started in 2004 with just 1,500 runners.
This year’s edition could see the number of participants reach 30,000 – already the kit has sold out – as you can be sure of a last-minute rush of entrants from the 11th-hour citizenry.
The 2009 42km race was won by Jane Wandahi and David Mutai in the women and men’s category respectively.
It rained heavily on the morning of the 2009 race but that would not stop the thousands from taking part in the edition that saw proceeds donated to the Uganda Red Cross.
As usual, the race was all about the ordinary runner, who was in it for fun, health or competitive goals, among other reasons.
It was, as usual, an eventful affair with countless sights. Some of the best moments captured on camera follow in the pictorial below.


hint: remember you can undo/redo input changes with ctrl+z/ctrl+shift+z
hint: don't accidentally hit visualizer control keys, you can toggle them off


Loading...
barriers_odds_ratio
Behavior_params
barriers_threshold_distr
Behavior_params
base_odds_ratio
Behavior_params
base_strain
FergEvolution
become_a_teacher
Activities::become_a_teacher()
Person::become_a_teacher()
become_an_adult_decision_maker
Person
become_exposed
Disease::become_exposed()
Epidemic::become_exposed()
Health::become_exposed()
Person::become_exposed()
become_immune
Disease::become_immune()
Epidemic::become_immune()
Health::become_immune()
Person::become_immune()
become_infectious
Disease::become_infectious()
Epidemic::become_infectious()
Health::become_infectious()
Person::become_infectious()
become_removed
Disease::become_removed()
Epidemic::become_removed()
Health::become_removed()
become_susceptible
Disease::become_susceptible()
Epidemic::become_susceptible()
Health::become_susceptible(Person *self, int disease_id)
Health::become_susceptible(Person *self, Disease *disease)
Person::become_susceptible()
become_symptomatic
Disease::become_symptomatic()
Epidemic::become_symptomatic()
Health::become_symptomatic()
Person::become_symptomatic()
become_uninfectious
Disease::become_uninfectious()
Epidemic::become_uninfectious()
become_unsusceptible
Disease::become_unsusceptible()
Epidemic::become_unsusceptible()
Health::become_unsusceptible()
Person::become_unsusceptible()
before_run
Activities
begin
bloque::begin()
bloque::begin()
bloque::begin()
Multistrain_Timestep_Map::begin()
Seasonality_Timestep_Map::begin()
Behavior
Behavior
Behavior::Behavior(Person *p)
Behavior::Behavior()
Behavior.cc
Behavior.h
Behavior_params
BEHAVIOR_STRATEGIES
Behavior.h
Behavior_strategy
Behavior.h
Behavior_survey
benefits_odds_ratio
Behavior_params
benefits_threshold_distr
Behavior_params
BIFURCATING
Infection.h
binomial_coefficient
binomial_coefficient(int n, int k): Random.cc
binomial_coefficient(int n, int k): Random.cc
birth_count
Population.cc
birthday
Demographics::birthday()
Person::birthday()
Birthfp
Global
bits
fred::tiny_bitset
bitsPerBlock
Bloque.h
BitType
fred::tiny_bitset::BitType()
BitType(): Bloque.h
bloque
bloque< ObjectType, MaskType >
bloque::bloque_iterator::bloque()
bloque::bloque_masked_iterator::bloque()
bloque::bloque()
Bloque.h
bloque< Person, fred::Population_Masks >
bloque_iterator
bloque
bloque_iterator
bloque::bloque_iterator
bloque_masked_iterator
bloque
bloque_masked_iterator
bloque::bloque_masked_iterator
bloque_masked_iterator< ObjectType const, __MaskType >
bloque
bloque_masked_iterator< ObjectType, __MaskType >
bloque
blq
bloque::bloque_iterator::blq()
bloque::bloque_masked_iterator::blq()
BOARDER
Global
buffer_char
RNG_State
buffer_dbl
RNG_State
buffer_index_char
RNG_State
buffer_index_dbl
RNG_State
build_binomial_cdf
build_binomial_cdf(double p, int n, std::vector< double > &cdf): Random.cc
build_binomial_cdf(double p, int n, std::vector< double > &cdf): Random.cc
Searching...
No Matches


Match play. Red trails 5-6 (Crawford) to 7. How should Red play 43?
pips Red=79 White=96
(CorrectAnswer= 0/0, ErrorScore= 0)
Red needs to win a gammon and he also has to create time to escape his rear checker. Both of these objectives lead us to 5/2, 5/1*. There is risk but also very high reward.
6/3, 6/2 is safe but still a small error. If Red led 6-5 (Crawford) the safe play would be correct.
6/3, 6/2 is safe but still a small error. If Red led 6-5 (Crawford) the safe play would be correct.
1. Cubeful 2-ply 5/2 5/1* Eq.: +0.087 0.466 0.078 0.001 - 0.534 0.137 0.005 2. Cubeful 2-ply 6/3 6/2 Eq.: +0.049 (-0.037) 0.447 0.078 0.002 - 0.553 0.108 0.003 3. Cubeful 2-ply 7/4 6/2 Eq.: -0.020 (-0.106) 0.410 0.080 0.003 - 0.590 0.135 0.003 4. Cubeful 2-ply 7/4 5/1* Eq.: -0.114 (-0.201) 0.374 0.069 0.001 - 0.626 0.215 0.008 5. Cubeful 0-ply 7/3 6/3 Eq.: -0.082 (-0.168) 0.382 0.077 0.002 - 0.618 0.165 0.005


Using names.txt (right click and 'Save Link/Target As...'), a 46K text file containing over five-thousand first names, begin by sorting it into alphabetical order. Then working out the alphabetical value for each name, multiply this value by its alphabetical position in the list to obtain a name score.
For example, when the list is sorted into alphabetical order, COLIN, which is worth 3 + 15 + 12 + 9 + 14 = 53, is the 938th name in the list. So, COLIN would obtain a score of 938 × 53 = 49714.
What is the total of all the name scores in the file?
Sort, calculate name value, multiply with order, done.
from urllib.request import urlopen
names_text = ''
with urlopen('https://projecteuler.net/project/resources/p022_names.txt') as f:
names_text = f.read().decode('utf-8')
names_text[:20]
names = list(map(lambda n: n.strip('"'), names_text.split(',')))
names[:10]
def solve():
start_ord = ord('A') - 1
alphabetical_value = lambda c: ord(c) - start_ord
name_value = lambda n: sum(map(alphabetical_value, n))
return sum((order * name_value(name) for order, name in enumerate(sorted(names), 1)))
solve()


All Classes
Actor
AIManager
AStarHeuristic
EditorFrame
EditorMarker
Game
GameObject
Ghost
Item
JPacmanGame
Map
Path
PathFinder
Player
State
StateEditor
StateGame
StateMenu
StateScoreboard


{% extends 'base.html' %} {% block content %}
Please select an existing folder on Google Drive or provide a new folder name where you want to upload the files to.
Would you like to create a new folder or upload to an existing directory?


SERVICES
Before we sign a contract or right a line of code, our team will spend the necessary time needed to understand your product vision.
The outcome of this scoping session is a proposal or high-statement work. Based on your requirements, we can provide a complete offering or just the pieces you need.


Nicolas Cage in talks to play Nicolas Cage in film about Nicolas Cage
by KNOE(CNN) - Actor Nicolas Cage is in final talks with Lionsgate for a new movie project in which Cage would play a fictional version of himself.
It's called "The Unbearable Weight of Massive Talent."
According to media reports, the script was written without Cage's knowledge by Tom Gormican and Kevin Etten.
Gormican sent the script with a letter to Cage asking him to join the project and play himself.
The metadrama will include nods to films Cage has starred in, such as “Leaving Las Vegas,” “Gone in 60 Seconds” and “Face-off.”
If the deal closes, Cage will also co-produce and Gormican will direct.
Copyright 2019 CNN. All rights reserved.


WITNESS LIST Higher Education Excellence Funding Committee March 27, 2002 -10:00A Higher Education Excellence Funding ON: Bailey, Guy (The University of Texas at San Antonio), San Antonio, TX Brunjes, Jim (Texas Tech University System), Lubbock, TX Burck, Dan (The University of Texas System), Austin, TX Hurley, Alfred F. (University of North Texas System), Denton, TX Lauro, Jesus Medina (South Houston High School Senior Class), Pasadena, TX Natalicio, Diana S. (The University of Texas at El Paso), El Paso, TX Pohl, Norval F. (University of North Texas System), Denton, TX Schmidly, David J. (Texas Tech University System), Lubbock, TX Scott, Tom (The University of Texas System), Austin, TX Sharpe, Edwin R. (The University of Texas System), Austin, TX Smith, Arthur K. (University of Houston System), Houston, TX Smith, David R. (Texas Tech University System), Lubbock, TX Wildenthal, Hobson (The University of Texas at Dallas), Richardson, TX Witt, Robert E. (The University of Texas at Arlington), Arlington, TX


Germany has a touch of everything: the majestic Alps, glorious miles of river and forest, fairytale castles, rejuvenating spas. Its cities are filled with art treasures as well as fine dining and irresistible shops. The exquisite wines are rivaled only by some of the world’s best beers. It’s no wonder Germany is such a popular destination.
A bit of a did you know section?
- The capital of Berlin has more bridges than Venice – Berlin boasts 960 bridges and 59.8 square kilometres of water consisting of lakes and around 180 kilometres of navigable waterways. Combined with its surrounding state Brandenburg, it houses Europe's largest inland water network.
- Germany is Europe's second largest beer consumer – Germans drank 2.55 billion gallons of beer in 2012, the lowest level since the reunification in 1990, but that's still more than anyone else in Europe apart from the Czechs. There are more than 1,200 breweries producing over 5,000 brands of beer.
- Germany has nearly 700 zoological gardens, wildlife parks, aquariums, bird parks, animal reserves, or safari parks, including 414 registered zoos (more than the USA) ! Berlin's Zoologischer Garten is the largest zoo in the world, both in terms of number of species (1,500) and animal population (14,000).


THAT OLD FEELING A film review by James Berardinelli Copyright 1997 James Berardinelli
RATING (0 TO 10): 4.0 Alternative Scale: ** out of ****
United States, 1997 U.S. Release Date: 4/4/97 (wide) Running Length: 1:42 MPAA Classification: PG-13 (Profanity, sexual situations) Theatrical Aspect Ratio: 1.85:1
Cast: Bette Midler, Dennis Farina, Paula Marshall, Danny Nucci, Gail O'Grady, David Rasche, Jamie Denton Director: Carl Reiner Producers: Leslie Dixon and Bonnie Bruckheimer Screenplay: Leslie Dixon Cinematography: Steve Mason Music: Patrick Williams U.S. Distributor: Universal Pictures
THAT OLD FEELING is a formulaic romantic comedy that doesn't have the decency to give us any real chemistry between the members of about five mix-and-match couples. While it's generally expected that all but the top echelon of entries into this genre are going to rely upon stock situations and familiar plot turns, the difference between an enjoyable romantic comedy and a wearisome one is whether sparks are evident in the character interaction. And, although THAT OLD FEELING features almost everybody with more than one partner, nothing ever clicks. So we're left with a tired story that goes to sleep after only about twenty-five minutes.
Of course, some of the matches aren't supposed to work. Take, for example, the marriage of Dan (Dennis Farina) and Rowena DeMauro (Gail O'Grady). Although these two have been together for fourteen years, anything more substantial than tolerance has long since drained out of their union. Then there's Dan's ex, actress Lilly Leonard (Better Midler), whose second husband, Alan (David Rasche) is one of those whiny, feel-good therapists. Finally, there's Molly (Paula Marshall), a twenty-something woman with no apparent career or direction in life, who has decided to marry would-be politician Keith (Jamie Denton), because he's the safe choice.
In fact, Molly and Keith's wedding is where the "action" begins. You see, according to the bride, her parents hate each other with "a nuclear capability." Sure enough, after a brief try at civilized conversation, their repartee devolves into a screaming match, which, in turn, leads to a heated kiss. Soon, Dan and Lilly are steaming up the inside of his sports car. Later, they sneak off together for a wild affair in New York City. Horrified that her parents' behavior might hurt her new husband's election chances (he's running on a family values platform), Molly sets off in pursuit, but, the longer she follows them, the more she realizes how dull her own love life is. Then, on top of that, she starts to fall for a tabloid photographer (Danny Nucci) who's helping her locate her delinquent mother and father.
Part of the problem with THAT OLD FEELING is that the main story -- the reunion between Dan and Lilly -- can't sustain the movie. Once they've stopped hurling insults and started kissing, that aspect of the film is dead-in-the-water. There's no place for it to go, except back to insults, then to more kissing, like a yo-yo. Hence, in order to pad things out to feature length, we have the who's-Molly-going-to-end-up- with subplot (as if we didn't know from the first moment Danny Nucci walks on screen). This might have worked if the characters had been a little more interesting (she's boring; he's goofy, but not in an endearing way) or if the actors had connected. While TV regular Paula Marshall and Nucci (CRIMSON TIDE, THE ROCK) look good, that's not enough.
At least Bette Midler and Dennis Farina (GET SHORTY) have their moments, although Dan and Lilly seem better suited to be good friends than lovers. Their arguments are forced and mechanical and their sex scenes are awkward, but they develop a genuine camaraderie while they're walking the streets of New York, slipping through a hotel lobby, and eating dinner. Midler and Farina could probably be very good in these roles if the script didn't limit them so badly.
THAT OLD FEELING was directed by veteran Carl Reiner (father of Rob), who used to helm all of Steve Martin's feature projects, and hasn't done much of note since ALL OF ME. Surprisingly for Reiner, who's a funny man, there aren't many laughs in THAT OLD FEELING. In fact, had this film turned into the madcap, screwball endeavor it occasionally tries to be, maybe the numerous flaws wouldn't have been so obvious. As it is, however, THAT OLD FEELING is just another example of a romantic comedy stuck using those old cliches in familiar and uninteresting ways.
- James Berardinelli e-mail<EMAIL_ADDRESS>ReelViews web site: http://www.cybernex.net/~berardin
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Lightweight, 3.5Kb minified.
A lightweight (3.5kb) JavaScript library to let users share their text selections to social networks, in desktop browsers. (Yes, like Medium)
Lightweight, 3.5Kb minified.
Start using with 3 lines of code.
No dependencies at all.
Tiny and comprehensive API.
The above example assumes you already have started Facebook's JavaScript SDK. Read more in the docs.
npm install sharect
Download and reference the minified JavaScript file in your HTML like the default example above.


Password:
Enter
Current Issues
Add New Issue
View All Issues
View Current Issues
Find Issue
NO.
TOPIC
STUDENT NAME
STUDENT ID
TIME SUBMITTED


Sign In
Divulgo
Menu
Complaint
Sign Out
Welcome to Divulgo!
Addressing concerns, tearing down predicaments.
 We act.
Send Complaint


Theory¶
Topology¶
Topology started with Leonhard Euler and the famous problem of the Seven Bridges of Königsberg: Can one construct a path that crosses each bridge exactly once and reaches all islands?
The fundamental assumption in topology is that connectivity is more important than distance. This lack of distinction is important to why topology is useful for analyzing data. Instead of getting wrapped up in myopic details of how far apart two points are, topology is concerned with qualitative questions, like: how many holes does the object have?, or: how many pieces is it constructed out of? Essentially, topology is a way to explore the shape of data without concern for things like which metric to use.
Fundamental shapes of data that can be studied with topology:
- linearities
- non-linearities
- clusters
- flares
- loops
Real-world data is often complex and contains multiple different fundamental shapes.
Topological Data Analysis¶
In applied mathematics, topological data analysis (TDA) is an approach to the analysis of datasets using techniques from topology. Extraction of information from datasets that are high-dimensional, incomplete and noisy is generally challenging. TDA provides a general framework to analyze such data in a manner that is insensitive to the particular metric chosen and provides dimensionality reduction and robustness to noise. Beyond this, it inherits functoriality, a fundamental concept of modern mathematics, from its topological nature, which allows it to adapt to new mathematical tools.
TDA offers:
- A lossy compressed mathematical representation of a data set. You can study the global structure of a dataset, down to the details of a single data point, without incurring a cognitive overload.
- Resistance to noise and missing data. TDA retains significant features of the data.
- Invariance. Only connectedness matters. The skew, size, or orientation of data does not fundamentally change that data.
- A data exploration tool. Get answers to questions you haven’t even asked yet.
- A methodology to study the shape of data and manifolds. TDA has a solid theoretical foundation and inherits functoriality.
Persistent homology will identify loops or holes in high dimensions that might indicate some unrealized time dependent behavior. This information can inform downstream analysis in many different ways. Alternatively, topological structures in data sets might not be directly interpretable, but still provide excellent signatures for discriminating between multiple different sets. In this context, the resulting persistence diagrams can be used as a feature in other machine learning models.
Another method from TDA is Mapper, which is designed to help you visualize and explore high dimensional data sets. Mapper will capture much of the critical topological structures as a graph which can be viewed in lower dimensions.


Replicants
Replicants are a very useful feature of the BeOS, but the aren't well known.
Therefore I'll give you a short introduction.
- Select "Show replicants" in you Be menu. This will show
little handles on every replicantable view.
- Now you can drag a replcatable view into a different application.
Simply click on its handle and begin to drag. Drop the view on a replicant
accepting application, like the desktop. This will create a copy
of that view in the destination application.
- To get rid of a replicated view, simply right-click on its handle
and select "Delete".


Javet¶
Javet is Java + V8 (JAVa + V + EighT). It is an awesome way of embedding Node.js and V8 in Java.
If you like my work, please Star this project. And, you may follow me @sjtucaocao, or visit http://caoccao.blogspot.com/. And the official support channel is at discord.
💖 If you use Mac OS (x86_64), please be aware that the Mac OS (x86_64) build will discontinue anytime because my MacBook Air mid-2012 will be soon deprecated by new version of V8. Please donate to support me purchasing a new Mac OS (x86_64) device. Or, if you have a retired Mac OS (x86_64) device and are fine with mailing it to me, that will also be great. Thank you for supporting Javet.
💖 If you use Mac OS (arm64), unfortunately there is no Mac OS (arm64) build because I don't have any Mac OS (arm64) device. Please donate to support me purchasing a new Mac OS (arm64) device.
Major Features¶
Linux + Mac OS + Windows (x86_64)
Node.js
v16.10.0
+ V8v<IP_ADDRESS>
(Which Node.js version do you prefer?)Dynamic switch between Node.js and V8 mode (Which mode do you prefer?)
Polyfill V8 mode with Javenode
V8 API exposure in JVM
JavaScript and Java interop
Native BigInt and Date
Javet engine pool
Easy spring integration
Live debug with Chrome DevTools
Quick Start¶
Dependency¶
Maven¶
<!-- Linux or Windows -->
<dependency>
<groupId>com.caoccao.javet</groupId>
<artifactId>javet</artifactId>
<version>1.0.0</version>
</dependency>
<!-- Mac OS (x86_64 Only) -->
<dependency>
<groupId>com.caoccao.javet</groupId>
<artifactId>javet-macos</artifactId>
<version>1.0.0</version>
</dependency>
Gradle Kotlin DSL¶
implementation("com.caoccao.javet:javet:1.0.0") // Linux or Windows
implementation("com.caoccao.javet:javet-macos:1.0.0") // Mac OS (x86_64 Only)
Gradle Groovy DSL¶
implementation 'com.caoccao.javet:javet:1.0.0' // Linux or Windows
implementation 'com.caoccao.javet:javet-macos:1.0.0' // Mac OS (x86_64 Only)
Hello Javet¶
// Node.js Mode
try (V8Runtime v8Runtime = V8Host.getNodeInstance().createV8Runtime()) {
System.out.println(v8Runtime.getExecutor("'Hello Javet'").executeString());
}
// V8 Mode
try (V8Runtime v8Runtime = V8Host.getV8Instance().createV8Runtime()) {
System.out.println(v8Runtime.getExecutor("'Hello Javet'").executeString());
}


| Set of PARAM {pmclust} | R Documentation |
This set of parameters are used in initialization, EM iterations, and final convergent results. All share the same structure in a list variable.
A list variable contains several parameters for computing.
The elements of PARAM
or PARAM.org
are
N | number of observations |
p | dimension of each observation, total number of variables |
K | number of clusters |
ETA | mixing proportion |
log.ETA | log of mixing proportion |
MU | centers, dim = \code{p*K} |
SIGMA | dispersions, a list containing K elements, each element is a matrix, dim = \code{p*p} |
U | Choleski of SIGMA, the same size of SIGMA |
U.check | checks of each elements of U, length K |
logL | log likelihood |
min.N.CLASS | minimum number of elements in a cluster (restrictions) |
The model parameters are ETA
, MU
, and SIGMA
, while
log.ETA
, U
, U.check
, and min.N.CLASS
are only used in computing.
Wei-Chen Chen<EMAIL_ADDRESS>and George Ostrouchov.
High Performance Statistical Computing (HPSC) Website: http://thirteen-01.stat.iastate.edu/snoweye/hpsc/
Programming with Big Data in R Website: http://r-pbd.org/
## Not run: # Use set.global() to generate one of this. # X.spmd should be pre-specified before calling set.global(). ## End(Not run)


crashdump_viewer
Module
crashdump_viewer
Module Summary
A WxWidgets based tool for browsing Erlang
crashdumps.
Description
The Crashdump Viewer is a WxWidgets based tool for browsing Erlang crashdumps.
For details about how to get started with the Crashdump Viewer, see the User's Guide.


Package com.github.tommyettinger.ds
Class FloatList
java.lang.Object
com.github.tommyettinger.ds.FloatList
- All Implemented Interfaces:
Arrangeable
,PrimitiveCollection<java.lang.Float,FloatConsumer>
,PrimitiveCollection.OfFloat
,java.io.Serializable
public class FloatList extends java.lang.Object implements PrimitiveCollection.OfFloat, Arrangeable, java.io.Serializable
A resizable, ordered or unordered float list. Primitive-backed, so it avoids the boxing that occurs with an ArrayList of Float.
If unordered, this class avoids a memory copy when removing elements (the last element is moved to the removed element's position).
This tries to imitate most of the
List
interface, though it can't implement it without boxing its items.
Has a Java 8 PrimitiveIterator
accessible via iterator()
.- See Also:
- Serialized Form
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
FloatList.FloatListIterator
Nested classes/interfaces inherited from interface com.github.tommyettinger.ds.PrimitiveCollection
PrimitiveCollection.OfFloat, PrimitiveCollection.OfInt, PrimitiveCollection.OfLong
-
Field Summary
Fields Modifier and Type Field Description float[]
items
protected FloatList.FloatListIterator
iterator1
protected FloatList.FloatListIterator
iterator2
boolean
ordered
protected int
size
-
Constructor Summary
Constructors Constructor Description FloatList()
Creates an ordered array with a capacity of 16.FloatList(boolean ordered, float[] array, int startIndex, int count)
Creates a new array containing the elements in the specified array.FloatList(boolean ordered, int capacity)
FloatList(float[] array)
Creates a new ordered array containing the elements in the specified array.FloatList(float[] array, int startIndex, int count)
Creates a new array containing the elements in the specified array.FloatList(int capacity)
Creates an ordered array with the specified capacity.FloatList(FloatList array)
Creates a new array containing the elements in the specific array. -
Method Summary
Modifier and Type Method Description boolean
add(float value)
void
add(float value1, float value2)
void
add(float value1, float value2, float value3)
void
add(float value1, float value2, float value3, float value4)
boolean
addAll(float... array)
boolean
addAll(float[] array, int offset, int length)
boolean
addAll(FloatList array)
boolean
addAll(FloatList array, int offset, int length)
void
clear()
boolean
contains(float value)
boolean
containsAll(FloatList other)
Returns true if this FloatList contains, at least once, every item inother
; otherwise returns false.FloatList
div(float value)
Divides each item in this FloatList byvalue
, stores it in this and returns it.void
div(int index, float value)
float[]
ensureCapacity(int additionalCapacity)
Increases the size of the backing array to accommodate the specified number of additional items.boolean
equals(java.lang.Object object)
Returns false if either array is unordered.boolean
equals(java.lang.Object object, float tolerance)
Returns false if either array is unordered.float
first()
Returns the first item.float
get(int index)
int
hashCode()
int
indexOf(float value)
void
insert(int index, float value)
void
insertRange(int index, int count)
Inserts the specified number of items at the specified index.boolean
isEmpty()
Returns true if the array is empty.FloatList.FloatListIterator
iterator()
Returns a Java 8 primitive iterator over the int items in this FloatList.int
lastIndexOf(float value)
FloatList
minus(float value)
Takes each item in this FloatList and subtractsvalue
, stores it in this and returns it.void
minus(int index, float value)
boolean
notEmpty()
Returns true if the array has one or more items.float
peek()
Returns the last item.FloatList
plus(float value)
Addsvalue
to each item in this FloatList, stores it in this and returns it.void
plus(int index, float value)
float
pop()
Removes and returns the last item.float
random(java.util.Random random)
Returns a random item from the array, or zero if the array is empty.FloatList
rem(float value)
Gets the remainder of each item in this FloatList withvalue
, stores it in this and returns it.void
rem(int index, float value)
boolean
remove(float value)
Removes the first occurrence ofvalue
from this FloatList, returning true if anything was removed.boolean
removeAll(FloatList array)
Removes from this array all of elements contained in the specified array.float
removeAt(int index)
Removes and returns the item at the specified index.void
removeRange(int startIndex, int endIndex)
Removes the items between the specified indices, inclusive.protected float[]
resize(int newSize)
boolean
retainAll(FloatList other)
Removes all items from this FloatList that are not present somewhere inother
, any number of times.void
reverse()
Reverses this Arrangeable in-place.void
set(int index, float value)
float[]
setSize(int newSize)
Sets the array size, leaving any values beyond the current size undefined.float[]
shrink()
Reduces the size of the backing array to the size of the actual items.void
shuffle(java.util.Random random)
Pseudo-randomly shuffles the order of this Arrangeable in-place.int
size()
Returns the number of elements in this Arrangeable.void
sort()
void
sort(int from, int to, FloatComparator c)
Sorts the specified range of elements according to the order induced by the specified comparator using mergesort.void
sort(FloatComparator c)
Sorts all elements according to the order induced by the specified comparator using mergesort.void
swap(int first, int second)
Switches the ordering of positionsa
andb
, without changing any items beyond that.FloatList
times(float value)
Multiplies each item in this FloatList byvalue
, stores it in this and returns it.void
times(int index, float value)
float[]
toArray()
java.lang.String
toString()
java.lang.String
toString(java.lang.String separator)
void
truncate(int newSize)
Reduces the size of the array to the specified size.static FloatList
with(float... array)
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Methods inherited from interface com.github.tommyettinger.ds.PrimitiveCollection.OfFloat
addAll, containsAll, removeAll
-
Field Details
-
items
public float[] items -
size
protected int size -
ordered
public boolean ordered -
iterator1
-
iterator2
-
-
Constructor Details
-
FloatList
public FloatList()Creates an ordered array with a capacity of 16. -
FloatList
public FloatList(int capacity)Creates an ordered array with the specified capacity. -
FloatList
public FloatList(boolean ordered, int capacity)- Parameters:
ordered
- If false, methods that remove elements may change the order of other elements in the array, which avoids a memory copy.capacity
- Any elements added beyond this will cause the backing array to be grown.
-
FloatList
Creates a new array containing the elements in the specific array. The new array will be ordered if the specific array is ordered. The capacity is set to the number of elements, so any subsequent elements added will cause the backing array to be grown. -
FloatList
public FloatList(float[] array)Creates a new ordered array containing the elements in the specified array. The capacity is set to the number of elements, so any subsequent elements added will cause the backing array to be grown. -
FloatList
public FloatList(float[] array, int startIndex, int count)Creates a new array containing the elements in the specified array. The capacity is set to the number of elements, so any subsequent elements added will cause the backing array to be grown. -
FloatList
public FloatList(boolean ordered, float[] array, int startIndex, int count)Creates a new array containing the elements in the specified array. The capacity is set to the number of elements, so any subsequent elements added will cause the backing array to be grown.- Parameters:
ordered
- If false, methods that remove elements may change the order of other elements in the array, which avoids a memory copy.
-
-
Method Details
-
size
public int size()Description copied from interface:Arrangeable
Returns the number of elements in this Arrangeable. Often this is shared withCollection.size()
, but isn't always.- Specified by:
size
in interfaceArrangeable
- Specified by:
size
in interfacePrimitiveCollection<java.lang.Float,FloatConsumer>
- Returns:
- the number of elements in this Arrangeable
-
add
public boolean add(float value)- Specified by:
add
in interfacePrimitiveCollection.OfFloat
-
add
public void add(float value1, float value2) -
add
public void add(float value1, float value2, float value3) -
add
public void add(float value1, float value2, float value3, float value4) -
addAll
-
addAll
-
addAll
public boolean addAll(float... array) -
addAll
public boolean addAll(float[] array, int offset, int length) -
get
public float get(int index) -
set
public void set(int index, float value) -
plus
public void plus(int index, float value) -
plus
Addsvalue
to each item in this FloatList, stores it in this and returns it. The presence of this method allows Kotlin code to use the+
operator (though it shouldn't be used more than once in an expression, because this method modifies this FloatList).- Parameters:
value
- each item in this will be assigneditem + value
- Returns:
- this for chaining and Kotlin compatibility
-
times
public void times(int index, float value) -
times
Multiplies each item in this FloatList byvalue
, stores it in this and returns it. The presence of this method allows Kotlin code to use the*
operator (though it shouldn't be used more than once in an expression, because this method modifies this FloatList).- Parameters:
value
- each item in this will be assigneditem * value
- Returns:
- this for chaining and Kotlin compatibility
-
minus
public void minus(int index, float value) -
minus
Takes each item in this FloatList and subtractsvalue
, stores it in this and returns it. This is just a minor convenience in Java, but the presence of this method allows Kotlin code to use the-
operator (though it shouldn't be used more than once in an expression, because this method modifies this FloatList).- Parameters:
value
- each item in this will be assigneditem - value
- Returns:
- this for chaining and Kotlin compatibility
-
div
public void div(int index, float value) -
div
Divides each item in this FloatList byvalue
, stores it in this and returns it. The presence of this method allows Kotlin code to use the/
operator (though it shouldn't be used more than once in an expression, because this method modifies this FloatList).- Parameters:
value
- each item in this will be assigneditem / value
- Returns:
- this for chaining and Kotlin compatibility
-
rem
public void rem(int index, float value) -
rem
Gets the remainder of each item in this FloatList withvalue
, stores it in this and returns it. The presence of this method allows Kotlin code to use the%
operator (though it shouldn't be used more than once in an expression, because this method modifies this FloatList).- Parameters:
value
- each item in this will be assigneditem % value
- Returns:
- this for chaining and Kotlin compatibility
-
insert
public void insert(int index, float value) -
insertRange
public void insertRange(int index, int count)Inserts the specified number of items at the specified index. The new items will have values equal to the values at those indices before the insertion. -
swap
public void swap(int first, int second)Description copied from interface:Arrangeable
Switches the ordering of positionsa
andb
, without changing any items beyond that.- Specified by:
swap
in interfaceArrangeable
- Parameters:
first
- the first positionsecond
- the second position
-
contains
public boolean contains(float value)- Specified by:
contains
in interfacePrimitiveCollection.OfFloat
-
containsAll
Returns true if this FloatList contains, at least once, every item inother
; otherwise returns false.- Parameters:
other
- an FloatList- Returns:
- true if this contains every item in
other
, otherwise false
-
indexOf
public int indexOf(float value) -
lastIndexOf
public int lastIndexOf(float value) -
remove
public boolean remove(float value)Removes the first occurrence ofvalue
from this FloatList, returning true if anything was removed. Otherwise, this returns false.- Specified by:
remove
in interfacePrimitiveCollection.OfFloat
- Parameters:
value
- the value to (attempt to) remove- Returns:
- true if a value was removed, false if the FloatList is unchanged
-
removeAt
public float removeAt(int index)Removes and returns the item at the specified index. Note that this is equivalent toList.remove(int)
, but can't have that name because we also haveremove(float)
that removes a value, rather than an index.- Parameters:
index
- the index of the item to remove and return- Returns:
- the removed item
-
removeRange
public void removeRange(int startIndex, int endIndex)Removes the items between the specified indices, inclusive. -
removeAll
Removes from this array all of elements contained in the specified array. Note that if a value is present more than once in this FloatList, only one of those occurrences will be removed for each occurrence of that value inarray
. Ifarray
has the same contents as this FloatList or has additional items, then removing all ofarray
will clear this.- Returns:
- true if this array was modified.
-
retainAll
Removes all items from this FloatList that are not present somewhere inother
, any number of times.- Parameters:
other
- an FloatList that contains the items that this should keep, whenever present- Returns:
- true if this FloatList changed as a result of this call, otherwise false
-
pop
public float pop()Removes and returns the last item. -
peek
public float peek()Returns the last item. -
first
public float first()Returns the first item. -
notEmpty
public boolean notEmpty()Returns true if the array has one or more items. -
isEmpty
public boolean isEmpty()Returns true if the array is empty.- Specified by:
isEmpty
in interfacePrimitiveCollection<java.lang.Float,FloatConsumer>
-
clear
public void clear()- Specified by:
clear
in interfacePrimitiveCollection<java.lang.Float,FloatConsumer>
-
shrink
public float[] shrink()Reduces the size of the backing array to the size of the actual items. This is useful to release memory when many items have been removed, or if it is known that more items will not be added.- Returns:
items
-
ensureCapacity
public float[] ensureCapacity(int additionalCapacity)Increases the size of the backing array to accommodate the specified number of additional items. Useful before adding many items to avoid multiple backing array resizes.- Returns:
items
-
setSize
public float[] setSize(int newSize)Sets the array size, leaving any values beyond the current size undefined.- Returns:
items
-
resize
protected float[] resize(int newSize) -
sort
public void sort() -
reverse
public void reverse()Description copied from interface:Arrangeable
Reverses this Arrangeable in-place.- Specified by:
reverse
in interfaceArrangeable
-
shuffle
public void shuffle(java.util.Random random)Description copied from interface:Arrangeable
Pseudo-randomly shuffles the order of this Arrangeable in-place.- Specified by:
shuffle
in interfaceArrangeable
- Parameters:
random
- anyRandom
implementation; preferLaserRandom
in this library
-
truncate
public void truncate(int newSize)Reduces the size of the array to the specified size. If the array is already smaller than the specified size, no action is taken. -
random
public float random(java.util.Random random)Returns a random item from the array, or zero if the array is empty. -
toArray
public float[] toArray() -
hashCode
public int hashCode()- Specified by:
hashCode
in interfacePrimitiveCollection<java.lang.Float,FloatConsumer>
- Overrides:
hashCode
in classjava.lang.Object
-
equals
public boolean equals(java.lang.Object object)Returns false if either array is unordered.- Specified by:
equals
in interfacePrimitiveCollection<java.lang.Float,FloatConsumer>
- Overrides:
equals
in classjava.lang.Object
-
equals
public boolean equals(java.lang.Object object, float tolerance)Returns false if either array is unordered. Otherwise, compares float items with the given tolerance for error. -
toString
public java.lang.String toString()- Overrides:
toString
in classjava.lang.Object
-
toString
public java.lang.String toString(java.lang.String separator) -
iterator
Returns a Java 8 primitive iterator over the int items in this FloatList. Iterates in order ifordered
is true, otherwise this is not guaranteed to iterate in the same order as items were added.
This will reuse one of two iterators in this FloatList; this does not allow nested iteration. UseFloatListIterator(FloatList)
to nest iterators.- Specified by:
iterator
in interfacePrimitiveCollection<java.lang.Float,FloatConsumer>
- Specified by:
iterator
in interfacePrimitiveCollection.OfFloat
- Returns:
- a
FloatIterator
; use its nextFloat() method instead of next()
-
with
- See Also:
FloatList(float[])
-
sort
Sorts all elements according to the order induced by the specified comparator using mergesort. Ifc
is null, this instead delegates tosort()
, which usesArrays.sort(float[])
, and does not always run in-place.This sort is guaranteed to be stable: equal elements will not be reordered as a result of the sort. The sorting algorithm is an in-place mergesort that is significantly slower than a standard mergesort, as its running time is O(n (log n)2), but it does not allocate additional memory; as a result, it can be used as a generic sorting algorithm.
- Parameters:
c
- the comparator to determine the order of the FloatList
-
sort
Sorts the specified range of elements according to the order induced by the specified comparator using mergesort.This sort is guaranteed to be stable: equal elements will not be reordered as a result of the sort. The sorting algorithm is an in-place mergesort that is significantly slower than a standard mergesort, as its running time is O(n (log n)2), but it does not allocate additional memory; as a result, it can be used as a generic sorting algorithm.
- Parameters:
from
- the index of the first element (inclusive) to be sorted.to
- the index of the last element (exclusive) to be sorted.c
- the comparator to determine the order of the FloatList
-


Gray
Grays for text and boxes.
evo-[value]
evo-black
Aa
evo-white
Aa
evo-gray
Aa
evo-gray-light
Aa
evo-gray-dark
Aa
Create an HTML tag suitable for displaying color such as

or

, and apply an evo-[color]
class such as evo-black
. The default font family can be adjusted in _evo_variables.scss.