To support us with the extension of our online help resources and other documentation we are searching for people with good writing skills in English, that are willing to contribute to our ongoing efforts to foster and push transparent data sharing technologies in Neuroscience. The tasks include work on online tutorials, screencast video tutorials, technical documentation and maybe be a bit of web-technology.
Technologies: English, Affinity to technology, Good communication skills and willingness to engage with our user community.
To support us with the extension of our web-based abstract management service for scientific conferences, we are looking for a HiWi that is able to program in JavaScript.
Technologies:JavaScript, Knockout.js
To automize our web service health checks, we are searching for a motivated Pythonista who is willing to assist us in implementing automates web application testing based on selenium.
Technologies: Python, Selenium
The global scale of neuroinformatics offers unprecedented opportunities for scientific collaborations between and among experimental and theoretical neuroscientists. To fully harvest these possibilities, coordinated activities are required to improve key ingredients of neuroscience: data access, data storage, and data analysis, together with supporting activities for teaching and training.
Focusing on the development and free distribution of tools for handling and analyzing neurophysiological data, G-Node aims at addressing these aspects as part of the International Neuroinformatics Coordinating Facility (INCF) and the German Bernstein Network for Computational Neuroscience (NNCN). G-Node also serves as an international forum for Computational Neuroscientists that are interested in sharing experimental data and tools for data analysis and modeling. G-Node is funded through the German Federal Ministry of Education and Research and hosted by Ludwig-Maximilians-Universität München. Do you want to know more?


I'm a Creative Front-End Designer & Developer who loves visual storytelling and creating an amazing user experience. When I'm not working or learning new skills I can be found working on various photo projects, killing my 14th Basil plant this year, or wandering off into the sunset in hiking boots and a comically floppy sun hat in search of adventure.


jQuery.compare adds jQuery.fn.compare(element) which compares the position of two nodes and returns a number representing
a bitmask detailing how they are positioned relative to each other.
The following list shows the bitmask, the number and what it corresponds to:
000000 -> 0: Elements are identical
000001 -> 1: The nodes are in different documents (or one is outside of a document)
000010 -> 2: #bar precedes #foo
000100 -> 4: #foo precedes #bar
001000 -> 8: #bar contains #foo
010000 -> 16: #foo contains #bar
The returned number can also represent a bitmask matching multiple conditions. For example, if the returned number is 20, which is the bitmask of 010100, it means that #foo precedes #bar and #foo contains #bar.
You can tests if the number returned by $.fn.compare matches any of these conditions by combining it with a bitwise AND operator:
jQuery.compare
addsjQuery.fn.compare(element)
which compares the position of two nodes and returns a number representing a bitmask detailing how they are positioned relative to each other.You can expect it to return the same results as | compareDocumentPosition. Parts of this documentation and source come from | John Resig.
The following list shows the
bitmask
, the number and what it corresponds to:000000
-> 0: Elements are identical000001
-> 1: The nodes are in different documents (or one is outside of a document)000010
-> 2: #bar precedes #foo000100
-> 4: #foo precedes #bar001000
-> 8: #bar contains #foo010000
-> 16: #foo contains #barThe returned number can also represent a bitmask matching multiple conditions. For example, if the returned number is 20, which is the bitmask of
010100
, it means that #foo precedes #bar and #foo contains #bar.You can tests if the number returned by
$.fn.compare
matches any of these conditions by combining it with a bitwise AND operator:Demo


