AMAZING PEOPLE ARE MAKING AMAZING DESIGNS IN A FUN ENVIRONMENT
When you work with us,you are a part of the team of committed collaborators.All aspects of our software development process intergrated,interactive and agile.
Our aproach unifies design,development and product management to creat expemtional products.
We start each project by understanding business goals,the users needs and product requirements.
Then we help translate them into effective and elegant solutions.
Before we sign a contact or writea a line of code our team will spend the neccessary time needed to undestand your product vission.
The outcome of this scoping session is a propasal or high level statement of work.
Based on your requirement,we can provide a complete offering or just the pieces you need.
Our design practice offers a full range of services including branding strategy,interaction and visual design and user experience testing. Throughout your project, our designers create and implement visual designs and workflows solicit user feedback, and work with you to make sure what gets built is what is needed.
All engineers are fluent in the latest enterprise, mobile and web development technologies. They collaborate with your team to write, test, and improve code on a daily basis, using proven practices such as test-driven development and pair programming.
Planning and development is iterative. Because we are constantly coding and testing, the products we build are always ready to go live.This iterative process allows for changes as business requirements eveolve.
DELANI STUDIO
2019


{% extends 'base.html' %} {% block title %} home {% endblock %} {% block extrahead %} {% endblock %} {% block content %}
I love this planet!
I have stopped living the life that I should and
started designing the life that I want -
enjoying the journey with it's numerous adventures.
As part of this journey I..
make lives more awesome
dance with passion
design modern websites
embrace new technology
craft fun games
read about psychology
talk about philosophy
love the life of mine
Eraldo: Do you know me?
To find out how good you know me or learn more about me..
I am creating a quiz.
If you get enough points..
you will get real prices - so stay tuned.


As geographers, we often make use of photographs to help us understand the world around us. We work with different kinds of photographs, which include horizontal, oblique and vertical photographs.
Horizontal photographs are taken at ground level and show a view with which we are most familiar.
Oblique photographs are taken when the camera is tilted at an angle in relation to the ground. These photographs may be taken at ground level, from elevated positions or even from aeroplanes. High angle oblique photographs show the horizon, while low angle oblique photographs do not.
Vertical photographs are taken when the camera is perpendicular to the Earth’s surface and they show a bird’s eye view of the landscape.
Photographs that are taken from aircraft are called aerial photographs.


| base64 | A module for converting between byte sequences and xs:base64Binary values. |
| heap | A simple Skew Heap implementation. |
| int-set | Abstract interface for a set of integers. |
| int_set/jpcs | Implementation of a set of integers based on John Snelson's Red-Black Tree. |
| int_set/lw | Implementation of a set of integers based on a Red-Black Map. |
| int_set/rbtree_jpcs | |
| list | A linked list. |
| map2 | Additional functions for XQuery 3. |
| ordered-map | Abstract interface for an ordered map. |
| ordered_map/avltree | Implementation of an ordered map based on an AVL Tree. |
| ordered_map/rbtree | Implementation of an ordered map based on a Red-Black Tree. |
| pair | A library for typed pairs of XQuery sequences. |
| queue | A simple queue implementation. |
| rng | A simple random number generator implemented as a Linear Congruential Generator. |
| utf8 | Module for encoding and decoding xs:string s as xs:byte sequences using the UTF-8 encoding scheme. |


--- layout: post title: Death plague skeleton date: '2013-05-16T10:59:00+02:00' categories: - Storyboards - Sketches - Atoleiros Battle picture_url: https://film-Storyboards.tumblr.com/post/50581942473/death-plague-skeleton ---
Death Plague Skeleton


A Very Brief Intro To Go
Brad Fitzpatrick
bradfitz@{google.com,golang.org}
2012-08-23
A very brief intro to Go
Hi.
Go, briefly, why, status.
Examples
Q & A
Hi.
I'm Brad.
Go, briefly, why, status.
Go: history
New language
2007-Sep: Robert Griesemer, Rob Pike and Ken Thompson started sketching
.... (hack hack hack) ...
.... (hack hack hack) ...
2012-Mar: Go 1 released. Stable base.
Go: team
Rob Pike, Robert Griesemer, Ken Thompson, Ian Lance Taylor
Russ Cox, Sameer Ajmani, Peter Weinberger
Andrew Gerrand, David Symonds, Nigel Tao
Dmitriy Vyukov, Adam Langley, Luuk van Dijk, me...
296 unique contributors (on core/stdlib)
Go: why?
Current languages are too at the edges of a spectrum:
| Fast code, but lots of it, verbose, repetitive, tedious, slow to build. | Fast code, fun & easy to write, safe | Slow code, fun & easy to write, explode at runtime, do one thing at a time |
| C++, Java, ... | ???? | Perl, Python, Ruby, JavaScript, PHP, ... |
Go ...
is statically typed,
... but has type-inference
generates fast code, on par with C or C++
... but feels like Py/Ruby/JS/etc (closures, brevity, etc)
compiles super quickly (A -> B -> C needs only consult B when compiling A)
... enforces perfect dependencies (IWYU safe)
(continued)
Go ...
gives you control of memory layout (yay speed)
has pointers
... but no pointer arithmetic, no stale pointers ('stack', 'heap')
is safe
is garbage-collected
.. but lets you avoid tons of garbage (unlike Java)
.. allows structs in structs, pass structs by value, not just reference
Go...
kills the threads vs. events debate
... you can write sequential, readable code again! die, callback flow control, die.
has exceptions ("panic", "recover")
... but not exceptional flow control (no "try", "catch")
(continued)
Go ...
lets you write fun, high-level code to begin with
... but you make it fast later if it matters
... twiddle bits, layout memory, etc.
... but it's still readable!
... decades of C cruft, gone.
... without huge calling convention overhead (Perl/XS, SWIG, etc)
(continued)
Go ...
Runs basically everywhere
gc compiler: x86, x64, ARM
... Linux, OS X, Windows, FreeBSD, OpenBSD, NetBSD, Plan9
gccgo compiler: also PPC, MIPS, SPARC, more
... Solaris, IRIX, ...
(continued)
Go ...
is easy to deploy
static binary; no libc; no JVM
one file to cp
... (can link with C .so libraries or SWIG, but not required)
(continued)
Go ...
restored my love for programming
Hello, Go
package main
import "fmt"
func main() {
fmt.Printf("Hello, ä¸ç\n")
}
Docs & spec are very readable
It's like...
The speed of C++
The safety of Java
The fun of Python/Ruby/JS (etc)
The concurrency of ... Erlang?
 Just gofmt it in your editor's pre-save-hook.
godoc
command line
web (localhost or powers golang.org)
good airplane hacking
(demo)
Favorite feature...
synchronous APIs; no threads vs. events/callbacks
No dual set of APIs (sync vs async)
No callbacks required (can if you want)
Concurrency is built-in to the language, so APIs don't need to provide it
Block away! Who cares. Runtime will epoll you or thread you as needed.
Running? Get a thread. In a syscall? Get a thread.
Blocked on IO? epoll_wait. (or OS-equivalent)
Blocked on mutex or channel send/receive? runtime scheduler's waitlist.
All automatic
"runtime" is not a separate JVM-like thing. Compiled in to your static binary.
Goroutines and channels
Goroutine: "light-weight thread". small amount of memory.
- one (or several) per client connection. million+ okay.
segmented stacks
Channel: typed directional pipe for communicating and/or synchronization
"select" statement
Testing
Go code is very testable
... ad-hoc interfaces
testing
package works well for most needs
gomock
is a mock framework
Ancilliary tools
Debugging is good
- Stack traces are good
- GDB support
Profiling is good
- pprof (offline and online)
- memory heap profiling
Editor support is good
- Syntax highlighting for Vim, Emacs, ...
- Eclipse integration (goclipse)
- code completion daemon ("gocode")
Write in Go
(demos, Q&A)
http://golang.org
http://tour.golang.org


Click + drag for fun.
SoundManager 2 now incorporates a "high performance" mode, which has been shown to noticeably improve timing and frequency of flash callbacks. This is important for timing, reducing delay between a JS call and the sound being played, etc.
To reduce audio delay and timing issues from slow JS/Flash communication, SM2 will try to ensure that the flash movie is visible on screen at all times. If hidden or otherwise off-screen, Flash will be given lower priority and thus JS/flash "lag" (ie., delay) will be introduced when trying to play audio "in sync."
Generally, positioning the flash movie using position:fixed and bottom/left or bottom/right 0px is the less-intrusive option.
Throw from mouse
Sound source: "Acclivity", Free Sound Project


--- layout: post title: terminal commands stoped working after update Snow Leopard to 10.6.3 published: true ---
[SOLVED]
/etc/paths
as sudo
/opt/local/bin
to this file, the end content should be like this:
/opt/local/bin
from PATH, preventing many programs that was installed there to run...


| Fig. 1 |
Impacts of temperature change on yields of four major crops. ... |
| Fig. 2 |
Welfare changes from 3 °C of global average warming. Changes ... |
| Fig. 3 |
Three agriculture-sector damage functions for each of the 16 ... |
| Fig. 4 |
Changes in the social cost of carbon resulting from new dama ... |


