Ukrainian officer reveals enemy death toll in Donbas on Nov 18
Two invaders were killed on Monday.
Officer of the 53rd Separate Mechanized Brigade of the Armed Forces of Ukraine Anatoliy Shtefan has disclosed the enemy death toll in Donbas, eastern Ukraine, over the past day.
"On November 18, 2019, the losses of Russian occupying forces totaled four people, namely: two people from the 3rd separate motorized rifle brigade of the 9th separate motorized rifle regiment were killed, and two people from the 9th separate motorized rifle regiment were wounded," he wrote on Telegram.
As UNIAN reported earlier, Russia's hybrid military forces on November 18 mounted 14 attacks on Ukrainian army positions in Donbas, eastern Ukraine, with one Ukrainian soldier reported as wounded in action.


Quick Start¶
A pangenome models the full set of genomic elements in a given species or clade. It can efficiently be encoded in the form of a variation graph, a type of sequence graph that embeds the linear sequences as paths in the graphs themselves.
To exchange pangenomes, the community frequently uses a strict subset of the Graphical Fragment Assembly GFA
format
version 1 (GFAv1). To navigate such files efficiently,
odgi
operates on a dynamic succinct variation graph representation, the odgi
format.
Build graph from GFA¶
Assuming that your current working directory is the root of the odgi
project, to construct an odgi
file from a
GFA
file, execute:
odgi build -g test/DRB1-3123.gfa -o DRB1-3123.og
The command creates a file called DRB1-3123.og
, which contains the input graph in odgi
format.
Display graph stats¶
To have basic information on the graph, execute:
odgi stats -i DRB1-3123.og -S | column -t
#length nodes edges paths
21997 4955 6777 12
This graph file has the following properties:
the total number of nucleotides of all nodes is 21997;
it has 4955 nodes, 6777 edges, and 12 paths.
Display path names and extract paths¶
The path’s names are:
odgi paths -i DRB1-3123.og -L
gi|568815592:32578768-32589835
gi|568815529:3998044-4011446
gi|568815551:3814534-3830133
gi|568815561:3988942-4004531
gi|568815567:3779003-3792415
gi|568815569:3979127-3993865
gi|345525392:5000-18402
gi|29124352:124254-137656
gi|28212469:126036-137103
gi|28212470:131613-146345
gi|528476637:32549024-32560088
gi|157702218:147985-163915
We can obtain their sequences in FASTA
format:
odgi paths -i DRB1-3123.og -f > paths.fasta
head paths.fasta -n 2
>gi|568815592:32578768-32589835
ATTTAACTCCATCTTTGAGAAACATTTAATAATGTAATGTGTTTGTCATACAGGGTGAATACAGATGCACGGG...
Generate a 1D visualization¶
To visualize the graph, execute:
odgi viz -i DRB1-3123.og -o DRB1-3123.png -x 500
to obtain the following PNG image:
In this 1-Dimensional visualization:
The graph nodes are arranged from left to right, forming the
pangenome sequence
.The colored bars represent the the paths versus the
pangenome sequences
in a binary matrix.The path names are visualized on the left.
The black lines under the paths are the links, which represent the graph topology.
See the odgi viz documentation for more information.


