The band arithmetic function takes a georaster and an arithmetic operation. The function performs pixel-by-pixel calculation according to the arithmetic operation provided. This is only possible for a multiband raster and not for single band rasters. The output is a computed single band raster.
(String)
a string representation of an arithmetic operation to perform
GeoRaster
:
the computed georaster
// naip.tif has 4-bands: red (a), green (b), blue (c) and near-infrared (d)
const ndvi = await geoblaze.bandArithmetic("https://example.org/naip.tif", '(d - a)/(d + a)')
// or if you want to preload the georaster, so you can use it later, too
const georaster = await geoblaze.load("https://example.org/naip.tif");
const ndvi = await geoblaze.bandArithmetic(georaster, '(c - b)/(c + b)');
The get function takes a georaster and a bounding box as input. It returns the subset of pixels in the georaster found within the bounding box. It also takes an optional parameter "flat" which will flatten the returning pixel matrix across bands, so that for each band all the rows will be combined into one long array.
(Object)
can be an
[xmin, ymin, xmax, ymax]
array, a [[
[x00,y00]
,...,
[x0n,y0n]
,
[x00,y00]
]...] GeoJSON polygon object, or a string representation of a GeoJSON polygon object.
(Boolean)
whether or not the resulting output should be flattened into a single array for each band
Object
:
array of pixel values
const pixels = await geoblaze.get(georaster, geometry);
The histogram function takes a georaster as an input and an optional geometry. If a geometry is included, the function returns the histogram of all the pixels in that area. If no geometry is included, the function returns the histogram of all the pixels for each band in the georaster.
(Object
= undefined
)
a geometry, which we'll use for clipping result
Object
:
array of histograms for each band
// naip.tif has 4-bands: red, green, blue and near-infrared
const url = "https://example.org/naif.tif";
// calculate the raw histogram pixel values
const histograms = await geoblaze.histogram(url, geometry, { scaleType: "nominal" });
// break histograms into 10 bins for each band
const histograms = await geoblaze.histogram(url, geometry, { scaleType: "ratio", numClasses: 10, classType: "equal-interval" });
Given a raster and a point geometry, the identify function returns the pixel value of the raster at the given point. The raster and point must share the same Spatial Reference System.
// based on https://observablehq.com/@danieljdufour/identify-single-pixel-value-in-geotiff
const url = "https://s3.amazonaws.com/geoblaze/wildfires.tiff";
// point as [longitude, latitude]
const cityOfRedding = [-122.366667, 40.583333];
const results = await geoblaze.identify(url, cityOfRedding);
// results are [red, green, blue]
[76, 76, 68]
This function loads a whole file into memory as a georaster. If you pass in a url, it will fetch the whole file. It is the heavy-weight alternative to geoblaze.parse and should only be used if your file is relatively small or you have a really good reason for loading the whole file into memory, like running band arithmetic to create a new file. In general, use geoblaze.parse instead of geoblaze.load.
// naip.tif has 4-bands: red, green, blue and near-infrared
const url = "https://example.org/naif.tif";
const georaster = await geoblaze.load(url);
const mins = geoblaze.min(georaster);
const maxs = geoblaze.max(georaster);
const ndvi = geoblaze.bandArithmetic(georaster, "(d - a) / (d + a)");
The max function takes a georaster and an optional geometry. If a geometry is included, the function returns the max of all the pixels in that area. If no geometry is included, the function returns the max of all the pixels for each band in the raster.
(Object)
geometry can be an
[xmin, ymin, xmax, ymax]
array for a bounding box, [[
[x00,y00]
,...,
[x0n,y0n]
,
[x00,y00]
]...] for a polygon, a GeoJSON polygon object, or a string representation of a GeoJSON polygon object.
Array<Number>
:
array of maxs for each band
// naip.tif has 4-bands: red, green, blue and near-infrared (nir)
const url = "https://example.org/naif.tif";
const maxs = await geoblaze.max(url, geometry);
// maxs is [red, green, blue, nir]
[231, 242, 254, 255]
The min function takes a georaster as an input and an optional geometry. If a geometry is included, the function returns the min of all the pixels in that area for each band. If no geometry is included, the function returns the min of all the pixels for each band in the raster.
(Object)
geometry can be an
[xmin, ymin, xmax, ymax]
array for a bounding box, [[
[x00,y00]
,...,
[x0n,y0n]
,
[x00,y00]
]...] for a polygon, a GeoJSON polygon object, or a string representation of a GeoJSON polygon object.
Array<Number>
:
array of mins for each band
// naip.tif has 4-bands: red, green, blue and near-infrared (nir)
const url = "https://example.org/naif.tif";
const mins = await geoblaze.min(url, geometry);
// mins is [red, green, blue, nir]
[1, 4, 9, 4]
The mean function takes a georaster and an optional geometry. If a geometry is included, the function returns the mean of all the pixels in that area. If no geometry is included, the function returns the mean of all the pixels for each band in the raster.
(Object)
geometry can be an
[xmin, ymin, xmax, ymax]
array for a bounding box, [[
[x00,y00]
,...,
[x0n,y0n]
,
[x00,y00]
]...] for a polygon, a GeoJSON polygon object, or a string representation of a GeoJSON polygon object.
Array<Number>
:
array of means for each band
// naip.tif has 4-bands: red, green, blue and near-infrared (nir)
const url = "https://example.org/naif.tif";
const means = await geoblaze.mean(url, geometry);
// means is [red, green, blue, nir]
[42, 84, 92, 94]
The median function takes a raster and an optional geometry. If a geometry is included, the function returns the median of all the pixels in that area. If no geometry is included, the function returns the median of all the pixels for each band in the raster.
(Object)
geometry can be an
[xmin, ymin, xmax, ymax]
array for a bounding box, [[
[x00,y00]
,...,
[x0n,y0n]
,
[x00,y00]
]...] for a polygon, a GeoJSON polygon object, or a string representation of a GeoJSON polygon object.
Array<Number>
:
array of medians for each band
// naip.tif has 4-bands: red, green, blue and near-infrared (nir)
const url = "https://example.org/naif.tif";
const medians = await geoblaze.median(url, geometry);
// medians is [red, green, blue, nir]
[42, 84, 92, 94]
The mode function takes a georaster and an optional geometry. If a geometry is included, the function returns the mode of all the pixels in that area. If no geometry is included, the function returns the mode of all the pixels for each band in the georaster. If there is more than one mode for a band, it computes the mean among those modes.
(Object)
geometry can be an
[xmin, ymin, xmax, ymax]
array for a bounding box, [[
[x00,y00]
,...,
[x0n,y0n]
,
[x00,y00]
]...] for a polygon, a GeoJSON polygon object, or a string representation of a GeoJSON polygon object.
Array<Number>
:
array of modes for each band
// naip.tif has 4-bands: red, green, blue and near-infrared (nir)
const url = "https://example.org/naif.tif";
const results = await geoblaze.mode(url, geometry);
// results is [red, green, blue, nir]
[42, 84, 92, 94]
The modes function takes a georaster and an optional geometry. If a geometry is included, the function returns the modes of all the pixels in that area. If no geometry is included, the function returns the modes of all the pixels for each band in the georaster. Unlike the mode function, it will not compute the mean, but return all the most common values for each band.
(Object)
geometry can be an
[xmin, ymin, xmax, ymax]
array for a bounding box, [[
[x00,y00]
,...,
[x0n,y0n]
,
[x00,y00]
]...] for a polygon, a GeoJSON polygon object, or a string representation of a GeoJSON polygon object.
Array<Array<Number>>
:
array of modes for each band
// naip.tif has 4-bands: red, green, blue and near-infrared (nir)
const url = "https://example.org/naif.tif";
const results = await geoblaze.mode(url, geometry);
// results is [ [red], [green], [blue], [nir] ]
[[ 42, 43] , [83, 82, 84], [92], [94]]
The parse function takes a georaster (as an object, array buffer, blob, buffer, file or url) and returns a promise. The promise resolves to a georaster, which can be used as input in other geoblaze methods, such as identify, sum, or histogram. This function essentially call's georaster's parseGeoRaster function.
import { parse } from "geoblaze";
// parse url
const georaster = await parse("https://example.org/naif.tif");
// parse array buffer
const response = await fetch("https://example.org/naif.tif");
const arrayBuffer = await response.arrayBuffer();
const georaster = await parse(arrayBuffer);
// parse buffer (in NodeJS)
import { readFileSync } from "fs";
const buffer = readFileSync("naip.tif");
const georaster = await parse(buffer);
The raster calculator function takes a georaster and a javascript function as input. The function is performed pixel-by-pixel on each cell in the raster. The arguments to the function should reference bands in the order in the raster
(Function)
a JavaScript function representing an arithmetic operation to perform
GeoRaster
:
georaster - the computed georaster
// 3-band GeoTIFF with bands (a) red, (b) green, and (c) blue
const url = "https://example.org/rgb.tif"
const filteredRaster = geoblaze.rasterCalculator(url, (a, b, c) => a + b === c ? 1 : 0);
The stats function takes a georaster and an optional geometry. It then uses the calc-stats library to calculate statistics for each band.
(Object)
geometry can be an
[xmin, ymin, xmax, ymax]
array for a bounding box, [[
[x00,y00]
,...,
[x0n,y0n]
,
[x00,y00]
]...] for a polygon, a GeoJSON polygon object, or a string representation of a GeoJSON polygon object.
Object
:
array of stats for each band
const stats = await geoblaze.stats("https://example.org/imagery.tif", geometry);
[{ median: 906.7, min: 0, max: 5166.7, sum: 262516.5, mean: 1232.4718309859154, modes: [0], mode: 0, histogram: { 0: 12, 1: 74, 2: 573, ... } }]
The sum function takes a georaster and an optional geometry. If a geometry is included, the function returns the sum of all the pixels in that area. If no geometry is included, the function returns the sum of all the pixels for each band in the georaster.
(Object)
geometry can be an
[xmin, ymin, xmax, ymax]
array for a bounding box, [[
[x00,y00]
,...,
[x0n,y0n]
,
[x00,y00]
]...] for a polygon, a GeoJSON polygon object, or a string representation of a GeoJSON polygon object.
Array<Number>
:
array of sums for each band
// naip.tif has 4-bands: red, green, blue and near-infrared (nir)
const url = "https://example.org/naif.tif";
const results = await geoblaze.sum(url, geometry);
// results is [red, green, blue, nir]
[217461, 21375, 57312, 457125]


