Symbolic Logic Expressions#
An expression is created from a string that consists of the
operators !
, &
, |
, ->
, <->
, which correspond to the
logical functions not, and, or, if then, if and only if, respectively.
Variable names must start with a letter and contain only
alpha-numerics and the underscore character.
AUTHORS:
Chris Gorecki (2007): initial version
William Stein (2007-08-31): integration into Sage 2.8.4
Paul Scurek (2013-08-03): updated docstring formatting
- class sage.logic.logic.SymbolicLogic#
Bases:
object
EXAMPLES:
This example illustrates how to create a boolean formula and print its table:
sage: log = SymbolicLogic() sage: s = log.statement("a&b|!(c|a)") sage: t = log.truthtable(s) sage: log.print_table(t) a | b | c | value | -------------------------------- False | False | False | True | False | False | True | False | False | True | False | True | False | True | True | False | True | False | False | False | True | False | True | False | True | True | False | True | True | True | True | True |
- combine(statement1, statement2)#
Return a new statement which contains the two statements or’d together.
INPUT:
statement1
– the first statementstatement2
– the second statement
OUTPUT:
A new statement which or’d the given statements together.
EXAMPLES:
sage: log = SymbolicLogic() sage: s1 = log.statement("(a&b)") sage: s2 = log.statement("b") sage: log.combine(s1,s2) [['OPAREN', 'OPAREN', 'OPAREN', 'a', 'AND', 'b', 'CPAREN', 'CPAREN', 'OR', 'OPAREN', 'b', 'CPAREN', 'CPAREN'], {'a': 'False', 'b': 'False'}, ['a', 'b', 'b']]
- print_table(table)#
Return a truthtable corresponding to the given statement.
INPUT:
table
– object created bytruthtable()
method; it contains the variable values and the evaluation of the statement
OUTPUT:
A formatted version of the truth table.
EXAMPLES:
This example illustrates the creation of a statement and its truth table:
sage: log = SymbolicLogic() sage: s = log.statement("a&b|!(c|a)") sage: t = log.truthtable(s) #creates the whole truth table sage: log.print_table(t) a | b | c | value | -------------------------------- False | False | False | True | False | False | True | False | False | True | False | True | False | True | True | False | True | False | False | False | True | False | True | False | True | True | False | True | True | True | True | True |
We can also print a shortened table:
sage: t = log.truthtable(s, 1, 5) sage: log.print_table(t) a | b | c | value | -------------------------------- False | False | True | False | False | True | False | True | False | True | True | False | True | False | False | False |
- prove(statement)#
A function to test to see if the statement is a tautology or contradiction by calling a C++ library.
Todo
Implement this method.
EXAMPLES:
sage: log = SymbolicLogic() sage: s = log.statement("a&b|!(c|a)") sage: log.prove(s) Traceback (most recent call last): ... NotImplementedError
- simplify(table)#
Call a C++ implementation of the ESPRESSO algorithm to simplify the given truth table.
Todo
Implement this method.
EXAMPLES:
sage: log = SymbolicLogic() sage: s = log.statement("a&b|!(c|a)") sage: t = log.truthtable(s) sage: log.simplify(t) Traceback (most recent call last): ... NotImplementedError
- statement(s)#
Return a token list to be used by other functions in the class
INPUT:
s
– a string containing the logic expression to be manipulatedglobal vars
– a dictionary with variable names as keys and the variables’ current boolean values as dictionary valuesglobal vars_order
– a list of the variables in the order that they are found
OUTPUT:
A list of length three containing the following in this order:
a list of tokens
a dictionary of variable/value pairs
a list of the variables in the order they were found
EXAMPLES:
This example illustrates the creation of a statement:
sage: log = SymbolicLogic() sage: s = log.statement("a&b|!(c|a)") sage: s2 = log.statement("!((!(a&b)))")
It is an error to use invalid variable names:
sage: s = log.statement("3fe & @q") Invalid variable name: 3fe Invalid variable name: @q
It is also an error to use invalid syntax:
sage: s = log.statement("a&&b") Malformed Statement sage: s = log.statement("a&((b)") Malformed Statement
- truthtable(statement, start=0, end=-1)#
Return a truth table.
INPUT:
statement
– a list; it contains the tokens and the two global variables vars and vars_orderstart
– (default: 0) an integer; this represents the row of the truth table from which to startend
– (default: -1) an integer; this represents the last row of the truth table to be created
OUTPUT:
The truth table as a 2d array with the creating formula tacked to the front.
EXAMPLES:
This example illustrates the creation of a statement:
sage: log = SymbolicLogic() sage: s = log.statement("a&b|!(c|a)") sage: t = log.truthtable(s) #creates the whole truth table
We can now create truthtable of rows 1 to 5:
sage: s2 = log.truthtable(s, 1, 5); s2 [[['OPAREN', 'a', 'AND', 'b', 'OR', 'NOT', 'OPAREN', 'c', 'OR', 'a', 'CPAREN', 'CPAREN'], {'a': 'True', 'b': 'False', 'c': 'False'}, ['a', 'b', 'c']], ['False', 'False', 'True', 'False'], ['False', 'True', 'False', 'True'], ['False', 'True', 'True', 'False'], ['True', 'False', 'False', 'False']]
Note
When sent with no start or end parameters this is an exponential time function requiring \(O(2^n)\) time, where \(n\) is the number of variables in the logic expression
- sage.logic.logic.eval(toks)#
Evaluate the expression contained in
toks
.INPUT:
toks
– a list of tokens; this represents a boolean expression
OUTPUT:
A boolean value to be determined as follows:
True
if expression evaluates toTrue
.False
if expression evaluates toFalse
.
Note
This function is for internal use by the
SymbolicLogic
class. The evaluations rely on setting the values of the variables in the global dictionary vars.
- sage.logic.logic.eval_and_op(lval, rval)#
Apply the ‘and’ operator to
lval
andrval
.INPUT:
lval
– a string; this represents the value of the variable appearing to the left of the ‘and’ operatorrval
– a string; this represents the value of the variable appearing to the right of the ‘and’ operator
OUTPUT:
The result of applying ‘and’ to
lval
andrval
as a string.Note
This function is for internal use by the
SymbolicLogic
class.
- sage.logic.logic.eval_bin_op(args)#
Return a boolean value based on the truth table of the operator in
args
.INPUT:
args
– a list of length 3; this contains a variable name, then a binary operator, and then a variable name, in that order
OUTPUT:
A boolean value; this is the evaluation of the operator based on the truth values of the variables.
Note
This function is for internal use by the
SymbolicLogic
class.
- sage.logic.logic.eval_iff_op(lval, rval)#
Apply the ‘if and only if’ operator to
lval
andrval
.INPUT:
lval
– a string; this represents the value of the variable appearing to the left of the ‘if and only if’ operatorrval
– a string; this represents the value of the variable appearing to the right of the ‘if and only if’ operator
OUTPUT:
A string representing the result of applying ‘if and only if’ to
lval
andrval
.Note
This function is for internal use by the
SymbolicLogic
class.
- sage.logic.logic.eval_ifthen_op(lval, rval)#
Apply the ‘if then’ operator to
lval
andrval
.INPUT:
lval
– a string; this represents the value of the variable appearing to the left of the ‘if then’ operatorrval
– a string;t his represents the value of the variable appearing to the right of the ‘if then’ operator
OUTPUT:
A string representing the result of applying ‘if then’ to
lval
andrval
.Note
This function is for internal use by the
SymbolicLogic
class.
- sage.logic.logic.eval_ltor_toks(lrtoks)#
Evaluates the expression contained in
lrtoks
.INPUT:
lrtoks
– a list of tokens; this represents a part of a boolean formula that contains no inner parentheses
OUTPUT:
A boolean value to be determined as follows:
True
if expression evaluates toTrue
.False
if expression evaluates toFalse
.
Note
This function is for internal use by the
SymbolicLogic
class. The evaluations rely on setting the values of the variables in the global dictionary vars.
- sage.logic.logic.eval_mon_op(args)#
Return a boolean value based on the truth table of the operator in
args
.INPUT:
args
– a list of length 2; this contains the token ‘NOT’ and then a variable name
OUTPUT:
A boolean value to be determined as follows:
True
if the variable inargs
isFalse
.False
if the variable inargs
isTrue
.
Note
This function is for internal use by the
SymbolicLogic
class.
- sage.logic.logic.eval_or_op(lval, rval)#
Apply the ‘or’ operator to
lval
andrval
.INPUT:
lval
– a string; this represents the value of the variable appearing to the left of the ‘or’ operatorrval
– a string; this represents the value of the variable appearing to the right of the ‘or’ operator
OUTPUT:
A string representing the result of applying ‘or’ to
lval
andrval
.Note
This function is for internal use by the
SymbolicLogic
class.
- sage.logic.logic.get_bit(x, c)#
Determine if bit
c
of the numberx
is 1.INPUT:
x
– an integer; this is the number from which to take the bitc
– an integer; this is the bit number to be taken
OUTPUT:
A boolean value to be determined as follows:
True
if bitc
ofx
is 1.False
if bitc
ofx
is not 1.
Note
This function is for internal use by the
SymbolicLogic
class.EXAMPLES:
sage: from sage.logic.logic import get_bit sage: get_bit(int(2), int(1)) 'True' sage: get_bit(int(8), int(0)) 'False'
- sage.logic.logic.reduce_bins(lrtoks)#
Evaluate
lrtoks
to a single boolean value.INPUT:
lrtoks
– a list of tokens; this represents a part of a boolean formula that contains no inner parentheses or monotonic operators
OUTPUT:
None
; the pointer to lrtoks is now a list containingTrue
orFalse
.Note
This function is for internal use by the
SymbolicLogic
class.
- sage.logic.logic.reduce_monos(lrtoks)#
Replace monotonic operator/variable pairs with a boolean value.
INPUT:
lrtoks
– a list of tokens; this represents a part of a boolean expression that contains now inner parentheses
OUTPUT:
None
; the pointer tolrtoks
is now a list containing monotonic operators.Note
This function is for internal use by the
SymbolicLogic
class.
- sage.logic.logic.tokenize(s, toks)#
Tokenize
s
and place the tokens ofs
intoks
.INPUT:
s
– a string; this contains a boolean expressiontoks
– a list; this will be populated with the tokens ofs
OUTPUT:
None
; the tokens ofs
are placed intoks
.Note
This function is for internal use by the
SymbolicLogic
class.EXAMPLES:
sage: from sage.logic.logic import tokenize sage: toks = [] sage: tokenize("(a&b)|c", toks) sage: toks ['OPAREN', 'a', 'AND', 'b', 'CPAREN', 'OR', 'c', 'CPAREN']


@Al_Laframboise /<EMAIL_ADDRESS>/ alaframboise.github.com
Intro
Special Guest Speaker
Show and Tell Talks
Raffle!
Connect, Share, Ask
Please upload your presentations!
1:00 - 5:00 PM - Hack, Code, Share
Wanna a Geo Challenge?
-
6:00 - 9:00 PM - Meetup
Challenge Winner
Use your ArcGIS Server data or AGOL data to make scenes.
Emit GeoJSON from feature services
Export GeoJSON from feature services
Take your hosted tiles offline with Collector
Create Map Notes from find results
Create viewshed, watershed, downstream trace
Easier to embed maps
Specify area of interest to refine results
Add 1.7 more POI
Find things by Category
esri.github.io
geojson-layer-js
cluster-layer-js
angular-esri-map
"infinite Geo conversation..."