An Introduction to PCI Device Assignment with VFIO
Alex Williamson /<EMAIL_ADDRESS>Officially:
...but it's not limited to SR-IOV, or even PCI
Some suggest...
Sort of, yeah...
I've also heard...
Fabric?
Let me propose...
(OK, not really, but it's more accurate)
Weren't we talking about device assignment...
Device assignment is simply a multi-layer userspace driver
VFIO takes an abstract view of a device, we want to support anything
These are all regions
Even PCI config space itself is a region
VFIO_DEVICE_GET_INFO
Q: How does a device signal the driver?
A: Interrupts
EVENTFD(2) Linux Programmer's Manual EVENTFD(2)
NAME
eventfd - create a file descriptor for event notification
SYNOPSIS
#include <sys/eventfd.h>
int eventfd(unsigned int initval, int flags);
DESCRIPTION
eventfd() creates an "eventfd object" that can be used as an event
wait/notify mechanism by user-space applications, and by the kernel
to notify user-space applications of events...
Need an MMU for I/O, an IOMMU
Both required for secure user access
Solution: Page pinning
A device decomposed
"Creating fake devices since 2003"
How does VM programmed I/O reach a device?
How do guest PCI Config accesses reach a device?
Transparent VM mapping
• How does the guest program a device? QEMU: MemoryRegions* VFIO: Device file descriptor regions
• How does a device signal the guest? QEMU: EventNotifiers VFIO/KVM: Eventfds/irqfds configured via ioctls
• How does a device transfer data? QEMU: MemoryListeners VFIO: IOMMU mapping & pinning ioctls
*Except PCI configuration space
Workaround for NVIDIA Hyper-V detection "bug"
-cpu ...,hv_vendor_id=KeenlyKVM
<hyperv>
...
<vendor_id state='on' value='KeenlyKVM'/>
...
</hyperv>
QEMU 2.5+, libvirt v1.3.3+
vGPU on KVM - A VFIO Based Frameworkby Neo Jia & Kirti Wankhede from NVIDIAThursday 10am
http://awilliam.github.io/presentations/KVM-Forum-2016
Alex Williamson / alex.williamson@redhat.com


Course Number
Course Name
Grade
Fall 2017
MISY330
Database
A
ACCT350
Business Law
B
ACCT302
Accounting Info System
B
Spring 2018
MISY350
Web App Development
I
ACCT316
Intermedite Accounting
I
ACCT413
Tax
I


We believe that with passion and talent, anybody can be successful.
No prior knowledge required. We groom passionate individuals into leading tech talents working in tech companies from scratch. Enroll today!


The Digital Access Network
DANN - signposting you to UK schools IT projects for remote study
openstreetmap osm marker popup


Overview
It’s been quite some time since I shared my knowledge and the daily challenges that I overcome. I always wanted to get back into writing as it has always been therapeutic for me.
Today, I’m going to talk about how this blog is being hosted. We will start from the top down by looking first at the application level, then we will take a look at the hosting, the deployment, the server and finally the cloud provisioning.
Micro-Containerized cluster
The most ideal stack today would be:
- Etcd2 cluster with at least 5 nodes.
- Kubernetes cluster with at least 3 master nodes and 2 minion nodes.
- Let’s encrypt generated SSL certificates for all websites.
- Route53 for managing the DNS zones.
- All managed using Terraform.
That’s exactly what I did for work, but it’s way overkill and financially unacceptable for a blog.
The stack I designed for this blog:
- One t2.micro instance running NginX containers with support for SSL certificates from Let’s encrypt.
- Route53 for managing the DNS zones.
- All managed using Terraform.
The blog
I wanted something I could easily customize, and does not use many resources on the server. I thought of writing my own Go server to serve static files but why re-invent the wheel? Jekyll is very popular but Hugo is much nicer, getting quite popular and get few more points for being written in Go.
The hosting
Hosting a static website is quite common, there are many choices out there but none of them offer a free SSL certificate from Let’s Encrypt.
I’m using Nginx container as
the server listening on HTTP and HTTPS.
docker-gen watches for
containers exporting the variable VIRTUAL_HOST
. docker-gen
uses that
information to generate a configuration file for Nginx to listen on the
domain VIRTUAL_HOST
is assigned and forward the requests to the
container exporting the VIRTUAL_HOST
. Basically, the main Nginx
container is our reverse proxy and SSL terminating container.
Let’s encrypt Nginx proxy
container
also watch containers exporting the variable LETSENCRYPT_HOST
and
LETSENCRYPT_EMAIL
to generate the SSL certificate via Let’s Encrypt.
Here’s all the systemd unit files for the hosting
nginx.service
:
[Unit]
Description=The NGINX HTTP and reverse proxy server
Requires=docker.service data.mount
After=docker.service data.mount
[Service]
ExecStartPre=/bin/sh -c "docker inspect nginx >/dev/null 2>&1 && docker rm -f nginx || true"
ExecStartPre=/usr/bin/docker create --name nginx -p 80:80 -p 443:443 \
-v /etc/nginx/conf.d \
-v /etc/nginx/vhost.d \
-v /usr/share/nginx/html \
-v /data/nginx/certs:/etc/nginx/certs:ro \
nginx
ExecStart=/usr/bin/docker start -a nginx
ExecStop=-/usr/bin/docker stop nginx
ExecStopPost=/usr/bin/docker rm -f nginx
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
nginx-gen.service
:
[Unit]
Description=Automatically generate nginx configuration for serving docker containers
Requires=docker.service nginx.service
After=docker.service nginx.service
[Service]
ExecStartPre=/bin/sh -c "rm -f /tmp/nginx.tmpl && curl -Lo /tmp/nginx.tmpl https://raw.githubusercontent.com/jwilder/nginx-proxy/a72c7e6e20df3738ca365bf6c14598f6a8017500/nginx.tmpl"
ExecStartPre=/bin/sh -c "docker inspect nginx-gen >/dev/null 2>&1 && docker rm -f nginx-gen || true"
ExecStartPre=/usr/bin/docker create --name nginx-gen --volumes-from nginx \
-v /tmp/nginx.tmpl:/etc/docker-gen/templates/nginx.tmpl:ro \
-v /var/run/docker.sock:/tmp/docker.sock:ro \
jwilder/docker-gen \
-notify-sighup nginx -watch -only-exposed -wait 5s:30s \
/etc/docker-gen/templates/nginx.tmpl /etc/nginx/conf.d/default.conf
ExecStart=/usr/bin/docker start -a nginx-gen
ExecStop=-/usr/bin/docker stop nginx-gen
ExecStopPost=/usr/bin/docker rm -f nginx-gen
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
nginx-gen-letsencrypt.service
:
[Unit]
Description=Automatically generate lets encrypt certificates
Requires=docker.service nginx-gen.service
After=docker.service nginx-gen.service
[Service]
ExecStartPre=/bin/sh -c "docker inspect nginx-gen-letsencrypt >/dev/null 2>&1 && docker rm -f nginx-gen-letsencrypt || true"
ExecStartPre=/usr/bin/docker create --name nginx-gen-letsencrypt -e "NGINX_DOCKER_GEN_CONTAINER=nginx-gen" --volumes-from nginx \
-v /data/nginx/certs:/etc/nginx/certs:rw \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
jrcs/letsencrypt-nginx-proxy-companion
ExecStart=/usr/bin/docker start -a nginx-gen-letsencrypt
ExecStop=-/usr/bin/docker stop nginx-gen-letsencrypt
ExecStopPost=/usr/bin/docker rm -f nginx-gen-letsencrypt
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
nginx-provider.service
: This is only required to force the nginx-gen
to generate a valid configuration for nginx
so nginx
starts serving
the content provided by nginx-gen-letsencrypt.service
[Unit]
Description=Start the NginX provider
Requires=docker.service nginx-gen-letsencrypt.service
After=docker.service nginx-gen-letsencrypt.service
[Service]
ExecStartPre=/bin/sh -c "docker inspect nginx-provider >/dev/null 2>&1 && docker rm -f nginx-provider || true"
ExecStartPre=/usr/bin/docker create --name nginx-provider \
-e VIRTUAL_HOST=http-only.kalbas.it nginx
ExecStart=/usr/bin/docker start -a nginx-provider
ExecStop=-/usr/bin/docker stop nginx-provider
ExecStopPost=/usr/bin/docker rm -f nginx-provider
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
And finally, here’s the systemd unit file running my blog:
[Unit]
Description=The NGINX HTTP and reverse proxy server. For kalbas.it
Requires=docker.service nginx-provider.service
After=docker.service nginx-provider.service
[Service]
ExecStartPre=/bin/sh -c "docker inspect nginx-kalbas.it >/dev/null 2>&1 && docker rm -f nginx-kalbas.it || true"
ExecStartPre=/usr/bin/docker pull kalbasit/kalbas-it
ExecStartPre=/usr/bin/docker create --name nginx-kalbas.it \
-e VIRTUAL_HOST=kalbas.it \
-e LETSENCRYPT_HOST=kalbas.it \
-e<EMAIL_ADDRESS>\
kalbasit/kalbas-it
ExecStart=/usr/bin/docker start -a nginx-kalbas.it
ExecStop=-/usr/bin/docker stop nginx-kalbas.it
ExecStopPost=/usr/bin/docker rm -f nginx-kalbas.it
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
You might have noticed that all the mounted volumes are mounted from
/data
. I’m using Elastic File-system
for the /data
volume as I want to make sure that the new server
booting up can mount the same volume as the instance currently running.
Alternatives
- S3 Website Hosting.
- Few CDNs like CloudFront.
- AppEngine.
All of them have their own Pros and Cons but none of them provides Let’s Encrypt possibility.
Caddy is a very promising server with automatic Let’s Encrypt support, but it does not support automatic docker container proxy as of yet.
I am considering switching my deployment to Traefik as it does exactly what my setup does but with less containers. It’s also in Go!
The deployment
One of the best things I love about Travis-CI, is that it supports native deployments. It supports many providers but most importantly it supports a custom script.
At work, I’ve built a deploy
script that does the
following:
- Build a docker image, it requires Rockerfile
rather than
Dockerfile
to allow me to build, tag and push the image.
- Deploy to Kubernetes cluster.
I have forked the deploy
script and added support for
deploying to a server by SSH’ing to it, running docker pull
on the
image and restarting the systemd service.
The server
It’s no brainier today that CoreOS is the OS of choice when it comes to a Web Server. The ideal setup would be a CoreOS cluster, to allow the servers to roll a CoreOS update but again it’s not economical. See How to update the server below for more details.
How to update the server?
I’ve solved that by using an Elastic Load Balancer and have Terraform create an instance before removing the current one and update the ELB with the new instance ID.
Cloud provisioning
I’m using Terraform to provision AWS. The server itself is provisioned via cloud-config.
web_server.tf
:
resource "aws_security_group" "web_server" {
name_prefix = "web_server"
description = "Allow HTTP, HTTPS and SSH from anywhere"
vpc_id = "${module.vpc_us-east-1.vpc_id}"
tags {
Name = "web_server"
http = "yes"
https = "yes"
ssh = "yes"
self = "yes"
out_pub = "yes"
}
lifecycle {
create_before_destroy = true
}
}
resource "aws_security_group_rule" "web_server-allow-all-from-self" {
type = "ingress"
from_port = 0
to_port = 0
protocol = "-1"
self = true
security_group_id = "${aws_security_group.web_server.id}"
lifecycle {
create_before_destroy = true
}
}
resource "aws_security_group_rule" "web_server-allow-ssh-from-all" {
type = "ingress"
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["<IP_ADDRESS>/0"]
security_group_id = "${aws_security_group.web_server.id}"
lifecycle {
create_before_destroy = true
}
}
resource "aws_security_group_rule" "web_server-allow-http-from-all" {
type = "ingress"
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["<IP_ADDRESS>/0"]
security_group_id = "${aws_security_group.web_server.id}"
lifecycle {
create_before_destroy = true
}
}
resource "aws_security_group_rule" "web_server-allow-https-from-all" {
type = "ingress"
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["<IP_ADDRESS>/0"]
security_group_id = "${aws_security_group.web_server.id}"
lifecycle {
create_before_destroy = true
}
}
resource "aws_security_group_rule" "web_server-allow-all-out" {
type = "egress"
cidr_blocks = ["<IP_ADDRESS>/0"]
from_port = 0
to_port = 0
protocol = "-1"
security_group_id = "${aws_security_group.web_server.id}"
lifecycle {
create_before_destroy = true
}
}
resource "aws_security_group" "web_server_data" {
name_prefix = "web_server"
description = "Allow HTTP, HTTPS and SSH from anywhere"
vpc_id = "${module.vpc_us-east-1.vpc_id}"
tags {
Name = "web_server_data"
nfs = "yes"
}
lifecycle {
create_before_destroy = true
}
}
resource "aws_security_group_rule" "web_server_data-allow-all-from-web-server" {
type = "ingress"
from_port = 0
to_port = 0
protocol = "-1"
source_security_group_id = "${aws_security_group.web_server.id}"
security_group_id = "${aws_security_group.web_server_data.id}"
lifecycle {
create_before_destroy = true
}
}
resource "aws_efs_file_system" "web_server_data" {
tags {
Name = "web_server_data"
role = "web_server_data"
}
lifecycle {
prevent_destroy = true
}
}
resource "aws_efs_mount_target" "web_server_data" {
count = "${length(var.public_subnets["us-east-1"])}"
file_system_id = "${aws_efs_file_system.web_server_data.id}"
subnet_id = "${element(module.vpc_us-east-1.public_subnets, count.index)}"
security_groups = ["${aws_security_group.web_server_data.id}"]
lifecycle {
create_before_destroy = true
}
}
// TODO(kalbasit): The `data` type does not support the count metadata as of
// Terraform v0.7.0. We will continue using the deperecated `resource` for
// `template_file` until the `data` supports it.
// See https://github.com/hashicorp/terraform/issues/7919
resource "template_file" "web_server-cloud-config" {
count = "${length(var.public_subnets["us-east-1"])}"
template = "${file("${path.module}/templates/web_server-cloud-config.yml")}"
vars {
web_server_data_dns_name = "${element(aws_efs_mount_target.web_server_data.*.dns_name, count.index)}"
}
lifecycle {
create_before_destroy = true
}
}
resource "aws_instance" "web_server" {
count = 1
ami = "${data.aws_ami.coreos-stable.id}"
instance_type = "t2.micro"
vpc_security_group_ids = ["${aws_security_group.web_server.id}"]
subnet_id = "${element(module.vpc_us-east-1.public_subnets, count.index)}"
user_data = "${element(template_file.web_server-cloud-config.*.rendered, count.index)}"
tags {
Name = "web_server-${count.index}"
role = "web_server"
}
lifecycle {
create_before_destroy = true
}
}
resource "aws_elb" "web_server" {
name = "web-server"
subnets = ["${module.vpc_us-east-1.public_subnets}"]
security_groups = ["${aws_security_group.web_server.id}"]
listener {
instance_port = "80"
instance_protocol = "tcp"
lb_port = "80"
lb_protocol = "tcp"
}
listener {
instance_port = "443"
instance_protocol = "tcp"
lb_port = "443"
lb_protocol = "tcp"
}
instances = ["${aws_instance.web_server.*.id}"]
cross_zone_load_balancing = true
idle_timeout = "400"
connection_draining = true
connection_draining_timeout = "400"
tags {
Name = "web_server"
role = "lb"
}
}


After installation of the Crotal, crotal
command will be available
in your terminal window.
Go to the folder in which you want to put your site, simply use the
following command to create a new site named new
.
$ crotal init new
A basic Crotal site is like this:
▾ source/
▸ pages/
▸ posts/
▸ static/
▾ themes/
▸ default/
_config.yml
db.json
Your posts and pages content, which is the core data of your site, will
be stored at source/posts
and source/pages
. The static files you
may want to add to your site is under static/
. The config file
_config.yml
is used to config your site, it contains the information
like the site name, the author, the site description, etc.
Post is the very basic data format for your site. You can add a post using the following command:
$ crotal new_post 'hello-world-this-is-a-new-post'
However, you can still create a post mannually. Just create a new
.md
file under source/posts/
.
If you want to add a standalone webpage to your site, it is smart to add a page in your site.
To create a crotal page, simple type the following command:
$ crotal new_page
The instruction will guide you for creating the page. However, if you
want to mannually create a page, it will be simple, just add a .md
file with proper format to the folder source/pages
.
$ crotal generate
After generating the site, your site files will be located at the
preview
folder.
$ crotal server
Now you can browse the site at http://localhost:1124, if the port 1124 is already in use, please indicate a new port like this:
$ crotal server -p 8088


みんな投票
(Minna Tōhyō)
Show Debug Information
Toggle User List
Source Code
Connecting...
(If you cannot connect, make sure your browser has JavaScript enabled and it supports at least ECMAScript 2017. iOS 11+, Chrome 68+ should both work.)
Game starting.
Enter your nickname:
Host
Play
No connected players


--- permalink: /publications/ title: "Publications" author_profile: true --- You can also find my articles on my Google Scholar profile.
Avery Ma, Aladin Virmaux, Kevin Scaman, Juwei Lu
Under Review, 2020
Avery Ma, Fartash Faghri, Nicolas Papernot, Amir-massoud Farahmand
Under Review, 2020
Avery Ma, Alexander Wong, David Clausi
In Conference on Computer and Robot Vision (CRV), 2018
Avery Ma, Ahmed Gawish, Mark Lamm, Alexander Wong, Paul Fieguth
In Society for Information Display (SID) Symposium Digest of Technical Papers, 2018
Xiaodan Hu, Avery Ma, Ahmed Gawish, Mark Lamm, Paul Fieguth
In Conference on Vision and Imaging Systems (CVIS), 2017
Avery Ma, Ahmed Gawish, Mark Lamm, Alexander Wong, Paul Fieguth
Patent No.: [ 10009587 B1 ]
Avery Ma
University of Waterloo MASc Thesis
Avery Ma, Jonathan Tham, Terry Yang, Chris Song, Terry Ho
University of Waterloo 2016 Mechatronics Engineering Capstone Design Project


Zimbabwe vs Zambia Afcon match: List of Zim Warriors players dropped
Zimbabwe Warriors coach Joey Antipas has dropped three players for the trip to Zambia tomorrow.
The Warriors will face their northern neighbours in the second Group H encounter of the 2021 Afcon Qualifiers. The match will be played at Heroes National Stadium in Lusaka on Tuesday. Kick-off is at 6 pm.
Antipas dropped Terrence Dzukamanja, Thabani Kamusoko and goalkeekper Talbert Shumba from the travelling squad.
Below is a list of Zimbabwe senior men soccer team who will travel to Zambia on the 17th for the 2021 Total AFCON qualifier match.
- Elvis Chipezeze
- Simbarashe Chinani
- Ian Nekati
- Cliff Moyo
- Kelvin Moyo
- Teenage Hadebe
- Partson Jaure
- Alec Mudimu
- Ronald Pfumbidzai
- Marshall Munetsi
- Marvelous Nakamba
- Butholezwe Ncube
- Ovidy Karuru
- Khama Billiat
- Kudakwashe Mahachi
- Knox Mutizwa
- Knowledge Musona
- Prince Dube


This project is built as a part of Web development program by Generation Australia. Please feel free to fork the project.
Technologies Used:
HTML5, CSS3, Bootstrap, Async JavaScript
This project is built as a part of Codecademy responsive website. Please feel free to fork the project.
Technologies Used:
HTML5, CSS3, Bootstrap
This is a Collaborative project work done as a part of Web development program by Generation Australia.
Technologies Used:
HTML5, CSS3, Bootstrap, JavaScript
It's been a fantastic journey of learning web development languages. Crash course from
Generation Australia in collaboration with Academy Xi for 12 weeks made me build this portfolio.
I keep a positive mind to take up any challanges and never give up!
I believe in growth mindset, sharing ideas, continuous learning : Industry requirement changes, so the languages... I strive to get the best solution for the problems.
Apart from web development I make time for gardening, hiking and painting.
This is how you contact me
Email: swathimuroor@gmail.com


Cause for concern
THE killing on Thursday of Dumaguete radio broadcaster Dindo Generoso is worrisome as it shows the hand of police officers in many media killings in the country, the National Union of Journalists of the Philippines (NUJP) said yesterday.
Arrested yesterday for the killing of Generoso were suspects Teddy Reyes Salaw and retired policeman Glenn Corsame. Another lawman, Police Corporal Roger Rubio, is linked to the murder and remains at large.
“[T]he fact that two of the alleged killers are policemen is cause enough for worry and reinforces the findings of informal studies by media organizations that tend to indicate the involvement of state security personnel in many journalists’ murders in the country,” the NUJP said in a statement.
Another example of government security forces’ role in assaults on media is the Maguindanao Massacre, the “deadliest attack on the press in history” which took place in Ampatuan, Maguindanao on November 23, 2009, the NUJP said.
The NUJP claimed the attack was “plotted and led by government officials and abetted by officers and members of the police and military.” Charged with the gruesome murders of 58 people, including 32 members of the media, are police officers and Civilian Armed Forces Geographical Unit members.
The NUJP meanwhile lauded the Negros Oriental police for the “swift” apprehension of the suspects.
“With the speed with which the Negros Oriental police have acted, we are hoping that Rubio will also be caught soon and Generoso granted the justice his death deserves,” NUJP said.
“We... urge them to conduct an honest to goodness investigation into the suspected role of law enforcers and other state security personnel in the murder of journalists,” the media organization added.


Hello, my name is Jake Holt and this is my personal website. I developed it so that I could learn html, css, and javascript and have a place to store my projects, blog, and resume. The site still has a long way to go, but I try to work on it when I have some downtime. The current to do list for the website is: optimize for mobile users, change all of the pages over to using grid for formatting, and of course continue adding content.


From our earlier examples, we know that maximizing representation requires a combination of “packing” and “cracking” strategies with the idea that one party's voters are best utilized through narrow wins and wide losses. The efficiency gap calculation is based on the idea of wasted votes:
Following an election, we can determine the total number of wasted votes for each party (across all districts) and calculate the efficiency gap:
This formula will produce a value between 0 and 1 and can be converted to an advantage in actual number of representatives through multiplying by the number of districts.
in-context


Document 1
File
Home
Insert
￩
New
Open
Recent
Backstage Contents
Home Tab
Cut
Cut
Cut
Cut
Cut
Insert Tab


You can use this form through Camunda Tasklist by setting the formKey of a BPMN Start Event to: embedded:app:forms/first-form.html
embedded:app:forms/first-form.html


{% extends 'base2.html' %} {% load bootstrap4 %} {% block content %}
Login In
User has been successfully created. Please login in


MORTY
New Postmortem
Title
Start Time
End Time
Detect Time
Severity
Create Postmortem
×
Title
Start Time
End Time
Detect Time
Severity
Select
High
Medium
Low
Close
Add
Postmortem
×
Start Time
Total impact time
End Time
Time undetected
Detect Time
Time to resolve
Severity
High
Medium
Low
Contact
Team
Meeting
What Happened?
Tags
Postmortem History
Update Postmortem


Week 7 Learning Objectives
Big-O
- Order the common complexity classes according to their growth rate
Identify the complexity classes of common sort methods | Sort Name | Time Complexity | Space Complexity | |:——— |:—————— |:—————– | | bubble | O(__) | O(_) | | selection | O(__) | O(_) | | insertion | O(__) | O(_) | | merge | O(__) | O(_) | | quick | O(__) | O(_) |
- Identify complexity classes of code
Memoization and Tabulation
- Apply memoization to recursive problems to make them less than polynomial time.
- Apply tabulation to iterative problems to make them less than polynomial time.
Sorting Algorithms
- Explain the complexity of and write a function that performs bubble sort on an array of numbers.
- Time Complexity: O(__)
- Space Complexity: O(__)
- Code:
- Explain the complexity of and write a function that performs selection sort on an array of numbers.
- Time Complexity: O(__)
- Space Complexity: O(__)
- Code:
- Explain the complexity of and write a function that performs insertion sort on an array of numbers.
- Time Complexity: O(__)
- Space Complexity: O(__)
- Code:
- Explain the complexity of and write a function that performs merge sort on an array of numbers.
- Time Complexity: O(__)
- Space Complexity: O(__)
- Code:
- Explain the complexity of and write a function that performs quick sort on an array of numbers.
- Time Complexity: O(__)
- Space Complexity: O(__)
- Code:
- Explain the complexity of and write a function that performs a binary search on a sorted array of numbers.
- Time Complexity: O(__)
- Space Complexity: O(__)
- Code:
Lists, Stacks, and Queues
- Explain and implement a Linked List.
- What properties does an instance of a linked list track?
- What methods does a linked list need to implement?
- What are the time complexities for these methods?
- What’s the difference between a Singly Linked List and a Doubly Linked List? How would the difference impact the properties and the methods that we implement?
- Practice creating both types. Use Thursday’s project as an example/guide.
- Explain and implement a Stack.
- Define LIFO and ADT and how it relates
- What methods does a stack need to implement?
- What are the time complexities for these methods?
- Know how to implement a stack using both a node class as well as just an array instance variable. Use Thursday’s project as an example/guide for your usage of a Node. How would this change if we just wanted to keep an array instance variable on our Stack instead?
- Explain and implement a Queue.
- Define FIFO and ADT and how it relates
- What methods does a queue need to implement?
- What are the time complexities for these methods?
- Know how to implement a queue using both a node class as well as just an array instance variable. Use Thursday’s project as an example/guide for your usage of a Node. How would this change if we just wanted to keep an array instance variable on our Queue instead?
GitHub (not going to be on the assessment)
You will be able to participate in the social aspects of GitHub by starring repositories, following other developers, and reviewing your followers
You will be able to use Markdown to write code snippets in your README files
-
You will craft your GitHub profile and contribute throughout the course by keeping your "gardens green"
You will be able to identify the basics of a good Wiki entries for proposals and minimum viable products
You will be able to identify the basics of a good project README that includes technologies at the top, images, descriptions and code snippets
- You will have 2 hours to complete the assessment
- The assessment has two major sections
- ~20 Multiple Choice Questions
- VS Code Questions
- 4 different problems in total
- ~20 specs to pass spread across all problems


Implements various tests, visualizations, and metrics for diagnosing convergence of MCMC chains in phylogenetics. It implements and automates many of the functions of the AWTY package in the R environment.
| Version: | 1.0.1 |
| Depends: | R (≥ 3.3.0), ape, ggplot2 |
| Imports: | reshape2, phangorn, coda, viridis, grid, plyr, ggdendro, GGally, parallel |
| Suggests: | knitr |
| Published: | 2016-06-22 |
| Author: | Dan Warren, Anthony Geneva, Rob Lanfear |
| Maintainer: | Dan Warren <dan.l.warren at gmail.com> |
| License: | GPL-2 |
| NeedsCompilation: | no |
| CRAN checks: | rwty results |
| Reference manual: | rwty.pdf |
| Package source: | rwty_1.0.1.tar.gz |
| Windows binaries: | r-devel: rwty_1.0.1.zip, r-release: rwty_1.0.1.zip, r-oldrel: rwty_1.0.1.zip |
| OS X binaries: | r-release: rwty_1.0.1.tgz, r-oldrel: rwty_1.0.1.tgz |
| Old sources: | rwty archive |
Please use the canonical form https://CRAN.R-project.org/package=rwty to link to this page.


Before Change
// fake
generated_labels_ = torch.zeros(bs, 1).to(self.device)
generated_pred_ = self.model["discriminator"](
generated_images.detach()
)
fake_loss = F.binary_cross_entropy(generated_pred_, generated_labels_)
// loss
loss_discriminator = (real_loss + fake_loss) / 2.0
self.state.batch_metrics["loss_discriminator"] = loss_discriminator
def main():
After Change
random_latent_vectors
).detach()
// Combine them with real images
combined_images = torch.cat([generated_images, real_images])
// Assemble labels discriminating real from fake images
labels = torch.cat(
[torch.ones((batch_size, 1)), torch.zeros((batch_size, 1))]


| COMPANY NAME | START DATE | END DATE |
|---|
| COMPANY | APPLICATION |
|---|
| COMPANY | SELENIUM HOME | TEST DATA HOME | |
|---|---|---|---|
| Sagitech Solution | IYSM | Data Home- 1 | |
| Infosys | SmartIT | Data Home- 2 | |
| Test Pvt Ltd | IYSM | Data Home- 3 |
| COMPANY NAME | START DATE | END DATE |
|---|
| COMPANY | APPLICATION |
|---|
| COMPANY | SELENIUM HOME | TEST DATA HOME | |
|---|---|---|---|
| Sagitech Solution | IYSM | Data Home- 1 | |
| Infosys | SmartIT | Data Home- 2 | |
| Test Pvt Ltd | IYSM | Data Home- 3 |


- handleAcknowledge(Acknowledge) - Method in class com.whirvis.jraknet.session.RakNetSession
-
Handles an Acknowledge
packet and responds accordingly.
- handleCommand(String[]) - Method in class com.whirvis.jraknet.example.chat.server.command.BroadcastCommand
-
- handleCommand(String[]) - Method in class com.whirvis.jraknet.example.chat.server.command.ChannelCommand
-
- handleCommand(String[]) - Method in class com.whirvis.jraknet.example.chat.server.command.Command
-
Handles the command with the specified arguments.
- handleCommand(String[]) - Method in class com.whirvis.jraknet.example.chat.server.command.HelpCommand
-
- handleCommand(String[]) - Method in class com.whirvis.jraknet.example.chat.server.command.KickCommand
-
- handleCommand(String[]) - Method in class com.whirvis.jraknet.example.chat.server.command.StopCommand
-
- handleCustom(CustomPacket) - Method in class com.whirvis.jraknet.session.RakNetSession
-
Handles a CustomPacket
.
- handleEncapsulated(EncapsulatedPacket) - Method in class com.whirvis.jraknet.session.RakNetSession
-
Handles an EncapsulatedPacket
and makes sure all the data is
handled correctly.
- handleHandlerException(InetSocketAddress, Throwable) - Method in class com.whirvis.jraknet.client.RakNetClient
-
Called whenever the handler catches an exception in Netty.
- handleHandlerException(InetSocketAddress, Throwable) - Method in class com.whirvis.jraknet.server.RakNetServer
-
Called whenever the handler catches an exception in Netty.
- handleInput(String) - Method in class com.whirvis.jraknet.example.chat.server.command.CommandHandler
-
Handles raw input as a command.
- handleMessage(RakNetPacket, InetSocketAddress) - Method in class com.whirvis.jraknet.client.RakNetClient
-
Handles a packet received by the handler.
- handleMessage(RakNetServerSession, RakNetPacket, int) - Method in interface com.whirvis.jraknet.client.RakNetClientListener
-
Called when a packet has been received from the server and is ready to be
handled.
- handleMessage(RakNetPacket) - Method in class com.whirvis.jraknet.client.SessionPreparation
-
Handles the specified packet and automatically updates the preparation
data.
- handleMessage(RakNetServerSession, RakNetPacket, int) - Method in class com.whirvis.jraknet.example.chat.client.ChatClient
-
- handleMessage(RakNetClientSession, RakNetPacket, int) - Method in class com.whirvis.jraknet.example.chat.server.ChatServer
-
- handleMessage(RakNetClientSession, RakNetPacket, int) - Method in class com.whirvis.jraknet.example.RakNetServerBundleExample
-
- handleMessage(RakNetPacket, InetSocketAddress) - Method in class com.whirvis.jraknet.server.RakNetServer
-
Handles a packet received by the handler.
- handleMessage(RakNetClientSession, RakNetPacket, int) - Method in interface com.whirvis.jraknet.server.RakNetServerListener
-
Called when a packet has been received from a client and is ready to be
handled.
- handleMessage(RakNetPacket, int) - Method in class com.whirvis.jraknet.session.RakNetClientSession
-
- handleMessage(RakNetPacket, int) - Method in class com.whirvis.jraknet.session.RakNetServerSession
-
- handleMessage(RakNetPacket, int) - Method in class com.whirvis.jraknet.session.RakNetSession
-
This function is called when a packet is received by the session.
- handleMessage0(int, RakNetPacket) - Method in class com.whirvis.jraknet.session.RakNetSession
-
Handles an internal packet related to RakNet, if the ID is unrecognized
it is passed on to the underlying session class.
- handleNettyMessage(ByteBuf, InetSocketAddress) - Method in interface com.whirvis.jraknet.client.RakNetClientListener
-
Called when the handler receives a packet after the server has already
handled it, this method is useful for handling packets outside of the
RakNet protocol.
- handleNettyMessage(ByteBuf, InetSocketAddress) - Method in interface com.whirvis.jraknet.server.RakNetServerListener
-
Called when the handler receives a packet after the server has already
handled it, this method is useful for handling packets outside of the
RakNet protocol.
- handlePing(ServerPing) - Method in interface com.whirvis.jraknet.server.RakNetServerListener
-
Called when the server receives a ping from a client.
- handleQueue - Variable in class com.whirvis.jraknet.session.RakNetSession
-
- handler - Variable in exception com.whirvis.jraknet.client.NettyHandlerException
-
- handler - Variable in class com.whirvis.jraknet.client.RakNetClient
-
- handler - Variable in class com.whirvis.jraknet.server.RakNetServer
-
- handleUnknownMessage(RakNetServerSession, RakNetPacket, int) - Method in interface com.whirvis.jraknet.client.RakNetClientListener
-
Called when a packet with an ID below the user enumeration
(ID_USER_PACKET_ENUM
) cannot be handled by the session
because it is not programmed to handle it.
- handleUnknownMessage(RakNetClientSession, RakNetPacket, int) - Method in interface com.whirvis.jraknet.server.RakNetServerListener
-
Called when a packet with an ID below the user enumeration
(ID_USER_PACKET_ENUM
) cannot be handled by the session
because it is not programmed to handle it.
- HANDSHAKING - Static variable in class com.whirvis.jraknet.session.RakNetState
-
The session is handshaking.
- hasChannel(int) - Method in class com.whirvis.jraknet.example.chat.server.ChatServer
-
- hasClient(String) - Method in class com.whirvis.jraknet.example.chat.server.ChatServer
-
- hasPacket(int) - Static method in class com.whirvis.jraknet.protocol.MessageIdentifier
-
- hasPacket(String) - Static method in class com.whirvis.jraknet.protocol.MessageIdentifier
-
- hasSession(InetSocketAddress) - Method in class com.whirvis.jraknet.server.RakNetServer
-
- hasSession(long) - Method in class com.whirvis.jraknet.server.RakNetServer
-
- hasUsername(String) - Method in class com.whirvis.jraknet.example.chat.server.ChatServer
-
- HEADER - Static variable in class com.whirvis.jraknet.identifier.MinecraftIdentifier
-
- HelpCommand - Class in com.whirvis.jraknet.example.chat.server.command
-
Displays all of the commands that can be used on the server.
- HelpCommand() - Constructor for class com.whirvis.jraknet.example.chat.server.command.HelpCommand
-
- highestLatency - Variable in class com.whirvis.jraknet.session.RakNetSession
-


Your goal is to place a pebble in the top circle.
To place a pebbles in a circle, all the circles underneath need to have pebbles. You can then get these back.
Click on a circle to place athe number of pebbles indicated in the circle, or to remove itthem.


--- title: 信号处理 category: 爱技术 order: 6 icon-dir: /static/img/icon/signal-processing.png tut-dir: /tutorials/signal/ description: signal processing tech. tut-course-detail: - ["/tutorials/signal/signal-processing-theory", "信号处理", "/static/img/course_cover-small/signal-processing.png"] ---


5 Types of Branching
1.) Master Branch: Main branch where the final and working version of the code will go for a live site
2.) Release Branch: Secondary Branch that verifies new code before being released on Master
3.) Develop Branch: Branch where the majority of issues are corrected and merged from the class branch
4.) Class Branch: Code for a paticular class
5.) Hot Branch: A branch for patches that is typically only done when an enterprise is losing income


