The Berlin IoT Hub consists of two components, namely: an RESTful API and a frontend. All of these components are administrated within their very own Repository stored in
The API is written in Typescript and uses Express.js + and Prisma.
You can find an example .env
file under ./prisma/env.example. Make sure to obtain an LogDNA Key to connect to your account. (You can get this by going to the addon section on render.com).
docker-compose up
npm ci
# Assumes you habe a posstgres DB running
npm run dev
Uses Jest. Prisma creates for each test run a sqlite DB. Currently this is fine. We might need to switch to a Postgres setup later on.
npm t
The API is deployed to render.com. You can find all definition in render.yaml. Deploy via Infrastructure as Code. Don't forget to add your environment variables.
This api provides some endpoints for posting data over HTTP. You need an user account to do that. You can find many examples in the file http-requests/api.http. This file can be used with the VSCode Rest Client Extension. Make sure to create your .env
file there from the provided example under ./http-requests/env.example.
Docs are generated using typedoc and deployed to github pages.
If you want to connect you very own TTN application and their devices with the IoT Data Hub you'll need:
This is the most obvious step and propably comes by default if you already found your way to our repo. To show the data which was measured by your sensors in the IoT Data Hub, of course, you'll need a sensor which already measures some data e.g. temperature, CO2, dezibel, pressure etc.., first.
So far, our API only can handle one record per device. In order to handle the incoming payloads in a way our API is aware of what is happening, you simply have to update the payload aka. decoder function in your very own TTN application. You measrued data, e.g. CO2 value, needs to be returned as "value" otherwise our API wont recognize it. Please see the following example for a simple CO2-sensor below:
function Decoder(bytes) {
var myCO2;
//if no value was measured return 0
if (!bytes[0]) {
myCO2 = 0;
} else {
//cuz co2 sensors usually delivery records higher than 255 we look at 2 bytes of the uplink
myCO2 = (bytes[1] << 8) | bytes[0];
}
return {
now: new Date().toISOString(),
value: myCO2,
};
}
You can simply test your decoder function by simulating an uplink. In our case we simply used a payload with the hexadecimal values of 01 05. Our decoder function now returns us a decimal value of 1281. Time to open the window and let some fresh air in!
The IoT Data Hub uses a RESTful API and therefore can be used by any device which is communicating over HTTP. Luckily, the TTN Community already provides a very powerful built-in integration to wire the incoming payload messages (MQTT) with the HTTP protocol. To use this HTTP integration for the API, simply follow these steps:
By finally setting up the HTTP integration, your part is done and everything should work as expected. Yeah. However, if you're going to test the API be simulating some uplinks, you'll will notice that no record and even no application will appear in the IoT Data Hub Frontend.
Don't worry! This is because we have to add your application and your sending device manually first. So: please don't hesitate to get in contact and tell us your AppID & the ID of your device(s) which is/are sending. We will send you your very own Authorization token and configure our DB so you can finally see your sensor data our Frontend
Generated using TypeDoc


Azure Stack
Azure Stack is an on premise appliance made by Microsoft. The main goal of Azure Stack isn't to have a new Hypervisor like vSphere or Hyper-V, but to have real cloud on prem. If you want to deploy only Virtual Machines, you aren't on the good path.
This article is summary for installing and configuring an Azure Stack with a lot of PowerShell coming from GitHub. With all the scripts you may have a running Azure Stack.
Hardware prerequisites
You need a server with at least the following configuration :
| Component | Minimum | Recommended |
|---|---|---|
| Disk drives: Operating System | 1 OS disk with minimum of 200 GB available for system partition (SSD or HDD) | 1 OS disk with minimum of 200 GB available for system partition (SSD or HDD) |
| Disk drives: General development kit data* | 4 disks. Each disk provides a minimum of 140 GB of capacity (SSD or HDD). All available disks are used. | 4 disks. Each disk provides a minimum of 250 GB of capacity (SSD or HDD). All available disks are used. |
| Compute: CPU | Dual-Socket: 12 Physical Cores (total) | Dual-Socket: 16 Physical Cores (total) |
| Compute: Memory | 96 GB RAM | 128 GB RAM (This is the minimum to support PaaS resource providers.) |
| Compute: BIOS | Hyper-V Enabled (with SLAT support) | Hyper-V Enabled (with SLAT support) |
| Network: NIC | Windows Server 2012 R2 Certification required for NIC; no specialized features required | Windows Server 2012 R2 Certification required for NIC; no specialized features required |
| HW logo certification | Certified for Windows Server 2012 R2 | Certified for Windows Server 2016 |
Source : docs.microsoft.com
You can deploy Azure Stack Developpement kit in Azure using a E16s v3
Windows Installation
You need to install a Windows Server 2016 with a full disk (no partition). As the installer will boot on a VHD on top of the system root, if the second drive isn't big enough the installer will not thrown an error and you will get a bad installation of Azure Stack.
You need to download the following files :
- Script to check the requirements (not mandatory, but useful) link
- A Windows Server 2016 Eval Iso lien
- Azure Stack Development Kit lien
Installation
Phase 1
- Extract the ADSK using AzureStackDevelopmentKit.exe
- Copy "CloudBuilder.vhdx" on the root of you root (c:)
Phase 2
In a Shell Powershell as Administrator :
# Variables
$Uri = 'https://raw.githubusercontent.com/Azure/AzureStack-Tools/master/Deployment/asdk-installer.ps1'
$LocalPath = 'C:AzureStack_Installer'
# Create folder
New-Item $LocalPath -Type directory
# Enforce usage of TLSv1.2 to download from GitHub
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
# Download file
Invoke-WebRequest $uri -OutFile ($LocalPath + '' + 'asdk-installer.ps1')
cd $LocalPath
.asdk-installer.ps1
Follow "Prepare Environnement"
- Browse to your "cloudbuilder.vhdx" from phase 1 (c:CloudBuilder.vhdx), without ticking the Add Drivers (if your hardware is fully supported as a Dell ASDK Ready Node for example)
- Submit your administrator's credentials of the local machine.
- You can add a Computer Name for the Azure Stack, if you don't it will be generated. You must choose something different than AzureStack
- If you have a Dhcp, you don't need to add a Static Configuration, otherwise, add a static configuration instead (with DNS and Gateway)
- Reboot
Phase 3
While the host is rebooting, if the Windows bootmanager ask to choose between Azure Stack and Windows Server 2016, choose Azure Stack.
Login in the Azure Stack, take care of the keyboard layout, by default it's a QWERTY.
In a PowerShell Shell, as Administrator launch the ASDK deployment. (Not in a Powershell ISE)
cd C:CloudDeploymentSetup
$adminpass = Get-Credential Administrator -Message "Please provide the password for Local Administrator"
$aadcred = Get-Credential<EMAIL_ADDRESS>-Message "Please provide the password for Azure AD"
.InstallAzureStackPOC.ps1 -AdminPassword $adminpass.Password `
-InfraAzureDirectoryTenantName "yourazuread.onmicrosoft.com" `
-TimeServer "<IP_ADDRESS>"`
-InfraAzureDirectoryTenantAdminCredential $aadcred`
-DNSForwarder "<IP_ADDRESS>" `
-NatIPv4Address "<IP_ADDRESS>" `
-NatIPv4DefaultGateway "<IP_ADDRESS>" `
-NatIPv4Subnet "<IP_ADDRESS>/28"
Warning: This process take few hours (between 10 and 15)
> You can change parameter in the script, but double check they are correct. If you have trouble, you may need to restart the whole process.
> The nat parameters must be changed to reflect your network.
Phase 4
After the process is complete, you have now a cool ASDK, with nothing in it. You need to deploy services as a Cloud Operator
- Login with azurestackazurestackadmin on the ASDK host
- Get the path of your Windows Server 2016, mine is 'D:ISO'
- Open a new Powershell as Administator :
# Create directory on the root drive.
New-Item -ItemType Directory -Force -Path "C:ConfigASDK"
Set-Location "C:ConfigASDK"
# Download the ConfigASDK Script.
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-Webrequest http://bit.ly/configasdk -UseBasicParsing -OutFile ConfigASDK.ps1
.ConfigASDK.ps1 -azureDirectoryTenantName "yourazuread.onmicrosoft.com" -authenticationType AzureAD `
-downloadPath "D:ASDKfiles" -ISOPath "D:ISOWS2016EVAL.iso" -azureStackAdminPwd 'Azure Stack Administrator password' `
-VMpwd 'a new password' -azureAdUsername<EMAIL_ADDRESS>-azureAdPwd 'Azure Ad password' `
-registerASDK -useAzureCredsForRegistration -azureRegSubId "Id de la subscription Azure"
Phase 5
Open a Browser on your ASDK Host and go to https://adminportal.local.azurestack.external
or the "public" endpoint https://portal.local.azurestack.external
and enjoy.


Object Oriented Programming
More Ruby Class Concepts
Jan 29, 2015
Continue to the ruby class basic blog article, I am going to talk more about ruby class, including class methods and class variables, today.
Getter, Setter, Attributes
1. Getter: when you return a variable using a method, getter is used.In Figure 1, after initialize method, I create get_name method to return @name. When I call mydog.get_name, it returns "Lulu". 2. Setter: when you change a variable, method_name=(argument) is used. Let's look at the example below. In line 15, I created mydog named "Lulu", but I called set_name method to change the name to "Brian." Then, when I printed mydog.get_name in line 18, it became "Brian." (I attached the console below the codes to show the result.)
However, when you want to call or change several variables, creating methods for each takes too much time. To solve the problem, we can use attributes.
3. Attributes: There are three different attributes we can use instead of getter, setter methods.
i) attr_reader :name ii) attr_writer :name iii) attr_accessor :name In line 2, I added "attr_reader :name" and commented out get_name method from line 8 to 10. Since attr_reader :variable creates getter method for the variable, we can simply call mydog.name in line 18 to get a result "Lulu." We can add many variables with commas like this: "attr_reader :name, :age, :breed
In the same way, "attr_writer" can be used instead of setter method, and "attr_accessor" for both getter and setter methods.
Class Method
So far, to call a method in a class, we had to create a new instance (e.g)mydog) and provide information for arguments. However, class method can be called without instances. The difference from instance method is adding 'self.' in front of method name. In figure 4, you may notice a class method, self.make_bark. In line 12, without creating a new instance for Dog class, I call make_bark using class name 'Dog.' Since the method is for the class, we cannot call it with instance_name.method. Assuming we have mydog instance named "Lulu," mydog.make_bark will not work.Class Variable
Different from instance variable (@variable_name), class variable has '@@' in front of its name (e.g)@@count). Let's look at the code below. In line 2, there's a class variable @@count = 0. It is returned in self.count method in line 9. Since the count method is a class method, we can call it with the class name Dog.In line 19 and in line 23, I created mydog instance and yourdog instance each. When I called 'mydog.bark', the result is "lulu bow wow!".
Similar to class methods, we cannot call it with instance_name.method. So, I called Dog.count in line 21 and the result is "1" as terminal shows.
When yourdog and mydog bark one time each in line 24 and 27, the terminal shows @@count value 2 and three as Dog.count result. It means, regardless of instance, the @@count value increases when instance.bark is called.


About us
Coffee
Pizza
Barista courses
Friday night is pizza night at Exe Coffee Roasters
Menu for Friday 1st December
Margherita
6.50
Fig & Proscuitto
8.50
Join us in the roastery for our unique pizza nights
Fully licensed