Afterwood
After more than two decades as a programmer you would think I’d have got this whole screening and interviewing process licked, but just when I think I’ve found the optimal solution I once again find another “edge case” that blows my theory out of the water. The problem of course with hiring people is that it involves human beings and humans are notoriously difficult to deal with because, well, they’re all different.
In my early years as a professional programmer I suffered from an arrogance which suggested that all the decent programmers in the world probably had backgrounds in engineering rather than computer science. Having studied electronic systems engineering at university myself (though sucking badly at everything apart from the assembly programming side due to my bedroom coder upbringing) I entered professional programming with a good appreciation for the hardware which was useful in the industry where I started out – PC graphics applications.
Correlation of course does not imply causation and with such a small data set to work from it’s not surprising I came to such a conclusion (I suck at statistics too it seems). I subconsciously fostered this view for some years which naturally biased my opinion of people whose CVs crossed my path. I don’t remember discarding anyone solely based on that criterion but I’m sure any candidate who reached the interview stage will unknowingly have had yet another prejudice to overcome. Eventually I got to work in a big team at a large company and mixed with all kinds of people from different backgrounds which helped dissipate that particular notion.
However there is just not enough time to interview every candidate face-to-face that crosses your path and so you have to develop multiple heuristics if you are ever to separate the proverbial “wheat from the chaff”. Every time I think I’ve come up with a fairly solid heuristic I invariably end up working with special people that buck the trend and I once again begin to feel discomfort in how many others of a similar calibre I may have discarded because not enough of what I felt were the right boxes, were ticked.
For example when hiring for senior roles, which is what I’ve mostly been involved in, I would historically hope for them to show some kind of interest in programming outside of their 9 to 5 job, especially when they describe themselves as “passionate” about the career. This does not have to be anything as grandiose as leading a major open source project or writing a column, but just something simple like regularly attending a meetup, or reading a journal or blog. It turns out some people are really good at keeping a sensible work/life balance. This doesn’t mean they don’t help out when things go awry but that they don’t unnecessarily subscribe to a hero mentality.
Another heuristic I’ve tried on pre-screening phone calls is to get the candidate to talk about their programming “war stories”. Any meetups or conferences I’ve attended that results in a trip to the pub usually ends up with various people describing some of the bizarre code or production incidents they’ve had to deal with in their past. There is almost a case of one-upmanship going on as the night progresses and alcohol is consumed. However unless they are of our own making and we feel entirely comfortable sharing our mishaps these stories usually come at the expense of someone else and therefore we may be behaving no better than the archetypal builder who denigrates the work of others. Being asked to do that with a prospective employer naturally makes some people uncomfortable. Another idea scrapped.
It’s now been a decade since the classic Fizz Buzz programming exercise entered the mainstream consciousness and yet I’m still amazed at the number of overly complex solutions I’ve had to review from experienced developers. Paradoxically I’ve also rejected candidates based on this simple programming problem only to discover they’ve been hired because of other forces at play. I consider this a lucky escape and rejoice that a sane hiring process has won out, but once again I feel uncomfortable with the outcome of a screening process designed solely to weed out highly undesirable candidates. I’ve found myself questioning over and over again what signs I’d missed this time around. If the purpose is to hire someone that can write simple code, what does it say when asking them to do just that with a simple problem in their own time ends up going awry? It seems some people really struggle to believe you when you say you want a simple solution to a simple problem; they want to impress you, to show you what they can really do.
My early experiences in the interviewing process (as hirer, not seeker) were definitely predicated on a desire to find someone like myself. I don’t believe this was in a narcissistic kind of way, but more borne out of the need to find someone suitable using the minimal time out from normal duties. Is it any wonder all the heuristics I came up with were really just how I see myself? And then there is the need to feel that we must choose the best candidate from those we have shortlisted as if we were out shopping for a new car and wanted to be sure we had gotten the best deal possible. Too many times a good candidate has gotten away because we hoped that someone later would be even better. Hiring, just like programming it seems, is also subject to the problems of “gold plating”.
So, when the next recruitment agent or HR person asks the inevitable question “what should I be looking out for to identify the best candidates for you?” the best I can do is shrug my shoulders. Yes, I can provide some useful heuristics that may help me prioritise candidates through the initial screening process but ultimately it seems I still have to fall back on the most subjective heuristic of all – gut instinct.
Chris Oldwood
12 January 2017
Chris is a freelance programmer who started out as a bedroom coder in the 80’s writing assembler on 8-bit micros. These days it's enterprise grade technology in plush corporate offices. He also commentates on the Godmanchester duck race and can be easily distracted via<EMAIL_ADDRESS>or @chrisoldwood.