simple iostream
implementation
As we have no standard library support for our small embedded processor, we need to build everything that we need from scratch.
In this chapter we will cover a very rudimentary implementation of the standard iostream
library.
File Structure
-
Which files are needed for the implementation
3
@Def(file: iostream.h)
#pragma once
namespace std {
@put(declarations)
}
@End(file: iostream.h)
-
All declarations are encapsulated in the
std
namespace.
-
The header file is introduced to make editing easier.
-
A lot of editors work not well with the extension-less headers of C++.
4
@Def(file: iostream)
#include "iostream.h"
@End(file: iostream)
-
To comply to the standard, there is also an extension-less header file.
-
It simply includes the normal header.
5
@Def(file: iostream.cpp)
#define iostream_IMPL 1
#include "iostream.h"
@End(file: iostream.cpp)
-
An implementation is needed to define global elements
-
It defines a macro that can be used by the header to decide if a symbol must be declared or defined.
The ostream
class
-
The
ostream
class encapsulates everything that is needed to write a string to the UART.
-
The constructor ensures that the UART is setup.
-
The
<<
operator sends a string to the UART.
7
@def(declarations)
class ostream {
@put(privates)
public:
@Put(ostream methods)
};
@end(declarations)
-
The class has
public
and private
attributes
8
@Def(ostream methods)
@put(methods)
@End(ostream methods)
-
Make methods of
ostream
class available globally
9
@def(methods)
ostream() {
@Put(setup uart);
}
@end(methods)
-
A default constructor will setup the UART for writing
10
@add(methods)
ostream &operator<<(const char *s) {
@put(send string);
return *this;
}
@end(methods)
-
The
<<
-operator will send a C-style string to the UART
Communicating with the UART
-
Implementing the low-level communication with the UART
The UART is addressed via a bunch of words in memory. Starting at the address 0x10013000
some words are an interface to the UART.
I have found this address in the file metal.h
in the sifive/freedom-e-sdk
project on Github in the directory bsp/sifive-hifive1-revb
.
An important part is to treat this pointer as volatile
because its contents is not only modified by our program. The hardware itself can change values by its own. So it is important not to optimize away repeated accesses, but to fetch the values again and again from memory.
12
@def(privates)
using uart_t = volatile int *;
uart_t uart() {
return reinterpret_cast<uart_t>(
0x10013000
);
};
@end(privates)
-
Accessor returns a pointer to the first register as a
volatile
variable
13
@Def(setup uart)
static const int tx_control { 0x02 };
uart()[tx_control] |= 1;
@end(setup uart)
-
Bit
1
of the tx_control
word must be set on to enable output of the UART
14
@add(privates)
void put(char c) {
static const int tx_data { 0x00 };
while (uart()[tx_data] < 0) { }
uart()[tx_data] = c;
}
@end(privates)
-
Writing is done with the first UART control word.
-
As long as this word is negative the buffer is full and nothing can be written
-
As soon as the buffer has space, the new byte is put into the buffer
-
That is all for writing one character.
Sending a string
-
Writes a string character by character
16
@def(send string)
if (s) for (; *s; ++s) {
if (*s == '\n') {
put('\r');
}
put(*s);
}
@end(send string)
-
Sending a string is simply the sending of individual characters.
-
As a small complication my terminal distinguished between newline and carriage return.
-
To get the right look function must write an additional carriage return for each newline that occurs in the string.
The cout
global
-
Global variable for handling output
18
@add(declarations)
#if iostream_IMPL
ostream cout;
#else
extern ostream cout;
#endif
@end(declarations)
-
The variable must only be defined once.
-
The indicator of the implementation file assures this.


MARTH Club
A list of addresses and links we will use:
-
MARTH Club info form
: (bwls.net accounts only) Let us know who you are!
-
https://github.com/marthClub/blankSketch
- You'll copy and paste this address to import a blank sketch for your first project.
-
Color Picker
: Allows you to find the rgb color codes for a specific color.
Setting up your Chromebook or other device for local development (independent from GitHub).
- Pros
-
Changes you make will be reflected instantly instead of having to wait for GitHub commits to take effect.
-
The Caret editor is superior to the online editor in GitHub in many ways.
-
You can use "undo" in the Caret app to backtrack if you accidentally screw something up in your code.
- Cons
-
Your project will only run on your own device. It won't be live on the internet for everyone to see. (However, you can very easily upload your sketch.js file to a web-enabled GitHub repository later)
- Links:
-
Caret (Chrome Web Store)
: A text editor designed for coding that can run on your Chromebook. It can open and save files in your local storage or your Google Drive.
-
Web Server for Chrome (Chrome Web Store)
: An app that allows you to open web pages stored on your device or in your Google Drive as if they were published on the web.
-
"Blank Sketch" Files: The three files needed to run a p5.js sketch. Download them and then move them into a directory on your device or in your Google Drive.
- Steps:
-
Download and launch the two apps (Caret and WSfC).
-
Click on each of the three "Blank Sketch" Links to download them. Locate the files in your "Downloads" folder, and move them to another folder on your device or in your Google Drive.
-
In WSfC, click "CHOOSE FOLDER", and navigate to the folder where you stored the "Blank Sketch" files. Click "OK".
-
In WSfC, click the blue link under "Web Server URL(s)". This will open the directory in your browser. Click the "index.html" to open your sketch. Note that it will just be a blank page until you put some code in the sketch.js file.
-
In Caret, open the sketch.js file, and put in some code. Save using the menu, or press Ctrl-S.
-
In your browser, refresh the webpage to see the changes. Repeat these last two steps until you've made something awesome!
The sites listed here will help you get started learning to code.
-
Khan Academy's Intro to JS
: This is an excellent place for beginners to start. The interactive lessons will take you through some very important programming concepts. Everything is visually based, so you can see what your code is doing. There is excellent feedback, so you never get stuck.
-
The p5.js website
: P5.js is a JavaScript library designed "to make coding accessible for artists, designers, educators, and beginners." It is the backbone of the creations we make in MARTH Club. There is a ton of great info on this site, including blocks of working code that you can copy and paste into your projects. Especially check out the tutorials and reference pages.


From childhood's hour I have not been
As others were; I have not seen
As others saw; I could not bring
My passions from a common spring
From the same source I have not taken
My Sorrow; I could not awaken
My heart to joy at the same tone;
And all I loved, I loved alone.
Excerpt from Alone
by Edgar Allan Poe
Who is your favorite poet and why?
What color is your favorite beanie?
Black Blue Pink GreenDoes it have ears?
| Hair | Shirt | Pants | Tattoos |
|---|---|---|---|


Toggle navigation
MatchWear
Search
Shop Men
Shop Women
Look Book
About
Contact
Questionnaire
Men's Night Out SET 1
$149.99
Buy Now
Buy individual items!


Save
Autologin
Same for all environments
EMEA
US
Demo
Show more items per page
Add campaign prefix to new script/element name
Add date and author in description
Add some predefined code for new scripts
Improve Content Manager
Omit Action Details page
If no Campaign scripts then add a new one
Reorder Campaign sidebar
Alternative document title
Add input for filtering options in selects
Change default Action Log filters
Date
Hit
Visitor
IP
City
Country
Page
Campaign
Version
Is Generation
Is Content Page
Content
Actions
Criteria
Segments
Cookies
Referrer
Server
Agent
Browser
OS
Device Type
Site Pages
Generation Method
Visitor ID 1
Visitor ID 2
Visitor ID 3
Visitor ID 4
Visitor ID 5
Weather condition
Temperature range
Search Engine
Session Referrer
Search Phrase
Social Network
Traffic Source Type
Targeted group
Save
Reset


Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make atype specimen book. It has survived not only five centuries. but also the leap into electronic typesetting, remaining essentially unchanged.
Lorem Ipsum is simply dummy text of the printing and typesetting of the industry. Lorem Ipsum has been
Lorem Ipsum is simply dummy text of the printing and typesetting of the industry. Lorem Ipsum has been
Lorem Ipsum is simply dummy text of the printing and typesetting of the industry. Lorem Ipsum has been
Lorem Ipsum is simply dummy text of the printing and typesetting of the
Lorem Ipsum is simply dummy text of the printing and typesetting of the
Lorem Ipsum is simply dummy text of the printing and typesetting of the
Lorem Ipsum is simply dummy text of the printing and typesetting of the
Lorem Ipsum is simply dummy text of the printing and typesetting of the
Lorem Ipsum is simply dummy text of the printing and typesetting of the