Affiche enseigne, Pavillon Blanc Henri Molina, centre d'art et médiathèque, Colomiers
Visual identity, Lieu-Commun, Toulouse
Poster sign, 120x176cm, Lieu-Commun, Toulouse
Graphic design, mural painting, Fonsorbes
exhibition "l'etoffe des rêves", floor painting, Pavillon Blanc Henry Molina, Colomiers
Visual identity, mural painting and cartography, Saint-Lys
DNSEP project, webdesign and signage painting in urban space, Toulouse, 2020
isdaT 2019 open days, visual identity, print & web, 2019
visual identity, graphic design for bike clothings, Ordan-Larroque, 2020
Painting in urban space, Toulouse, 2020
Master essay, Toulouse, 2019
Visual identity, webdesign, signage design and editorial design
Visual identity and webdesign
Wall painting workshop


Actual conversation:
Kid staying with me: I love anime!
Me: Oh yeah, what kind?
Kid: Attack on Titan and Sword Art Online
Me: t.co/BLlfxsWo4…


It saves server space (which translates into time and money) to remove folders and files that are no longer being used. Here are places to look for files and folders that can be deleted.
Download folder → This contains anything you've downloaded over time, installers, videos, jpegs, etc. Please remove anything that is not currently pertinent.
H:/ → This is your Home directory. If there is anything here that is pertinent to the department, please move that data to the F:/ and delete from your H:/. If it is no longer relevant to your day to day job, please delete.
F:/ → This is the departmental share. Please work with members of your department to determine what files are no longer relevant and remove them.
P:/ → The Public folders contain the largest portion of outdated files. This is also the area that is most susceptible to malware infection due to the sheer volume of files and the minimal security restrictions in place that allow these directories to remain "Public."
Old files no longer needed (a good rule of thumb is to sort files by last date accessed and to delete those not looked at in the last 18 months).
Drafts.
Multi-media files where copies are available elsewhere (these take up HUGE amounts of space).
Duplicates.
Featured Archives Item: Scene of audience wearing 3D glasses for the production of "Monsters of Grace" during BAM Next Wave Festival (1998).View item in BAM Digital Archives
Featured Archives Item: Postcard featuring the Brooklyn Academy of Music (1938).View item in BAM Digital Archives


Insert an intro about my portfolio here.
Make sure to keep all page content within the #page-content-wrapper
.
And Jimmy is number 100 and 1, knows one day... he'll be one...
Watch him. Watch him go...
content goes here
Objective: Build a CodePen.io app that is functionally similar to this: https://codepen.io/FreeCodeCamp/full/YqLyXB/.
Rule #1: Don't look at the example project's code. Figure it out for yourself.
Rule #2: Fulfill the below user stories. Use whichever libraries you need. Give it your own personal style.
Rule #3: You can use Bootstrap, or any other framework of your choice.
User Story: I can access all of the portfolio webpage's content just by scrolling.
User Story: I can click different buttons that will take me to the portfolio creator's different social media pages.
User Story: I can see thumbnail images of different projects the portfolio creator has built (if you haven't built any websites before, use placeholders.)
My Projects!
User Story: I navigate to different sections of the webpage by clicking buttons in the navigation.
Don't worry if you don't have anything to showcase on your portfolio yet - you will build several apps on the next few CodePen challenges, and can come back and update your portfolio later.
There are many great portfolio templates out there already. However, you should consider building your portfolio page as much as you can from the ground up. Using Bootstrap can help make this process much easier for you.
Note that CodePen.io overrides the Window.open() function, so if you want to open windows using jQuery, you will need to target invisible anchor elements
Remember to use Read-Search-Ask if you get stuck.
When you are finished, click the "I've completed this challenge" button and include a link to your CodePen.
Other rojects I am working on (under construction): http://codepen.io/DarrenfJ/
You can get feedback on your project by sharing it with your friends on Facebook.
Some junk about links and creative commons etc
Contacts!


| Quick | Intuiative | Easy |
|---|---|---|
| Polar.JS uses WebGL alongside a lightweight, component based architecture to privide competitive speeds. | The entity component system architecture lends itself to complex and modular development tasks. | Polar.JS provides a simple JavaScript or TypeScript API accessible by all skill levels. |


OK
Search
Share this map
Gallery
Add Comment
Rating
Comment
Submit
Cancel
Search Results
From
Comments
Photo Gallery


---
title: "It's a Nintendo trivia kaaaa-wiiiizzz!"
date: 2012-07-04T14:00:00Z
topic: nsidr
mood: default
featureImage: "https://static.nsidr.com/images/inline/img-101-inline.jpg"
authors:
- Amber Ahlborn
tags:
- nintendo trivia
- quiz
---
It sure does look different around here, doesn't it? The new and improved N-Sider comes with 100% more comments, and what better way to celebrate this feature than with a fun little round of trivia? Think you know your Nintendo esoterica? Step on in and see how you fare in my tricky ten-question quiz.
I present to you this ten-question challenge. Post your results in the comments section. Some questions may have more than one right answer. Prizes include self-satisfaction, geek street cred, and that smug look only smart people wear! How many can you answer without running to Google for help? Let's find out.
1. When the end credits rolled for the American version of Super Mario Bros. 2, there was an error. What two characters had their names swapped?
2. What do Mario and Optimus Prime have in common?
3. Donkey Kong landed Nintendo in hot water with what movie studio and why?
4. In what game can Kirby be found as an enemy monster?
5. Where does this haiku come from?
Like the moon over
the day my genius and brawn
are lost on these fools
6. The Super Game Boy made it possible to play Game Boy games on the TV via the SNES. It also contained some fun Easter eggs. What were they?
7. Pols Voice was an enemy that appeared in the The Legend of Zelda. There was a special way to kill it, but only in Japan. What was this method and why was it in Japan only?
8. What was the first game to feature Totaka's Song?
9. To what species does Falco Lombardi belong?
10. Parents were in an uproar! What issue of Nintendo Power had the most controversial cover and why?
So how did you do? The answers are below, but no premature peeking! You have to earn that smug look!
Answer key:
1.
Birdo, our lovable egg spitter, and the ostrich-looking critter named Ostro had their names switched during the end credits crawl.
2.
A voice actor! Before Mario became super in his own cartoons, he was an antagonist to Donkey Kong during the DK segments of Saturday Supercade and was voiced by Peter Cullen.
3.
MCA Universal studios sued Nintendo over the name and premise of Donkey Kong due to similarities with their King Kong property. Ultimately the court found that Universal had never trademarked King Kong, it was in the public domain, and Nintendo won the lawsuit.
4.
An evil, Link-eating version of Kirby can be found in Eagle's Tower in The Legend of Zelda: Link's Awakening.
5.
Who knew Bowser was so poetic? This is from Super Mario RPG: Legend of the Seven Stars.
6.
On the TV, the Game Boy games were framed within selectable borders. If left idle, the borders would begin to animate.
7.
Pols Voices were sensitive to sound. Yelling into the Famicom's built in microphone would kill them. This method was unique to Japan as the NES lacked a mic.
8.
Nope, not Mario Paint. The first appearance of the song was in a Game Boy game titled X. X only saw release in Japan.
9.
Falco is a Blue Pheasant (Phasianus colchicus). If you thought he was some sort of falcon, you're in good company. Peppy Hare? Slippy Toad? Fox McCloud? Yeah, I thought the name Falco implied he was a falcon too.
10.
Look no further than issue #2. The cover featured Simon Belmont holding onto Dracula's severed head. Parents called in complaining that it gave their kids nightmares. Ahh, such bygone days of pre-Mortal Kombat innocence.


|
Name
|
Type
|
Description
|
| atBootIpV6Enabled | xsd:boolean |
If true then dual IPv4/IPv6 stack enabled else IPv4 only.
Since vSphere API 4.1
|
| consoleIpRouteConfig | HostIpRouteConfig |
IP route configuration of the service console.
|
| consoleVnic | HostVirtualNic[] |
Virtual network adapters configured for use by the service console.
The service
console uses this network access for system management and bootstrapping
services like network boot.
The two sets of virtual network adapters are mutually exclusive.
A virtual network adapter
in this list cannot be used for things like VMotion. Likewise, a
virtual network adapter in the other list cannot be used by the
service console.
|
| dhcp | HostDhcpService[] |
DHCP Service instances configured on the host.
Since VI API 2.5
|
| dnsConfig | HostDnsConfig | Deprecated.
As of vSphere API 5.5, which is moved to
each NetStackInstance. For this property in NetworkInfo,
Get operation will only return its value of default NetStackInstance.
Client-side DNS configuration.
|
| ipRouteConfig | HostIpRouteConfig | Deprecated.
As of vSphere API 5.5, which is moved to
each NetStackInstance. For this property in NetworkInfo,
Get operation will only return its value of default NetStackInstance.
IP route configuration.
|
| ipV6Enabled | xsd:boolean |
Enable or disable IPv6 protocol on this system.
Since vSphere API 4.0
|
| nat | HostNatService[] |
NAT service instances configured on the host.
Since VI API 2.5
|
| netStackInstance | HostNetStackInstance[] |
List of NetStackInstances
Since vSphere API 5.5
|
| opaqueNetwork | HostOpaqueNetworkInfo[] |
List of opaque networks
Since vSphere API 5.5
|
| opaqueSwitch | HostOpaqueSwitch[] |
List of opaque switches configured on the host.
Since vSphere API 5.5
|
| pnic | PhysicalNic[] |
Physical network adapters as seen by the primary operating system.
|
| portgroup | HostPortGroup[] |
Port groups configured on the host.
|
| proxySwitch | HostProxySwitch[] |
Proxy switches configured on the host.
Since vSphere API 4.0
|
| routeTableInfo | HostIpRouteTableInfo | Deprecated.
As of vSphere API 5.5, which is moved to
each NetStackInstance. For this property in NetworkInfo,
Get operation will only return its value of default NetStackInstance.
IP routing table
Since vSphere API 4.0
|
| vnic | HostVirtualNic[] |
Virtual network adapters configured on the host (hosted products)
or the vmkernel.
In the hosted architecture, these network adapters are used by the
host to
communicate with the virtual machines running on that host. In the
VMkernel architecture, these virtual network adapters provide the
ESX Server with
external network access through a virtual switch that is bridged to a
physical network adapter. The VMkernel uses these network adapters
for features such as VMotion, NAS, iSCSI, and remote MKS connections.
|
| vswitch | HostVirtualSwitch[] |
Virtual switches configured on the host.
|
|
Properties inherited from DynamicData |
| None |


Lovehoney's early Black Friday sale includes a Wild Weekend Couple’s Sex Toy Kit and Vibrating Knickers
There’s up to 50% off a bumper range of adult goodies at Lovehoney to help couples spice up the festive season
by Linda HowardLovehoney is offering up to 50% off sex toys and lingerie in its early access deals ahead of Black Friday.
The bumper range of discounts on best selling products runs until noon on Thursday, November 28.
And you can still get your hands on Lovehoney’s sex toy advent calendar which contains 24 kinky surprises to open in December.
The ultra-luxurious bumper box of surprises includes everything you need to stoke the fires of desire during the cold, dark days of winter including sex toys, bondage gear and cheeky items like super-sexy Christmas crackers.
And here’s the best bit - the giant, luxury calendar contains £229 worth of erotic treats for just £100 - buy it here .
A Lovehoney spokesperson said: “Black Friday and Cyber Monday are among the busiest days of the year at Lovehoney , which is why we are offering the very best prices to our loyal customers with a range of fantastic bargains.
“As well as ‘hero products’ there are fresh deals running on the website, so it is a great time to bag a pre-Christmas bargain.”
Shop the Lovehoney deals here
Highlights from the early access Black friday sale
Lovehoney Thrill Seeker Remote Control Love Egg Vibrator in black and pink - down from £34.99 to £17.50
Lovehoney Hot Date Remote Control Vibrating Knickers in black (regular and plus size) - down from £39.99 to £20
Lovehoney Jessica Rabbit Vibrator Kit (4 piece) - down from £49.99 to £29.99
Lovehoney Twilight Temptation Halterneck Basque Set in black (one size and plus size) - down from £29.99 to £17.99
Desire Luxury App Controlled USB Rechargeable Knicker Vibrator in purple - down from £119.99 to £83.99
Lovehoney G-Kiss Fluttering Clitoral and G-Spot Vibrator - down from £19.99 to £13.99
Desire Luxury Rechargeable Strapless Strap-On Dildo Vibrator - down from £79.99 to £55.99
Lovehoney Wild Weekend Mega Couple’s Sex Toy Kit (11 piece) - down from £69.99 to £48.99


Leverage agile frameworks to provide a robust synopsis for high level overviews. Iterative approaches to corporate strategy foster collaborative thinking to further the overall value proposition. Organically grow the holistic world view of disruptive innovation via workplace diversity and empowerment.
Strategy
Iterative approaches to corporate strategy foster collaborative thinking to further the overall value proposition.
]
How We Work
Iterative approaches to corporate strategy foster collaborative thinking to further the overall value proposition.
]
Places We Work
Iterative approaches to corporate strategy foster collaborative thinking to further the overall value proposition.
Collaboration
Iterative approaches to corporate strategy foster collaborative thinking to further the overall value proposition.
Let's Work Together
Leverage agile frameworks to provide a robust synopsis for high level overviews. Iterative approaches to corporate strategy foster collaborative thinking to further the overall value proposition. Organically grow the holistic world view of disruptive innovation via workplace diversity and empowerment.