Away from the mainland
☰ Menu
Hey you patriot what do you know about the seven sisters? we know hardly
anything. There are many problems, transport se le kar bijlee tak,
surprised? Aren't these some basic facilities which are really
important? But the media will never show this because this won't fetch
them TRP. why do we need to care about them?
As their culture has different makeup? Seriously, come on! How does it
matter. Do you know bout the Bogibeel bridge which is a combined road
and rail bridge over the Brahmaputra River in the northeastern Indian
state of Assam between Dhemaji district and Dibrugarh district promised
by the government to the people in the year 1985, but this bridge's
construction got over in 2018, 33 years for a 5 km bridge, huh? Not
fair, Is it? If this was a city like Bombay it wouldn't have
taken so long.
I Am Vijay and in the next few minutes we will be discussing the
problems in the North East
But these are'nt the only problems which our brothers and sisters face
in North East. We share a 4,145 km long boundary with Bangladesh and its
really difficult to manage such a huge border that's why illegal
immigration is a major problem in North East. Idhar hum logo ki phle se
hi itni badi population mange nahi kar pa rahe so can we afford it? See
Bangladesh is our good friend but these problems can't be ignored,
right?
Wah par AFSPA yani Armed Forces Special Powers Act (AFSPA) lagu hai.
This was introduced in1958 in the Parliament of India that grants
special powers to the Indian Armed Forces the power to maintain public
order in “disturbed areas”. According to The Disturbed Areas (Special
Courts) Act, 1976 once declared ‘disturbed’, the area has to maintain
the status quo for a minimum of 3 months. One such Act passed on 11
September 1958 was applicable to the Naga Hills,
then part of Assam. In the following decades it spread, one by one, to
the other Seven Sister States in India's northeast (at present, it is in
force in the States of Assam, Nagaland, Manipur {excluding Imphal
Municipal Council Area}, Changlang, Longding and Tirap districts of
Arunachal Pradesh, and areas falling within the jurisdiction of the
eight police stations of districts in Arunachal.
We all have read about many dynasties such as the Cholas, the Mughals
and many more but have you read about the Ahom dynasty? I don't think so
as this is
not taught in our schools so, let me tell you, the dynasty was
established by Sukaphaa, a Shan prince of Mong Mao who came to Assam
after crossing the
Patkai mountains. And do you know that they
defeated the Mughals 17 times that wasn't an easy task at that time. The
Mughals were really very powerful
and the Ahom dynasty had control
over the North East for about 598 years.
See, my intention of writing this article is really clear, don't let our
northeastern brothers and sister feel alienated. Let me give you an
example, when the event of partition took place India was divided into
three countries Pakistan, India and Bangladesh respectively, where
Bangladesh was initially known as East Pakistan
but it was really very far from it so, they felt alienated and they
revolted and demanded a new nation. So henceforth this might happen with
the case of
northeast India as well but we don't want any conflicts or any sort of
divide because we already have faced the consequences in 1947 and we
still face the consequences in some or the the other way.
So as said here are some interesting facts about Northeastern India,
1. Arunachal Pradesh: famous for its culture and the mountains there's
an interesting story of Arunachal Pradesh. Back in the past when Chinese
troops attacked there to annex Arunachal Pradesh, people literally
fought with the vessels they had against these Chinese troops just to be
a part of India.
2. Meghalaya: all the nature lovers from different parts of the world
come here to enjoy the biodiversity of Meghalaya but you know there is
something really
more interesting than, this it has the wettest place on the planet and
has the thinnest village in Asia.
3. Nagaland: one of my favourite places in the northeast and one of the
five states of the northeast Nagaland grows the spiciest chillies.
4. Manipur gave the world of boxing a legend Mary Kom. Many Indians
think that Polo is not an Indian game, let me tell you Manipur is the
place where Polo originated from.
5. To all my tea lovers Assam is really special for you, right? But
another interesting fact about Assame is, it is the only place in the
world with the largest one-
horned rhino population.
6. Our Indian girls have always made us proud but do you know one of our
best performances in Olympics (gymnastics)is due to Deepa Karmakar who
is from Tripura.
7. See we Indians are really known for our creativity and our knowledge
but do you know there is the cave in Mizoram that's crafted by a man
with just a single hairpin. Isn't that amazing guys!
Dekho yaar abhi aur batane Gaya toh tomorrow ho jaoge , but there's a
lot you can go on the internet and check out. Even after reading this
article and
knowing these facts if you think it's not worth preserving I can't
really judge you and don't want to judge you but see even after knowing
these facts majority of you might think it's worth preserving then why
we don't really talk about the problems of the northeast, you know what
recently what happened in Mizoram? two weeks before where the media was
covering the news of Delhi earthquake which was'nt even that high
magnitude one, but soon after Mizoram faced a 5
Richter scale
magnitude of earthquake but the media didn't even speak about it and it
didn't show it in the headlines because it wouldn't have had fetched
them TRP and because its northeast what really matters right?
4 days before they were floods in Assam and really the media didn't
speak about it because the media is really busy with the ban on 59
Chinese apps,matlab logo ne alternative apps dund kar use karna shuru
kar diya fir bhi 😏 and issue that we are facing on the borders of
Ladakh because that fetch them TRP. What you and I can do is we can
create awareness about it just by reading up these facts. Share this
message with anyone you want.
Thank you guys for taking out your valuable time and reading this
article. ♥✌🏻
Vijay
Writer and Social media Management
Philomath Team


"Country’s largest multicultural festival" Kala Ghoda Arts Festival, first organised with the object of maintaining and preserving art, culture and heritage of South Mumbai. This event organises a community celebration of the arts within one of the most beautiful and historic precincts of Mumbai. This event draws visitors for it carries out heritage walks, literature fest, music, art shows for the proliferation of the Art and Heritage.
"A modern and contemporary art fair." India Art Festival showcases product from Gifts & Handicrafts industry which include paintings, sculptures. The interaction and communication between the art collectors and artists of the contemporary times will give rise to new and innovative ideas. It will bring forward the importance and value of modern, fine and contemporary art in the recent times. The significance of art development and innovations which are taking place in the sector of art and craft will be highlighted.
Indian Art Promoter has started kalaa Spandan Art Fair in order to render the art arena an opportunity to showcase their artistic talents through a very economical platform in metro cities of India & abroad & thus enabling the art fraternity to find out the elegant creations as well as the unveiled, untold & unimagined contemporary artworks from various corners of the globe at an affordable cost.


As previously discussed fragments are resolved using siphon attributes that provide a mechanism to move model/view content to and from the DOM. There are a few use cases that are worth mentioning that will provide insight into how fragment resolution is impacted during the process. For simplicity sake we will use short-hand version for the siphon attributes in the examples to follow.
Not only can fragments be included, replaced, updated,
etc. within the DOM, but the fragments themselves can load other
fragments (the number of levels of fragments within fragments can be
relatively endless). Just like normal fragments, each nested
fragment will be processed asynchronously from its parent fragment.
This ensures that as new fragments are discovered they will be
loaded and its content made available for any subsequent fragments
that are encountered that point to the same path siphon. It
also prevents unnecessary calls to fragment paths that might
be used in more than one siphon attribute throughout the
fragment load action. For instance, when a node is encountered that
contains
frags/nav/nav
as its path siphon and
.topnav
as its result siphon it may discover another node that has
its own siphon attributes within the content from the initial
path siphon. Lets say the siphon attribute found
within the fragment's path siphon/result siphon is
another
data-thx-replace
that defines it's own path siphon as
frags/user/user
and result siphon as
.user
. thymus.js will proceeded to load
frags/user/user
, select
.user
and replace the defining DOM node with the node(s) selected from its
result siphon. To illustrate this concept consider the
following:
<button id="tsr1" data-thx-get="click" data-thx-get-type="async|update" data-thx-get-path="frags/user/form" data-thx-get-dest=".tsr1-1">Run</button> Nested Fragments:

Almost every browser removes
head
attributes when parsing an HTML DOM. So, the thymus.js
script definition needs to have an additional attribute to handle
head
fragment inclusions (replcacements are treated the same as
includes for
head
tags). If the browser doesn't strip out the
data-thx-include
on the
head
tag it will be used. Otherwise, an attempt will be made to capture
data-thx-head-frag
as in the following example:
 <meta charset="utf-8" />
Although this duplicates the inclusion defintion it does provide
for cross-browser support. If this redundency disrupts your inner
chi you can ommit the
data-thx-include
attribute from the
head
tag and the
data-thx-head-frag
will still be picked up.
script
tags will be inserted individually in the order they are defined
within a result siphon. Just like any other result
siphons for views,
script
tags found within a result siphon will also fire a fragment event for each script that is loaded
within the fragment destination. Multiple
script
tags can be wrapped in a parent node (like the following), but each
of them will still fire their own fragment event
individually. After all of the containing
script
s have been loaded a fragment event will be
fired for the node for which the
script
s are wrapped within.

Never Rendered (outside fragment)

My Page

My Page

script
tags that are defined in the
#scripts
result siphon that have a normal URL
src
are not present in the resulting
replacement. This is because there is nothing to
include/replace in the DOM. However, any
script
that is inlined or contains a
src
with a
data:text/javascript,
will appear in the resulting DOM.
script
that is dynamically loaded by thymus.js include a
//# sourceURL=path/to/app.js
at the end of its source file. Some browsers like Google
Chrome will interperate the comment as a source mapping that will
identify the
script
in the debugger.
Fragments that are retrieved that have one of the
content-type
definitions below will be treated as raw read-only views
text/plain
application/octet-stream
Because there is no result siphon assocaited with the returned data it can be ommitted. So, only a path will remain. Similar to the following:

Will be replaced.

 This is the content from raw-data.txt

User Data

User Data
 This is the content from raw-data.txt