- geCalories_Long(long) - Method in class com.midhunarmid.movesapi.summary.SummaryData
-
Calories burn for the activity (if applicable) in kcal
returns def if an error occurred
- geDistance_Long(long) - Method in class com.midhunarmid.movesapi.summary.SummaryData
-
Distance for the activity in meters
returns def if an error occurred
- geDuration_Long(long) - Method in class com.midhunarmid.movesapi.summary.SummaryData
-
Duration of the activity in seconds
returns def if an error occurred
- geSteps_Long(long) - Method in class com.midhunarmid.movesapi.summary.SummaryData
-
Step count for the activity
returns def if an error occurred
- getAccessToken() - Method in class com.midhunarmid.movesapi.auth.AuthData
-
Get a valid access token to use Moves API
- getActivity() - Method in class com.midhunarmid.movesapi.summary.SummaryData
-
Specific name of the activity.
- getAuthData() - Static method in class com.midhunarmid.movesapi.auth.AuthData
-
Use this method to get
AuthData
of currently authenticated user
- getAuthData() - Static method in class com.midhunarmid.movesapi.MovesAPI
-
Call this method to get currently authenticated user's
AuthData
- getCalories() - Method in class com.midhunarmid.movesapi.summary.SummaryData
-
Calories burn for the activity in kcal
- getCaloriesAvailable() - Method in class com.midhunarmid.movesapi.profile.ProfileData
-
whether calories are available for user
- getCaloriesIdle() - Method in class com.midhunarmid.movesapi.summary.SummaryListData
-
Daily idle burn in kcal.
- getClientDetails() - Static method in class com.midhunarmid.movesapi.MovesAPI
-
- getClientID() - Method in class com.midhunarmid.movesapi.MovesAPI
-
Gets the client ID which set on init()
- getClientScopes() - Method in class com.midhunarmid.movesapi.MovesAPI
-
Gets the client Scopes which set on init()
- getClientSecret() - Method in class com.midhunarmid.movesapi.MovesAPI
-
Gets the client Secret which set on init()
- getDailySummaryList(MovesHandler<ArrayList<SummaryListData>>, String, String, String, String, String) - Static method in class com.midhunarmid.movesapi.servercalls.HTTPCall
-
Use this method to fetch the Summary information of a user from Moves Server
- getDate() - Method in class com.midhunarmid.movesapi.summary.SummaryListData
-
Summary date, in format yyyyMMdd
- getDistance() - Method in class com.midhunarmid.movesapi.summary.SummaryData
-
Distance for the activity in meters
- getDuration() - Method in class com.midhunarmid.movesapi.summary.SummaryData
-
Duration of the activity in seconds
- getExpiresIn() - Method in class com.midhunarmid.movesapi.auth.AuthData
-
Get the access token lifetime in seconds
- getExpiresIn_Long(long) - Method in class com.midhunarmid.movesapi.auth.AuthData
-
Get the access token lifetime in seconds
returns def if an error occurred
- getFirstDate() - Method in class com.midhunarmid.movesapi.profile.ProfileData
-
first date from which there might be data for the user, in yyyyMMdd format
- getFirstDate_Millis(long) - Method in class com.midhunarmid.movesapi.profile.ProfileData
-
Get first date(as a millisecond value) from which there might be data for the user.
- getFirstWeekDay() - Method in class com.midhunarmid.movesapi.profile.ProfileData
-
users first day of the week, 1=Sunday, 2=Monday
- getFirstWeekDay_Int(int) - Method in class com.midhunarmid.movesapi.profile.ProfileData
-
Get users first day of the week, 1=Sunday, 2=Monday
returns def if an error occurred
- getGroup() - Method in class com.midhunarmid.movesapi.summary.SummaryData
-
A more generic activity super-group to which the action belongs to.
- getLanguage() - Method in class com.midhunarmid.movesapi.profile.ProfileData
-
users language as BCP 47 language code
- getLastUpdate() - Method in class com.midhunarmid.movesapi.summary.SummaryListData
-
When the summary data was last updated in ISO 8601 (yyyyMMdd’T’HHmmssZ) format, always in UTC
- getLocale() - Method in class com.midhunarmid.movesapi.profile.ProfileData
-
users locale ID
- getMetric() - Method in class com.midhunarmid.movesapi.profile.ProfileData
-
whether user prefers metric units
- getPath() - Method in enum com.midhunarmid.movesapi.summary.SummaryListData.SUMMARY_TYPES
-
- getPlatform() - Method in class com.midhunarmid.movesapi.profile.ProfileData
-
users current platform, one of “ios” or “android”
- getPreference(String) - Static method in class com.midhunarmid.movesapi.util.MovesAPIPreferences
-
Use this method to GET a value for the supplied key
- getProfile(MovesHandler<ProfileData>) - Static method in class com.midhunarmid.movesapi.MovesAPI
-
Request
ProfileData
of authenticated user from Moves Server
- getProfile(MovesHandler<ProfileData>) - Static method in class com.midhunarmid.movesapi.servercalls.HTTPCall
-
Use this method to fetch the Profile information of a user from Moves Server
- getRedirectURL() - Method in class com.midhunarmid.movesapi.MovesAPI
-
Gets the client Redirect URL which set on init()
- getRefreshToken() - Method in class com.midhunarmid.movesapi.auth.AuthData
-
Get the refresh token used to refresh an access token via refresh token call
- getSteps() - Method in class com.midhunarmid.movesapi.summary.SummaryData
-
Step count for the activity
- getSummaries() - Method in class com.midhunarmid.movesapi.summary.SummaryListData
-
An
ArrayList
of
SummaryData
if there are some summary for this date
or
null
if there is no summary available for the date
- getSummary_PastDays(MovesHandler<ArrayList<SummaryListData>>, String, String) - Static method in class com.midhunarmid.movesapi.MovesAPI
-
Get daily activity summaries for user, including step count, distance and duration for each activity (if applicable).
- getSummary_SingleDay(MovesHandler<ArrayList<SummaryListData>>, String, String) - Static method in class com.midhunarmid.movesapi.MovesAPI
-
Get daily activity summaries for user, including step count, distance and duration for each activity (if applicable).
- getSummary_SpecificMonth(MovesHandler<ArrayList<SummaryListData>>, String, String) - Static method in class com.midhunarmid.movesapi.MovesAPI
-
Get daily activity summaries for user, including step count, distance and duration for each activity (if applicable).
- getSummary_SpecificWeek(MovesHandler<ArrayList<SummaryListData>>, String, String) - Static method in class com.midhunarmid.movesapi.MovesAPI
-
Get daily activity summaries for user, including step count, distance and duration for each activity (if applicable).
- getSummary_WithinRange(MovesHandler<ArrayList<SummaryListData>>, String, String, String) - Static method in class com.midhunarmid.movesapi.MovesAPI
-
Get daily activity summaries for user, including step count, distance and duration for each activity (if applicable).
- getTimeInMillis(String, String, long) - Static method in class com.midhunarmid.movesapi.util.Utilities
-
Use this method to get convert a
String
representation of Date into milliseconds.
- getTimeZoneId() - Method in class com.midhunarmid.movesapi.profile.ProfileData
-
time zone identifier for users current time zone
- getTimeZoneOffset() - Method in class com.midhunarmid.movesapi.profile.ProfileData
-
offset to UTC in seconds
- getTimeZoneOffset_Long(long) - Method in class com.midhunarmid.movesapi.profile.ProfileData
-
Get the user's time zone offset to UTC in seconds
returns def if an error occurred
- getUserID() - Method in class com.midhunarmid.movesapi.auth.AuthData
-
Get a unique identifier (64 bit unsigned) of the user associated with the access token
- getUserID() - Method in class com.midhunarmid.movesapi.profile.ProfileData
-
a unique identifier (64 bit unsigned) of the user
- getUserID_Long(long) - Method in class com.midhunarmid.movesapi.auth.AuthData
-
Get a unique identifier of the user
returns def if an error occurred
- getUserID_Long(long) - Method in class com.midhunarmid.movesapi.profile.ProfileData
-
Get a unique identifier of the user
returns def if an error occurred


Alex
Hedley
Home
Doodle God
Testing
Fireworks
CSS3 Testing
Code
Fireworks!
Found
http://www.kellishaver.com/
http://mashable.com/2010/07/04/javascript-fireworks-animation/


{% extends "_layouts/base.html" %} {% set id = 'pricing' %} {% set bodyController = 'pricingCtrl' %} {% block main %}
Designed for developers, businesses and enterprise alike. We grow, as you grow.
{% if notification %}Send targeted cross-platform push notifications to all, or a select number of your users. Learn more about Push
Push hot code live into production apps without ever going through the app stores. Learn more about Deploy
Turn your Ionic code into native app binaries for different platforms with a single command. Learn more about Package
Traditional email and password user authentication, as well as popular third-party social providers. Learn more about Auth
Invite team members and collaborate efficiently with your whole team.
Ionic Cloud makes security profile management easy on iOS and Android.
Keep all your apps in one place with the Ionic Cloud apps dashboard.
All plans come with user auth and management in our simple dashboard.
Preview, test, and interact with all your Ionic apps with the Ionic View app.
Easily transfer apps off to clients or customers, and let them handle billing.
Push notification: a push notification is one notification sent to one device.
App update: an app update is an end-user app updating itself through a new Deploy.
Native build: a native build is a package operation generating either an iOS or Android app binary
Nope! Every plan allows for development to all supported mobile platforms.
We accept Visa, MasterCard, American Express, and Discover cards. We don't yet support PayPal.
Plans are setup for auto renewal but can be cancelled before your renewal date with one month’s notice. After your plan expires, we will notify you to renew for a period of 30 days. Your data may be deleted after a 60 day lapse in your app plan subscription.
Ionic’s Cloud services are meant to be an end-to-end solution, offering services integrate with each other to help scale your app. At this time, services are not offered separately, but we encourage you to get in touch and let us know your thoughts!
You can easily upgrade your plan through the dashboard for your app. Plans are tied to apps to make them easier to administer and move between teams, while keeping billing fair across a diverse set of apps.
We automatically bill you at the beginning of each subscription month or year, depending on the type of subscription you have. You can manage your auto-billing when you login to your Ionic Cloud account.
We offer basic account-level email support to help with billing, account, and service quality issues. For more advanced support, please get in touch with us for custom support options.
Inside of your Ionic Dashboard, under the Subscription tab, in the Overview section. Plan usage and overages will be clearly displayed.
All payments are securely processed by industry leader, Stripe. Your card information never even touches our servers.
Once you reach the limits of your plan, that service will no longer work until you either upgrade your plan or the next monthly cycle begins.


You have Promised to donate Groceries to Alayam on 09 Nov 2017
You have expressed interest for the service Singer to Alayam on 09 Nov 2017
You have received a thank you video from Alayam on 10 Nov 2017


Fake picture of Rabi Pirzada's suicide attempt doing rounds on social media
by https://www.facebook.com/dunyanewsLAHORE (Web Desk) - Rabi Pirzada’s suicide rumors after leaked nude photos and Videos have vent viral on social media.
A picture is doing rounds on social media showing that the star singer Rabi Pirzada has done suicide attempt after her immoral videos went viral on social media yesterday and became a top trend on Twitter, after which she was heavily criticized on social media.
However Humayun Pirzada, father of singer Rabbi Pirzada, denied the news of his daughter s suicide.
The picture does not belong to Rabi Pirzada as is mentioned in the said post.
Rabbi Pirzada has filed a complaint into the Federal Investigation Agency s cybercrime wing Lahore against her leaked videos.
FIA Cyber Crime Wing investigated the case after the singer s nude photos and videos went viral on social media.


Create and destroy Docker-based installations (or ships as we like to call them) seamlessly across multiple cloud platforms, including AWS, Digital Ocean and Flexiant.
Code is based on Docker's code, and so is 100% Docker compatible and 100% open source. Think of it as an extension to Docker.
Securely manage and control containers as well as ships (the VMs they run in) across multiple clouds and locations, bringing Docker to a whole new level.


You can delete a specific document if you have its documentId
. You can either delete it permanently, or just send it to Trash. You can retrieve it from the Trash, or leave it there and it will get deleted after some designated amount of time.
Play with the API Explorer:
Only documentId
is mandatory, and it must be an AODocs documentId
not a Drive fileId
.
⭑ Note: To get an AODocs document (including its
documentId
) by the Drive ID of one of its attachments, use theGET /document/v1/drive/{driveId}
method.
DELETE https://aodocs.altirnao.com/api/document/v1/RssP0ol81I2JjwfFgxk?deleteMode=TRASH
Because this is a deletion of a resource, there is no resource to return in the response. The response returns an HTTP code of 204 (NO CONTENT)
.
204


No Can Transclude has moved!
This version of the publication is no longer available.
Latest Publication URL


fun getDatabase(databaseNameProperty:String): MongoDatabase(source)
Return the sync database specified in the databaseNameProperty.
if the env or system property is not found, use the databaseNameProperty as database name (remove "_mongo_db" string is present).


Your Results
Brain health is important to your quality of life
The Results
Consistent with our disclaimer if you remain concerned about your brain health you should consult a medical doctor for a qualified medical diagnosis.
Disclaimer
This test serves to provide you with a fast and free understanding of your current brain health. The model is calibrated using medical diagnoses, however, the results do not serve as a medical diagnosis. If the results indicate that your brain health is less than satisfactory we recommend that you seek further more detailed medical diagnosis.


174. Walls
time limit per test: 3 sec.
memory limit per test: 32768
KB
input: standard
output: standard
People of country T-land lived on the big plain many years ago.
It is happened so that they started to quarrel, so they began to build walls to
separate from each other.
One day they realized that walls surround some
part of the country. Your task is to determine which wall was build first to
surround a part of the T-land.
Input
The first line of input contains one number M
(1<=M<=200000) - number of walls. Each of the following M lines contains
four integer numbers: Cartesian coordinates of two ends of each wall. Walls are
rectilinear segments with positive length, two walls can cross only by ends, and
walls can't coincide. All coordinates do not exceed 10^9 by its absolute values.
Output
Write the answer in the single line of output. If all the walls
leave the territory opened, write 0.
Sample test(s)
Input
4
0 0 1 0
0 1 0 0
1 0 0 1
2 2 5 7
Output
3
| Author: |
Dmitry Orlov |
| Resource: |
Saratov ST team Spring Contest #1 |
| Date: |
18.05.2003
|
| Server time: 2004-01-13 21:15:25 |
Online Contester Team © 2002 - 2003. All
rights
reserved. | | |


ALL ABOUT MY MOTHER A film review by Steve Rhodes Copyright 1999 Steve Rhodes RATING (0 TO ****): **
Spanish writer and director Pedro Almodóvar (WOMEN ON THE VERGE OF A NERVOUS BREAKDOWN) loves to create movies featuring a cornucopia of colorful characters. In ALL ABOUT MY MOTHER he throws in everything but the kitchen sink. (Actually, for all we know, the sink may be there but dressed up as something else.)
 There's also a lesbian actress, Huma Rojo (Marisa Paredes), with a drug addicted girlfriend, Nina (Candela Peña).