{include file="common/header" /} {include file="common/css" /}
管理员名称
密码
验证码
Submit
{include file="common/js" /}


Version: 1.0.5
This plugin adds export capabilities to all amCharts products - charts and maps.
It allows annotating and exporting chart or related data to various bitmap, vector, document or data formats, such as PNG, JPG, PDF, SVG, JSON, XLSX and many more.
Please note that due to security measures implemented in modern browsers, some or all export options might not work if the web page is loaded locally (via file:///) or contain images loaded from different host than the web page itself.
bundled CSS file. I.e.:
<script src="amcharts/plugins/export/export.min.js"></script>
<link type="text/css" href="../export.css" rel="stylesheet">
(this needs to go after all the other amCharts includes)
export
with default options:AmCharts.makeChart( "chartdiv", {
...,
"export": {
"enabled": true,
"libs": {
"path": "../libs/"
}
}
} );
AmCharts.makeChart( "chartdiv", {
...,
"export": {
"enabled": true,
"libs": {
"path": "../libs/"
},
"menu": [ {
"class": "export-main",
"menu": [ {
"label": "Download",
"menu": [ "PNG", "JPG", "CSV" ]
}, {
"label": "Annotate",
"action": "draw",
"menu": [ {
"class": "export-drawing",
"menu": [ "PNG", "JPG" ]
} ]
} ]
} ]
}
} );
The plugin relies on a number of different libraries, to export images, draw annotations or generate download files.
Those libraries need to be loaded for the plugin to work properly.
There are two ways to load them. Choose the one that is right:
All libraries required for plugin operation are included withing plugins /libs subdirectory.
If you want the plugin to load them on-demand (when it's needed for a certain
operation), make sure you set the path
proprty under libs
object to a
relative or absolute url.
If you are using relative url, note that it is relative to the web page you are displaying your chart on, not the export.js library.
You can also load all those JavaScript libraries by <script>
tags. Since
loading of libraries is on by default you will need to turn it off by setting
"libs": { "autoLoad": false }
Here is a full list of the files that need to be loaded for each operation:
| File | Located in | Required for |
|---|---|---|
| blob.js | libs/blob.js/ | Exporting to any image format |
| fabric.min.js | libs/fabric.js/ | Any export operation |
| FileSaver.js | libs/FileSaver.js/ | Used to offer download files |
| pdfmake.min.js | libs/pdfmake/ | Export to PDF format |
| vfs_fonts.js | libs/pdfmake/ | Export to PDF format |
| jszip.js | libs/jszip/ | Export to XLSX format |
| xlsx.js | libs/xlsx/ | Export to XLSX format |
| Property | Default | Description |
|---|---|---|
| backgroundColor | #FFFFFF | RGB code of the color for the background of the exported image |
| enabled | true | Enables or disables export functionality |
| legend | {} | Places the legend in case it is within an external container |
| fileName | amCharts | A file name to use for generated export files (an extension will be appended to it based on the export format) |
| libs | 3rd party required library settings (see the above section) | |
| menu | [] | A list of menu or submenu items (see the next chapter for details) |
| fabric | {} | Overwrites the default drawing settings (fabricJS library) |
| pdfMake | {} | Overwrites the default settings for PDF export (pdfMake library) |
| removeImages | true | If true export checks for and removes "tainted" images that area lodead from different domains |
| divId | ID or a reference to div object in case you want the menu in a separate container. |
Plugin includes a way to completely control what is displayed on export menu. You can set up menus, sub-menus, down to any level. You can even add custom items there that execute your arbitrary code on click. It's so configurable it makes us sick with power ;)
The top-level menu is configured via menu
property under export
. It should
always be an array, even if you have a single item in it.
The array items could be either objects or format codes. Objects will allow you to specify labels, action, icon, child items and even custom code to be executed on click.
Simple format codes will assume you need an export to that format.
Here's a sample of the simple menu setup that allows export to PNG, JPG and CSV:
"export": {
"enabled": true,
"libs": {
"path": "../libs/"
},
"menu": [ {
"class": "export-main",
"menu": [ "PNG", "JPG", "CSV" ]
} ]
}
The above will display a menu out of three options when you hover on export icon:
When clicked the plugin will trigger export to a respective format.

Please note that we have wrapped out menu into another menu item, so that only the icon is displayed until we roll over the icon. This means that technically we have a two-level hierarchical menu.
If we opmitted that first step, the chart would simply display a format list right there on the chart.
However, you can do so much more with the menu.
Let's add more formats and organize image and data formats into separate submenus.
To add a submenu to a menu item, simply add a menu
array as its own property:
"export": {
"enabled": true,
"libs": {
"path": "../libs/"
},
"menu": [ {
"class": "export-main",
"menu": [ {
"label": "Download as image",
"menu": [ "PNG", "JPG", "SVG" ]
}, {
"label": "Download data",
"menu": [ "CSV", "XLSX" ]
} ]
} ]
}
Now we have a hierarchical menu with the following topology:
We can mix "string" and "object" formats the way we see fit, i.e.:
"menu": [
"PNG",
{ "label": "JPEG",
"format": "JPG" },
"SVG"
]
The magic does not end here, though.
Just like we set label
and format
properties for menu item, we can set
click
as well.
This needs to be a function reference. I.e.:
"menu": [
"PNG",
{ "label": "JPEG",
"click": function () {
alert( "Clicked JPEG. Wow cool!" );
} },
"SVG"
]
By passing the menuReviver
callback you are to adapt or completely replace the
generated menu item before it gets appended to the list (ul
).
It retrieves two arguments and it needs to return a valid DOM element.
"menuReviver": function(item,li) {
li.setAttribute("class","something special");
return li;
}
In case you don't like our structure, go ahead and write your own recursive function
to create the menu by the given list configured through menu
.
"menuWalker": function(list,container) {
// some magic to generate the nested lists using the given list
}
Adding menu item to print the chart or map is as easy as adding export ones. You
just use "PRINT" as format
. I.e.:
"menu": [
"PNG",
"SVG",
"PRINT"
]
Or if you want to change the label:
"menu": [
"PNG",
"SVG",
{ "format": "PRINT",
"label": "Print Chart"
}
]
OK, this one is so cool, you'll need a class 700 insulation jacket.
By default each menu item triggers some kind of export. You can trigger an
"annotation" mode instead by including "action": "draw"
instead.
"menu": [ {
"class": "export-main",
"menu": [ {
"label": "Download",
"menu": [ "PNG", "JPG", "CSV", "XLSX" ]
}, {
"label": "Annotate",
"action": "draw"
} ]
} ]
Now, when you click on the "Annotate" item in the menu, the chart will turn into an image editor which you can actual draw on.
As cool as it may sound, there's little we can do if the annotated chart if we can't save the result image.
That's where sub-menus come for the rescue again:
"menu": [ {
"class": "export-main",
"menu": [ {
"label": "Download",
"menu": [ "PNG", "JPG", "CSV", "XLSX" ]
}, {
"label": "Annotate",
"action": "draw",
"menu": [ {
"class": "export-drawing",
"menu": [ "JPG", "PNG", "SVG", PDF" ]
} ]
} ]
} ]
Now, when you turn on the annotation mode, a submenu will display, allowing to export the image into either PNG,JPG,SVG or PDF.
And that's not even the end of it. You can add menu items to cancel, undo, redo.
"menu": [ {
"class": "export-main",
"menu": [ {
"label": "Download",
"menu": [ "PNG", "JPG", "CSV", "XLSX" ]
}, {
"label": "Annotate",
"action": "draw",
"menu": [ {
"class": "export-drawing",
"menu": [ {
"label": "Edit",
"menu": [ "UNDO", "REDO", "CANCEL" ]
}, {
"label": "Save",
"format": "PNG"
} ]
} ]
} ]
} ]
| Property | Description |
|---|---|
| action | Set to "draw" if you want the item to trigger annotation mode |
| class | Class name applied to the tag |
| click | Function handler invoked upon click on menu item |
| format | A format to export chart/map to upon click (see below for a list of available formats) |
| icon | Icon file (will use chart's pathToImages if the URL is not full) |
| label | Text label to be displayed |
| menu | An array of submenu items |
| title | A title attribute of the link |
| backgroundColor | The background color of the canvas |
| fileName | A file name to use for generated export files (an extension will be appended to it based on the export format) |
| extension | File extension for the generated export file (uses format default if not defined) |
| mimeType | Internet media type to generate the export file (usses format default if not defined) |
| pageSize | a string or { width: number, height: number } (details) |
| pageOrientation | by default we use portrait, you can change it to landscape if you wish (details) |
| pageMargins | [left, top, right, bottom] or [horizontal, vertical] or just a number for equal margins (details) |
| content | array of elements which represents the content (details) |
| freeDrawingBrush | Object which hold the settings of the brush e.G.: { color: "#FF00FF" } |
Available format
values:
When exporting to PDF, you can set and modify the content of the resulting document. I.e. add additional text and/or modify image size, etc.
To do that, you can use menu item's content
property.
Each item in content
represents either a text line (string) or an exported
image.
To add a text line, simply use a string. It can even be a JavaScript variable or a function that returns a string.
To include exported image, use image: "reference"
.
Additionally, you can add fit
property which is an array of pixel dimensions,
you want the image to be scaled to fit into.
Here's an example of such export menu item:
{
"format": "PDF",
"content": [ "Saved from:", window.location.href, {
"image": "reference",
"fit": [ 523.28, 769.89 ] // fit image to A4
} ]
}
| Property | Description |
|---|---|
| pageSize | a string or { width: number, height: number } |
| pageOrientation | by default we use portrait, you can change it to landscape if you wish |
| pageMargins | [left, top, right, bottom] or [horizontal, vertical] or just a number for equal margins |
| content | array of elements which represents the content (full description) |
| Pagesize | Dimensions in pixel |
|---|---|
| 4A0 | [4767.87, 6740.79] |
| 2A0 | [3370.39, 4767.87] |
| A0 | [2383.94, 3370.39] |
| A1 | [1683.78, 2383.94] |
| A2 | [1190.55, 1683.78] |
| A3 | [841.89, 1190.55] |
| A4 | [595.28, 841.89] |
| A5 | [419.53, 595.28] |
| A6 | [297.64, 419.53] |
| A7 | [209.76, 297.64] |
| A8 | [147.40, 209.76] |
| A9 | [104.88, 147.40] |
| A10 | [73.70, 104.88] |
| B0 | [2834.65, 4008.19] |
| B1 | [2004.09, 2834.65] |
| B2 | [1417.32, 2004.09] |
| B3 | [1000.63, 1417.32] |
| B4 | [708.66, 1000.63] |
| B5 | [498.90, 708.66] |
| B6 | [354.33, 498.90] |
| B7 | [249.45, 354.33] |
| B8 | [175.75, 249.45] |
| B9 | [124.72, 175.75] |
| B10 | [87.87, 124.72] |
| C0 | [2599.37, 3676.54] |
| C1 | [1836.85, 2599.37] |
| C2 | [1298.27, 1836.85] |
| C3 | [918.43, 1298.27] |
| C4 | [649.13, 918.43] |
| C5 | [459.21, 649.13] |
| C6 | [323.15, 459.21] |
| C7 | [229.61, 323.15] |
| C8 | [161.57, 229.61] |
| C9 | [113.39, 161.57] |
| C10 | [79.37, 113.39] |
| RA0 | [2437.80, 3458.27] |
| RA1 | [1729.13, 2437.80] |
| RA2 | [1218.90, 1729.13] |
| RA3 | [864.57, 1218.90] |
| RA4 | [609.45, 864.57] |
| SRA0 | [2551.18, 3628.35] |
| SRA1 | [1814.17, 2551.18] |
| SRA2 | [1275.59, 1814.17] |
| SRA3 | [907.09, 1275.59] |
| SRA4 | [637.80, 907.09] |
| EXECUTIVE | [521.86, 756.00] |
| FOLIO | [612.00, 936.00] |
| LEGAL | [612.00, 1008.00] |
| LETTER | [612.00, 792.00] |
| TABLOID | [792.00, 1224.00] |
The plugin comes with a default CSS file export.css
. You just need to include
it on your page.
Feel free to override any styles defined in it, create your own version and modify as you see fit.
If you choose to modify it, we suggest creating a copy so it does not get overwritten when you update amCharts or plugin.
We explained how you can define custom functions to be executed on click on export menu items.
Those functions can tap into plugin's methods to augment it with some custom functionality.
Here's an example:
menu: [ {
label: "JPG",
click: function() {
this.capture({},function() {
this.toJPG( {}, function( data ) {
this.download( data, "image/jpg", "amCharts.jpg" );
});
});
}
} ]
The above will use plugin's internal capture
method to capture it's current state and toJPG()
method to export the chart to JPEG format.
Yes, you're right, it's the exact equivalent of just including "JPG" string. The code is here for the explanatory purposes.
Here's a full list of API functions available for your consumption:
| Function | Parameters | Description |
|---|---|---|
| toJPG | (object) options, (function) callback | Prepares a JPEG representation of the chart and passes the binary data to the callback function |
| toPNG | (object) options, (function) callback | Prepares a PNG representation of the chart and passes the binary data to the callback function |
| toSVG | (object) options, (function) callback | Prepares a SVG representation of the chart and passes the binary data to the callback function |
| toPDF | (object) options, (function) callback | Prepares a PDF representation of the chart and passes the binary data to the callback function |
| toJSON | (object) options, (function) callback | Prepares a JSON and passes the plain data to the callback function |
| toCSV | (object) options, (function) callback | Prepares a CSV and passes the plain data to the callback function |
| toXLSX | (object) options, (function) callback | Prepares a XLSX representation of the chart and passes the binary data to the callback function |
| toBlob | (object) options, (function) callback | Prepares a BLOB and passes the instance to the callback function |
| toCanvas | (object) options, (function) callback | Prepares a Canvas and passes the element to the callback function |
| toArray | (object) options, (function) callback | Prepares an Array and passes the data to the callback function |
This plugin requires at least 3.13 version of JavaScript Charts, JavaScript Stock Chart or JavaScript Maps.
The export will also need relatively recent browsers.
IE10 and up are supported.
Partial support for IE9 will be implemented in the future versions.
IE8 and older are not supported I'm afraid. Hey, it's time to upgrade!
They're all in subdirectory /examples.
You're encouraged to modify, extend and make derivative plugins out of this plugin.
You can modify files, included in this archive or, better yet, fork this project on GitHub:
https://github.com/amcharts/export
We're curious types. Please let us know<EMAIL_ADDRESS>if you do create something new out of this plugin.
This plugin is licensed under Apache License 2.0.
This basically means you're free to use or modify this plugin, even make your own versions or completely different products out of it.
Please see attached file "license.txt" for the complete license or online here:
http://www.apache.org/licenses/LICENSE-2.0


---
layout: timeline
title: CV
permalink: /cv
---
Experience
06/2016 – 01/2017
Senior Software Engineer
SI Labs GmbH | Berlin (DE)
https://www.si-labs.com/
- Design and implementation of Java microservices
- Integrating APIs from public authorities
- Development of an Android App
JavaEE
SparkJava
Guice
MongoDB
Morphia
Maven
Android SDK
06/2015 – 03/2016
Senior Software Engineer
eBay GmbH | Berlin (DE)
https://www.ebay.de
- Implementation of fraud detection and fraud prevention processes
- Development of a review system for car dealers
- Strong focus on microservice architecture with REST APIs
- Collaboration with other company departments
JavaEE
Spring Framework
MongoDB
Morphia
Maven
React
07/2012 – 03/2015
Co-Founder and CTO
Labfolder GmbH | Berlin (DE)
https://www.labfolder.com
- Design, planning and development of an electronic lab notebook (ELN) as cloud-, server- and desktop version, as well as mobile apps for iOS and Android
- Planning, setup and maintenance of required technical infrastructure
- Leading the development team (6 developers) including team planning and recruiting
- Definition and further development of the system architecture
- Planning and implementation of a continuous integration environment to ensure a
continuous non-interruptable rollout process
- Optimization of application performance and server load balancing
- Business development (customers, cooperation partners, investors)
JavaEE
Spring Framework
Hibernate
Apache Solr
MySQL
Maven
jQuery
AngularJS
Bootstrap CSS
Apache Tomcat
Nginx
Android SDK
11/2010 – 06/2012
Software Engineer
mobile.de GmbH | Berlin (DE)
https://www.mobile.de
- Reimplementation of the image upload functionality
- Optimization of this feature for parallel uploads to shorten waiting time for customers
- Extension of this feature by implementing watermarks and text-in-image rendering
- Implementation of business backend logic
- Improving performance for high system load
JavaEE
Spring MVC
Hibernate
MySQL
Maven
03/2009 – 10/2010
Co-Founder and CTO
Praktikum.info GmbH | Mainz (DE)
http://www.praktikum.info
- Design, planning and development of a job board for internships and entry level jobs
- Definition and implementation of functionalities and processes
- Definition and development of frontend and backend components
- Optimization of search performance using Apache Lucene
- Planning and setup of server load balancing
JavaEE
Spring MVC
Spring Security
Lucene
Hibernate
MySQL
Ant
jQuery
Apache Tomcat
08/2008 – 03/2009
Software Engineer
Creative Weblogging Inc. | Palo Alto (DE)
http://www.creative-weblogging.com
- Backend development and data handling at a blogging network with 200 high traffic weblogs
- Improving performance for high system load
PHP
MySQL
Apache Webserver
06/2008 – 08/2008
Software Engineer Internship
Google Summer of Code
http://wiki.eclipse.org/RAP_Theme_Editor
- Development of an Eclipse IDE Plugin to edit theming files for the Eclipse Rich Ajax Platform
Java
SWT
Eclipse RCP
Education
09/2007 – 07/2008
Software Engineering (Bachelor of Science)
Coventry University (UK)
http://www.coventry.ac.uk
- Object oriented programming
- Project management
- Distributed systems
- Internet technologies
- E-commerce
09/2005 – 08/2007
Software Engineering (Bachelor of Science)
Hochschule Konstanz (DE)
https://www.htwg-konstanz.de
- Object oriented programming
- Software architectures
- Requirements engineering
- Quality assurance


--- redirect_from: "/lobbies/" ---
The Casual ARMS events are for all players to join in! Information on all our events are always found on the Casual ARMS Discord server. We run all games in their friend lobby mode, so you just need to add one of the lobby hosts as a Switch friend to participate.
Members of our event hosting team can volunteer to host a timeslot featuring the custom game modes of their choice, even if it's not one of our primary features!
All of our event hosts are volunteers that contribute their own time so that we can keep a wide variety of events and games available for our community to play! If you would like to get involved so that you can help with hosting our exisiting events or create new opportunities for people to play, contact Rashiko on our Discord server.


Topbar ...
Groupname
Successfully added
Successfully removed
Group Members
Result x - y from Total
Paging-Navigation...
External Group
Result x - y from Total
Paging-Navigation...


Please welcome to the world my new 👶, zipmigo! Zipmigo is a python package that aims to help analysts download and unarchive zipfiles remotely.
I was recently given the opportunity to develop some notebooks for teaching GIS and spatial econometrics in python for a professor of mine. Having taken the course previously, I had a good idea of the level of exposure students had to programming and the shell. I also began using the same code over and over again to download shape file archives, which is a sure sign you should start modularizing. With all of that in mind, I began working on a script to download and unzip those archives so that students working in the cloud wouldn't have to muddle around trying to figure out why a simple http request doesn't work, or wonder where their file got unzipped to.
Recrusive directory structure is one of my biggest pet peeves, so the true 🌟 of this little library is that it checks the top level of the archive and will unzip to the current directory or an appropriately named subdirectory.
You can get it via pip install zipmigo
, and check out some example functionality in the read me.


US Looting Syria Under Pretext of Securing Oil Fields – Russian General
MOSCOW (Sputnik) - The United States has been pillaging Syria under the pretext of securing its oil fields and funnelling ill-gotten money to anti-government forces, senior Russian defence official Col. Gen. Mikhail Mizintsev said.
"A number of US troops has been returned to positions east of the Euphrates River allegedly to protect oil rigs when in fact they are looting hydrocarbons for profit and with the goal of funding anti-government forces", he said.
The general, who heads Russia’s National Center for State Defence Control, said at a joint meeting of the Russian-Syrian coordination headquarters that US plundering deprived the Syrian people of their national wealth and prevented the economy from rebounding.
US President Donald Trump said earlier that his government intended to retain control of the oil fields in northeastern Syria despite scaling down its military presence in the area. About 90 percent of Syrian oil is concentrated to the east of the Euphrates River.
About 90 percent of Syrian oil reserves are concentrated to the east of the Euphrates River, the region that was previously a stronghold of Daesh* terror group and is now mainly controlled by Kurds allied with the United States.
In October, in the face of the Turkish cross-border offensive against the Kurdish militants, the United States initially withdrew its forces from northeastern Syria, but later announced that it would keep a small number of troops in the area to protect the oil fields.
*Daesh (also known as ISIS/ISIL/IS) is a terrorist group banned in Russia


WUFO
Home
Roster
Join
YouTube
Explore
La WUFA
BUF
Roster
2020 - 2021
Simon "Simp" Kessel
Kaizen "Grinch" Conroy
Danny "Danny-O" Ortiz
Ben "EV" Siciliano
Nicholas "Kerosene" Servedio
Oscar "Tractor" "Scar" Triggs
Alan "Lasuna" Sun
Jonah "Mike Jones" Tobin
Malcolm "Falcon" Bellairs
Elijah "Mo" Tamarchenko
Gordon "G" Elwood
Jacob "Jape" Posner
Nick "Bernice" Bern
Harry "Apron" Wilcox
Avery "CREAM" Hall
Rito "Burrito" Tanaka
Ajay "Age" Chatha
Jacques "Spout" Lybarger-Martel


enum Gopher::MenuEntryType
Defined in:
gopher/menu_entry_type.crEnum Members
-
TextFile =
0
-
PhoneBook =
2
-
Error =
3
-
BinHexBinary =
4
-
DOSBinary =
5
-
UUEncoded =
6
-
SearchEngine =
7
-
TelnetSession =
8
-
Binary =
9
-
Mirror =
10
-
GIF =
11
-
Image =
12
-
Telnet3270 =
13
-
HTMLFile =
14
-
Info =
15
-
SoundFile =
16
Class Method Summary
Instance Method Summary
- #bin_hex_binary?
- #binary?
- #dos_binary?
- #error?
- #gif?
- #html_file?
- #image?
- #info?
- #mirror?
- #phone_book?
- #search_engine?
- #sound_file?
- #submenu?
- #telnet3270?
- #telnet_session?
- #text_file?
- #to_char
- #uu_encoded?


Registration
Male
Female
Hall/Residence
Mensah Sarbah Hall
Akuafo Hall
Commonwealth Hall
Legon Hall
Volta Hall
Hilla Liman Hall
Alexander Kwapong Hall
Jean Nelson Hall
Elizabeth Hall
James Top Hall
Bani Hall
Africa Unity Hall


ggplot2 is my go-to tool in R for producing complex publication-quality graphics. Several years ago, I developed a tutorial that provides a basic introduction to ggplot2, along with an overview of more advanced functionality for researchers dealing with language data. Here are the slides (for posterity!). These slides were produced in RStudio using knitr.
- tutorial: slide show
- data sets: (1) Peterson and Barney (1952) vowels; (2) fakedata.txt; (3) fakedata_geo.txt
- .zip file: R code and data sets


Add your coffee tasting note preferences to generate a recommendation!
Update PreferencesCoffee Champ is a web app for suggesting coffee regions based off your tastes. It was created by Schuyler Mortimer, a coffee obsessed software engineer, as a fun project to play around with different technology. It is currently in the early alpha stages but plan to create even more coffee centered services and hope that one day it makes an actual good recommendation.


Today we discussed some of the basic matplotlib
functions and also had a look at different ways of running Jupyter Notebooks.
Creating subplots in matplotlib
¶
Back to basics¶
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
To show figure area:
plt.rcParams['figure.facecolor'] = '0.8' # grey background
Sample 1D array of size 100:
x = np.random.rand(100)
Two simplest ways of creating a bunch of subplots within one figure are shown below.
fig = plt.figure(figsize=(5,5))
ax_a = fig.add_subplot(131)
ax_b = fig.add_subplot(132)
ax_c = fig.add_subplot(133)
for iax in [ax_a, ax_b, ax_c]:
iax.plot(x)
fig, (ax_a, ax_b, ax_c) = plt.subplots(ncols=3)
for iax in [ax_a, ax_b, ax_c]:
iax.plot(x)
Grid of subplots with shared axes¶
Using the same handy subplots()
command, we can create an $2\times 3$ grid of subplots.
fig, axs = plt.subplots(nrows=3, ncols=2)
for iax in axs.flat:
iax.plot(x, color='r')
If the subplots have same axes, it's natural to leave axis labels only in outermost subplots. We can do this setting sharex
and sharey
keywords in subplots()
function to True
.
fig, axs = plt.subplots(nrows=3, ncols=2, sharex=True, sharey=True)
for iax in axs.flat:
iax.plot(x, color='r')
Gridspec
¶
A more sophisticated grid of subplots can be created using matplotlib.gridspec
submodule. The quickstart guide can be found on this page:
Removing empty space from matplotlib
figures¶
The issue of getting rid of white space in figures was also mentioned during the meeting. Matplotlib
has the feature called tight_layout()
that in some cases is enough to fit all subplots in a figure.
Example¶
import cartopy
import cartopy.crs as ccrs
fig = plt.figure(figsize=(30, 10))
ax = fig.add_subplot(111, projection=ccrs.PlateCarree())
ax.coastlines()
gl = ax.gridlines(draw_labels=True)
gl.xlabels_top = gl.ylabels_right = False
gl.xformatter = cartopy.mpl.gridliner.LONGITUDE_FORMATTER
gl.yformatter = cartopy.mpl.gridliner.LATITUDE_FORMATTER
lon, lat = np.linspace(-100,50,10), np.linspace(10,60,20)
arr = np.random.rand(20,10)
c = ax.contourf(lon, lat, arr)
cb = plt.colorbar(c, ax=ax, orientation='horizontal',
fraction=0.046, pad=0.04) # magically sets colorbar size correctly...
fig.tight_layout(pad=0)
And by the way, ax
is not just a matplotlib.axes._subplots.AxesSubplot
instance anymore, but has geoaxes attributes:
type(ax)
Jupyter Notebooks¶
Jupyter Notebooks can be launched not only on a local PC, but also on a remote host with the help of some web-services.
We took a glimpse at
- mybinder.org
- Example: test_binder (click 'launch binder')
- wakari.io
HTML(html)
Comments
comments powered by Disqus


Provides access to the response generated by the downstream application.
The response
, original_response
, and
entry
objects exposed by the Core caching engine are instances
of this class.
Response objects respond to a variety of convenience methods, including those defined in Rack::Response::Helpers, Rack::Cache::Headers, and Rack::Cache::ResponseHeaders.
Note that Rack::Cache::Response is not a subclass of Rack::Response and does not perform many of the same initialization and finalization tasks. For example, the body is not slurped during initialization and there are no facilities for generating response output.
Status codes of responses that MAY be stored by a cache or used in reply to a subsequent request.
Headers that MUST NOT be included with 304 Not Modified responses.
Rack response tuple accessors.
Rack response tuple accessors.
The time when the Response object was instantiated.
Rack response tuple accessors.
Create a Response instance given the response status code, header hash, and body.
# File lib/rack/cache/response.rb, line 32 def initialize(status, headers, body) @status = status.to_i @headers = Rack::Utils::HeaderHash.new(headers) @body = body @now = Time.now @headers['Date'] ||= @now.httpdate end
The age of the response.
# File lib/rack/cache/response.rb, line 148 def age (headers['Age'] || [(now - date).to_i, 0].max).to_i end
A Hash of name=value pairs that correspond to the Cache-Control header. Valueless parameters (e.g., must-revalidate, no-store) have a Hash value of true. This method always returns a Hash, empty if no Cache-Control header is present.
# File lib/rack/cache/response.rb, line 68 def cache_control @cache_control ||= CacheControl.new(headers['Cache-Control']) end
Set the Cache-Control header to the values specified by the Hash. See the cache_control method for information on expected Hash structure.
# File lib/rack/cache/response.rb, line 74 def cache_control=(value) if value.respond_to? :to_hash cache_control.clear cache_control.merge!(value) value = cache_control.to_s end if value.nil? || value.empty? headers.delete('Cache-Control') else headers['Cache-Control'] = value end end
Determine if the response is worth caching under any circumstance. Responses marked “private” with an explicit Cache-Control directive are considered uncacheable
Responses with neither a freshness lifetime (Expires, max-age) nor cache validator (Last-Modified, ETag) are considered uncacheable.
# File lib/rack/cache/response.rb, line 102 def cacheable? return false unless CACHEABLE_RESPONSE_CODES.include?(status) return false if cache_control.no_store? || cache_control.private? validateable? || fresh? end
Set the response’s time-to-live for private/client caches. This adjusts the Cache-Control/max-age directive.
# File lib/rack/cache/response.rb, line 196 def client_ttl=(seconds) self.max_age = age + seconds end
The date, as specified by the Date header. When no Date header is present, set the Date header to Time.now and return.
# File lib/rack/cache/response.rb, line 138 def date if date = headers['Date'] Time.httpdate(date) else headers['Date'] = now.httpdate unless headers.frozen? now end end
The literal value of ETag HTTP header or nil if no ETag is specified.
# File lib/rack/cache/response.rb, line 207 def etag headers['ETag'] end
Mark the response stale by setting the Age header to be equal to the maximum age of the response.
# File lib/rack/cache/response.rb, line 132 def expire! headers['Age'] = max_age.to_s if fresh? end
The value of the Expires header as a Time object.
# File lib/rack/cache/response.rb, line 164 def expires headers['Expires'] && Time.httpdate(headers['Expires']) end
Determine if the response is “fresh”. Fresh responses may be served from cache without any interaction with the origin. A response is considered fresh when it includes a Cache-Control/max-age indicator or Expiration header and the calculated age is less than the freshness lifetime.
# File lib/rack/cache/response.rb, line 92 def fresh? ttl && ttl > 0 end
# File lib/rack/cache/response.rb, line 40 def initialize_copy(other) super @headers = other.headers.dup end
The String value of the Last-Modified header exactly as it appears in the response (i.e., no date parsing / conversion is performed).
# File lib/rack/cache/response.rb, line 202 def last_modified headers['Last-Modified'] end
The number of seconds after the time specified in the response’s Date header when the the response should no longer be considered fresh. First check for a s-maxage directive, then a max-age directive, and then fall back on an expires header; return nil when no maximum age can be established.
# File lib/rack/cache/response.rb, line 157 def max_age cache_control.shared_max_age || cache_control.max_age || (expires && (expires - date)) end
The number of seconds after which the response should no longer be considered fresh. Sets the Cache-Control max-age directive.
# File lib/rack/cache/response.rb, line 170 def max_age=(value) self.cache_control = cache_control.merge('max-age' => value.to_s) end
Indicates that the cache must not serve a stale response in any circumstance without first revalidating with the origin. When present, the TTL of the response should not be overriden to be greater than the value provided by the origin.
# File lib/rack/cache/response.rb, line 126 def must_revalidate? cache_control.must_revalidate || cache_control.proxy_revalidate end
Modify the response so that it conforms to the rules defined for ‘304 Not Modified’. This sets the status, removes the body, and discards any headers that MUST NOT be included in 304 responses.
tools.ietf.org/html/rfc2616#section-10.3.5
# File lib/rack/cache/response.rb, line 229 def not_modified! body.close if body.respond_to?(:close) self.status = 304 self.body = [] NOT_MODIFIED_OMIT_HEADERS.each { |name| headers.delete(name) } nil end
Mark the response “private”, making it ineligible for serving other clients.
# File lib/rack/cache/response.rb, line 116 def private=(value) value = value ? true : nil self.cache_control = cache_control. merge('public' => !value, 'private' => value) end
Return the status, headers, and body in a three-tuple.
# File lib/rack/cache/response.rb, line 46 def to_a [status, headers.to_hash, body] end
The response’s time-to-live in seconds, or nil when no freshness information is present in the response. When the responses ttl is <= 0, the response may not be served from cache without first revalidating with the origin.
# File lib/rack/cache/response.rb, line 184 def ttl max_age - age if max_age end
Set the response’s time-to-live for shared caches to the specified number of seconds. This adjusts the Cache-Control/s-maxage directive.
# File lib/rack/cache/response.rb, line 190 def ttl=(seconds) self.shared_max_age = age + seconds end
Determine if the response includes headers that can be used to validate the response with the origin using a conditional GET request.
# File lib/rack/cache/response.rb, line 110 def validateable? headers.key?('Last-Modified') || headers.key?('ETag') end
The literal value of the Vary header, or nil when no header is present.
# File lib/rack/cache/response.rb, line 238 def vary headers['Vary'] end
Does the response include a Vary header?
# File lib/rack/cache/response.rb, line 243 def vary? ! vary.nil? end
An array of header names given in the Vary header or an empty array when no Vary header is present.
# File lib/rack/cache/response.rb, line 249 def vary_header_names return [] unless vary = headers['Vary'] vary.split(/[\s,]+/) end


>My Talks
>Group Training
- How to Research Professionally
- You and Your Research, by Prof. Richard W. Hamming
- Communication
- Presentation
- How to give a clear talk, by Prof. Kayvon Fatahalian
- Writing
- How to write a paper, by Prof. Bonan Yan
- English Polishing:
- Recommended Tools for Research
- Vector Graph Editor: Adobe Illustrator / Inkscape / Microsoft Powerpoint
- Chart Generator: Origin / Python (Matplotlib, Seaborn) / Matlab / Prism / Excel
- Timing Diagram Generator: WaveDrom
- UML Editor: Violet
- Video Editor: kdenlive
- Code Editor: VScode / Vim / Emacs
- Latex IDE: Overleaf / Texstudio / Texmaker
- Presentation
- EDA Toolkit Tutorials
>Fun Videos
- Chip demo 2: http://bit.ly/AICHIP, Real-Time MNIST Recognition w/ Binary RRAM In-Mememory Computing Chip
- Chip demo 1: http://bit.ly/2lE3o85, Memristor Computing-In-Memory Controller Integrated Circuits (IC)


Related: Database of Prehistoric Creatures
What did Earth look like
600 million
560 million
540 million
500 million
470 million
450 million
430 million
400 million
370 million
340 million
300 million
280 million
260 million
240 million
220 million
200 million
170 million
150 million
120 million
105 million
90 million
65 million
50 million
35 million
20 million
0
years ago?
Jump to...
first multicellular life
first shells
first coral reefs
first vertebrates
first land plants
first land animals
first insects
first reptiles
first dinosaurs
first flowers
first primates
first grass
first hominids
Pannotia supercontinent
Pangea supercontinent
Triassic
Jurassic
Cretaceous
dinosaur extinction
Remove clouds
Stop rotation
Use the ← and → keys to step through time.
Earth,
600 million
years ago
Loading...


RSI-Assist
An extension to assist people suffering from Repetitive Stress Injury.
Disable RSI-Assist
Insert Space
Popup min letters
1
2
3


mitigation emissions emission agricultural agriculture GHG production scenario reduction member targets global policy CAPRI European national consumption change countries feed model increases trade {border-style climate decreases px;} results total #ffffff;} meat options states REF decrease gas Climate However, changes greenhouse imports leakage prices sector set Fig. HET compared dairy impacts livestock mshar target Agriculture based costs implementation income major market specific use (e.g. Agricultural Domínguez Food Pérez according act activities beef level measures production, related technological Commission Council Fellmann IPCC activity animal assessment challenges emissions, increase net products relative Cambridge EU, Global Witzke balance cost current emissions. exports fert impact importance projected px; reductions sector. year {font-family (European (i.e. Chang Change Doorslaer Paris Therefore, consumer effects farmers font-size important land large levels lower methane mfac min non-CO non-EU outside producer reduce state supply Greenhouse Leip Policy Research Van absolute account aggregated applied approach area coefficients crop developing double; energy farm fertilizer food general higher highest implemented integration leakage. module potential price regarding regional respect respective scenarios sector, share shows technologies $$\end{document} ./s--- Emissions Jansson Moreover, Richards Scenario University Weiss [], \begin{document}$$ \documentclass[pt]{minimal} \setlength{\oddsidemargin}{-pt} \usepackage{amsbsy} \usepackage{amsfonts} \usepackage{amsmath} \usepackage{amssymb} \usepackage{mathrsfs} \usepackage{upgreek} \usepackage{wasysym} achieve activities, anaerobic border-color border-width case commitments dioxide directly effect environmental especially flexible frameworks function included indicate information manure milk model. modelling need obligations poultry regions scenario, solid; states. strategies. structure technology {font-style {font-weight (%) (). (.%) (.%), Cara Challenge Contribution Determined Energy Environ Figure GAINS Glob III Impact Italy Mitigation National Nationally Percentage Press Smith Stehfest Typical UNFCCC UNFCCC, United abatement affected analysis bold cattle contributes courier; developments effective em; emi example, e}\times generally given group increasing indicated intake international lead leading likely meet modelled nitrous non-uniform number obligation options. overall oxide paper policies precision product protein pt;} report requirements result rigid scale scenario. setting significantly technical timing type use, using van working


Sri Lanka celebrates Gotabaya Rajapaksa’s presidential election win
Gotabaya’s win marks the return to the helm of the powerful Rajapaksa family — known for its pro-China tilt — amid turmoil in the country following the Easter Sunday terror attacks that killed 269 people.
18 Nov 2019, 05:29
Sri Lanka People’s Front candidate and the country’s former defence secretary, Gotabaya Rajapaksa, was Sunday declared winner in its presidential poll, garnering 52.25 per cent votes. (AP)
Gotabaya’s win marks the return to the helm of the powerful Rajapaksa family — known for its pro-China tilt — amid turmoil in the country following the Easter Sunday terror attacks that killed 269 people. (Reuters)
Rajapaksa, 70, who will succeed President Maithripala Sirisena, urged his supporters to “rejoice peacefully” after his closest rival, Sajith Premadasa, conceded the polls even before the official results were announced by the Elections Commission. (Reuters)
Rajapaksa’s supporters celebrate after he won the presidential election in Colombo, on Sunday. (Reuters)
Rajapaksa swept the polls in the Sinhala majority districts, while Premadasa won most of the votes from the Tamil-dominated north and east of the country. (Reuters)
As a former Army officer who served as Sri Lanka’s defence secretary when his brother Mahinda Rajapaksa was President, Gotabaya led the military campaign against the Liberation Tigers of Tamil Eelam between 2007 and 2009, which ended with the final defeat of the Tigers, and the killing of its leader Velupillai Prabhakaran. (Reuters)


{% comment %} This is the card representation (the square box that appears in your course catalog for each bundle) of your bundle. {% endcomment %}
{{ card.tagline }}


CAA
Menu
Just for Employers
New Audit
Raports
Members
Log out
Contact Us
Home
CONTACT US
Feel free to contact us....
Name
Surname
Email Address
Message
Send Message
Our office
Techstitution.
Near AUK..
KOSOVO/PRISHTINA
P:
(045) 456-789
Our Email
leonit_k@outlook.com


loading...
Could not connect to the server.


Mushrooms - P. cubensis
The grass was saturated with psilocybin. That was the first thing I noticed as my pupils dilated. It was greasy sticky translucent blue waving beneath my feet.  The wind didn't smell clear, it smelled like marijuana filters and saliva.
I pressed my face into the crawling dirt. It piled over me, dropped insects into my pores. I was so many people! Every viewpoint became mine and my eyes exploded and finally I could see everything. The trees were twisted around me. I loved being a prisoner of freedom! Intricate designs in soap bubbles floated past me, stained my skin. My hands were blue. It was all that psilocin. It was all that rolling in the grass. You've never been trapped by laughter the way I have. You've never been a slave to happiness. It was exhilerating, the way there was no way to feel my own emotions or hold my thoughts; they were fleeing and screaming shrilly as they went. My identity paraded away and flew up in a hot air balloon...I think my name has been claimed by the moon. The sun rained snowflake patterns and cut tragedies into the peaceful harmonies of future emo boys. My legs sprayed forward - I was sprinting over bodies, creating carcasses and not even remembering I would meet the same fate.
Everything became aquatic. I was a fin on a shark eating a fish, I was being eaten. I was a cracked spine. I was sitting under a tree.
My pupils contracted and I went in search of a toilet.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


This animation shows the gravitational deflection of the light of distant stars by the extremal Reissner-Nordstrom black hole (Q=0.99), as seen by freely falling observer.
The light trajectories are evaluated very precisely, and this is done mostly to present their shapes.
Other effects are purely illustrative (or decorative). I.e. although photon world lines intersect the horizon none should see any light coming out of black hole, while being far from it, as the horizon is represented by infinite null past or future in this frame. The magnitude of blueshift has no physical meaning as well, especially considering that one should expect infinite blueshift at the inner (Cauchy) horizon.


Graphical and computational methods that can be used to assess the stability of results from supervised statistical learning.
| Version: | 0.1-1 |
| Depends: | R (≥ 3.0.0) |
| Imports: | graphics, methods, MASS, e1071, partykit |
| Suggests: | utils, Formula, nnet, rpart, tree |
| Published: | 2018-07-10 |
| Author: | Michel Philipp [aut, cre], Carolin Strobl [aut], Achim Zeileis [aut], Thomas Rusch [aut], Kurt Hornik [aut] |
| Maintainer: | Michel Philipp <michel.philipp.mp at gmail.com> |
| License: | GPL-2 | GPL-3 |
| NeedsCompilation: | no |
| Citation: | stablelearner citation info |
| Materials: | NEWS |
| CRAN checks: | stablelearner results |
| Reference manual: | stablelearner.pdf |
| Package source: | stablelearner_0.1-1.tar.gz |
| Windows binaries: | r-devel: stablelearner_0.1-1.zip, r-release: stablelearner_0.1-1.zip, r-oldrel: stablelearner_0.1-1.zip |
| OS X binaries: | r-release: stablelearner_0.1-1.tgz, r-oldrel: stablelearner_0.1-1.tgz |
Please use the canonical form https://CRAN.R-project.org/package=stablelearner to link to this page.


{% extends "p1_endo2/Style.html" %} {% load staticfiles otree_tags %} {% block title %}
{% if player.treat <= 9 %}
You will play a simple game with another MTurk worker, the details of which will be explained to you in the following screens.
You will read the instructions for the tasks and be asked a few comprehension questions to see if you understand
the instructions. You can only participate if you answer all of these questions correctly, so your full attention
is needed for the duration of the study.
{% else %}
You will play a simple game with other MTurk workers, the details of which will be explained to you in the following screens.
You will read the instructions for the tasks and be asked a few comprehension questions to see if you understand
the instructions. You can only participate if you answer all of these questions correctly, so your full attention
is needed for the duration of the study.
{% endif %}
Your participation will last between 5 and 10 minutes.
For participating in the study, you will earn a show-up payment of ${{ Constants.show_up_fee }}. You can earn up to
${{ Constants.total_pay }} in these tasks in addition to your show-up payment. How to earn this money is explained
to you in the instructions.
Please, click on the button to begin your participation in this study.


Interact with the widgets on the left to select individual samples to optimize linear fits, select blank sample to subtract and update the model fit. Enter Python format equations* to apply a transform to the model fit. The slider and text input boxes below the progress curve residual plot can be used to refit based on a new X-axis range.
Use the figure tools at the upper right of each plot to pan , wheel zoom , refresh the plot , download plot to image file and hover over the circles on the model fit plot to see sample information .
Click the green button to upload data files of your own. Click the blue buttons to download the slope table to a csv file or save it to the clipboard.
(Note: input data must be in csv format and is expected to be in columns with headings containing numbers denoting substrate/inhibitor concentrations (or "blank" for sample to subtract). Some special characters may not be supported and could cause an error during file upload. The "Time" column should contain integer or float values (not date-time).
*See https://docs.python.org/3/tutorial/introduction.html for information about basic python numerical operatorsPlease cite the following if using this software to prepare a publication:


Provides functions to create simulated time series of environmental exposures (e.g., temperature, air pollution) and health outcomes for use in power analysis and simulation studies in environmental epidemiology. This package also provides functions to evaluate the results of simulation studies based on these simulated time series. This work was supported by a grant from the National Institute of Environmental Health Sciences (R00ES022631) and a fellowship from the Colorado State University Programs for Research and Scholarly Excellence.
| Version: | 0.1.0 |
| Imports: | dplyr (≥ 0.5.0), lubridate (≥ 1.5.6), purrr (≥ 0.2.2), splines, viridis (≥ 0.4.0) |
| Suggests: | dlnm (≥ 2.3.2), ggplot2 (≥ 2.2.1), gridExtra (≥ 2.2.1), knitr (≥ 1.15.1), rmarkdown (≥ 1.5.0), tidyr (≥ 0.6.2) |
| Published: | 2017-06-03 |
| Author: | Sarah Koehler [aut], Brooke Anderson [aut, cre] |
| Maintainer: | Brooke Anderson <brooke.anderson at colostate.edu> |
| BugReports: | http://github.com/sakoehler7/eesim/issues |
| License: | GPL-2 | GPL-3 [expanded from: GPL (≥ 2)] |
| URL: | http://github.com/sakoehler7/eesim |
| NeedsCompilation: | no |
| CRAN checks: | eesim results |
| Reference manual: | eesim.pdf |
| Vignettes: |
Using the eesim package |
| Package source: | eesim_0.1.0.tar.gz |
| Windows binaries: | r-devel: eesim_0.1.0.zip, r-release: eesim_0.1.0.zip, r-oldrel: eesim_0.1.0.zip |
| OS X binaries: | r-release: eesim_0.1.0.tgz, r-oldrel: eesim_0.1.0.tgz |
Please use the canonical form https://CRAN.R-project.org/package=eesim to link to this page.


a) How familiar are you with line-chart visualizations? A line-chart visualization example is shown below.
| 1 | 2 | 3 | 4 | 5 |
| Not familiar | Very familiar |
b) How familiar are you with bar-chart visualizations? A bar-chart visualization example is shown below.
| 1 | 2 | 3 | 4 | 5 |
| Not familiar | Very familiar |
c) How familiar are you with area-chart visualizations? An area-chart visualization example is shown below.
| 1 | 2 | 3 | 4 | 5 |
| Not familiar | Very familiar |
d) How familiar are you with map visualizations? A map visualization example is shown below.
| 1 | 2 | 3 | 4 | 5 |
| Not familiar | Very familiar |
|
|