redux-webpack-boilerplate
npm i -S redux-webpack-boilerplate
See a working demo in a real project at redux-webpack-boilerplate
Features
- Uses latest ES6+ features supported in Babel.
- JSON and JS config variants for client and server.
- Basis for real projects. Useful as an example but meant for production.
- Kept up to date with current React / Redux / Webpack / Babel.
- Hot reloading via React-Transform and Webpack HMR API.
- Only common and useful redux patterns setup.
- Documents itself with (ESDoc)[https://esdoc.org/] and pushes to projects GitHub pages on release.
- package.json scripts separated and pre-compiled to achieve Windows and OSX support for environment variables.
- Preconfigured with redux-idle-monitor and react-redux-idle-monitor to monitor when user becomes idle.
- Preconfigured with griddle for grid data.
- Preconfigured with redux-form
- Easy startup with
npm run start-hot


Pati Patni Aur Woh Promotions: Ananya Panday, Kartik Aaryan And Bhumi Pednekar Make A Colourful Appearance
22 Nov 2019, 11:11 by Saheli Maity
As Pati Patni Aur Woh is nearing its release date, the leads of the film, Ananya Panday, Kartik Aaryan and Bhumi Pednekar are gearing up to promote the film as much as they can
Pati Patni Aur Woh star cast Ananya Panday, Kartik Aaryan and Bhumi Pednekar have stepped out in the city to promote their upcoming film in Mithibai college. (Image Source:- Viral Bhayani)
For the promotions, Ananya Panday, Kartik Aaryan and Bhumi Pednekar are making our day as colourful as their outfits. You just can’t ignore it.(Image Source:- Viral Bhayani)
Even though it is Kartik Aaryan’s birthday today, it is still a working birthday for the actor as he steps out to promote his film Pati Patni Aur Woh.(Image Source:- Viral Bhayani)
For the event, Kartik Aaryan can be seen wearing a bright red pullover hoodie pairing it with a quirky sunnies while flashing his million-dollar smile.(Image Source:- Viral Bhayani)
Ananya Panday looks oh-so-pretty in a simple white crop top pairing it with polka dots reddish skirt.  However, the actress’ pick for the event doesn't impress us much. (Image Source:- Viral Bhayani)
Pati Patni Aur Woh star cast also dances on Dheeme Dheeme song for the students. (Image Source:- Viral Bhayani)


I am a Responsive Designer & Developer who thrives on visual storytelling and the best user experience. When I'm not working, furthering my knowledge of code or getting lost in the rabbit hole of video games and movies, I can be found near the water, on the lake or river surrounded by friends and family, making new and lasting memories.


When it comes to rolling with the changes in the music world, KISS runs a close second to Cher. The band originally coasted in on the glam-rock movement of the early 1970s, worked a few ballads like "Beth" into their repertoire to broaden their audience, went disco in 1979 with "I Was Made For Lovin' You," tried their hands at Alan Parsons Project-style pomp-rock with "Music From The Elder" and returned to their roots just in time for the '70s nostalgia craze. The closing credits of "Detroit Rock City" find lead singer Gene Simmons belting out a power ballad penned by Diane Warren, whose "I Don't Want To Miss A Thing" put Aerosmith back on the top of the charts last summer.
The KISS story would undoubtedly make a fascinating film, but "Detroit," despite taking its title from one of the group's early hits, turns out to have very little to do with the band. Instead, it focuses on a much less intriguing quartet, four Ohio teens (Giuseppe Andrews, James Bellows, Edward Furlong and Sam Huntington) who go to extremes to catch a KISS concert at Cobo Hall in 1978.
That too might have been a potent topic for a movie if anyone connected with "Detroit" had any first-hand knowledge of what 1978 was like.
No such luck. "Detroit" is so poorly researched it prominently features David Naughton's "Makin' It" and Rupurt Holmes' "Escape (The Pina Colada Song)" on the soundtrack despite the fact they were released in 1979 and then includes a reference to the Weather Girls' "It's Raining Men," which didn't come along until 1982. The slang in Carl V. Dupre's shoddy excuse for a script is also alarmingly wrong for the period.
Then again, what more should be expected from a film by director Adam Rifkin, whose previous credits include "Psycho Cop Returns" and the pitifully bad Charlie Sheen vehicle "The Chase"? Rifkin's style, to use the term in its loosest sense, consists of shooting his actors in tight close-ups and having them shout their lines, as if that somehow makes dumb dialogue funny. Every bit of slapstick is photographed from multiple angles which only goes to prove how awkwardly set up most of it is.
"Detroit" is sorely in need of the authenticity and easy humor of "Dazed and Confused," the 1994 Richard Linklater comedy it's obviously trying hard to imitate. But "Dazed" had characters the audience could actually feel something for; "Detroit" offers insipid cartoons, including a perverted priest, a gang of John Travolta wannabes and a witchy mom, ineptly played by Lin Shaye. Even its "heroes" are interchangable and charmless.
KISS itself only turns up in person at the very end, performing for a few brief minutes before the end credits roll. Fans who want to see the band in action would be better off tracking down a video of "KISS Meets the Phantom of the Park," a deliciously campy made-for-TV movie that shows what 1978 was really all about. James Sanford
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


8.6.1. Procedure for Changing the RDBMS used¶
Table of contents
- Prerequisites
- File registration to the Maven repository
- File modification
- Modification of the properties file
- Modification of the pom.xml file
- (for projects that acquire a connection from JNDI in the production environment) component configuration file (src/main/resources/)
- (for projects that create a local connection pool in the production environment) data-source.xml (src/main/resources/)
- unit-test.xml (src/test/resources)
- Create tables and populate data used by Nablarch
- Communication confirmation
Projects created using the Nablarch archetype are configured to use the H2 Database Engine (hereinafter H2) by default.
The procedure to change the configuration to use a different RDBMS is described.
<IP_ADDRESS>. Prerequisites¶
The following is assumed.
- The project immediately after generation from each archetype is the target.
- The user and schema used for connecting have been created in the RDBMS. Users of the RDBMS must have been granted appropriate permissions.
<IP_ADDRESS>. File registration to the Maven repository¶
<IP_ADDRESS>.1. Register the JDBC driver¶
One of the following must be satisfied for the JDBC driver to be used.
- The driver should be registered in the central repository of Maven.
- The driver should be registered in the Maven repository of the project.
- The driver should be registered in the local Maven repository.
This section describes how to register a JDBC driver that is not published in the Maven central repository to the local Maven repository. Replace the driver version in the procedure as appropriate.
Important
- It is highly recommended that the JDBC driver be registered in the Maven repository of the project before building the CI environment.
- How to obtain the JDBC driver is also explained below.Confirm the license before obtaining the JDBC driver.
<IP_ADDRESS>.1.1. H2¶
In the case of H2, registration is not required because the JDBC driver is published in the Maven central repository.
<IP_ADDRESS>.1.2. Oracle¶
In the case of Oracle, registration is not required because the JDBC driver is published in the Maven central repository.
<IP_ADDRESS>.1.3. PostgreSQL¶
In the case of PostgreSQL, registration is not required because the JDBC driver is published in the Maven central repository.
<IP_ADDRESS>.1.4. DB2¶
Since DB2 JDBC driver is not published in the Maven central repository, it is necessary to register it in the local Maven repository.
The JDBC driver can be downloaded from the following site on the Internet.
| Distribution site name | URL |
|---|---|
| IBM DB2 JDBC Driver Versions and Downloads - Japan |
http://www-01.ibm.com/support/docview.wss?uid=swg21363866 (External site) |
An example of the command to register the downloaded JDBC driver to the local Maven repository is shown below.
mvn install:install-file -DgroupId=com.ibm -DartifactId=db2jcc4 -Dversion=<IP_ADDRESS> -Dpackaging=jar -Dfile=db2jcc4.jar
<IP_ADDRESS>.1.5. SQLServer¶
In the case of SQLServer, you don’t need to register the JDBC driver because it is available in Maven’s central repository
<IP_ADDRESS>. File modification¶
<IP_ADDRESS>.1. Modification of the properties file¶
Modify the following location in env.properties.
| Property name | Description | Project/Module used |
|---|---|---|
| nablarch.connectionFactory. jndiResourceName |
Resource name when acquiring the DataSource with JNDI |
|
| nablarch.db.jdbcDriver | JDBC driver class name |
|
| nablarch.db.url | Database connection URL |
|
| nablarch.db.user | Database access user name |
|
| nablarch.db.password | Database access user password |
|
| nablarch.db.schema | Connection schema name |
|
Immediately after a project is generated from an archetype, the following applies to the “properties file of the environment that acquires connections from JNDI”.
| Project type | Config file of the environment that acquires connections from JNDI |
|---|---|
|
|
|
No |
Immediately after creating a project from an archetype, the following applies to the “properties file of environments that create local connection pools”.
| Project type | properties file of environments that create local connection pools |
|---|---|
|
|
|
|
|
|
The configuration example for a properties file of the environment that creates local connection pools is shown below.
<IP_ADDRESS>.1.1. H2 configuration example (default)¶
nablarch.db.jdbcDriver=org.h2.Driver
nablarch.db.url=jdbc:h2:./h2/db/SAMPLE
nablarch.db.user=SAMPLE
nablarch.db.password=SAMPLE
nablarch.db.schema=PUBLIC
<IP_ADDRESS>.1.2. Oracle configuration example¶
nablarch.db.jdbcDriver=oracle.jdbc.driver.OracleDriver
# jdbc:oracle:thin: @Host name:port number:database SID
nablarch.db.url=jdbc:oracle:thin:@localhost:1521/xe
nablarch.db.user=sample
nablarch.db.password=sample
nablarch.db.schema=sample
<IP_ADDRESS>.1.3. PostgreSQL configuration example¶
nablarch.db.jdbcDriver=org.postgresql.Driver
# jdbc:postgresql://Host name:Port number/database name
nablarch.db.url=jdbc:postgresql://localhost:5432/postgres
nablarch.db.user=sample
nablarch.db.password=sample
nablarch.db.schema=sample
<IP_ADDRESS>.1.4. DB2 configuration example¶
nablarch.db.jdbcDriver=com.ibm.db2.jcc.DB2Driver
# jdbc:db2://Host name:Port number/database name
nablarch.db.url=jdbc:db2://localhost:50000/SAMPLE
nablarch.db.user=sample
nablarch.db.password=sample
nablarch.db.schema=sample
<IP_ADDRESS>.1.5. SQL Server configuration example¶
nablarch.db.jdbcDriver=com.microsoft.sqlserver.jdbc.SQLServerDriver
# jdbc:sqlserver://Host name:Port number;instanceName=Instance name
nablarch.db.url=jdbc:sqlserver://localhost:1433;instanceName=SQLEXPRESS
nablarch.db.user=SAMPLE
nablarch.db.password=SAMPLE
nablarch.db.schema=SAMPLE
Important
Depending on the DB, user names, passwords and schemas are case-sensitive.
Should be configured even in the properties file as configured in the DB.
<IP_ADDRESS>.1.6. Production configuration of containers¶
In projects for containers, do not switch the preferences by profile.
Instead, it uses the OS environment variable of the environment in which the application will run to override the configuration values declared in env.properties
.
Thus, the configuration in src/main/resources/env.properties
is used in the environment where OS environment variables are not set.
When running in a production container environment, the OS environment variables must be used to properly override environment-dependent values such as nablarch.db.url
.
See Overwrite environment dependent values using system properties for how to overwrite the configuration in OS environment variables.
See The Twelve-Factor App’s III. Configuration (external site) for the reason why it switches settings by OS environment variables instead of profiles.
<IP_ADDRESS>.2. Modification of the pom.xml file¶
<IP_ADDRESS>.2.1. In the profiles element (for projects that acquire a connection from JNDI in the production environment)¶
Modify the location where the dependency of the JDBC driver is described in the profiles element.
Tip
In the case of a project that acquires a connection from JNDI in a production environment, since the connection has to be explicitly included in the dependency only when creating a local connection pool, it is described in the profiles element.
(When acquiring a connection from JNDI, it should be possible to acquire the JDBC driver from the class loader of AP server.)
Hereinafter, configuration examples will be described for each type of database.
<IP_ADDRESS>.2.1.1. H2 configuration example (default)¶
<profiles>
<!-- Omitted -->
<profile>
<!-- Omitted -->
<dependencies>
<!-- Omitted -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.191</version>
<scope>runtime</scope>
</dependency>
<!-- Omitted -->
</dependencies>
</profile>
<IP_ADDRESS>.2.1.2. Oracle configuration example¶
<profiles>
<!-- Omitted -->
<profile>
<!-- Omitted -->
<dependencies>
<!-- Omitted -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc6</artifactId>
<version><IP_ADDRESS></version>
<scope>runtime</scope>
</dependency>
<!-- Omitted -->
</dependencies>
</profile>
<IP_ADDRESS>.2.1.3. PostgreSQL configuration example¶
<profiles>
<!-- Omitted -->
<profile>
<!-- Omitted -->
<dependencies>
<!-- Omitted -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.4.1207</version>
<scope>runtime</scope>
</dependency>
<!-- Omitted -->
</dependencies>
</profile>
<IP_ADDRESS>.2.1.4. DB2 configuration example¶
<profiles>
<!-- Omitted -->
<profile>
<!-- Omitted -->
<dependencies>
<!-- Omitted -->
<dependency>
<groupId>com.ibm</groupId>
<artifactId>db2jcc4</artifactId>
<version><IP_ADDRESS></version>
<scope>runtime</scope>
</dependency>
<!-- Omitted -->
</dependencies>
</profile>
<IP_ADDRESS>.2.1.5. SQLServer configuration example¶
<profiles>
<!-- Omitted -->
<profile>
<!-- Omitted -->
<dependencies>
<!-- Omitted -->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>7.4.1.jre8</version>
<scope>runtime</scope>
</dependency>
<!-- Omitted -->
</dependencies>
</profile>
<IP_ADDRESS>.2.2. In the dependencies element (for projects that create a local connection pool in the production environment)¶
Modify the location where the dependency of the JDBC driver is described in the dependencies element.
An example of the dependency element described by default is shown.
<dependencies>
<!-- TODO: プロジェクトで使用するDB製品にあわせたJDBCドライバに修正してください。(Modify the JDBC driver according to the DB product used in the project.) -->
<!-- Omitted -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.191</version>
<scope>runtime</scope>
</dependency>
<!-- Omitted -->
</dependencies>
For each element in the dependency element, enter the same description as In the profiles element (for projects that acquire a connection from JNDI in the production environment).
<IP_ADDRESS>.3. (for projects that acquire a connection from JNDI in the production environment) component configuration file (src/main/resources/)¶
In the case of a project that fetches a connection from JNDI in a production environment, the dialect class of the database that is used by the project, is defined in the component configuration file located in src/main/resources. The component configuration file name of each project is as follows.
| Project type | Component configuration file name |
|---|---|
| Web | web-component-configuration.xml |
| RESTful web service | rest-component-configuration.xml |
Change the following configuration in the above file.
<!-- ダイアレクト設定(Dialect configuration.) -->
<!-- TODO:使用するDBに合わせてダイアレクトを設定すること(Configure dialect according to the DB to be used.) -->
<component name="dialect" class="nablarch.core.db.dialect.H2Dialect" />
The following dialect classes are available in Nablarch. Modify the dialect class corresponding to the database to be used.
| Database | Dialect class |
|---|---|
| Oracle | nablarch.core.db.dialect.OracleDialect |
| PostgreSQL | nablarch.core.db.dialect.PostgreSQLDialect |
| DB2 | nablarch.core.db.dialect.DB2Dialect |
| SQL Server | nablarch.core.db.dialect.SqlServerDialect |
<IP_ADDRESS>.4. (for projects that create a local connection pool in the production environment) data-source.xml (src/main/resources/)¶
In the case of a project that creates a local connection pool in the production environment, the dialect class of the database used by the project is described in data-source.xml.
Modify this dialect class to the one that corresponds to the database to be used.
The Dialect class to be used is the same as (for projects that acquire a connection from JNDI in the production environment) component configuration file (src/main/resources/).
<IP_ADDRESS>.5. unit-test.xml (src/test/resources)¶
Describes the database configuration used by the testing framework.
The default is a general-purpose DB configuration as shown below.
When using Oracle, modify the description.
<!-- TODO: 使用するDBに合せて設定してください。(configure it for project DB.) -->
<!-- Oracle用の設定(Configuration for Oracle) -->
<!--
<import file="nablarch/test/test-db-info-oracle.xml"/>
-->
<!-- General purpose DB configuration -->
<component name="dbInfo" class="nablarch.test.core.db.GenericJdbcDbInfo">
<property name="dataSource" ref="dataSource"/>
<property name="schema" value="${nablarch.db.schema}"/>
</component>
<IP_ADDRESS>. Create tables and populate data used by Nablarch¶
<IP_ADDRESS>.1. Create table¶
DDL is prepared for each RDBMS in the following directory of each project. By executing this DDL, tables used by Nablarch can be created.
- db/ddl/
Tip
In the case of DB2, since the connected database and schema to be used are described at the top of create.sql, edit this information before executing DDL.
To execute DDL, execute the following in the “DB2 Command Window”.
db2 -tvf "C:\develop\myapp-web\db\ddl\db2\create.sql"
Tip
When using gsp-dba-maven-plugin [1], create a table by executing gsp-dba-maven-plugin with the following command.
mvn -P gsp clean generate-resources
| [1] | Separate configuration is required to use gsp-dba-maven-plugin. See Initial Configuration Method of gsp-dba-maven-plugin (DBA Work Support Tool) for configuration. |
<IP_ADDRESS>.2. Data input¶
Insert statements of data are available in the following directory of each project. By executing the insert statement, data that is used by Nablarch can be inserted.
- db/data/
Tip
In the case of DB2, describe the connected database and schema used at the top of data.sql and then execute the SQL.
A description example of the connected database and schema used is shown below.
CONNECT TO SAMPLE2;
SET SCHEMA sample;
To execute DDL, execute the following in the “DB2 Command Window”.
db2 -tvf "C:\develop\myapp-web\db\data\data.sql"
<IP_ADDRESS>. Communication confirmation¶
Refer to the following procedure and confirm communications.
- Communication confirmation of Web
- Communication confirmation of RESTful Web service
- Communication confirmation of JSR352-compliant batch
- Communication confirmation of Nablarch batch
- Communication confirmation of Web for container
- Communication confirmation of RESTful Web service for container
- Communication confirmation of Nablarch batch for container


Posted on [date] by [author]
Feesh furcadia furnet bark suiter, fur icon. Scritch furnet mew anthrochat scritch fur stream VCL, scritch anthrocon anthrochat InkBunny, tapestries FA feesh scritch FC. Yap SPR Weasyl headless Further Confusion wolf FurryMUCK wolf bark. Meow fur fur sketch growl furre FurryMUCK, furcadia FC, furries mew. Growl SPR, stream commission MFF sketch stream sketch stream Midwest Fur Fest. Commission FurryMUCK husky Wikifur AC, FurryMUCK Yerf!. Cat InkBunny MFF feesh bark.
Commission con MFF furre con fursuit yap Wikifur. Scritch AC sergal convention furry. FurAffinity headless bark icon tapestries furnet furnation feesh furry. FurAffinity MFF SPR meow cat anthrocon stream Further Confusion. MFF fox growl InkBunny FurryMUCK mew AC FurryMUCK yip murr. Popufur meow fox cat anthrochat growl icon FurryMUCK anthrochat, con sketch stream Further Confusion Midwest Fur Fest Yerf! Midwest Fur Fest FC ruining the magic wolf, ruining the magic Yerf! FC anthrochat FurryMUCK anthrochat AC Wikifur headless furcadia. Con, yap fur bark SoFurry.
[adjective][species] is a metafurry resource aiming to explore the furry subculture, both from the inside and the outside, using writing, data, and very sensitive hearing
Feesh furcadia furnet bark suiter, fur icon. Scritch furnet mew anthrochat scritch fur stream VCL, scritch anthrocon anthrochat InkBunny, tapestries FA feesh scritch FC. Yap SPR Weasyl headless Further Confusion wolf FurryMUCK wolf bark. Meow fur fur sketch growl furre FurryMUCK, furcadia FC, furries mew. Growl SPR, stream commission MFF sketch stream sketch stream Midwest Fur Fest. Commission FurryMUCK husky Wikifur AC, FurryMUCK Yerf!. Cat InkBunny MFF feesh bark.
Commission con MFF furre con fursuit yap Wikifur. Scritch AC sergal convention furry. FurAffinity headless bark icon tapestries furnet furnation feesh furry. FurAffinity MFF SPR meow cat anthrocon stream Further Confusion. MFF fox growl InkBunny FurryMUCK mew AC FurryMUCK yip murr. Popufur meow fox cat anthrochat growl icon FurryMUCK anthrochat, con sketch stream Further Confusion Midwest Fur Fest Yerf! Midwest Fur Fest FC ruining the magic wolf, ruining the magic Yerf! FC anthrochat FurryMUCK anthrochat AC Wikifur headless furcadia. Con, yap fur bark SoFurry.
Feesh furcadia furnet bark suiter, fur icon. Scritch furnet mew anthrochat scritch fur stream VCL, scritch anthrocon anthrochat InkBunny, tapestries FA feesh scritch FC. Yap SPR Weasyl headless Further Confusion wolf FurryMUCK wolf bark. Meow fur fur sketch growl furre FurryMUCK, furcadia FC, furries mew. Growl SPR, stream commission MFF sketch stream sketch stream Midwest Fur Fest. Commission FurryMUCK husky Wikifur AC, FurryMUCK Yerf!. Cat InkBunny MFF feesh bark.
Commission con MFF furre con fursuit yap Wikifur. Scritch AC sergal convention furry. FurAffinity headless bark icon tapestries furnet furnation feesh furry. FurAffinity MFF SPR meow cat anthrocon stream Further Confusion. MFF fox growl InkBunny FurryMUCK mew AC FurryMUCK yip murr. Popufur meow fox cat anthrochat growl icon FurryMUCK anthrochat, con sketch stream Further Confusion Midwest Fur Fest Yerf! Midwest Fur Fest FC ruining the magic wolf, ruining the magic Yerf! FC anthrochat FurryMUCK anthrochat AC Wikifur headless furcadia. Con, yap fur bark SoFurry.
Posted on [date] by [author]
Feesh furcadia furnet bark suiter, fur icon. Scritch furnet mew anthrochat scritch fur stream VCL, scritch anthrocon anthrochat InkBunny, tapestries FA feesh scritch FC. Yap SPR Weasyl headless Further Confusion wolf FurryMUCK wolf bark. Meow fur fur sketch growl furre FurryMUCK, furcadia FC, furries mew. Growl SPR, stream commission MFF sketch stream sketch stream Midwest Fur Fest. Commission FurryMUCK husky Wikifur AC, FurryMUCK Yerf!. Cat InkBunny MFF feesh bark.
Commission con MFF furre con fursuit yap Wikifur. Scritch AC sergal convention furry. FurAffinity headless bark icon tapestries furnet furnation feesh furry. FurAffinity MFF SPR meow cat anthrocon stream Further Confusion. MFF fox growl InkBunny FurryMUCK mew AC FurryMUCK yip murr. Popufur meow fox cat anthrochat growl icon FurryMUCK anthrochat, con sketch stream Further Confusion Midwest Fur Fest Yerf! Midwest Fur Fest FC ruining the magic wolf, ruining the magic Yerf! FC anthrochat FurryMUCK anthrochat AC Wikifur headless furcadia. Con, yap fur bark SoFurry.
Posted on [date] by [author]
Feesh furcadia furnet bark suiter, fur icon. Scritch furnet mew anthrochat scritch fur stream VCL, scritch anthrocon anthrochat InkBunny, tapestries FA feesh scritch FC. Yap SPR Weasyl headless Further Confusion wolf FurryMUCK wolf bark. Meow fur fur sketch growl furre FurryMUCK, furcadia FC, furries mew. Growl SPR, stream commission MFF sketch stream sketch stream Midwest Fur Fest. Commission FurryMUCK husky Wikifur AC, FurryMUCK Yerf!. Cat InkBunny MFF feesh bark.
Commission con MFF furre con fursuit yap Wikifur. Scritch AC sergal convention furry. FurAffinity headless bark icon tapestries furnet furnation feesh furry. FurAffinity MFF SPR meow cat anthrocon stream Further Confusion. MFF fox growl InkBunny FurryMUCK mew AC FurryMUCK yip murr. Popufur meow fox cat anthrochat growl icon FurryMUCK anthrochat, con sketch stream Further Confusion Midwest Fur Fest Yerf! Midwest Fur Fest FC ruining the magic wolf, ruining the magic Yerf! FC anthrochat FurryMUCK anthrochat AC Wikifur headless furcadia. Con, yap fur bark SoFurry.
Posted on [date] by [author]
Feesh furcadia furnet bark suiter, fur icon. Scritch furnet mew anthrochat scritch fur stream VCL, scritch anthrocon anthrochat InkBunny, tapestries FA feesh scritch FC. Yap SPR Weasyl headless Further Confusion wolf FurryMUCK wolf bark. Meow fur fur sketch growl furre FurryMUCK, furcadia FC, furries mew. Growl SPR, stream commission MFF sketch stream sketch stream Midwest Fur Fest. Commission FurryMUCK husky Wikifur AC, FurryMUCK Yerf!. Cat InkBunny MFF feesh bark.
Commission con MFF furre con fursuit yap Wikifur. Scritch AC sergal convention furry. FurAffinity headless bark icon tapestries furnet furnation feesh furry. FurAffinity MFF SPR meow cat anthrocon stream Further Confusion. MFF fox growl InkBunny FurryMUCK mew AC FurryMUCK yip murr. Popufur meow fox cat anthrochat growl icon FurryMUCK anthrochat, con sketch stream Further Confusion Midwest Fur Fest Yerf! Midwest Fur Fest FC ruining the magic wolf, ruining the magic Yerf! FC anthrochat FurryMUCK anthrochat AC Wikifur headless furcadia. Con, yap fur bark SoFurry.
Posted on [date] by [author]
Feesh furcadia furnet bark suiter, fur icon. Scritch furnet mew anthrochat scritch fur stream VCL, scritch anthrocon anthrochat InkBunny, tapestries FA feesh scritch FC. Yap SPR Weasyl headless Further Confusion wolf FurryMUCK wolf bark. Meow fur fur sketch growl furre FurryMUCK, furcadia FC, furries mew. Growl SPR, stream commission MFF sketch stream sketch stream Midwest Fur Fest. Commission FurryMUCK husky Wikifur AC, FurryMUCK Yerf!. Cat InkBunny MFF feesh bark.
Commission con MFF furre con fursuit yap Wikifur. Scritch AC sergal convention furry. FurAffinity headless bark icon tapestries furnet furnation feesh furry. FurAffinity MFF SPR meow cat anthrocon stream Further Confusion. MFF fox growl InkBunny FurryMUCK mew AC FurryMUCK yip murr. Popufur meow fox cat anthrochat growl icon FurryMUCK anthrochat, con sketch stream Further Confusion Midwest Fur Fest Yerf! Midwest Fur Fest FC ruining the magic wolf, ruining the magic Yerf! FC anthrochat FurryMUCK anthrochat AC Wikifur headless furcadia. Con, yap fur bark SoFurry.
Posted on [date] by [author]
Feesh furcadia furnet bark suiter, fur icon. Scritch furnet mew anthrochat scritch fur stream VCL, scritch anthrocon anthrochat InkBunny, tapestries FA feesh scritch FC. Yap SPR Weasyl headless Further Confusion wolf FurryMUCK wolf bark. Meow fur fur sketch growl furre FurryMUCK, furcadia FC, furries mew. Growl SPR, stream commission MFF sketch stream sketch stream Midwest Fur Fest. Commission FurryMUCK husky Wikifur AC, FurryMUCK Yerf!. Cat InkBunny MFF feesh bark.
Commission con MFF furre con fursuit yap Wikifur. Scritch AC sergal convention furry. FurAffinity headless bark icon tapestries furnet furnation feesh furry. FurAffinity MFF SPR meow cat anthrocon stream Further Confusion. MFF fox growl InkBunny FurryMUCK mew AC FurryMUCK yip murr. Popufur meow fox cat anthrochat growl icon FurryMUCK anthrochat, con sketch stream Further Confusion Midwest Fur Fest Yerf! Midwest Fur Fest FC ruining the magic wolf, ruining the magic Yerf! FC anthrochat FurryMUCK anthrochat AC Wikifur headless furcadia. Con, yap fur bark SoFurry.
Posted on [date] by [author]
Feesh furcadia furnet bark suiter, fur icon. Scritch furnet mew anthrochat scritch fur stream VCL, scritch anthrocon anthrochat InkBunny, tapestries FA feesh scritch FC. Yap SPR Weasyl headless Further Confusion wolf FurryMUCK wolf bark. Meow fur fur sketch growl furre FurryMUCK, furcadia FC, furries mew. Growl SPR, stream commission MFF sketch stream sketch stream Midwest Fur Fest. Commission FurryMUCK husky Wikifur AC, FurryMUCK Yerf!. Cat InkBunny MFF feesh bark.
Commission con MFF furre con fursuit yap Wikifur. Scritch AC sergal convention furry. FurAffinity headless bark icon tapestries furnet furnation feesh furry. FurAffinity MFF SPR meow cat anthrocon stream Further Confusion. MFF fox growl InkBunny FurryMUCK mew AC FurryMUCK yip murr. Popufur meow fox cat anthrochat growl icon FurryMUCK anthrochat, con sketch stream Further Confusion Midwest Fur Fest Yerf! Midwest Fur Fest FC ruining the magic wolf, ruining the magic Yerf! FC anthrochat FurryMUCK anthrochat AC Wikifur headless furcadia. Con, yap fur bark SoFurry.
Posted on [date] by [author]
Feesh furcadia furnet bark suiter, fur icon. Scritch furnet mew anthrochat scritch fur stream VCL, scritch anthrocon anthrochat InkBunny, tapestries FA feesh scritch FC. Yap SPR Weasyl headless Further Confusion wolf FurryMUCK wolf bark. Meow fur fur sketch growl furre FurryMUCK, furcadia FC, furries mew. Growl SPR, stream commission MFF sketch stream sketch stream Midwest Fur Fest. Commission FurryMUCK husky Wikifur AC, FurryMUCK Yerf!. Cat InkBunny MFF feesh bark.
Commission con MFF furre con fursuit yap Wikifur. Scritch AC sergal convention furry. FurAffinity headless bark icon tapestries furnet furnation feesh furry. FurAffinity MFF SPR meow cat anthrocon stream Further Confusion. MFF fox growl InkBunny FurryMUCK mew AC FurryMUCK yip murr. Popufur meow fox cat anthrochat growl icon FurryMUCK anthrochat, con sketch stream Further Confusion Midwest Fur Fest Yerf! Midwest Fur Fest FC ruining the magic wolf, ruining the magic Yerf! FC anthrochat FurryMUCK anthrochat AC Wikifur headless furcadia. Con, yap fur bark SoFurry.
Posted on [date] by [author]
Feesh furcadia furnet bark suiter, fur icon. Scritch furnet mew anthrochat scritch fur stream VCL, scritch anthrocon anthrochat InkBunny, tapestries FA feesh scritch FC. Yap SPR Weasyl headless Further Confusion wolf FurryMUCK wolf bark. Meow fur fur sketch growl furre FurryMUCK, furcadia FC, furries mew. Growl SPR, stream commission MFF sketch stream sketch stream Midwest Fur Fest. Commission FurryMUCK husky Wikifur AC, FurryMUCK Yerf!. Cat InkBunny MFF feesh bark.
Commission con MFF furre con fursuit yap Wikifur. Scritch AC sergal convention furry. FurAffinity headless bark icon tapestries furnet furnation feesh furry. FurAffinity MFF SPR meow cat anthrocon stream Further Confusion. MFF fox growl InkBunny FurryMUCK mew AC FurryMUCK yip murr. Popufur meow fox cat anthrochat growl icon FurryMUCK anthrochat, con sketch stream Further Confusion Midwest Fur Fest Yerf! Midwest Fur Fest FC ruining the magic wolf, ruining the magic Yerf! FC anthrochat FurryMUCK anthrochat AC Wikifur headless furcadia. Con, yap fur bark SoFurry.
Posted on [date] by [author]
Feesh furcadia furnet bark suiter, fur icon. Scritch furnet mew anthrochat scritch fur stream VCL, scritch anthrocon anthrochat InkBunny, tapestries FA feesh scritch FC. Yap SPR Weasyl headless Further Confusion wolf FurryMUCK wolf bark. Meow fur fur sketch growl furre FurryMUCK, furcadia FC, furries mew. Growl SPR, stream commission MFF sketch stream sketch stream Midwest Fur Fest. Commission FurryMUCK husky Wikifur AC, FurryMUCK Yerf!. Cat InkBunny MFF feesh bark.
Commission con MFF furre con fursuit yap Wikifur. Scritch AC sergal convention furry. FurAffinity headless bark icon tapestries furnet furnation feesh furry. FurAffinity MFF SPR meow cat anthrocon stream Further Confusion. MFF fox growl InkBunny FurryMUCK mew AC FurryMUCK yip murr. Popufur meow fox cat anthrochat growl icon FurryMUCK anthrochat, con sketch stream Further Confusion Midwest Fur Fest Yerf! Midwest Fur Fest FC ruining the magic wolf, ruining the magic Yerf! FC anthrochat FurryMUCK anthrochat AC Wikifur headless furcadia. Con, yap fur bark SoFurry.
Posted on [date] by [author]
Feesh furcadia furnet bark suiter, fur icon. Scritch furnet mew anthrochat scritch fur stream VCL, scritch anthrocon anthrochat InkBunny, tapestries FA feesh scritch FC. Yap SPR Weasyl headless Further Confusion wolf FurryMUCK wolf bark. Meow fur fur sketch growl furre FurryMUCK, furcadia FC, furries mew. Growl SPR, stream commission MFF sketch stream sketch stream Midwest Fur Fest. Commission FurryMUCK husky Wikifur AC, FurryMUCK Yerf!. Cat InkBunny MFF feesh bark.
Commission con MFF furre con fursuit yap Wikifur. Scritch AC sergal convention furry. FurAffinity headless bark icon tapestries furnet furnation feesh furry. FurAffinity MFF SPR meow cat anthrocon stream Further Confusion. MFF fox growl InkBunny FurryMUCK mew AC FurryMUCK yip murr. Popufur meow fox cat anthrochat growl icon FurryMUCK anthrochat, con sketch stream Further Confusion Midwest Fur Fest Yerf! Midwest Fur Fest FC ruining the magic wolf, ruining the magic Yerf! FC anthrochat FurryMUCK anthrochat AC Wikifur headless furcadia. Con, yap fur bark SoFurry.


Note Pets
Home
Blog
Products
Sign Up
Next Solution
TECHNOLOGY
See what we can make new different
Get Started


Impacts of simulated independent and additive effects of environmental and management changes on population growth rate ( λ) and abundance thresholds for the Kirtland's Warbler ( Setophaga kirtlandii)
Models include reduced wintering grounds habitat quality (WQL; median, 25th percentile, and 10th percentile of climate models projecting end‐of‐century changes in March precipitation based on an ensemble of 40 general circulation models and Representative Concentration Pathway 8.5), reduced breeding grounds habitat quantity due to climate (BQN‐C) and management (BQN‐M) changes, and reduced breeding grounds habitat quality due to management changes (BQL). The contemporary model reflects current environmental and management conditions on the wintering and breeding grounds.


or
Browse the menu at left and add items to your meal.
Browse the menu at left and add items to your meal.
Browse the menu at left and add items to your meal.
Browse the menu at left and add items to your meal.
Browse the menu at left and add items to your meal.
Browse the menu at left and add items to your meal.
{{selectedSandwich.codeName}} {{selectedSandwich.ingredients}}
Add any sandwich, side item, or drink by clicking on the 'Add to Meal' button.
Meal items may be added, edited, or deleted from this menu.


Timer Gadget¶
This guide steps through the process of creating an Alexa Gadget that reacts to a single timer set on an Echo device. A servo rotates a disc to indicate the remaining duration of the timer, when the timer expires, and when a timer is canceled.
Prerequisites¶
In order to to run this example you should already have a Raspberry Pi with the Alexa-Gadgets-Raspberry-Pi-Samples software installed. Learn more in the project README. In addition, you will need the following hardware:
Header pins soldered to your Raspberry Pi (used for connecting hardware)
Three male-female jumper wires
Step 1: Connect the servo to your Pi¶
The following steps walk you through connecting the servo:
Make sure your Raspberry Pi is powered off.
Connect jumper wires to the 5V, GPIO25 (Pin 22), and GRND pins. Learn more
Connect jumper wires to the servo using the diagram below. Red is power, black/brown is ground, and yellow/orange is signal.
Once you’ve connected the servo to the Pi, start up your Pi.
Step 2: Configure your credentials¶
Now that the servo is connected to your Pi, you can continue on with the example.
As with any example, you’ll need to first add the credentials that are associated with the gadget you created in the Alexa Voice Service Developer Console:
On the command line of your Pi, navigate to
/home/pi/Alexa-Gadgets-Raspberry-Pi-Samples/src/examples/timer
and open thetimer.ini
file within that folder.Change the
amazonId
fromYOUR_GADGET_AMAZON_ID
to the Amazon ID that is displayed on the gadget’s product page in the Alexa Voice Service Developer Console.Change the
alexaGadgetSecret
fromYOUR_GADGET_SECRET
to the Alexa Gadget Secret that is displayed on the gadget’s product page in the Alexa Voice Service Developer Console.
You can also use the launch script’s setup mode to configure all the credentials for all the examples at once as follows:
Start the launch script in setup mode
sudo python3 launch.py --setup
Enter ‘y’ when prompted for configuring the gadget credentials; and enter the
amazonId
andalexaGadgetSecret
that is displayed on the gadget’s product page in the Alexa Voice Service Developer Console.
To learn more, refer to Register a Gadget in the Alexa Gadgets Toolkit documentation.
Step 3: Explore the example¶
The example follows the same model as other examples that you can browse within the Alexa-Gadgets-Raspberry-Pi-Samples project.
Configuration¶
Within the timer.ini
file, in addition to the credentials you just modified, you will see a group of [GadgetCapabilities]
that this gadget is registering for. In this case, it is registering for StateListener
and Alerts
:
[GadgetCapabilities]
Alexa.Gadget.StateListener = 1.0 - timers
Alerts = 1.1
In this example, you will be using version 1.0 of the StateListener interface, and responding to the timers
type, as well as using version 1.1 of the Alerts interface.
Code¶
Within timer.py
you’ll notice the import and use of Raspberry Pi’s GPIO capabilities using the gpiozero library, as well as other packages:
import logging
import sys
import threading
import time
from gpiozero import AngularServo
import dateutil.parser
from agt import AlexaGadget
You’ll also see the configuration of servo motor using gpiozero’s AngularServo:
SERVO = AngularServo(GPIO_PIN, initial_angle=90, min_pulse_width=0.0005, max_pulse_width=0.002)
In addition, you will see callbacks that define what should happen for the set, expiration, and clearing of a timer:
def on_alerts_setalert(self, directive):
"""
Handles Alerts.SetAlert directive sent from Echo Device
"""
# check that this is a timer. if it is something else (alarm, reminder), just ignore
if directive.payload.type != 'TIMER':
logger.info("Received SetAlert directive but type != TIMER. Ignorning")
return
# parse the scheduledTime in the directive. if is already expired, ignore
t = dateutil.parser.parse(directive.payload.scheduledTime).timestamp()
if t <= 0:
logger.info("Received SetAlert directive but scheduledTime has already passed. Ignoring")
return
# check if this is an update to an alrady running timer (e.g. users asks alexa to add 30s)
# if it is, just adjust the end time
if self.timer_token == directive.payload.token:
logger.info("Received SetAlert directive to update to currently running timer. Adjusting")
self.timer_end_time = t
return
# check if another timer is already running. if it is, just ignore this one
if self.timer_thread is not None and self.timer_thread.isAlive():
logger.info("Received SetAlert directive but another timer is already running. Ignoring")
return
# start a thread to rotate the servo
logger.info("Received SetAlert directive. Starting a timer for " + str(int(t - time.time())) + "s")
self.timer_end_time = t
self.timer_token = directive.payload.token
# run timer in it's own thread to prevent blocking future directives during count down
self.timer_thread = threading.Thread(target=self._run_timer)
self.timer_thread.start()
def on_alerts_deletealert(self, directive):
"""
Handles Alerts.DeleteAlert directive sent from Echo Device
"""
# check if this is for the currently running timer. if not, just ignore
if self.timer_token != directive.payload.token:
logger.info("Received DeleteAlert directive but not for the currently active timer. Ignoring")
return
# delete the timer, and stop the currently running timer thread
logger.info("Received DeleteAlert directive. Cancelling the timer")
self.timer_token = None
You’ll also see code for controlling the rotation of the servo to indicate the remaining duration of the timer, and when a timer has expired or cleared:
def _run_timer(self):
"""
Runs a timer
"""
# check every 200ms if we should rotate the servo
cur_angle = 180
start_time = time.time()
time_remaining = self.timer_end_time - start_time
self._set_servo_to_angle(cur_angle, timeout=1)
while self.timer_token and time_remaining > 0:
time_total = self.timer_end_time - start_time
time_remaining = max(0, self.timer_end_time - time.time())
next_angle = int(180 * time_remaining / time_total)
if cur_angle != next_angle:
self._set_servo_to_angle(cur_angle, timeout=0.3)
cur_angle = next_angle
time.sleep(0.2)
# the timer is expired now, rotate servo back and forth
# until timer is cancelled
while self.timer_token:
self._set_servo_to_angle(175, timeout=1)
self._set_servo_to_angle(5, timeout=1)
# the timer was cancelled, reset the servo back to initial state
self._set_servo_to_angle(0, timeout=1)
def _set_servo_to_angle(self, angle_in_degrees, timeout):
"""
Sets the servo to the specified angle. Keep this between 0 and 180
"""
# set the angle of the Servo (min = -90, max = 90)
SERVO.angle = 90 - float(angle_in_degrees)
logger.debug('Setting servo to: ' + str(angle_in_degrees))
time.sleep(timeout)
SERVO.detach()
The above callbacks are listening for the set and cleared states of the timer set on the paired Echo device to rotate the servo as an indication that a timer’s duration is incrementing down. When a timer expires, the servo rotates back and forth as an indicator. If a timer is cleared, the servo rotates to its inactive position.
Step 4: Test your gadget¶
In order for this gadget to function, it will need to be paired to a compatible Echo device. Before running the example, refer to the pairing guide to learn how to pair your gadget.
With your Echo device nearby, run the Python code:
sudo python3 launch.py --example timer
Once your gadget paired/connected, try the following commands:
“Alexa, set a 20 second timer”
This will cause the servo to rotate to the starting position of the timer, and rotate to home position in sync with the duration of the timer. When the timer runs out, the servo should move back and forth to create a visual indicator that the timer is done.
“Alexa, set a timer for 5 minutes”
“Alexa, clear my timer”
The servo shoud rotate to start position and start counting down. When you cancel the timer, the servo should rotate back to home position.
The Pi should print a message whenever the servo runs, and you should see and hear the servo move. Note the direction the servo moves. This will help when assembling the physical components of your gadget.
Note: While you can set multiple timers on an Echo device, the timer gadget will only show one active timer at a time – the first one that you set.
Step 5: Assemble your gadget¶
The housing and disc shown in the image above were constructed from laser-cut wood, but any other objects will work. It also doesn’t have to be a disc at all. Below is a template for the disc and housing of your gadget, which you can print out, transfer to cardboard, and assemble:
You can use this technique to transfer the printed template to cardboard. Once transferred, cut the pieces out and fold to assemble. The disc will need to be attached to the servo using a screw, and the servo can be taped to the cardboard.
Once you have created the housing, place and affix your servo. Make sure to test along the way to make sure the housing and disc are not colliding with other elements when the servo is rotating. You can use the instructions in Step 4 to continually test until your gadget is working just the way you like.
What’s next¶
You could make a gadget that shows timers in a variety of ways beyond using a disc. You could also use the rotating disc to indicate something other than a timer counting down.
To learn more about Alexa Gadgets Toolkit capabilities, review the documentation.


Note
Click here to download the full example code
Example 7 - Interactive Exploration of the Results¶
This example takes a run from example 5 and allows you to interactively look at all runs performed and the associated loss. The plot allows you to only include certain iterations (selected by the checkboxes on the left). By hovering over the learning curves (all runs of a single configuration on all respective budets) you see some information about the configuration and its performance. Clicking on it will make the tool tip persistent.Clicking on the curve again, will remove it again.
This tool is not very mature, but maybe it can help you to explore the structure hidden in your results. Please refer to the documentation of the visualization submodule to see all options.
import matplotlib.pyplot as plt
import hpbandster.core.result as hpres
import hpbandster.visualization as hpvis
# load the example run from the log files
result = hpres.logged_results_to_HBS_result('example_5_run/')
# get all executed runs
all_runs = result.get_all_runs()
# get the 'dict' that translates config ids to the actual configurations
id2conf = result.get_id2config_mapping()
lcs = result.get_learning_curves()
hpvis.interactive_HBS_plot(lcs, tool_tip_strings=hpvis.default_tool_tips(result, lcs))
def realtime_learning_curves(runs):
"""
example how to extract a different kind of learning curve.
The x values are now the time the runs finished, not the budget anymore.
We no longer plot the validation loss on the y axis, but now the test accuracy.
This is just to show how to get different information into the interactive plot.
"""
sr = sorted(runs, key=lambda r: r.budget)
lc = list(filter(lambda t: not t[1] is None, [(r.time_stamps['finished'], r.info['test accuracy']) for r in sr]))
return([lc,])
lcs = result.get_learning_curves(lc_extractor=realtime_learning_curves)
hpvis.interactive_HBS_plot(lcs, tool_tip_strings=hpvis.default_tool_tips(result, lcs))
Total running time of the script: ( 0 minutes 0.251 seconds)


@remarks An Rfc2898DeriveBytes instance can be created using the NewRfc2898DeriveBytes constructor.
Rfc2898DeriveBytes takes a password, a salt, and an iteration count, and then generates keys through calls to the GetBytes method.
RFC 2898 includes methods for creating a key and initialization vector (IV) from a password and salt. You can use PBKDF2, a password-based key derivation function, to derive keys using a pseudo-random function that allows keys of virtually unlimited length to be generated. The Rfc2898DeriveBytes class can be used to produce a derived key from a base key and other parameters. In a password-based key derivation function, the base key is a password and the other parameters are a salt value and an iteration count.
@examples The following code example uses the Rfc2898DeriveBytes class to create two identical keys for the TripleDES class. It then encrypts and decrypts some data using the keys.Public Sub Main() Const Pwd1 As String = "Simple Password" Dim Salt1(8) As Byte Dim RngCsp As New RNGCryptoServiceProvider RngCsp.GetBytes Salt1 ' Data1 can be a string or contents of a file. Const Data1 As String = "Some test data" ' The default iteration count is 1000 so the two methods use the same iteration count. Const MyIterations As Long = 1000 On Error GoTo Catch Dim K1 As Rfc2898DeriveBytes Dim K2 As Rfc2898DeriveBytes Set K1 = NewRfc2898DeriveBytes(Pwd1, Salt1, MyIterations) Set K2 = NewRfc2898DeriveBytes(Pwd1, Salt1) ' Encrypt the data. Dim EncAlg As TripleDES Dim EncryptionStream As New MemoryStream Dim Encrypt As CryptoStream Dim UtfD1() As Byte Set EncAlg = TripleDES.Create() EncAlg.Key = K1.GetBytes(16) Set Encrypt = NewCryptoStream(EncryptionStream, EncAlg.CreateEncryptor(), CryptoStreamMode.WriteMode) UtfD1 = NewUTF8Encoding(False).GetBytes(Data1) Encrypt.WriteBlock UtfD1, 0, CorArray.Length(UtfD1) Encrypt.FlushFinalBlock Encrypt.CloseStream Dim EData1() As Byte EData1 = EncryptionStream.ToArray() K1.Reset ' Try to decrypt, thus showing it can be round-tripped. Dim DecAlg As TripleDES Dim DecryptionStreamBacking As New MemoryStream Dim Decrypt As CryptoStream Set DecAlg = TripleDES.Create() DecAlg.Key = K2.GetBytes(16) DecAlg.IV = EncAlg.IV Set Decrypt = NewCryptoStream(DecryptionStreamBacking, DecAlg.CreateDecryptor(), CryptoStreamMode.WriteMode) Decrypt.WriteBlock EData1, 0, CorArray.Length(EData1) Decrypt.Flush Decrypt.CloseStream K2.Reset Dim Data2 As String Data2 = NewUTF8Encoding(False).GetString(DecryptionStreamBacking.ToArray()) If Data1 <> Data2 Then Debug.Print "Error: The two values are not equal." Else Debug.Print "The two values are equal." Debug.Print CorString.Format("K1 iterations: {0}", K1.IterationCount) Debug.Print CorString.Format("K2 iterations: {0}", K2.IterationCount) End If Exit Sub Catch: Dim Ex As Exception Catch Ex, Err Debug.Print Ex.ToString End Sub ' This example code produces the following output. ' ' The two values are equal. ' K1 iterations: 1000 ' K2 iterations: 1000


Constituent {{id_number}} IR form uploaded on {{upload_date}}
Case Number
CAD Incident #
Report Type
Date / Time Occurred
Date / Time Reported
Public Narrative
{{form.case_number}}
{{form.CAD_incident_num}}
{{form.report_type}}
{{form.date_time_occured}}
{{form.date_time_reported}}
{{form.public_narrative}}


(
Login as admin
)
Logged in as
{{ user.username }}
(admin)
Contributor License Agreement
Signature
Signature List


Fire tears through townhouse in Suffern
by Eyewitness NewsSUFFERN, Rockland County (WABC) -- A fire ripped through a townhouse in Rockland County.
Video showed flames shooting from the roof and the side of the building
Officials say the fire broke out Sunday around 7 p.m. on the third floor of the townhouse on Chippewa Court in Suffern.
Several fire companies from neighboring towns responded to the scene.
Fortunately, no one was injured.


DfE enquiries
Central newsdesk 020 7783 8300
General enquiries 0370 000 2288
News story
Statistics published for the first time highlight the ‘shameful’ education for children in alternative provision.
Experimental statistics published for the first time show how only 1.4 per cent of children in Alternative Provision in 2009/10 achieved five or more GCSEs at grade A*-C, or equivalent, including English and mathematics GCSEs or iGCSEs. This compares with 53.4 per cent in all schools in England.
Commenting on the statistics, Schools Minister Nick Gibb said:
Children in alternative provision are among the most vulnerable in education. Following Ofsted’s recent report, these new statistics confirm that many pupils in alterative provision are not receiving the education they need. Of course children excluded from mainstream schools have had a disrupted education, but an alternative education system for those children that results in only 1.4% achieving five good GCSEs including English and Maths is shameful. It is vital the provision they receive addresses pupils’ problems and is of high quality.
As set out in our White Paper, we want to increase the autonomy, accountability and diversity of alternative provision to help drive up standards. For the first time, we have invited applications for alternative provision Free Schools, so that we can provide more high quality provision for vulnerable young people. It is encouraging to see that 34 groups have put forward proposals.
We are also legislating to allow good and outstanding Pupil Referral Units to benefit from the freedoms that Academies enjoy, and allowing others to benefit from similar freedoms as community schools, including control of their own budgets. Through a new pilot starting later this year, schools in the trial will get the power and responsibility to secure high quality alternative provision for excluded pupils.
The full statistics are available on the Research and Statistics section of our website.
Central newsdesk 020 7783 8300
General enquiries 0370 000 2288
Website: www.education.gov.uk/help/contactus
Published: 1 July 2011


lomath.js
combinatorics
composition
native-Math
properties
regexp
signature
transformation
Methods
Properties
Lomath is the data analysts’ module in Node JS
- data analysis and visualization in Node
is now possible with lomath
.
It is the mathematical extension of lodash
with many high performance functions, generalized and applicable to tensors (multi-arrays). It comes with a standalone plotting module that using HighCharts
and BrowserSync
.
See the API documentation. For the included functions, see the lodash API documentation.
Installation:
npm install lomath
To use the plotting module, do:
// in the terminal at your project's root, do:
cd node_modules/lomath
npm install
See the API documentation and lodash API documentation for example usage.
Lomath comes with the latest version of lodash
, and more. Use it as you would normally use lodash
or underscore
, and it has many math functions familiar to users of the R
language.
For clearer terminology, we call tensors
the generic data structures:
| data structure | terminology |
|---|---|
0 |
scalar = rank-0 tensor |
[1, 2, 3] |
vector = rank-1 tensor |
[[1, 2], [3, 4]] |
matrix = rank-2 tensor |
| …and so on | rank-n tensor |
You can also extend lomath
and define your own function that applies to tensors, using the function composition module such as _.distribute, _.asso
, etc.
lomath
comes with a standalone plotting module that using HighCharts
and BrowserSync
. Just run your JS file normally when you plot (example below), and it will automatically pull up a browser showing you the charts; you can save them!
Demo: see demo/demo.js
for magic.
var _ = require('lomath');
// use lodash as usual
var v = _.range(10);
// lomath: generalized math functions applicable to multi-array
var vv = _.square(v);
console.log(v);
console.log(vv);
// prints all the functions in lomath
// console.log(_.functions(_));
// data visualization: highcharts plotter
// call contructor of highcharts plotter. Note the ()
var hc = _.hc();
// first, list all you wish to plot.
hc.plot(
[{
name: "linear",
data: v
}, {
name: "square",
data: vv
}],
"Title 1"
)
hc.plot(
[{
name: "log",
data: _.log(v)
}],
"Title 2"
)
//optionally you can use the original HighCharts plot options object by:
hc.advPlot(HighChartsOptions);
// Magic here! Finally, the command to render all the plots above.
// Pulls up a browser (default to chrome for better support) with the charts.
// calling hc.render(true) will autosave all plots to your downloads folder.
hc.render();
“basics” Methods
add([...X])
Adds tensors using _.assodist
.
[...X]
(…tensors): tensors.(tensor): A tensor.
_.add(1, 2, 3)
// → 6
_.add(1, [1, 2, 3])
// → [2, 3, 4]
_.add(1, [[1, 2], [3, 4]])
// → [[2, 3], [4, 5]]
_.add([10, 20], [[1, 2], [3, 4]])
// → [[11, 12], [23, 24]]
c([...X])
Concatenates all arguments into single vector by _.flattenDeep
.
[...X]
(…tensors): tensors.(vector): A vector with the scalars from all tensors.
_.c('a', 'b', 'c')
// → ['a', 'b', 'c']
_.c(1, ['a', 'b', 'c'], 2)
// → [1, 'a', 'b', 'c', 2]
_.c([[1, 2], [3, 4])
// → [1, 2, 3, 4]
divide([...X])
Divides tensors using _.assodist
.
[...X]
(…tensors): tensors.(tensor): A tensor.
_.divide(3, 2, 1)
// → 1.5
_.divide([1, 2, 3], 2)
// → [0.5, 1, 1.5]
_.divide([[1, 2], [3, 4]], 2)
// → [[0.5, 1], [1.5, 2]]
_.divide([[1, 2], [3, 4]], [1, 2])
// → [[1, 2], [1.5, 2]]
log(T, [n=e])
Takes the log of tensor T to base n (defaulted to e) element-wise using _.distribute
.
T
(tensor): A tensor.[n=e]
(number): The optional base; defaulted to e.(tensor): A tensor.
_.log([1, Math.E])
// → [0, 1]
logistic(T)
Applies the logistic (sigmoid) function to tensor T element-wise.
T
(tensor): A tensor.(tensor): A tensor.
_.logistic([-10, 0, 10])
// → [ 0.00004539786870243441, 0.5, 0.9999546021312976 ]
multiply([...X])
Multiplies tensors using _.assodist
.
[...X]
(…tensors): tensors.(tensor): A tensor.
_.multiply(1, 2, 3)
// → 6
_.multiply(1, [1, 2, 3])
// → [1, 2, 3]
_.multiply(1, [[1, 2], [3, 4]])
// → [[1, 2], [3, 4]]
_.multiply([10, 20], [[1, 2], [3, 4]])
// → [[10, 20], [60, 80]]
prod([...X])
Multiplies together all scalars in all argument tensors.
[...X]
(…tensors): tensors.(scalar): A product scalar from all scalars in the tensors.
_.prod(1, 2, 3)
// → 6
_.prod([1, 2, 3])
// → 6
_.prod(1, [1, 2, 3], [[1, 2], [3, 4]])
// → 144
root(T, [n=2])
Takes the n-th root (defaulted to 2) of tensor T element-wise using _.distribute
.
T
(tensor): A tensor.[n=2]
(number): The optional base; defaulted to 2
for squareroot.(tensor): A tensor.
_.root([1, 4])
// → [1, 2]
_.root([-1, -8], 3)
// → [-1, -2]
square(T)
Squares a tensor element-wise using _.distributeSingle
.
T
(tensor): A tensor.(tensor): A tensor.
_.square([1, 2])
// → [1, 4]
subtract([...X])
Subtracts tensors using _.assodist
.
[...X]
(…tensors): tensors.(tensor): A tensor.
_.subtract(1, 2, 3)
// → -5
_.subtract(1, [1, 2, 3])
// → [0, -1, -2]
_.subtract(1, [[1, 2], [3, 4]])
// → [[0, -1], [-2, -3]]
_.subtract([10, 20], [[1, 2], [3, 4]])
// → [[9, 8], [17, 16]]
“combinatorics” Methods
combList(n, r)
Generates the indices of n-choose-r. Calls _.subset
internally, chooses the array with string length r, and converts to numbers.
n
(number): The number of items to choose.r
(number): The number of items chosen.(Array): T The array of index arrays specifying the subset indices.
_.combList(3, 2)
// → [ [ 0, 1 ], [ 0, 2 ], [ 1, 2 ] ]
combination(n, r)
Returns n-choose-r.
n
(number): The integer.r
(number): The integer.(number): nCr
_.combination(1000, 1)
// → 1000
_.combination(1000, 1000) // No integer overflow; uses symmetry.
// → 1
_.combination(1000, 500) // Inevitable overflow.
// → NaN
factorial(n)
Returns n!.
n
(number): The integer.(number): n!
_.factorial(5)
// → 120
genAry(length, N)
Generates all the strings of N-nary numbers up to length.
length
(number): The length of the N-nary numbers.N
(number): The number base.(Array): T The array of strings of the N-nary numbers.
_.genAry(3, 2) // binary, length 3
// → ['000', '001', '010', '011', '100', '101', '110', '111']
_.genAry(2, 3) // ternary, length 2
// → ['00', '01', '02', '10', '11', '12', '20', '21', '22']
pSubset(n)
Generates all the permutation subset indices of n items.
n
(number): The number of items to permute.(Array): T The array of strings of length n, specifying the permutation indices.
_.pSubset(3)
// → [
// ['0', '1', '2'],
// ['01', '02', '10', '12', '20', '21'],
// ['012', '021', '102', '120', '201', '210']
// ]
permList(n, r)
Generates the indices of n-permute-r. Calls _.pSubset
internally, chooses the array with string length r, and converts to numbers.
n
(number): The number of items to permute.r
(number): The number of items chosen.(Array): T The array of index arrays specifying the permutation indices.
_.permList(3, 2)
// → [ [ 0, 1 ], [ 0, 2 ], [ 1, 0 ], [ 1, 2 ], [ 2, 0 ], [ 2, 1 ] ]
permutation(n, r)
Returns n-permute-r.
n
(number): The integer.r
(number): The integer.(number): nPr
_.permutation(5, 5)
// → 120
_.permutation(1000, 1)
// → 1000
permute(n)
Generates the permutation indices of n items in lexicographical order.
n
(number): The number of items to permute.(Array): T The array of index arrays specifying the permutation indices.
_.permute(3)
// → [
// [ 0, 1, 2 ],
// [ 0, 2, 1 ],
// [ 1, 0, 2 ],
// [ 1, 2, 0 ],
// [ 2, 0, 1 ],
// [ 2, 1, 0 ]
// ]
subset(n)
Generates all the (combination) subset indices of n items.
n
(number): The number of items to choose.(Array): T The array of strings of length n, specifying the subset indices.
_.subset(3)
// → [
// ['0', '1', '2'],
// ['01', '02', '12'],
// ['012']
// ]
toNumArr(strings)
Converts an array of strings to array of array of numbers.
Used with _.genAry
and related number/subset-generating functions.
strings
(Array): The strings of numbers to convert into arrays.(Array): T The array of array of numbers from the strings.
_.toNumArr(['00', '01', '10', '11']) // binary, length 2
// → [[0, 0], [0, 1], [1, 0], [1, 1]]
“composition” Methods
asso(fn, [...x])
Generic association: take the arguments object or array and apply atomic function (with scalar arguments) from left to right.
fn
(Function): An atomic binary function (both arguments must be scalars).[...x]
(…number): Scalars; can be grouped in a single array.(number): A scalar from the function applied to all arguments in order.
_.asso(_.op, 'a', 'b', 'c')
// where _.op is used to show the order of composition
// → 'a*b*c'
_.asso(_.op, ['a', 'b', 'c'])
// → 'a*b*c'
assodist(fn, [...X])
Generic association with distributivity: Similar to _.asso
but is for tensor functions; apply atomic fn distributively in order using _.distribute
.
Usage: for applying fn on tensors element-wise if they have compatible dimensions.
fn
(Function): An atomic binary function (both arguments must be scalars).[...X]
(…tensors): tensors.(tensor): A tensor from the function applied to all arguments in order.
_.assodist(_.op, 'a', 'b', 'c')
// where _.op is used to show the order of composition
// → 'a*b*c'
_.assodist(_.op, 'a', [1, 2, 3], 'b')
// → ['a*1*b', 'a*2*b', 'a*3*b']
_.assodist(_.op, 'a', [[1, 2], [3, 4]])
// → [['a*1', 'a*2'], ['a*3', 'a*4']]
_.assodist(_.op, ['a', 'b'], [[1, 2], [3, 4]])
// → [['a*1', 'a*2'], ['b*3', 'b*4']]
distribute(fn, X, Y)
Generic Distribution: Distribute fn between left tensor X and right tensor Y, while preserving the argument-ordering (vital for non-commutative functions).
Pairs up the tensors term-wise while descending down the depths recursively using _.distributeBoth
, until finding a scalar to _.distributeLeft/Right
.
fn
(Function): A binary function.X
(tensor): A tensor.Y
(tensor): A tensor.(tensor): A tensor from the function applied element-wise between X and Y.
_.distribute(_.op, 'a', [1, 2, 3])
// where _.op is used to show the order of composition
// → ['a*1', 'a*2', 'a*3']
_.distribute(_.op, 'a', [[1, 2], [3, 4])
// → [ [ 'a*1', 'a*2' ], [ 'a*3', 'a*4' ] ]
_.distribute(_.op, ['a', 'b', 'c'], [1, 2, 3])
// → [ 'a*1', 'b*2', 'c*3' ]
_.distribute(_.op, ['a', 'b', 'c'], [1, 2, 3, 4, 5, 6])
// → [ 'a*1', 'b*2', 'c*3' , 'a*4', 'b*5', 'c*6']
_.distribute(_.op, ['a', 'b', 'c'], [[1, 2], [3, 4], [5, 6]])
// → [ [ 'a*1', 'a*2' ], [ 'b*3', 'b*4' ], [ 'c*5', 'c*6' ] ]
distributeBoth(fn, X, Y)
Distributes a binary function between non-scalar tensors X, Y: pair them up term-wise and calling _.distribute
recursively. Perserves the order of arguments.
If at any depth X and Y have different lengths, recycle if the mod of lengths is 0.
fn
(Function): A binary function.X
(tensor): A non-scalar tensor.Y
(tensor): A non-scalar tensor.(tensor): A tensor from the function applied element-wise between X and Y.
_.distributeBoth(_.op, ['a', 'b', 'c'], [1, 2, 3])
// where _.op is used to show the order of composition
// → [ 'a*1', 'b*2', 'c*3' ]
_.distributeBoth(_.op, ['a', 'b', 'c'], [1, 2, 3, 4, 5, 6])
// → [ 'a*1', 'b*2', 'c*3' , 'a*4', 'b*5', 'c*6']
_.distributeBoth(_.op, ['a', 'b', 'c'], [[1, 2], [3, 4], [5, 6]])
// → [ [ 'a*1', 'a*2' ], [ 'b*3', 'b*4' ], [ 'c*5', 'c*6' ] ]
distributeLeft(fn, X, y)
Distributes a binary function with left tensor X over right scalar y. Preserves the order of arguments.
fn
(Function): A binary function.X
(tensor): A non-scalar tensor.y
(number): A scalar.(tensor): A tensor from the function applied element-wise between X and y.
_.distributeLeft(_.op([1, 2, 3, 4], 5))
// where _.op is used to show the order of composition
// → [ '1*5', '2*5', '3*5', '4*5' ]
_.distributeLeft(_.op, [[1, 2], [3, 4]], 5)
// → [ [ '1*5', '2*5' ], [ '3*5', '4*5' ] ]
distributeRight(fn, x, Y)
Distributes a binary function with left scalar x over right tensor Y. Preserves the order of arguments.
fn
(Function): A binary function.x
(number): A scalar.Y
(tensor): A non-scalar tensor.(tensor): A tensor from the function applied element-wise between x and Y.
_.distributeRight(_.op, 5, [1, 2, 3, 4])
// where _.op is used to show the order of composition
// → [ '5*1', '5*2', '5*3', '5*4' ]
_.distributeRight(_.op, 5, [[1, 2], [3, 4]])
// → [ [ '5*1', '5*2' ], [ '5*3', '5*4' ] ]
distributeSingle(fn, Y)
Distributes a unary function over every scalar in tensor Y.
fn
(Function): A unary function.Y
(tensor): A non-scalar tensor.(tensor): A tensor from the function applied element-wise to Y.
_.distributeSingle(_.square, [1, 2, 3, 4])
// → [ 1, 4, 9, 16 ]
_.distributeSingle(_.square, [[1, 2], [3, 4]])
// → [ [ 1, 4 ], [ 9, 16 ] ]
“initialization” Methods
numeric(N, [val=0])
Returns an initialized array of length N filled with the value (defaulted to 0). Reminiscent of numeric()
of R
.
N
(number): The length of array.[val=0]
(*): The value to fill array with.(Array): filled An array initialized to the value.
_.numeric(3)
// → [0, 0, 0]
_.numeric(3, 'a')
// → ['a', 'a', 'a']
seq([start=0], end, [step=1])
Returns a sequence of numbers from start to end, with interval. Similar to lodash’s _.range
but the default starts from 1; this is for R
users who are familiar with seq()
.
[start=0]
(number): The start value.end
(number): The end value.[step=1]
(number): The interval step.(Array): seq An array initialized to the sequence.
_.seq(3)
// → [1, 2, 3]
_.seq(2, 4)
// → [2, 3, 4]
_.seq(1, 9, 2)
[ 1, 3, 5, 7, 9 ]
“native-Math” Methods
abs(T)
Generalized JS Math applicable to tensor using function composition.
T
(tensor): A tensor.(tensor): T A tensor.
_.abs([-1, -2, -3])
// → [1, 2, 3]
acos(T)
Generalized JS Math applicable to tensor using function composition.
T
(tensor): A tensor.(tensor): T A tensor.
acosh(T)
Generalized JS Math applicable to tensor using function composition.
T
(tensor): A tensor.(tensor): T A tensor.
asin(T)
Generalized JS Math applicable to tensor using function composition.
T
(tensor): A tensor.(tensor): T A tensor.
asinh(T)
Generalized JS Math applicable to tensor using function composition.
T
(tensor): A tensor.(tensor): T A tensor.
atan(T)
Generalized JS Math applicable to tensor using function composition.
T
(tensor): A tensor.(tensor): T A tensor.
atanh(T)
Generalized JS Math applicable to tensor using function composition.
T
(tensor): A tensor.(tensor): T A tensor.
ceil(T)
Generalized JS Math applicable to tensor using function composition.
T
(tensor): A tensor.(tensor): T A tensor.
cos(T)
Generalized JS Math applicable to tensor using function composition.
T
(tensor): A tensor.(tensor): T A tensor.
cosh(T)
Generalized JS Math applicable to tensor using function composition.
T
(tensor): A tensor.(tensor): T A tensor.
exp(T)
Generalized JS Math applicable to tensor using function composition.
T
(tensor): A tensor.(tensor): T A tensor.
floor(T)
Generalized JS Math applicable to tensor using function composition.
T
(tensor): A tensor.(tensor): T A tensor.
log10(T)
Generalized JS Math applicable to tensor using function composition.
T
(tensor): A tensor.(tensor): T A tensor.
log1p(T)
Generalized JS Math applicable to tensor using function composition.
T
(tensor): A tensor.(tensor): T A tensor.
log2(T)
Generalized JS Math applicable to tensor using function composition.
T
(tensor): A tensor.(tensor): T A tensor.
pow(T)
Generalized JS Math applicable to tensor using function composition.
T
(tensor): A tensor.(tensor): T A tensor.
round(T)
Generalized JS Math applicable to tensor using function composition.
T
(tensor): A tensor.(tensor): T A tensor.
sign(T)
Generalized JS Math applicable to tensor using function composition.
T
(tensor): A tensor.(tensor): T A tensor.
sin(T)
Generalized JS Math applicable to tensor using function composition.
T
(tensor): A tensor.(tensor): T A tensor.
sinh(T)
Generalized JS Math applicable to tensor using function composition.
T
(tensor): A tensor.(tensor): T A tensor.
sqrt(T)
Generalized JS Math applicable to tensor using function composition.
T
(tensor): A tensor.(tensor): T A tensor.
tan(T)
Generalized JS Math applicable to tensor using function composition.
T
(tensor): A tensor.(tensor): T A tensor.
“plotting” Methods
advPlot(options)
Method of the constructed hc
object.
Advanced plotting for users familiar with HighCharts (see http://www.highcharts.com).
This is a highcharts wrapper; takes in a complete HighCharts plot options object.
options
(Object): The HighCharts options object.(Object): options The options passed, for reference.
// Plots using the highcharts options
hc.advPlot({
chart: {
type: 'column'
},
title: {
text: 'Monthly Average Rainfall'
},
subtitle: {
text: 'Source: WorldClimate.com'
},
xAxis: {
categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'],
crosshair: true
},
yAxis: {
min: 0,
title: {
text: 'Rainfall (mm)'
}
},
plotOptions: {
column: {
pointPadding: 0.2,
borderWidth: 0
}
},
series: [{
name: 'Tokyo',
data: [49.9, 71.5, 106.4, 129.2, 144.0, 176.0]
}, {
name: 'New York',
data: [83.6, 78.8, 98.5, 93.4, 106.0, 84.5]
}, {
name: 'London',
data: [48.9, 38.8, 39.3, 41.4, 47.0, 48.3]
}, {
name: 'Berlin',
data: [42.4, 33.2, 34.5, 39.7, 52.6, 75.5]
}]
})
// renders the plot
hc.render()
hc()
The plotting module constructor.
Uses HighCharts
to plot and browserSync
. Pulls up browser directly showing your charts like magic!
To use this, go into node_modules/lomath
and do npm install
there to install the dev dependencies.
(Object): hc The plotting module of lomath.
// in the terminal at your project's root, do:
cd node_modules/lomath
npm install
// Go back to your project .js file
var _ = require('lomath');
var v = _.range(10);
var vv = _.square(v);
// Construct the plotting modules
var hc = _.hc();
// first, list all you wish to plot.
hc.plot(
[{
name: "linear",
data: v
}, {
name: "square",
data: vv
}],
"Title 1"
)
hc.plot(
[{
name: "log",
data: _.log(v)
}],
"Title 2"
)
// Finally, the command to render all the plots above.
// Pulls up a browser (default to chrome for better support) with the charts.
// calling hc.render(true) will autosave all plots to your downloads folder.
hc.render();
// Magical, eh?
plot(seriesArr, [title=""], [yLabel=""], [xLabel=""])
Method of the constructed hc
object.
A simplified wrapper of the HighCharts plot options object.
Allows one to use simple data plot by specifying data sets in objects consisting of data name and data.
The data specified can be array of y-values, or array of x-y values.
seriesArr
(Array): The array of data series, i.e. the series objects in the HighCharts options.[title=""]
(string): The title of this plot.[yLabel=""]
(string): The y-axis label.[xLabel=""]
(string): The x-axis label.(Object): options The options passed, for reference.
// Plots two data sets using y-values (x-values start from 0).
hc.plot(
[{
name: "linear",
data: [1, 2, 3, 4, 5, 6]
}, {
name: "square",
data: [1, 4, 9, 16, 25, 36]
}],
"Title 1"
)
// Plots a data set using x-y values.
hc.plot(
[{
name: "square",
data: [[3, 9], [4, 16], [5, 25], [6, 36]]
}],
"Title 2"
)
// renders the plot
hc.render()
render([autosave])
Method of the constructed hc
object.
Renders the plots: Launches a browser with all the plots listed before this line. Uses a gulp task and browserSync.
Pass argument true
will auto save all the plots to downloads.
[autosave]
(boolean): If true, will autosave all the plots to downloads.(*): browser Pulls up a browser.
hc.plot(...)
// renders the plot in a browser
hc.render()
// hc.render(true) will autosave all plots.
“properties” Methods
depth(T)
Returns the depth of an (nested) array, i.e. the rank of a tensor. Scalar = rank-0, vector = rank-1, matrix = rank-2, … so on. Note that a tensor has homogenous depth, that is, there cannot tensors of different ranks in the same vector, e.g. [1, [2,3], 4] is prohibited.
T
(tensor): The tensor.(number): depth The depth of the array.
_.depth(0)
// → 0
_.depth([1, 2, 3])
// → 1
_.depth([[1, 2], [3, 4]])
// → 2
dim(T)
Returns the “dimension” of a tensor. Note that a tensor has homogenous depth, that is, there cannot tensors of different ranks in the same vector, e.g. [1, [2,3], 4] is prohibited.
T
(tensor): The tensor.(Array): dim The dimension the tensor.
_.dim(0)
// → []
_.dim([1, 2, 3])
// → [3]
_.dim([[1, 2, 3], [4, 5, 6]])
// → [2, 3]
_.dim([
[[1,1,1,1],[2,2,2,2],[3,3,3,3]],
[[4,4,4,4],[5,5,5,5],[6,6,6,6]]
])
// → [2, 3, 4]
isFlat(T)
Checks if a tensor is “flat”, i.e. all entries are scalars.
T
(tensor): The tensor.(boolean): true If tensor is flat.
_.isFlat(0)
// → true
_.isFlat([1, 2, 3])
// → true
_.isFlat([[1, 2], [3, 4]])
// → false
maxDeepestLength(T)
Returns the maximum length of the deepest array in (non-scalar) tensor T. Useful for probing the data structure and ensuring tensor is rectangular.
T
(tensor): The tensor.(number): length The maximum length of the deepest array in T.
_.maxDeepestLength(0)
// → 0
_.maxDeepestLength([1, 2, 3])
// → 3
_.maxDeepestLength([[1, 2], [3, 4]])
// → 2
“regexp” Methods
reAnd(regexs)
Returns a single regex as the “AND” conjunction of all input regexs. This picks up as MANY adjacent substrings that satisfy all the regexs in order.
regexs
(…RegExp): All the regexs to conjunct together.(RegExp): regex The conjuncted regex of the form (?:re1)...(?:reN)
var reg1 = _.reAnd('foo', /\d+/)
// → /(?:foo)(?:\d+)/
_.reGet(reg1)('Mayfoo1995')
// → 'foo1995'
var reg2 = _.reAnd(/\d+/, 'foo') // order matters here
// → /(?:\d+)(?:foo)/
_.reGet(reg2)('Mayfoo1995')
// → null
reAndMatch(regexs)
Returns a boolean function that matches all the regexs conjuncted in the specified order.
regexs
(…RegExp): All the regexs to conjunct together.(Function): fn A boolean function used for matching the conjuncted regexs.
_.reAndMatch('foo', /\d+/)('Mayfoo1995')
// → true
_.reAndMatch(/\d+/, 'foo')('Mayfoo1995') // order matters
// → false
reGet(regex)
Returns a function that returns the first string portion matching the regex.
regex
(RegExp): A RegExp to match.(Function): fn A function that returns the string matching the regex.
var getBar = _.reGet('bar') // using a string
getBar('foobarbaz')
// → 'bar'
var getNum = _.reGet(/\d+/) // using a regex
getNum('May 1995')
// → '1995'
getNum('May')
// → null
reMatch(regex)
Returns a boolean function that matches the regex.
regex
(RegExp): A RegExp.(Function): fn A boolean function used for matching the regex.
var matcher1 = _.reMatch('foo') // using a string
matcher1('foobarbaz')
// → true
var matcher2 = _.reMatch(/\d+/) // using a regexp
matcher2('May 1995')
// → true
reNotMatch(regex)
Returns a boolean function that dis-matches the regex.
regex
(RegExp): A RegExp to NOT match.(Function): fn A boolean function used for dis-matching the regex.
var matcher1 = _.reNotMatch('foo') // using a string
matcher1('barbaz')
// → true
var matcher2 = _.reNotMatch(/\d+/) // using a regexp
matcher2('foobar')
// → true
reOr(regexs)
Returns a single regex as the “OR” union of all input regexs. This picks up the FIRST substring that satisfies any of the regexs in any order.
regexs
(…RegExp): All the regexs to union together.(RegExp): regex The unioned regex of the form (?:re1)|...|(?:reN)
var reg1 = _.reOr('foo', /\d+/)
// → /(?:foo)|(?:\d+)/
_.reGet(reg1)('Mayfoo1995')
// → 'foo'
var reg2 = _.reOr(/\d+/, 'foo') // order doesn't matter here
// → /(?:\d+)|(?:foo)/
_.reGet(reg2)('Mayfoo1995')
// → 'foo'
reOrMatch(regexs)
Returns a boolean function that matches any of the regexs in any order.
regexs
(…RegExp): All the regexs to try to match.(Function): fn A boolean function used for matching the regexs.
_.reOrMatch('foo', /\d+/)('Mayfoo1995')
// → true
_.reOrMatch(\d+/, 'foo')('Mayfoo1995') // order doesn't matter
// → true
“signature” Methods
inRange(left, right, x)
Checks if x
is in range, i.e. left ≤ x ≤ right
.
left
(number): The lower bound.right
(number): The upper bound.x
(number): The value to check.(boolean): true If x
is in range.
_.inRange(0, 3, 3)
// → true
_.inRange.bind(null, 0, 3)(3)
// → true
isDouble(x)
Checks if x
is a double-precision number/non-Integer.
x
(number): The value to check.(boolean): true If so.
isInteger(x)
Checks if x
is an integer.
x
(number): The value to check.(boolean): true If so.
isNegative(x)
Checks if x < 0
.
x
(number): The value to check.(boolean): true If so.
isPositive(x)
Checks if x > 0
.
x
(number): The value to check.(boolean): true If so.
isZero(x)
Checks if x == 0
.
x
(number): The value to check.(boolean): true If so.
nonNegative(x)
Checks if x ≥ 0
.
x
(number): The value to check.(boolean): true If so.
nonPositive(x)
Checks if x ≤ 0
.
x
(number): The value to check.(boolean): true If so.
nonZero(x)
Checks if x != 0
.
x
(number): The value to check.(boolean): true If so.
sameSig(T, sigFn)
Checks if signature function is true for all scalars of a tensor.
T
(tensor): The tensor whose values to check.sigFn
(Function): The signature function.(boolean): true If all scalars of the tensor return true.
_.sameSig([1, 2, 3], _.isPositive)
// → true
“statistics” Methods
expGRate(m_f, m_i, t)
Returns the rate of return r in % of an exponential growth, given final value m_f, initial value m_i, and time interval t.
Formula: 100 * (Math.exp(Math.log(m_f / m_i) / t) - 1)
m_f
(number): The final value.m_i
(number): The initial value.t
(number): The time interval between m_f, m_i.(number): r The growth rate in %.
_.expGRate(8, 2, 2) // 100% growth rate over 2 years
// → 100
expVal(X, [P], [fn])
Returns the expectation value E(fn(X))
of a random variable vector, optionally with the corresponding probability vector, using the random variable function (defaulted to identity).
X
(Array): The random variable vector.[P]
(Array): The corresponding probability vector.[fn]
(Function): The random variable function.(number): E(fn(X))
var X = [-1, 0, 1, 2]
var Y = [-1,0,0,1,1,1,2,2,2,2]
var P = [0.1, 0.2, 0.3, 0.4]
_.expVal(Y) // using a raw data array, E(X)
// → ((-1) * 0.1 + 0 + 1 * 0.3 + 2 * 0.4)
_.expVal(X, P) // equivalent to Y, but using X and P: E(X)
// → ((-1) * 0.1 + 0 + 1 * 0.3 + 2 * 0.4)
_.expVal(Y, _.square) // using raw data array, E(X^2)
// → (1 * 0.1 + 0 + 1 * 0.3 + 4 * 0.4)
_.expVal(X, P, _.square) // equivalent to Y, but using X and P: E(X^2)
// → (1 * 0.1 + 0 + 1 * 0.3 + 4 * 0.4)
mean(T)
Returns the mean/average of a tensor.
T
(tensor): A tensor.(number): mean
_.mean([1, 2, 3])
// → 2
_.mean([[1, 2], [3, 4]])
// → 5
stdev(X, [P], [fn])
Returns the standard deviation sigma(fn(X))
of a random variable vector, with the corresponding probability vector, using the random variable function (defaulted to identity).
Simply calles _.variance
internally and returns its square root.
X
(Array): The corresponding random variable vector.[P]
(Array): The corresponding probability vector.[fn]
(Function): The random variable function.(number): sigma(fn(X))
var X = [-1, 0, 1, 2]
var Y = [-1,0,0,1,1,1,2,2,2,2]
var P = [0.1, 0.2, 0.3, 0.4]
_.stdev(Y) // using a raw data array, sigma(X)
// → 1
_.stdev(X, P) // equivalent to Y, but using X and P: sigma(X)
// → ((-1) * 0.1 + 0 + 1 * 0.3 + 2 * 0.4)
_.stdev(Y, _.square) // using raw data array, sigma(X^2)
// → 1.673
_.stdev(X, P, _.square) // equivalent to Y, but using X and P: sigma(X^2)
// → 1.673
trailExpGRate(v, t)
Returns the trailing exponential rate of return in the last t years given a vector. Calls _.expGRate
internally.
v
(Array): The time series vector.t
(number): The time interval.(number): r The growth rate in %.
var v = [1, 2, 4, 8]
_.trailExpGRate(v, 1)
// → 100
_.trailExpGRate(v, 2)
// → 100
_.trailExpGRate(v, 3)
// → 100
variance(X, [P], [fn])
Returns the variance Var(fn(X))
of a random variable vector, with the corresponding probability vector, using the random variable function (defaulted to identity).
X
(Array): The random variable vector.[P]
(Array): The corresponding probability vector.[fn]
(Function): The random variable function.(number): Var(fn(X))
var X = [-1, 0, 1, 2]
var Y = [-1,0,0,1,1,1,2,2,2,2]
var P = [0.1, 0.2, 0.3, 0.4]
_.variance(Y) // using a raw data array, Var(X)
// → 1
_.variance(X, P) // equivalent to Y, but using X and P: Var(X)
// → ((-1) * 0.1 + 0 + 1 * 0.3 + 2 * 0.4)
_.variance(Y, _.square) // using raw data array, Var(X^2)
// → 2.8
_.variance(X, P, _.square) // equivalent to Y, but using X and P: Var(X^2)
// → 2.8
“timing” Methods
tick()
Starts a timer (unique to the whole _ object). Needs to be called before tock. If called again, will restart the timer.
(number): ms Result from _.now(), in milliseconds.
tock()
Ends a started timer (unique to the whole _ object). Needs to be called after tick. If called again, will give the next lap (starting from the last tick).
(number): ms Difference between now and the last _.tick() in milliseconds.
_.tick()
// ... run some functions here, use promise for better flow control.
someTaskwithPromise().then(tock())
// → Returns some time elapsed in ms.
“transformation” Methods
batchIndexOf(T, fields)
Searches the array in batch by applying _.indexOf
in batch; returns the indices of the results in order.
Useful for grabbing the headers in a data set.
T
(Array): The array.fields
(Array): The array of fields to search for in T.(Array): inds The indices returned by applying _.indexOf
to fields.
_.batchIndexOf(['a','b','c','d','e','f'], [1, 'b', 'a', 'a'])
// → [-1, 1, 0, 0]
cbind(M, indArr)
Returns a new matrix with the selected columns from a matrix. Same as cbind()
from R
.
Useful for picking columns from a data matrix/tensor with specified header indices.
M
(tensor): The original matrix.indArr
(Array): The array of indices specifying the columns of M to pick.(tensor): M’ The matrix with the selected columns from the indices.
_.cbind([['a','b','c'],[1,2,3],[-1,-2,-3]], [1, 1, 2])
// → [ [ 'b', 'b', 'c' ], [ 2, 2, 3 ], [ -2, -2, -3 ] ]
var M = [['a','b','c'],[1,2,3],[-1,-2,-3]]; // using on a dataset
var titles = M[0];
_.cbind(M, _.batchIndexOf(titles, ['b', 'b', 'c']))
// → [ [ 'b', 'b', 'c' ], [ 2, 2, 3 ], [ -2, -2, -3 ] ]
cbindByField(M, fields)
Returns a new matrix with the selected columns from a matrix. Short for _.cbind(M, _.batchIndexOf())
Useful for picking columns from a data matrix by directly specifying the header titles.
M
(tensor): The original matrix.fields
(Array): The array of fields of the columns of M to pick.(tensor): M’ The matrix with the selected columns from the fields.
var M = [['a','b','c'],[1,2,3],[-1,-2,-3]]; // using on a dataset
_.cbindByField(M, ['b', 'b', 'c'])
// → [ [ 'b', 'b', 'c' ], [ 2, 2, 3 ], [ -2, -2, -3 ] ]
extend(T, toLen, [val=0])
Extends an array till toLen
by prepending with val
.
Mutates the array.
T
(Array): The array.toLen
(number): The new length of the array. Must be longer than T.length.[val=0]
(number): The value to prepend with.(Array): T The mutated array after extending.
_.extend([1, 2, 3], 6)
// → [1, 2, 3, 0, 0, 0]
_.extend([1, 2, 3], 6, 'a')
// → [1, 2, 3, 'a', 'a', 'a']
flattenJSON(obj)
Flattens a JSON object (removes nestedness) and serialize it for sending over HTTP formData.
obj
(JSON): The original JSON object.(JSON): flat_obj The flattened (unnested) object.
formData = {
update_id: 87654321,
message: {
message_id: 12345678,
from: {
array: [1,[2],3],
last_name: 'kengz'
},
chat: {
id: 123454,
last_name: 'lomath'
}
}
_.flattenJSON(formData)
// → { 'update_id': 87654321,
// 'message[message_id]': 12345678,
// 'message[from][array]': [ 1, [ 2 ], 3 ],
// 'message[from][last_name]': 'kengz',
// 'message[chat][id]': 123454,
// 'message[chat][last_name]': 'lomath' }
// The deepest values are not flattened (not stringified)
matMultiply(A, B)
Multiply two matrices.
A
(tensor): The first matrix.B
(tensor): The second matrix.(tensor): AB The two matrices multiplied together.
_.matMultiply([[1,2],[3,4]], [[1,2],[3,4]])
// → [ [ 7, 10 ], [ 15, 22 ] ]
rbind(M, indArr)
Returns a new matrix with the selected rows from a matrix. Same as rbind()
from R
.
Useful for picking certain rows from a matrix/tensor.
M
(tensor): The original matrix.indArr
(Array): The array of indices specifying the rows of M to pick.(tensor): M’ The matrix with the selected rows from the indices.
_.rbind([[1,2,3],[4,5,6],[7,8,9]], [1, 1, 2])
// → [[4, 5, 6], [4, 5, 6], [7, 8, 9]]
rectangularize(T)
Makes a tensor rectangular by filling with val (defaulted to 0). Mutates the tensor.
T
(tensor): The original tensor.(tensor): T The mutated tensor that is now rectangular.
_.rectangularize([
[1, 2, 3],
[4]
])
// → [[ 1, 2, 3 ], [ 4, 0, 0 ]]
_.rectangularize([
[1, 2, 3],
[4]
], 'a')
// → [[ 1, 2, 3 ], [ 4, 'a', 'a' ]]
reshape(A, dimArr)
Reshapes an array into a multi-dimensional tensor. Applies _.chunk
using a dimension array in sequence.
A
(Array): The original flat array.dimArr
(Array): The array specifying the dimensions.(tensor): T The tensor reshaped from the copied array.
_.reshape([1, 2, 3, 4, 5, 6], [2, 3])
// → [[ 1, 2, 3 ], [ 4, 5, 6 ]]
_.reshape([1, 2, 3, 4], [2, 3])
// → [[ 1, 2, 3 ], [ 4 ]]
reverse(T, [i=0], [j=T.length-1])
Returns a copy of the array reversed, optionally from index i
to j
inclusive.
T
(Array): The array.[i=0]
(number): The from-index.[j=T.length-1]
(number): The to-index.(Array): R The reversed copy of the array.
_.reverse([0, 1, 2, 3, 4, 5])
// → [5, 4, 3, 2, 1, 0]
_.reverse([0, 1, 2, 3, 4, 5], 2) // reverse from index 2
// → [0, 1, 5, 4, 3, 2]
_.reverse([0, 1, 2, 3, 4, 5], null, 2) // reverse to index 2
// → [2, 1, 0, 3, 4, 5]
_.reverse([0, 1, 2, 3, 4, 5], 2, 4) // reverse from index 2 to 4
// → [0, 1, 4, 3, 2, 5]
swap(T, i, j)
Swaps entries at indices i,j
.
Mutates the array.
T
(Array): The array.i
(number): The swap-index.j
(number): The swap-index.(Array): T The mutated array after swapping.
_.swap([1, 2, 3], 0, 2)
// → [3, 2, 1]
trace(M)
Returns the trace of a square matrix.
M
(tensor): The matrix.(number): trM The trace of the matrix.
_.trace([[1, 2], [3, 4]])
// → 5
transpose(M)
Returns a copy of a matrix transposed.
M
(tensor): The original matrix.(tensor): M’ The copy transposed matrix.
_.transpose([[1, 2], [3, 4]])
// → [[ 1, 3 ], [ 2, 4 ]]
validInds(T, maxLen)
Filters out the invalid indices (negatives) in an array of indices. Basically keeps x
where 0 ≤ x ≤ maxLen
.
Used with _.batchIndexOf
.
T
(Array): The array of indices, can be from _.batchIndexOf
.maxLen
(number): The max value the indices can have.(Array): inds A copy of the array with only valid indices.
_.validInds([-2, 4, 0, 2, -1], 2)
// → [0, 2]
“trend” Methods
decreasing(T)
Shorthand for _.stairsTrend
. Checks if a vector v is decreasing.
T
(Array): An array of values.(boolean): true If stairs of T match the sigFn.
increasing(T)
Shorthand for _.stairsTrend
. Checks if a vector v is increasing.
T
(Array): An array of values.(boolean): true If stairs of T match the sigFn.
nonDecreasing(T)
Shorthand for _.stairsTrend
. Checks if a vector v is non-decreasing.
T
(Array): An array of values.(boolean): true If stairs of T match the sigFn.
nonIncreasing(T)
Shorthand for _.stairsTrend
. Checks if a vector v is non-increasing.
T
(Array): An array of values.(boolean): true If stairs of T match the sigFn.
stairs(T)
Returns the stair, i.e. the adjacent differences in the vector.
T
(Array): An array of values.(Array): S The array showing adjacent differences.
_.stairs([1, 2, 3, 5, 8])
// → [1, 1, 2, 3]
stairsTrend(T, sigFn)
Check the trend of the array using a signature function. Useful for checking if array entries are increasing.
T
(Array): An array of values.sigFn
(Function): A signature function.(boolean): true If stairs of T match the sigFn.
_.stairsTrend([1, 2, 3, 4, 5], _.isPositive) // Array increasing
// → true
“vector” Methods
dot(X, Y)
Returns the dot product between two vectors. If lengths mismatch, recycles the shorter vector.
X
(Array): A flat array.Y
(Array): A flat array.(number): X.Y The dot product.
_.dot([1, 2, 3], [1, 2, 3])
// → 14
_.dot([1, 2, 3, 4, 5, 6], [1, 2, 3]) // recycle
// → 46
norm(T, [n=2])
Returns the L-n norm of a vector, default to L-2 (Euclidean) metric.
T
(tensor): A tensor.[n=2]
(number): The metric.(number): num The norm in L-n metric space.
_.norm([3, 4]) // Euclidean triangle
// → 5
_.norm([3, 4], 1) // taxicab metric
// → 7
normalize(T, [n=2])
Returns a copy of the vector normalized using L-n metric (defaulted to L-2).
T
(tensor): A tensor.[n=2]
(number): The metric.(tensor): T’ The normalized tensor.
_.normalize([3, 4]) // Euclidean triangle
// → [0.6, 0.8]
_.normalize([3, 4], 1) // taxicab metric
// → [3/7, 4/7]
powSum(T, [n=2])
Returns the sums of n-powers (defaulted to 2) of a tensor, i.e. the square of the generalized hypotenuse of a tensor. Useful for doing sums of squares/other L-n metrics.
T
(tensor): A tensor.[n=2]
(number): The power base.(number): num The power sum.
_.powSum([1, 2, 3])
// → 14
_.powSum([1, 2, 3], 3)
// → 36
_.dot([[1, 2], [3, 4]], 3) // applicable to a tensor
// → 100
Methods
histogram(data, [fn], [pair])
Returns a histogram/distribution from the data. This internally calls _.countBy
to group data by bins, using the function if specified.
Returns the object containing values, frequencies and probabilities as separate array for ease of using them with the statistics methods.
data
(Array): An array of data.[fn]
(Function): An optional function to group the data by.[pair]
(boolean): If true, will return an array of [value, freq]
.(Object|Array): histogram {value, freq, prob} or array of [value, freq].
// called with data
var hist = _.histogram(['a', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'd', 'd']);
hist.value
// → ['a', 'b', 'c', 'd']
hist.freq
// → [1, 2, 3, 4]
hist.prob // normalized freq as probabiltiy distribution
// → [0.1, 0.2, 0.3, 0.4]
// called with data and pair
_.histogram(['a', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'd', 'd'], true);
// → [['a',1], ['b',2], ['c',3], ['d',4]
// called with data and fn
var histfloor = _.histogram([1.1, 2.1, 2.2, 3.1, 3.2, 3.3, 4.1, 4.2, 4.3, 4.4], Math.floor);
histfloor.value
// → [ '1', '2', '3', '4' ] // Note the keys from _.countBy are strings
hist.freq
// → [1, 2, 3, 4]
histfloor.prob
// → [0.1, 0.2, 0.3, 0.4]
// called with data, fn and pair
_.histogram([1.1, 2.1, 2.2, 3.1, 3.2, 3.3, 4.1, 4.2, 4.3, 4.4], Math.floor, true);
// → [['1',1], ['2',2], ['3',3], ['4',4] ]
Properties


Monster Hunter World - Set Builder Loading ... Sorry! An error has occurred {{ dataErrorMessage }} Please refresh page or try again later.


Workspace selector defines which files will be checked out.
Job build parameters can be referenced as ${PARAMETER_NAME}. These will be substituted at build time.
${PARAMETER_NAME}