Soon after the movie opens, the story's protagonist, Manuela (Cecilia Roth), loses her teenaged son, Esteban (Eloy Azorín). As he chases after Huma and Nina's taxi, he is killed by another car.
Her son's death sets Manuela off on a journey to locate his father, with whom she lost contact after her son's birth. Given the rest of the plot, you probably will not be surprised to learn that her ex-husband is an ex-man, now woman, named Lola (Toni Cantó). It gets even more complicated and convoluted.
One's enjoyment of the story depends on whether all of this quirkiness is enough to sustain your interests. After a while, I just got tired of all of the overly cute twists and turns in the plot. Some of the acting is good, but that's about it.
 The film is in Spanish with English subtitles. It is rated R for sexuality including strong sexual dialogue, language and some drug content and would be acceptable for older teenagers.
Email<EMAIL_ADDRESS>Web: http://www.InternetReviews.com
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Plato on Github
Report Home
src\ng\q.js
Maintainability
72.41
Lines of code
585
Difficulty
76.24
Estimated Errors
2.29
Function weight
By Complexity
By SLOC
'use strict'; /** * @ngdoc service * @name $q * @requires $rootScope * * @description * A service that helps you run functions asynchronously, and use their return values (or exceptions) * when they are done processing. * * This is an implementation of promises/deferred objects inspired by * [Kris Kowal's Q](https://github.com/kriskowal/q). * * $q can be used in two fashions --- one which is more similar to Kris Kowal's Q or jQuery's Deferred * implementations, and the other which resembles ES6 promises to some degree. * * # $q constructor * * The streamlined ES6 style promise is essentially just using $q as a constructor which takes a `resolver` * function as the first argument. This is similar to the native Promise implementation from ES6 Harmony, * see [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise). * * While the constructor-style use is supported, not all of the supporting methods from ES6 Harmony promises are * available yet. * * It can be used like so: * * ```js * // for the purpose of this example let's assume that variables `$q` and `okToGreet` * // are available in the current lexical scope (they could have been injected or passed in). * * function asyncGreet(name) { * // perform some asynchronous operation, resolve or reject the promise when appropriate. * return $q(function(resolve, reject) { * setTimeout(function() { * if (okToGreet(name)) { * resolve('Hello, ' + name + '!'); * } else { * reject('Greeting ' + name + ' is not allowed.'); * } * }, 1000); * }); * } * * var promise = asyncGreet('Robin Hood'); * promise.then(function(greeting) { * alert('Success: ' + greeting); * }, function(reason) { * alert('Failed: ' + reason); * }); * ``` * * Note: progress/notify callbacks are not currently supported via the ES6-style interface. * * However, the more traditional CommonJS-style usage is still available, and documented below. * * [The CommonJS Promise proposal](http://wiki.commonjs.org/wiki/Promises) describes a promise as an * interface for interacting with an object that represents the result of an action that is * performed asynchronously, and may or may not be finished at any given point in time. * * From the perspective of dealing with error handling, deferred and promise APIs are to * asynchronous programming what `try`, `catch` and `throw` keywords are to synchronous programming. * * ```js * // for the purpose of this example let's assume that variables `$q` and `okToGreet` * // are available in the current lexical scope (they could have been injected or passed in). * * function asyncGreet(name) { * var deferred = $q.defer(); * * setTimeout(function() { * deferred.notify('About to greet ' + name + '.'); * * if (okToGreet(name)) { * deferred.resolve('Hello, ' + name + '!'); * } else { * deferred.reject('Greeting ' + name + ' is not allowed.'); * } * }, 1000); * * return deferred.promise; * } * * var promise = asyncGreet('Robin Hood'); * promise.then(function(greeting) { * alert('Success: ' + greeting); * }, function(reason) { * alert('Failed: ' + reason); * }, function(update) { * alert('Got notification: ' + update); * }); * ``` * * At first it might not be obvious why this extra complexity is worth the trouble. The payoff * comes in the way of guarantees that promise and deferred APIs make, see * https://github.com/kriskowal/uncommonjs/blob/master/promises/specification.md. * * Additionally the promise api allows for composition that is very hard to do with the * traditional callback ([CPS](http://en.wikipedia.org/wiki/Continuation-passing_style)) approach. * For more on this please see the [Q documentation](https://github.com/kriskowal/q) especially the * section on serial or parallel joining of promises. * * # The Deferred API * * A new instance of deferred is constructed by calling `$q.defer()`. * * The purpose of the deferred object is to expose the associated Promise instance as well as APIs * that can be used for signaling the successful or unsuccessful completion, as well as the status * of the task. * * **Methods** * * - `resolve(value)` – resolves the derived promise with the `value`. If the value is a rejection * constructed via `$q.reject`, the promise will be rejected instead. * - `reject(reason)` – rejects the derived promise with the `reason`. This is equivalent to * resolving it with a rejection constructed via `$q.reject`. * - `notify(value)` - provides updates on the status of the promise's execution. This may be called * multiple times before the promise is either resolved or rejected. * * **Properties** * * - promise – `{Promise}` – promise object associated with this deferred. * * * # The Promise API * * A new promise instance is created when a deferred instance is created and can be retrieved by * calling `deferred.promise`. * * The purpose of the promise object is to allow for interested parties to get access to the result * of the deferred task when it completes. * * **Methods** * * - `then(successCallback, errorCallback, notifyCallback)` – regardless of when the promise was or * will be resolved or rejected, `then` calls one of the success or error callbacks asynchronously * as soon as the result is available. The callbacks are called with a single argument: the result * or rejection reason. Additionally, the notify callback may be called zero or more times to * provide a progress indication, before the promise is resolved or rejected. * * This method *returns a new promise* which is resolved or rejected via the return value of the * `successCallback`, `errorCallback` (unless that value is a promise, in which case it is resolved * with the value which is resolved in that promise using * [promise chaining](http://www.html5rocks.com/en/tutorials/es6/promises/#toc-promises-queues)). * It also notifies via the return value of the `notifyCallback` method. The promise cannot be * resolved or rejected from the notifyCallback method. * * - `catch(errorCallback)` – shorthand for `promise.then(null, errorCallback)` * * - `finally(callback, notifyCallback)` – allows you to observe either the fulfillment or rejection of a promise, * but to do so without modifying the final value. This is useful to release resources or do some * clean-up that needs to be done whether the promise was rejected or resolved. See the [full * specification](https://github.com/kriskowal/q/wiki/API-Reference#promisefinallycallback) for * more information. * * # Chaining promises * * Because calling the `then` method of a promise returns a new derived promise, it is easily * possible to create a chain of promises: * * ```js * promiseB = promiseA.then(function(result) { * return result + 1; * }); * * // promiseB will be resolved immediately after promiseA is resolved and its value * // will be the result of promiseA incremented by 1 * ``` * * It is possible to create chains of any length and since a promise can be resolved with another * promise (which will defer its resolution further), it is possible to pause/defer resolution of * the promises at any point in the chain. This makes it possible to implement powerful APIs like * $http's response interceptors. * * * # Differences between Kris Kowal's Q and $q * * There are two main differences: * * - $q is integrated with the {@link ng.$rootScope.Scope} Scope model observation * mechanism in angular, which means faster propagation of resolution or rejection into your * models and avoiding unnecessary browser repaints, which would result in flickering UI. * - Q has many more features than $q, but that comes at a cost of bytes. $q is tiny, but contains * all the important functionality needed for common async tasks. * * # Testing * * ```js * it('should simulate promise', inject(function($q, $rootScope) { * var deferred = $q.defer(); * var promise = deferred.promise; * var resolvedValue; * * promise.then(function(value) { resolvedValue = value; }); * expect(resolvedValue).toBeUndefined(); * * // Simulate resolving of promise * deferred.resolve(123); * // Note that the 'then' function does not get called synchronously. * // This is because we want the promise API to always be async, whether or not * // it got called synchronously or asynchronously. * expect(resolvedValue).toBeUndefined(); * * // Propagate promise resolution to 'then' functions using $apply(). * $rootScope.$apply(); * expect(resolvedValue).toEqual(123); * })); * ``` * * @param {function(function, function)} resolver Function which is responsible for resolving or * rejecting the newly created promise. The first parameter is a function which resolves the * promise, the second parameter is a function which rejects the promise. * * @returns {Promise} The newly created promise. */ function $QProvider() { this.$get = ['$rootScope', '$exceptionHandler', function($rootScope, $exceptionHandler) { return qFactory(function(callback) { $rootScope.$evalAsync(callback); }, $exceptionHandler); }]; } function $$QProvider() { this.$get = ['$browser', '$exceptionHandler', function($browser, $exceptionHandler) { return qFactory(function(callback) { $browser.defer(callback); }, $exceptionHandler); }]; } /** * Constructs a promise manager. * * @param {function(function)} nextTick Function for executing functions in the next turn. * @param {function(...*)} exceptionHandler Function into which unexpected exceptions are passed for * debugging purposes. * @returns {object} Promise manager. */ function qFactory(nextTick, exceptionHandler) { var $qMinErr = minErr('$q', TypeError); function callOnce(self, resolveFn, rejectFn) { var called = false; function wrap(fn) { return function(value) { if (called) return; called = true; fn.call(self, value); }; } return [wrap(resolveFn), wrap(rejectFn)]; } /** * @ngdoc method * @name ng.$q#defer * @kind function * * @description * Creates a `Deferred` object which represents a task which will finish in the future. * * @returns {Deferred} Returns a new instance of deferred. */ var defer = function() { return new Deferred(); }; function Promise() { this.$$state = { status: 0 }; } Promise.prototype = { then: function(onFulfilled, onRejected, progressBack) { var result = new Deferred(); this.$$state.pending = this.$$state.pending || []; this.$$state.pending.push([result, onFulfilled, onRejected, progressBack]); if (this.$$state.status > 0) scheduleProcessQueue(this.$$state); return result.promise; }, "catch": function(callback) { return this.then(null, callback); }, "finally": function(callback, progressBack) { return this.then(function(value) { return handleCallback(value, true, callback); }, function(error) { return handleCallback(error, false, callback); }, progressBack); } }; //Faster, more basic than angular.bind http://jsperf.com/angular-bind-vs-custom-vs-native function simpleBind(context, fn) { return function(value) { fn.call(context, value); }; } function processQueue(state) { var fn, deferred, pending; pending = state.pending; state.processScheduled = false; state.pending = undefined; for (var i = 0, ii = pending.length; i < ii; ++i) { deferred = pending[i][0]; fn = pending[i][state.status]; try { if (isFunction(fn)) { deferred.resolve(fn(state.value)); } else if (state.status === 1) { deferred.resolve(state.value); } else { deferred.reject(state.value); } } catch (e) { deferred.reject(e); exceptionHandler(e); } } } function scheduleProcessQueue(state) { if (state.processScheduled || !state.pending) return; state.processScheduled = true; nextTick(function() { processQueue(state); }); } function Deferred() { this.promise = new Promise(); //Necessary to support unbound execution :/ this.resolve = simpleBind(this, this.resolve); this.reject = simpleBind(this, this.reject); this.notify = simpleBind(this, this.notify); } Deferred.prototype = { resolve: function(val) { if (this.promise.$$state.status) return; if (val === this.promise) { this.$$reject($qMinErr( 'qcycle', "Expected promise to be resolved with value other than itself '{0}'", val)); } else { this.$$resolve(val); } }, $$resolve: function(val) { var then, fns; fns = callOnce(this, this.$$resolve, this.$$reject); try { if ((isObject(val) || isFunction(val))) then = val && val.then; if (isFunction(then)) { this.promise.$$state.status = -1; then.call(val, fns[0], fns[1], this.notify); } else { this.promise.$$state.value = val; this.promise.$$state.status = 1; scheduleProcessQueue(this.promise.$$state); } } catch (e) { fns[1](e); exceptionHandler(e); } }, reject: function(reason) { if (this.promise.$$state.status) return; this.$$reject(reason); }, $$reject: function(reason) { this.promise.$$state.value = reason; this.promise.$$state.status = 2; scheduleProcessQueue(this.promise.$$state); }, notify: function(progress) { var callbacks = this.promise.$$state.pending; if ((this.promise.$$state.status <= 0) && callbacks && callbacks.length) { nextTick(function() { var callback, result; for (var i = 0, ii = callbacks.length; i < ii; i++) { result = callbacks[i][0]; callback = callbacks[i][3]; try { result.notify(isFunction(callback) ? callback(progress) : progress); } catch (e) { exceptionHandler(e); } } }); } } }; /** * @ngdoc method * @name $q#reject * @kind function * * @description * Creates a promise that is resolved as rejected with the specified `reason`. This api should be * used to forward rejection in a chain of promises. If you are dealing with the last promise in * a promise chain, you don't need to worry about it. * * When comparing deferreds/promises to the familiar behavior of try/catch/throw, think of * `reject` as the `throw` keyword in JavaScript. This also means that if you "catch" an error via * a promise error callback and you want to forward the error to the promise derived from the * current promise, you have to "rethrow" the error by returning a rejection constructed via * `reject`. * * ```js * promiseB = promiseA.then(function(result) { * // success: do something and resolve promiseB * // with the old or a new result * return result; * }, function(reason) { * // error: handle the error if possible and * // resolve promiseB with newPromiseOrValue, * // otherwise forward the rejection to promiseB * if (canHandle(reason)) { * // handle the error and recover * return newPromiseOrValue; * } * return $q.reject(reason); * }); * ``` * * @param {*} reason Constant, message, exception or an object representing the rejection reason. * @returns {Promise} Returns a promise that was already resolved as rejected with the `reason`. */ var reject = function(reason) { var result = new Deferred(); result.reject(reason); return result.promise; }; var makePromise = function makePromise(value, resolved) { var result = new Deferred(); if (resolved) { result.resolve(value); } else { result.reject(value); } return result.promise; }; var handleCallback = function handleCallback(value, isResolved, callback) { var callbackOutput = null; try { if (isFunction(callback)) callbackOutput = callback(); } catch (e) { return makePromise(e, false); } if (isPromiseLike(callbackOutput)) { return callbackOutput.then(function() { return makePromise(value, isResolved); }, function(error) { return makePromise(error, false); }); } else { return makePromise(value, isResolved); } }; /** * @ngdoc method * @name $q#when * @kind function * * @description * Wraps an object that might be a value or a (3rd party) then-able promise into a $q promise. * This is useful when you are dealing with an object that might or might not be a promise, or if * the promise comes from a source that can't be trusted. * * @param {*} value Value or a promise * @returns {Promise} Returns a promise of the passed value or promise */ var when = function(value, callback, errback, progressBack) { var result = new Deferred(); result.resolve(value); return result.promise.then(callback, errback, progressBack); }; /** * @ngdoc method * @name $q#resolve * @kind function * * @description * Alias of {@link ng.$q#when when} to maintain naming consistency with ES6. * * @param {*} value Value or a promise * @returns {Promise} Returns a promise of the passed value or promise */ var resolve = when; /** * @ngdoc method * @name $q#all * @kind function * * @description * Combines multiple promises into a single promise that is resolved when all of the input * promises are resolved. * * @param {Array.<Promise>|Object.<Promise>} promises An array or hash of promises. * @returns {Promise} Returns a single promise that will be resolved with an array/hash of values, * each value corresponding to the promise at the same index/key in the `promises` array/hash. * If any of the promises is resolved with a rejection, this resulting promise will be rejected * with the same rejection value. */ function all(promises) { var deferred = new Deferred(), counter = 0, results = isArray(promises) ? [] : {}; forEach(promises, function(promise, key) { counter++; when(promise).then(function(value) { if (results.hasOwnProperty(key)) return; results[key] = value; if (!(--counter)) deferred.resolve(results); }, function(reason) { if (results.hasOwnProperty(key)) return; deferred.reject(reason); }); }); if (counter === 0) { deferred.resolve(results); } return deferred.promise; } var $Q = function Q(resolver) { if (!isFunction(resolver)) { throw $qMinErr('norslvr', "Expected resolverFn, got '{0}'", resolver); } if (!(this instanceof Q)) { // More useful when $Q is the Promise itself. return new Q(resolver); } var deferred = new Deferred(); function resolveFn(value) { deferred.resolve(value); } function rejectFn(reason) { deferred.reject(reason); } resolver(resolveFn, rejectFn); return deferred.promise; }; $Q.defer = defer; $Q.reject = reject; $Q.when = when; $Q.resolve = resolve; $Q.all = all; return $Q; }


--- { "title": "Chart and Graph - Pie", "language": "en", "category": "Plugin", "description": "Dynamically generates a calendar interface for navigating a list of events.", "tag": "charts", "fr": "pie" } ---
wb-charts-donut
New from WET 3.1.4 release. This preset could be emulated for prior version, WET 3.1.4, by combining setting.
// FYI - The "Donut" preset is already defined by default, this are just to show an example on how to create your own preset.
// In the global settings.js
var wet_boew_charts = {
preset: {
donut: {
// Donut setting
type: 'pie',
height: 250,
percentlegend: true,
pieinnerradius: 45,
pietilt: 50,
piehoverable: true,
decimal: 1,
piethreshold: 8,
legendinline: true,
piestartangle: 100
}
}
}
| Series 1 | Series 2 | Series 3 | Series 4 | Series 5 | Series 6 | Series 7 | Series 8 | Series 9 | |
|---|---|---|---|---|---|---|---|---|---|
| Default | 7.7 | 10.10 | 4.4 | 14.14 | 15.15 | 7.7 | 23.23 | 8.8 | 12.12 |
Options Added
| Series 1 | Series 2 | Series 3 | Series 4 | Series 5 | Series 6 | Series 7 | Series 8 | Series 9 | |
|---|---|---|---|---|---|---|---|---|---|
| Default | 7 | 10 | 4 | 14 | 15 | 7 | 23 | 8 | 13 |
Options added
| Series 1 | Series 2 | Series 3 | Series 4 | Series 5 | Series 6 | Series 7 | Series 8 | Series 9 | |
|---|---|---|---|---|---|---|---|---|---|
| Default | 7 | 10 | 4 | 14 | 15 | 7 | 23 | 8 | 13 |
Options Added
| Series 1 | Series 2 | Series 3 | Series 4 | Series 5 | Series 6 | Series 7 | Series 8 | Series 9 | |
|---|---|---|---|---|---|---|---|---|---|
| Default | 7 | 10 | 4 | 14 | 15 | 7 | 23 | 8 | 13 |
Options Added
| Series 1 | Series 2 | Series 3 | Series 4 | Series 5 | Series 6 | Series 7 | Series 8 | Series 9 | |
|---|---|---|---|---|---|---|---|---|---|
| Default | 7 | 10 | 4 | 14 | 15 | 7 | 23 | 8 | 13 |
Options Added
| Series 1 | Series 2 | Series 3 | Series 4 | Series 5 | Series 6 | Series 7 | Series 8 | Series 9 | |
|---|---|---|---|---|---|---|---|---|---|
| Default | 7 | 10 | 4 | 14 | 15 | 7 | 23 | 8 | 13 |
Options Added
Options Removed
| Series 1 | Series 2 | Series 3 | Series 4 | Series 5 | Series 6 | Series 7 | Series 8 | Series 9 | |
|---|---|---|---|---|---|---|---|---|---|
| Default | 7.7 | 10.10 | 4.4 | 14.14 | 15.15 | 7.7 | 23.23 | 8.8 | 12.12 |
Options Added
| Series 1 | Series 2 | Series 3 | Series 4 | Series 5 | Series 6 | Series 7 | Series 8 | Series 9 | |
|---|---|---|---|---|---|---|---|---|---|
| Default | 7.7 | 10.10 | 4.4 | 14.14 | 15.15 | 7.7 | 23.23 | 8.8 | 12.12 |
Options Added
Options Removed
| Series 1 | Series 2 | Series 3 | Series 4 | Series 5 | Series 6 | Series 7 | Series 8 | Series 9 | |
|---|---|---|---|---|---|---|---|---|---|
| Default | 7.7 | 10.10 | 4.4 | 14.14 | 15.15 | 7.7 | 23.23 | 8.8 | 12.12 |
Options Added
| Series 1 | Series 2 | Series 3 | Series 4 | Series 5 | Series 6 | Series 7 | Series 8 | Series 9 | |
|---|---|---|---|---|---|---|---|---|---|
| Default | 7.7 | 10.10 | 4.4 | 14.14 | 15.15 | 7.7 | 23.23 | 8.8 | 12.12 |


| Jump to DART Documentation Main Index |
There are two gridded SST observation converters in this directory, one for data from PODAAC, and one from NOAA/NCDC. sst_to_obs converts data from PODAAC and has been used by Romain Escudier for regional studies with ROMS. oi_sst_to_obs converts data from NOAA/NCDC and has been used by Fred Castruccio for global studies with POP.
These routines are designed to convert the GHRSST Level 4 AVHRR_OI Global Blended Sea Surface Temperature Analysis (GDS version 2) from NCEI data distributed by the Physical Oceanography Distributed Active Archive Center. Please remember to cite the data in your publications, specific instructions from PODAAC are available here. This is an example:
National Centers for Environmental Information. 2016. GHRSST Level 4 AVHRR_OI Global Blended Sea Surface Temperature Analysis (GDS version 2) from NCEI. Ver. 2.0. PO.DAAC, CA, USA. Dataset accessed [YYYY-MM-DD] at http://dx.doi.org/10.5067/GHAAO-4BC02.
Many thanks to Romain Escudier (then at Rutgers) who did the bulk of the work and graciously contributed his efforts to the DART project. Romain gave us scripts and source code to download the data from the PODAAC site, subset the global files to a region of interest, and convert that subsetted file to a DART observation sequence file. Those scripts and programs have been only lightly modified to work with the Manhattan version of DART and contain a bit more documentation.
The workflow is usually:
It is worth describing a small example. If you configure get_sst_ftp.sh to download the last two days of 2010 and then specify the mask to subset for the NorthWestAtlantic (NWA) and run Prepare_SST.sh your directory structure should look like the following:
0[1234] cheyenne6:/<6>obs_converters/SST . |-- ObsData | `-- SST | |-- ncfile | | `-- 2010 | | |--<PHONE_NUMBER>0000-NCEI-L4_GHRSST-SSTblend-AVHRR_OI-GLOB-v02.0-fv02.0.nc | | `--<PHONE_NUMBER>0000-NCEI-L4_GHRSST-SSTblend-AVHRR_OI-GLOB-v02.0-fv02.0.nc | `-- nwaSST | `-- 2010 | |--<PHONE_NUMBER>0000-NCEI-L4_GHRSST-SSTblend-AVHRR_OI-GLOB-v02.0-fv02.0_NWA.nc | `--<PHONE_NUMBER>0000-NCEI-L4_GHRSST-SSTblend-AVHRR_OI-GLOB-v02.0-fv02.0_NWA.nc |-- oi_sst_to_obs.f90 |-- oi_sst_to_obs.nml |-- sst_to_obs.f90 |-- sst_to_obs.nml |-- shell_scripts | |-- Prepare_SST.sh | |-- functions.sh | |-- get_sst_ftp.sh | |-- input.nml | |-- input.nml.template | |-- my_log.txt | |-- parameters_SST | `-- prepare_SST_file_NWA.sh |-- masks | |-- Mask_NWA-NCDC-L4LRblend-GLOB-v01-fv02_0-AVHRR_OI.nc | `-- Mask_NWA120000-NCEI-L4_GHRSST-SSTblend-AVHRR_OI-GLOB-v02.0-fv02.0.nc `-- work |-- Makefile |-- advance_time |-- input.nml |-- mkmf_advance_time |-- mkmf_obs_sequence_tool |-- mkmf_oi_sst_to_obs |-- mkmf_preprocess |-- mkmf_sst_to_obs |-- obs_sequence_tool |-- oi_sst_to_obs |-- path_names_advance_time |-- path_names_obs_sequence_tool |-- path_names_oi_sst_to_obs |-- path_names_preprocess |-- path_names_sst_to_obs |-- preprocess |-- quickbuild.csh `-- sst_to_obs
The location of the DART observation sequence files is specified by parameter_SST:DIR_OUT_DART. That directory should contain the following two files:
0[1236] cheyenne6:/<6>v2/Err30 > ls -l 'total 7104 -rw-r--r-- 1 thoar p86850054 3626065 Jan 10 11:08 obs_seq.sst.20101230 -rw-r--r-- 1 thoar p86850054 3626065 Jan 10 11:08 obs_seq.sst.20101231
oi_sst_to_obs is designed to convert the NOAA High-resolution Blended Analysis: Daily Values using AVHRR only data. The global metadata of a typical file is shown here:
:Conventions = "CF-1.5" ; :title = "NOAA High-resolution Blended Analysis: Daily Values using AVHRR only" ; :institution = "NOAA/NCDC" ; :source = "NOAA/NCDC ftp://eclipse.ncdc.noaa.gov/pub/OI-daily-v2/" ; :comment = "Reynolds, et al., 2007: Daily High-Resolution-Blended Analyses for Sea Surface Temperature. J. Climate, 20, 5473-5496. Climatology is based on 1971-2000 OI.v2 SST, Satellite data: Navy NOAA17 NOAA18 AVHRR, Ice data: NCEP ice." ; :history = "Thu Aug 24 13:46:51 2017: ncatted -O -a References,global,d,, sst.day.mean.2004.v2.nc\n", "Version 1.0" ; :references = "https://www.esrl.noaa.gov/psd/data/gridded/data.noaa.oisst.v2.highres.html" ; :dataset_title = "NOAA Daily Optimum Interpolation Sea Surface Temperature" ;
The workflow is usually:
This namelist is read from the file input.nml. Namelists start with an ampersand '&' and terminate with a slash '/'. Character strings that contain a '/' must be enclosed in quotes to prevent them from prematurely terminating the namelist.
&sst_to_obs_nml sst_netcdf_file = '1234567.nc' sst_netcdf_filelist = 'sst_to_obs_filelist' sst_out_file = 'obs_seq.sst' subsample_intv = 1 sst_rep_error = 0.3 debug = .false. /
| Contents | Type | Description |
|---|---|---|
| sst_netcdf_file | character(len=256) | Name of the (usually subsetted) netcdf data file. This may be a relative or absolute filename. If you run the scripts 'as is', this will be something like: ../ObsData/SST/nwaSST/2010/20101231120000-NCEI-L4_GHRSST-SSTblend-AVHRR_OI-GLOB-v02.0-fv02.0_NWA.nc |
| sst_netcdf_filelist | character(len=256) | Name of the file that contains a list of (usually subsetted) data files, one per line. You may not specify both sst_netcdf_file AND sst_netcdf_filelist. One of them must be empty. |
| sst_out_file | character(len=256) | Name of the output observation sequence file. |
| subsample_intv | integer | It is possible to 'thin' the observations. subsample_intv allows one to take every Nth observation. |
| sst_rep_error | real | In DART the observation error variance can be thought of as having two components, an instrument error and a representativeness error. In sst_to_obs the instrument error is specified in the netCDF file by the variable analysis_error. The representativeness error is specified by sst_rep_error, which is specified as a standard deviation. These two values are added together and squared and used as the observation error variance. Note: This algorithm maintains backwards compatibility, but is technically not the right way to combine these two quantities. If they both specified variance, adding them together and then taking the square root would correctly specify a standard deviation. Variances add, standard deviations do not. Since the true observation error variance (in general) is not known, we are content to live with an algorithm that produces useful observation error variances. If your research comes to a more definitive conclusion, please let us know. |
| debug | logical | Print extra information during the sst_to_obs execution. |
This namelist is read from the file input.nml. Namelists start with an ampersand '&' and terminate with a slash '/'. Character strings that contain a '/' must be enclosed in quotes to prevent them from prematurely terminating the namelist.
&oi_sst_to_obs_nml input_file = '1234567.nc' output_file_base = 'obs_seq.sst' subsample_intv = 1 sst_error_std = 0.3 debug = .false. /
| Contents | Type | Description |
|---|---|---|
| input_file | character(len=256) | Name of the input netcdf data file. This may be a relative or absolute filename. If you run the scripts 'as is', this will be something like: ../ObsData/SST/nwaSST/2010/20101231120000-NCEI-L4_GHRSST-SSTblend-AVHRR_OI-GLOB-v02.0-fv02.0_NWA.nc |
| output_file_base | character(len=256) | Partial filename for the output file. The date and time are appended to output_file_base to construct a unique filename reflecting the time of the observations in the file. |
| subsample_intv | integer | It is possible to 'thin' the observations. subsample_intv allows one to take every Nth observation. |
| sst_error_std | real | This is the total observation error standard deviation. |
| debug | logical | Print extra information during the oi_sst_to_obs execution. |
See the general discussion in the obs_converters/README.md page about what options are available for the things you need to specify. These include setting a time, specifying an expected error, setting a location, and an observation type.
I do not believe sst_to_obs will work correctly if given multiple files in sst_netcdf_filelist. The number of observation used to declare the length of the output observation sequence is based on a single file ... yet seems to be used by many. I have not tested this configuration, since the scripting does not use the sst_netcdf_filelist mechanism.
none
DART software - Copyright UCAR. This open source software is provided by UCAR, "as is", without charge, subject to all terms of use at http://www.image.ucar.edu/DAReS/DART/DART_download


My Profile
Upload a different photo...
Personal info
Name:
Interests:
Address:
Street:
State:
Country:
Zip:


hlin.co
-
A Noble Aim
08 Sep 2017
Jordan B. Peterson speaking in the Introduction to the Idea of God: Have a noble aim.   And that's not good. Because life is so difficult, so much suffering, so...
-
Maxwell
19 May 2017
Maxwell is my one year old boy. He instills way more meaning to the things I enjoy and also to the things I don't - like maybe the Wiggles are okay. To Max: I hope you've had fun so far. Both mum...
-
Create RSS Feeds
18 Jul 2016
I love RSS. It is one of the best ways for websites to notify me of significant content updates. Sadly not all websites provide this where it could be of high value. This means the author is either not aware or does...
-
Hawai'i
31 Aug 2015
I went to Hawai'i in the spring of 2015 for 3 weeks and these are the things I tried and would recommend. Honolulu Steak Shack serves steaks and chicken on rice. With outside seating looking out to the gorgeous Waikiki bay, eating...
-
Singularity Outcomes
02 Apr 2015
Elon Musk on AI: "Hope we're not just the biological boot loader for digital superintelligence. Unfortunately, that is increasingly probable." Elon's comment got me thinking about the likely outcomes for us when a general AI becomes more intelligent than the humans that...
-
Emoji Bonanza
27 Mar 2015
You can find more iOS native emojis from the Chinese (Simplified) - Pinyin keyboard. Access is then through this new keyboard in the symbol section (much like the way you get to the '=' character). There is an extensive collection of unicode...
-
Ghost City of Ordos
20 Mar 2015
"Over the course of our 24 hours in Ordos, we had tried every door within reach – and not one of them had been locked." I love well documented travel writing. @DarmonRichter's piece on the ghost city of Ordos encourages a level...
-
Alzheimer's Disease
12 Mar 2015
When my grandfather died of cancer, it wasn't the ravages of the cancer that horrified me the most. It was the fact that Alzheimer's Disease had already quietly stolen the last oppurtunity for me to be meaningfully there for him. It erroded...
-
Illustrations by Gediminas Pranckevičius
09 Mar 2015
These illustrations from Gediminas Pranckevičius remind me of the personal myths & reflections of Carl Jung.
A combination of the surreal and a sense of shared archetypes makes a compelling work of art.
-
Guide To Autodidactism
05 Mar 2015
@JackKinsella in Guide To Autodidactism Learning learning strategies should be treated as equally fundamental in our schools, yet it isn’t. My schooling reality starkly differed, in that the powers that were deemed it preferable to dedicate an hour a day during our...


pips Red=196 White=103
(CorrectAnswer= 0/0, ErrorScore= 0)
Before he rolled this double four Black had a very well-timed back game. His plan was to keep the 20-pt for as long as possible, then release it and then play a perfectly timed 1-2 back game.
Does this 44 change things or can he stick to his original game plan? 1-2 back games are notoriously difficult to time because as the opponent bears in his checkers quite often he cannot play fives or sixes and this often slows him up considerably.
The rule of thumb is that to successfully time a back game you need to trail by a number of pips equal to the value of the two back game anchors. That means for a 1-2 back game you need to trail by a minimum of 94 pips.
Black was doing all right before this roll but now he will trail by only 77 pips which is not enough to play a 1-2 back game. The likelihood is that his own home board will crash before he hits a shot and it will be impossible to contain any hit checker(s).
Over the board Black tried 14/6, 8/4, 7/3 but that ugly third checker on his 4-pt should have warned him that he was embarking upon the wrong plan. He should have abandoned his ideas for a 1-2 back game and reverted to a 2-5 back game. Admittedly that is not as good as a 1-2 back game but a well-timed 2-5 game is to be much preferred over a busted 1-2 game.
He should have played 24/20(2), 14/6 or 24/20(2), 14/10, 7/3. That way, unless he rolls another couple of small doubles his timing should be perfectly OK for his 2-5 back game. Another point to note is that the 2-5 back game loses fewer gammons than the 1-2 back game because it is easier to run the checkers home.
XG rates 14/6, 8/4, 7/3 as an error (just) and so it is not the worst play ever seen by any means but the key here is to understand when to switch game plans. A big double when playing a back game often predicates a change of plan, in many cases the front anchor has to be abandoned and a simple holding game played instead. In exchange some gammons are saved.
Does this 44 change things or can he stick to his original game plan? 1-2 back games are notoriously difficult to time because as the opponent bears in his checkers quite often he cannot play fives or sixes and this often slows him up considerably.
The rule of thumb is that to successfully time a back game you need to trail by a number of pips equal to the value of the two back game anchors. That means for a 1-2 back game you need to trail by a minimum of 94 pips.
Black was doing all right before this roll but now he will trail by only 77 pips which is not enough to play a 1-2 back game. The likelihood is that his own home board will crash before he hits a shot and it will be impossible to contain any hit checker(s).
Over the board Black tried 14/6, 8/4, 7/3 but that ugly third checker on his 4-pt should have warned him that he was embarking upon the wrong plan. He should have abandoned his ideas for a 1-2 back game and reverted to a 2-5 back game. Admittedly that is not as good as a 1-2 back game but a well-timed 2-5 game is to be much preferred over a busted 1-2 game.
He should have played 24/20(2), 14/6 or 24/20(2), 14/10, 7/3. That way, unless he rolls another couple of small doubles his timing should be perfectly OK for his 2-5 back game. Another point to note is that the 2-5 back game loses fewer gammons than the 1-2 back game because it is easier to run the checkers home.
XG rates 14/6, 8/4, 7/3 as an error (just) and so it is not the worst play ever seen by any means but the key here is to understand when to switch game plans. A big double when playing a back game often predicates a change of plan, in many cases the front anchor has to be abandoned and a simple holding game played instead. In exchange some gammons are saved.
1. Cubeful 2-ply 24/20 14/6 7/3 Eq.: -0.441 0.358 0.044 0.001 - 0.642 0.305 0.019 2. Cubeful 2-ply 24/20(2) 14/6 Eq.: -0.453 (-0.012) 0.342 0.040 0.001 - 0.658 0.283 0.012 3. Cubeful 2-ply 24/20 14/6 8/4 Eq.: -0.459 (-0.018) 0.350 0.043 0.001 - 0.650 0.303 0.018 4. Cubeful 2-ply 24/20 14/10 8/4 7/3 Eq.: -0.460 (-0.019) 0.353 0.043 0.001 - 0.647 0.310 0.020 5. Cubeful 2-ply 14/6 8/4 7/3 Eq.: -0.466 (-0.025) 0.359 0.036 0.001 - 0.641 0.300 0.042


Copyright (c) 1980s David Balmer Jr.
This game is played on an empty 10x10 square board:
|
| An example
The green dots denote the cells owned by White, while the red dots denote those owned by Black. If Black drops a stone at cell [1], the unowned cell e5 will belong to Black, since there would be two black stones, against one white, adjacent to e5. |
More information can be found at Mark Thompson's website.


Cloud Native Stack Integration Status - Power By ContainerOps
The CNCF provides many open source projects which assemble a Cloud Native stack for end users. However, the release versions of projects make so many scenarios and the cncf.build provides integration status of various combined scenarios, the process is implemented by ContainerOps CI/CD modules. If you have other scenarios which need to be tested, please submit an issue.


5 case, cond and if
In this chapter, we will learn about the case
, cond
and if
control-flow structures.
5.1 case
case
allows us to compare a value against many patterns until we find a matching one:
iex> case {1, 2, 3} do
...> {4, 5, 6} ->
...> "This clause won't match"
...> {1, x, 3} ->
...> "This clause will match and bind x to 2 in this clause"
...> _ ->
...> "This clause would match any value"
...> end
If you want to pattern match against an existing variable, you need to use the ^
operator:
iex> x = 1
1
iex> case 10 do
...> ^x -> "Won't match"
...> _ -> "Will match"
...> end
Clauses also allow extra conditions to be specified via guards:
iex> case {1, 2, 3} do
...> {1, x, 3} when x > 0 ->
...> "Will match"
...> _ ->
...> "Won't match"
...> end
The first clause above will only match when x
is positive.
5.2 Expressions in guard clauses.
The Erlang VM only allows a limited set of expressions in guards:
- comparison operators (
==
,!=
,===
,!==
,>
,<
,<=
,>=
) - boolean operators (
and
,or
) and negation operators (not
,!
) - arithmetic operators (
+
,-
,*
,/
) <>
and++
as long as the left side is a literal- the
in
operator all the following type check functions:
is_atom/1
is_binary/1
is_bitstring/1
is_boolean/1
is_float/1
is_function/1
is_function/2
is_integer/1
is_list/1
is_map/1
is_number/1
is_pid/1
is_port/1
is_reference/1
is_tuple/1
plus these functions:
abs(number)
bit_size(bitstring)
byte_size(bitstring)
div(integer, integer)
elem(tuple, n)
hd(list)
length(list)
map_size(map)
node()
node(pid | ref | port)
rem(integer, integer)
round(number)
self()
tl(list)
trunc(number)
tuple_size(tuple)
Keep in mind errors in guards do not leak but simply make the guard fail:
iex> hd(1)
** (ArgumentError) argument error
:erlang.hd(1)
iex> case 1 do
...> x when hd(x) -> "Won't match"
...> x -> "Got: #{x}"
...> end
"Got 1"
If none of the clauses match, an error is raised:
iex> case :ok do
...> :error -> "Won't match"
...> end
** (CaseClauseError) no case clause matching: :ok
Note anonymous functions can also have multiple clauses and guards:
iex> f = fn
...> x, y when x > 0 -> x + y
...> x, y -> x * y
...> end
#Function<12.71889879/2 in :erl_eval.expr/5>
iex> f.(1, 3)
4
iex> f.(-1, 3)
-3
The number of arguments in each anonymous function clause needs to be the same, otherwise an error is raised.
5.3 cond
case
is useful when you need to match against different values. However, in many circumstances, we want to check different conditions and find the first one that evaluates to true. In such cases, one may use cond
:
iex> cond do
...> 2 + 2 == 5 ->
...> "This will not be true"
...> 2 * 2 == 3 ->
...> "Nor this"
...> 1 + 1 == 2 ->
...> "But this will"
...> end
"But this will"
This is equivalent to else if
clauses in many imperative languages (although used way less frequently here).
If none of the conditions return true, an error is raised. For this reason, it may be necessary to add a final condition, equal to true
, which will always match:
iex> cond do
...> 2 + 2 == 5 ->
...> "This is never true"
...> 2 * 2 == 3 ->
...> "Nor this"
...> true ->
...> "This is always true (equivalent to else)"
...> end
Finally, note cond
considers any value besides nil
and false
to be true:
iex> cond do
...> hd([1,2,3]) ->
...> "1 is considered as true"
...> end
"1 is considered as true"
5.4 if and unless
Besides case
and cond
, Elixir also provides the macros if/2
and unless/2
which are useful when you need to check for just one condition:
iex> if true do
...> "This works!"
...> end
"This works!"
iex> unless true do
...> "This will never be seen"
...> end
nil
If the condition given to if/2
returns false
or nil
, the body given between do/end
is not executed and it simply returns nil
. The opposite happens with unless/2
.
They also support else
blocks:
iex> if nil do
...> "This won't be seen"
...> else
...> "This will"
...> end
"This will"
Note: An interesting note regarding
if/2
andunless/2
is that they are implemented as macros in the language; they aren't special language constructs as they would be in many languages. You can check the documentation and the source ofif/2
in theKernel
module docs. TheKernel
module is also where operators like+/2
and functions likeis_function/2
are defined, all automatically imported and available in your code by default.
5.5 do
/end
blocks
At this point, we have learned four control structures: case
, cond
, if
and unless
, and they were all wrapped in do
/end
blocks. It happens we could also write if
as follows:
iex> if true, do: 1 + 2
3
In Elixir, do
/end
blocks are a convenience for passing a group of expressions to do:
. These are equivalent:
iex> if true do
...> a = 1 + 2
...> a + 10
...> end
13
iex> if true, do: (
...> a = 1 + 2
...> a + 10
...> )
13
We say the second syntax is using keyword lists. We can pass else
using this syntax:
iex> if false, do: :this, else: :that
:that
One thing to keep in mind when using do
/end
blocks is they are always bound to the outermost function call. For example, the following expression:
iex> is_number if true do
...> 1 + 2
...> end
Would be parsed as:
iex> is_number(if true) do
...> 1 + 2
...> end
Which leads to an undefined function error as Elixir attempts to invoke is_number/2
. Adding explicit parentheses is enough to resolve the ambiguity:
iex> is_number(if true do
...> 1 + 2
...> end)
true
Keyword lists play an important role in the language and are quite common in many functions and macros. We will explore them a bit more in a future chapter. Now it is time to talk about "Binaries, strings and char lists".


|
Bosch XDK110 Solace MQTT App
2.0.1
MQTT Reference Application for the Bosch XDK110
|
Go to the source code of this file.
Functions | |
| Retcode_T | AppTelemetryQueue_Init (void) |
| Initialize the module. More... | |
| Retcode_T | AppTelemetryQueue_Setup (const AppRuntimeConfig_T *configPtr) |
| Setup the module with the configuration. More... | |
| Retcode_T | AppTelemetryQueue_Prepare (void) |
| External interface to prepare the telemetry queue. More... | |
| Retcode_T | AppTelemetryQueue_ApplyNewRuntimeConfig (AppRuntimeConfig_ConfigElement_T configElement, const void *newConfigPtr) |
| Apply a new runtime configuration to the module. More... | |
| Retcode_T | AppTelemetryQueue_AddSample (AppTelemetryPayload_T *payloadPtr, const uint32_t waitTicks) |
| Add a sensor sample to the queue. Waits a max of waitTicks to obtain the write semaphore handle. More... | |
| Retcode_T | AppTelemetryQueue_Wait4FullQueue (const uint32_t waitTicks) |
| Wait for waitTicks for a full queue based on the read-trigger semaphore. Used by AppTelemetryPublish. More... | |
| char * | AppTelemetryQueue_RetrieveData (void) |
| Retrieve the data from a full queue as a string and delete the internal read queue. Used by AppTelemetryPublish. More... | |
| void | AppTelemetryQueueCreateNewTestQueue (uint8_t queueSize) |
| Create a new test queue. More... | |
| void | AppTelemetryQueueTestQueueAddSample (AppTelemetryPayload_T *payloadPtr) |
| Add a sample / payload to the test queue. More... | |
| uint32_t | AppTelemetryQueueTestQueueGetDataSize (void) |
| Get the length / size of the raw data from the test queue. More... | |
| void | AppTelemetryQueueTestQueueDelete (void) |
| Delete the test queue. | |
| void | AppTelemetryQueueTestQueuePrint (void) |
| Print the test queue on the console. | |


Priyanka Chopra snapped at Manish Malhotra’s residence
by Vedanshi PathakManish Malhotra is one of the very few designers who the celebrities trust blindly when it comes to their outfits. The designer recently lost his father, late Suraj Malhotra, who was in his early nineties and had been ill for a while. Ever since the news broke out, several celebrities started flooding the designer’s residence to offer condolences and even attended the prayer meet held a few days back.
Last night, we spotted Manish’s close friend and global icon Priyanka Chopra at his residence who came in to check up on him and offer condolences. Dharma Productions’ spearhead Karan Johar was also spotted at the designer’s house last night. Check out the pictures below.


| Home | About | Experience | Education | Blog | Projects | Contact |
It's been a great week of turkey, coding, and then a little more turkey followed by even more coding. This week's Dev Bootcamp material centered around Ruby classes. From what I've learned, classes are essentially a better way to organize methods and objects beyond very basic code where they may not be necessary. To start a class, you simply need to define it with a class statement. Within that class, you can create methods for the various objects within the class. The first method that you need to focus on is the Initialize method. From my understanding, this is a basic requirement to create a proper Class that defines how you create the objects that follow.
Below is some code I created for a very simple Powerball program that generates the random winning Powerball numbers (@powerballnumbers) and random numbers for a recently purchased Powerball card (@yournumbers). I honestly don't know any of the structure behind how Powerball numbers are called, so this is an extremely simplified exercise to demonstrate what you can do with the Class structure. I'll dive into my explanation after the code below.
class Powerball def initialize @powerballnumbers = Array.new(6){ rand(1...100) } @yournumbers = Array.new(6){ rand(1...100) } end def buycard @yournumbers end def generate @powerballnumbers end def win if @powerballnumbers == @yournumbers puts "Jackpot!!!" else puts "Better luck next time!" end end end powerball = Powerball.new p powerball.buycard p powerball.generate p powerball.win #=> [30, 28, 61, 21, 26, 9] [27, 14, 25, 70, 26, 82] Better luck next time!
In the initalize method, I set up the necessary arrays that we can then use in subsequent methods. Notice that I used instance variables like @powerballnumbers so I could then use those methods in any method within the Powerball class. After creating @powerballnumbers and @yournumbers, we can create new methods that will allow us to print them out to the console with driver code. The last step is to see if you got winning Powerball numbers, which you can see I didn't get from the output at the end of the code example. Better luck next time!


Sam's Network Media Homepage
Description-Under Construction!
Hello world, I'm Sam this is my homepage for DESMA 161 Network media. I'll use it to post the projects and weekly assignments I produce in the that class.
They'll be listed like this:
Hello world, I'm Sam this is my homepage for DESMA 161 Network media. I'll use it to post the projects and weekly assignments I produce in the that class.
They'll be listed like this:


/customer/create
Create a new customer under one of your businesses.
feedbackRequestErrorCode and feedbackRequestErrorMessage will be returned only if the
sendFeedbackRequest parameter is present and set to 1.
Parameters
| Name |
Type |
Required |
Example |
Description |
| businessId |
integer |
yes |
376 |
Business id. |
| clientId |
string(40) |
yes |
04f78...9f9f3 |
Client id is a unique user identifier provided by GetFiveStars. |
| customerCustomId |
string |
no |
123 |
Customer custom id. |
| customerEmail |
string(email) |
yes |
<EMAIL_ADDRESS>|
Customer email address. |
| customerFirstName |
string |
yes |
John |
Customer first name. |
| customerJobId |
string |
no |
123 |
Customer job id. |
| customerLastName |
string |
yes |
Smith |
Customer last name. |
| customerPhone |
string |
no |
5555555555 |
Customer mobile phone. |
| hash |
string(64) |
yes |
bd13a40...303f3c5 |
Hash is a digital request signature. Learn how to generate hash here. |
| sendFeedbackRequest |
integer(0,1) |
no |
1 |
Send feedback request email to the customer right away. |
| delayFeedbackRequest |
integer |
no |
0 |
0 will send it immediately (if sendFeedbackRequest is set to 1)
If you set delayFeedbackRequest to anything over 0, it will delay that many hours before the feedback request is sent. |
Request
POST https://getfivestars.com/api/customer/create
[Content-Type: application/json]
{
"businessId": 376,
"clientId": "04f78076fbfc66940169d2199af7c6698019f9f3",
"customerEmail"<EMAIL_ADDRESS>"customerFirstName": "John",
"customerLastName": "Smith",
"customerPhone": "5555555555",
"hash": "67fbca027648a3caf08e47ca685d772aa2d92fb526b8b6e91d74286301c99988",
"sendFeedbackRequest": 1
}
Response
{
"feedbackRequestErrorCode": 0,
"feedbackRequestErrorMessage": "Success",
"customerId": 12345,
"errorCode": 0,
"errorMessage": "Success"
}
Errors
| errorCode |
errorMessage |
| -1 |
Unknown error |
| 1 |
Invalid hash sign |
| 2 |
Invalid clientId |
| 3 |
Server error - please contact support |
| 5 |
This user cannot manage selected business |
| 6 |
Invalid businessId |
| 7 |
Invalid customerFirstName |
| 8 |
Invalid customerLastName |
| 9 |
Invalid customerEmail |
| 10 |
Customer already exists |
| 11 |
Unable to send feedback request to this customer |
| 12 |
Daily requests limit (100) exceeded |


Parting Salvo
Some finishing thoughts about (one) possible future of cataloging and libraries
Thank-you!
Jeremy Nelson<EMAIL_ADDRESS>## END hero DIV%inherit file="presentation-inside.html" /> <%block name="more_js"> %block> <%block name="more_css"> %block> ## START content DIV
Some finishing thoughts about (one) possible future of cataloging and libraries
Jeremy Nelson<EMAIL_ADDRESS>## END hero DIVWe don't use the Dewey Decimal Catalogue to locate volumes here; our requirements are sufficiently specialised that we have to use the system devised by Professor Angell of Brown University and subsequently known as the Codex Mathemagica. I've spent the past few weeks getting my head around the more arcane aspects of a cataloguing system that uses surreal number theory and can cope with N-dimensional library space of Borges.
-- The Atrocity Archives
In Charles Stross's James Bond meets H.P. Lovecraft Laundry series, magic is just a branch of applied mathematics, where a secret branch of British intelligence has it's main library located in an abandoned London subway. Most of these librarians are zombies!!!
Unlike other fields, we as librarians, information technologists, and curious individuals can and do apply imaginary topics to never existing artifacts using the same technology we use for tangible objects.
So imagine your FRBR artifacts cataloged with your communitiy's metadata creating the augmented world of smart spimes or ...
## END Stross DivThe future of writing is the future of writing down everything. We will be the last generation whose life will not have been on record. Personal technology has been tracking our every move for some time already and selective memory is a biological concept from which databases do not suffer. The future of writing will be our auto-autobiographies being created by machinic ghost-writers. How aware will we be of being the protagonist of a continuous narrative? One through which the past could be re-enacted, the meaning of the present influenced, and the future predicted.
## END MS Future of WritingDoes the Internet of Things need a catalog?
Does YOUR catalog add value your artifacts both real and imagined?
## END Internet of Things DIV


Plugin Information |
|---|
View Copy data to workspace on the plugin site for more information. |
The current version of this plugin may not be safe to use. Please review the following warnings before use:
Copies data to workspace directory for each project build.
Hudson 1.366 or later.
This plugin was created for Hudson 1.366. It might not work with earlier versions of Hudson.
User guide
This plugin copies data from directory stored on master node. The path to this directory should be relative to Hudson root path (HUDSON_HOME). All data will be copied to the project workspace directory
on master or slave node.
1. Select "Copy data to workspace" in the Build Environment (list of BuildWrappers).
2. Enter the path to a data storage directory. All data in this directory will be copied to workspace (only data, not a directory itself). Path should be relative to Hudson root path (HUDSON_HOME).
For example, Hudson root path = "C:\tmp". Path to folder = "storage\task". Plugin will copy data from directory "C:\tmp\storage\task".
3. Option "Make files executable". It means that after copying data to workspace plugin apply to each file chmod(0755). So all files become executable. On Windows, no-op.
4. Option "Delete files after build". If checked, plugin will delete all copied files from workspace after build.
Changelog
Version 1.0 (February 24, 2011)
- Initial release.


How bad is my data cap?
Please fill out both fields
I currently have
mbps internet and a
gb data cap.
Calculate
If you had no data cap, you could download
each month. Your internet provider limits the amount of data you can transfer to
of your maximum bandwidth every month. This is roughly
of full speed internet every month.
Try again


{% extends "base.html" %} {% block content %}
5 Books of Moses
19 Books of the Prophets
11 Other Writings
The 4 Gospels
1 Book
21 Letters
Final Book


Bash-like tilde expansion for node.js. Expands a leading tilde in a file path to the user home directory, or
~+
to the cwd.
Install with npm:
$ npm install --save expand-tilde
See the Bash documentation for Tilde Expansion.
var expandTilde = require('expand-tilde');
expandTilde('~')
//=> '/Users/jonschlinkert'
expandTilde('~+')
//=> process.cwd()
Install dev dependencies:
npm i -d && npm test
true
if the given string looks like a glob pattern or an extglob pattern… more | homepagePull requests and stars are always welcome. For bugs and feature requests, please create an issue.
(This document was generated by verb-generate-readme (a verb generator), please don't edit the readme directly. Any changes to the readme must be made in .verb.md.)
To generate the readme and API documentation with verb:
$ npm install -g verb verb-generate-readme && verb
Install dev dependencies:
$ npm install -d && npm test
Jon Schlinkert
Copyright © 2016, Jon Schlinkert. Released under the MIT license.
This file was generated by verb-generate-readme, v0.2.0, on December 08, 2016.


Longitude
Latitude
Start Date
End Date
Travel Id
Travel Photo
Upload my photo and paste url here
Click on Travel Id and Place id to see you travel on the map
All
Establishments
Addresses
Geocodes


CloudFront Distribution Restrictions
Restrictions
is a property of the CloudFront Distribution DistributionConfig property type that lets you limit
which viewers can access your content.
Syntax
JSON
{ "GeoRestriction" :
GeoRestriction
}
YAML
GeoRestriction:
GeoRestriction
Properties
Note
For more information about the constraints and valid values of each property, see the Restrictions data type in the Amazon CloudFront API Reference.


This is a demo for semantic change observation with word vectors.
The work is created by Young Lew(largelymfs@gmail.com).


A&A
Lube
Home
Services
Contact Us
Home
Services
Contact Us
menu
About Us
A & A Lube was opened in 2007 by Alex and his sons.
Hours
Monday-Friday :
8:00 AM - 6:00 PM
Saturday :
9:00 AM - 5:00 PM
Sunday :
CLOSED
Location
5720 Ford & Hix Road
Westland
MI 48185


Notice that you cannot enter a date with the keyboard.
dropdownSelector: '#dropdown1'
to toggle the dropdown.
angular-date-time-input
directiveNotice that you CAN enter a date with the keyboard.
dropdownSelector: '#dropdown2'
to toggle the dropdown.
Default configuration
data-on-set-time='inputOnTimeSet()'
to toggle the dropdown.
dropdownSelector: '#dropdown4'
to toggle the dropdown.
This example shows a date picker that has the required attribute. Note that the user must type into the input to toggle dirty/pristine.
dropdownSelector: '#dropdown5'
to toggle the dropdown.
Formatted Date: {{ data.linkCalendar | date:'medium' }}
startView: 'day'
and minuteStep: 15
data-on-set-time='checkboxOnTimeSet()'
to toggle visibility.
Formatted Date: {{ data.checkboxCalendar | date:'medium' }}
Click me to show/hide via ng-show:Default configuration
Formatted Date: {{ data.embeddedYear | date:'yyyy-MM-dd h:mm a' }}
This example shows a date picker that has the required attribute. Note that without an input, only validity is tracked by ngModel.
data-datetimepicker-config="config.datetimePicker"
which returns { startView: 'year' }
Formatted Date: {{ data.embeddedPropertyConfig | date:'yyyy-MM-dd h:mm a' }}
data-datetimepicker-config="configFunction()"
which returns { startView: 'month' }
Formatted Date: {{ data.embeddedFunctionConfig | date:'yyyy-MM-dd h:mm a' }}
data-on-set-time="guardianOnSetTime($index, guardian, newDate, oldDate)"
configureOn: 'config-changed'
to cause the directive to re-read its configuration.
Start View: {{ config.configureOnConfig.startView }}
renderOn: 'valid-dates-changed'
to cause the directive to re-render.


One-Time
Create a campaign for sending out
newsletters, sites updates, or new
feature announcements.
Create a campaign for sending out
newsletters, sites updates, or new
feature announcements.
Reoccuring
create a campaign for sending out
weekly inspiration emails,
retargeting emails, etc.
create a campaign for sending out
weekly inspiration emails,
retargeting emails, etc.