--- layout: default top_nav: home ---
Keep tabs on what Stack Overflow's engineering team does to keep the world's largest developer community up and running.
Programmers are writing the script of the future. We’re here to help them at every stage of their careers.
The Developer Hiring Blog is your go-to place for learning how to recruit and hire tech talent.
Find the latest news about what we're doing at Stack Overflow from product launches to big hires and more.
The Stack Overflow Podcast lets you listen in on discussions and decisions concerning the world's largest developer community.
Stack Overflow is run by talented individuals with fascinating stories to tell including insights into engineering, design, marketing, and community.


{% extends "buy/base.html" %} {% load static %} {% block head %} {{block.super}} {% endblock %} {% block body %}
This site requires cookies for the purchasing of accounts functionality. This site uses signed cookies which means no session information is stored on our server.
For privacy reasons, we store no personal information from the user like name, email address, residency and such. When the user purchases an account, we only store the desired account name and public key that the user entered. We require this data to being able to create the EOS account. After the account has been created, this data will enter the EOS blockchain and become public record.
When the user pays with any of the supported cryptocurrencies, there will be a pseudonymous public record of that purchase in the respective blockchain.
When the user pays with credit card, the user will be redirect to our payment service provider Stripe. Please see Stripe's Privacy Policy. If you don't agree with Stripe collecting any of your data, please don't use it.