Unix weenie
`Prev `__
U
`Next `__
--------------
**Unix weenie**: n.
[ITS]
1. A derogatory play on ‘Unix wizard’, common among hackers who use Unix
by necessity but would prefer alternatives. The implication is that
although the person in question may consider mastery of Unix arcana to
be a wizardly skill, the only real skill involved is the ability to
tolerate (and the bad taste to wallow in) the incoherence and needless
complexity that is alleged to infest many Unix programs. “This shell
script tries to parse its arguments in 69 bletcherous ways.
2. A derogatory term for anyone who engages in uncritical praise of
Unix. Often appearing in the context “stupid Unix weenie”. See
`*Weenix* <../W/Weenix.html>`__, `*Unix
conspiracy* `__. See also
`*weenie* <../W/weenie.html>`__.
--------------
+------------------------------------+----------------------------+----------------------------+
| `Prev `__ | `Up <../U.html>`__ | `Next `__ |
+------------------------------------+----------------------------+----------------------------+
| Unix conspiracy | `Home <../index.html>`__ | unixism |
+------------------------------------+----------------------------+----------------------------+


|
WUT Velma robot API
|
ROS-based, Python interface class for WUT Velma Robot. More...
Classes | |
| class | CoreCsDiag |
| This class contains subsystem-specific diagnostic information for velma_core_cs. More... | |
| class | CoreVeBodyDiag |
| This class contains subsystem-specific diagnostic information for velma_core_cs. More... | |
| class | Link |
| This class contains information about single link of robot. More... | |
| class | SubscribedTopic |
| Class used for subscription for various ROS topics from the VelmaInterface class. More... | |
| class | VisualMesh |
| This class contains information about geometric object: mesh. More... | |
Public Member Functions | |
| def | getLastJointState (self) |
| Get the newest joint state. More... | |
| def | getJointStateAtTime (self, time) |
| Get interpolated joint state at a given time. More... | |
| def | getHandCurrentConfiguration (self, prefix) |
| Get current configuration of a specified hand. More... | |
| def | getHandLeftCurrentConfiguration (self) |
| Get current configuration of left hand. More... | |
| def | getHandRightCurrentConfiguration (self) |
| Get current configuration of right hand. More... | |
| def | getHeadCurrentConfiguration (self) |
| Get current configuration of neck. More... | |
| def | waitForInit (self, timeout_s=None) |
| Wait for the interface until it is initialized. More... | |
| def | waitForJointState (self, abs_time) |
| Wait for reception of joint state ROS msg with time stamp greater or equal abs_time. More... | |
| def | getBodyJointLimits (self) |
| Gets limits of joints of both arms and torso. More... | |
| def | getCartImpJointLimits (self) |
| Gets limits of joints of both arms and torso in cart_imp mode. More... | |
| def | getHeadJointLimits (self) |
| Gets limits of joints of neck. More... | |
| def | dbgPrint (self, s) |
| def | __init__ (self, debug=False) |
| Initialization of the interface. More... | |
| def | getCoreVeDiag (self, timeout_s=None) |
| Get diagnostic information for core VE. More... | |
| def | getCoreCsDiag (self, timeout_s=None) |
| Get diagnostic information for core CS. More... | |
| def | allowHandsCollisions (self) |
| Allow self-collisions of hands. More... | |
| def | disallowHandsCollisions (self) |
| Disallow self-collisions of hands. More... | |
| def | getRawFTr (self) |
| Gets right F/T sensor raw reading. More... | |
| def | getRawFTl (self) |
| Gets left F/T sensor raw reading. More... | |
| def | getTransformedFTr (self) |
| Gets right F/T sensor transformed reading. More... | |
| def | getTransformedFTl (self) |
| Gets left F/T sensor transformed reading. More... | |
| def | getWristWrenchr (self) |
| Gets estimated wrench for the right end effector. More... | |
| def | getWristWrenchl (self) |
| Gets estimated wrench for the left end effector. More... | |
| def | getLeftWccPolygon (self) |
| Get Polygon that defines wrist collision constraints for joints 5 and 6 of the left arm. More... | |
| def | getRightWccPolygon (self) |
| Get Polygon that defines wrist collision constraints for joints 5 and 6 of the right arm. More... | |
| def | switchToRelaxBehavior (self) |
| Switches the robot to relax behavior. More... | |
| def | enableMotor (self, motor) |
| Enable motor. More... | |
| def | startHomingMotor (self, motor) |
| Start homing procedure for specified motor. More... | |
| def | waitForMotor (self, motor, timeout_s=0) |
| Wait for an action for a motor to complete. More... | |
| def | enableMotors (self, timeout=0) |
| Enable all motors and wait. More... | |
| def | startHomingHP (self) |
| Start homing procedure for head pan motor. More... | |
| def | startHomingHT (self) |
| Start homing procedure for head tilt motor. More... | |
| def | waitForHP (self, timeout_s=0) |
| Wait for head pan motor. More... | |
| def | waitForHT (self, timeout_s=0) |
| Wait for head tilt motor. More... | |
| def | waitForT (self, timeout_s=0) |
| Wait for torso motor. More... | |
| def | getCartImpMvTime (self, side, T_B_T, max_vel_lin, max_vel_rot, current_T_B_T=None) |
| Calculate movement time for a given destination pose of end effector tool, given maximum allowed linear and rotational velocities. More... | |
| def | moveCartImp (self, prefix, pose_list_T_B_Td, pose_times, tool_list_T_W_T, tool_times, imp_list, imp_times, max_wrench, start_time=0.01, stamp=None, damping=PyKDL.Wrench(PyKDL.Vector(0.35, 0.35, 0.35), PyKDL.Vector(0.35, 0.35, 0.35)), path_tol=None) |
| Execute motion in cartesian impedance mode. More... | |
| def | moveCartImpRight (self, pose_list_T_B_Td, pose_times, tool_list_T_W_T, tool_times, imp_list, imp_times, max_wrench, start_time=0.01, stamp=None, damping=PyKDL.Wrench(PyKDL.Vector(0.35, 0.35, 0.35), PyKDL.Vector(0.35, 0.35, 0.35)), path_tol=None) |
| Execute motion in cartesian impedance mode for the right end-effector. More... | |
| def | moveCartImpLeft (self, pose_list_T_B_Td, pose_times, tool_list_T_W_T, tool_times, imp_list, imp_times, max_wrench, start_time=0.01, stamp=None, damping=PyKDL.Wrench(PyKDL.Vector(0.35, 0.35, 0.35), PyKDL.Vector(0.35, 0.35, 0.35)), path_tol=None) |
| Execute motion in cartesian impedance mode for the left end-effector. More... | |
| def | moveCartImpCurrentPos (self, side, start_time=0.2, stamp=None) |
| Move right end-effector to current position. More... | |
| def | moveCartImpRightCurrentPos (self, start_time=0.2, stamp=None) |
| Move right end-effector to current position. More... | |
| def | moveCartImpLeftCurrentPos (self, start_time=0.2, stamp=None) |
| Move left end-effector to current position. More... | |
| def | waitForEffector (self, prefix, timeout_s=None) |
| Wait for completion of end-effector motion in cartesian impedance mode. More... | |
| def | waitForEffectorLeft (self, timeout_s=None) |
| Wait for completion of left end-effector motion in cartesian impedance mode. More... | |
| def | waitForEffectorRight (self, timeout_s=None) |
| Wait for completion of right end-effector motion in cartesian impedance mode. More... | |
| def | lookAt (self, point, frame_id='torso_base') |
| Execute look at motion of head. More... | |
| def | cancelLookAt (self) |
| Cancel look at motion of head. More... | |
| def | isLookAtConnected (self) |
| Check if look at action is connected. More... | |
| def | waitForLookAt (self, timeout_s=None) |
| Wait for completion of look at motion. More... | |
| def | maxJointTrajLen (self) |
| Get maximum number of nodes in single joint trajectory. More... | |
| def | maxHeadTrajLen (self) |
| Get maximum number of nodes in single head trajectory. More... | |
| def | moveJointTrajAndWait (self, traj, start_time=0.2, stamp=None, position_tol=5.0/180.0 *math.pi, velocity_tol=5.0/180.0 *math.pi) |
| Execute joint space trajectory in joint impedance mode. More... | |
| def | moveJointTraj (self, traj, start_time=0.2, stamp=None, position_tol=5.0/180.0 *math.pi, velocity_tol=5.0/180.0 *math.pi) |
| Execute joint space trajectory in joint impedance mode. More... | |
| def | calculateJointTrajTime (self, q_map_start, traj_in, max_vel) |
| def | getJntImpMovementTime (self, q_dest_map, max_vel) |
| def | getJntImpMovementTime2 (self, q_dest_map_1, q_dest_map_2, max_vel) |
| def | moveJoint (self, q_dest_map, time, max_vel=None, start_time=0.2, stamp=None, position_tol=5.0/180.0 *math.pi, velocity_tol=5.0/180.0 *math.pi) |
| Execute simple joint space motion in joint impedance mode. More... | |
| def | moveJointImpToCurrentPos (self, start_time=0.2, stamp=None) |
| Switch core_cs to jnt_imp mode. More... | |
| def | waitForJoint (self, timeout_s=None) |
| Wait for joint space movement to complete. More... | |
| def | moveHeadTraj (self, traj, start_time=0.2, stamp=None, position_tol=5.0/180.0 *math.pi, velocity_tol=5.0/180.0 *math.pi) |
| Execute head trajectory in joint space. More... | |
| def | moveHead (self, q_dest, time, max_vel=None, start_time=0.2, stamp=None, position_tol=5.0/180.0 *math.pi, velocity_tol=5.0/180.0 *math.pi) |
| Execute simple head motion in joint space. More... | |
| def | waitForHead (self, timeout_s=None) |
| Wait for head movement to complete. More... | |
| def | moveHand (self, prefix, q, v, t, maxPressure, hold=False) |
| Executes hand motion with trapezoidal velocity profile. More... | |
| def | moveHandLeft (self, q, v, t, maxPressure, hold=False) |
| Executes motion with trapezoidal velocity profile for left hand. More... | |
| def | moveHandRight (self, q, v, t, maxPressure, hold=False) |
| Executes motion with trapezoidal velocity profile for right hand. More... | |
| def | resetHand (self, prefix) |
| Executes reset command for hand. More... | |
| def | resetHandLeft (self) |
| Executes reset command for left hand. More... | |
| def | resetHandRight (self) |
| Executes reset command for right hand. More... | |
| def | waitForHand (self, prefix, timeout_s=None) |
| Wait for completion of hand movement. More... | |
| def | waitForHandLeft (self) |
| Wait for completion of left hand movement. More... | |
| def | waitForHandRight (self) |
| Wait for completion of right hand movement. More... | |
| def | getAllLinksTf (self, base_frame, time=None, timeout_s=1.0) |
| Lookup transformations for all links. More... | |
| def | getTf (self, frame_from, frame_to, time=None, timeout_s=1.0) |
| Lookup tf transform and convert it to PyKDL.Frame. More... | |
| def | setGraspedFlag (self, side, status) |
| Inform control system about grasped object. More... | |
| def | sendIdentificationMeasurementCommand (self, side, command_index) |
| Make measurement for gravity compensation. More... | |
Static Public Member Functions | |
| def | getJointGroup (group_name) |
| Get names of all joints in group. More... | |
ROS-based, Python interface class for WUT Velma Robot.
This class implements methods that use ROS topics, actions and services to communicate with velma_task_cs_ros_interface subsystem of velma_task agent.
Definition at line 185 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.__init__ | ( | self, | |
debug = False |
|||
| ) |
Initialization of the interface.
Definition at line 730 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.allowHandsCollisions | ( | self | ) |
| def velma_common.velma_interface.VelmaInterface.calculateJointTrajTime | ( | self, | |
| q_map_start, | |||
| traj_in, | |||
| max_vel | |||
| ) |
Definition at line 1647 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.cancelLookAt | ( | self | ) |
Cancel look at motion of head.
Definition at line 1500 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.dbgPrint | ( | self, | |
| s | |||
| ) |
Definition at line 725 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.disallowHandsCollisions | ( | self | ) |
| def velma_common.velma_interface.VelmaInterface.enableMotor | ( | self, | |
| motor | |||
| ) |
Enable motor.
| motor | string: Name of motor to enable: 'hp', 'ht' or 't' |
| NameError | Parameter motor has invalid value. |
Definition at line 1179 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.enableMotors | ( | self, | |
timeout = 0 |
|||
| ) |
Enable all motors and wait.
| timeout_s | float: Timeout in seconds. |
Definition at line 1237 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.getAllLinksTf | ( | self, | |
| base_frame, | |||
time = None , |
|||
timeout_s = 1.0 |
|||
| ) |
Lookup transformations for all links.
| base_frame | string: name of base frame |
| time | rospy.Time: time at which transform should be interpolated |
| timeout_s | float: timeout in seconds |
| tf2_ros.TransformException | when the transform for the specified time is not avaible during the timeout_s. |
Definition at line 1948 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.getBodyJointLimits | ( | self | ) |
Gets limits of joints of both arms and torso.
Joints of neck and grippers are not included. The joints are used in impedance control (both joint and cartesian).
Definition at line 553 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.getCartImpJointLimits | ( | self | ) |
Gets limits of joints of both arms and torso in cart_imp mode.
Joints of neck and grippers are not included. The joints are used in impedance control (cart_imp mode).
Definition at line 564 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.getCartImpMvTime | ( | self, | |
| side, | |||
| T_B_T, | |||
| max_vel_lin, | |||
| max_vel_rot, | |||
current_T_B_T = None |
|||
| ) |
Calculate movement time for a given destination pose of end effector tool, given maximum allowed linear and rotational velocities.
| side | string: side: 'left' or 'right'. |
| T_B_T | PyKDL.Frame: destination pose. |
| max_vel_lin | float: maximum linear velocity. |
| max_vel_rot | float: maximum rotational velocity. |
| current_T_B_T | PyKDL.Frame: (optional) current pose. If ommited, the current pose from tf is considered. |
| AssertionError | Raised when prefix is neither 'left' nor 'right'. |
Definition at line 1304 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.getCoreCsDiag | ( | self, | |
timeout_s = None |
|||
| ) |
Get diagnostic information for core CS.
Definition at line 1062 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.getCoreVeDiag | ( | self, | |
timeout_s = None |
|||
| ) |
Get diagnostic information for core VE.
Definition at line 958 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.getHandCurrentConfiguration | ( | self, | |
| prefix | |||
| ) |
Get current configuration of a specified hand.
| prefix | string: Hand name, can be one of two values ('left' or 'right'). |
| NameError | If prefix is not 'left' or 'right'. |
Definition at line 362 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.getHandLeftCurrentConfiguration | ( | self | ) |
Get current configuration of left hand.
Definition at line 392 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.getHandRightCurrentConfiguration | ( | self | ) |
Get current configuration of right hand.
Definition at line 403 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.getHeadCurrentConfiguration | ( | self | ) |
Get current configuration of neck.
Definition at line 415 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.getHeadJointLimits | ( | self | ) |
Gets limits of joints of neck.
Definition at line 575 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.getJntImpMovementTime | ( | self, | |
| q_dest_map, | |||
| max_vel | |||
| ) |
Definition at line 1673 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.getJntImpMovementTime2 | ( | self, | |
| q_dest_map_1, | |||
| q_dest_map_2, | |||
| max_vel | |||
| ) |
Definition at line 1677 of file velma_interface.py.
|
static |
Get names of all joints in group.
| group_name | string: name of group. |
Definition at line 1560 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.getJointStateAtTime | ( | self, | |
| time | |||
| ) |
Get interpolated joint state at a given time.
| time | rospy.Time: Time of joint state to be computed. |
Definition at line 321 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.getLastJointState | ( | self | ) |
Get the newest joint state.
Definition at line 308 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.getLeftWccPolygon | ( | self | ) |
Get Polygon that defines wrist collision constraints for joints 5 and 6 of the left arm.
Definition at line 1143 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.getRawFTl | ( | self | ) |
Gets left F/T sensor raw reading.
Definition at line 1103 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.getRawFTr | ( | self | ) |
Gets right F/T sensor raw reading.
Definition at line 1095 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.getRightWccPolygon | ( | self | ) |
Get Polygon that defines wrist collision constraints for joints 5 and 6 of the right arm.
Definition at line 1151 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.getTf | ( | self, | |
| frame_from, | |||
| frame_to, | |||
time = None , |
|||
timeout_s = 1.0 |
|||
| ) |
Lookup tf transform and convert it to PyKDL.Frame.
Frame names can be the full names or the following simplified names can be used:
| frame_from | string: simplified name of base frame |
| frame_to | string: simplified name of target frame |
| time | rospy.Time: time at which transform should be interpolated |
| timeout_s | float: timeout in seconds |
| tf2_ros.TransformException | when the transform for the specified time is not avaible during the timeout_s. |
Definition at line 1970 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.getTransformedFTl | ( | self | ) |
Gets left F/T sensor transformed reading.
Definition at line 1119 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.getTransformedFTr | ( | self | ) |
Gets right F/T sensor transformed reading.
Definition at line 1111 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.getWristWrenchl | ( | self | ) |
Gets estimated wrench for the left end effector.
Definition at line 1135 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.getWristWrenchr | ( | self | ) |
Gets estimated wrench for the right end effector.
Definition at line 1127 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.isLookAtConnected | ( | self | ) |
Check if look at action is connected.
Definition at line 1510 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.lookAt | ( | self, | |
| point, | |||
frame_id = 'torso_base' |
|||
| ) |
Execute look at motion of head.
Definition at line 1483 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.maxHeadTrajLen | ( | self | ) |
Get maximum number of nodes in single head trajectory.
Definition at line 1552 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.maxJointTrajLen | ( | self | ) |
Get maximum number of nodes in single joint trajectory.
Definition at line 1545 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.moveCartImp | ( | self, | |
| prefix, | |||
| pose_list_T_B_Td, | |||
| pose_times, | |||
| tool_list_T_W_T, | |||
| tool_times, | |||
| imp_list, | |||
| imp_times, | |||
| max_wrench, | |||
start_time = 0.01 , |
|||
stamp = None , |
|||
damping = PyKDL.Wrench(PyKDL.Vector(0.35, 0.35, 0.35),PyKDL.Vector(0.35, 0.35, 0.35)) , |
|||
path_tol = None |
|||
| ) |
Execute motion in cartesian impedance mode.
| prefix | string: name of end-effector: 'left' or 'right'. |
| pose_list_T_B_Td | list of PyKDL.Frame: Poses of end-effector tool wrt. base frame. This is a path for the end-effector. |
| pose_times | list of float: Times of the poses in pose_list_T_B_Td wrt. start_time. |
| tool_list_T_W_T | list of PyKDL.Frame: Poses of tool frame wrt. wrist frame. This is a path for the tool of end-effector. |
| tool_times | list of float: Times of the tool poses in tool_list_T_W_T wrt. start_time. |
| imp_list | list of PyKDL.Wrench: Tool impedance values expressed in tool frame. This is a path for the impedance of end-effector. |
| imp_times | list of float: Times of the impedance values in imp_list wrt. start_time. |
| max_wrench | PyKDL.Wrench: Maximum allowed wrench during the motion expressed in tool frame. |
| start_time | float: Relative start time for the movement. |
| stamp | rospy.Time: Absolute start time for the movement. If both start_time and stamp arguments are set, only stamp is taken into account. |
| damping | PyKDL.Wrench: Damping for the tool expressed in tool frame. |
| path_tol | PyKDL.Twist: Maximum allowed error of tool pose expressed in the tool frame. Error of tool pose is a difference between desired tool equilibrium pose and measured tool pose. |
| AssertionError | Raised when prefix is neither 'left' nor 'right'. |
Definition at line 1334 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.moveCartImpCurrentPos | ( | self, | |
| side, | |||
start_time = 0.2 , |
|||
stamp = None |
|||
| ) |
Move right end-effector to current position.
Switch core_cs to cart_imp mode.
Definition at line 1416 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.moveCartImpLeft | ( | self, | |
| pose_list_T_B_Td, | |||
| pose_times, | |||
| tool_list_T_W_T, | |||
| tool_times, | |||
| imp_list, | |||
| imp_times, | |||
| max_wrench, | |||
start_time = 0.01 , |
|||
stamp = None , |
|||
damping = PyKDL.Wrench(PyKDL.Vector(0.35, 0.35, 0.35),PyKDL.Vector(0.35, 0.35, 0.35)) , |
|||
path_tol = None |
|||
| ) |
Execute motion in cartesian impedance mode for the left end-effector.
Definition at line 1409 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.moveCartImpLeftCurrentPos | ( | self, | |
start_time = 0.2 , |
|||
stamp = None |
|||
| ) |
Move left end-effector to current position.
Switch core_cs to cart_imp mode.
Definition at line 1430 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.moveCartImpRight | ( | self, | |
| pose_list_T_B_Td, | |||
| pose_times, | |||
| tool_list_T_W_T, | |||
| tool_times, | |||
| imp_list, | |||
| imp_times, | |||
| max_wrench, | |||
start_time = 0.01 , |
|||
stamp = None , |
|||
damping = PyKDL.Wrench(PyKDL.Vector(0.35, 0.35, 0.35),PyKDL.Vector(0.35, 0.35, 0.35)) , |
|||
path_tol = None |
|||
| ) |
Execute motion in cartesian impedance mode for the right end-effector.
Definition at line 1402 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.moveCartImpRightCurrentPos | ( | self, | |
start_time = 0.2 , |
|||
stamp = None |
|||
| ) |
Move right end-effector to current position.
Switch core_cs to cart_imp mode.
Definition at line 1423 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.moveHand | ( | self, | |
| prefix, | |||
| q, | |||
| v, | |||
| t, | |||
| maxPressure, | |||
hold = False |
|||
| ) |
Executes hand motion with trapezoidal velocity profile.
| prefix | string: name of hand, either 'left' or 'right' |
| q | 4-tuple of float: desired configuration for hand DOFs: [FingerOneKnuckleTwo, FingerTwoKnuckleTwo, FingerThreeKnuckleTwo, Spread] |
| v | 4-tuple of float: maximum velocities |
| t | 4-tuple of float: maximum current in motors |
| maxPressure | float: maximum pressure for tactile sensors |
| hold | bool: True if spread joint should hold its position after completion of motion |
| AssertionError | when prefix is neither 'left' nor 'right' |
Definition at line 1830 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.moveHandLeft | ( | self, | |
| q, | |||
| v, | |||
| t, | |||
| maxPressure, | |||
hold = False |
|||
| ) |
Executes motion with trapezoidal velocity profile for left hand.
Definition at line 1855 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.moveHandRight | ( | self, | |
| q, | |||
| v, | |||
| t, | |||
| maxPressure, | |||
hold = False |
|||
| ) |
Executes motion with trapezoidal velocity profile for right hand.
Definition at line 1862 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.moveHead | ( | self, | |
| q_dest, | |||
| time, | |||
max_vel = None , |
|||
start_time = 0.2 , |
|||
stamp = None , |
|||
position_tol = 5.0/180.0 * math.pi , |
|||
velocity_tol = 5.0/180.0*math.pi |
|||
| ) |
Execute simple head motion in joint space.
| q_dest | 2-tuple: goal configuration of head ('head_pan_joint', 'head_tilt_joint') |
| start_time | float: relative start time. |
| stamp | rospy.Time: absolute start time. float: position tolerance. float: velocity tolerance. |
| AssertionError | When q_dest has wrong length. |
Definition at line 1785 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.moveHeadTraj | ( | self, | |
| traj, | |||
start_time = 0.2 , |
|||
stamp = None , |
|||
position_tol = 5.0/180.0 * math.pi , |
|||
velocity_tol = 5.0/180.0*math.pi |
|||
| ) |
Execute head trajectory in joint space.
| traj | trajectory_msgs.msg.JointTrajectory: joint trajectory. |
| start_time | float: relative start time. |
| stamp | rospy.Time: absolute start time. float: position tolerance. float: velocity tolerance. |
| AssertionError | Raised when trajectory has too many nodes or not all joints are included in trajectory. |
Definition at line 1738 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.moveJoint | ( | self, | |
| q_dest_map, | |||
| time, | |||
max_vel = None , |
|||
start_time = 0.2 , |
|||
stamp = None , |
|||
position_tol = 5.0/180.0 * math.pi , |
|||
velocity_tol = 5.0/180.0*math.pi |
|||
| ) |
Execute simple joint space motion in joint impedance mode.
| q_dest_map | dictionary: dictionary {name:position} of goal configuration |
| start_time | float: relative start time. |
| stamp | rospy.Time: absolute start time. float: position tolerance. float: velocity tolerance. |
Definition at line 1686 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.moveJointImpToCurrentPos | ( | self, | |
start_time = 0.2 , |
|||
stamp = None |
|||
| ) |
Switch core_cs to jnt_imp mode.
Definition at line 1710 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.moveJointTraj | ( | self, | |
| traj, | |||
start_time = 0.2 , |
|||
stamp = None , |
|||
position_tol = 5.0/180.0 * math.pi , |
|||
velocity_tol = 5.0/180.0*math.pi |
|||
| ) |
Execute joint space trajectory in joint impedance mode.
Trajectories of length up to 50 nodes are allowed. This method does not block the executing thread.
| traj | trajectory_msgs.msg.JointTrajectory: joint trajectory. |
| start_time | float: relative start time. |
| stamp | rospy.Time: absolute start time. float: position tolerance. float: velocity tolerance. |
| AssertionError | Raised when trajectory has too many nodes. |
Definition at line 1601 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.moveJointTrajAndWait | ( | self, | |
| traj, | |||
start_time = 0.2 , |
|||
stamp = None , |
|||
position_tol = 5.0/180.0 * math.pi , |
|||
velocity_tol = 5.0/180.0*math.pi |
|||
| ) |
Execute joint space trajectory in joint impedance mode.
Trajectories of any length are allowed. This method blocks the executing thread until trajectory is completed, or error occures.
| traj | trajectory_msgs.msg.JointTrajectory: joint trajectory. |
| start_time | float: relative start time. |
| stamp | rospy.Time: absolute start time. float: position tolerance. float: velocity tolerance. |
Definition at line 1568 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.resetHand | ( | self, | |
| prefix | |||
| ) |
Executes reset command for hand.
| prefix | string: name of hand, either 'left' or 'right' |
| AssertionError | when prefix is neither 'left' nor 'right' |
Definition at line 1869 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.resetHandLeft | ( | self | ) |
Executes reset command for left hand.
Definition at line 1880 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.resetHandRight | ( | self | ) |
Executes reset command for right hand.
Definition at line 1887 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.sendIdentificationMeasurementCommand | ( | self, | |
| side, | |||
| command_index | |||
| ) |
Make measurement for gravity compensation.
This identification action requires four measurements: two before and two after object is grasped.
| side | string: Hand name, can be one of two values ('left' or 'right'). |
| command_index | int: measurement index - one of the following values: 1 - the first measurement before the object is grasped, 2 - the second measurement before the object is grasped, 3 - the first measurement after the object is grasped (in the same pose as for measurement 1), 4 - the second measurement after the object is grasped (in the same pose as for measurement 2). |
| NameError | If side is not 'left' or 'right'. |
Definition at line 2054 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.setGraspedFlag | ( | self, | |
| side, | |||
| status | |||
| ) |
Inform control system about grasped object.
| side | string: Hand name, can be one of two values ('left' or 'right'). |
| status | bool: True when object is grasped and gravity compensation is active, False otherwise. |
| NameError | If side is not 'left' or 'right'. |
Definition at line 2025 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.startHomingHP | ( | self | ) |
Start homing procedure for head pan motor.
Definition at line 1257 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.startHomingHT | ( | self | ) |
Start homing procedure for head tilt motor.
Definition at line 1265 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.startHomingMotor | ( | self, | |
| motor | |||
| ) |
Start homing procedure for specified motor.
| motor | string: Name of motor to enable: 'hp' or 'ht' |
| NameError | Parameter motor has invalid value. |
Definition at line 1193 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.switchToRelaxBehavior | ( | self | ) |
Switches the robot to relax behavior.
Definition at line 1171 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.waitForEffector | ( | self, | |
| prefix, | |||
timeout_s = None |
|||
| ) |
Wait for completion of end-effector motion in cartesian impedance mode.
| prefix | string: name of end-effector: 'left' or 'right'. |
| timeout_s | float: timeout in seconds. |
| AssertionError | Raised when prefix is neither 'left' nor 'right' |
Definition at line 1437 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.waitForEffectorLeft | ( | self, | |
timeout_s = None |
|||
| ) |
Wait for completion of left end-effector motion in cartesian impedance mode.
| timeout_s | float: Timeout in seconds. |
Definition at line 1465 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.waitForEffectorRight | ( | self, | |
timeout_s = None |
|||
| ) |
Wait for completion of right end-effector motion in cartesian impedance mode.
| timeout_s | float: Timeout in seconds. |
Definition at line 1473 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.waitForHand | ( | self, | |
| prefix, | |||
timeout_s = None |
|||
| ) |
Wait for completion of hand movement.
| prefix | string: name of hand, either 'left' or 'right' |
| AssertionError | when prefix is neither 'left' nor 'right' |
Definition at line 1894 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.waitForHandLeft | ( | self | ) |
Wait for completion of left hand movement.
Definition at line 1913 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.waitForHandRight | ( | self | ) |
Wait for completion of right hand movement.
Definition at line 1920 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.waitForHead | ( | self, | |
timeout_s = None |
|||
| ) |
Wait for head movement to complete.
Definition at line 1812 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.waitForHP | ( | self, | |
timeout_s = 0 |
|||
| ) |
Wait for head pan motor.
| timeout_s | float: Timeout in seconds. |
Definition at line 1274 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.waitForHT | ( | self, | |
timeout_s = 0 |
|||
| ) |
Wait for head tilt motor.
| timeout_s | float: Timeout in seconds. |
Definition at line 1284 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.waitForInit | ( | self, | |
timeout_s = None |
|||
| ) |
Wait for the interface until it is initialized.
| timeout_s | float: Timeout in seconds. |
Definition at line 474 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.waitForJoint | ( | self, | |
timeout_s = None |
|||
| ) |
Wait for joint space movement to complete.
Definition at line 1718 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.waitForJointState | ( | self, | |
| abs_time | |||
| ) |
Wait for reception of joint state ROS msg with time stamp greater or equal abs_time.
| abs_time | rospy.Time: absolute time. |
Definition at line 538 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.waitForLookAt | ( | self, | |
timeout_s = None |
|||
| ) |
Wait for completion of look at motion.
| timeout_s | float: timeout in seconds. |
Definition at line 1519 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.waitForMotor | ( | self, | |
| motor, | |||
timeout_s = 0 |
|||
| ) |
Wait for an action for a motor to complete.
| motor | string: Name of motor to enable: 'hp', 'ht' or 't' |
| timeout_s | float: Timeout in seconds. |
| NameError | Parameter motor has invalid value. |
Definition at line 1207 of file velma_interface.py.
| def velma_common.velma_interface.VelmaInterface.waitForT | ( | self, | |
timeout_s = 0 |
|||
| ) |
Wait for torso motor.
| timeout_s | float: Timeout in seconds. |
Definition at line 1294 of file velma_interface.py.