Not all of the standard media types are supported for model fragments, but where they make sense thymus.js attempts to make a smooth transition of model data into corresponding views.
Fragments that are retrieved that have one of the JSON
content-type
definitions below will be interpreted as model data. How model
data is transferred to a corresponding view(s) is determined
by... Comming Soon!
text/json
application/*json
(where * is one of
the standard
media types for JSON)
Fragments that are retrieved that have one of the XML
content-type
definitions below will be interpreted as model data. How model
data is transferred to a corresponding view(s) is determined
by... Comming Soon!
text/xml
application/*+xml
(where * is one of
the standard
media types for XML)


{% extends "main.html" %} {% block title %} Password Reset {% endblock %} {% block preheader %} Password Reset {% endblock %} {% block main %}
|
Hi there, We have received your request to reset your password for your Book A Meal account. Please click the button below to reset your password.
If you did not request for the password reset, please ignore this email. With Love from Book A Meal! |


Unique wood fired pizzas or be tempted by our pasta, antipsato, focaccias, salads and bruschetta dishes.
Relax in the friendly ambience as you enjoy the aromas of the wood ovens or sit al fresco and soak up the
Mildra sunshine.
1
Food description that is followed
after food title
2
Food description that is followed
after food title
3
Food description that is followed
after food title
We bring the season's best mix of organic produce and hand-
crafted farm produts conviniently to your door by growing and
partnering with local farms and artisans in your area.
Unique wood fired pizzas or be tempted by our pasta, antipsato, focaccias, salads and bruschetta dishes.
Relax in the friendly ambience as you enjoy the aromas of the wood ovens or sit al fresco and soak up the
Mildra sunshine.
Book Your Table


Toggle navigation
Configure your Wordfish Application
Ways to
contact
us:
Wordfish App
Complete
Download your python module:
Download ZIP


Spain coach Moreno to be replaced by Luis Enrique, say reports
MADRID, Nov 19 ― Spain coach Robert Moreno is to be dismissed from the role according to Spanish media reports today after his side thrashed Romania 5-0 in their final Euro 2020 qualifier.
Spanish newspaper El Mundo reported that former Spain coach Luis Enrique is set to make a sensational return five months after resigning from the role due to the illness of his daughter Xana, who tragically passed away in September.
The Spanish football federation did not respond to a request for comment on Moreno's future but announced that their president Luis Rubiales and sporting director Jose Francisco Molina will hold a news conference today.
Moreno, Luis Enrique's long-time assistant who was given the top job in June, refused to give the usual post-match news conference and did not speak to any media, with El Mundo saying he bid farewell to the players after the game in tears.
Moreno won four out of six games in charge of Spain and drew two, with his side clinching a place at Euro 2020 last month with a 1-1 draw away to Sweden.
Spain also won all three games when Moreno took temporary charge between March and June while Luis Enrique was on leave. They finished top of Group F, taking 26 points from 10 games. ― Reuters


Nonparametric estimation of a unimodal or U-shape covariate effect under additive hazards model.
| Version: | 1.0 |
| Depends: | R (≥ 3.0.2), Iso, ahaz, survival |
| Published: | 2016-12-30 |
| Author: | Yunro Chung [cre], Anastasia Ivanova, Michael G. Hudgens and Jason P. Fine |
| Maintainer: | Yunro Chung <ychung at fredhutch.org> |
| License: | GPL-2 | GPL-3 [expanded from: GPL (≥ 2)] |
| NeedsCompilation: | no |
| In views: | Survival |
| CRAN checks: | uniah results |
| Reference manual: | uniah.pdf |
| Package source: | uniah_1.0.tar.gz |
| Windows binaries: | r-devel: uniah_1.0.zip, r-release: uniah_1.0.zip, r-oldrel: uniah_1.0.zip |
| OS X binaries: | r-release: uniah_1.0.tgz, r-oldrel: uniah_1.0.tgz |
| Old sources: | uniah archive |
Please use the canonical form https://CRAN.R-project.org/package=uniah to link to this page.


About Acme - The Bad Version
Acme's Place in History
Acme Widgets is best known for its role in the Roadrunner cartoons. Acme has proudly provided genius widgets to help the coyote capture the roadrunner. While our widgets are fabulous, the low success rate is certainly due to user error.
Here's an interesting tidbit, not everybody roots for the Roadrunner. This graph shows the breakdown.
This is a sample page that includes many errors commonly associated with article pages. Automated testing should trigger an assortment of issues. Here's a list of elements within this page:
Lists
* Pseudo unordered list (this one)
* Pseudo ordered list
* Pseudo Definition lists
* Pseudo Headers
* Headings out of order
* Pseudo link
* Pseudo blockquote
* Image without alt attribute
* Active image with empty alt text
* Inline tags: marquee, blink
* Input type image without alt attribute
* Title attribute missing
* Lang attribute missing
* Doctype html is missing
* Image map without alt text
Ordered and Definition Lists
Help make Acme better
Does that last list confuse you? Here's what it means.
GitHub is an online collaborative tool that allows people to share code, suggest changes, and propose solutions.
GitHub Flow is a lightweight, branch-based workflow that supports teams and projects where deployments are made regularly. This guide explains how and why GitHub Flow works.
Github Guides
Fork
Download the code and prepare to version of the project.
Pull Request
Ask the project manager to include your code patch into the project.


List of FIS members:
Case Plan begin/end date:
Safety Plan begin/target date:
Date and begin time and end time of staffing and log entered by:
Reason for Referral:
Date of previous supervisory staffings and update from that staffing
Participants:
Reason for staffing: (check all that apply)
Family Strengths and Needs: (Review reason for referral and assessments completed to determine family’s strengths and needs.)
Barriers and Progress: (Review CP objectives and activities completed and remaining, frequency and duration of visits, community resources utilized, family participation or lack of participation, successes, transition to less intensive services, and any other information pertinent to the family.)
Identify current/new safety concerns: (Review Safety Plan, discuss serious harm, protective capacities, child vulnerability and time are essential concepts for assessing safety. The safety assessment evaluates the family conditions, situations and circumstances to determine whether they have escalated to a point where there is imminent danger threatening serious harm to a child and the caregiver’s protective capacity is insufficient to protect the child.)
Identify ongoing or additional risk concerns: (The risk assessment evaluates the family’s conditions, situations and circumstances to determine whether they contribute to the likelihood a child may be abused or neglected in the future. Risk of future maltreatment may be reduced with services and more long-term goals to change the behaviors, perceptions, attitudes, motives, emotions, etc. enhancing the family’s strengths and protective capacities. If risks are addressed by providing services relating to the specific conditions, behaviors, and circumstances and enhancing protective capacities, the escalation of risk to safety may be prevented.)
If no, the case plan or non-intensive plan must to be updated.
Next Steps: (This shall include what steps need to be taken, for what purpose, and when they will be completed.)


GAME OVER
Final score:
Final level:
Winners do not take drugs
Missile Command
Start Game
Replay Last Game
High Score
Enter your name


Join Us
New recruits will be held when a new semester begins!
Recruit forms to be posted.
coming soon


Can't connect to the application because there is no internet access available.
Please check your connection settings and try again.


{% extends "core_layout.html" %} {% load static %} {% block title %} Autodidacticism {% endblock title %} {% block body %}
"Autodidacticism or self-education is education without the guidance of masters or institutions.  - Wikipedia
A bit pretentious but this site serves two functions: It serves as a repository for my personal educational projects (and supporting documentation) as well as a platform for Data APIs that serve datasets that are either generated by said projects or personal data collection.
Is this website my personal programming portfolio? Honestly, yes. The Applications section of the website functions more as a traditional programming portfolio but I will probably link this entire site in a resume at some point. Autodidacticism serves more as a means of keeping track of the resources that I use for research and software development. I am far more of a back end oriented individual and do not have a real eye for design/front end so expect the look and feel of the site to be VERY basic.


Vanity Imports with Hugo
Oct 16, 2016When working on Gorram, I decided I wanted to release it via a vanity import path. After all, that’s half the reason I got npf.io in the first place (an idea blatantly stolen from Russ Cox’s rsc.io).
What is a vanity import path? It is explained in the go get documentation. If you’re not hosted on one of the well known hosting sites (github, bitbucket, etc), go get has to figure out how to get your code. How it does this is fairly ingenious - it performs an http GET of the import path (first https then http) and looks for specific meta elements in the page’s header. The header elements tells go get what type of VCS is being used and what address to use to get the code.
The great thing about this is that it removes the dependency of your code on any one code hosting site. If you want to move your code from github to bitbucket, you can do that without breaking anyone.
So, the first thing you need to host your own vanity imports is something that will respond to those GET requests with the right response. You could do something complicated like a special web application running on a VM in the cloud, but that costs money and needs maintenance. Since I already had a Hugo website (running for free on github pages), I wanted to see if I could use that. It’s a slightly more manual process, but the barrier of entry is a lot lower and it works on any free static hosting (like github pages).
So what I want is to have go get npf.io/gorram
, actually download the code
from https://github.com/natefinch/gorram. For that, I need
https://npf.io/gorram to serve up this meta element:
<meta name="go-import" content="npf.io/gorram git https://github.com/natefinch/gorram">
or more generally:
<meta name="go-import" content="import-prefix vcs repo-root">
Where import-prefix is a string that matches a prefix of the import statement used in your code, vcs is the type of source control used, and repo-root is the root of the VCS repo where your code lives.
What’s important to note here is that these should be set this way for packages in subdirectories as well. So, for npf.io/gorram/run, the meta tag should still be as above, since it matches a prefix of the import path, and the root of the repo is still github.com/natefinch/gorram. (We’ll get to how to handle subdirectories later.)
You need a page serving that meta tag to live at the exact same place as the import
statement… that generally will mean it needs to be in the root of your domain
(I know that I, personally don’t want to see go get npf.io/code/gorram
when I
could have go get npf.io/gorram
).
The easiest way to do this and keep your code organized is to put all your pages for code into a new directory under content called “code”. Then you just need to set the “permalink” for the code type in your site’s config file thusly:
[Permalinks]
code = "/:filename/"
Then your content’s filename (minus extension) will be used as its url relative to your site’s base URL. Following the same example as above, I have content/code/gorram.md which will make that page now appear at npf.io/gorram.
Now, for the content. I don’t actually want to have to populate this page with content… I’d rather people just get forwarded on to github, so that’s what we’ll do, by using a refresh header. So here’s our template, that’ll live under layouts/code/single.html:
<!DOCTYPE html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="go-import" content="npf.io{{substr .RelPermalink 0 -1}} git {{.Params.vanity}}">
<meta name="go-source" content="npf.io{{substr .RelPermalink 0 -1}} {{.Params.vanity}} {{.Params.vanity}}/tree/master{/dir} {{.Params.vanity}}/blob/master{/dir}/{file}#L{line}">
<meta http-equiv="refresh" content="0; url={{.Params.vanity}}">
</head>
</html>
This will generate a page that will auto-forward anyone who hits it on to your github account. Now, there’s one more (optional but recommended) piece - the go-source meta header. This is only relevant to godoc.org, and tells godoc how to link to the sourcecode for your package (so links on godoc.org will go straight to github and not back to your vanity url, see more details here).
Now all you need is to put a value of vanity = https://github.com/you/yourrepo
in the frontmatter of the correct page, and the template does the rest. If your
repo has multiple directories, you’ll need a page for each directory (such as
npf.io/gorram/run). This would be kind of a drag, making the whole directory
struture with content docs in each, except there’s a trick you can do here to
make that easier.
I recently landed a change in Hugo that lets you customize the rendering of alias pages. Alias pages are pages that are mainly used to redirect people from an old URL to the new URL of the same content. But in our case, they can serve up the go-import and go-source meta headers for subdirectories of the main code document. To do this, make an alias.html template in the root of your layouts directory, and make it look like this:
<!DOCTYPE html><html>
<head>
{{if .Page.Params.vanity -}}
<meta name="go-import" content="npf.io{{substr .Page.RelPermalink 0 -1}} git {{.Page.Params.vanity}}">
<meta name="go-source" content="npf.io{{substr .Page.RelPermalink 0 -1}} {{.Page.Params.vanity}} {{.Page.Params.vanity}}/tree/master{/dir} {{.Page.Params.vanity}}/blob/master{/dir}/{file}#L{line}">
{{- end}}
<title>{{ .Permalink }}</title>
<link rel="canonical" href="{{ .Permalink }}"/>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta http-equiv="refresh" content="0; url={{ .Permalink }}" />
</head>
</html>
Other than the stuff in the if statement, the rest is the default alias page that Hugo creates anyway. The stuff in the if statement is basically the same as what’s in the code template, just with an extra indirection of specifying .Page first.
Note that this change to Hugo is in master but not in a release yet. It’ll be in 0.18, but for now you’ll have to build master to get it.
Now, to produce pages for subpackages, you can just specify aliases in the front matter of the original document with the alias being the import path under the domain name:
aliases = [ "gorram/run", "gorram/cli" ]
So your entire content only needs to look like this:
+++
date = 2016-10-02T23:00:00Z
title = "Gorram"
vanity = "https://github.com/natefinch/gorram"
aliases = [
"/gorram/run",
"/gorram/cli",
]
+++
Any time you add a new subdirectory to the package, you’ll need to add a new alias, and regenerate the site. This is unfortunately manual, but at least it’s a trivial amount of work.
That’s it. Now go get (and godoc.org) will know how to get your code.


This example shows how to use the L-System component to render a 4-iteration Hilbert Curve in A-Frame.
2D Koch Snowflake multiple mixins (geometry and color changes)Demonstrating how to use !
and '
to increment or decrement the mixin index. This makes it possible to use all kinds of materials and geometries for symbols. Make sure to also check the source code of the examples! :)
This example shows how to use the L-System component to render a tree in A-Frame.
ForrestThis example shows how to use the L-System component to render a multiple trees in A-Frame.


[§329-17] Schedule III tests. A substance shall be placed in schedule III if the substance has a degree of danger or probable danger less than the substances listed in schedules I and II according to the determination made pursuant to section 329-11. [L 1972, c 10, pt of §1]


Correct responses:
These are the correct responses to the test. You can change these to fit your case.
Reset
Enter exam responses:
These are the responses given to the test.
Use dash (-) for missing answer.
Reset
© Marius Lazar


High on spirits, Hostel 3 is best known for its enthusiastic inmates. Be it excelling in sports, outranking others in cultural or shining bright at institute festivals, our hostel has been there done that!! And this plethora of accomplishments doesnt make it stop. Hostel 3 is out for a kill--and even sky is not the limit!!
H3 boasts of one of the richest cultural talent in the institute. From different genres of Cult GCs to PAF, you will find us on or near the podium, if not first. This has been the trend since time immemorial. And we strive to take this legacy forward and keep machaofying!
In Hostel 3, Sports is not an activity. It is not a discipline. It is not a hobby or a way to pass time. In Hostel 3, Sports is a way of life. From the muddy football field where we put our heart and soul into winning a Inter wing match to the Volley field where we spend countless hours to win a single set of 25 points in nothing but a friendly evening game. Once you step foot inside, you will feel that this place breathes sports.
Hostel 3 has always been home to the institute's best when it comes to technical activities. This is a hostel where there is something going on throughout the year, be it the racing cars being built for TrackMania, the line followers, the fundae sessions conducted by seniors, setting up the Robocon arena and building its bot, etc. For a hostel bubbling with enthusiasm, tech just never seems to come to a halt.
| Event | Genre | Position |
| Film GC | Film 'n' Media | 1st |
| Dram GC | Dramatics | 2nd |
| 3D Modelling GC | PFA | 1st |
| Logic GC | Tech | 4th |
| Lawn Tennis GC | Sports | Gold |
| Crossy GC | Sports | Silver |


a 3star hotel located in Delhi-NCR.
a 4star hotel located in Mumbai.
a 5star hotel located in Guwahati.


Heating
Our goal is to keep you warm and comfortable through the winter months.We know which products and systems will work best for you. Our recommendations will always keep your requirements and budget in mind. We'll respond to your requests and act quickly when you call. Nothing is more important than your peace of mind when the weather is cold.


Heartbeats provide a way for environments to easily ensure that their descendants are alive. A uvm_heartbeat is associated with a specific objection object. A component that is being tracked by the heartbeat object must raise (or drop) the synchronizing objection during the heartbeat window. The synchronizing objection must be a uvm_callbacks_objection type.
The uvm_heartbeat object has a list of participating objects. The heartbeat can be configured so that all components (UVM_ALL_ACTIVE), exactly one (UVM_ONE_ACTIVE), or any component (UVM_ANY_ACTIVE) must trigger the objection in order to satisfy the heartbeat condition.
| uvm_heartbeat | |
| Heartbeats provide a way for environments to easily ensure that their descendants are alive. | |
| Methods | |
| new | Creates a new heartbeat instance associated with cntxt. |
| set_mode | Sets or retrieves the heartbeat mode. |
| set_heartbeat | Sets up the heartbeat event and assigns a list of objects to watch. |
| add | Add a single component to the set of components to be monitored. |
| remove | Remove a single component to the set of components being monitored. |
| start | Starts the heartbeat monitor. |
| stop | Stops the heartbeat monitor. |
function new( string name, uvm_component cntxt, uvm_callbacks_objection objection = null )
Creates a new heartbeat instance associated with cntxt. The context is the hierarchical location that the heartbeat objections will flow through and be monitored at. The objection associated with the heartbeat is optional, if it is left null but it must be set before the heartbeat monitor will activate.
uvm_callbacks_objection myobjection = new("myobjection"); //some shared objection class myenv extends uvm_env; uvm_heartbeat hb = new("hb", this, myobjection); ... endclass
function uvm_heartbeat_modes set_mode ( uvm_heartbeat_modes mode = UVM_NO_HB_MODE )
Sets or retrieves the heartbeat mode. The current value for the heartbeat mode is returned. If an argument is specified to change the mode then the mode is changed to the new value.
function void set_heartbeat ( uvm_event e, ref uvm_component comps[$] )
Sets up the heartbeat event and assigns a list of objects to watch. The monitoring is started as soon as this method is called. Once the monitoring has been started with a specific event, providing a new monitor event results in an error. To change trigger events, you must first stop the monitor and then start with a new event trigger.
If the trigger event e is null and there was no previously set trigger event, then the monitoring is not started. Monitoring can be started by explicitly calling start.
function void add ( uvm_component comp )
Add a single component to the set of components to be monitored. This does not cause monitoring to be started. If monitoring is currently active then this component will be immediately added to the list of components and will be expected to participate in the currently active event window.
function void remove ( uvm_component comp )
Remove a single component to the set of components being monitored. Monitoring is not stopped, even if the last component has been removed (an explicit stop is required).
function void start ( uvm_event e = null )
Starts the heartbeat monitor. If e is null then whatever event was previously set is used. If no event was previously set then a warning is issued. It is an error if the monitor is currently running and e is specifying a different trigger event from the current event.
Creates a new heartbeat instance associated with cntxt.
function new( string name, uvm_component cntxt, uvm_callbacks_objection objection = null )
Sets or retrieves the heartbeat mode.
function uvm_heartbeat_modes set_mode ( uvm_heartbeat_modes mode = UVM_NO_HB_MODE )
Sets up the heartbeat event and assigns a list of objects to watch.
function void set_heartbeat ( uvm_event e, ref uvm_component comps[$] )
Add a single component to the set of components to be monitored.
function void add ( uvm_component comp )
Remove a single component to the set of components being monitored.
function void remove ( uvm_component comp )
Starts the heartbeat monitor.
function void start ( uvm_event e = null )
Stops the heartbeat monitor.
function void stop ()
The uvm_callbacks_objection is a specialized uvm_objection which contains callbacks for the raised and dropped events.
class uvm_callbacks_objection extends uvm_objection


EBay to sell ticketing unit StubHub for $4.05 billion
by Reuters(Reuters) - EBay Inc (O:EBAY) will sell its ticketing unit, StubHub, for $4.05 billion to ticket reseller Viagogo Ltd in an all-cash deal, the companies said on Monday.
Shares of eBay were up more than 5% before the opening bell.
The deal is expected to close by the end of the first quarter of 2020.


Gene Finder Final
cielocean/gene_finder.py
Great Job! I have a few comments about some parts of your code below, but none were critical enough to really affect your grade. They are things you should keep in mind for the future. Also, for future reference, remember to comment your code where necessary. This time it seems somewhat sparse, but the docstrings do cover for a lot of the ambiguity. Wherever there is logic not explained by the docstring that is not obvious, make sure you add a comment making the explanation.
# -*- coding: utf-8 -*-
"""
Created on Sun Feb 2 11:24:42 2014
Jee Hyun Kim
Olin College Class of 2018
Software Design Spring 15'
Mini Project 1: Gene Finder
"""
# you may find it useful to import these variables (although you are not required to use them)
from amino_acids import aa, codons, aa_table
import random
from load import load_seq
def shuffle_string(s):
""" Shuffles the characters in the input string
NOTE: this is a helper function, you do not have to modify this in any way """
return ''.join(random.sample(s,len(s)))
def get_complement(nucleotide):
""" Returns the complementary nucleotide
nucleotide: a nucleotide (A, C, G, or T) represented as a string
returns: the complementary nucleotide
>>> get_complement('A')
'T'
>>> get_complement('C')
'G'
"""
nuc=['A','T','C','G']
com_nuc=['T','A','G','C']
for i in range (4):
if nucleotide == nuc[i]:
return com_nuc[i]
raise ValueError
return None
This return is not necessary because if you raise a ValueError, the script will stop and inform the user that the nucleotide passed in does not match 'A', 'T', 'C', or 'G'. This is just a style issue.
def get_reverse_complement(dna):
""" Computes the reverse complementary sequence of DNA for the specfied DNA
sequence
dna: a DNA sequence represented as a string
returns: the reverse complementary DNA sequence represented as a string
>>> get_reverse_complement("ATGCCCGCTTT")
'AAAGCGGGCAT'
>>> get_reverse_complement("CCGCGTTCA")
'TGAACGCGG'
"""
rc=''
for nucleotide in dna:
rc=get_complement(nucleotide)+rc
return rc
def rest_of_ORF(dna):
""" Takes a DNA sequence that is assumed to begin with a start codon and returns
the sequence up to but not including the first in frame stop codon. If there
is no in frame stop codon, returns the whole string.
dna: a DNA sequence
returns: the open reading frame represented as a string
>>> rest_of_ORF("ATGTGAA")
'ATG'
>>> rest_of_ORF("ATGAGATAGG")
'ATGAGA'
"""
#stop codon: TAG, TAA, TGA
for i in range(3,len(dna),3):
if dna[i:i+3]in('TAG','TAA','TGA'):
return dna[:i]
return dna
def find_all_ORFs_oneframe(dna):
""" Finds all non-nested open reading frames in the given DNA sequence and returns
them as a list. This function should only find ORFs that are in the default
frame of the sequence (i.e. they start on indices that are multiples of 3).
By non-nested we mean that if an ORF occurs entirely within
another ORF, it should not be included in the returned list of ORFs.
dna: a DNA sequence
returns: a list of non-nested ORFs
>>> find_all_ORFs_oneframe("ATGCATGAATGTAGATAGATGTGCCC")
['ATGCATGAATGTAGA', 'ATGTGCCC']
"""
ind=0
ORF=[]
for i in range(0,len(dna),3):
if dna[i:i+3]=='ATG':
dna=dna[i:]
ORF.insert(ind,rest_of_ORF(dna))
dna=dna[len(rest_of_ORF(dna)):]
ind+=1
continue
return ORF
This continue is not necessary because it is at the end of the loop. Also, notice how your forloop loops through len(dna), but you are changing dna throughout the loop. This will do what you want, but you'll have a bunch of empty loops at the end once you've shorted dna to be less than the original length. A while loop that only exits once you've reached the end of dna would be good here.
def find_all_ORFs(dna):
""" Finds all non-nested open reading frames in the given DNA sequence in all 3
possible frames and returns them as a list. By non-nested we mean that if an
ORF occurs entirely within another ORF and they are both in the same frame,
it should not be included in the returned list of ORFs.
dna: a DNA sequence
returns: a list of non-nested ORFs
>>> find_all_ORFs("ATGCATGAATGTAG")
['ATGCATGAATGTAG', 'ATGAATGTAG', 'ATG']
"""
ORFs=[]
for i in range(3):
ORFs.extend(find_all_ORFs_oneframe(dna[i:]))
return ORFs
def find_all_ORFs_both_strands(dna):
""" Finds all non-nested open reading frames in the given DNA sequence on both
strands.
dna: a DNA sequence
returns: a list of non-nested ORFs
>>> find_all_ORFs_both_strands("ATGCGAATGTAGCATCAAA")
['ATGCGAATG', 'ATGCTACATTCGCAT']
"""
ORFb=[]
ORFb.extend(find_all_ORFs(dna))
ORFb.extend(find_all_ORFs(get_reverse_complement(dna)))
return ORFb
Notice that this is equivalent to (but less elegant than) find_all_ORFs(dna) + find_all_ORFs(get_reverse_complement(dna)
.
def longest_ORF(dna):
""" Finds the longest ORF on both strands of the specified DNA and returns it
as a string
>>> longest_ORF()
'ATGCTACATTCGCAT'
"""
#Returns the first longest ORF if there are more than one longest ORF
ORFl=""
for ORF in find_all_ORFs_both_strands(dna):
if len(ORF)>len(ORFl):
ORFl=ORF
return ORFl
def longest_ORF_noncoding(dna,num_trials):
""" Computes the maximum length of the longest ORF over num_trials shuffles
of the specfied DNA sequence
dna: a DNA sequence
num_trials: the number of random shuffles
returns: the maximum length longest ORF """
l=0
Do you really need this additional l
variable? As it is, its name ambiguous as to what it does and you may be better off without it. Try to use a slightly more intuitive naming scheme. For example, dnal -> dna_length
dnal=0
dnalist=list(dna)
for i in range(num_trials):
random.shuffle(dnalist)
l=len(longest_ORF(dnalist))
if l>dnal:
dnal=l
return dnal
def coding_strand_to_AA(dna):
""" Computes the Protein encoded by a sequence of DNA. This function
does not check for start and stop codons (it assumes that the input
DNA sequence represents an protein coding region).
dna: a DNA sequence represented as a string
returns: a string containing the sequence of amino acids encoded by the
the input DNA fragment
>>> coding_strand_to_AA("ATGCGA")
'MR'
>>> coding_strand_to_AA("ATGCCCGCTTT")
'MPA'
"""
aa=''
for i in range(0,len(dna),3):
if ithreshold:
aa.append(coding_strand_to_AA(ORF))
return aa
if __name__ == "__main__":
import doctest
doctest.testmod()


A New Promising Power On Track
September 6, 2016
‘It took me quite a long time to develop a voice, and now I have it, I am not going to be silent.’
Women folk had lost their voice due to some historical reason in the past. This made them completely inactive in the society. But the present scenario is quite different.
Women empowerment is the current topic for all speakers and even in competitions too. The world says that the space given to the women folk is the symbol of their upliftment. But,it is not the real change. The real symbol is the freedom given to them to decide their path, surrounding and life. This thought is now being popularised and many women are raising their voice for their needs and wishes.
Education is the key area being focused by all.  This folk have that power. They are blessed with the skill to support a greater mass with complete patience and lead them towards success. Hence their knowledge can support their family and the society in many means.
“The question isn’t who’s going to let me; it’s who is going to stop me.” ~ Ayn Rand.
With this spirit our WoMoz folk have marked their contribution in #mozillatnwoc16 organised in #mozillatn community.A powerful team of women contributors under different trainers symbolised their role in a remarkable manner in localisation.
The team constituted of 12 WoMoz and a total of 996 strings were localised by them.
This is a symbolic representation of incoming women strength to our community. Most notable part of this is that most of the woMoz have joined our community recently and they have been contributing only for a period less than 2 months. But their interest and dedication is evident through the work done by them.
The list of contributors and their suggestions in pontoon are:
| S.no | Name of the Contributor | Suggestions made |
|---|---|---|
| 1 | Ashly Rose Mathew M | 253 |
| 2 | Fahima Zulfath. A | 139 |
| 3 | Pavithra R | 117 |
| 4 | Aishwarya B | 113 |
| 5 | Vaishnavi Devi R | 81 |
| 6 | Vinusha | 75 |
| 7 | krithika sowbarnika R | 53 |
| 8 | Bhuvana Meenakshi K | 48 |
| 9 | Vaishanavi O | 37 |
| 10 | Shanmuga priya | 34 |
| 11 | Shiny | 25 |
| 12 | Renuga | 21 |
“A woman is the full circle. Within her is the power to create, nurture and transform.” This circle is ever a part of humanity, though nonvocal - shortly before, now is in full swing to render their service for the society. Let this service never ends…


I went and killed slicers and wretch fo a while nothing new yet. Aurelian breastplates...Bulwart armors and a few other armors and boots. Nothing new has dropped yet. On the upside i'm pretty close to 14:)
Edit: By chance did you change monster damage? The slicers and wretch seem to hurt more today.. might be just me tho. I'm still having the problem when i click spin and walk at the same time, my spin key makes me walk.
Other then that...I wish you'd add a disconnection screen rather then just having the game shut down when i lose connection.


--- author: Steve Gill categories: app date: '2012-06-06 18:45:13' permalink: /2012/06/06/phonegap-1-8-0-released/ slug: phonegap-1-8-0-released status: publish title: PhoneGap 1.8.0 Released! type: post format: html tags: - Release ---
We have just released PhoneGap 1.8.0! Thanks to everyone who downloaded 1.8.0rc1. This release focuses on bug fixes!
Curious about our release schedule? Read Brian LeRoux's blog post, Rolling Releases: How Apache Cordova becomes PhoneGap and Why to get more background.
View the 1.8.0 changes below in the change log:
Fixes CB-819 fail callback not invoked
[CB-794] Add HTTP status code to FileTransferError object for iOS
[CB-359] Updates to adhere to W3C spec for geolocation. Changing actions based on changes incorporated into cordova-js
[CB-683] pause/resume events now should pass in event object into handlers
[CB-464] rewrite of accel plugin, simplified accel to start/stop actions.
[CB-623] added Logger plugin
Fixed CB-513 - Remove cast functionality from CDVPluginResult, obsolete
Fixed CB-594 - Remove checks for retainCount
Fixed CB-637 - Add a doc on how to update the template project in the bin subfolder Updated bin folder scripts.
Fixed CB-669 - verify.sh file in a new Cordova-based application project should not be included in the .app bundle
Fixes CB-471 - LocalFileSystem.PERSISTENT "do not back up" file attribute iOS
Fixed typo in File.getMetadata - error callback had OK instead of ERROR status
Fixes CB-610 - Capture.bundle missing microphone image resources for retina iPad results in mis-drawn recording interface
Fixes CB-751 - Undefined function is called when orientation change
Fixes CB-754 - Use of -weak_library in 'other library flags' of generated template XCode app causes crashes in Simulator when Obj-C Blocks are used
Fixes CB-628 - Scrub installation process, document artifacts of Xcode 3 support, mention no ARC
Fixed CB-628 - Scrub installation process, document artifacts of Xcode 3 support, mention no ARC
Fixes CB-684 - Not enough time for background execution of WebSQL/LocalStorage backup (when app goes to the background)
Fixes CB-766 - Update bin/debug shell script to point to Homebrew ios-sim 1.4 download Fixes CB-464 - Refactor accelerometer native code in iOS
Fixes CB-760 - Camera returns incorrect image size
Fixed warning in CDVLocation
Fixed EXCBADACCESS error in CDVAccelerometer
Fixes CB-818 - Make CDVViewController also implement initWithNibName
Fixes CB-825 - Makefile: remove direct download of Markdown and wkhtmltopdf (uses homebrew to download)
Fixes CB-328 - Cordova crashes on iOS 3.x devices
Cordova 1.8.0 Release Notes 1/13
Fixes CB-851 - guide for using url schemes in iOS
Properly querying the Andoid content DB when deleteing an image file
Switch to using stripFileProtocol in FileUtils.notifyDelete
Fix problem in Android template example getPicture
CB-808: CameraLauncher leaks bitmaps in Android
CB-837: CaptureCB - mediaFile.fullPath does not resolve to file
CB-844: Contact.find does not return urls
CB-849: Cannot search by birthday
Change 'websites' to 'urls'
Cb-858: Media record defaults to sdcard which may not be mounted
CB-860: MediaFile.getFormatData broken for Image from Capture
[CB-659] create script should work on android
[CB-659] create script for android on windows now works fully. also pulls down commons-codec jar appropriately
Make PluginResult return valid JSON so the JS side can use JSON.parse
updated create script CB 839
Fix README.md formatting to install commons-codec-1.6.jar
We should not be having a compiled version of cordova.jar in the test directory
Adding Apache Header to Test Directory
Forgot to add lifecycle/index2.html's header
Adding more Apache Headers. Not sure if this should have headers or not
Working towards Apache compliance
Adding more Apache licence headers
Accidentally committed a vim swp file
Adding header to test cordova.xml
updating the test plugins
Removing Default Android Graphics and replacing them with our own
Removing the commons-codec
Updating README telling people to copy commons-codec
Modifying generated classpath
Don't commit Eclipse preferences
Tweaked create so it fetches the commons-codec using curl
Auto detect whether we have the jar already. Also, just create the directory whether it exists or not
Changing from currentTimeMillis to nanoTime, we need precision on Android 2.3
Updating the JS and the version for tagging
dont check in node_modules peepz!
added package.json for npm install goodness
documented running npm install
comeat me lawyers
adding node_modules to gitignore
restructured geolocation plugin
Fixes for new geo stuff
axing lowercase java file
adding uppercase java file!
updating JS to latest for geolocation updates
[CB-683] Pause and resume events should route through fireDocumentEvent so we get the event object passed into the handler
[CB-683] updating JS for fix for 683
[CB-804] ADded proper cordova icon sizes for the create script
[CB-463] rewrite of accel plugin
[CB-463] added the JS updates for accel refactor
[CB-463] added accuracy checking to native accel implementation, this way getCurrentAcceleration returns fairly accurate results
removed a trailing log
[CB-463] added accuracy checking to native accel implementation, this way getCurrentAcceleration returns fairly accurate results
removed a trailing log
[CB-463] updated js and rewrote accel plugin again to support the start/stop approach. optimized. single callback used for message passing
Small spacing fixes
[CB-792] Add HTTP status code to FileTransferError
Fix calling cordova.plugin.storage.failQuery function from native code
[CB-465] First pass at accel update. Watch acceleration doesnt seem to work yet though
[CB-465] Simplified accel plugin (still based on Drews implementation) to just start/stop actions.
[CB-642] Add license headers according to apache RAT
Move org.apache.cordova.media to org.apache.cordova.capture.
Add Media API.
[CB-762] Change BlackBerry plugin from Contact to Contacts.
Prefix file:// protocol for resolveLocalFileSystemURI if not specified.
Move FileUtils from org.apache.cordova.file to org.apache.cordova.util.
[CB-465] Refactor Accelerometer code for addWatch / clearWatch.
[CB-822] Revert change to prefix file protocol for resolveLocalFileSystemURI
[CB-793] Minor formatting cleanup.
[CB-847] Recognize .MP4 as video recording extension.
[CB-793] Add HTTP status code to FileTransferError object
create new project CLI
[CB-466] Rewrite accel for WP7
CB-520 : back button handling is performed in js code and uses window.history.back()
parent path is now a string and not a FileEntry CB-665
added try/catch for backbutton handling when a page is not loaded in the webbrowser, was an exception
filepath contains the extra slash to match other devices, and passes tests that expect specific filepath string values, although cannonically the same
added output log for audio file not found
added deploy tool to install and launch on device WIP
removed duplicate mobile-spec tests, test project now redirects to tests hosted in the gh_pages branch of mobilespec
debug + emulate scripts
added usage, and parameterized device to deploy to
added command line tools to template
removed debug log
updated bare template with latest changes
Fixed threading issue in audio, + Defect [CB-602], added more info to log statements, INFO/ERROR
removed calls to resolve DNS because they take 30 seconds when no network is available and prevent deviceready
commented out unused - unminified js code
Consolidated exception handling + option parsing
update assembly info for 1.8
added platform info, for sanity
updated example,templates,tests to 1.8.0rc1
updated tests + example
[CB-643] Added license headers where appropriate.
modifications to OS checking in Makefile
CB-557 make sure Makefile works on Win & OSX
update to 1.8.0
added Apache license header
If you wish to follow or join in the development of this project, send an email to<EMAIL_ADDRESS>to subscribe to the developer mailing list. All bugs can be found on our issue tracker.
Looking for older versions of PhoneGap? Download PhoneGap 1.7.0 and earlier from Github.


Errors
Table of Contents
Client.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see Create an Invoice" has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see Update an Invoice" has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see Retrieve an Invoice by GUID" has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see Retrieve an Invoice by GUID" has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see  Retrieve Invoices Filtered by Query " has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see Retrieve an Event Token" has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see Cancel an Invoice" has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see Cancel an Invoice by GUID" has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see Create a Refund Request" has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see Update a Refund Request" has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see  Update a Refund by GUID Request " has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see  Retrieve Refunds of an Invoice " has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see Retrieve a Refund Request" has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see  Retrieve a Refund by GUID Request " has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see  Request a Refund Notification to be Resent " has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see Cancel a Refund Request" has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see  Cancel a Refund by GUID Request " has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see  Retrieve the Supported Wallets " has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see Create a Bill" has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see Retrieve a Bill" has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see Retrieve Bills by Status" has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see Update a Bill" has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see Deliver a Bill Via Email" has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see  Retrieve all the rates for a given cryptocurrency " has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see  Retrieve the rates for a cryptocurrency / fiat pair " has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see Retrieve Ledger Entries" has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see Retrieve Account Balances" has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see Invite Recipients" has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see Retrieve a Recipient" has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see  Retrieve Recipients by Status " has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see Update a Recipient" has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see Remove a Recipient" has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see  Request a Recipient Webhook to be Resent " has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see Create a Payout" has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see Retrieve a Payout" has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see  Retrieve Payouts Filtered by Query " has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see Cancel a Payout" has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see  Request a Payout Webhook to be Resent " has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see Create Payout Group</>" has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see Cancel a Payout Group</>" has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see Retrieve Settlements" has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see Retrieve a Settlement" has error "\BitPaySDK\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see  Fetch a Reconciliation Report " has error "\BitPaySDK\<a" is not a valid Fqsen. |
Bill.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see REST API Bills" has error "\BitPaySDK\Model\Bill\<a" is not a valid Fqsen. |
BillStatus.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see REST API Bills" has error "\BitPaySDK\Model\Bill\<a" is not a valid Fqsen. |
Item.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see REST API Bills" has error "\BitPaySDK\Model\Bill\<a" is not a valid Fqsen. |
Facade.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see REST API facades" has error "\BitPaySDK\Model\<a" is not a valid Fqsen. |
Buyer.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see REST API Invoices Allows merchant to pass buyer related information in the invoice object" has error "\BitPaySDK\Model\Invoice\<a" is not a valid Fqsen. |
BuyerProvidedInfo.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see REST API Invoices" has error "\BitPaySDK\Model\Invoice\<a" is not a valid Fqsen. |
Invoice.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see REST API Invoices" has error "\BitPaySDK\Model\Invoice\<a" is not a valid Fqsen. |
InvoiceStatus.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see REST API Invoices" has error "\BitPaySDK\Model\Invoice\<a" is not a valid Fqsen. |
ItemizedDetails.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see REST API Invoices" has error "\BitPaySDK\Model\Invoice\<a" is not a valid Fqsen. |
MinerFees.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see REST API Invoices" has error "\BitPaySDK\Model\Invoice\<a" is not a valid Fqsen. |
MinerFeesItem.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see REST API Invoices" has error "\BitPaySDK\Model\Invoice\<a" is not a valid Fqsen. |
Refund.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see REST API Invoices" has error "\BitPaySDK\Model\Invoice\<a" is not a valid Fqsen. |
RefundInfo.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see REST API Invoices" has error "\BitPaySDK\Model\Invoice\<a" is not a valid Fqsen. |
RefundStatus.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see REST API Invoices" has error "\BitPaySDK\Model\Invoice\<a" is not a valid Fqsen. |
RefundWebhook.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see Webhooks refunds" has error "\BitPaySDK\Model\Invoice\<a" is not a valid Fqsen. |
Shopper.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see REST API Invoices" has error "\BitPaySDK\Model\Invoice\<a" is not a valid Fqsen. |
SupportedTransactionCurrencies.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see REST API Invoices" has error "\BitPaySDK\Model\Invoice\<a" is not a valid Fqsen. |
SupportedTransactionCurrency.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see REST API Invoices" has error "\BitPaySDK\Model\Invoice\<a" is not a valid Fqsen. |
UniversalCodes.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see REST API Invoices" has error "\BitPaySDK\Model\Invoice\<a" is not a valid Fqsen. |
Buyer.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see REST API Ledgers" has error "\BitPaySDK\Model\Ledger\<a" is not a valid Fqsen. |
Ledger.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see REST API Ledgers" has error "\BitPaySDK\Model\Ledger\<a" is not a valid Fqsen. |
LedgerEntry.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see REST API Ledgers" has error "\BitPaySDK\Model\Ledger\<a" is not a valid Fqsen. |
Payout.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see REST API Payouts" has error "\BitPaySDK\Model\Payout\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see Supported ledger currency codes" has error "\BitPaySDK\Model\Payout\<a" is not a valid Fqsen. |
| ERROR | 0 | Tag "see" with body "@see Supported ledger currency codes" has error "\BitPaySDK\Model\Payout\<a" is not a valid Fqsen. |
PayoutRecipient.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see REST API Payouts" has error "\BitPaySDK\Model\Payout\<a" is not a valid Fqsen. |
PayoutRecipients.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see REST API Payouts" has error "\BitPaySDK\Model\Payout\<a" is not a valid Fqsen. |
PayoutStatus.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see REST API Payouts" has error "\BitPaySDK\Model\Payout\<a" is not a valid Fqsen. |
PayoutTransaction.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see REST API Payouts" has error "\BitPaySDK\Model\Payout\<a" is not a valid Fqsen. |
RecipientReferenceMethod.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see REST API Payouts" has error "\BitPaySDK\Model\Payout\<a" is not a valid Fqsen. |
RecipientStatus.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see REST API Payouts" has error "\BitPaySDK\Model\Payout\<a" is not a valid Fqsen. |
Rate.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see REST API Rates" has error "\BitPaySDK\Model\Rate\<a" is not a valid Fqsen. |
Rates.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see REST API Rates" has error "\BitPaySDK\Model\Rate\<a" is not a valid Fqsen. |
InvoiceData.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see Settlements" has error "\BitPaySDK\Model\Settlement\<a" is not a valid Fqsen. |
PayoutInfo.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see Settlements" has error "\BitPaySDK\Model\Settlement\<a" is not a valid Fqsen. |
RefundInfo.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see Settlements" has error "\BitPaySDK\Model\Settlement\<a" is not a valid Fqsen. |
Settlement.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see Settlements" has error "\BitPaySDK\Model\Settlement\<a" is not a valid Fqsen. |
SettlementLedgerEntry.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see Settlements" has error "\BitPaySDK\Model\Settlement\<a" is not a valid Fqsen. |
WithHoldings.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see Settlements" has error "\BitPaySDK\Model\Settlement\<a" is not a valid Fqsen. |
Currencies.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see Wallets" has error "\BitPaySDK\Model\Wallet\<a" is not a valid Fqsen. |
CurrencyQr.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see Wallets" has error "\BitPaySDK\Model\Wallet\<a" is not a valid Fqsen. |
Wallet.php
| Type | Line | Description |
|---|---|---|
| ERROR | 0 | Tag "see" with body "@see Wallets" has error "\BitPaySDK\Model\Wallet\<a" is not a valid Fqsen. |


|
Apache Mesos
|
#include <jsonify.hpp>
Public Member Functions | |
| StringWriter (std::ostream *stream) | |
| StringWriter (const StringWriter &)=delete | |
| StringWriter (StringWriter &&)=delete | |
| ~StringWriter () | |
| StringWriter & | operator= (const StringWriter &)=delete |
| StringWriter & | operator= (StringWriter &&)=delete |
| void | append (char c) |
| template<std::size_t N> | |
| void | append (const char(&value)[N]) |
| void | append (const std::string &value) |
|
inline |
|
delete |
|
delete |
|
inline |
|
inline |
|
inline |
|
inline |
|
delete |
|
delete |


Cowboy Clampers Will Be Stymied
by New Zealand First PartyCowboy Clampers Will Be Stymied
The ‘wheel clamping’ Bill that will cap clamper fees to $100 passed its third reading in Parliament today.
New Zealand First welcomes The Land Transport (Wheel Clamping) Amendment Bill to combat predatory wheel clamping behaviour in what is currently a largely unregulated business.
Cowboy clampers are:
• gouging people for sometimes more than $700,
• demanding cash, on the spot payments,
• using threats and intimidation tactics.
“We support businesses right to enforce parking policy on their premises, but this can be done without exploitative fees,” says New Zealand First Spokesperson for Consumer Affairs, Clayton Mitchell.
“One case that caught my attention was an unwell 86-year-old, West Auckland Grandmother who had her wheel clamped while she parked her car to seek urgent attention from a GP.
“When she returned to her car, the clamper appeared in person and demanded $200 cash.
“The $200 fee was revoked but only after the police were involved.
“Clamping fees need to accurately reflect the gravity of the violation.
“We believe a capped fee of $100 still is an adequate deterrent.
“New Zealand First is proud to be a part of a Coalition Government putting an end to this bottom feeder behaviour,” says Mr Mitchell.
ENDS


Documentation
Github Issues
Documentation
v1.1.0
We are constatly doing updates on the product and documentation, so please check the online version.
View Docs Online


Using GPU(s) in Chainer¶
In this section, you will learn about the following things:
- Relationship between Chainer and CuPy
- Basics of CuPy
- Single-GPU usage of Chainer
- Multi-GPU usage of model-parallel computing
- Multi-GPU usage of data-parallel computing
After reading this section, you will be able to:
- Use Chainer on a CUDA-enabled GPU
- Write model-parallel computing in Chainer
- Write data-parallel computing in Chainer
Relationship between Chainer and CuPy¶
Note
As of the release of v1.3.0, Chainer changes its GPU backend from PyCUDA to CuPy. CuPy covers all features of PyCUDA used by Chainer, though their interfaces are not compatible.
Chainer uses CuPy as its backend for GPU computation.
In particular, the cupy.ndarray
class is the GPU array implementation for Chainer.
CuPy supports a subset of features of NumPy with a compatible interface.
It enables us to write a common code for CPU and GPU.
It also supports PyCUDA-like user-defined kernel generation, which enables us to write fast implementations dedicated to GPU.
Note
The chainer.cuda
module imports many important symbols from CuPy.
For example, the cupy namespace is referred as cuda.cupy
in the Chainer code.
Note that the chainer.cuda
module can be imported even if CUDA is not installed.
Chainer uses a memory pool for GPU memory allocation.
As shown in the previous sections, Chainer constructs and destructs many arrays during learning and evaluating iterations.
It is not well suited for CUDA architecture, since memory allocation and release in CUDA (i.e. cudaMalloc
and cudaFree
functions) synchronize CPU and GPU computations, which hurts performance.
In order to avoid memory allocation and deallocation during the computation, Chainer uses CuPy’s memory pool as the standard memory allocator.
Chainer changes the default allocator of CuPy to the memory pool, so user can use functions of CuPy directly without dealing with the memory allocator.
Basics of cupy.ndarray
¶
Note
CuPy does not require explicit initialization, so cuda.init()
function is deprecated.
CuPy is a GPU array backend that implements a subset of NumPy interface.
The cupy.ndarray
class is in its core, which is a compatible GPU alternative of numpy.ndarray
.
CuPy implements many functions on cupy.ndarray
objects.
See the reference for the supported subset of NumPy API.
Understanding NumPy might help utilizing most features of CuPy.
See the NumPy documentation for learning it.
The main difference of cupy.ndarray
from numpy.ndarray
is that the content is allocated on the device memory.
The allocation takes place on the current device by default.
The current device can be changed by cupy.cuda.Device
object as follows:
with cupy.cuda.Device(1):
x_on_gpu1 = cupy.array([1, 2, 3, 4, 5])
Most operations of CuPy is done on the current device. Be careful that it causes an error to process an array on a non-current device.
Chainer provides some convenient functions to automatically switch and choose the device.
For example, the chainer.cuda.to_gpu()
function copies a numpy.ndarray
object to a specified device:
x_cpu = np.ones((5, 4, 3), dtype=np.float32)
x_gpu = cuda.to_gpu(x_cpu, device=1)
It is equivalent to the following code using CuPy:
x_cpu = np.ones((5, 4, 3), dtype=np.float32)
with cupy.cuda.Device(1):
x_gpu = cupy.array(x_cpu)
Moving a device array to the host can be done by chainer.cuda.to_cpu()
as follows:
x_cpu = cuda.to_cpu(x_gpu)
It is equivalent to the following code using CuPy:
with x_gpu.device:
x_cpu = x_gpu.get()
Note
The with statements in these codes are required to select the appropriate CUDA device.
If user uses only one device, these device switching is not needed.
chainer.cuda.to_cpu()
and chainer.cuda.to_gpu()
functions automatically switch the current device correctly.
Chainer also provides a convenient function chainer.cuda.get_device()
to select a device.
It accepts an integer, CuPy array, NumPy array, or None (indicating the current device), and returns an appropriate device object.
If the argument is a NumPy array, then a dummy device object is returned.
The dummy device object supports with statements like above which does nothing.
Here are some examples:
cuda.get_device(1).use()
x_gpu1 = cupy.empty((4, 3), dtype='f') # 'f' indicates float32
with cuda.get_device(1):
x_gpu1 = cuda.empty((4, 3), dtype='f')
with cuda.get_device(x_gpu1):
y_gpu1 = x_gpu + 1
Since it accepts NumPy arrays, we can write a function that accepts both NumPy and CuPy arrays with correct device switching:
def add1(x):
with cuda.get_device(x):
return x + 1
The compatibility of CuPy with NumPy enables us to write CPU/GPU generic code.
It can be made easy by the chainer.cuda.get_array_module()
function.
This function returns the numpy
or cupy
module based on arguments.
A CPU/GPU generic function is defined using it like follows:
# Stable implementation of log(1 + exp(x))
def softplus(x):
xp = cuda.get_array_module(x)
return xp.maximum(0, x) + xp.log1p(xp.exp(-abs(x)))
Run Neural Networks on a Single GPU¶
Single-GPU usage is very simple.
What you have to do is transferring Link
and input arrays to the GPU beforehand.
In this subsection, the code is based on our first MNIST example in this tutorial.
A Link
object can be transferred to the specified GPU using the to_gpu()
method.
This time, we make the number of input, hidden, and output units configurable.
The to_gpu()
method also accepts a device ID like model.to_gpu(0)
.
In this case, the link object is transferred to the appropriate GPU device.
The current device is used by default.
If we use chainer.training.Trainer
, what we have to do is just let the updater know the device ID to send each mini-batch.
updater = training.StandardUpdater(train_iter, optimizer, device=0)
trainer = training.Trainer(updater, (20, 'epoch'), out='result')
We also have to specify the device ID for an evaluator extension as well.
trainer.extend(extensions.Evaluator(test_iter, model, device=0))
When we write down the training loop by hand, we have to transfer each mini-batch to the GPU manually:
model.to_gpu()
batchsize = 100
datasize = len(x_train)
for epoch in range(20):
print('epoch %d' % epoch)
indexes = np.random.permutation(datasize)
for i in range(0, datasize, batchsize):
x = Variable(cuda.to_gpu(x_train[indexes[i : i + batchsize]]))
t = Variable(cuda.to_gpu(y_train[indexes[i : i + batchsize]]))
optimizer.update(model, x, t)
Model-parallel Computation on Multiple GPUs¶
Parallelization of machine learning is roughly classified into two types called “model-parallel” and “data-parallel”. Model-parallel means parallelizations of the computations inside the model. In contrast, data-parallel means parallelizations using data sharding. In this subsection, we show how to use the model-parallel approach on multiple GPUs in Chainer.
Recall the MNIST example. Now suppose that we want to modify this example by expanding the network to 6 layers with 2000 units each using two GPUs. In order to make multi-GPU computation efficient, we only make the two GPUs communicate at the third and sixth layer. The overall architecture looks like the following diagram:
(GPU0) input --+--> l1 --> l2 --> l3 --+--> l4 --> l5 --> l6 --+--> output
| | |
(GPU1) +--> l1 --> l2 --> l3 --+--> l4 --> l5 --> l6 --+
We can use the above MLP chain as following diagram:
(GPU0) input --+--> mlp1 --+--> mlp2 --+--> output
| | |
(GPU1) +--> mlp1 --+--> mlp2 --+
Let’s write a link for the whole network.
class ParallelMLP(Chain):
def __init__(self):
super(ParallelMLP, self).__init__(
# the input size, 784, is inferred
mlp1_gpu0=MLP(1000, 2000).to_gpu(0),
mlp1_gpu1=MLP(1000, 2000).to_gpu(1),
# the input size, 2000, is inferred
mlp2_gpu0=MLP(1000, 10).to_gpu(0),
mlp2_gpu1=MLP(1000, 10).to_gpu(1),
)
def __call__(self, x):
# assume x is on GPU 0
z0 = self.mlp1_gpu0(x)
z1 = self.mlp1_gpu1(F.copy(x, 1))
# sync
h0 = F.relu(z0 + F.copy(z1, 0))
h1 = F.relu(z1 + F.copy(z0, 1))
y0 = self.mlp2_gpu0(h0)
y1 = self.mlp2_gpu1(h1)
# sync
y = y0 + F.copy(y1, 0)
return y # output is on GPU0
Recall that the Link.to_gpu()
method returns the link itself.
The copy()
function copies an input variable to specified GPU device and returns a new variable on the device.
The copy supports backprop, which just reversely transfers an output gradient to the input device.
Note
Above code is not parallelized on CPU, but is parallelized on GPU. This is because all the functions in the above code run asynchronously to the host CPU.
An almost identical example code can be found at examples/mnist/train_mnist_model_parallel.py.
Data-parallel Computation on Multiple GPUs with Trainer¶
Data-parallel computation is another strategy to parallelize online processing. In the context of neural networks, it means that a different device does computation on a different subset of the input data. In this subsection, we review the way to achieve data-parallel learning on two GPUs.
Suppose again our task is the MNIST example. This time we want to directly parallelize the three-layer network. The most simple form of data-parallelization is parallelizing the gradient computation for a distinct set of data. First, define a model and optimizer instances:
model = L.Classifier(MLP(1000, 10)) # the input size, 784, is inferred
optimizer = optimizers.SGD()
optimizer.setup(model)
Recall that the MLP
link implements the multi-layer perceptron, and the Classifier
link wraps it to provide a classifier interface.
We used StandardUpdater
in the previous example.
In order to enable data-parallel computation with multiple GPUs, we only have to replace it with ParallelUpdater
.
updater = training.ParallelUpdater(train_iter, optimizer,
devices={'main': 0, 'second': 1})
The devices
option specifies which devices to use in data-parallel learning.
The device with name 'main'
is used as the main device.
The original model is sent to this device, so the optimization runs on the main device.
In the above example, the model is also cloned and sent to GPU 1.
Half of each mini-batch is fed to this cloned model.
After every backward computation, the gradient is accumulated into the main device, the parameter update runs on it, and then the updated parameters are sent to GPU 1 again.
See also the example code in examples/mnist/train_mnist_data_parallel.py.
Data-parallel Computation on Multiple GPUs without Trainer¶
We here introduce a way to write data-parallel computation without the help of Trainer
.
Most users can skip this section.
If you are interested in how to write a data-parallel computation by yourself, this section should be informative.
It is also helpful to, e.g., customize the ParallelUpdater
class.
We again start from the MNIST example.
At this time, we use a suffix like _0
and _1
to distinguish objects on each device.
First, we define a model.
model_0 = L.Classifier(MLP(1000, 10)) # the input size, 784, is inferred
We want to make two copies of this instance on different GPUs.
The Link.to_gpu()
method runs in place, so we cannot use it to make a copy.
In order to make a copy, we can use Link.copy()
method.
import copy
model_1 = copy.deepcopy(model_0)
model_0.to_gpu(0)
model_1.to_gpu(1)
The Link.copy()
method copies the link into another instance.
It just copies the link hierarchy, and does not copy the arrays it holds.
Then, set up an optimizer:
optimizer = optimizers.SGD()
optimizer.setup(model_0)
Here we use the first copy of the model as the master model.
Before its update, gradients of model_1
must be aggregated to those of model_0
.
Then, we can write a data-parallel learning loop as follows:
batchsize = 100
datasize = len(x_train)
for epoch in range(20):
print('epoch %d' % epoch)
indexes = np.random.permutation(datasize)
for i in range(0, datasize, batchsize):
x_batch = x_train[indexes[i : i + batchsize]]
y_batch = y_train[indexes[i : i + batchsize]]
x0 = Variable(cuda.to_gpu(x_batch[:batchsize//2], 0))
t0 = Variable(cuda.to_gpu(y_batch[:batchsize//2], 0))
x1 = Variable(cuda.to_gpu(x_batch[batchsize//2:], 1))
t1 = Variable(cuda.to_gpu(y_batch[batchsize//2:], 1))
loss_0 = model_0(x0, t0)
loss_1 = model_1(x1, t1)
model_0.cleargrads()
model_1.cleargrads()
loss_0.backward()
loss_1.backward()
model_0.addgrads(model_1)
optimizer.update()
model_1.copyparams(model_0)
Do not forget to clear the gradients of both model copies!
One half of the mini-batch is forwarded to GPU 0, the other half to GPU 1.
Then the gradients are accumulated by the Link.addgrads()
method.
This method adds the gradients of a given link to those of the self.
After the gradients are prepared, we can update the optimizer in usual way.
Note that the update only modifies the parameters of model_0
.
So we must manually copy them to model_1
using Link.copyparams()
method.
Note
If the batch size used in one model remain the same, the scale of the gradient
is roughly proportional to the number of models, when we aggregate
gradients from all models by chainer.Link.addgrads()
. So you need to adjust the batch size
and/or learning rate of the optimizer accordingly.
Now you can use Chainer with GPUs.
All examples in the examples
directory support GPU computation, so please refer to them if you want to know more practices on using GPUs.
In the next section, we will show how to define a differentiable (i.e. backpropable) function on Variable objects.
We will also show there how to write a simple (elementwise) CUDA kernel using Chainer’s CUDA utilities.