{% from 'components/big-number.html' import big_number %} {% from "components/banner.html" import banner_wrapper %} {% from "components/phone.html" import phone %} {% extends "fullwidth_template.html" %} {% block page_title %} GOV.UK Notify {% endblock %} {% block maincolumn_content %}
Try GOV.UK Notify now if you work for a UK government department or agency.
You don’t need any technical knowledge to create email and text message templates.
Track how many messages you’ve sent and find out which ones aren’t getting delivered.
Upload a spreadsheet of email addresses or phone numbers and Notify sends the messages.
Integrate the GOV.UK Notify API with your web application or back office system.
GOV.UK Notify is built by the Government Digital Service and is supported 24 hours a day, 7 days a week.
Contact the team if you have a question or want to give feedback.


--- layout: default ---
In reinforcement learning (RL), designing general-purpose algorithms that apply to arbitrary Markov Decision Processes (MDPs) is very appealing because it broadens the range of problems that we can address using this technique. However, when we utilize these methods to solve real applications, we put considerable time into carefully parameterizing the problem, such as selecting the appropriate state representations and action spaces, fine-tuning reward functions, and designing data collection strategies. RL is not alone in this regard: researchers in the supervised learning community typically assume datasets to be fixed (and iterate on the algorithms and models), while practitioners often fix the algorithm and model (and instead iterate on the dataset). Some have argued that perhaps a more data-centric view of machine learning research is needed [18, 12], and we would like to encourage the research community to investigate this same principle in the context of RL.
Data in RL may be understood to be the properties of environments and tasks, usually modelled through underlying MDPs. From this perspective, a data-centric study of RL would parallel Gibson’s ecological theory of visual perception and psychology [9]. An ecological study of RL should examine the behavior of algorithms in the context of their environment to further understand how different properties (such as linearity, ergodicity, mixing rate, among others) influence the performance of these methods. We want the community to develop a systematic approach to RL task design that complements the algorithmic-centric view that exists today. Properties and taxonomies of environments and tasks have been previously investigated in several areas of RL research such as curriculum and continual learning [27, 5, 22], bisimulations and homomorphisms [21, 7, 4, 26], PAC analysis [13, 1], information theoretic perspectives [14, 11, 16, 8], meta-analysis of RL benchmarks [17, 20, 19], among many others. However, these endeavors have been usually disconnected from the efforts made to build environments and tasks [2, 25, 3, 24, 23, 6, 15, 10 ], leaving a gap in our understanding on how algorithmic solutions and environments designs interact.
This workshop builds connections between different areas of RL centered around the understanding of algorithms and their context. We are interested in questions such as, but not limited to:
We expect submissions that address these and other related questions through an ecological and data-centric view, pushing forward the limits of our comprehension of the RL problem.