Just Enough Openstack for Docker
* Rule one of getting a CFP accepted is to mention "docker"
OpenStack is a large collection of complicated projects that join together to form a hard to deploy and harder to run distributed system. This talk will show you how you can harness the concepts of bimodal IT to increase agility in your IT organization by utilizing a minimal Openstack install and various Docker based tools to build a platform that will increase developer productivity.
Rule two is to write a excerpt that doesn't really say anything meaningful
Openstack is a large collection of complicated projects that join together to form a hard to deploy and harder to run distributed system . This talk will show you how you can harness the concepts of bimodal IT to increase agility in your IT organization by utilizing a minimal Openstack install and various Docker based tools to build a platform that will increase developer productivity.
that is little more than a set of loosely coupled buzzwords.
Just Enough Openstack for Docker
Docker Docker Docker
Hard to deploy
Harder to run
distributed system
bimodal IT
increase agility in your IT organization
Minimal Openstack install
Docker based tools
build a platform
increase developer productivity
Just Enough Openstack for Docker
Bimodal IT
Just Enough Openstack [for Docker]
Docker on Openstack
Once your CFP is accepted you can pretty much talk about anything you want.
In this case is these three main talking points which are sort of mentioned in the CFP, but it doesn't matter because nobody is quite sure what you promised to talk about.
Interestingly, just about every concept I'm going to talk about has been mentioned at some point aready today.
Let's get to know eachother
* But first, let's take a moment to get to know eachother.
* my name is Paul Czarkowski, Infrastructure Engineer at Bluebox, recently acquired by ibm
* I worked in large enterprises for 10 years, left to work at startup, got bought by the original tech enterprise.
* I have been working with Openstack since Folsom and Docker since 0.3.
* I have spoken at both Openstack Summit and Dockercon.
Let's get to know eachother
* clearly I can't ask each of you to introduce yourself, but I can run some audience participation...
* show of hands: - work at enterprise - running openstack, - running docker
* take a look around the room ... these are the people you should network with today.
Bimodal IT
* I want to start off by talking about bimodal IT.
* believe it to be the most important thing I will talk about today.
* lack of bimodal IT is in my exp the most common failing at enterprises.
Traditional IT
Pets
* mode 1 is your legacy IT business.
* focus on providing reliability via business process.
* Waterfall, ITIL, Change Comittees, 12am maintenance windows.
* Exchange, Physical, Windows 2003, RHEL + Satellite.
* Ticket driven IT infrastructure.
* Focus on improving reliability of existing services. VMWare!
* this is pets of the pets vs cattle analogy
Forward Thinking
Cattle
* mode 2 is your forward thinking IT business.
* Completely different org to that of Mode 1
* focus on reducing bottlenecks and delivering business value
* Scrum/Kanban, Devops, Infra as code, CI/CD, short feedback loops
* Google Apps, Slack, Cloud ( AWS, Azure, Openstack ), Containers, *AAS
* self service IT infrastructure
* this is the cattle of the pets vs cattle
Forward Thinking
Cattle
* without this second mode, your business will suffer greatly as your competitors go down this path
* symptoms of not doing bimodal IT include a 3 year "cloud" RFC/RFP process that end in vmware/hyperv
* if you do a RFP for cloud you've already failed.
* asking 'how can we do everything with this' when evaluating tech
* building a goal/metric of 'how many systems did you virtualize'
* having discussions that include: like P2V migrations, 1:1 virtualization, etc
* not really increasing developer productivity, we're reducing friction.
* 2nd mode of IT should borrow heavily from Lean practices, Toyota Manufacturing, etc
* TOC is /very/ important here, read PP and the goal
Docker and the Three Ways of DevOps by John Willis
* three ways of devops
* done right, 2nd mode will drag 1st mode through these transformations
* 1st mode becomes cattle, 2nd mode becomes insect swarm.
* eventually the two modes will be almost indistinguishable from a process/tooling perspective
* My summary here: don't worry about legacy when you're making decisions for the future.
* Build seperate team for build/develop. disturbingly large no of ppl will be happy to stay in mode1
* Our focus here at the openstack day should be on the 2nd mode of IT.
Openstack is...
Hard to Install
Harder to Operate
* with that out of the way, let's talk about how terrible openstack is
* which OS, Which distro, packages vs source ?
* Hell even installing openstack cli clients can be hard
Which Operating System ?
Redhat - RHEL, CentOS
Debian - Debian, Ubuntu
* Before you can even start to install you need to choose an OS.
* Ubuntu is predominent OS in CI, Newer kernels etc.
* Support? They'll take your money if you really want to pay them...
* when was last time you used and got value out of RHEL support ?
Which Openstack distro ?
OS native - Ubuntu , RHEL
from Source ... git://
Helion, Mirantis, ...
Roll your own packages
http://github.com/blueboxgroup/giftwrap
* You've chosen an OS ... now choose an openstack "distro"
* Really two choices here for somebody new to openstack.
* 1) use the distro packages
* 2) install from source ( its python, not complicated)
http://docs.openstack.org/admin-guide-cloud/content/logical-architecture.html
* Each "shape" in this diagram represents an openstack component and 100+ configurable options. 1000s!
* Openstack has no opinions, expects you to have them and provide them.
* Database - Mysql, Percona+Galera , Postgres, ORACLE?!?!?!
* Queuing - RabbitMQ , ZeroMQ, QPID
* Network - ml2 , OVS, linux bridge , VXLAN, VLAN, GRE, vendor
* Compute - KVM , Xen, HyperV, VMWare, Docker, LXC, etc
* Cinder - LVM, Gluster, NFS, NetApp, EMC
* If you're new to openstack/cloud lets not complicate things. this is all you really need.
* MySQL and RabbitMQ ( don't even worry about replication / HA that can come later )
* Horizon, Keystone, Nova, Neutron, and Glance.
* Start with a single externally routed VLAN for your neutron network
* tricky stuff like SDN, Floating IPs, etc, later
* If you have a NetApp or decent NAS/SAN maybe add cinder after a few months
Openstack Big Tent Configuration Management
* ofc, if want sane repeatable openstack, you'll use config management
* unless you roll your own, your choice here will probably dictate your OS choices.
* spoiler most are Ubuntu + System Packages
* are as unopinionated as openstack, therefore still need to make a lot of upfront decisions.
Ursula
http://github.com/blueboxgroup/ursula
Curated and opinionated
Used to manage a lot of openstack clouds by a small team
Feature flags to enable/disable optional items
Kick the tires with Vagrant .
~ 1200 ansible tasks to do a simple openstack install
* bluebox's tooling for deploying and managing openstack clouds is called Urusla
* opensource and freely available on github.
* very opinionated and curated to be able to run a large number of medium size clouds by small team.
* We use a vagrant env for development, makes it easy to kick the tires.
* JEOD env ... still has 1200 tasks to install openstack!!!
Shameless Plug
<Bluebox Logo goes here>
For ~ $5k/mo Bluebox will host and manage your Private Cloud for you.
Avoid all the BS of running openstack, and spend your time learning how to consume.
WTF is Docker ?
https://www.docker.com/whatisdocker/
Process Isolation, chroot on steroids
Uses linux kernel tooling ( cgroups, namespaces, etc)
Shareable Immutable Artifacts - Images / Docker Hub
As much or as little of an OS in the image as you want.
* < 1 sec startup time, have seen < 10mb to > gigs
Docker vs VM
* Docker = Containers ! Virt. Can act like a VM
* security/isolation half way between chroot and VM
* Any OS capable of running docker can run your dockerized app... rhel vs deb
* layered filesystem means that containers can share common data.
Dockerfile
# Base docker image
FROM paulczar/chrome
RUN apt-get install -y pepperflashplugin-nonfree \
&& rm -rf /var/lib/apt/lists/*
COPY local.conf /etc/fonts/local.conf
COPY . /slides
# Autorun chrome
ENTRYPOINT [ "/usr/bin/google-chrome-stable" ]
CMD [ "--user-data-dir=/data", "--no-sandbox", "file:///slides/index.html" ]
* This is a dockerfile.
* instructions on how to create an docker image
* FROM, RUN, COPY, CMD
Docker Compose
nginx:
build: .
command: /app/bin/boot nginx
volumes: [ .:/app ]
links: [ mysql, hhvm ]
ports: [ 8081:8080 ]
hhvm:
build: .
command: /app/bin/boot hhvm
volumes: [ .:/app ]
links: [ mysql ]
ports: [ 9000 ]
mysql:
image: orchardup/mysql
ports: [ 3306:3306 ]
* takes yml file and builds containers as described
* volume mount CWD into container
* just a few seconds to get app running assuming prebuilt.
* if I run boot without argument it runs both nginx and hhvm
* as you can see am using community image for mysql... aok.
Factorish
http://factorish.github.io/factorish/#/
Run legacy apps in a container
Make the container 12 factor, not the app
Demo apps from simple python to full ELK stack
http://github.com/factorish/factorish
http://github.com/factorish/factorish-elk
* Toolset I developed for making legacy style apps run in a docker container
* ties together tooling to help with config templating, process management, service discovery and more
* examples from basic python app to full ELK stack with SD, auto-clustering mysql/galera.
Openstack Images for Docker
Ubuntu Trusty / Fedora
CoreOS / RancherOS
Atomic / Snappy
How to Docker with Openstack ?
Just plain old Docker.
Docker Machine
Deis
CoreOS + Fleet
Kubernetes
Rancher Labs
* Going to talk through a bunch of ways to docker on openstack
Docker Machine
https://github.com/docker/machine/releases
* you could just spin up an instance and ssh in and use docker, or just expose the docker port
* but Docker machine makes that a little easier and more secure.
* docker machine will spin up a new server, install docker, and set up a client/server key/pair.
* it reads your openrc style environment variables, but still requires a bunch of settings
* hide them behind an alias or a script or something.
Docker Machine
$ docker-machine create -d openstack \
--openstack-image-id 1525c3f3-1224-4958-bd07-da9feaedf18b \
--openstack-flavor-id 2 --openstack-net-id ba0fdd03-72b5-41eb-bb67-fef437fd6cb4 \
--openstack-floatingip-pool external \
--openstack-ssh-user ubuntu --openstack-sec-groups docker \
testenv
Creating machine...
To see how to connect Docker to this machine, run: docker-machine env testenv
$
* in this case the image is ubuntu trusty and I have both an internal network and a floating ip pool.
* you can see I also need to specify the ssh user and a security group.
* sec-group should allow ssh and the docker port, I also added the ephemeral docker port range.
Docker Machine
$ docker-machine env testenv
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://x.x.x.x:2376"
export DOCKER_CERT_PATH="/home/pczarkowski/.docker/machine/machines/testenv"
export DOCKER_MACHINE_NAME="testenv"
$ eval "$(docker-machine env testenv)"
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS
* after docker machine succesfully runs I can get the env vars to pass to docker like this
* pass it through eval and you have everything you need to securely connect to your docker machine.
Docker Machine
$ docker run -p 80 --name nginx -d nginx
$ docker inspect nginx| grep HostPort
"HostPort": "32769"
$ curl x.x.x.x:32769
...
...
Welcome to nginx!
* now we can run any randome docker command
* and it will be run in the docker-machine rather than locally
* for example nginx, hostport, curl
Docker Machine
Supports Docker-Swarm
Support Docker-Compose
No host volumes
Good for test/staging/demo
Not great for dev
* docker swarm for docker based orchestration (NEW)
* docker compose can talk to docker machines
* some features are not usable on some clouds, volume mounts not on most
* this means it can be good for test and demo, but not great for dev.
DEIS
Most mature Opensource [docker] PAAS*
Heroku inspired workflow
distributed stateless applications
seperation of responsibilities
Solid docs for running on Openstack
* arguably deis is most mature and functional opensource docker based PAAS
* has heroku style workflow ( and others ). UX first,chef->docker
* is a stateless distribute app itself
* ops manage deis and underlying infra, devs/devops manage apps in deis.
* ops/DBAs/etc manage databases and state external to DEIS
* docs for running on openstack are solid
DEIS
$ git clone https://github.com/deis/example-ruby-sinatra.git
$ cd example-ruby-sinatra
$ deis create && git push deis master
Creating application... done, created nimbus-insignia
Git remote deis added
...
-----> Launching...
done, nimbus-insignia:v2 deployed to Deis
http://nimbus-insignia.x.x.x.x.xip.io
$ curl http://nimbus-insignia.x.x.x.x.xip.io
Powered by Deis!
Running on container ID 88384adc62d4
* example of running application in deis
* was going to live demo, but we're doing this on shared laptop
* deis create sees we're in a git repo and sets up a remote repo to deis git server
* post-commit hooks builds and runs application
* deis uses wildcard dns to route to applications. xip is great for demo with this.
DEIS
$ deis config:set POWERED_BY=openstack
Creating config... done, v3
=== nimbus-insignia
DEIS_APP: nimbus-insignia
POWERED_BY: openstack
$ curl http://nimbus-insignia.x.x.x.x.xip.io
Powered by openstack
Running on container ID 6440f619dcfc
* deis has a bunch of commands to deal with your running app
* for example we can change a config setting for our app ( which is done via docker envs)
* deis will rebuild the final layer of your app container which contains the config
* it will then mark it as a versioned release and push to docker registry
* a new contaner will then be spun up and added to LB, then old spun down
* rollback to previous release is easy and quick
* explain example
DEIS
$ deis scale web=3
Scaling processes... but first, coffee!
...
$ curl http://nimbus-insignia.<IP_ADDRESS>.xip.io
Running on container ID 6440f619dcfc
$ curl http://nimbus-insignia.<IP_ADDRESS>.xip.io
Running on container ID cbcf905b8b34
$ curl http://nimbus-insignia.<IP_ADDRESS>.xip.io
Running on container ID 676cb76cb562
* adding more or less containers to your app is easy, simply run deis scale
* scales your number of containers to the number specified.
* easy to tie this into a cron style job for seasonal traffic patterns, can tie to monitoring for auto-scale
* can see here it scaled to three, and I can curl and get 3 different container IDs.
CoreOS + Fleet
CoreOS - minimal OS for running Containers
etcd - distrubuted Key/Value store
flannel - network overlay
fleet - Container Orchestration
fleet takes systemd units with special section
We actually just saw it in action with DEIS
* DEIS uses coreos with fleet to deploy and orchestrate itself.
* fleet combines with etcd for container orchestration.
* you pass it systemd units with an extra section for fleet metadata
* schedules across a coreos cluster, one host dies, restarts on another
* affinity, anti-affinity, counts, etc.
* great for building a platform ( like deis ) on top of
CoreOS + Fleet
[Unit]
Description=deis-router
[Service]
EnvironmentFile=/etc/environment
ExecStartPre=/bin/sh -c "IMAGE=`/run/deis/bin/get_image /deis/router` && docker history $IMAGE >/dev/null 2>&1 || docker pull $IMAGE"
ExecStartPre=/bin/sh -c "docker inspect deis-router >/dev/null 2>&1 && docker rm -f deis-router || true"
ExecStart=/bin/sh -c "IMAGE=`/run/deis/bin/get_image /deis/router` && docker run --name deis-router --rm -p 80:80 -p 2222:2222 -p 443:443 -e EXTERNAL_PORT=80 -e HOST=$COREOS_PRIVATE_IPV4 $IMAGE"
ExecStopPost=-/usr/bin/docker rm -f deis-router
[Install]
WantedBy=multi-user.target
[X-Fleet]
<EMAIL_ADDRESS>* this is example of fleet unit, pretty easy to understand and parse
* surprisingly easy to set up affinity and boot order roles
* can use affinity and boot order to ensure a containers volume container starts before it for stateful apps.
Kubernetes
Came from Google...but is not Google.
IAAS but for containers.
You still need to tell it what to run and where.
Magnum!
* not a PAAS, but rather something you would build a platform on top of
* Kubernetes is to containers what openstack is to VMs.
* very opsy interface for deploying/running containers
* is building a platform your core compentency? If not wait until somebody does it for you
* if K8s, then think about Magnum. Requires Heat.
Docker Registry
Use private repos on Docker Hub ( $$$ )
run Docker Registry locally ( OS )
run Docker Trusted Registry ( $$$ )
run CoreOS Enterprise Registry ( $$$ )
* If doing much with docker will probably need private registry.
* can pay docker for private repos on SAAS registry.
* run opensource docker registry locally ( deis runs one for you ), can be backed by swift?
* if backing with swift/s3/etc can run on every machine, localhost, no security.
* Run either DTR or CoreOS ER.... pay money ... get support ?
Docker Workflow #1
Development on laptop (docker-compose)
Testing/QA on "Cloud" ( docker-compose + docker-machine )
Jenkins to build docker image, store in registry.
Staging / Production on "Cloud" ( Ansible or Chef )
* Develop locally on your laptop, use docker-compose
* Deploy Testing / QA envs to Openstack using machine + compose
* on commit to "deploy" branch kick of jenkins build of image, version, push to registry
* Deploy to Stage/Production using existing CM tools with docker integration
* this good, because probably already using CM to manage existing infra, stateful dbs, etc
Docker Workflow #2
Development on laptop (docker-compose)
Create PR on github
Jenkins runs unit tests on PR ( in docker )
Jenkins deploys test app of PR ( in DEIS )
Jenkins/Human performs Integration tests against PR
Jenkins/Human merges PR to master
Jenkins deploys Staging App ( in DEIS )
Human approves and cuts release in Github
Jenkins deploys Prod App ( in DEIS )
* A more advanced workflow using DEIS.
* All steps beyond creating the PR can be automated
* Path to full CI/CD ( if that's your bag )
Finish
Questions?


Home
Add New Foster Child
Delete Foster Child
Add Existing Foster Child
Message Foster Child
Change Password
Old Password
New Password
Confirm New Password
Submit


5 Funders
This document describes funders associated with Databrary volumes (projects).
Volumes by funder
\(n\) volumes listing funders
There are \(n=\) 140 volumes that list funders.
| vol_id | funder_name | award |
|---|---|---|
| 1 | National Science Foundation (NSF) | BCS-1238599 |
| 1 | National Institute of Child Health and Human Development (NICHD) | 1-U01-HD-076595 |
| 2 | National Science Foundation (NSF) | BCS-1147440 |
| 4 | National Institute of Child Health and Human Development (NICHD) | R37-HD33486 |
| 5 | National Institute of Child Health and Human Development (NICHD) | R37-HD33486 |
| 7 | National Institute of Child Health and Human Development (NICHD) | R37-HD33486 |
| 8 | National Science Foundation (NSF) | 0721383 |
| 9 | National Institute of Child Health and Human Development (NICHD) | R37-HD33486 |
| 11 | National Science Foundation (NSF) | BCS-1349044 |
| 15 | National Institutes of Health (NIH) | R01HD047417 |
| 15 | National Institutes of Health (NIH) | R01MH051435 |
| 15 | National Science Foundation (NSF) | INT-0808767 |
| 15 | National Science Foundation (NSF) | 1052736 |
| 15 | Autism Speaks | NA |
| 16 | National Institute of Child Health and Human Development (NICHD) | R37-HD033486 |
| 23 | National Science Foundation (NSF) | BCS-1147440 |
| 24 | National Institute of Child Health and Human Development (NICHD) | R01-HD-33486 |
| 28 | National Institute of Child Health and Human Development (NICHD) | R29-HD-033486 |
| 28 | National Institute of Child Health and Human Development (NICHD) | F32-HD-NRSA |
| 30 | National Science Foundation (NSF) | BCS-1247590 |
| 31 | National Science Foundation (NSF) | BCS-00-92452 |
| 32 | National Science Foundation (NSF) | BCS-00-92452 |
| 45 | National Science Foundation (NSF) | BCS-1147543 |
| 46 | National Institute of Child Health and Human Development (NICHD) | 5-R01-HD40827 |
| 49 | National Science Foundation (NSF) | BCS-1147440 |
| 61 | National Institute of Child Health and Human Development (NICHD) | HD-25271 |
| 61 | National Institute on Deafness and Other Communication Disorders (NIDCD) | T32 HD007323 |
| 62 | James S. McDonnell Foundation (JSMF) | NA |
| 62 | National Institute of General Medical Sciences (NIGMS) | P20GM103645 |
| 65 | National Institute of Mental Health (NIMH) | MH066154 |
| 68 | National Science Foundation (NSF) | BCS-1147440 |
| 73 | National Science Foundation (NSF) | BCS-1147440 |
| 75 | National Science Foundation (NSF) | BCS-1147440 |
| 77 | National Science Foundation (NSF) | IIS-1248076 |
| 79 | National Science Foundation (NSF) | BCS-1331073 |
| 81 | National Science Foundation (NSF) | BCS-1147440 |
| 83 | National Institutes of Health (NIH) | R37-HD33486 |
| 83 | National Institutes of Health (NIH) | R01-HD33486 |
| 84 | National Institute of Child Health and Human Development (NICHD) | R37-HD33486 |
| 86 | National Institute of Child Health and Human Development (NICHD) | R37HD033486 |
| 89 | National Institute of Child Health and Human Development (NICHD) | R37-HD33486 |
| 90 | National Institute of Mental Health (NIMH) | 1ROIMH60922 |
| 96 | National Institutes of Health (NIH) | HD059108 |
| 96 | James S. McDonnell Foundation (JSMF) | NA |
| 109 | National Science Foundation (NSF) | 1220305 |
| 114 | National Institute of Child Health and Human Development (NICHD) | R37-HD33486 |
| 116 | National Science Foundation (NSF) | BCS-1147440 |
| 116 | National Institute of Child Health and Human Development (NICHD) | R37-HD33486 |
| 123 | National Institute of Child Health and Human Development (NICHD) | R37-HD033486 |
| 124 | National Institute of Child Health and Human Development (NICHD) | R37-HD33486 |
| 135 | National Institute of Child Health and Human Development (NICHD) | R37-HD33486 |
| 136 | National Institute of Child Health and Human Development (NICHD) | R37-HD33486 |
| 140 | National Institute of Child Health and Human Development (NICHD) | R37-HD33486 |
| 162 | National Institute of Child Health and Human Development (NICHD) | R37HD033486 |
| 163 | National Institute of Child Health and Human Development (NICHD) | R37-HD033486 |
| 174 | National Institute of Child Health and Human Development (NICHD) | R21-HD095153 |
| 174 | Bill & Melinda Gates Foundation (BMGF) | OPP1129031 |
| 192 | National Institute of Child Health and Human Development (NICHD) | R37HD033486 |
| 193 | National Institute of Child Health and Human Development (NICHD) | R01HD042697 |
| 207 | National Science Foundation (NSF) | BCS-1929935 |
| 207 | National Science Foundation (NSF) | BCS-1661068 |
| 212 | National Institute of Mental Health (NIMH) | R03MH67797 |
| 212 | National Institute of Mental Health (NIMH) | R01MH75750 |
| 214 | European Research Council (ERC), Belgium | StG-201111-24 |
| 218 | National Science Foundation (NSF) | BCS-1147440 |
| 234 | National Institute of Mental Health (NIMH) | R01MH075750 |
| 234 | National Institute of Mental Health (NIMH) | K01MH100240 |
| 234 | National Institute of Mental Health (NIMH) | P20GM104417 |
| 248 | National Institute of Mental Health (NIMH) | R21-MH-104547 |
| 253 | National Science Foundation (NSF) | BCS-1929935 |
| 253 | National Science Foundation (NSF) | BCS-1661068 |
| 254 | National Institute of Child Health and Human Development (NICHD) | NA |
| 254 | Office of Behavioral and Social Sciences Research (OBSSR) | NA |
| 254 | New York University (NYU) | NA |
| 254 | Society for Research in Child Development (SRCD) | NA |
| 254 | LEGO Foundation (LEGO) | NA |
| 268 | National Science Foundation (NSF) | BCS-15233982 |
| 268 | National Institutes of Health (NIH) | R01HD 074601 |
| 268 | National Institutes of Health (NIH) | R01HD 28675 |
| 268 | National Institutes of Health (NIH) | T32HD007475 |
| 269 | National Science Foundation (NSF) | BCS-1929935 |
| 269 | National Science Foundation (NSF) | NSF BCS-166106 |
| 271 | National Institute of Child Health and Human Development (NICHD) | R37-HD-033486 |
| 271 | National Institute of Child Health and Human Development (NICHD) | R01-HD-42697 |
| 272 | National Science Foundation (NSF) | DGE1255832 |
| 272 | Social Science Research Institute, Penn State University (Penn State Social Science Research Institute, SSRI, PSU) | NA |
| 273 | National Science Foundation (NSF) | Bonawitz: NSF Choosing to Learn |
| 324 | National Science Foundation (NSF) | IIS-1248076 |
| 330 | National Institutes of Health (NIH) | DP5 OD019812-01 |
| 335 | National Institutes of Health (NIH) | DP5 OD019812-01 |
| 338 | National Institutes of Health (NIH) | DP5 OD019812-01 |
| 339 | National Institute of Mental Health (NIMH) | R21-MH-104547 |
| 458 | National Institute of Child Health and Human Development (NICHD) | R37-HD0334-86 |
| 458 | National Institute of Child Health and Human Development (NICHD) | R01-HD0334-86 |
| 459 | National Institute of Child Health and Human Development (NICHD) | R37-HD33486 |
| 471 | National Science Foundation (NSF) | NSF/SBE-BSF-1627993 |
| 471 | National Institute of Child Health and Human Development (NICHD) | R37-HD033486 |
| 471 | National Institute of Child Health and Human Development (NICHD) | R01-HD033486 |
| 471 | National Institute of Child Health and Human Development (NICHD) | R29-HD033486 |
| 471 | National Institute of Child Health and Human Development (NICHD) | F32 Predoctoral National Research Service Award |
| 480 | National Science Foundation (NSF) | 1561182 |
| 480 | National Science Foundation (NSF) | 1561122 |
| 545 | National Science Foundation (NSF) | BCS-1056805 |
| 546 | National Science Foundation (NSF) | BCS-1056805 |
| 546 | National Science Foundation (NSF) | BCS-1560810 |
| 563 | LEGO Foundation (LEGO) | The Science of Everyday Play, Tamis-LeMonda & Adolph, PIs |
| 564 | National Institutes of Health (NIH) | R03-091476-01 |
| 598 | National Institute of Child Health and Human Development (NICHD) | R01-HD087672 |
| 608 | National Science Foundation (NSF) | 1560810 |
| 653 | National Institutes of Health (NIH) | DP5 OD019812-01 |
| 666 | National Institutes of Health (NIH) | DP5 OD019812-01 |
| 667 | National Institutes of Health (NIH) | DP5 OD019812-01 |
| 668 | National Institutes of Health (NIH) | DP5 OD019812-01 |
| 669 | National Institutes of Health (NIH) | DP5 OD019812-01 |
| 670 | National Institutes of Health (NIH) | DP5 OD019812-01 |
| 694 | National Institutes of Health (NIH) | DP5 OD019812-01 |
| 695 | National Institutes of Health (NIH) | DP5 OD019812-01 |
| 696 | National Institutes of Health (NIH) | DP5 OD019812-01 |
| 707 | National Science Foundation (NSF) | NSF BCS1627993 |
| 785 | James S. McDonnell Foundation (JSMF) | Understanding Human Cognition – Scholar Award (No. 220020511) |
| 819 | National Institutes of Health (NIH) | R01MH091363 |
| 880 | National Institute of Child Health and Human Development (NICHD) | RO1-HD083381 |
| 884 | National Institute of Mental Health (NIMH) | R61-MH110624 |
| 884 | National Institute of Mental Health (NIMH) | R33-MH110624 |
| 893 | James S. McDonnell Foundation (JSMF) | 220020502 |
| 897 | National Institute of Child Health and Human Development (NICHD) | R01-HD086034 |
| 927 | James S. McDonnell Foundation (JSMF) | #220020510 |
| 943 | National Institute of Child Health and Human Development (NICHD) | R01-HD0334-86 |
| 943 | Defense Sciences Office, DARPA (DARPA Defense Science Office, DSO, DARPA) | N66001-19-2-4035 |
| 950 | National Science Foundation (NSF) | BCS-1929935 |
| 950 | National Science Foundation (NSF) | BCS-1661068 |
| 955 | National Institute of Child Health and Human Development (NICHD) | R01-HD033486 |
| 955 | National Institute of Child Health and Human Development (NICHD) | R01-HD086034 |
| 955 | National Institute of Child Health and Human Development (NICHD) | R01-HD094830 |
| 987 | Institute of Education Sciences | R324A180203 (07/2018-06/2022) |
| 987 | Institute of Education Sciences | Teacher and Peer Speech in Inclusion Classrooms: Malleable Factors Affecting Language Outcomes for Children with Disabilities |
| 987 | National Science Foundation (NSF) | 1620294 (2016-2020) |
| 987 | National Science Foundation (NSF) | IBSS-L: Continuous Measurement of Children’s Behavior and the Development of Social Dynamics |
| 987 | National Institute on Deafness and Other Communication Disorders (NIDCD) | R01DC018542 (2021-2026) |
| 987 | National Institute on Deafness and Other Communication Disorders (NIDCD) | Language Development and Social Interaction in Children with Hearing Loss |
| 1015 | James S. McDonnell Foundation (JSMF) | 220020511 |
| 1062 | National Science Foundation (NSF) | 1462280 |
| 1062 | National Science Foundation (NSF) | 1400802 |
| 1062 | National Science Foundation (NSF) | 1400810 |
| 1108 | National Institute of Child Health and Human Development (NICHD) | R01-HD086034 |
| 1116 | National Science Foundation (NSF) | 1627993 |
| 1116 | National Institute of Child Health and Human Development (NICHD) | R01HD086034 |
| 1116 | Defense Sciences Office, DARPA (DARPA Defense Science Office, DSO, DARPA) | N66001-19-2-4035 |
| 1118 | LEGO Foundation (LEGO) | The Science of Everyday Play, Tamis-LeMonda & Adolph, PIs |
| 1128 | James S. McDonnell Foundation (JSMF) | Scholar Award in Understanding Human Cognition to DY |
| 1131 | National Institutes of Health (NIH) | R01EY022525 |
| 1131 | National Institutes of Health (NIH) | R01EY030127 |
| 1131 | National Institutes of Health (NIH) | R01EY027792 |
| 1131 | National Institutes of Health (NIH) | T32 EY015387 |
| 1135 | National Science Foundation (NSF) | 1302741 |
| 1136 | LEGO Foundation (LEGO) | NA |
| 1136 | National Institute of Child Health and Human Development (NICHD) | R01HD094830 |
| 1139 | National Institutes of Health (NIH) | dfafd |
| 1139 | National Institutes of Health (NIH) | df |
| 1152 | National Institute of Child Health and Human Development (NICHD) | HD-076311 |
| 1153 | John Templeton Foundation | CURIOSITY AND CLASSROOMS: AN EXPLORATION OF CURIOSITY AND THE DEVELOPMENT OF INTELLECTUAL VIRTUES IN SCHOOLS |
| 1161 | National Institutes of Health (NIH) | R01EY030127 |
| 1168 | National Institute of Child Health and Human Development (NICHD) | R01HD094830 |
| 1175 | National Institute of Child Health and Human Development (NICHD) | R01 HD 041607 |
| 1187 | National Institutes of Health (NIH) | R01-HD082844 |
| 1187 | National Science Foundation (NSF) | BCS-1655300 |
| 1223 | LEGO Foundation (LEGO) | Private Organization |
| 1223 | National Institute of Child Health and Human Development (NICHD) | R01HD094830 |
| 1241 | National Science Foundation (NSF) | IRB-FY2017-722 |
| 1247 | John Templeton Foundation | NA |
| 1249 | National Science Foundation (NSF) | 1462280 |
| 1253 | National Institutes of Health (NIH) | 1F32HD096829-01 |
| 1259 | National Institutes of Health (NIH) | 5R01HD043842 |
| 1259 | National Institutes of Health (NIH) | 5R01HD067581 |
| 1273 | National Institute of Child Health and Human Development (NICHD) | R01-HD0334-86 |
| 1279 | National Science Foundation (NSF) | 1749376 |
| 1281 | National Institute of Child Health and Human Development (NICHD) | R21-HD095153 |
| 1289 | James S. McDonnell Foundation (JSMF) | NA |
| 1294 | National Institutes of Health (NIH) | R01EY030127 |
| 1294 | National Science Foundation (NSF) | BCS 0951580 |
| 1311 | National Institute of Child Health and Human Development (NICHD) | R01-HD63071 |
| 1311 | National Institute of Child Health and Human Development (NICHD) | R37-HD81168 |
| 1311 | National Institute of Child Health and Human Development (NICHD) | R21-HD95153 |
| 1311 | National Institute of Mental Health (NIMH) | R01-MH66424 |
| 1311 | Bill & Melinda Gates Foundation (BMGF) | OPP1129031 |
| 1316 | National Institutes of Health (NIH) | R01EY030127 |
| 1321 | Institute of Education Sciences | R305B140048 |
| 1321 | Institute of Education Sciences | University of Chicago |
| 1358 | National Institute of Child Health and Human Development (NICHD) | R01HD094830 - Play & Learning Across a Year (PLAY) |
| 1358 | LEGO Foundation (LEGO) | The Science of Everyday Play |
| 1364 | Environmental Protection Agency (EPA) | 84020201-0 |
| 1368 | John Templeton Foundation | 61461: Curiosity and Classrooms: An exploration of curiosity and the development of intellectual virtues in schools |
| 1368 | John Templeton Foundation | Jacobs Foundation Research Fellowship |
| 1398 | National Science Foundation (NSF) | 2043717 |
| 1401 | James S. McDonnell Foundation (JSMF) | 220020547 |
| 1403 | National Science Foundation (NSF) | NSF #1761053 Collaborative Research: Math Cognition in Toddlers from Latine and White Families |
| 1403 | National Science Foundation (NSF) | Robin Hood Foundation: Routine Language in Hispanic Families |
| 1420 | James S. McDonnell Foundation (JSMF) | Understanding Human Cognition |
| 1437 | National Science Foundation (NSF) | [BCS-1056805 |
| 1437 | National Science Foundation (NSF) | BCS-1560810 |
| 1437 | National Science Foundation (NSF) | CS-1728133 |
| 1474 | National Science Foundation (NSF) | 1052736 |
| 1474 | National Institutes of Health (NIH) | MH096951 |
| 1474 | National Institutes of Health (NIH) | GM105004 |
| 1474 | National Institutes of Health (NIH) | U24 AA027684 |
| 1495 | National Science Foundation (NSF) | NSF 1628300 |
| 1495 | National Institutes of Health (NIH) | P01-HD064653 |
| 1550 | National Science Foundation (NSF) | 1444758 |
| 1550 | National Science Foundation (NSF) | 1948790 |
| 1559 | National Institute of Child Health and Human Development (NICHD) | HD098235 |
| 1580 | National Science Foundation (NSF) | BCS #1941449 |
| 1589 | National Science Foundation (NSF) | 2004983 |
| 1589 | National Institutes of Health (NIH) | F32HD103439 |
| 1589 | National Institutes of Health (NIH) | R01HD095912 |
Funders by number of volumes
| funder_name | n_vols |
|---|---|
| National Science Foundation (NSF) | 65 |
| National Institute of Child Health and Human Development (NICHD) | 57 |
| National Institutes of Health (NIH) | 41 |
| National Institute of Mental Health (NIMH) | 12 |
| James S. McDonnell Foundation (JSMF) | 10 |
| LEGO Foundation (LEGO) | 6 |
| Institute of Education Sciences | 4 |
| John Templeton Foundation | 4 |
| National Institute on Deafness and Other Communication Disorders (NIDCD) | 3 |
| Bill & Melinda Gates Foundation (BMGF) | 2 |
| Defense Sciences Office, DARPA (DARPA Defense Science Office, DSO, DARPA) | 2 |
| Autism Speaks | 1 |
| Environmental Protection Agency (EPA) | 1 |
| European Research Council (ERC), Belgium | 1 |
| National Institute of General Medical Sciences (NIGMS) | 1 |
| New York University (NYU) | 1 |
| Office of Behavioral and Social Sciences Research (OBSSR) | 1 |
| Social Science Research Institute, Penn State University (Penn State Social Science Research Institute, SSRI, PSU) | 1 |
| Society for Research in Child Development (SRCD) | 1 |


You think of hosting nodes and hosted software .
//Creation of a Cloud instance
Cloud cloud = factory.createCloud();
//Creation of a Node
Node myAmazonEC2node = factory.createNode();
myAmazonEC2node.setId("EC2_0");
//Adding the node to the cloud
cloud.addNodes(myAmazonEC2node);
//Creation of a Software
Softwzre myNginx = factory.createSoftware();
myNginx.setName("SRV0");
//Attaching the software to the node
myAmazonEC2node.addSoftwares(myNginx);
//create a cloud
var cloud = factory.createCloud();
//create a node
var myAmazonEC2node = factory.createNode();
myAmazonEC2node.id = "EC2_0";
//add node to your cloud
cloud.addNodes(myAmazonEC2node);
//create a software
var myNginx = factory.createSoftware();
myNginx.name = "SRV0";
//attach the software to your new node
myAmazonEC2node.addSoftwares(myNginx);
//select your node by ID
Node ec2node = cloud.findNodesByID("EC2_0");
//or with XPath style
ec2node = cloud.findByPath("nodes[EC2_0]");
//then select a software
Software soft = ec2node.findSoftwaresByName("SRV0");
//or by path
soft=cloud.findByPath("nodes[EC2_0]/softwares[SRV0]");
//print the path of any element
System.out.println(soft.path(););
//print on console : nodes[EC2_0]/softwares[SRV0]
//select your node by ID
var ec2node = cloud.findNodesByID("EC2_0");
//or with XPath style
ec2node = cloud.findByPath("nodes[EC2_0]");
//then select a software
var soft = ec2node.findSoftwaresByName("SRV0");
//or by path
soft=cloud.findByPath("nodes[EC2_0]/softwares[SRV0]");
//print the path of any element
console.log(soft.path(););
//print on console : nodes[EC2_0]/softwares[SRV0]
Model elements selection using paths is way faster than iterating on collections.
Similarly to database IDs or NoSQL indexes, KMF uses hashtables to speed up the lookup of elements.
ModelCloner cloner = new DefaultModelCloner();
ModelSerializer jsonSaver = new JSONModelSerializer();
ModelLoader jsonLoader = new JSONModelLoader();
ModelSerializer xmiSaver = new XMIModelSerializer();
ModelLoader xmiLoader = new XMINModelLoader();
//Save in standard XMI Format (work Eclipse)
System.out.println(xmiSaver.serialize(myCloud));
//Save in human readable JSON
System.out.println(jsonSaver.serialize(myCloud));
//Load from JSON and take first package (only one here)
Cloud cloud = jsonLoader
.loadModelFromString(txtPayLoad).get(0);
//Load from XMI
Cloud cloud = xmiLoader
.loadModelFromString(txtPayLoad).get(0);
//Clone the entire model
Cloud clonedModel = cloner.clone(cloud);
//Clone to a readonly structure
clonedModel = cloner.clone(cloud,true);
//Only clone a part of model, share the first node
cloud.getNodes().get(0).setRecursiveReadOnly();
Cloud clonedModel = cloner.cloneMutableOnly(cloud);
var cloner = new DefaultModelCloner();
var jsonSaver = new JSONModelSerializer();
var jsonLoader = new JSONModelLoader();
var xmiSaver = new XMIModelSerializer();
var xmiLoader = new XMINModelLoader();
//Save in human readable JSON
console.log(jsonSaver.serialize(myCloud));
//Load from JSON and take first package
var cloud = jsonLoader
.loadModelFromString(txtPayLoad).get(0);
//Clone the entire model
var clonedModel = cloner.clone(cloud);
//Clone to a readonly structure
var clonedModel = cloner.clone(cloud,true);
//Only clone a part of model, share the first node
cloud.getNodes().get(0).setRecursiveReadOnly();
var clonedModel = cloner.cloneMutableOnly(cloud);
//save into XMI format
var savedModel = xmiSaver.serialize(cloud);
//reload from XMI stream
var reloadCloud = xmiLoader
.loadModelFromString(savedModel);
We support the standard XMI interchange format for compatibility with other modeling framework tool like EMF.
In addition KMF offers to serialize your models in JSON format for more portability, especially designed for web usage.
KMF allows to set part of the model as Read-Only. With this feature, the clone operator is able to efficiently clone mutable elements only.
This ability drastically speeds up the cloning and enables processes of clones in parallel.
//Create a listener
class ModelSyncListener implements ModelTreeListener {
@Override
public void elementChanged(ModelEvent event){
switch(event.getType()){
case ActionType.ADD:
System.out.println("Add "+event);
break;
case ActionType.SET:
System.out.println("Set "+event);
break;
}
}
}
//Add it as TreeListener
//Listens this element + all contained
cloud.addModelTreeListener(new ModelSyncListener());
//Std listener only listen local event
//cloud.addModelListener(new ModelSyncListener());
Node node = factory.createNode();
node.setID("EC1");
//Trigger event ADD
cloud.addNodes(node);
//Trigger event SET
node.setId("EC2_1");
//Declare events listener
var listener = { elementChanged : function(event){
switch(event.getType()){
case ActionType.$ADD:
console.log("Add event ! "+event);
break;
case ActionType.$SET:
console.log("Set event ! "+event);
break;
}
}};
//Add as Tree (meaning global) listener
cloud.addModelTreeListener(listener);
//Std listener only listen local event
//cloud.addModelListener(listener);
var node = factory.createNode();
node.id = "EC1";
//Trigger event ADD
cloud.addNodes(node);
//Trigger event SET
node.id = "EC2_1";
Events are triggered each time an attribute or a relation of a model element is edited.
They make it easier to synchronize a presentation layer like a DOM fragment and the modeling layer.
ModelCompare compare = new DefaultModelCompare();
//Produces the trace sequence to go from MO to M1
TraceSequence diffSeq = compare.diff(model0,model1);
//Produces the trace sequence of MO inter M1
TraceSequence interSeq = compare.inter(model0,model1);
//Produces the trace sequence of MO merged with M1
TraceSequence mergeSeq = compare.merge(model0,model1);
for(trace : diffSeq.getTraces()){
//Prints the difference between M0 and M1
System.out.println(trace);
}
//Merges M1 into M0
mergeSeq.applyOn(model0);
assert(model1.modelEquals(m0));
Cloud model3 = factory.createCloud();
interSeq.applyOn(model3);
//model3 is now the common part of M0 and M1
var compare = new DefaultModelCompare();
//Produce the trace sequence of MO -> M1
var diffSeq = compare.diff(model0,model1);
//Produce the trace sequence of MO inter M1
var interSeq = compare.inter(model0,model1);
//Produces the trace sequence of MO merged with M1
var mergeSeq = compare.merge(model0,model1);
for(i=0;i < diffSeq.getTraces().$size;i++){
//Print the comparison between M0 and M1
console.log(diffSeq.getTraces()[i]);
}
//Merge M1 into M0
mergeSeq.applyOn(model0);
assert(model1.modelEquals(m0));
var model3 = factory.createCloud();
interSeq.applyOn(model3);
//model3 is now the common part of M0 and M1
Each set operator manipulates models as trace sequences. A Trace is defined as an atomic operation modifying a model (add, set, remove).
Trace sequences can be applied on models, making it possible to build any operators using these atomic steps.
Cloud cloudM0 = factory.createNode();
Cloud cloudM1 = factory.createNode();
ModelCompare compare = new DefaultModelCompare();
Event2Trace conv = new Event2Trace(compare);
cloudM0.addModelTreeListener(new ModelTreeListener(){
@Override
public void elementChanged(ModelEvent event) {
TraceSequence traceSeq = conv.convert(event);
//send via network for remote synchronisation
//traceSeq are serialiable
traceSeq.applyOn(cloudM1);
}
});
//Add a new node to cloudM0
Node newNode = factory.createNode();
newNode.setId("newNode")
cloudM0.addNodes(newNode);
//Now CloudM1 has also create one node
assert(cloudM1.findNodesById("newNode") != null);
var cloudM0 = factory.createNode();
var cloudM1 = factory.createNode();
var compare = new DefaultModelCompare();
var conv = new Event2Trace(compare);
var listener = { elementChanged : function(event){
var traces = apply.convert(event);
//send trace to network or browser events
//for remote synchronization
traces.applyOn(cloudM1);
}};
//Add a new node to cloudM0
var newNode = factory.createNode();
newNode.setId("newNode")
cloudM0.addNodes(newNode);
//Now CloudM1 has also create one node
assert(cloudM1.findNodesById("newNode") != null);
To synchronize several model instances simply capture events, convert them to trace, broadcast, and apply on each models.
Coupled with a conflict resolution mechanism, this makes the foundation for collaborative distributed modeling.
ModelVisitor visitor = new ModelVisitor(){
public override fun visit(
KMFContainer elem,
String refNameInParent,
KMFContainer parent) {
System.out.println(elem.path())
}
}
//recursive navigation into contained elements
cloud.visit(true,true,false);
//recursive navigation into not contained references
cloud.visit(true,false,true);
//Non recursive navigation into cloud references
cloud.visit(false,true,true);
ModelAttributesVisitor visitorAtts
= new ModelAttributesVisitor(){
public override fun visit(
Object attValue,
String name,
KMFContainer parent) {
System.out.println("Visit "+name)
}
}
//Visit all attributes of Cloud
cloud.visit(visitorAtts);
var visitor = new ModelVisitor();
visitor.visit = function(modelElem){
console.log(modelElem.metaClassName());
}
//recursive navigation into contained elements
cloud.visit(true,true,false);
//recursive navigation into not contained references
cloud.visit(true,false,true);
//Non recursive navigation into cloud references
cloud.visit(false,true,true);
var visitorAtts = new ModelAttributesVisitor();
visitorAtts.visit = function(attValue,name,parent) {
console.log(name);
}
//Visit all attributes of Cloud
cloud.visit(visitorAtts);
The Visitor API replaces the natural iterative navigation through model elements. You can choos to visit recursively or not (first boolean parameters). Visit methods are generated to offer best performances. In addition users can stop the recursion at anytime by using the stopVisit() methods inside the visitor object to globally stop the process. Also, noChildrenVisit() skips children.
//declare a new aspect on Node
aspect trait NodeAspect : Node {
//private method
//are not include in model
private fun privateProcess(){};
//method add to Node metaClass
fun newService(){}
}
//Add a new concept named ExNode
//The new concept will inherit Node
metaClass("ExNode") ExNodeA : Node {
//public method
fun ExRun(){
}
}
//create an instance of the concept
var newNode = factory.createExNode();
//JS version can use static aspects
//same as the JVM version.
//In addition model elements
//are generated extensible dynamically
//by leveraging prototypes
//add a method to the Node concept
factory.createNode().prototype.prettyPrint =
function prettyPrint(){
console.log(this.metaClassName());
}
//create a standard node object
var node = factory.createNode();
//call aspect method
node.prettyPrint();
Aspects replace the derived method of ecore. Allowing to write statically verified code instead of ugly putting code in
KMF takes efficiency seriously.
With a generative approach, you can expect the best performance at runtime for your modeling operations.
Unlike other modeling framework, KMF provides cross compilation for Java and JS platforms. Moreover it doesn't need any library @Runtime and is easy-to-use for any OO developper by leveraging simple POJO api.
Collaborative and distributed modeling is enabled by KMF thanks to the incremental synchronization mechanism.
It is now possible to embed and synchronize your models on tablets, phones and your home computer.
Free Software
We're researchers from Interdisciplinary Center for Security, Reliability and Trust (SnT), University of Luxembourg and INRIA Rennes (FR).Join the team
Help to build KMF on GitHub.Need some help?
Start your own project and ask us on GitHub!


---
layout: page
title: Updates
permalink: /updates/
---
2017-11-02
- Switch to custome domain geeknerd.me
2017-10-29
- Added a simple search bar in Home page
2017-10-18
- Repair and update outdated line number format in _syntax-highlighting.scss
2017-10-13
- Modified Home page display & added back buttons for posts.
2017-10-12
2016-02-01
- Updated syntax highlighting to a lighter theme.
2015-10-05
- Added optional line numbers to _syntax-highting.scss for code block.
2015-09-17
2015-09-16
- Added timeline for updates.
2015-09-15
- File Structure Modification.
- Removed several pages and sample posts.
- Updated personal information and config file
2015-09-14
- Moved from Blogger and Wordpress.com to Github for personal blog.
- Page officially started.


Purchase Class
Item Index
Methods
Methods
complete
()
final
Marks the purchase as completed. Your application should call this method from the purchaseUpdate event handler after it has successfully processed the purchase and unlocked the functionality purchased by the user.
Note that on iOS, you will receive a
purchaseUpdate event not only in response to the
Alternatively, you can set the
InAppProductsModule/autoCompletePurchase:property property to true
; that will cause the module
to automatically complete the purchase right before
Properties
applicationPayload
NSString
read-only
An opaque identifier for the user’s account on your system. Only available on iOS7.0 and above.
downloads
Array of Downloads
read-only
An array of Download objects associated with this purchase.
Only valid if the state is PURCHASE_STATE_PURCHASED. The Download objects stored in this property must be used to download the content before the purchase is completed; after that the download objects are no longer usable.
orderNumber
String
read-only
A unique order identifier for the transaction.
originalPurchase
Purchase
read-only
The original purchase associated with this (restored) purchase. Only valid if the state is PURCHASE_STATE_RESTORED.
quantity
Number
read-only
Number of products purchased.
receipt
TiBlob
read-only
Receipt of the purchase. Only valid if the state is PURCHASE_STATE_PURCHASED.
SKU
String
read-only
The item's product identifier.
state
Number
read-only
Purchase state.
time
Date
read-only
Time of purchase.


servertool - The Java(TM) IDL Server Tool
f3servertool provides a command-line interface for application programmers to register, unregister, startup, and shutdown a persistent server.
f3 servertool -ORBInitialPort f4nameserverportf3 f3optionsf3 [ f3commandsf3 ]
If you did not enter a command when starting f2servertool, the command-line tool displays with a f2servertool > prompt. Enter commands at the f2servertool > prompt.
If you enter a command when starting f2servertool, the Java IDL Server Tool starts, runs the command, and exits.
The f2-ORBInitialPort f2nameserverport option is f3required. The value for f2nameserverport must specify the port on which f2orbd is running and listening for incoming requests. When using Solaris software, you must become root to start a process on a port under 1024. For this reason, we recommend that you use a port number greater than or equal to 1024 for the f2nameserverport.
The f2servertool provides the command-line interface for the application programmers to register, unregister, startup, and shutdown a persistent server. Other commands are provided to obtain various statistical information about the server.
-ORBInitialHost nameserverhost Specifies the host machine on which the name server is running and listening for incoming requests. The f2nameserverhost defaults to f2localhost if this option is not specified. If f2orbd and f2servertool are running on different machines, you must specify the name or IP address of the host on which f2orbd is running.
-Joption Pass f2option to the Java virtual machine, where f2option is one of the options described on the reference page for java(1). For example, f3-J-Xms48m sets the startup memory to 48 megabytes. It is a common convention for f3-J to pass options to the underlying virtual machine.
register -server <server class name> -classpath <classpath to server> [ -applicationName <application name> -args <args to server> -vmargs <flags to be passed to Java VM> ] Register a new persistent server with the Object Request Broker Daemon (ORBD). If the server is not already registered, it is registered and activated. This command causes an install method to be invoked in the main class of the server identified by the f2-server option. The install method must be f2public static void install(org.omg.CORBA.ORB). The install method is optional and enables the developer to provide their own server installation behavior (for example, creating database schema).
unregister -serverid <server id > | -applicationName <application name> Unregister a server from the ORBD by using either its server id or its application name. This command causes an uninstall method to be invoked in the main class of the server identified by the f2-server option. The uninstall method must be f2public static void uninstall(org.omg.CORBA.ORB). The uninstall method is optional and enables the developer to provide their own server uninstall behavior (for example, undoing the behavior of the install method).
getserverid -applicationName <application name> Return the server id that corresponds with an application.
list List information about all persistent servers registered with the ORBD.
listappnames List the application names for all servers currently registered with the ORBD.
listactive List information about all persistent servers that have been launched by the ORBD and are currently running.
locate -serverid <server id > | -applicationName <application name> [-endpointType <endpointType> ] Locate the endpoints (ports) of a specific type for all ORBs created by a registered server. If a server is not already running, it is activated. If an endpoint type is not specified, then the plain/non-protected endpoint associated with each ORB in a server is returned.
locateperorb -serverid <server id > | -applicationName <application name> [-orbid <ORB name> ] Locate all the endpoints (ports) registered by a specific ORB of registered server. If a server is not already running, then it is activated. If an f2orbid is not specified, the default value of "" is assigned to the f2orbid. If any ORBs are created with an f2orbid of empty string, all ports registered by it are returned.
orblist -serverid <server id > | -applicationName <application name> Lists the ORBId of the ORBs defined on a server. An ORBId is the string name for the ORB created by the server. If the server is not already running, it is activated.
shutdown -serverid <server id > | -applicationName <application name> Shutdown an active server that is registered with ORBD. During execution of this command, the f2shutdown() method defined in the class specified by either the f2-serverid or f2-applicationName parameter is also invoked to shutdown the server process appropriately.
startup -serverid <server id > | -applicationName <application name> Startup or activate a server that is registered with ORBD. If the server is not running, this command launches the server. If the server is already running, an error message is returned to the user.
help List all the commands available to the server through the server tool.
quit Exit the server tool.
orbd(1)


Modules¶
core¶
- fhb Action_lib framework
- Project library
- Report framework
basic¶
roslaunch ./10-basic/cli/launch/cli.launch
roslaunch ./10-basic/cli/launch/cli_sim.launch
roslaunch ./10-basic/cli/launch/fsm.launch
roslaunch ./10-basic/cli/launch/sim.launch
- CLI
- NodeJS ROS Test
- ActionLib for Web
msgs¶
Harvestbot_model¶
- Installation
- Usage
以rviz觀看harvestbot:
roslaunch harvestbot_description harvestbot_rviz.launch
在gazebo模擬時可看到camera跟laser scan訊號
以gazebo模擬harvestbot:
roslaunch harvestbot_gazebo harvestbot_world.launch
在gazebo模擬時可打開rqt發送topic控制harvestbot:
roslaunch harvestbot_control harvestbot_rqt.launch
harvest¶
roslaunch ./30-harvest/launch/harvest_analyzer.launch
roslaunch ./30-harvest/launch/harvest_sys.launch
- fsm
vision¶
roslaunch ./40-vision/launch/vision_sys.launch
roslaunch ./40-vision/launch/vision_test.launch
- ROS with RPI camera
- ROS+RPI camera+python opencv
- ROS + YOLO
- Publishing an image from disk
car¶
roslaunch ./60-car/launch/car_sys.launch


Class BitHacks
Assembly: Advanced.Algorithms.dll
Syntax
Methods
CountSetBits(Int32)
Returns the number of set bits in given integer x
Declaration
public static int CountSetBits(int x)
Parameters
| Type |
Name |
Description |
| Int32 |
x |
|
Returns
CountTrailingZerosByBinarySearch(Int32)
Counts the number of trailing zero bits in an efficient manner
Declaration
public static int CountTrailingZerosByBinarySearch(int x)
Parameters
| Type |
Name |
Description |
| Int32 |
x |
|
Returns
GetRightmostSubBitsStartingWithAnUnsetBit(Int32)
Gets the first right most sub bits starting with a Unset bit, with rightmost being 0th bit
eg. 1011 => 0011
Declaration
public static int GetRightmostSubBitsStartingWithAnUnsetBit(int x)
Parameters
| Type |
Name |
Description |
| Int32 |
x |
|
Returns
GetRightmostSubBitsStartingWithASetBit(Int32)
Gets the first right most sub bits starting with a set bit, with rightmost being 0th bit
Declaration
public static int GetRightmostSubBitsStartingWithASetBit(int x)
Parameters
| Type |
Name |
Description |
| Int32 |
x |
|
Returns
HasOppositeSigns(Int32, Int32)
Checks if given numbers are of opposite signs
Declaration
public static bool HasOppositeSigns(int x, int y)
Parameters
Returns
IsEven(Int32)
Checks if given number is even
Declaration
public static bool IsEven(int x)
Parameters
| Type |
Name |
Description |
| Int32 |
x |
|
Returns
IsPowerOf2(Int32)
Checks if given number is a power of 2
Declaration
public static bool IsPowerOf2(int x)
Parameters
| Type |
Name |
Description |
| Int32 |
x |
|
Returns
IsSet(Int32, Int32)
Checks if nth bit from right is set, with rightmost being 0th bit
Declaration
public static bool IsSet(int x, int n)
Parameters
Returns
RightPropogateRightmostSetBit(Int32)
Sets all the first right most sub bits starting with a set bit, with rightmost being 0th bit
Declaration
public static int RightPropogateRightmostSetBit(int x)
Parameters
| Type |
Name |
Description |
| Int32 |
x |
|
Returns
RightPropogateRightmostUnsetBit(Int32)
UnSets all the first right most sub bits starting with a unset bit, with rightmost being 0th bit
Declaration
public static int RightPropogateRightmostUnsetBit(int x)
Parameters
| Type |
Name |
Description |
| Int32 |
x |
|
Returns
SetBit(Int32, Int32)
Sets nth bit from right, with rightmost being 0th bit
Declaration
public static int SetBit(int x, int n)
Parameters
Returns
ToggleBit(Int32, Int32)
Toggles nth bit from right, with rightmost being 0th bit
Declaration
public static int ToggleBit(int x, int n)
Parameters
Returns
TurnOffRightmostSetBit(Int32)
Turns Off first set bit from right, with rightmost being 0th bit
Declaration
public static int TurnOffRightmostSetBit(int x)
Parameters
| Type |
Name |
Description |
| Int32 |
x |
|
Returns
TurnOnBitAfterRightmostSetBit(Int32)
Turns On first Unset bit from right, with rightmost being 0th bit
Declaration
public static int TurnOnBitAfterRightmostSetBit(int x)
Parameters
| Type |
Name |
Description |
| Int32 |
x |
|
Returns
UnsetBit(Int32, Int32)
Unsets nth bit from right, with rightmost being 0th bit
Declaration
public static int UnsetBit(int x, int n)
Parameters
Returns
UpdateBitToValue(Int32, Int32, Boolean)
Update the nth bit from right with given boolean value, with rightmost being 0th bit
Declaration
public static int UpdateBitToValue(int x, int n, bool value)
Parameters
Returns


$api->version('v1', function ($api) {
$api->get('data', 'App\Http\Controllers\WelcomeController@getSample');
});
dingo/api package is meant to provide you, with a set of tools to help you easily and quickly build your own API. dingo/api works out of the box in Laravel angular material starter.
Feel free to check their wiki to customize it.
dingo/api is configured to work harmoniously with JWT-auth.
API.all('data').doGET().then(function(response){
console.log(response.data);
});
Restangular is an AngularJS service to handle Rest API Restful Resources properly and easily.
//return your data using the api response macro
return response()->success($data);
ResponseMacroServiceProvider returns your data inside the data object.
You can customize it to include other properties.
Also route versioning and Accept header are configured for you in angular/config/restangular.js, to match with Dingo/API.


ABSTRACT
Khabutdinov R.A. The systemic concept of energy-resource synergy and the methodology of technological innovation management in motor transport. Visnyk National Transport University. Series «Technical sciences». Scientific and Technical Collection. - Kyiv: National Transport University, 2020. - Issue 1 (46).
The article discusses the concept of energy-resource synergy in motor transport and in the motor transport system, as well as the main provisions of the methodology of technological innovation management in motor transport. Proposed: a new epistemological paradigm of the motor transport as a sphere of material production; technologically innovative concept of energy-resource synergy in the transport system; a set of methods for technologically innovative management of energy - resource quality of transport services and for resource-synergistic improvement of the functions of the transport system and the subsystem "Motor transport"; analytical model of the target function of strategic management in motor transport. A single energy- resource mechanism for the functioning of motor transport and the material integrity of the motor transport system has been established. The ways of innovative resource saving on transport and in infrastructure subsystems are revealed.
The object of study is the structural and functional organization of motor transport and motor transport system.
The purpose of the work is the formation of a system-synergistic target function of project management at highly technological and intensively resource-saving transport services based on the innovative requirements and the concept of energy-resource synergy in the transport system.
The research method is a theoretical analysis and synthesis of the conceptual target function of the technology and innovation management in transport, taking into account the concept of energy-resource synergy in the transport system.
The results of the article can be used to implement system-synergistic and conceptual-innovative management in transport and in other subsystems.
Predicted assumptions about the development of the object of study are the implementation of a technologically innovative mechanism of energy-resource synergy in the motor transport and in the motor transport system, taking into account their structures and functions.
KEYWORDS: CONCEPT, TECHNOLOGICAL INNOVATIONS, MOTOR TRANSPORT, SYSTEM, FUNCTIONS, RESOURCES, ENERGY-RESOURCE SYNERGY, LIFE CYCLE, QUALITY OF TRANSPORT SERVICES, MANAGEMENT.
REFERENCES
Setrov. M.I. (1972) Osnovi funktsionalnoi teorii organizatsii [Fundamentals of the functional theory of organization]. Leningrad. Nauka. p 163 (in Russian).
AUTHOR
Khabutdinov Ramazan A., Doctor of Technical Sciences, Professor, National Transport University, Head. Department of Transport Technologies, e-mail<EMAIL_ADDRESS>tel. +380962290869, Ukraine, 01010, Kyiv, str. Omelyanovich-Pavlenko, 1, orsid.org/0000-0002-1329-5739.
АВТОР:
Хабутдинов Рамазан Абдуллаевич, доктор техн. наук, професор, Національний транспортний університет, зав. кафедри транспортних технологій, e-mail<EMAIL_ADDRESS>тел. +380962290869, Украина, 01010, г. Киев, ул. Омельяновича-Павленко,1, orsid.org/ 0000-0002-1329-5739.
REVIEWER
Mnatcakanov R., Doctor of Technical Sciences Engineering (Dr.), professor, National Aviation University, department of maintaining the airworthiness of aircraft, Kyiv, Ukraine .
Petrashevski O., Doctor of Technical Sciences, professor, National Transport University, Department of Airports, Kyiv, str. Omelyanovich-Pavlenko, 1,Ukraine.
Article language: Ukrainian
Open Access: http://publications.ntu.edu.ua/visnyk/46/365.pdf
Print date: 15.04.2020
Online publication date: 27.10.2020


--- layout: page title: Lean Prover Zulip Chat Archive permalink: archive/113488general/38493ProvingLeanVideo.html ---
Likely a repost but this is a youtube talk about proving in Lean: https://www.youtube.com/watch?v=2FQOakOfP00
This was at a summer school on "quantum symmetries" (higher categories/topological field theory/topological phases of matter). The students seemed to enjoy it and had lots of questions afterwards, and at least a few apparently installed Lean
I'm glad my version of the web editor was useful! I noticed you went fullscreen at one point to get more space; you can also click the green / orange bar at the very top to hide everything above the editor and infoview.
{% endraw %}


Personal finance powered by the Blockchain.
Easy to access. Free to use.
Take advantage
Are you a financial institution thinking about working with us? Then you’ve come to the right place!
Turn-key solution
100% secure
Built to scale
Modern Money
One product – many possibilities
We are building a regulated blockchain-based market infrastructure that enables institutional access and brings long-term patient liquidity to the crypto economy, improving price discovery and decreasing volatility.
Modern Money is a personal finance application that will help you become part of the financial revolution. It is a place where every user is subject to due diligence, KYC, anti-money laundering and OFAC/FinCEN reporting. At the same time, it is a place where users are empowered to use cryptocurrencies in their everyday lives, in exactly the same way that they use fiat currencies.
Lykke Platform is regulated in the UK and Switzerland
We meet all compliance standards
Law
Governance
Transparency
Regulation
Next-generation personal finance application
Users can now take full control of their money and build their financial portfolio
Allow users to build their financial portfolios
The world of finance is changing. Become part of it and bring cryptocurrencies into everyday life. Give your users the ability to deposit bitcoins, transfer funds from a credit card or make a bank wire transfer – with Modern Money, you can support it all.
Enable easy mobile payments
Users no longer need to wait in line to pay. Utility and other bills can now be managed easily using the mobile application. Enable users to track their spending and save time as they pay on the go. Adding up their bills and controlling their expenses has never been easier.
A White Label Platform
Partners build on top of Lykke
Discover the technology
Discover the technology
The Lykke marketplace uses the distributed ledger, which is blockchain technology pioneered by Bitcoin. A blockchain is a sequence of linked data records, or blocks. Each block refers to an earlier block in the chain, which strengthens the security of the entire sequence and makes it possible to store the data in a decentralized way, across multiple network-enabled devices in physical locations anywhere in the world. Using the blockchain as a ledger for financial transactions—as Bitcoin does, and as Lykke also does—all but eliminates the risk of fraud, because the ledger does not exist in any fixed place; rather, it exists in multiple places simultaneously, beyond the reach of any single authority.
Markets Today
Franchise the Wallet
The world of finance is changing: lead the way and give your users Modern Money
One global market
Regulation and compliance are the biggest hurdles delaying widespread adoption of the crypto economy and digital markets. The regulatory landscape is quickly taking shape and Lykke is a part of this process. We work with regulators across the globe to introduce digital assets and operate trading infrastructure that will be fully compliant with securities market laws and regulatory standards. The Lykke Roadmap includes 14 regulated entities set to be operational in 2017/2018, serving the needs of investors on all continents.
United States: SEC-regulated broker dealer (BD), alternative trading system (ATS) and registered investment advisor (RIA for wealth management); CFTC-regulated futures commission merchant (FCM) and designated contract market (DCM); Office Comptroller of Currency or State Regulator-regulated for banking license; jointly SEC- and CFTC-regulated hedge funds;
Vanuatu: VFSC-regulated dealer in securities
Integrated payment systems
Integrated payment systems
Lykke is building a payment infrastructure on blockchain that will facilitate faster growth and wider adoption of regulated cryptocurrencies around the world. Users that have access to the system will be able to pay with all available digital assets and the merchant will receive payment in the asset of their choice.
As we work on Lykke Pay, we are looking into the future when we believe micropayments on the blockchain will be available at every shop and restaurant, just as bank cards are used today.
A handheld POS terminal connected to Lykke Pay prints out a check with a QR code containing the recipient’s address and the amount to be paid in Bitcoins. As soon as Lykke Pay detects the required amount on the address provided, the terminal prints out a confirmation receipt.
While we are waiting for a payment from a customer we assume the market risk. Once the payment is received, merchants working with us can immediately convert the Bitcoins they receive to fiat currency using Lykke Exchange.


{% extends "base.html" %} {% block head_title %}Home{% endblock %} {% block content %}
Stories which were just published recently.


--- title: Fall Women's Retreat keywords: girls getaway, women's camp, weekend description: Join fellow sisters in Christ at this retreat. Register online, read about this year's speaker and view prices and event times. name: Fall Women's Retreat --- {% block MainText %} {{ macros.render_prog_info() }}
Come away for a weekend with your fellow sisters in Christ. Mt. Cross is hosting its annual Fall Women's Retreat. We will also spend time singing, laughing and enjoying being women of God. Come for the weekend and be renewed as a woman of God.
Over the weekend we will explore together biblical, historical, and cultural understandings of beauty. We will seek to look beyond our culture's narrow definition of beauty as a physical attribute, explore the concept of what it means to be created in God's image, and ask ourselves what it really means to call our savior beautiful.
Sarah Sumner-Eisenbraun currently serves as associate and campus pastor at Salem Lutheran Church and School in Glendale, CA. Originally from Rapid City, SD, Sarah became a Lutheran in the spring of 2003 while attending St. Olaf College in Northfield, MN and began seminary just a few months later. She specializes in Children, Youth, and Family Ministry, loves sewing, knitting, reading, and spending time with her husband Kevin and daughter Zoe.
Erin Armstrong is a second year M.Div student at Pacific Lutheran Theological Seminary (PLTS). She's from Riverside, CA, where she grew up loving singing and church. She graduated from St. Olaf College in Northfield, MN in 2009. She is a veteran of outdoor ministry, having worked at El Camino Pines for six summers and two years. She currently serves as the Youth Director at First Lutheran Church in Palo Alto. She's excited to learn and sing and worship together!
Click on the image below to get registration instructions!
Campfire devotions and singing Friday & Saturday nights, followed by plenty of time for games and gabbing. {% endblock %} {% block SidebarTitle %}Tentative Schedule{%endblock%} {% block SidebarText %}
Friday
7:00pm Check-in
8:00pm Campfire/Devotions
9:00pm Fellowship
Saturday
8:30am Breakfast
9:30am Check-in
10:00am Welcome
10:30am Prayer & Praise/Speaker
12:30pm Lunch
1:30pm Breakout Sessions
3:30pm Activity Options -
Trading Post
5:00pm Prayer & Praise/Speaker
6:30pm Dinner
7:45pm Campfire/Devotions
8:30pm Fellowship
Sunday
8:30am Breakfast
9:30am Devotions
10:00am Depart
{{register_button}}
{{ macros.render_prog_pricing() }}


“No Time To Die” Will Be Daniel Craig’s Final James Bond Film
by Violet JohnsonDaniel Craig is officially 00-Done with being James Bond.
In a chat with Stephen Colbert on Friday’s episode of “The Late Show”, the actor confirmed that the upcoming “No Time To Die” is his last outing as the fictional British spy James Bond.
Are you done with Bond?” Colbert asked.
“Yes,” replied Craig.
“You’re done with Bond?” repeated Colbert.
“It’s done,” said Craig.
Craig debuted as Bond in 2006′s “Casino Royale” and also portrayed the character in 2008’s “Quantum of Solace,” 2012’s “Skyfall” and 2015’s “Spectre.”
The longest-serving Bond had, however, initially been hesitant to reprise his role in the 25th installment of the franchise, which is slated for an April 2020 release.
Craig told German website Express earlier this week that “someone else needs to have a go,” reported Esquire magazine.

Elsewhere on “The Late Show,” Craig (who was promoting his new movie “Knives Out”) taught Colbert how to speak with a Welsh accent.


[§201H-126] Benefits of program not exclusive. Nothing in this subpart shall be construed to prohibit, with respect to an eligible project, the operation of the rental assistance program in conjunction with other state or federal programs including the state rent supplements provided for in part VIII of chapter 356D. [L 2006, c 180, pt of §4]


sighax and boot9strap
Presentation by SciresM
A Short Summary
At 33c3, we learned the following from derrek:
- boot9 has a broken RSA verification implementation.
- It's broken because the ASN.1 parser incorrectly verifies at least one of the length fields.
- We can't perform sighax ourselves, because we can't get the details required from boot9's parser, because we don't have boot9.
What can we do with that?
A Blast from the Past
- Nintendo loves reusing concepts and code. Firmware has to parse RSA signatures, too.
- Initial examinations of NATIVE_FIRM, TWL_FIRM and AGB_FIRM look not vulnerable – though the ASN.1 parser looks very similar to what was described at 33c3, there are stringent padding checks in place.
- Checks against the sighax vulnerability are present in firmware as early as 0.14 (1.0.0-0), from January 2011.
- The checks aren't present in firmware earlier than that, including 0.13, which is factory firmware.
- Factory firmware is vulnerable to sighax.
Factory firmware RSA verification
The checks were added in firmware 1.0.0-0.
This means Nintendo knew about the vulnerability when making the New 3DS, and did not fix it.
Exploiting a parser, blindly
- The parser in factory firmware isn't exactly the same as the one in boot9, as learned when a "perfect" signature for factory firmware's parser failed on boot9. What's next?
- Testing a signature that overflows the factory firmware parser into data-aborting causes the console to show a black screen instead of bootrom error. This means we can crash the bootrom.
- On factory firmware, the "calculated" hash is on the stack near the signature being parsed. This is probably the case for boot9.
Exploiting a parser, blindly
- There are only 128 possible locations, relative to the signature, that can be brute forced in reasonable time. It has to be one of those.
- Sure enough, brute forcing signatures for each location shows the "calculated" hash is immediately after the signature on the stack. So we have sighax.
- For those interested in the (complex) math behind optimizing the sighax brute-force, Myria made an additional presentation.
The bad ASN.1 Parser
How it looks to the parser
So we have sighax. Now what?
We dump the bootroms, of course!
Exfiltrating boot9
- So we can fakesign our own FIRMs.
- Meaning we can copy our payload almost anywhere.
- boot9 has a blacklist of ranges... but we know it's not perfect.
- From 33c3, only the boot9 data regions are blacklisted.
- Can we find a region that isn't a boot9 data region but is still dangerous?
ARM9 Memory Map
| Region | Address | Size | Description |
| 0 | 0x20000000 | 0x08000000 | FCRAM |
| 1 | 0x10000000 | 0x10000000 | I/O Registers |
| 2 | 0x08000000 | 0x00100000 | ARM9-only internal memory ("arm9mem") |
| 3 | 0x08000000 | 0x00000400 | arm9mem (different permissions, details irrelevant) |
| 4 | 0xFFF00000 | 0x00004000 | Data tightly-coupled memory (DTCM) |
| 5 | 0x07FF8000 | 0x00008000 | Instruction tightly-coupled memory (ITCM) |
| 6 | 0xFFFF0000 | 0x00010000 | Boot9 |
| 7 | 0x1FFFE000 | 0x00000800 | AXI WRAM |
NDMA
- We can copy anything almost anywhere.
- This includes I/O registers.
- The NDMA engine is a memory mapped I/O register. This means we can copy data over the NDMA registers, triggering DMA, letting us copy anywhere.
Oh.
NDMA Parameters
For an NDMA copy request, we need to set:
- the global control register to
high priority
,
- the source address (
0xFFFF8000
, the address of the protected boot9),
- the destination address (any safe place in arm9mem will do),
- how much data to transfer (32 KiB, or 8192 words)
- some timing data
- how much to transfer per cycle
- And now we just copy that to
0x10002000
for a copy request!
Works for me, too
SHA-512 (boot9):
5addf30ecb46c624fa97bf1e83303ce5
d36fabb4525c08c966cbaf0a397fe4c3
3d8a4ad17fd0f4f509f547947779e1b2
db32abc0471e785cacb3e2dde9b8c492
boot9strap: Reliable boot9/boot11 code execution
- We can copy data anywhere during firm loading.
- Including:
- the exception vectors (using NDMA to bypass the blacklist), and
- NULL.
- That's all we need for a data abort, isn't it?
- It is!
boot9strap: Big picture idea
- Section 0: Copy an ARM11 payload into AXI WRAM.
- Section 1: Copy an ARM9 payload into arm9mem.
- Section 2: Copy a payload over the NDMA registers that overwrites the data abort vector in arm9mem.
- Section 3: Load anything to NULL.
- ???
- Profit!
boot9strap: Technical implementation
- Getting execution during boot9 via data abort is really cool. But it'd also be nice to get execution under boot11. How can we?
- boot9 dereferences some function pointers from DTCM, and calls them if they aren't NULL (they normally are).
- Our poisoned data abort vector can overwrite two of these to point at our code, then return to boot9 and let it resume normally.
boot9strap: Technical implementation
- Later on, boot9 will call the first of those function pointers (
0xFFF00058
). This will wait for boot11 to finish a task by watching axiwram, then overwrite a function pointer (0x1FFE802C
) it will call later.
- Immediately before lockout, boot9/boot11 will each dereference function pointers we have poisoned (
0xFFF0005C
, 0x1FFE802C
respectively).
- We can execute arbitrary code before bootrom lockout under both boot9 and boot11.
- Bootrom dumps for all!
Works for me, 2: Electric Boogaloo
SHA-512 (boot11):
c3f5044321f1ec5a33e09dd021e1117b
1b663e37673222944a06b119ea70af92
fc6de8547129582131fb9f8896edef7e
9a8ef77295c627e0f1cb360b15b533b4
Bonus fail
- Upon disassembling boot9, we notice another huge flaw in the bootrom that wasn't mentioned at 33c3.
- Before trying to boot from NAND, the bootrom checks to see if a key combination (Start + Select + X) is being held, and whether the shell is closed.
- If so, it tries to boot from an inserted NTR (Nintendo DS) cartridge.

- Nintendo tried to make it not possible to abuse by requiring the shell to be closed...
- But you can just use a magnet.
- This, like sighax, is also not fixable.
- The NTR cartridge was likely meant to be used for either the factory setup or as a means of recovering bricked NANDs. However, we'll never know for sure.


@*
* Copyright 2023 HM Revenue & Customs
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*@
@import config.ApplicationConfig
@import views.html.layout
@this(layout: layout)
@(title: String,
userLoggedIn: Boolean = true,
supportLinkEnabled: Boolean = true,
displaySignOut: Boolean = true,
service: String = "",
pageScripts: Option[Html] = None,
sidebarLinks: Option[Html] = None,
sidebarClass: Option[String] = None,
)(mainContent: Html)(implicit request: Request[_], messages: Messages, appConfig: ApplicationConfig)
@linkElement = {
@pageScripts
}
@layout(
pageTitle = Some(title),
scripts = Some(linkElement),
displaySignOut = displaySignOut,
service = service
)(mainContent)


Lucas Kwerneland
About
Portfolio
Contact
Portfolio
Hangman
RPG Game
Trivia Game
Rutgers Info Widget
Rock Paper Scissors
Connect With Me