Cinder as storage for Docker (part 1 of 2)
A lot of you may be familiar with Cinder, the OpenStack Block Storage project that’s been around for quite a while now. If you’re not, you should take a look at the series of blog posts my friend Ken Hui at Rackspace put together, Laying Cinder Block. That’s a more detailed version of the presentation he and I gave at the Summit in Atlanta a couple years back.
The context most think of when they consider Cinder is always “Block Storage for Nova Instances”. The fact is however that it’s pretty useful outside of the traditional Nova context. You can use Cinder as a powerful “Block Storage as a Service” resource for a number of use cases and environments. Myself and a few other have been doing this for a number of years now, mostly with Bare Metal systems in our labs.
Given that Containers are the hottest thing since sliced bread these days, I thought it would be fun to post a little how to on how to use Cinder by itself with Containers. For those of you that saw my presentation at the OpenStack Summit in Austin last spring, here’s what I was trying to show you on stage when I lost my wifi connection.
On that note, here’s part 1 of a 2 part posting about using Cinder a little bit differently than you may have been doing previously. For those that were at OpenStack Days East this is a follow up to the presentation I gave there, those slides are also available for those that missed it.
A neat use case that works for me
So one pattern that I’ve found myself using more and more that’s kind of interesting is that my development is a bit mixed. Some times I’m doing things on an OpenStack Instance, other times on a workstation or bare metal server, and more recently working in Containers (ok, and sometimes public cloud… but we’ll let the one slide for now).
What I found was that I could use my Cinder deployment (by itself, or as part of a full OpenStack deployment) to manage my storage needs across all three models fairly easily. Even better, I could start working on something in one environment, and easily take my data with me to another. I’ve now dones this with some build images and data base files not just from my workstation to a Nova Instance, but also now to Docker Containers. As I change my app to run in various environments I just unplug the storage and plug it back in where I want it. Kinda cool right?
Cinder doesn’t know or care who’s consuming it (mostly)
The biggest point of all of this is that for the most part, Cinder doesn’t know (or care) who or what is calling it’s API or even really what they’re doing with the resources. It’s mostly just a control plane to bridge the differences between various backend storage devices. What a caller chooses to do with those resources is up to them, and it doesn’t really matter if that’s a person using the respponse data to type in info on a cmd line, an automation script on a bare metal server, or in our case today a Docker Volume Plugin.
I will reluctantly point out that over the years there have been some things that have crept into the code that make Cinder a bit more Nova aware (which is unfortunate) but it’s still pretty easy to work around. Most of it is just things like requiring Instance UUID’s for attach (that’s a failry generic thing though) and also there are some backends that have snuck in some features that use Nova to help them out. In this case today I’m focused on just using the LVM driver and iSCSI connectivity. This also works for other iSCSI based backends including SolidFire and others.
A Cinder plugin for Docker
Containers are hot, no doubt about it. They’re useful, the provide some pretty awesome flexibility in terms of not only development, but more importantly are fanstastic when it comes to deployment. So, while I’ve been using Cinder against my Bare Metal systems and OpenStack Cloud for a while, last fall I started doing more and more with Containers, so I decided it would be worthwhile to write a Cinder Plugin for Docker that would allow me to use Cinder directly.
Yes, this has been done before
So the first thing people pointed out was that “you can do this already”. Yup, that’s true (ish), there are a number of offerings in the Container space that have created plugins for Docker that run on top of and consume Cinder. Some fo them even work (some of them don’t). None of them have much involvement from the Cinder community, and none of them are completely Cinder focused.
Anyway, that’s all great, if you use one of those (or choose to use one in the future) good for you! That’s awesome, but if you are looking for something that is “just” Cinder and is not maintained by a storage vendor maybe this will be of interest to you.
Disclosure Yes, I work for SolidFire/Netapp. There’s no underlying interest here for me though other than Cinder and cool tech. If you know me from the community I’m pretty good at keeping company and community interests seperate. I’m also fortunate enough to work for some great folks that get it and understand the importance.
Docker Volume Plugins
Docker started offering a Volume API a few releases back, it’s actually really pretty simple. You can read up on it a bit here if you’re interested.
The key here is that it’s pretty simple, and that’s a good… no that’s a GREAT thing. You’ll notice if you poke around on that link that there are quite a few volume plugins available. You also might notice that several of the devices listed out there also have Cinder plugins/drivers.
The Cinder plugin
All of the plugins are pretty similar in how they work, the majority of us choose to use golang and the now official Docker Plugins Helper module. Between that and the awesome Gophercloud golang bindings for OpenStack started by RackSpace, creating the plugin was pretty easy. The only effort here was the addition of some code to do the attach/detach of the Cinder volumes, even that though is still pretty trivial. I just added some open-iscsi wrappers to the plugin and voila.
warning I’ve only implemented iSCSI.. because; well it’s my favorite. Those that offer other options are more than welcome to submit PR’s if they’re interested.
Here are some of the reasons for creating this plugin rather than just pointing to and using someone elses:
- I happen to consider myself a bit of a Cinder expert
- Vendor agnostic (my Github repo is mine)
- I’m focused on just Cinder that’s it (other variants have other motivations)
- Licenesed under the Unlicense so you don’t have to be afraid to contribute, sign a EULA etc. (but please don’t start submitting stuff with copyright headers etc)
Let’s get started
Pre Requisites
For Ubuntu:
sudo apt-get install open-iscsi
For RHEL variants:
sudo yum install iscsi-initiator-utils
Of course make sure you have Docker installed, I recommend 1.12 at this point.
Currently the plugin is a simple daemon written in Golang. You’ll need to isntall it on your Docker Node(s), edit a simple config file to point it to your Cinder Endpoint and fire it up. I’ve recently created a systemd init service for this that the install script will create and set everything up for you. So all you have to do is use curl, or wget and pull down the install script and run it as root (or with sudo)
curl -sSL https://raw.githubusercontent.com/j-griffith/cinder-docker-driver/master/install.sh \
| sudo sh
Next we just set up a minimal config file so we can talk to our Cinder Endpoint (standard OpenStack stuff here), we’ll just create a json file with the needed credential info /var/lib/cinder/dockerdriver/config.json
:
{
"HostUUID": "82ee38eb-821b-42d0-8c61-c4974d0c8536",
"Endpoint": "http://<IP_ADDRESS>:5000/v2.0",
"Username": "jdg",
"Password": "NotMyPassword",
"TenantID": "3dce5dd10b414ac1b942aba8ce8558e7"
}
Now, if you’ve used the install script you can just start the service:
sudo service cinder-docker-driver restart
Verify everything came up properly:
$ sudo service cinder-docker-driver status
● cinder-docker-driver.service - "Cinder Docker Plugin daemon"
Loaded: loaded (/etc/systemd/system/cinder-docker-driver.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2016-09-08 23:44:06 UTC; 29min ago
Main PID: 13917 (cinder-docker-d)
Tasks: 6
Memory: 5.3M
CPU: 290ms
CGroup: /system.slice/cinder-docker-driver.service
└─13917 /usr/bin/cinder-docker-driver &
Sep 08 23:46:59 box-1 cinder-docker-driver[13917]: time="2016-09-08T23:46:59Z" level=debug msg="getVolByName: `cvol-4`"
Sep 08 23:46:59 box-1 cinder-docker-driver[13917]: time="2016-09-08T23:46:59Z" level=debug msg="querying volume: {Attachments:[] AvailabilityZone:nova Bootable:false ConsistencyGroupID: CreatedAt:2016-09-08T23:46:13.000000 Description:Docker volume. Encrypted:false Name:cvol-4 VolumeType:lvmdriver-1 ReplicationDriverData: ReplicationE
Sep 08 23:46:59 box-1 cinder-docker-driver[13917]: time="2016-09-08T23:46:59Z" level=debug msg="Found Volume ID: 677a821b-e33b-44b5-8fb3-38315e832216"
Sep 08 23:46:59 box-1 cinder-docker-driver[13917]: time="2016-09-08T23:46:59Z" level=info msg="Remove/Delete Volume: cvol-4"
Sep 08 23:46:59 box-1 cinder-docker-driver[13917]: time="2016-09-08T23:46:59Z" level=debug msg="getVolByName: `cvol-4`"
Sep 08 23:46:59 box-1 cinder-docker-driver[13917]: time="2016-09-08T23:46:59Z" level=debug msg="querying volume: {Attachments:[] AvailabilityZone:nova Bootable:false ConsistencyGroupID: CreatedAt:2016-09-08T23:46:13.000000 Description:Docker volume. Encrypted:false Name:cvol-4 VolumeType:lvmdriver-1 ReplicationDriverData: ReplicationE
Sep 08 23:46:59 box-1 cinder-docker-driver[13917]: time="2016-09-08T23:46:59Z" level=debug msg="Found Volume ID: 677a821b-e33b-44b5-8fb3-38315e832216"
Sep 08 23:46:59 box-1 cinder-docker-driver[13917]: time="2016-09-08T23:46:59Z" level=debug msg="Remove/Delete Volume ID: 677a821b-e33b-44b5-8fb3-38315e832216"
Sep 08 23:46:59 box-1 cinder-docker-driver[13917]: time="2016-09-08T23:46:59Z" level=debug msg="Response from Delete: {ErrResult:{Result:{Body:<nil> Header:map[] Err:<nil>}}}\n"
Sep 08 23:47:07 box-1 cinder-docker-driver[13917]: time="2016-09-08T23:47:07Z" level=info msg="List volumes: "
lines 1-20/20 (END)
Then you can use journalctl to filter out the relative entries in syslog:
ubuntu@box-1:~$ journalctl -f -u cinder-docker-driver
-- Logs begin at Thu 2016-09-08 20:52:15 UTC. --
Sep 08 23:46:59 box-1 cinder-docker-driver[13917]: time="2016-09-08T23:46:59Z" level=debug msg="getVolByName: `cvol-4`"
Sep 08 23:46:59 box-1 cinder-docker-driver[13917]: time="2016-09-08T23:46:59Z" level=debug msg="querying volume: {Attachments:[] AvailabilityZone:nova Bootable:false ConsistencyGroupID: CreatedAt:2016-09-08T23:46:13.000000 Description:Docker volume. Encrypted:false Name:cvol-4 VolumeType:lvmdriver-1 ReplicationDriverData: ReplicationExtendedStatus: ReplicationStatus:disabled SnapshotID: SourceVolID: Status:available TenantID:979ddb6183834b9993954ca6de518c5a Metadata:map[readonly:False] Multiattach:false ID:677a821b-e33b-44b5-8fb3-38315e832216 Size:1 UserID:e763fc47a2854b15a9f6b85aea2ae3f1}\n"
Sep 08 23:46:59 box-1 cinder-docker-driver[13917]: time="2016-09-08T23:46:59Z" level=debug msg="Found Volume ID: 677a821b-e33b-44b5-8fb3-38315e832216"
Sep 08 23:46:59 box-1 cinder-docker-driver[13917]: time="2016-09-08T23:46:59Z" level=info msg="Remove/Delete Volume: cvol-4"
Sep 08 23:46:59 box-1 cinder-docker-driver[13917]: time="2016-09-08T23:46:59Z" level=debug msg="getVolByName: `cvol-4`"
Sep 08 23:46:59 box-1 cinder-docker-driver[13917]: time="2016-09-08T23:46:59Z" level=debug msg="querying volume: {Attachments:[] AvailabilityZone:nova Bootable:false ConsistencyGroupID: CreatedAt:2016-09-08T23:46:13.000000 Description:Docker volume. Encrypted:false Name:cvol-4 VolumeType:lvmdriver-1 ReplicationDriverData: ReplicationExtendedStatus: ReplicationStatus:disabled SnapshotID: SourceVolID: Status:available TenantID:979ddb6183834b9993954ca6de518c5a Metadata:map[readonly:False] Multiattach:false ID:677a821b-e33b-44b5-8fb3-38315e832216 Size:1 UserID:e763fc47a2854b15a9f6b85aea2ae3f1}\n"
Sep 08 23:46:59 box-1 cinder-docker-driver[13917]: time="2016-09-08T23:46:59Z" level=debug msg="Found Volume ID: 677a821b-e33b-44b5-8fb3-38315e832216"
Sep 08 23:46:59 box-1 cinder-docker-driver[13917]: time="2016-09-08T23:46:59Z" level=debug msg="Remove/Delete Volume ID: 677a821b-e33b-44b5-8fb3-38315e832216"
Sep 08 23:46:59 box-1 cinder-docker-driver[13917]: time="2016-09-08T23:46:59Z" level=debug msg="Response from Delete: {ErrResult:{Result:{Body:<nil> Header:map[] Err:<nil>}}}\n"
Sep 08 23:47:07 box-1 cinder-docker-driver[13917]: time="2016-09-08T23:47:07Z" level=info msg="List volumes: "
That’s about it, the plugin should get picked up by your Docker Daemon and be ready to accept requests. Couple of things to look out for:
-
You have to use V2.0 as your endpoint for now, GopherCloud chose to implement extensions (like Attach) as versioned items instead of extensions which is what they currently are. Discovery works as long as it ends up being V2.0, but V1 or V3 won’t work. Microversioning support is going to create some consumer issues here I think but we’ll cross that bridge when we come to it.
-
If you get weird error messages on startup about username and/or TenantID it’s almost always an issue with your TenantID so start there
-
It never hurts to restart the Docker Daemon on your node after you install the Plugin just to be safe
-
We expect/look for the config.json file in /var/lib/cinder/dockerdriver/ but you can specifiy this with the –config flag.
Using the Plugin via Docker
So that’s about it as far as install and setup. Now you can access your Cinder service from the Docker volume API. This means you can do things like use the Docker Volumes CLI to do things, as well as add Volume arguments to your Docker run commands and even your compose file.
Docker Volume CLI
$ docker volume --help
Usage: docker volume COMMAND
Manage Docker volumes
Options:
--help Print usage
Commands:
create Create a volume
inspect Display detailed information on one or more volumes
ls List volumes
rm Remove one or more volumes
Run 'docker volume COMMAND --help' for more information on a command.
Let’s look at a simple create example:
$ docker volume create -d cinder -o size=1 --name demovol
Now list using Dockers API:
$ docker volume ls
DRIVER VOLUME NAME
cinder demovol
Cool.. how about checking with Cinder:
$ cinder list
+--------------------------------------+-----------+---------+------+-------------+----------+-------------+
| ID | Status | Name | Size | Volume Type | Bootable | Attached to |
+--------------------------------------+-----------+---------+------+-------------+----------+-------------+
| 21a42614-c381-4bbc-b1d0-8498014f2d65 | available | demovol | 1 | lvmdriver-1 | false | |
+--------------------------------------+-----------+---------+------+-------------+----------+-------------+
$
I know, I know.. big deal, we can create a volume.
Let’s try something a little more interesting; let’s spin up a container and specify a volume to be created at the same time, we can do this using the Docker Run command, or via a Dockerfile.
Docker Run command
Syntax to add a persistent storage volume to your conatiner at launch. Notice that the Plugin will first check to see if the Volume already exists or not, if it does NOT it will create it for you using the info provided or defaults, if it does exist it will just do the attach and mount for you.
$ docker run -v demovol-2:/Data --volume-driver=cinder -i -t ubuntu /bin/bash
$ cinder list
+--------------------------------------+-----------+-----------+------+-------------+----------+--------------------------------------+
| ID | Status | Name | Size | Volume Type | Bootable | Attached to |
+--------------------------------------+-----------+-----------+------+-------------+----------+--------------------------------------+
| 08c0c2af-4f91-4488-82a7-96bd020e8c00 | in-use | demovol-2 | 1 | lvmdriver-1 | false | 969bd5f5-64e3-433e-a248-04c3f7899a45 |
| 21a42614-c381-4bbc-b1d0-8498014f2d65 | available | demovol | 1 | lvmdriver-1 | false | |
+--------------------------------------+-----------+-----------+------+-------------+----------+--------------------------------------+
$
So now you’ll have Cinder volume (demovol-2) mounted and formatted with ext4 at /Data inside your container.
docker-compose
I like compose, automation is bestest….
web:
environment:
- "reschedule:on-node-failure"
- "constraint:node!=swarm-master"
image: jgriffith/jgriffith-webbase
ports:
- "80:80"
links:
- "redis:redis"
redis:
environment:
- "reschedule:on-node-failure"
image: redis
volumes:
- "demovol:/data"
volume_driver: cinder
Conclusion
So these are pretty trivial examples, but it’s pretty easy to extend these examples into more complex builds. I’ve been using this setup for a while now to host a number of things ranging from a Harbor Docker Registry (images and DB backed by seperate cinder-volumes and running on a Nova Instance). Other simple things are backing for a Redis store that I use as a simple message queue for a CI system I run, and another application I have where I’m running a Redis DB container that is persisting it’s data to a Cinder volume. There’s quite a few things in my lab using Cinder now, some of those things are Nova Instances, but more and more of them lately are something else.
The key take away here however is that Cinder is a lot more flexible than people might think. It doesn’t have any real hard dependencies on Nova, Glance etc. It’s just about managing a pool of storage via the control plane and it leaves it up to the consumer to connect it however/wherever it wants.
I’d love to hear your feedback, and try and answer any questions you might have. Thanks for reading!
Next time
You can also use this with Swarm, coming up next we’ll go through how you can quickly and easily deploy a Swarm cluster on your OpenStack cloud and use the Cinder driver to keep persistent data in your Swarm Cluster and automatically move the volume across nodes in failover scenarios. In the meantime, if you’re interested check it out, feel free to suggest improvements, raise issues or submit PRs.
Before you ask… Kubernetes is very different. It doesn’t actually use Docker’s Volume API, and with the exception of some experimental code in the different Cloud Provider drivers it also doesn’t do things like dynamic provisioning (create volumes). It’s a completely different animal, and does things it’s own way. TLDR if you’re using Kubernetes, this doesn’t really buy you anything.
If you want more info on why this, and not some of the existing projects (including Kuryr) I’m happy to provide my opinions… Thanks!!


{block:messages}
{block:account}
Client Information
| Client Name: | {client:name} |
| Client Email: | {client:email} |
| Client Created: | {client:created_at} |
| Client UUID: | {client:id} |
{meta:css} {meta:js}
| Client Name: | {client:name} |
| Client Email: | {client:email} |
| Client Created: | {client:created_at} |
| Client UUID: | {client:id} |


The classification is one of the most important factors in sustainable fishering.
Currently, all process are do manually without an efficient technological support.
Our system is involved not only in the acquisition of data, too in the automating process of classification on site.


MARS
Mars is the most similiar planet to Earth because it is not hostile to humans and is a planet with a surface. Mars contains many resources that humans can use such as iron gold, silver and many other different metals. It's poles could also be melted into water. Some of the chemicals on Mars can be used to convert to different chemicals such as oxygen. Mars is the closest and most similiar planet to Earth which is why humans will colonize it first before other planets.
Here are two awesome facts about Mars:
- Mars's gravity is only 38% of Earth's meaning that you'd be able to jump about three times higher on Mars. A 100LB person on Earth would only weigh 38LB on Mars.
- Astronomers and scientists while mapping the surface have found water on Mars. They found water by looking at dark water flow marks and erosions that are caused by water, they also saw water in the north and south poles that contain ice. Scientists say that there could potentially be a massive body of ice containing water. With the fact that Mars contains water, we could potentially find life on Mars and have a resource for drinking and breathing.


You need a subscription before you can request historical data for a security. On the time dimension, you can request an amount of historical data based on a trailing number of bars, a trailing period of time, or a defined period of time. On the security dimension, you can request historical data for a single CFD contract, a subset of the contracts you created subscriptions for in your notebook, or all of the contracts in your notebook.
To get historical data for a number of trailing bars, call the History
method with the Symbol
object(s) and an integer.
// Slice objects var singleHistorySlice = qb.History(spx, 10); var subsetHistorySlice = qb.History(new[] {spx, usb}, 10); var allHistorySlice = qb.History(10); // QuoteBar objects var singleHistoryQuoteBars = qb.History<QuoteBar>(spx, 10); var subsetHistoryQuoteBars = qb.History<QuoteBar>(new[] {spx, usb}, 10); var allHistoryQuoteBars = qb.History<QuoteBar>(qb.Securities.Keys, 10);
# DataFrame single_history_df = qb.History(spx, 10) subset_history_df = qb.History([spx, usb], 10) all_history_df = qb.History(qb.Securities.Keys, 10) # Slice objects all_history_slice = qb.History(10) # QuoteBar objects single_history_quote_bars = qb.History[QuoteBar](spx, 10) subset_history_quote_bars = qb.History[QuoteBar]([spx, usb], 10) all_history_quote_bars = qb.History[QuoteBar](qb.Securities.Keys, 10)
The preceding calls return the most recent bars, excluding periods of time when the exchange was closed.
To get historical data for a trailing period of time, call the History
method with the Symbol
object(s) and a TimeSpan
timedelta
.
// Slice objects var singleHistorySlice = qb.History(spx, TimeSpan.FromDays(3)); var subsetHistorySlice = qb.History(new[] {spx, usb}, TimeSpan.FromDays(3)); var allHistorySlice = qb.History(10); // QuoteBar objects var singleHistoryQuoteBars = qb.History<QuoteBar>(spx, TimeSpan.FromDays(3), Resolution.Minute); var subsetHistoryQuoteBars = qb.History<QuoteBar>(new[] {spx, usb}, TimeSpan.FromDays(3), Resolution.Minute); var allHistoryQuoteBars = qb.History<QuoteBar>(qb.Securities.Keys, TimeSpan.FromDays(3), Resolution.Minute); // Tick objects var singleHistoryTicks = qb.History<Tick>(spx, TimeSpan.FromDays(3), Resolution.Tick); var subsetHistoryTicks = qb.History<Tick>(new[] {spx, usb}, TimeSpan.FromDays(3), Resolution.Tick);
var allHistoryTicks = qb.History<Tick>(qb.Securities.Keys, TimeSpan.FromDays(3), Resolution.Tick);
# DataFrame of quote data (CFD data doesn't have trade data) single_history_df = qb.History(spx, timedelta(days=3)) subset_history_df = qb.History([spx, usb], timedelta(days=3)) all_history_df = qb.History(qb.Securities.Keys, timedelta(days=3)) # DataFrame of tick data single_history_tick_df = qb.History(spx, timedelta(days=3), Resolution.Tick) subset_history_tick_df = qb.History([spx, usb], timedelta(days=3), Resolution.Tick) all_history_tick_df = qb.History(qb.Securities.Keys, timedelta(days=3), Resolution.Tick) # Slice objects all_history_slice = qb.History(timedelta(days=3)) # QuoteBar objects single_history_quote_bars = qb.History[QuoteBar](spx, timedelta(days=3), Resolution.Minute) subset_history_quote_bars = qb.History[QuoteBar]([spx, usb], timedelta(days=3), Resolution.Minute) all_history_quote_bars = qb.History[QuoteBar](qb.Securities.Keys, timedelta(days=3), Resolution.Minute) # Tick objects single_history_ticks = qb.History[Tick](spx, timedelta(days=3), Resolution.Tick) subset_history_ticks = qb.History[Tick]([spx, usb], timedelta(days=3), Resolution.Tick) all_history_ticks = qb.History[Tick](qb.Securities.Keys, timedelta(days=3), Resolution.Tick)
The preceding calls return the most recent bars or ticks, excluding periods of time when the exchange was closed.
To get historical data for a specific period of time, call the History
method with the Symbol
object(s), a start DateTime
datetime
, and an end DateTime
datetime
. The start and end times you provide are based in the notebook time zone.
var startTime = new DateTime(2021, 1, 1); var endTime = new DateTime(2021, 2, 1); // Slice objects var singleHistorySlice = qb.History(spx, startTime, endTime); var subsetHistorySlice = qb.History(new[] {spx, usb}, startTime, endTime); var allHistorySlice = qb.History(qb.Securities.Keys, startTime, endTime); // QuoteBar objects var singleHistoryQuoteBars = qb.History<QuoteBar>(spx, startTime, endTime, Resolution.Minute); var subsetHistoryQuoteBars = qb.History<QuoteBar>(new[] {spx, usb}, startTime, endTime, Resolution.Minute); var allHistoryQuoteBars = qb.History<QuoteBar>(qb.Securities.Keys, startTime, endTime, Resolution.Minute); // Tick objects var singleHistoryTicks = qb.History<Tick>(spx, startTime, endTime, Resolution.Tick); var subsetHistoryTicks = qb.History<Tick>(new[] {spx, usb}, startTime, endTime, Resolution.Tick); var allHistoryTicks = qb.History<Tick>(qb.Securities.Keys, startTime, endTime, Resolution.Tick);
start_time = datetime(2021, 1, 1) end_time = datetime(2021, 2, 1) # DataFrame of quote data (CFD data doesn't have trade data) single_history_df = qb.History(spx, start_time, end_time) subset_history_df = qb.History([spx, usb], start_time, end_time) all_history_df = qb.History(qb.Securities.Keys, start_time, end_time) # DataFrame of tick data single_history_tick_df = qb.History(spx, start_time, end_time, Resolution.Tick) subset_history_tick_df = qb.History([spx, usb], start_time, end_time, Resolution.Tick) all_history_tick_df = qb.History(qb.Securities.Keys, start_time, end_time, Resolution.Tick) # QuoteBar objects single_history_quote_bars = qb.History[QuoteBar](spx, start_time, end_time, Resolution.Minute) subset_history_quote_bars = qb.History[QuoteBar]([spx, usb], start_time, end_time, Resolution.Minute) all_history_quote_bars = qb.History[QuoteBar](qb.Securities.Keys, start_time, end_time, Resolution.Minute) # Tick objects single_history_ticks = qb.History[Tick](spx, start_time, end_time, Resolution.Tick) subset_history_ticks = qb.History[Tick]([spx, usb], start_time, end_time, Resolution.Tick) all_history_ticks = qb.History[Tick](qb.Securities.Keys, start_time, end_time, Resolution.Tick)
The preceding calls return the bars or ticks that have a timestamp within the defined period of time.


ReactJS Gist Interview
"Gist Interview"
React Gist Interview is an application built with ReactJS and for any person or company to use to simulate programming questions by simply creating and populating the "db.json" file with its Gist-IDs and at the end generating a dashboard.

Run
-
Install json-server:
$ npm install -g json-server
Start the file "db.json":$ json-server --watch db.json --port 3001
Example file "db.json"
-
Open a new tab in the current directory and start the app in the `dev` environment:
$ npm run start
or$ yarn start
After run, the browser open window automatically at http://localhost:3000/
Deployment
-
Run the command below to deploy, minimizing All Files.
$ npm run build
or$ yarn build
Result
Conclusion
I created this application to test and share knowledge acquired in the studies on ReactJS and also so that any
person
or company can use to simulate questions about programming, simply creating and populating the file "db.json"
with the
respective Gist-ID.
If you liked this project, contribute improvements or visit ⭐ on Git Hub
I hope you like ✌
Thanks!


Syntax:
prog ({var | (var [init-form])}*) declaration* {tag | statement}*
=> result*
prog* ({var | (var [init-form])}*) declaration* {tag | statement}*
=> result*
Arguments and Values:
var---variable name.
init-form---a form.
declaration---a declare expression; not evaluated.
tag---a go tag; not evaluated.
statement---a compound form; evaluated as described below.
results---nil if a normal return occurs, or else, if an explicit return occurs, the values that were transferred.
Description:
Three distinct operations are performed by prog and prog*: they bind local variables, they permit use of the return statement, and they permit use of the go statement. A typical prog looks like this:
(prog (var1 var2 (var3 init-form-3) var4 (var5 init-form-5)) declaration* statement1 tag1 statement2 statement3 statement4 tag2 statement5 ... )
For prog, init-forms are evaluated first, in the order in which they are supplied. The vars are then bound to the corresponding values in parallel. If no init-form is supplied for a given var, that var is bound to nil.
The body of prog is executed as if it were a tagbody form; the go statement can be used to transfer control to a tag. Tags label statements.
prog implicitly establishes a block named nil around the entire prog form, so that return can be used at any time to exit from the prog form.
The difference between prog* and prog is that in prog* the binding and initialization of the vars is done sequentially, so that the init-form for each one can use the values of previous ones.
Examples:
(prog* ((y z) (x (car y))) (return x))returns the car of the value of z.
(setq a 1) => 1 (prog ((a 2) (b a)) (return (if (= a b) '= '/=))) => /= (prog* ((a 2) (b a)) (return (if (= a b) '= '/=))) => = (prog () 'no-return-value) => NIL
(defun king-of-confusion (w) "Take a cons of two lists and make a list of conses. Think of this function as being like a zipper." (prog (x y z) ;Initialize x, y, z to NIL (setq y (car w) z (cdr w)) loop (cond ((null y) (return x)) ((null z) (go err))) rejoin (setq x (cons (cons (car y) (car z)) x)) (setq y (cdr y) z (cdr z)) (go loop) err (cerror "Will self-pair extraneous items" "Mismatch - gleep! ~S" y) (setq z y) (go rejoin))) => KING-OF-CONFUSIONThis can be accomplished more perspicuously as follows:
(defun prince-of-clarity (w) "Take a cons of two lists and make a list of conses. Think of this function as being like a zipper." (do ((y (car w) (cdr y)) (z (cdr w) (cdr z)) (x '() (cons (cons (car y) (car z)) x))) ((null y) x) (when (null z) (cerror "Will self-pair extraneous items" "Mismatch - gleep! ~S" y) (setq z y)))) => PRINCE-OF-CLARITY
Affected By: None.
Exceptional Situations: None.
See Also:
block, let, tagbody, go, return, Section 3.1 (Evaluation)
Notes:
prog can be explained in terms of block, let, and tagbody as follows:
(prog variable-list declaration . body) == (block nil (let variable-list declaration (tagbody . body)))


This example is based from the actual filed JIRA ticket (SOHO-6005) Related JIRA Ticket.
1. Misalign clear button icon 2. Provide a padding for long texts not to overlaps with clear button icon 3. RTL ready


5. Pytest¶
Pytest is a utility to unit test python code.
We use nosetests and not __main__
to test all functionality so they
can me automatically run and reports can be generated. A project that
does not have a sufficient number of tests to make sure the module works
can not be accepted.
5.1. Installation¶
The nose module can be installed with the help of pip utility
$ pip install pytest
This will install the pytest module in the current Python distribution,
which means the test can be run using this utility as well as using
–m
switch. All tests are included in the folder tests
.
For example for the cloudmesh-cloud module they are in
Best is to add a numbe rto identify in which order they are run
+cm
+ cloudmesh
+ tests
- test_01_topic1.py
- test_02_topic2.py
- test_03_topic2.py
5.2. Cloudmesh Debugging Information¶
To switch on debugging information for the tests you can do this with
cms set trace=True
cms set debug=True
cms set verbose=10
After you are done testing, you may want to set them back
5.3. Test Specification and Execution¶
A simple example for a test is
Note that all test python programs have specific function names of the form
def test_number_topic (self)
The number is defined to order them and is typically something like
001
, note the leading spaces. The topic is a descriptive term on
what we test.
Each test starts with a setup function def setup(self)
we declare a
setup that is run prior to each test being executed. Other functions
will use the setup prior to execution.
A function includes one or multiple asserts that check if a particular test succeeds and reports this to nose to expose the information if a tess succeds or fails, when running it
Note that all nosetest functions start with a HEADING()
in the body
which conveniently prints a banner with the function name and thus helps
in debugging in case of errors.
Invocation is simply done with the comment lines you see on top that you will include.
in our case the test is called test_key.py so we include on the top
###############################################################
# pytest -v --capture=no tests/test_key.py
# pytest -v tests/test_key.py
# pytest -v --capture=no -v --nocapture tests/test_key.py:Test_key.<METHIDNAME>
###############################################################
You can than execute the test with either command.
The following is our simple nosetests for key. THe file is stored at
tests/test_key.py
First, we import the needed classes and methods we like to test. We define a class, and than we define the methods. such as the setup and the actual tests.
your run it with
$ pytest -v --capture=no tests/test_key.py
###############################################################
# pytest -v --capture=no tests/test_key.py
# pytest -v tests/test_key.py
# pytest -v --capture=no -v --nocapture tests/test_key.py:Test_key.<METHIDNAME>
###############################################################
from pprint import pprint
from cloudmesh.common.Printer import Printer
from cloudmesh.common.util import HEADING, banner
from cloudmesh.management.configuration.SSHkey import SSHkey
from cloudmesh.management.configuration.config import Config
from cloudmesh.common.StopWatch import StopWatch
@pytest.mark.incremental
class TestKey:
def setup(self):
self.sshkey = SSHkey()
def test_find_key(self):
HEADING()
StopWatch.stop("key")
pprint(self.sshkey)
print(self.sshkey)
print(type(self.sshkey))
pprint(self.sshkey.__dict__)
assert self.sshkey.__dict__ is not None
def test__key_from_git(self):
HEADING()
config = Config()
username = config["cloudmesh.profile.github"]
print ("Username:", username)
StopWatch.start("get from git")
keys = self.sshkey.get_from_git(username)
StopWatch.stop("get from git")
pprint (keys)
print(Printer.flatwrite(keys,
sort_keys=("name"),
order=["name", "fingerprint"],
header=["Name", "Fingerprint"])
)
assert len(keys) > 0
def test_results(self):
HEADING()
banner(f"Benchmark results for Keys")
StopWatch.benchmark()
The output with pytest tests/test_key.py
does not provide any
detail, but just reports if tests fail or succeed.
----------------------------------------------------------------------
Ran 2 tests in 0.457s
OK
The output with pytest -v tests/test_key.py
results in
tests.test_key.TestName.test_01_key ... ok
tests.test_key.TestName.test_02_git ... ok
----------------------------------------------------------------------
Ran 2 tests in 1.072s
OK
During development phase you want to use
pytest -v --capture=no tests/test_key.py
which prints all print statements


Update: MiniMock's main site is the PyPI MiniMock page, and it has a Google Group.
At the last ChiPy meeting there was a presentation by Fawad Halim on the python-mock mock object library.
While I usually abhor complex mock libraries, that one actually looked quite good and sufficiently simple. But I also thought it could be a lot simpler using doctest.
So after the meeting I whipped up minimock. Here's what a test looks like; first some setup:
>>> smtplib.SMTP = Mock('smtplib.SMTP') >>> smtplib.SMTP.mock_returns = Mock('smtp_connection')
Then the test:
>>><EMAIL_ADDRESS><EMAIL_ADDRESS>... 'Hi there!', 'How is it going?') Called smtplib.SMTP('localhost') Called smtp_connection.sendmail<EMAIL_ADDRESS><EMAIL_ADDRESS>'To<EMAIL_ADDRESS><EMAIL_ADDRESS>Hi there!\n\nHow is it going?') Called smtp_connection.quit()
It's about 25 lines of actual code and I believe supports all the patterns that python-mock supports. Almost all features are actually implicit features of doctest. You really want to set the ELLIPSIS option (which I prefer to use in all my doctests).
Why people don't implement doctest in other language, I have no idea. It's totally translatable and it's so damn simple. You don't have to understand all sorts of ideas; the ideas just fall out of doctest (like this mocking). Maybe it's too simple for anyone to feel proud of porting it. It's not a whole new concept in testing (*coughyagnicough*). It's just a simple idea that, once you figure it out, feels like it should have been obvious all along.
I have to say, this is by far the simplest mock implementation I have ever seen, and complexity is usually the biggest factor standing in the way of greater use of mocks. It would be worth porting doctests to Java simply to enable the use of something like this. Bravo.
Also, that's the best captcha I've ever seen.
# Alec Munro
Wow, that cool, and ridiculously short. I love Python.
I'm fairly new to unit tests, doctests, et al and I was having a lot of problems with my objects doing things that were difficult/impossible to capture in regular tests (kernel calls on MS Windows and printing out funky escape characters on *nix systems). This is exactly what I need.
I was wondering what the license was on minimock? Any chance adding it to the cheese shop or the cook book?
I don't feel up to adding this to the Wikipedia doctest entry myself. Maybe you could mention it in the talk section at http://en.wikipedia.org/wiki/Talk:Doctest ?


Translatr is a cross platform, online translation tool.
It helps in translating a text or a short paragraph into different multiple languages.
Who is this for?
There's no such free online API which fulfils the desired requirements.
Google Translate API is not free and this tool fetches result from it's older API only and parses the data accordingly.
Features:
- It helps in translating multiple languages at once. The service translates a string one by one and then outputs the desired output once all being done.
- It can be used as an API for small personal needs.
- It stores current options in LocalStorage thereby speeding usage for later.
- Directly copy the JSON formatted response to your clipboard.
Note: Please don't consider it to be a full fledged API. This project is meant only for small and tedious translation tasks.
This app is developed using Open-Source technologies. A micro 'web'-framework for python -
FLASK is used for serving requests.
For the front-end part, AngularJs is used along with
Materialize framework, a modern responsive framework based on Material Design.


|
clibs
Tiny but handy utility libraries for C
|
Self-contained Utilities for C.
Visit the website of clibs here.
Vist the repository of clibs here.
clibs is still experimental and mostly for personal use. The API may change without warning.
clibs are utility code (types, typedefs, macros, functions) used across C programs. They are self-contained and domain neutral, able to be applied to various situations.
clibs is written in ANSI C (C89). Nevertheless, We tested clibs against C89, C99 and C11. Hence, you may use it for code in either classic C or modern C.
We compile and run clibs with GCC, Clang, Visual C++ and Intel C++ Compiler.
We test clibs against several Unix or Unix-like systems:
It should work on other Unix or Unix-like systems as well.
In addition, we test clibs on a Windows container provided by AppVeyor. Hence, clibs should work on Windows as well.
The utilities in clibs are self-contained, distributed as either single header or single header plus single source combo. Just copy what you need to your own C project.
test_*.c are test programs. You don't need them to use clibs.
char
arrays)Check the API of clibs here.
Copyright (c) 2019-2021 Michelle Chen. All code is licensed under MIT unless mentioned otherwise.


Fletchers win lotto as Gov rides into town
by New Zealand Taxpayers' UnionThe Taxpayers’ Union is labelling the Government and Auckland Council cowards, for reportedly giving in to the thugs occupying privately owned Ihumātao and proposing to use taxpayer funds and Auckland Council to buy the land.
Radio NZ is reporting that the Government is set to loan Auckland Council the money to buy the property and that Fletcher is seeking $40 million – more than double the $19 million paid in 2014.
Responding to the report, Taxpayers’ Union Executive Director Jordan Williams said:
“This is cowardly stuff, and sets a dangerous precedent. Other protest groups will be hungrily looking at other parcels of land to seize with taxpayer money.”
“More than 6,000 New Zealanders signed a petition calling on the Government not to use taxpayer cash to get involved. Jacinda Ardern should listen.”
“If Waikato-Tainui want to purchase the land, let them. But Jacinda Ardern and Phil Goff riding to the rescue with the taxpayer cheque book is cowardly.”
“What rubs salt into the wound is that the campaigners on this issue, a left wing protest group called Action Station, has received taxpayer funds via publicly funded NetSafe.”
The Taxpayers’ Union will today deliver its petition to Parliament.


ZipUp
Never struggle to find a clean bathroom!
View, Rate or add Bathrooms near you.
Click on a bathroom to get started.
Add New Bathroom


Windows and Dialogs have never been so easy.
New version 1.3
Added: getTitle
Added: blur/focus function on Windows module
Added: onBlur event
Fixed: WindowCloseKey works with URL content (iframe)
Fixed: Modal window with a parent != document.body
Updated: prototype 1.5RC3
Updated: Dialog handle resizable,minimizable, maximizable, draggable and closable options
I want to thanks Emanuel Mila for it's great theme (lighting in 4 colors!!), this dialog use blue lighting.
And I added a new example/tutorial to show how to create a web os like with PWC.
Check it out: PWC OS
If it's not your first visit, and if you have any troubles with samples, clear your cache.


The first piece of technology that is shown in the movie comes in the opening scene. It is a containment device that they are keeping a velociraptor in, and it is about to be transferred to its exhibit. Even though the light turns green, what we understand to mean the containment unit is locked in, the raptor manages to dislodge the unit from the wall. It then grabs hold of one of the several armed guards and tries to drag him in while head security officer holds on to him. This is where the famous “shoot her!” line comes from, as he is telling the guards to shoot the raptor to try and save the guard from being eaten.
The next technology that we can see is an imaging device used to see fossils underground at a dig site. When Dr. Grant sees them being used, he shrugs them off stating “I hate computers” which is another interesting bit of foreshadow.
While they are on the ride we can see that there is a scientist working with what appears to be a Virtual Reality helmet and gloves. He is manipulating a three-dimensional model of DNA and the video talks about how they were able to insert the DNA of frogs into the missing holes in the recovered dinosaur DNA.
After the party gets off the ride, they can see a series of tables where eggs are being incubated. The eggs are being monitored by scientists and there are robotic arms there to turn the eggs over and to hold them while they hatch. This was interesting, because they used the movie is set in 1993 and robotic technology did not exist then. So, they must have gone through the pain to design a robotic arm just to monitor eggs and turn them over when a person could have easily done it and for a fraction of the cost. Hammond could put this much money into robotic arms but not better security systems to contain dinosaurs?
The next technology we see in the movie is the automated tour system. The two trucks take the group on a guided tour around the island to view the exhibits and provide information about them. It is interesting to note that when the tour guide programs are shut off, there is simply no way for the people inside the cars to manually operate them and the cars are stuck where they are unable to move.
While on the tour, we see that the dinosaurs are being kept contained by high-voltage powered electric fences. They seem to be working as they are, but later on they will be turned off and the dinosaurs will totally just walk right through them like it’s no big deal. Also, they did manage to think of a manual override for the fences! Too bad it’s in some weird power building full of narrow hallways that can totally let you be ambushed by a velociraptor.
Back inside the main building, we get to see the network of computers that controls all of the systems of the park. This system is written and maintained by Nedry, and right off the bat we see him complaining about not being appreciated and that he is not paid enough. Nedry has sole access to the security systems of the park, and we see him execute a program that disables all of the security doors and fences in all the exhibits so that he can steal dinosaur DNA as he plans on selling it for 1.5 million dollars. Nedry also states that the system is composed of more than 2 million lines of code, which is why Ray is unable to figure out how to turn the systems back on. Let it be known: having one person with sole access to your programs is a BAD idea! Should that person ever get hit by a bus (or, in this case, a Dilophosaurus) how screwed will your company be?
Once the systems have been turned back on and what’s left of the party is reassembled in the main building, they are once again trumped by technology. With a velociraptor aching to get into the room and eat them, they are unable to turn on the automatic door lock system and with no way to manually override it they are stuck to hold the door closed themselves.


Helping you understand if blockchain technology can be used to your advantage.
Through workshops, analysis, and bespoke applications we deliver value and insight.
We have developed a suite of tools to engage with your customers and drive growth.
Open and transparent blockchains are a perfect fit for running marketing campaigns.
Proven track record in understanding and delivering non-fungible token solutions.
Implementing dApps such as KnownOrigin.io we are innovating as this nascent industry grows.
We run workshops which will provide you with enough insight into how Blockchain can help or hinder your business.
We can build and prototype working versions of your products and services so you can assess viability and gain user feedback.
Projects required strong technical guidance and know how, we can up-skill and train your staff to ensure they can deliver.
Gain an understanding to how your business can work new paradigms and technologies such as Blockchain.
Blockchain Consultant
Blockchain Consultant
UX Consultant
Payments & DevOps Specialist
Marketing Consultant
Forged from over 40 years engineering experience from start-ups to international enterprises. Battle hardened blockchain experience but still learning everyday.
Industry experience in security auditing, implementation, design and tooling.
Technical analysis and prototyping is used to validate the problem and solution.
Web 3.0 requires new approaches and thinking.
Decentralised applications on public and/or private Ethereum derivative blockchains.
Fast with near-zero fees, this could be the gateway into the world of distributed ledgers.
Blending blockchain technology at enterprise scale.


Glucocorticoid receptor in patients with lupus nephritis: relationship between receptor levels in mononuclear leukocytes and effect of glucocorticoid therapy.
Abstract
We investigated the clinical significance of glucocorticoid receptor determination in 20 patients with systemic lupus erythematosus (SLE) who afterwards developed nephrotic syndrome. Glucocorticoid receptor concentrations in mononuclear leukocytes (MNL) in these patients were comparable with those in both other patients with SLE and healthy persons. Improvement in urinary protein excretion and in disease activity, which was scored according to the SLE Disease Activity Index system of the University of Toronto, closely related to the glucocorticoid receptor concentrations in MNL isolated from the corresponding patients. In summary, glucocorticoid receptor determination in patients with lupus nephritis may be a predictive clue for assessing responsiveness to glucocorticoid therapy.


Your browser does not support iFrames. To view this content, please download and use the latest version of one of the following browsers: Internet Explorer, Firefox, Google Chrome or Safari.


<dependency>
<groupId>org.apache.tomee.bom</groupId>
<artifactId>tomee-webprofile</artifactId>
<version>${version.tomee}</version>
</dependency>
Serverless TomEE WebProfile
Apache TomEE can be run as a library inside your JVM with no need for separate processes or a standalone server install. In this approach we include the right libraries in our project and then bootstrap TomEE using the Server.Builder
API.
Include the tomee-webprofile
dependency
To make things as easy as possible there is just one dependency that will give you a classpath that is 100% identical to your favorite Apache TomEE distribution. The following dependency will pull give you an environment identical to an Apache TomEE WebProfile binary distribution.
The org.apache.tomee.bom:tomee-webprofile is actually generated by analyzing the apache-tomee-webprofile-x.y.z.zip, so is guaranteed to be 100% identical making it easy to transition from a zip file to a simple maven dependency.
|
Write Regular Code
Here we see a simple JAX-RS API for sending/recieving Movie
objects as JSON.
@Path("/movies")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@RequestScoped
public class MovieService {
private Map<Integer, Movie> store = new ConcurrentHashMap<>();
@PostConstruct
public void construct(){
this.addMovie(new Movie("Wedding Crashers", "David Dobkin", "Comedy", 1, 2005));
this.addMovie(new Movie("Starsky & Hutch", "Todd Phillips", "Action", 2, 2004));
this.addMovie(new Movie("Shanghai Knights", "David Dobkin", "Action", 3, 2003));
this.addMovie(new Movie("I-Spy", "Betty Thomas", "Adventure", 4, 2002));
this.addMovie(new Movie("The Royal Tenenbaums", "Wes Anderson", "Comedy", 5, 2001));
this.addMovie(new Movie("Zoolander", "Ben Stiller", "Comedy", 6, 2001));
}
@GET
public List<Movie> getAllMovies() {
return new ArrayList<>(store.values());
}
@POST
public Movie addMovie(final Movie newMovie) {
store.put(newMovie.getId(), newMovie);
return newMovie;
}
}
Bootstrap TomEE with the Server Builder
A this point we have a Maven project with the right dependencies and some application code in our project. From here we use the Server.Builder
API to construct a Server
instance inside our JVM.
Here we see a simple Main class that bootstraps a Server
instance on port 8080
and blocks:
import org.apache.tomee.bootstrap.Archive;
import org.apache.tomee.bootstrap.Server;
import java.util.concurrent.Semaphore;
public class Main {
public static void main(String[] args) throws InterruptedException {
final Server server = Server.builder()
.httpPort(8080)
.add("webapps/ROOT/WEB-INF/classes", Archive.archive()
.add(Api.class)
.add(Movie.class)
.add(MovieService.class))
.build();
System.out.println("Listening for requests at " + server.getURI());
new Semaphore(0).acquire();
}
}
The example below bootstraps a Server
instance on random ports inside a test case and exits when the test case is complete:
import org.apache.tomee.bootstrap.Archive;
import org.apache.tomee.bootstrap.Server;
//...
public class MovieServiceTest {
private static URI serverURI;
@BeforeClass
public static void setup() {
// Add any classes you need to an Archive
// or add them to a jar via any means
final Archive classes = Archive.archive()
.add(Api.class)
.add(Movie.class)
.add(MovieService.class);
// Place the classes where you would want
// them in a Tomcat install
final Server server = Server.builder()
// This effectively creates a webapp called ROOT
.add("webapps/ROOT/WEB-INF/classes", classes)
.build();
serverURI = server.getURI();
}
@Test
public void getAllMovies() {
final WebTarget target = ClientBuilder.newClient().target(serverURI);
final Movie[] movies = target.path("/api/movies").request().get(Movie[].class);
assertEquals(6, movies.length);
final Movie movie = movies[1];
assertEquals("Todd Phillips", movie.getDirector());
assertEquals("Starsky & Hutch", movie.getTitle());
assertEquals("Action", movie.getGenre());
assertEquals(2004, movie.getYear());
assertEquals(2, movie.getId());
}
}
In the above code we have assembled the classes Api
, Movie
and MovieService
into a virtual archive, then we add that archive into a virtual Tomcat install at the location webapps/ROOT/WEB-INF/classes
. When we call build()
the Tomcat server instance is started in our JVM and will begin serving HTTP requests at the host/port identified by server.getURI()
In short, we’ve bootstrapped a Tomcat server in our JVM that has a very tiny disk footprint; three classes and a handful of default configuration files.
Running
Were we to run the above Main class or Test Case we’d see output like the following:
Sep 03, 2020 8:41:29 AM org.apache.openejb.server.cxf.rs.CxfRsHttpListener deployApplication
INFO: org.apache.cxf.jaxrs.validation.ValidationExceptionMapper@2d313c8c
Sep 03, 2020 8:41:29 AM org.apache.openejb.server.cxf.rs.CxfRsHttpListener logEndpoints
INFO: REST Application: http://localhost:8080/api -> org.superbiz.movie.Api@6b2dd3df
Sep 03, 2020 8:41:29 AM org.apache.openejb.server.cxf.rs.CxfRsHttpListener logEndpoints
INFO: Service URI: http://localhost:8080/api/movies -> Pojo org.superbiz.movie.MovieService
Sep 03, 2020 8:41:29 AM org.apache.openejb.server.cxf.rs.CxfRsHttpListener logEndpoints
INFO: GET http://localhost:8080/api/movies -> List<Movie> getAllMovies()
Sep 03, 2020 8:41:29 AM org.apache.openejb.server.cxf.rs.CxfRsHttpListener logEndpoints
INFO: POST http://localhost:8080/api/movies -> Movie addMovie(Movie)
Sep 03, 2020 8:41:29 AM jdk.internal.reflect.DelegatingMethodAccessorImpl invoke
INFO: Deployment of web application directory [/private/var/folders/bd/f9ntqy1m8xj_fs006s6crtjh0000gn/T/temp14966428831095231081dir/apache-tomee/webapps/ROOT] has finished in [1,798] ms
Sep 03, 2020 8:41:29 AM jdk.internal.reflect.DelegatingMethodAccessorImpl invoke
INFO: Starting ProtocolHandler ["http-nio-8080"]
Sep 03, 2020 8:41:29 AM jdk.internal.reflect.DelegatingMethodAccessorImpl invoke
INFO: Server startup in [1877] milliseconds
Sep 03, 2020 8:41:29 AM jdk.internal.reflect.DelegatingMethodAccessorImpl invoke
INFO: Full bootstrap in [3545] milliseconds
Listening for requests at http://localhost:8080


The internet and social networks such as Facebook allow news affecting a community to spread fast, through established news sources such as the New York Times, new digital news outlets such as Salon, by citizen-journalists unaffiliated with public or private institutions, and through personal testimony published in personal social media accounts. In recent years checking the accuracy of news before false claims are spread has become very difficult due to the speed at which news can be shared, and the number of people it can be shared with. Both documented and undocumented immigrants can be susceptible to false claims due to the lack of official news sources regarding federal enforcement of immigration, and due to the way information is distributed unevenly throughout the community.
Immigrant News aims to offer a platform where immigrants can find, share and verify truthful information about immigration activity and related news around the country. It aims to tackle the specific problem of verifying news and stopping rumors for a community that is always seeking reliable and up to date information in a time of political uncertainty. The application will allow users to log in and start interacting with the application by either verifying news or contributing with their own news. Immigrant News will have a reliability level assigned to each user. When someone is registered for the first time, reliability is set to ‘low’ and as the user interacts with the app, by verifying news correctly and marking incorrect news as false, reliability level will change accordingly. If a news item has been marked as true by a certain amount of people, the news can be considered truthful.
Marta reads rumors on Facebook about possible detentions, and sees pictures that depict arrests, but is unable to corroborate the rumors, and still gets anxious about the news. She hears about stories of arrests and detentions directly from her co-workers, so she is able to corroborate those stories. She logs in regularly into Immigrant News to see if other people have written about the rumors she has heard, and to contribute what she has heard.
She reads on Facebook that immigration authorities are actively checking US visas and immigration documents of random travelers in the Los Angeles International Airport, and she is worried because she is traveling there for a family wedding in a month. She logs into Immigrant News to see if other people have reported this rumor and if anyone has approved the rumor. She searches for incidents at LAX, and finds out that the rumor of ICE being active in the airport has been debunked, and feels more confident about her travels.
Shreyas is not undocumented, but has family members or friends who are undocumented. He is in his mid-20’s, and works at a factory that creates electronic parts. One of his friends, Arjun, was detained after an immigration raid at his workplace, a factory in the suburbs of Chicago. ICE (Immigration, Customs, and Enforcement) agents went to the factory looking for one employee who did not show up to a court hearing, and in the process of looking for the employee, asked other employees at the factory their immigration status. Arjun was honest and told ICE that he was undocumented, and they arrested him for further questioning.
Shreyas is concerned that Arjun will be deported, and that Arjun will have to leave his wife and 3 year old child. He also wants other people to know that ICE is conducting raids that include non-targeted immigrants. He logs onto Immigrant News to report the incident, and sees that other users have added information about similar raids in the Chicago area. It appears to be a trend. He contacts the local news about this issue, and local reporters begin questioning factories and the ICE agency in the area.
In addition to creating user personas, we conducted a focus group interview with three individuals, self-identified as immigrants, for the requirements gathering phase. Our interview included both structured and unstructured questions with the objective to get answers for specific doubts as well as to collect unsolicited and useful clues and advice. During the focus group, we split the process into three parts by discussing the project abstract, the project proposal, and finally the personas that we developed for the project. After discussing each part, we asked prepared questions, and asked impromptu questions.
The web application will allow the user to search for news by keyword, date, and/or location
The web application will display details of a story when the user selects a story from the news feed
The web application will display an anonymous list of users who have contributed to a story and their respective trust rating
The web application will allow the user to contribute a new story to the database.
The web application will allow users to validate or invalidate a story.
The web application will allow users to contribute to an existing story (contribute to the story with details or media (i.e. pictures), add comments, react, etc.)
We scheduled in-person meetings to create our sketches. All team members were in attendance and active participants during the sketch process. We went through a sketching and design process for 4 design challenges that we chose from our requirements. We will highlight the design process for one of our challenges.
The Process: For each iteration of our design challenge, we allotted ourselves 5 minutes to sketch as many ideas we had for the given challenge. After the 5 minutes, we presented our sketch ideas. Thereafter, we critiqued each other’s sketches and recorded the critiques which would help focus the design sketches for the next iteration. We followed this process for each iteration until we converged to one design sketch. The final sketch was typically drawn by one team member.
We created a low-fidelity prototype of our application in order to conduct an evaluation before development. We conducted our formative evaluation with three students from UIC. Each of them were given a task card at a time for each of the three tasks. We will go into the evaluation process for one of the tasks.
Two out of three users were not able to find the advanced search, so it needs to be more visible. One potential way to make it more visible is to add an “Advanced Search” blue hyperlink as most users are typically familiar with.
One user expressed confusion about the percentages next to each story that represent how trustworthy each story is. One possible improvement is to change the percentage just to the a number of people who have validated and invalidated it. The assumption here is that with this improvement, the color coding of the stories will become clear.
We chose to demonstrate the application by performing the three tasks done by users in the formative and the summative evaluations.
HTML + Javascript
We use Google Maps to display news on a map and calls to their geocode api to translate addresses to coordinates and make location suggestions.
We were most familiar with relational databases, but did not want to over-engineer a back-end solution. The Firebase database allowed us to access a secure database through API calls and REST services.
We chose GitHub as a central code repository. Code is made available with a MIT license.
By using GitHub Pages, we were able to view our work in progress on a live website as we committed our code to the repository.
We chose Material Design Components for the web. In addition, we chose to utilize some Bootstrap classes and JQuery components as we were familiar with both technologies.
Aldo Alvarez: JavaScript, Firebase Development, Bootstrap & Material Design
Diego Ihara: JavaScript, Firebase Development, Bootstrap & Material Design
Viren Mody: Firebase Database Design, Bootstrap & Material Design
Guillermo Rojas Hernandez: Firebase Development, Bootstrap & Material Design
We facilitated a summative evaluation of our application after development.
Task 1: Do an advanced search to find news that happened in the City of Chicago.
Task 2: Add a story about a raid that you saw happen on a McDonald's near your home.
Task 3: Search for a story about immigrants being detained near LAX and contribute to the story by validating it.
Subject 1:
Task 1:
Time taken = 20s
Errors = 1
Task Success = 100%
Task 2:
Time taken = 40s
Errors = 0
Task Success = 100%
Task 3:
Time taken = 50s
Errors = 0
Task Success = 100%
User Comments: The application needs some polishing but seems promising.
Subject 2:
Task 1:
Time taken = 15s
Errors = 0
Task Success = 100%
Task 1:
Time taken = 25s
Errors = 0
Task Success = 100%
Task 1:
Time taken = 30s
Errors = 0
Task Success = 100%
User Comments: The application is not difficult to use.


Economic Resource Availability
Analysis of a community's ability to whether financial setbacks through social lending.
This project was completed as part of CS302 at UVM with Tom Nececkas and Mark Kirby. The following article is an overview of the project.
The Fed published a report where 40% of americans would have difficulty covering a $400 expense. Of those americans, 10% would borrow from a friend or family member to cover the expense. With an increasing number of people turning to crowdfunding sites such as GoFundMe 1, it is clear that people are becoming more reliant on the community to provide finanical relief. Our work develops a potential model for networks resources to insulate people in a community from financial setbacks.
Data
We used in income distribution from the Milwaukee Area Renters Study (MARS) which is publicly available here. The mean income is $1315.10 and median income is $1085.00. Approximately 13% report no income.
Details
We developed a model consisting of the following parameters:
- \(n\) nodes
- \(s\) proportion of savings
- \(a\) proportion of income that could be borrowed
- \(c\) expense
- \(I_k\) income of the kth individual
The goal was to determine the following using the MARS income distribution:
- Determine the relationship between the reduction of financial resources in a community and the number of connections for the community to become financially stable.
- Determine the relationship between each of the parameters and the number of connections.
A notion of “financial stability” is needed to find the relationships. An individual is considered financially stable if their expense \(c\) can be covered with their own resources or in addition to the resources of a close neighbor. Formally,
\[sI_k + \sum_{n\in\mathcal{N}_k}aI_n \ge c\]where \(\mathcal{N}_k\) is the neighborhood of the kth individual.
Assumptions
- Only an individual’s income is considered.
- Individuals can allocate resources to cover expenses.
- Homogeneity. Everyone experiences the same financial setback and willingness to lend their resources.
In addition, the edges are created randomly. In reality, social networks are often structured.
Procedure
Starting with \(n\) disjoint nodes, we randomly create edges until the condition for financial stability is met following a relative reduction in the total income \(p\in\{0.05i \mid 0 \le i \le 20\}\) and changing the parameters \(n\in\{20, 50, 100\}\), \(s\in\{0.1, 0.2, 0.4\}\), \(a\in\{0.1,0.2,0.4\}\), and \(c\in\{400, 800, 1600\}\). This is repeated for \(T=100\) trials.
Results
The trend between expense and number of edges is almost linear until it approaches the maximum possible number of edges. However, the scaling from each reduction in income is non-linearly increasing. It indicates the the growth in the number of edges per percentrage reduction in income exceeds linear growth.
The trend between the number of edges with the number of people \(n\) in the community, increasing access \(a\) to resources, and expense \(c\) is as expected:
- More people in the network reduces the growth in the number of social connections to become financially stable.
- Fewer social connections are needed for individuals to become financially stable with greater community resources.
- Increasing costs increases the number of social connections. The common idea for 1 and 2 is increased community resources which reduces the growth in the number of edges. On the other hand, increasing costs is analogous to reducing the resources available in the community.
For savings, the results were unexpected. While increased savings reduced the initial proportion of those financially unstable, the number of social connections does not change significantly. It might be the case that those that require the most number of social connections are those with significantly low income.


Hi investors, Dean (@deanliu) and Dan (@tradealert) are back and today we’re talking about how you can generate passive income with ZenCash.
I-ZenCash.
We’ve already covered ZenCash in a previous issue but if you are new to the project, ZenCash is one of the many applications available on the ZenSystem (ZenSys) which is a private platform for money (ZenCash), media (ZenPub) and messages (ZenChat).
The ZenSys platform is secured by zk-snark cryptography (as in ZCash) which allows its users to selectively control their privacy and hide metadata, account/transaction balances and identities from the miners and from other nodes.
Similar to Telegram, communication between nodes is end-to-end encrypted to increase the robustness of the network and guarantee total privacy for users while allowing ZenSys to be compliant with general privacy laws such as the GDPR.
ZenSys also boasts the most decentralized node architecture in the world. Nodes on the ZenSys are called Secure Nodes and their number has been growing fast such as the Zensys network currently surpasses Bitcoin in node count which is remarkable for a project which was launched only about a year ago.
Then, in April 2018 the Zen team released a new whitepaper which explores the future of the platform and present a brand new incentive scheme for node operators.
So today, we would like to talk about this new whitepaper and how you can leverage the power of the platform to generate a passive income stream.
II- Generating an Income Stream with ZenCash.
ZenSys allows you to generate passive income by becoming a Secure Node (A) or a Super Node (B).
A-Secure Nodes.
Under the traditional system anybody could set up a secure node on the network by staking 42 ZenCash coins as collateral into a Swing or Ledger Wallet as well as other requirement typical of node operation such as keeping a copy of the blockchain and guarantee a minimum daily uptime. Apt secure nodes would then get rewarded 3.5% of the total mining reward divided between the total number of nodes in the network.
Faced with the issue of quickly diminishing returns for node operators due to the rapid growth of the community, the Zen team recently decided to implement a brand new reward scheme. Under this new system, secure node operators now share 10% of the total mining reward.
B-Super Nodes.
The team also introduced the released of SuperNodes which can be set up by staking 500 Zen coins in a wallet but also have higher computational and uptime requirements than secure nodes. The number of those nodes should cap around 2 to 5,000 units and these nodes will also share 10% of the mining reward.
Super Nodes will allow ZenSys to graduate to a full-fledged platform equipped with side chains which will make it possible to run applications such as :
- a distributed storage system (ZenPub)
- a distributed computation for rent (ZenGrid)
- zero-delays transactions (InstantZen)
- a decentralized exchange (ZenXchange) with a fully collateralized price stable asset called ZenUSD
All these exciting applications will be able to run privately from the comfort of your computer or directly on your mobile.
The ambition of the project didn’t fail to attract the attention of powerful players when a bout a week ago, Barry Silbert’s Digital Currency Group announced that they had added ZenCash to their investment portfolio.
Finally, keep in mind that the team estimates that the network should cap around 20,000 secure nodes and 5000 super nodes which means that a lot more coins might soon be bought up on the open market. ZenCash coins have already appreciated over 2.5 times since the release of the new whitepaper and, due to the fact that ZenCash coins are rather thinly traded, it might soon be very expensive to acquire enough coins to acquire a secure node (currently priced around $1700).
If you liked this post, you can learn about ZenCash by visiting their website, join their vibrant Discord or read their new whitepaper.
Cheers.
_If you liked this post please consider supporting Dan’s blog by upvoting, re-steeming and following yours truly and If you’d like more content like this or if you’re simply interested in learning more about cryptocurrencies, come join my [awesome community on Discord](https://discord.gg/4VGVHrs). Don’t be shy, it’s free!!_
Dean and Dan.
This page is synchronized from the post: ‘Generate Passive Income with ZENCASH - Secure Nodes and Super Nodes -‘


Related JIRA: SOHO-7682
When sorting on any column, if there is any selected cell in the grid and not currently visible (e.g. because there are many columns which doesn't fit to entire page, sort was on first and selected cell was from the last column), the view is shifted to that selected cell.
This api option `focusAfterSort` can use to fix this issue.
- Make your browser window short as much, so you have some hidden columns
- Click to change the setting for "focusAfterSort" by clicking on button top of grid
- If the button state as "Set Focus After Sort To: False"
- This means currently option is set as "True"
- Click on any cell in last column
- Go to first column and click in header to do sort
- See it should scroll to last column for focused cell
- Now change the setting by clicking on button “focusAfterSort” top of grid
- This time button should state as "Set Focus After Sort To: True"
- This time option should set as "False"
- Click on any cell in last column
- Go to first column and click in header to do sort
- See this time it should NOT scroll to last column for focused cell


4 Ways to Add Meaning to Your Melody
August 31, 2018 | Nick Mazuk
So you’ve written several melodies, but you can’t figure out how to make a melody that has any meaning?
You’ve probably done research on, and maybe have even read and practiced my structure for writing melodies, but you still can’t figure it out!
There’s one little secret that will solve your problem almost instantly: climaxes. You have to make sure your melody is going somewhere for your melody to have any sort of meaning. Understanding climaxes is the key to making that happen.
So today, I’m going to show you 4 simple ways to create climaxes in your melody through what I believe to be one of the most perfectly constructed melodies of all time.
What is a Climax? And What Does it Have to do with Music?
You may have heard about the general structure of a plot in your high school English class, but if not, here’s a quick recap.
Stories have to start out somewhere. There, we meet our characters until there is some sort of tension that arrises. Then, the story gradually gets more tense until it reaches a climax, when some sort of goal has been reached. Then, the story resolves.
What if we took this same structure and applied it to melodies?
It turns out that you can, and I’ve been doing it for years now. In fact, I’ve even gone as far as writing pieces based of a more detailed version of this arc. But for now we are going to focus on melodies.

Let’s take a quick look at how each of these are used in Binary Sunset from Star Wars: A New Hope.
Climaxes in Melody
Perhaps the most obvious form of climax is that of the high point in this melody. In measure 6, we reach a high G. This obviously sounds like the climax when you listen to it, and that is exactly where John Williams places the high note.
Next, you’ll notice that the rhythm speeds up to that point. It is based on the rhythms from the earlier motives, but the dotted 8th 16th rhythm adds a sense of urgency. And at the final climax, there is a long note to show that we’ve finally arrived.
Then you’ll notice that the harmony is an E♭ major chord. This isn’t terribly surprising as it is the ♭6 chord of the key, but it is significant because it is the only major chord in the entire melody (and the most prominent one in the score for the several minutes surrounding the moment). The contrast to the surrounding chord is what give it the “unexpectedness”. That’s what causes the climax.
Finally, you’ll notice that as the melody goes on, the size of the intervals gradually increases. Larger intervals are generally more tense, so as the melody finally reaches an interval of an octave, it has a sense of propulsion. The full downwards octave causes a sense of release from all the intervallic tension that was built.
Parting Notes, Literally
The effectiveness of this melody comes from the fact that all these main ways of creating climaxes (and others as well) all coincide at the same moment in time. Each technique is powerful in and of itself, but combined they are magical.
What is the fundamental idea behind climaxes in music?
And they are all the products of building tension. As we noted in the story metaphor, tension is built until it is released at the climax. This tension building comes from the exact same methods as the climax. So the notes progressively get higher, the intervals larger, and the rhythm faster, all until they climax at the—well—climax.
Then, like a story, there is a resolution to each and every one of them. So the final motive of the melody releases all the tension built up before. The intervals gradually get smaller in the last note, the harmony returns to normal, the melody slowly descends to the final note, and the rhythm gradually gets slower. It’s not enough to simply create a climax, we have to resolve it as well.
The melody actually achieves a low point right after the climax, as if it is overcompensating. The result is that the ending feels right in the middle where the least tension is. The two extremes right next to each other also makes for a balanced melody.
How do I Apply Climaxes?
The simple solution is to start writing your own. I’ve written articles that go more in-depth on each of these ways of creating climaxes (High/Low Note, Increased Rhythmic Activity, Unexpected Note/Chord, Intervalic Tension), so you can read them for more understanding.
But the best way is to really just start writing. Write a melody and then try to improve it by adding a climax of some sort. Pick a climax and then make the melody fit that climax. It’s okay if it’s not good at first, it just takes practice. Mistakes are the only way to learn.
If you would like more help, download the free worksheet below. It will help you get started analyzing climaxes on your own and then writing one. If you are already a subscriber, the worksheet is in your inbox.
Happy writing!


{% extends "layout.html" %}
{% block body %}
Introduction
You receive a phone call from someone who claims to work with you and asks you about information that isn't public. How can you be sure that they are who they say they are and that they really do work for your company?
This system, MAH Verification, is designed to help. It enables you to verify that the person you are communicating with via email, telephone or IRC is the person they say they are and also company associate.
It uses 2 factor authentication (PIN + token) to provide the strongest and most practical assurance that someone is a current company associate. It allows you to create a short authentication code for another associate. This authentication code is a constant or interval character hex-string, consisting of letters from a-f and numbers 0-9. By default, codes have a short lifetime (10 minutes).
The system performs a one way authentication via a authentication code, as illustrated in the following example:
Search terms must be longer than 2 characters and only contain alphanumeric characters (a-z A-Z 0-9). Searches are not case sensitive and peformed on the username (uid), full name and phone number fields of the staff directory. Currently, only the desk phone field is searched, not the home phone or mobile fields.
Wildcards and regular expressions are not accepted in search fields, but search terms are automatically wildcarded. For example, the search term "mark" would match users with a first name "Mark" or "Marko", or with a surname of "Denemark".
Reporting Suspicious Authentications
If you attempt to authenticate someone and they are unable to complete it or they repeatedly fail to read back the correct authentication code, this may be cause for concern that "something isn't right". If you feel that there is something suspicious or strange about your interaction, then please report it.
You can also report suspicious interactions via the "flag a suspicious authentication" link in the top right hand corner of the page. Using this option, you will be prompted to select the specific authentication from a history of past authentications.
You can also report a specific authentication as suspicious by clicking on the "flag as suspicious" link after that authentication. In all cases, there is a text box to provide more information, please use this to describe why this authentication was being reported. Please provide as much relevant information as you can.
By hovering your mouse over the authentication code, you can see the code converted to the phonetic (NATO) alphabet. By using this, when reading out codes, it makes it easier to hear and understand codes, with less chance of confusion.
{% endblock %}


A small site designed to provide Javascript challenges. Show Help
To attempt a challenge, upload a JavaScript file (normally end with .js) with a function entitled main
. This function, when run with the given arguments, should return the answer. Error messages will show up in console, as will any console
functions from your program. Example here.
Select Challenge
Sample:
Input: Output:


{% extends "base.html" %} {% block content %}
Machine learning models are now widely applied to predict biologically meaningful relations. Examples include the prediction of protein functions, gene disease associations, association of proteins and pathways, drug targets, drug indications, pharmacological effects, and similar. Often, the evaluation of these methods is based on synthetic datasets or by withholding parts of a data set and reporting predictive performance measures on this set. However, such evaluation methods could be prone to biases; for example, testing on a randomly selected subset of data may retain some information that makes predictions overly simple and consequently the performance measures may not accurately reflect how well relations can be predicted in the
One effort to resolve this issue is to perform a time-based evaluation where predictions are submitted at a time and, after a period of waiting, these predictions are evaluated on new knowledge that became available. Large-scale evaluation efforts such as CASP (for protein structures) or CAFA (for protein functions) follow such an approach. However, these are efforts that are run at specific time points; they do not, for example, allow evaluating how model performance is affected when the models are used as part of the decision making process.
Running such an evaluation usually takes a significant amount of time and resources. As biological database are now increasingly being made available through Semantic Web technologies, in particular SPARQL endpoints, we have an opportunity to define such challenges for any type of association that can be discovered through (federated) SPARQL queries. We provide a method to define and run challenges, to submit predictions for them and evaluate. SPARQL queries we use for the challenges can be found and tested at the BioHackathon SPARQlist.
We evaluate the prediction for relations between (biological) entities. Entities and relations are identified by an IRI, and predictions may be associated with a confidence score. The predictions can be made using any model, including link prediction models, text mining, or others. In the future, we may introduce specific sub-challenges that focus on using only particular types of data (such as text-only, or graph-only, challenges).
Not yet. We consider a negative
prediction a
prediction that an existing relation is false. We plan to
include these predictions in our evaluation in the future.
Yes, we plan to meet annually at the Bio-Ontologies SIG at ISMB. Additionally, we intend to publish the methods used and developed as part of CERLIB in a journal special issue.


File: src/away/materials/CSSMaterialBase.ts
///<reference path="../_definitions.ts"/> module away.materials { import BlendMode = away.base.BlendMode; import Event = away.events.Event; import Matrix3D = away.geom.Matrix3D; import AssetType = away.library.AssetType; import Delegate = away.utils.Delegate; import IMaterialOwner = away.base.IMaterialOwner; /** * MaterialBase forms an abstract base class for any material. * A material consists of several passes, each of which constitutes at least one render call. Several passes could * be used for special effects (render lighting for many lights in several passes, render an outline in a separate * pass) or to provide additional render-to-texture passes (rendering diffuse light to texture for texture-space * subsurface scattering, or rendering a depth map for specialized self-shadowing). * * Away3D provides default materials trough SinglePassMaterialBase and MultiPassMaterialBase, which use modular * methods to build the shader code. MaterialBase can be extended to build specific and high-performant custom * shaders, or entire new material frameworks. */ export class CSSMaterialBase extends away.library.NamedAssetBase implements away.library.IAsset, IMaterial { /** * An object to contain any extra data. */ public extra:Object; /** * An id for this material used to sort the renderables by shader program, which reduces Program state changes. * * @private */ public _iMaterialId:number; /** * An id for this material used to sort the renderables by shader program, which reduces Program state changes. * * @private */ public _iRenderOrderId:number = 0; /** * The same as _renderOrderId, but applied to the depth shader passes. * * @private */ public _iDepthPassId:number; private _bothSides:boolean = false; // update /** * A list of material owners, renderables or custom Entities. */ private _owners:Array<IMaterialOwner>; public _pBlendMode:string = BlendMode.NORMAL; private _imageElement:HTMLImageElement; private _imageStyle:MSStyleCSSProperties; private _repeat:boolean = false; private _smooth:boolean = true; private _texture:away.textures.Texture2DBase; public get imageElement():HTMLImageElement { return this._imageElement; } public get imageStyle():MSStyleCSSProperties { return this._imageStyle; } /** * Indicates whether or not any used textures should be tiled. If set to false, texture samples are clamped to * the texture's borders when the uv coordinates are outside the [0, 1] interval. */ public get repeat():boolean { return this._repeat; } public set repeat(value:boolean) { this._repeat = value; //TODO } /** * Indicates whether or not any used textures should use smoothing. */ public get smooth():boolean { return this._smooth; } public set smooth(value:boolean) { this._smooth = value; //TODO } /** * The texture object to use for the albedo colour. */ public get texture():away.textures.Texture2DBase { return this._texture; } public set texture(value:away.textures.Texture2DBase) { if (this._texture == value) return; this._texture = value; if (value instanceof away.textures.ImageTexture) { this._imageElement = (<away.textures.ImageTexture> value).htmlImageElement; var node:HTMLStyleElement = document.createElement("style"); node.type = "text/css"; document.getElementsByTagName("head")[0].appendChild(node); var sheet:CSSStyleSheet = <CSSStyleSheet> document.styleSheets[document.styleSheets.length - 1]; sheet.insertRule(".material" + this.id + "{ }", 0); var style:MSStyleCSSProperties = (<CSSStyleRule> sheet.cssRules[0]).style; style.backgroundImage = "url(" + this._imageElement.src + ")"; style.backgroundSize = "100% 100%"; style.position = "absolute"; style.width = this._imageElement.width + "px"; style.height = this._imageElement.height + "px"; style.transformOrigin = style["-webkit-transform-origin"] = style["-moz-transform-origin"] = style["-o-transform-origin"] = style["-ms-transform-origin"] = "0% 0%"; style.transform = style["-webkit-transform"] = style["-moz-transform"] = style["-o-transform"] = style["-ms-transform"] = "scale3d(" + 1/this._imageElement.width + ", -" + 1/this._imageElement.height + ", 1) translateY(-" + this._imageElement.height + "px)"; } } /** * Creates a new MaterialBase object. */ constructor(texture:away.textures.Texture2DBase = null, smooth:boolean = true, repeat:boolean = false) { super(); this._iMaterialId = Number(this.id); this.texture = texture; this.smooth = smooth; this.repeat = repeat; this._owners = new Array<IMaterialOwner>(); } /** * @inheritDoc */ public get assetType():string { return AssetType.MATERIAL; } /** * Cleans up resources owned by the material, including passes. Textures are not owned by the material since they * could be used by other materials and will not be disposed. */ public dispose() { //TODO } /** * Defines whether or not the material should cull triangles facing away from the camera. */ public get bothSides():boolean { return this._bothSides; } public set bothSides(value:boolean) { this._bothSides = value; //TODO } /** * The blend mode to use when drawing this renderable. The following blend modes are supported: *
 *
BlendMode.NORMAL: No blending, unless the material inherently needs it
 *
BlendMode.LAYER: Force blending. This will draw the object the same as NORMAL, but without writing depth writes.
 *
BlendMode.MULTIPLY
 *
BlendMode.ADD
 *
BlendMode.ALPHA
 *
 */ public get blendMode():string { return this._pBlendMode; } public set blendMode(value:string) { this._pBlendMode = value; //TODO } /** * Indicates whether or not the material requires alpha blending during rendering. */ public get requiresBlending():boolean { return this._pBlendMode != away.base.BlendMode.NORMAL; } // // MATERIAL MANAGEMENT // /** * Mark an IMaterialOwner as owner of this material. * Assures we're not using the same material across renderables with different animations, since the * Programs depend on animation. This method needs to be called when a material is assigned. * * @param owner The IMaterialOwner that had this material assigned * * @private */ public iAddOwner(owner:away.base.IMaterialOwner) { this._owners.push(owner); //TODO } /** * Removes an IMaterialOwner as owner. * @param owner * * @internal */ public iRemoveOwner(owner:away.base.IMaterialOwner) { //TODO } /** * A list of the IMaterialOwners that use this material * * @internal */ public get iOwners():Array<IMaterialOwner> { return this._owners; } } }


This is Topological. An app built on Electron.
The app is running in a environment configuration on .


|
|
SDL_Texture * | LoadTexture (std::string path) |
| |
|
SDL_Texture * | CreateTextTexture (TTF_Font *font, std::string text, SDL_Color color) |
| |
|
void | ClearBackBuffer () |
| |
|
void | DrawTexture (SDL_Texture *tex, SDL_Rect *clip=NULL, SDL_Rect *rend=NULL, float angle=0.0f, SDL_RendererFlip flip=SDL_FLIP_NONE) |
| |
|
void | Render () |
| |
|
|
static Graphics * | Instance () |
| |
|
static void | Release () |
| |
|
static bool | Initialized () |
| |
|
|
static const int | SCREEN_WIDTH = 800 |
| |
|
static const int | SCREEN_HEIGHT = 600 |
| |
The documentation for this class was generated from the following files:


Crystal Ball REST API allows you to ask your burning questions to the "Crystal Ball" and in return receive answers you so desperately seek.
GET: https://crystalballapi.herokuapp.com
Retrieves a answer to a question.
Following examples are to receive a random answer
curl -X GET \ 'https://crystalballapi.herokuapp.com/answer'
var request = require('request'); var options = { url: 'https://crystalballapi.herokuapp.com/answer', method: 'GET' }; function callback(error, answer, body) { if (!error && answer.statusCode == 200) { console.log(body); } } request(options, callback);
"Crystal Ball API" was created by ReneeJoy Valentine . Please feel free to use and contribute to this small API.


{% extends "global/Page.html" %} {% load staticfiles otree %} {% block title %} The Experiment Is Over {% endblock %} {% block content %}
The experiment is over.
Your score in Part 1 is: {{part1_payoff|c}}.
Your score in Part 2 is: {{part2_payoff|c}}.
Your score in Part 3 is: {{part3_payoff|c}}.
Your total score is: {{player.participant.payoff}}.
Your total score converted in euros is: €{{rate}} × (your total score) = {{total_payoff_in_currency}}.
Your score in euros plus the show-up fee of {{fee}} is: {{raw_payment}}
Your final payment rounded to up to 10 cents is: {{final_payment}}
{% endblock %}


Dashboard
Streak
20 days
Rewards available
2
DAILY CALORIE INTAKE
60%
FRIENDS
3
Weightloss Progress
| DATE | WEIGHT |
|---|---|
| 04/10/19 | 172 lbs |
| 04/20/19 | 170 lbs |
Current Plan
Currently you're attempting to lose weight.  Your exercise plan is 1 hour of daily movement.
This will help you attain your goal of losing 20 lbs in the next 3 months by following a 2 pounds per week rate.
Calorie and Exercise Log
Breakfast 20%
Lunch 40%
Dinner 35%
Total Calories Consumed 90%
Exercise Complete!
Reward of the Week
Women's TechLoom Breeze Shoe $99.00 $89.00 USD View Product
Double your exercise goal three times this week to unlock reward.
Breakfast
TOTAL CALORIES: 220
Lunch
TOTAL CALORIES: 8 00
Dinner
TOTAL CALORIES: 500
Exercise
TOTAL CALORIES: 600


This paragraph is all about being a paragraph. I don't really know what else to put here, but this is going to be a paragraph regardless. Being hungry is never fun, but that's why we have the kitchen. When someone says they don't know, they actually do, but they're not sure if they're correct. I'll just add an extra sentence here. And another here, to balance the amount of words in this.
This is yet another paragraph. I must keep writing stuff to fill the paragraph, but thankfully, there are only two of these. The paragraph is a little longer here, so I do believe that I must come up with yet more things to randomly spew in this paragraph. Whales are pretty cool, but dolphins are cooler. Seals are the coolest of them all though, take my word for it. Salmon has a silent l which will confuse the heck out of everyone that says it and is suddenly corrected, as well as any ESL student or person. What's up with the English language, right? It's weird but it's what many people out of the US want to learn, so it must be pretty important.


?
15
6
7
8
9
1
O
H
copyright
reserved
botanical
Garden
Aosa
plumierii
(Urb.)
Weigend
det.
Maximilian
Weigend
-
October
1998
Institut
fŸr
Systematische
Botanik
MŸnchen
(MSB)
UNIVERSITY
of
CALIFORNIA,
LOS
ANGELES
As
determined
MURIEL
E.
POSTON
1977
THE
NEW
YORK
BOTANICAL
GARDEN
Plants
of
Hispaniola
Dominican
Republic
12805
Loasa
plumieri
Urb.
Det.
Alain
H.
Liogier,
March
1970.
Herbaceous,
about
1
m
high,
flowers
white,
small.
In
dense
woods,
Bafladeros
del
Valle,
headwaters
of
Bao
river,
ordillera
Central.
Alt.
1700
m
Common.
Bro.
Alain
H.
Liogier
1-7
Oct.
1968
Supported
by
funds
from
the
National
Science
Foundation.
1623460
Legend -
Level of confidence that token is an accurately-transcribed word
extremely low
very low
low
undetermined
medium
high
very high


Photos
Us
Phoenix House of Pizza & Subs first opened its doors on April 23, 1992. Since then, our main priority has always been to serve Fast and Well. We do not only want to be a good pizzeria, but a great one!And what would a great pizzeria be without the best product? We make our own dough daily, on the premises, in small batches to ensure freshness. Our sauce is our own secret family recipe. We've perfected our blend of spices. And, what would a pizza be without the right cheese? We have chosen a cheese that achieves an amazing texture and flavor.


I am a freelancer, an aspiring Entrepreneur from Nepal, determined, currently pursuing graduation and have an awesome business.
I am also a geek, interested in New Technologies especially Open Source & Linux. I love to code, ride bikes, travel, hang out and mostly i Read.


| Class and Description |
|---|
| ClientBoard
this class is the client-side representation of the server-side concept of Board.
|
| ClientPlayer
this class is the client-side representation of the server-side concept of Player.
|
| Class and Description |
|---|
| ClientBoard
this class is the client-side representation of the server-side concept of Board.
|
| ClientPlayer
this class is the client-side representation of the server-side concept of Player.
|
| Class and Description |
|---|
| ClientBoard
this class is the client-side representation of the server-side concept of Board.
|
| ClientPlayer
this class is the client-side representation of the server-side concept of Player.
|
| Class and Description |
|---|
| ClientBoard
this class is the client-side representation of the server-side concept of Board.
|
| ClientPlayer
this class is the client-side representation of the server-side concept of Player.
|
| Class and Description |
|---|
| ClientFamilyMember
this class is the client-side representation of the server-side concept of FamilyMember.
|
| ClientPlayer
this class is the client-side representation of the server-side concept of Player.
|
| Class and Description |
|---|
| ClientActionSpace
this class is the client-side representation of the server-side concept of Region.
|
| ClientCardRegistry
singleton class which contains all the information about cards.
|
| ClientFamilyMember
this class is the client-side representation of the server-side concept of FamilyMember.
|
| ClientRegion
this class is the client-side representation of the server-side concept of Region.
|


CronQuestions
CronQuestions[1] is the largest known Temporal KGQA dataset, clearly stratified into buckets of structural complexity. CronQuestions expands the only known previous dataset by a factor of 340×. This dataset consists of two parts: a KG with temporal annotations, and a set of natural language questions requiring temporal reasoning. Temporal KG was prepared by taking all facts with temporal annotations from the WikiData subset. The QA dataset was generated with a set of templates for temporal reasoning. These were made using the five most frequent relations from our WikiData subset, namely member of sports team, position held, award received, spouse, and employer.
Leaderboard: Overall
| Model / System | Year | Hits@1 | Hits@10 | Reported by |
|---|---|---|---|---|
| BERT | 2021 | 0.071 | 0.213 | Saxena et. al. |
| BERT | 2021 | 0.243 | 0.620 | Mavromatis et. al. |
| RoBERTa | 2021 | 0.225 | 0.585 | Mavromatis et. al. |
| RoBERTa | 2021 | 0.07 | 0.202 | Saxena et. al. |
| KnowBERT | 2021 | 0.07 | 0.201 | Saxena et. al. |
| T5-3B | 2021 | 0.081 | - | Saxena et. al. |
| EmbedKGQA | 2021 | 0.288 | 0.672 | Mavromatis et. al. |
| T-EaE-add | 2021 | 0.278 | 0.663 | Saxena et. al. |
| EaE | 2021 | 0.288 | 0.678 | Mavromatis et. al. |
| CronKGQA | 2021 | 0.647 | 0.884 | Mavromatis et. al. |
| EntityQR | 2021 | 0.745 | 0.944 | Mavromatis et. al. |
| TempoQR-Soft | 2021 | 0.799 | 0.957 | Mavromatis et. al. |
| TempoQR-Hard | 2021 | 0.918 | 0.978 | Mavromatis et. al. |
References
[1] Saxena, Apoorv, Soumen Chakrabarti, and Partha Talukdar. Question Answering Over Temporal Knowledge Graphs. arXiv preprint arXiv:2106.01515 (2021).