Overview
The following document outlines the APIs and calls required for a dropship integration with iQmetrix. The steps outlined in this guide are focused on onboarding and are meant to be performed sequentially.
Each segment in this guide will provide high-level concepts before describing examples of the API call required.
Figure 1: Illustrates the interactions between supplier and iQmetrix APIs.
The following APIs will be covered in this guide:
- Authentication
- Product Feed
- Product Subscription
- Supplier Availability
- Cost Feed
- Shipping Options
Who Is This Guide For?
The intended audience for this guide are developers who are integrating a supplier into the iQmetrix dropship program.
Onboarding Package
As part of the onboarding process, you will have received an onboarding package from the iQmetrix API team. This package provides you credentials and access details in order to perform the topics covered in this guide.
Should you require information beyond the scope of this guide, or did not receive the onboarding package, contact Support.
Environment
iQmetrix provides you with two environments: Sandbox and Production. Use the Sandbox environment to test your API and to perform end-to-end testing. After completing this stage proceed to the Production environment.
For more information on environments, see Environment.
The iQmetrix API supports JSON and JSON + HAL. See Supported Response Formats for more information.
Postman Example
iQmetrix uses Postman when testing and debugging our APIs.
For Chrome or Mac users, click the button below to import the collection directly into Postman.
Alternatively, you can download the collection by clicking here.
The Postman environment shared by all API references and guides can be found here.
Steps
Step 1 - Authentication
Example Request
Authorization: Bearer (Access Token)
In order to make authorized requests to iQmetrix APIs, you need an Access Token.
See the table below for different ways of getting an Access Token.
Table 1: Methods for Obtaining an Access Token
| If… | Then… |
|---|---|
| You do not have an Access Token | See Obtaining an Access Token |
| You have an Access Token, but it is close to expiring | See Refreshing an Access Token |
The token is placed in the Authorization
header of requests to iQmetrix APIs, prefixed by the word Bearer
.
Step 2 - Product Feed
A Product Feed allows you to continuously channel all of your products’ information into a single source within the iQmetrix system. The product feed you provide will be curated by iQmetrix into the Product Library and made available to retailers.
Each product that has been curated will be removed from the feed, leaving the delta from your last push. It’s recommended to update the LastModifiedByVendorUtc
field for this product feed lifecycle, as it gives visibility to the curation team should there be any new products added to the feed or any product information updates.
Figure 2: Illustrates supplier pushing products to be curated.
2.1 Get Classification Tree by ID
Example Request
GET https://productlibrarydemo.iqmetrix.net/v1/ClassificationTrees(1)
Example Response
HTTP 200 Content-Type: application/json
{
"Id": 1,
"Name": "Cellular & Accessories",
"IsCanonical": true,
"Description": "iQmetrix classification of products for wireless retail",
"Owner": {
"Id": 1,
"Name": "iQmetrix"
},
"Categories": [
{
"Id": 2,
"Name": "Devices",
"Order": 1,
"Categories": [],
"Classifications": []
}
],
"Classifications": [
{
"Id": 69,
"Name": "SIM Cards",
"Order": 5,
"ProductTemplate": {
"Id": 16,
"Name": "Wireless Device"
}
}
],
"Version": 148
}
iQmetrix organizes retail products in a hierarchical structure using Classification Trees, which represent different product taxonomies. Classification Trees are made up of Categories, which group similar products together, and Classifications which act as a template for Product information.
Each Product must have an associated Classification Tree and Classification.
For more details on this concept, see Classification Tree.
To get a list of Classifications based on your provided Classification Tree ID, see Getting a Classification Tree
2.2 Get All Field Definitions
Example Request
GET https://productlibrarydemo.iqmetrix.net/v1/FieldDefinitions
Example Response
HTTP 200 Content-Type: application/json
[
{
"Id": 139,
"StringId": "Color Tags",
"InputType": "MultiSelect",
"IsRequired": false,
"LanguageInvariantUnit": "",
"DisplayName": "Color Tags",
"Unit": "",
"Options": [
{
"Id": 1,
"Value": "Black"
},
{
"Id": 2,
"Value": "Blue"
},
{
"Id": 3,
"Value": "Brown"
},
{
"Id": 4,
"Value": "Gray"
},
{
"Id": 5,
"Value": "Green"
},
{
"Id": 6,
"Value": "Orange"
},
{
"Id": 7,
"Value": "Pink"
},
{
"Id": 8,
"Value": "Purple"
},
{
"Id": 9,
"Value": "Red"
},
{
"Id": 10,
"Value": "Translucent"
},
{
"Id": 11,
"Value": "Turquoise"
},
{
"Id": 12,
"Value": "White"
},
{
"Id": 13,
"Value": "Yellow"
},
{
"Id": 14,
"Value": "Gold"
},
{
"Id": 15,
"Value": "Silver"
},
{
"Id": 16,
"Value": "Bronze"
},
{
"Id": 17,
"Value": "Multicolor"
},
{
"Id": 18,
"Value": "Pattern"
}
],
"LanguageInvariantName": "Color Tags"
},
{
"Id": 84,
"StringId": "CDMA",
"InputType": "YesNo",
"IsRequired": false,
"LanguageInvariantUnit": null,
"DisplayName": "CDMA",
"Unit": null,
"Options": []
}
]
A field definition contains all the metadata about a product’s attributes, such as name, units, and how it should be displayed. A field is an instance of a field definition. Each product field has a definition and a value. Field definitions are agnostic of industry and are considered global attributes.
To get all Field Definitions, see Getting Field Definitions
Mapping Field Definitions
When mapping field definitions between the environments there are two identifiers to consider:
- Field definition identifiers are specific to each environment
- Field definition string identifiers are consistent across all environments.
To add a Product to your Product Feed, the API request requires the field definition identifier field. Follow these instructions to map your field definitions between the various environments.
- Get a list of all field definitions from the Production environment.
- Search and map the fields from your system with the fields from the API.
- While mapping, locate the field identifier and string identifiers from the API and add them to a configuration table.
- Get a list of all fields definitions from the Demo environment.
- Search for the string identifiers to be mapped and add their corresponding field identifier to your configuration table.
Table 2: Mapping Fields Between Environments
| Your Definition | String ID | ID in Demo | ID in Production |
|---|---|---|---|
| Packing Height | Packaging Height | 175 | 141 |
| Packing Width | Packaging Width | 176 | 142 |
| Packing Depth | Packaging Depth | 177 | 143 |
2.3 Add a Product
Example Request
POST https://productlibrarydemo.iqmetrix.net/v1/ProductFeeds(34)/Products
Authorization: Bearer (Access Token)
Accept: application/json
Content-Type: application/json
{
"Classification": {
"TreeId": 1,
"Id": 5
},
"Manufacturer": "Agent18",
"ManufacturerSku": "980113579",
"ModelName": "Agent18 SlimShield Case for iPhone 6",
"LastModifiedByVendorUtc": "2015-09-16T10:40:31.101Z",
"UPC": "723755004337",
"VendorSkus": [
{
"Sku": "1115884",
"VendorName": "Amazon",
"Description": "Online retailer"
}
],
"Fields": [
{
"Definition": {
"Id": 1,
"StringId": "Product Name"
},
"Value": "Agent18 SlimShield Case for iPhone 6 - Black"
},
{
"Definition": {
"Id": 129,
"StringId": "Color Tags"
},
"Value": "Black, Red"
},
{
"Definition": {
"Id": 41,
"StringId": "Width",
"Unit": "inches"
},
"Value": "4"
},
{
"Definition": {
"Id": 76,
"StringId": "MSRP",
"InputType": "Currency"
},
"Value": "24.99 CAD"
}
],
"Assets": [
{
"AssetUrl": "http://image.sample.com/a.jpg"
}
]
}
Example Response
HTTP 200 OK Content-Type: application/json
{
"Id": 17,
"Classification": {
"TreeId": 1,
"Id": 5,
"Name": "Cases"
},
"ClassificationTreeName": "Cellular & Accessories",
"Manufacturer": "Agent18",
"ManufacturerSku": "980113579",
"UPC": "723755004337",
"VendorSkus": [
{
"Sku": "1115884",
"VendorName": "Amazon",
"Description": "Online retailer"
}
],
"Fields": [],
"Assets": [],
"LastModifiedByVendorUtc": null,
"ModelName": "Agent18 SlimShield Case for iPhone 6"
}
Now that you have a list of Field Definitions and Classifications, there are also optional parameters to enter for your Products. Ensure your products have, at minimum, a ModelName as this field will be used to import your products into the iQmetrix platform.
We can now combine the information gathered from the previous steps to Adding a Product to your Product Feed
ModelName Mapping:
The ModelName
field should be specific enough that variations of one product should be able to be grouped together, but different products wouldn’t be grouped together.
The table below shows results from actual entries versus the expected entry.
Table 3: ModelName Mapping Examples
| Actual | Expected |
|---|---|
| Dualtek Product for iPhone 5 | iPhone 5 DualTek Extreme Shock Case |
| Data Cable for Apple iPhone 5s | 4’ Lightning Charge/Sync Cable |
| Shell and Holster for Apple iPhone 6 | iPhone 6/6s Hip Case+ |
| Data Cable | microUSB 72" Charge-sync Cord |
Required Fields:
Product Name
- Since there is a Manufacturer field, the manufacturer doesn’t need to be apart of the product name.Long Description
- Supports up to ~20,000 characters, but products typically use 2,000 characters at most. Formatting should be handled with HTML tags.MSRP
- Requires value and currency code (e.g. 35.99 CAD, 24.00 USD).
Recommendations:
- Ensure your product images (assets) have a transparent background. We crop out any backgrounds so that we can create a clean reflection in XQ.
- Ensure your product images are of high quality, as these images will be projected on high-resolution displays.
- Ensure dimensions are in separate fields, and not as a string, such as “5x5x5”.
- Ensure
MSRP
includes currency code, such as “14.99 USD”. - Ensure
Classification
is not null. - Ensure the
color
definition uses model descriptions, such as Space Gray - Ensure the
color tag
definition uses multiple of the following palette:- Black, Blue, Brown, Gray, Green, Orange, Pink, Purple, Red, Translucent, Turquoise, White, Yellow, Gold, Silver, Bronze, Multicolor, Pattern
Optional: Remove/Update a Product
Example Request
DELETE https://productlibrarydemo.iqmetrix.net/v1/ProductFeeds(34)/Products(17)
Authorization: Bearer (Access Token)
Accept: application/json
Example Response
HTTP 204 No Content
Each Product entered into the Product Feed will have a corresponding ID from the response. The steps below describe how to remove or update products that are still in the Product feed, and have not been curated yet.
Should a product have already been curated, then simply add the product to the Product feed again with the new changes. The curation team will update the curated product with the new details.
- To remove products from the Product Feed, you must remove each Product by providing their ProductId.
- To update products in the Product Feed, the products must be deleted first, updated locally, and then added again (DELETE + POST).
Step 3 - Product Subscription
While the Product Content Feed provides iQmetrix with details of your products, the Product Subscription Feed is similar to an RSS feed. In this case, retailers subscribe to your feed to get a list of your latest dropship products.
Each Product Subscription Feed contains a list of SKUs and their selling price (MSRP), allowing you control over which products are visible to each retailer that is a part of your program.
Optionally you can provide more than one feed, serving different products to different groups of retailers. For example, one feed could be based on the manufacturer (e.g. Supply Inc - Otterbox sub feed) while another could be based on the product line (e.g. Supply Inc. - iPhone sub feed).
Once a retailer is subscribed your feed(s), they will see the products available to them through the various iQmetrix applications they use.
Synchronization of these feeds occurs nightly, updating all of your subscribed retailers with the products you have added or removed from your feeds, allowing you to control which products are available for dropship.
Figure 3: Illustrates supplier pushing product rules to their various companies.
Example Scenario
Below is an example of a supplier updating their product subscription feed:
- Monday: 8 products
- Tuesday: +2 products
- Wednesday: -1 product
On Monday, a supplier provides 8 products to their Subscription Feed. Since synchronization occurs at night, subscribed retailers see the 8 products on Tuesday.
On Tuesday evening, the supplier then adds 2 more products to their Subscription Feed. This is done by including 2 additional products to their original list, which now has 10 products instead of 8. The following morning, subscribed retailers see 10 products total.
Finally on Wednesday morning, the supplier removes 1 product, leaving the Subscription Feed with 9 products.
The following morning, subscribed retailers now have 9 products.
3.1 Add Products
Example Request
PUT https://productsubscriptionsdemo.iqmetrix.net/v1/subscribablelists(2c7dccd9-49ba-42ac-bffb-edcc08f40773)
Authorization: Bearer (Access Token)
Accept: application/json
Content-Type: application/json
{
"EntityId": 60455,
"Name": "Joe's Product List",
"Products": [
{
"ProductName": "Agent18 SlimShield Case for iPhone 6",
"VendorSku": "1115884",
"Price": 49.99,
"Dropshippable": true
}
]
}
Example Response
HTTP 200 OK Content-Type: application/json
{
"Id": "2c7dccd9-49ba-42ac-bffb-edcc08f40773",
"EntityId": 60455,
"Name": "Joe's Product List",
"Products": [
{
"ProductName": "Product Name",
"VendorSku": "123456789",
"Price": 11.11,
"Dropshipable": true,
"ProductSlugs": [],
"Version": 1
}
],
"Version": 2
}
Table 4: Product Feed Variables
| Parameter | Value |
|---|---|
| EntityId | SupplierId |
| Name | Subscribable list name |
| ProductName | ModelName from Product Feed |
| VendorSku | Vendor product SKU |
| Price | Wholesale price to retailers |
| Dropshippable | true |
To add products, see Updating Products in a Subscribable List.
3.2 Get Your Company IDs
Example Request
GET https://productsubscriptionsdemo.iqmetrix.net/v1/subscribablelists(2c7dccd9-49ba-42ac-bffb-edcc08f40773)
Authorization: Bearer (Access Token)
Accept: application/json
Example Response
HTTP 200 OK Content-Type: application/json
{
"ListId": "2c7dccd9-49ba-42ac-bffb-edcc08f40773",
"Companies": [
{
"Id": 60454,
"Name": "Company 1",
"DateSubscribedUtc": "2015-10-01T18:46:25.774Z"
}
]
}
For the remaining steps, you must know the Company IDs for the companies you will be interacting with.
You can get a list of all your companies via Getting All Companies in a Product Subscription.
Step 4 - Supplier Availability
The Supplier Availability provides iQmetrix with a continuously updated cache of product availability. This will allow iQmetrix to inform customers of the availability of a product. Once a product is marked as unavailable by a supplier, iQmetrix will mark this product as unavailable to prevent future purchases.
Figure 4: Illustrates supplier pushing their product availability to be viewed by companies.
4.1 Configure Availability
Example Request
POST https://dropshipsdemo.iqmetrix.net/v1/Suppliers(60455)/Availability
Authorization: Bearer (Access Token)
Accept: application/json
Content-Type: application/json
{
"Products": [
{
"Sku": "123456789",
"IsAvailable": true,
"Quantity": 3
}
]
}
Example Response
HTTP 200 OK Content-Type: application/json
{
"Id": "a84549a1-3b0d-4ca6-b27f-65136957309b",
"Products": [
{
"Sku": "123456789",
"IsAvailable": true,
"Quantity": 3
}
]
}
To configure product availability, see Configuring Product Availability.
Step 5 - Cost Feed
The Cost Feed allows you to continually provide wholesale costs for the various products you supply for your companies, based on the product’s Vendor SKU (the same SKU found from the Product Content Feed).
Figure 5: Illustrates supplier pushing their product cost to be viewed by companies.
5.1 Add Product Cost
Example Request
POST https://dropshipdemo.iqmetrix.net/v1/Suppliers(1324)/Cost
Authorization: Bearer (Access Token)
Accept: application/json
Content-Type: application/json
{
"Products": [
{
"Sku": "1115884",
"Cost": 20.99,
"CompanyIds": [
60454,
24165,
13315
]
}
]
}
Example Response
HTTP 202 Accepted Content-Type: application/json
{
"Id": "91a57ddb-2d42-402b-85b4-fe327a347313",
"Products": [
{
"Sku": "1115884",
"Cost": 20.99,
"CompanyIds": [
60454,
24165,
13315
]
}
]
}
Every Product must have an associated cost and a list of companies to apply the cost.
You must add product costs to the cost feed via Adding Products to Cost Feed.
Step 6 - Provide Shipping Options
You must provide a Shipping Options API to iQmetrix. Your options will then be displayed to the customer.
Once an order has been created, shipping options will be requested via the SACCS service.
Example Request
POST /ShippingOptions HTTP/1.1
Host: https://api.supplier.com
Content-Type: application/json
{
"CompanyId": 123,
"PostalCode": "V6B5Y1",
"Items": [
{
"ProductName": "Galaxy S6 Defender Case - Glacier",
"Quantity": 1,
"Sku": "9409OTSAGS6"
}
]
}
Example Response
HTTP 200 OK Content-Type: application/json
{
"ShippingOptions": [
{
"Id": "350",
"Name": "PurolatorExpress",
"Cost": 7.94,
"EstimatedTransitTime": "1 hour",
"Currency": "CAD"
}
]
}
Figure 6: Illustrates high-level interaction diagram of an iQmetrix product attempting to obtain a supplier’s shipping options.
Step 7 - Next Steps
Now that you have completed the basic steps for working with feeds in the iQmetrix API, you can start the integration process from the Dropship Order Management Guide.