Create your profile with this portal to apply online for notified services
Already Registered? Login Here
Copyright © 2018 Caste Validity & Certification System Ltd.,, All Rights Reserved A


Pack Your Junk
Almost anything - if it fits in a box, we'll take it
Almost anything - if it fits in a box, we'll take it
We'll even reimburse your shipping costs
We post your items on ReuseRat.com & pay you when an item sells
That depends! Within a few weeks you can expect a few of your items to sell. We post an item for a maximum of 70 days before moving it to clearance.
It's in our best interest to sell your items at a reasonable price. Using our price match algorithm, we decrease prices over time the longer an item doesn't sell.
If an item doesn't sell after 90 days, you have two options. You can choose for us to donate the item on your behalf, or we can send the item back to you.
You sure will! Simply upload your shipping receipt and you'll receive store credit. Desire more? Follow us on social media for discounts!
Used clothing is difficult to accept, as we must reject most items based on quality requirements. ThredUp is a pretty cool place for clothing


"Brother"
Yakuza tough guy Yamamoto (Beat Takeshi) is forced to leave Tokyo and heads to LA to find his younger half-brother Ken (Claude Maki.) Soon, the older gangster realizes he is thrust back into the old violence he left behind in Japan and, before long, he commands a sizable gang of his own. When his Yakuza brethren refuse to bow down to Mafia pressures, it's all-out war in director/writer Takeshi Kitano's "Brother."
Steeped in the long tradition of the Yakuza - a gangster society that is an integral part of the overall Japanese culture - "Brother" begins with Yamamoto (Beat Takeshi, the director's on-screen moniker) arriving, alone, in Los Angeles. He's looking for his relocated half-brother and, finally, finds out where he lives. Flash back to Tokyo and we see the end of Yamamoto's Yakuza clan as a rival gang absorbs it. The deal requires that Yamamoto be eliminated to save the clan, but, the crime boss is secreted to the US.
Once in the good old USA, Yamamoto picks up where he left off in Japan, taking charge of Ken's homeboys. He joins forces with a rival Japanese gang led by Shirase (Masaya Kato) and they being to take on the Chicano street gangs, eliminate them, then move into their territory. Soon, the usurpers come to the attention of the local Mafia and war breaks out between the enemy factions on the streets of LA.
There is one thing you can say about Takeshi Kitano's films. They are the vision of the filmmaker and, whether light comedy or gangland drama, have his firm imprint on every one. His use of over-bearing, schmarmy, cheesy 60's orchestral movie music, often utilized inappropriately, is a trademark. He frequently has the actors look directly into the camera, not at the audience but at the actors they are playing off of. He also maintains the image of the strong, silent type (or, as in the comedy "Kikujiro", the weak, silent type) who uses violence instead of words to make his point.
Kitano's films are interesting - maybe not always good, but always interesting. In "Brother," there are a number of bits that don't quite work. Kitano uses frequent non sequitur scenes of gangsters playing basketball or throwing a football that have nothing to do with the story and actually take attention from the gangland drama. He also, at times, injects humor into violent scenes, taking the edge off of such sequences. I'll also mention the saccharine score, again, as an annoyance.
On the plus side, Kitano gives full shrift to examining the Yakuza sub-culture with its codes of chivalry, obligation, loyalty, obedience and brotherhood. Members of a Yakuza clan maintain a fanatical loyalty to their anikis (brothers) within the gang with a willingness to put one's life on the line. This loyalty, obedience and obligation are depicted vividly and violently throughout the story and lend the viewer a look into this culture, little known to American audiences.
Emotion, or lack thereof, takes the lead over the acting in "Brother." The Japanese characters, led by Yamamoto, are symbolic in the dedication to the Yakuza clan. The gang leader's right hand man, Kato (Susumu Terajima), shows his complete commitment to Yamamoto as he declares to "stake my life" on protecting his boss and brother. For Kato, the stakes are high. Omar Epps, as one of Ken's homies, Denny, has a violent initial confrontation with Yamamoto, but overcomes his suspicion and dislike for the man and embraces the Yakuza philosophy and loyalty to his boss. The rest of the cast, with some exceptions, is there to be the fodder that the gang war uses up in copious quantities.
During a summer season that suffers from a dearth of good mainstream flicks, the independent film market is called upon to provide the intelligence in this season's film-going experience. Considering the utter mediocrity of blockbuster fare, the discerning movie maven has some alternatives. There hasn't been, over the years, a plethora of Yakuza gangster flicks - Sidney Pollack's "The Yakuza" (1975) and Ridley Scott's "Black Rain" (1989) are two - and none from Japanese makers in our market, with the exception of "Brother" and some vintage Akira Kurosawa flicks. Kitano's is a flawed work, but a breath of fresh air despite the problems. I give it a B-.
For more Reeling reviews visit www.reelingreviews.com
<EMAIL_ADDRESS><EMAIL_ADDRESS>========== X-RAMR-ID: 28994 X-Language: en X-RT-ReviewID: 240088 X-RT-TitleID: 1107809 X-RT-SourceID: 386 X-RT-AuthorID: 1488 X-RT-RatingText: B-
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


When a matching ticket becomes available, you'll receive an email alert.
Make sure that you've entered your email address in your account page.
| Date Added | Ticket Number | Prize | Type "Needed" means that you're looking for that ticket and "Available" means you have that ticket available. |
Actions Click "Type" to toggle your ticket's type. Click "Delete" to remove it entirely. |
|
|---|---|---|---|---|---|
| {{ ticket.created | date:'mediumDate' }} | {{ ticket.num }} | {{ ticket.prize }} | Available | Needed | Delete |


Vibhuti Singh
🎓I’m a Full stack developer & have good hands on linux , Nodejs , javascript , html.
Kartikeya Sharma
🎓I’m a Machine Learning Enthusiast have a good knowledge in mobile app development .
Alankar Saxena
🎓I’m a Full stack developer & have good hands on Django, React JS & GitHub.


Salsa
Menu
Movies
Actors
News
Showtimes
Login / Register
SUBMIT MOVIE REVIEW
Movie Name
Rating
1
2
3
4
5
Title
Review


It has been a LONG time since I last participated in Tidy Tuesday. Apologies #rstats world! It turns out getting a PhD is… alot. But I obviously had to return for the Squirrel Census.
library(dplyr)
library(stringr)
library(kableExtra)
library(ggplot2)
library(purrr)
library(magrittr)
setwd("~/Desktop/tidytuesday/data/2019/2019-10-29")
sq <- read.csv("nyc_squirrels.csv",stringsAsFactors = F)
names(sq)
## [1] "long"
## [2] "lat"
## [3] "unique_squirrel_id"
## [4] "hectare"
## [5] "shift"
## [6] "date"
## [7] "hectare_squirrel_number"
## [8] "age"
## [9] "primary_fur_color"
## [10] "highlight_fur_color"
## [11] "combination_of_primary_and_highlight_color"
## [12] "color_notes"
## [13] "location"
## [14] "above_ground_sighter_measurement"
## [15] "specific_location"
## [16] "running"
## [17] "chasing"
## [18] "climbing"
## [19] "eating"
## [20] "foraging"
## [21] "other_activities"
## [22] "kuks"
## [23] "quaas"
## [24] "moans"
## [25] "tail_flags"
## [26] "tail_twitches"
## [27] "approaches"
## [28] "indifferent"
## [29] "runs_from"
## [30] "other_interactions"
## [31] "lat_long"
## [32] "zip_codes"
## [33] "community_districts"
## [34] "borough_boundaries"
## [35] "city_council_districts"
## [36] "police_precincts"
What weird stuff can we find? The highlight_fur_color
field catches my eye. Who knew squirrels were into highlights?
tt = sq %>% group_by(unique_squirrel_id) %>% summarise(primary_fur_color = primary_fur_color[1]) %>% group_by(primary_fur_color) %>% summarise(count=n()) %>% arrange(desc(count)) %>% as.data.frame()
kable(tt) %>% kable_styling()
| primary_fur_color | count |
|---|---|
| Gray | 2468 |
| Cinnamon | 392 |
| Black | 103 |
| NA | 55 |
tt <- sq %>% group_by(unique_squirrel_id) %>% summarise(primary_fur_color = primary_fur_color[1], highlight_fur_color = highlight_fur_color[1]) %>% group_by(primary_fur_color, highlight_fur_color) %>% summarise(count = n()) %>% arrange(desc(count)) %>% as.data.frame()
kable(tt) %>% kable_styling()
| primary_fur_color | highlight_fur_color | count |
|---|---|---|
| Gray | NA | 894 |
| Gray | Cinnamon | 750 |
| Gray | White | 487 |
| Gray | Cinnamon, White | 265 |
| Cinnamon | Gray | 162 |
| Cinnamon | White | 94 |
| Black | NA | 74 |
| Cinnamon | NA | 62 |
| Cinnamon | Gray, White | 58 |
| NA | NA | 55 |
| Gray | Black, Cinnamon, White | 32 |
| Gray | Black | 24 |
| Black | Cinnamon | 15 |
| Cinnamon | Black | 10 |
| Gray | Black, Cinnamon | 9 |
| Black | Gray | 8 |
| Gray | Black, White | 7 |
| Black | Cinnamon, White | 3 |
| Cinnamon | Black, White | 3 |
| Cinnamon | Gray, Black | 3 |
| Black | White | 2 |
| Black | Gray, White | 1 |
I’m kind of surprised that gray with black highlights is so uncommon. But to be fair, that surprise is based on absolutely no knowlege of NYC squirrels. Enlighten me!
The next weird thing I wanted to dig in was the other_activities
field. Look at some of these gems.
unique(sq$other_activities)[3:12]
## [1] "wrestling with mother"
## [2] "grooming"
## [3] "walking"
## [4] "moving slowly"
## [5] "sitting"
## [6] "eating (ate upside down on a tree — #jealous)"
## [7] "running (with nut)"
## [8] "playing with #5"
## [9] "hiding nut"
## [10] "drank from a pond of rain water"
I’m interested in the squirrel interactions.
interactions <- sq[str_which(sq$other_activities, "#"), ]
#interactions[1, ]
interactions <- interactions[-1, ] ## get rid of #jealous
The first thing I want to know is whether this level of detail is concentrated in one pocket (due to a few really intense data collectors). Actually, no!
ggplot(sq, aes(long, lat)) + geom_point() + geom_point(data = interactions, aes(long, lat), col = "red") + theme_minimal()
For each interaction, who is the other squirrel?
nums <- unlist(map(str_split(interactions$other_activities, "#"), 2)) ## grab the number
justNums <- str_replace_all(nums, "[^0-9]", "") ## get rid of the extra junk
interactions$otherSquirrel <- justNums
Ok, now for some data munging. If we look at the unique_squirrel_id
field, it isn’t a perfect paste of “Hectare ID” + “Shift” + “Date” + “Hectare Squirrel Number.” The hectare ID has to be un-padded, the date has to be striped of the year, and the squirrel number has to be padded. Here we go!
getBuddy <- function(x) {
unpadHectare <- str_sub(interactions$hectare[x], str_locate(interactions$hectare[x], "[^0]")[1], str_length(interactions$hectare[x]))
# https://stat.ethz.ch/pipermail/r-help/2010-October/255450.html
newDate <- str_sub(interactions$date[x], 1, 4)
paddedSquirrel <- str_pad(interactions$otherSquirrel[x], width = 2, side = "left", pad = "0")
id <- paste(unpadHectare, interactions$shift[x], newDate, paddedSquirrel, sep = "-")
subset(sq, unique_squirrel_id == id)
}
Pause for some fun.
interactions$other_activities[31]
## [1] "canoodling w/ #9"
Back to business.
buddies <- map(1:nrow(interactions), getBuddy)
map(buddies, nrow) %>% unlist() %>% summary() ## check that everyone got a buddy
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1 1 1 1 1 1
interactions %<>% mutate(otherSquirrelAge = unlist(map(buddies, "age"))) ## fancy pipe!
interactions %<>% mutate(otherSquirrelPrimaryFurColor = unlist(map(buddies, "primary_fur_color")))
interactions %<>% mutate(otherSquirrelHighlightFurColor = unlist(map(buddies, "highlight_fur_color")))
It looks like squirrels interact with squirrels like them in terms of age and coloring. But of course there is a big disparity in age and color overall, so I don’t want to read too much into this.
tt <- interactions %>% group_by(age, otherSquirrelAge) %>% summarise(count = n())
kable(tt) %>% kable_styling()
| age | otherSquirrelAge | count |
|---|---|---|
| Adult | Adult | 52 |
| Adult | Juvenile | 6 |
| Juvenile | Adult | 2 |
| Juvenile | Juvenile | 5 |
| NA | NA | 6 |
tt <- interactions %>% group_by(primary_fur_color, otherSquirrelPrimaryFurColor) %>% summarise(count = n()) %>% arrange(desc(count))
kable(tt) %>% kable_styling()
| primary_fur_color | otherSquirrelPrimaryFurColor | count |
|---|---|---|
| Gray | Gray | 51 |
| Cinnamon | Gray | 6 |
| Gray | Cinnamon | 6 |
| Cinnamon | Cinnamon | 4 |
| Gray | NA | 2 |
| Black | Gray | 1 |
| Gray | Black | 1 |
tt <- interactions %>% group_by(primary_fur_color, highlight_fur_color, otherSquirrelPrimaryFurColor, otherSquirrelHighlightFurColor) %>% summarise(count = n()) %>% arrange(desc(count))
kable(tt) %>% kable_styling()
| primary_fur_color | highlight_fur_color | otherSquirrelPrimaryFurColor | otherSquirrelHighlightFurColor | count |
|---|---|---|---|---|
| Gray | NA | Gray | NA | 20 |
| Gray | Cinnamon | Gray | Cinnamon | 11 |
| Gray | Cinnamon, White | Gray | Cinnamon, White | 4 |
| Gray | NA | Gray | Cinnamon | 4 |
| Cinnamon | Gray | Gray | Cinnamon | 2 |
| Cinnamon | Gray | Gray | NA | 2 |
| Cinnamon | Gray, White | Cinnamon | Gray, White | 2 |
| Cinnamon | White | Cinnamon | White | 2 |
| Gray | Cinnamon | Gray | White | 2 |
| Gray | Cinnamon | Gray | NA | 2 |
| Gray | White | Gray | Cinnamon | 2 |
| Gray | NA | Cinnamon | Gray | 2 |
| Black | NA | Gray | NA | 1 |
| Cinnamon | NA | Gray | Cinnamon, White | 1 |
| Cinnamon | NA | Gray | White | 1 |
| Gray | Cinnamon | Cinnamon | Gray | 1 |
| Gray | Cinnamon | NA | NA | 1 |
| Gray | Cinnamon, White | Cinnamon | NA | 1 |
| Gray | Cinnamon, White | Gray | White | 1 |
| Gray | Cinnamon, White | Gray | NA | 1 |
| Gray | White | Cinnamon | Gray | 1 |
| Gray | White | Cinnamon | NA | 1 |
| Gray | White | Gray | White | 1 |
| Gray | White | Gray | NA | 1 |
| Gray | NA | Black | NA | 1 |
| Gray | NA | Gray | Cinnamon, White | 1 |
| Gray | NA | Gray | White | 1 |
| Gray | NA | NA | NA | 1 |
So what have we learned? Not much, but there was some fun data wrangling + squirrels. Full disclosure, I did some not-tidy stuff in the exploratory phase, but in this post I took some extra time to switch back to the tidyverse. I admit, I had to refer back to this multiple times despite writing it.
Comments, suggestions, etc. are welcome –> @sastoudt


Blinx examples.
Basic Example
Usage of "initOn"
Usage of "listensTo" - PLAY_AFTER_RENDER
Usage of "listensTo" - KEEP_ON
Usage of "listensTo" - RE_PLAY
Usage of "resolveRenderOn", "destroy", "onStatusChange" and "onRenderComplete"
Using blinx with router
Extending Blinx with blinx-event-handler
Extending Blinx with blinx-redux-vdom


Frequently Asked Questions (FAQ)
- Why isn't FillUp calculating my mileage?
- Why does FillUp only estimate my mileage?
- Why do the mileage estimates seem wrong?
- What if I forget to record a fuel purchase?
- How do I backup/restore my data?
- What is a CSV file and why should I care?
Why isn't FillUp calculating my mileage?
You need to fill your tank once to establish a starting point, and then continue recording all of your fuel purchases. Each time you fill your tank after the starting point, FillUp will calculate your mileage by determining the distance driven and fuel used since the previous full tank. All fuel purchases between full tanks are included in the calculations.TIP: In the Add Fuel screen, put a check mark in the "Tank Full" box to indicate when the tank has been filled, otherwise FillUp will never calculate mileage.
TOP
Why does FillUp only estimate my mileage?
A full tank is needed to accurately calculate how much fuel was used since the previous full tank. When you get fuel and the tank is not full (the "Tank Full" box does not have a check mark in it), FillUp cannot calculate mileage exactly. Instead it will allow you to estimate mileage by asking you to approximate how much fuel is left in the vehicle's tank (move the FillUp fuel gauge needle so that it matches your actual vehicle fuel gauge reading). Note that the estimates are for display only - they are not saved or shown in the Log.TOP
Why do the mileage estimates seem wrong?
Vehicle fuel tank size is needed to permit the most accurate estimates. The default tank size is initially set to 16 gallons (60 liters) which is the capacity for an average mid-size car. Check your vehicle owner's manual to determine the actual fuel tank size, and edit the vehicle data in the FillUp main screen to define your tank size.- Select a vehicle, and click the edit button.
- Edit the Tank Size and click OK.
TOP
What if I forget to record a fuel purchase?
The next time you fill your tank, the mileage calculation will be wrong (too high). You can hide this value by selecting it in the Log and clicking "Hide Calculation". This will cause FillUp to ignore it when plotting data and calculating statistics. Subsequent calculations will not be effected by the missing data as long as all future fuel purchases are accurately recorded.TOP
How do I backup/restore my data?
FillUp Log data is stored in a database file on your phone/tablet. The data should be periodically saved externally in case you lose your device or the device is inadvertently reset. FillUp can save (Export) Log data to a CSV file, and restore (Import) it from a CSV file. If the Dropbox or Google Drive applications are installed, FillUp can utilize them as a convenient and safe "cloud storage" location as follows:To backup FillUp Log data, perform the following steps for each vehicle Log:
- View Log for a vehicle.
- From the options menu, select Export.
- If 'Export Confirmation' is displayed, touch Yes.
- Touch Yes to share the exported CSV file.
- Select the Dropbox or Google Drive icon from the list of applications.
- Follow directions on screen to upload the CSV file to Dropbox/Google Drive.
A CSV file will be created in the
Downloads folder of your
device's sdcard and then uploaded to Dropbox or Google Drive. The file
name will be the name of the vehicle with
".csv" appended.
To restore FillUp Log data:
- View Log for a vehicle (preferably empty)
- From the options menu, select Import.
- Select 'Cloud storage'
as CSV file location.
- Select the Dropbox or Google Drive icon from the list of applications.
- Follow directions on screen to select a CSV file from
Dropbox/Google Drive.
- FillUp will download the selected CSV file and read data into the
Log.
NOTE:
Import will fail if
the CSV file contains any data that is already in the Log (i.e. same
odometer values). For this reason it is best to Import data into an
empty Log. Either delete all existing data from the Log (delete and
re-create the vehicle) or create a new vehicle with a different name
and Import into the Log for that vehicle.

A comma separated
values
(CSV) file is a plain text file where each line represents a data
record and the record field values are separated by commas. FillUp can
save (Export) Log data to a CSV file, and restore (Import) it from
a CSV file. This feature can be useful for backing up your data,
transferring it from one phone to another, or migrating data from
another application into FillUp. CSV files can also be used with most spreadsheet programs. In this case, each spreadsheet row represents a line from the FillUp Log. The spreadsheet table columns are defined as:
| date/time |
odometer |
quantity |
fulltank |
hidden |
cost |
notes |
calculation |
|---|---|---|---|---|---|---|---|
| when the fuel was purchased | the vehicle odometer at the time of fuel purchase | the amount of fuel purchased (gallons or liters) | true if tank was filled, false otherwise | true if the calculation is hidden in the log, false otherwise | the total cost of the fuel
purchased. |
the text entered in the Notes
field when the fuel was purchased (80 characters maximum) |
the calculated mileage (MPG, KM/L, or L/100KM) |
For example, the following CSV data represents three FillUp Log entries:
03/19/2014 12:43,114978,11.38,true,false,38.00,Note one ,29.53 03/24/2014 12:23,115304,11.68,true,false,39.00,Another note ,27.91 03/27/2014 12:42,115632,11.08,true,false,37.00,Note three ,29.60
TOP


Our Purpose
1. To provide a meeting facility to approved twelve-step fellowships that help people recover from alcoholism,
drug addiction, compulsion, or other behavioral problems.
2. To provide a welcoming environment for people seeking recovery through the twelve-step fellowships
2. To provide a welcoming environment for people seeking recovery through the twelve-step fellowships
Offering Twelve-Step Services Since 1990
The Greenbelt Step Club, Inc., located in the heart of Historic Greenbelt, Maryland, which the U.S. Department of
Interior designated as a National Historic Landmark in 1997, has continuously offered twelve-step meetings and
helped thousands in their quest for a path of recovery since 1990. From its beginning, the Club has been available
to any approved twelve-step group interested in offering meetings to people recovering from alcoholism, drug
addiction, compulsion, or other behavioral problems.
The twelve-step fellowships represented at the Club operate autonomously and independently of Club influence
except the Club is “landlord” of the meeting premises and provider of the services. The Club does not speak for
nor represent the twelve-step groups, nor does it participate in AA General Service Office activities. A
Fellowship Steering Committee composed of representatives of the Club’s twelve-step groups provides oversight
responsibility to ensure the various groups’ autonomy, to assist individual meeting groups as necessary, and to
deal with the Club’s Board of Directors on matters pertaining to the groups.
Official membership in the Club is not required to attend the meetings or to participate in the Club’s social
activities. However, membership is encouraged as it entitles a person to vote in elections and to have a say-so in
policy matters affecting the Club.


--- layout: post image: /assets/images/backgrounds/measurement.jpg header: plain title: Fit Text subtitle: With Polynomial Regression permalink: /demo/fittext/ date: 2019-3-17T03:00:00.000Z tags: ES6 Javascript HTML5 Canvas Fit Text category: [ Demo ] comments: true ---
adjusts to the width of the
element regardless of existing
style or width
* Some restrictions may apply, see documentation for details. Russell Chapman is not liable for any damages due to implementing this in a production environment.
There are many ways to fix text to the width of the parent. The first option from this CSS Tricks article fitting text to a container recommends using viewport units and a magic number to fit text in a container. The problem is, finding this magic number. My solution involves measuring the text width at a few font sizes on a hidden HTML5 canvas. Those sample measurements are fed into a JS-Polynomial-Regression model which can then predict the font-size for any width container. After getting the predicted font-size; it is clamped to min/max sizes, converted to vw viewport units, and applied to the elements' style.
Font size can be predicted with as few as 3 sample measurements which is insanely fast compared to my first approach of measuring text widths while recursively increasing the font-size until they fit. It's not exact (especially on resize), but the fluid vw units are close enough. It’s a trade-off of simplicity vs. accuracy. I've not found any JS library that implements this method, so I may build an NPM package out of it to share with the world.
CSS Poly Fluid Sizing using calc(), vw, breakpoints and linear equations