Dave Rodriguez
Director of Front-End Development at Hanson Inc.
@dave_rodriguez
Thanks to the Toledo Web Professionals for letting me speak tonight
Thanks to John Ewing for setting this up, and to everyone at Hanson who contributed material, helped
with the presentation, or sat and listened to one of my rehearsals
From the Toledo area
Developing for web 17 years
Except for 4 years at college in New York State, I've been in Northwest Ohio and
Southeast Michigan my entire life
Been with Hanson for 8 years
Been an interactive designer, a Flash developer, and most recently I've focused
on JavaScript development, responsive design, and improving our front-end processes
Welcome to the next frontier
Photo: x-ray_delta_one
Never been a more complex time to be in web development
The term "front end developer" didn't exist a few years ago
many of us probably started with a title like "engineer", maybe "designer" or maybe even "webmaster"
Front-end used to just be about knowing HTML and CSS, and maybe a little bit of JavaScript
These days, HTML and CSS have gotten more powerful and correspondingly more complex
Web development is also starting to look more like programming
Beware of killer robots
Photo: x-ray_delta_one
the web is getting more powerful (natively). we're doing things in the browser we wouldn't
have dreamed of 10 years ago.
things are moving very fast
feels like you could spend 40 hours a week just keeping up
It feels like there are killer robots around every turn
Don’t panic!
Photo: x-ray_delta_one
I'm here to tell you not to panic!
Your skills are as valuable as ever
You don't have to know everything about every technology you plan to use
Which is good, because there's no way anyone could
You don't have to build everything, because there are giant shoulders you can stand on
the people that invented space shuttles and killer robots didn't invent everything they used
They started from a foundation and built it up a little higher as they went
That's the new world of front-end development
Find some solid tools to build on, use them and customize them
Embrace the command line
You don't have to be a programmer to be a successful front-end developer
You should be comfortable using the command line and editing config files
If your command line skills are rusty, look for a tutorial to get up to speed. I'll post some links when I post the slides.
http://wiseheartdesign.com/articles/2010/11/12/the-designers-guide-to-the-osx-command-prompt/
http://webdesign.tutsplus.com/articles/a-designers-introduction-to-the-command-line--webdesign-6358
Part 1: Harness the power of robots
Photo: manosart
Some day, the robots will rise up and kill all humans
Until then, don't waste time
Use robot power to help you work faster by automating common tasks
When I say robots, I mean scripts. Utility programs that do one thing very well. You can
combine these in surprising and powerful ways.
downloading libraries and assets
generate boilerplate structure and markup
compiling things
test
optimize
Git
Git is a source control system
It's distributed, which makes sharing and merging code from multiple contributors pretty easy
How many people have a Github account?
If you do, you're in good company
Most of the libraries you'll be using are stored in Git repos. Github is the de facto standard
for publishing and accessing JavaScript code
If you don't already have it, get it here: [http://git-scm.com/downloads](), and get yourself
a Github account while you're at it.
Node.js
[Node.js](http://nodejs.org) is a standalone Javascript runtime based on Google’s V8 engine.
It brings JavaScript out of the browser and makes it a platform for all kinds of development.
NPM
NPM is a package manager for node. A package manager is a client for managing code libraries.
It provides a way to search for libraries and handles downloading, installing, and managing
dependencies and versions of that code.
A note for Windows users
Photo: x-ray_delta_one
The community is very Mac/Unix centric
Lots of the libraries and code examples you'll see assume you have access to unix and Some of the
tools. It's little things, like cp instead of copy, ls instead of dir.
It's 100% possible to use all these tools on Windows.
Expect occasional frustration, but it's generally not a problem.
Git installs some basic Unix command line utilities like cp, ls, touch
If you need to follow examples it's probably easier to install GNUWin32 or Cygwin than to dig around
for Windows equivalents.
Using the NPM registry
> npm init
> npm search libraryName
> npm install libraryName --save
> npm install -g grunt-cli
From here on out you'll see a lot of commands scattered through the presentation.
As I said, you can search NPM from the command line, or you can also use the site at npmjs.org.
If you get involved with the community, you'll see exciting new projects announced on Twitter
and different mailing lists and blogs. Most of these are in NPM, or in Bower which we'll see in a bit.
(Fragment) It's important to note that NPM installs packages to the current folder. It assumes
you want to use the package on a per-project basis. You can use the
-g
(global) flag to install tools so you can access them
from anywhere. This is the case with lots of the libraries we'll install today.
Exploring the terrain
Finding and installing code libraries
Like searching for water on mars?
What do you do now?
Open web browser
Google name of library
Browse to project home page or Github
Download a ZIP file
Unzip project files
Grab the file(s) you need and copy to your lib directory
Insert script reference in your project
Repeat 12 more times
Solution: Bower
> npm install -g bower
“Bower is a package manager for the web. It offers a generic, unopinionated solution to the problem of
front-end package management.”
Bower can be used to add code libraries to your site
Everything you want is already in bower
Get it from NPM (fragment)
The Bower Way
> bower init
> bower search library-name
> bower install library1 library2 --save
Photo: x-ray_delta_one
We saw how to install packages the hard way. Here's the bower way.
Bower init sets up a little file in the root of your project called bower.json, so you can
which keeps a list of what you have installed
Bower search works the same way as NPM search. You can also search the repo at bower.io. A lot of
times you don't even need to search. Popular libraries are registered with Bower using the same
name you already know. If you guess the project name you'll be right a lot of the time.
Now you install libraries. You can install more than one at a time, space separated.
That --save tells Bower to write your packages to the bower.json file. That's important later.
The old process had 8 steps...times 12. Here we've installed a bunch of libraries with
three commands. Let's call those steps 1 through 3.
Step 4 is insert your script references. Bower puts everything it downloads into a folder
called bower_components by default. This may or may not be useful to you. You can either reference
files straight from there, or you can move them wherever you want. Then you'd insert script tags,
stylesheet references, or whatever's appropriate for this particular library.
Later on when we look at Grunt, we'll look at a way to simplify this process so you only have
to insert one reference for all your Bower dependencies.
That was step 4. Step 5 is take a nap. In a space suit. Cause you're done.
In space, no one can hear you schlep.
Photo: x-ray_delta_one
Who's familiar with the verb "to schlep"?
It's an awesome Yiddish word, and it means "to carry something heavy or awkward".
A lot of everyday tasks during development are just schlepping
Think about it. You're taking schlepping some LESS or SASS to the tool that makes it CSS.
You're taking some JavaScript to the tool that lints it, or minifies it
When those things are done, you're schlepping the output someplace
You don't need to be doing those things. What do you need, ulcers? That's robot work.
Some things are schlepping that you might not even consider
How about adding prefixes to styles in a stylesheet? Why should you be adding -webkit
and -moz to everything when we have perfectly good robots
What about reloading your web browser? Your cycle goes like this: edit file. Save. Alt-tab.
F5. See if it worked. That's a lot of needless schlepping.
A task runner can:
Compile
Transpile
Concatenate
Optimize
Copy
Composite
Web Serve
Live Reload
Grunt or Gulp?
We'll talk about two task Runners today, Grunt and Gulp
Both live in NPM
Both have similar capabilities
Both Need instruction files and plugins to help them help you
Grunt has gruntfile.js. Gulp has gulpfile.js.
Gruntfiles provide configuration in the form of deep objects. The action happens inside the
plugins.
Gulpfiles contain little procedural programs that chain together the output of many single-purpose
plugins.
Which one should you choose? Doesn't matter. Different approaches but both are good.
Grunt is older and has a larger ecosystem, but Gulp is catching up fast
Gulp requires a little more knowledge of programming, but plugins are well documented so you'll
catch on fast.
Sharing the wealth
> npm install
> bower install
Everything's better when you share
Remember the --save and --save-dev flags?
There's a debate about whether you should check NPM and Bower libraries into source control.
It's a lot of files, and it's not strictly necessary.
As long as you're using `--save` or `--save-dev`, all your dependencies get written to your
package.json and bower.json files.
The next person that comes along just has to run these two commands. npm install to install Grunt plugins,
and Bower install to install code libraries.
Theoretically, GitHub could be down or something and the next developer would be very sad. I guess that's
an argument in favor of checking everything in, but it's not super likely.
Robots in action
Photo: x-ray_delta_one
Grunt connect
Change text - watch - live reload
Compile LESS
Auto prefixer
There's also a Grunt plugin, [grunt-bower-concat](https://www.npmjs.org/package/grunt-bower-concat) that can take all your
Bower dependencies and concatenate them into a single file so you don't need to add a reference for every new library you add
to your project!
Part 2: Learn to pilot spacecraft
Photo: x-ray_delta_one
What's better than saving a bunch of time?
Saving a bunch of time and ending up with clean, maintainable, well-documented code
Take code structure to the next level
dependency management
separation of concerns
documentation
Yeoman
> npm install -g yo
Yeoman is a project scaffolding system. It can give you a fresh, clean project structure for many types
of apps
You should not need to rearchitect every project. that's robot work.
You can find Yeoman in NPM
To use Yeoman, you install various generators.
A generator is a template for creating an application, like a Bootstrap 3 app or an AngularJS app.
There are more than 600 generators available: http://yeoman.io/community-generators.html
Demo project setup
And let's say you don't like what you find.
Fork it, or make your own!
Creating generators is pretty easy. I've published three Yeoman generators so far.
Most Yeoman generators have Bower and Grunt integration already built in!
Assembling the fleet
Dependency management
Photo: x-ray_delta_one
I used to be an ActionScript developer
ActionScript is JavaScript's more respectable cousin
Had a lot of things that made it feel like a serious programming language, classes and inheritance and structure
And above all, great, simple dependency management
You never had to worry where your classes were coming from or whether they would leave you stranded at the bus stop in the bad part of town
So what does JavaScript have? Script tags
- Script tags are not a dependency management strategy
- You, the developer, are 100% responsible for enforcing that all your dependencies are loaded, at the right time, in the right order
- This encourages some people to put all their JavaScript into one file
- Technically it works, but that's bad for business
- Try making something like that work with half a dozen developers pulling late nights
- Discrete classes = looser coupling, better maintainability and encapsulation
- The more classes you have, the more likely you are to run into out-of-order dependencies
What’s better than script tags?
Anything, really!
Solution: Require.js
> bower install requirejs
Require.js is a JavaScript file and module loader.
Require.js helps you manage dependencies so you don’t have to worry about the order in which scripts
are loaded
Has a powerful build process so you can deploy pre-built versions of your script to production (Browserify also has this).
You can install it with Bower (fragment)
require() and define()
Require.js has two basic methods, require() and define().
`require()` loads scripts asynchronously based on a slash-separated path, like this:
```require("APP/controllers/main");```
`define()` exports Javascript modules in such a way that require can keep track of them. Require.js
keeps a
registry of modules it’s already loaded, so if you need a class more than once it isn’t loaded multiple
times.
What about non-AMD libraries?
No problem. Require.js’s config file allows you to shim non-AMD Javascript. Shimming looks like this:
Now I can require('lib/jqueryui') in my classes, and it will added the AMD registry. Require will also make sure
all dependencies are loaded when this one is requested.
```
shim: {
'lib/jqueryui': {
deps: ['lib/jquery']
}
}
```
Building and deploying require.js
The Require.js optimizer combines related scripts together into build layers and minifies them with
UglifyJS or Closure Compiler.
It scans your require() statements, loads all the dependencies and inlines them into the top of the
file. Then it minifies everything and outputs it to a directory of your choosing (we prefer
js-built).
This makes it trivial to select the /content/js directory (for dev) or /content/js-built (for
staging and production). Nothing else needs to change in your code or your config!
Loader plugins
Require.js also supports loader plugins to support dependencies that are not plain JS files
Examples include text files, JSON, CSS, images, strings for i18n
Full list of plugins on the require.js wiki [https://github.com/jrburke/Require.js/wiki/Plugins]()
Speed improvements
Building your Require app before deploying it has huge benefits!
Integrating with a build process
The Require.js optimizer can be run as a build task with node or with Rhino for Java. Node is much,
much faster.
On one project, the Require.js build takes ~60 seconds locally with Node, but over 10 minutes(!!) when
run as part of the build using Rhino.
To improve performance, set skipDirOptimize: true, and minify your third-party JS libraries some other
way.
Avoid orbital debris
Client side templating
The old way
for (var i in products) {
tmpl = '';
tmpl += '';
tmpl += ' ';
}
ಠ_ಠ
Solution: Handlebars.js
Handlebars is a templating engine
Web services are a giant step forward in terms of data portability and reusability
A big part of that is having lightweight back ends and powerful front ends
We're building interfaces on the client side
In the past, we did this by compositing strings.
The Handlebars way
{{#each Products}}
{{/each}}
ʘ‿ʘ
You can put this in a hidden script tag (with a type of x-handlebars-template)
But you should put it in an external file and load it however you want
Require.js has a loader plugin that will load and parse Handlebars for you
Binding data
var myTemplate = Handlebars.compile(tmpl);
var modelObject = {
Name: 'Berkshire Canterbury Black',
ProductLine: 'Berkshire',
Category: 'Roofing',
ColorFamily: 'Black'
ProductID: 'RF106'
};
var output = myTemplate(modelObject);
here's an example of how you would bind data to a Handlebars template
we've already loaded the string in somewhere
We ask Handlebars to compile the string into a template. What this does it make it a function, which takes any JavaScript object and returns HTML
Now with more logic!
Loops!
Partials!
Conditionals!
Custom helpers!
Owens Corning Design EyeQ®
Powerful spacecraft require instructions
Photo: x-ray_delta_one
reinforce notion that you need to comment things
why comments
multiple developers
you in six months
JSDoc
/**
* @name JSDoc
* @desc Tool for generating HTML docs
* from structured JavaScript comments
*/
# About JSDoc
- JSDoc ([http://usejsdoc.org/]()) is a tool for generating HTML documentation from structured JavaScript comments
- JSDoc 3.3 runs in Node.js (or Mozilla Rhino) and can be installed with npm
```npm install -g jsdoc```
- Once installed, navigate to where your JS files are located in a terminal and run this command:
```jsdoc -r .```
http://blog.fusioncharts.com/2013/12/jsdoc-vs-yuidoc-vs-doxx-vs-docco-choosing-a-javascript-documentation-generator/
JSDoc tags
/**
* @constructor
* @alias APP.ui.configurator.VizProduct
* @extends APP.ui.configurator.VizItem
* @param {jQuery} target
* @param {Object} productData
* @classdesc A component of a design, such as a
* shelf, basket or upright. VizProducts can be
* manipulated and resized by users and can have
* rules applied to them.
*/
- Syntax is very similar to Javadoc.
Any comment beginning with /** is interpreted as a JSDoc comment.
// not picked up by JSdoc
/* not picked up by JSdoc */
Don't put everything in your JSdoc
You can add meaning with tags
Adding JSdocs to your code will force you to think more about the code you're writing
Write code like you're writing an API... because you are
There are lots of ways to document common patterns.
See the tag dictionary usejsdoc.org
JSDoc Default Template
Let's look at that default template
Is that ugly or what?
The information about classes is good
But it's severely lacking in navigation and organization
Use DocStrap instead
> npm install ink-docstrap
DocStrap Template
Fortunately we have an alternative
JSDoc supports publishing templates
There aren't many, but there is a very good one called Docstrap
It's in npm
npm install ink-docstrap
Includes a nice pulldown top menu, search, and a fixed navigation bar in every class and module
Spend less time doing robot work
Photo: x-ray_delta_one
what do we hope you've learned
ways to save time
a little about some of the common tools that are out there
motivation
solutions to common problems
Spend more time exploring
You’ll find some pretty amazing things!
Photo: x-ray_delta_one
Use tools and frameworks
Build upon what others have done
Contribute back when you can


Your version of PokeRadar is outdated. Please update now. This pop up does not appear on newer versions!


DatabaseTestTrait
DatabaseTestTrait
Provides functionality for refreshing/seeding the database during testing.
Tags
Table of Contents
Properties
- $doneMigration : bool
- Is db migration done once or more than once?
- $doneSeed : bool
- Is seeding done once or more than once?
Methods
- dontSeeInDatabase() : mixed
- Asserts that records that match the conditions in $where do not exist in the database.
- grabFromDatabase() : bool
- Fetches a single column from a database row with criteria matching $where.
- hasInDatabase() : bool
- Inserts a row into to the database. This row will be removed after the test has run.
- loadBuilder() : BaseBuilder
- Loads the Builder class appropriate for the current database.
- loadDependencies() : mixed
- Load any database test dependencies.
- resetMigrationSeedCount() : mixed
- Reset $doneMigration and $doneSeed
- seed() : mixed
- Seeds that database with a specific seeder.
- seeInDatabase() : mixed
- Asserts that records that match the conditions in $where DO exist in the database.
- seeNumRecords() : mixed
- Asserts that the number of rows in the database that match $where is equal to $expected.
- clearInsertCache() : mixed
- Removes any rows inserted via $this->hasInDatabase()
- disableDBDebug() : void
- Sets $DBDebug to false.
- enableDBDebug() : void
- Sets $DBDebug to true.
- migrateDatabase() : mixed
- Run migrations as defined by the class
- regressDatabase() : mixed
- Regress migrations as defined by the class
- runSeeds() : mixed
- Run seeds as defined by the class
- setUpDatabase() : mixed
- Runs the trait set up methods.
- setUpMigrate() : mixed
- Migrate on setUp
- setUpSeed() : mixed
- Seed on setUp
- tearDownDatabase() : mixed
- Runs the trait set up methods.
Properties
$doneMigration
Is db migration done once or more than once?
private
static bool
$doneMigration
= false
$doneSeed
Is seeding done once or more than once?
private
static bool
$doneSeed
= false
Methods
dontSeeInDatabase()
Asserts that records that match the conditions in $where do not exist in the database.
public
dontSeeInDatabase(string $table, array<string|int, mixed> $where) : mixed
Parameters
- $table : string
- $where : array<string|int, mixed>
grabFromDatabase()
Fetches a single column from a database row with criteria matching $where.
public
grabFromDatabase(string $table, string $column, array<string|int, mixed> $where) : bool
Parameters
- $table : string
- $column : string
- $where : array<string|int, mixed>
Tags
Return values
boolhasInDatabase()
Inserts a row into to the database. This row will be removed after the test has run.
public
hasInDatabase(string $table, array<string|int, mixed> $data) : bool
Parameters
- $table : string
- $data : array<string|int, mixed>
Return values
boolloadBuilder()
Loads the Builder class appropriate for the current database.
public
loadBuilder(string $tableName) : BaseBuilder
Parameters
- $tableName : string
Return values
BaseBuilderloadDependencies()
Load any database test dependencies.
public
loadDependencies() : mixed
resetMigrationSeedCount()
Reset $doneMigration and $doneSeed
public
static resetMigrationSeedCount() : mixed
Tags
seed()
Seeds that database with a specific seeder.
public
seed(string $name) : mixed
Parameters
- $name : string
seeInDatabase()
Asserts that records that match the conditions in $where DO exist in the database.
public
seeInDatabase(string $table, array<string|int, mixed> $where) : mixed
Parameters
- $table : string
- $where : array<string|int, mixed>
Tags
seeNumRecords()
Asserts that the number of rows in the database that match $where is equal to $expected.
public
seeNumRecords(int $expected, string $table, array<string|int, mixed> $where) : mixed
Parameters
- $expected : int
- $table : string
- $where : array<string|int, mixed>
Tags
clearInsertCache()
Removes any rows inserted via $this->hasInDatabase()
protected
clearInsertCache() : mixed
disableDBDebug()
Sets $DBDebug to false.
protected
disableDBDebug() : void
WARNING: this value will persist! take care to roll it back.
enableDBDebug()
Sets $DBDebug to true.
protected
enableDBDebug() : void
migrateDatabase()
Run migrations as defined by the class
protected
migrateDatabase() : mixed
regressDatabase()
Regress migrations as defined by the class
protected
regressDatabase() : mixed
runSeeds()
Run seeds as defined by the class
protected
runSeeds() : mixed
setUpDatabase()
Runs the trait set up methods.
protected
setUpDatabase() : mixed
setUpMigrate()
Migrate on setUp
protected
setUpMigrate() : mixed
setUpSeed()
Seed on setUp
protected
setUpSeed() : mixed
tearDownDatabase()
Runs the trait set up methods.
protected
tearDownDatabase() : mixed


horizontal items at start: h-item-start
horizontal items at end: h-item-end
horizontal items at center: h-item-center
horizontal items with space around: h-item-space-a
horizontal items with space between: h-item-space-b
vertical items at start: v-item-start
vertical items at end: v-item-end
vertical items at center: v-item-center
vertical items stretched: v-item-stretched
vertical items at baseline: v-item-baseline
vertical content at start: v-content-start
vertical content at end: v-content-end
vertical content at center: v-content-center
vertical content with space around: v-content-space-a
vertical content with space between: v-content-space-b
vertical content stretched: v-content-stretch


USD/INR fails to recover beyond 10-day SMA amid cautious optimism in Asia
by Anil Panchal- USD/INR remains under pressure while also respecting the pullback from near-term key SMA.
- Asian equities mark guarded gains amid mixed trade headlines.
- Second-tier US data can entertain momentum traders while US-China headlines could keep markets busy.
Following its failure to provide a daily closing beyond 10-day SMA, USD/INR drops to 71.66 while heading into the European open on Monday.
The quote seems to have been witnessing downside pressure from the cautious optimism surrounding the Asian markets. The reason could be trade positive comments from the United States’ (US) President Donald Trump and pro-Democracy candidates leading in Hong Kong’s early election results. Also, China's recently announced penalties for intellectual property rights (IPR) theft improves Beijing's impression while talking trade with the US.
Even so, Reuters’ story that officials from the US and China doubt phase two of the trade talks considering uncertainty surrounding the initial negotiations weigh on the market’s risk tone. It should also be noted that the present Hong Kong government might not respect the victory of the latest protesters, which in turn could push the Trump administration to move forward in their Hong Kong Bill and escalate political tension with China.
That said, the equity markets in Asia, as indicates by MSCI’s index of Asia Pacific shares (ex-Japan), seesaw around 0.75% gains while Japan’s NIKKEI marks near to 0.70% as profits. Further, India’s BSE SENSEX is also on the positive side surrounding 40,600 while 10-year yields of the US and Indian government bonds seesaw around 1.77% and 6.48% respectively.
Looking forward, investors have little data/events scheduled for publishing on the economic calendar while the US Chicago Fed National Activity Index for October and Dallas Fed Manufacturing Business Index for November can please momentum traders afterward. Forecasts suggest a mild recovery in the Chicago figure to confront likely further contraction in the Dallas Fed reading.
Technical Analysis
Not only the 10-day Simple Moving Average (SMA) level of 71.83 but a week-long falling trend line around 72.00 could also keep prices under check. On the contrary, sellers targeting 71.00 will look for entry below 21-day SMA level of 71.38.
additional important levels
| Overview | |
|---|---|
| Today last price | 71.6618 |
| Today Daily Change | -0.1235 |
| Today Daily Change % | -0.17% |
| Today daily open | 71.7853 |
| Trends | |
|---|---|
| Daily SMA20 | 71.3736 |
| Daily SMA50 | 71.1932 |
| Daily SMA100 | 70.812 |
| Daily SMA200 | 70.2239 |
| Levels | |
|---|---|
| Previous Daily High | 71.9525 |
| Previous Daily Low | 71.646 |
| Previous Weekly High | 72.18 |
| Previous Weekly Low | 71.5715 |
| Previous Monthly High | 71.79 |
| Previous Monthly Low | 70.6425 |
| Daily Fibonacci 38.2% | 71.8354 |
| Daily Fibonacci 61.8% | 71.7631 |
| Daily Pivot Point S1 | 71.6367 |
| Daily Pivot Point S2 | 71.4881 |
| Daily Pivot Point S3 | 71.3302 |
| Daily Pivot Point R1 | 71.9432 |
| Daily Pivot Point R2 | 72.1011 |
| Daily Pivot Point R3 | 72.2497 |


The Gzip Module allows to compress selected files using the GZIP format.
Do the following steps for compressing a file:
The following screenshot shows selecting a file using the pop-up menu:
The following screenshot shows selecting a file, and initiate compressing by using the main menu Tools|Gzip:
The following screenshot shows the dialog, asking if you want to compress the selected file:
The following screenshot shows the dialog, asking if you want to delete the original file:


{% extends "base.html" %} {% block content %}
I was born in the Dominican Republic. I grew up in Boston, Ma. My greatest dream is to give back as much as I can! Help, support, love those who are genuine and honest. My family lives in the Dominican Republic.


Git Setup¶
If you want to easily stay up-to-date with the latest version of Mysterious Messenger without disturbing your existing code, setting up a fork of the Mysterious Messenger repository will allow you to easily merge updates onto your existing code.
What you need:
A GitHub account (https://github.com/)
Git and Bash (http://opensourcerer.diy.org/challenge/3)
A more in-depth guide on installing Git Bash for Windows: https://www.stanleyulili.com/git/how-to-install-git-bash-on-windows/
Instructions¶
First, go to https://github.com/shawna-p/mysterious-messenger and sign into GitHub.
In the top-right corner of the page, click Fork.
Open Git Bash (Windows) or Terminal (Mac)
Change the current directory to the one where you want the cloned project to be. You can type
ls
(lowercaseLS
) to see a list of directories available to you, andcd Documents
to change to the Documents folder, for example.Type
git clone https://github.com/YOUR-USERNAME/mysterious-messenger
whereYOUR-USERNAME
is your GitHub username where you forked the repository. Press Enter.
You should now have a local copy of the mysterious-messenger repository. Next, you’ll configure it to get the most recent update.
Navigate in Git Bash/Terminal to the new directory where you cloned the repository. If you still have Git Bash/Terminal open, you should be able to type
cd mysterious-messenger
to open it.Type
git remote -v
and press Enter. You should see
$ git remote -v
> origin https://github.com/YOUR-USERNAME/mysterious-messenger.git (fetch)
> origin https://github.com/YOUR-USERNAME/mysterious-messenger.git (push)
Type
git remote add upstream https://github.com/shawna-p/mysterious-messenger.git
and press Enter.Type
git remote -v
and press Enter. It should now look like:
$ git remote -v
> origin https://github.com/YOUR-USERNAME/mysterious-messenger.git (fetch)
> origin https://github.com/YOUR-USERNAME/mysterious-messenger.git (push)
> upstream https://github.com/shawna-p/mysterious-messenger.git (fetch)
> upstream https://github.com/shawna-p/mysterious-messenger.git (push)
Now you should make sure you get the most recent released version, which is currently v3.3.0
Type
git checkout v3.3.0
and press EnterNext, type
git merge tags/v3.3.0
and press Enter.
Tip
If you get an error at this point like:
error: pathspec 'v3.3.0' did not match any file(s) known to git.
Then try typing git fetch --all --tags
and hit Enter to fetch updates from the Mysterious Messenger repository. Then you can try again with git checkout v3.3.0
and git merge tags/v3.3.0
.
You should now have v3.3.0 of Mysterious Messenger. In the future, you can use git checkout v3.3.0
and git merge tags/v3.3.0
with future version numbers to update to the latest version of Mysterious Messenger.
Further resources¶
How to fork a repo https://docs.github.com/en/github/getting-started-with-github/fork-a-repo
Configuring a remote for a fork https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/configuring-a-remote-for-a-fork


DART is the Digital Archivist's Routing Tool for packaging and sending data. It produces BagIt files and uploads them to any S3-compliant API.
Version
{{ version }}
App Location
{{ appPath }}
Data Location
{{ userDataPath }}
This is open source software produced and maintained by the Academic Preservation Trust on GitHub. DART's plugin architecture allows developers to add packaging formats (tar, rar, zip, etc.) and network protocols (ftp, sftp, etc.).


Penwortham Priory Academy looks to cut the school day because of traffic problems in the area
by Catherine MusgroveA Penwortham Academy is looking to cut the school day short in order to relieve traffic in the area.
The headteacher and governors at Penwortham Priory Academy in Crow Hills Road have launched a consultation with parents over the plans to finish at 3.10pm rather than 3.20pm from January 6.
To accommodate the change, break and/or lunch will be shortened by 10 minutes. There will be no change to the beginning of the day or timings of lessons.
A letter to parents states: “The need for change comes via our consultation with the Headteacher and Governors at Penwortham County Primary School (PCP) and our shared desire to alleviate the parking and traffic congestion at the top of Crow Hills Road at the end of the school day.
“Finishing at 3.10pm rather than 3.20pm will improve the health and safety situation for pupils at both schools, with our school buses and most vehicles being clear from Crow Hills Road before the parents of PCP arrive to pick up their sons and daughters.”
The letter also states that the school’s Learning Centre will be made available for any pupil who needs to stay in school until 3.20pm.
The school said the move has not come about after any specific incident, and is “part of an ongoing review of good practice.”
Parents have until December 5 to share their views.
One parent, who wished to remain anonymous said: “I think it’s probably a good idea. At the moment it’s bedlam. You can’t park up on the school site anymore because of new gates, so you have to park on the road.”
Penwortham Councillor David Howarth, who lives near to Penwortham Priory Academy, said: “I’m more than happy for them to give it a trial and see what happens.
Quite a lot of parents turn up early and sit with their engines running. Anything that helps ease this is positive.”


Post, search or inquire about other projects with soil needs near you.
Reduce costs, time, logistics and environmental impact with an optimal soil management plan.
Receive a personalized report tracking the cost, movement and impact of your soil.


Migrating to Github Pages
Recently, I transitioned my site from Heroku by Salesforce to Github Pages and I couldn’t be happier with the switch. Heroku is a great platform, but not the right tool for this site. I built it using Jekyll, which means I have no reason to be using a full web stack with Apache, MySQL, and PHP.
Why I Switched
Github Pages is much simpler than Heroku. I don’t need all of the power that Heroku has for my simple portfolio site, and the simplicity of Github allows me to be much more productive.
Github Pages is fast. Really Fast. According to the test I ran on Pingdom.com, my site loads in 141 milliseconds and is faster than 99% of all websites. Github achieves this by using Fastly as their content download network. As the name implies, Fastly is lightning fast. Additionally, Github Pages has great uptime. Significantly better uptime than if I were updating a server (or dyno) by myself.
The Problems I Encountered
Static sites, like those built from Jekyll, cannot process a web form. I have a contact form on my site, but had no way of reading the data from a simple HTML site. I did some research and realized I had a few options.
- I could use a 3rd party service to host my form
- I could use FormKeep to manage my responses
- I could use Brace Forms to receive emails of any form inputs
The first thing I did was eliminate option #1. As a web developer, I hate relying on another service to host my code. Plus, a form looks so much better if it is a part of a website rather than a similarly styled website that is hosted elsewhere.
Then, I decided to try Formkeep, and I really liked it. With 2 lines of code, it will capture all of your form responses and put them in an excellent web interface. Unfortunately, Formkeep does not have a simple method of email or text notifications, so I was forced to look further. Note: Formkeep does support Webhooks, but I did not want to complicate my setup any more than it needed to be.
Finally, I have settled upon Brace Forms. Like the above option, it takes a very small amount of code and records all your responses. Unlike Formkeep, it does not have a web interface. Rather, it will email every form submission to you and it was the perfect solution for my contact form.
Overall, I am very happy with my decision to move to Github pages and I would recommend it to anyone looking to host a simple, static site.


Elementary motions
Two of the most common motions are straight-line and circular kinematics. While the general kinematic formulas apply to these situations, we can write simpler formulas just for these special cases.
Rectilinear motion
Rectilinear motion is motion in a straight line. In the particular case that acceleration is constant, the velocity and position can be found by explicit integration.
Constant linear acceleration.
\[\begin{aligned} a &= a_0 = \text{constant} \\ v &= v_0 + a_0 t \\ x &= x_0 + v_0 t + \frac{1}{2} a_0 t^2 \end{aligned}\]
If the $x$ and $y$ components of a 2D motion are independent, then each direction can be regarded as simple rectilinear motion. For example, if a projectile flies through the air then the horizontal component is linear in $t$, while the vertical motion with constant gravitational acceleration is a parabola.
Circular motion
Motion in a circle of constant radius gives velocity in the tangential direction $\hat{e}_\theta$. The acceleration has one component directly inwards in the radial direction (centripetal acceleration) and one tangential component due to angular acceleration $\alpha$.
Circular motion (constant $r$).
\[\begin{aligned} r &= \text{constant} \\ \vec{v} &= r \omega \,\hat{e}_\theta \\ \vec{a} &= - r \omega^2 \,\hat{e}_r + r \alpha \,\hat{e}_\theta \end{aligned}\]
Note that for circular motion the velocity $v$ is linear in both the radius $r$ and angular velocity $\omega$. The tangential acceleration is linear in both the radius $r$ and angular acceleration $\alpha$, while the radial acceleration is linear in $r$ but quadratic in $\omega$.
In the case of constant angular acceleration, the angular components function like rectilinear motion but in a circle, giving the explicit formulas:
Constant angular acceleration.
\[\begin{aligned} r &= r_0 = \text{constant} \\ \alpha &= \alpha_0 = \text{constant} \\ \omega &= \omega_0 + \alpha_0 t \\ \theta &= \theta_0 + \omega_0 t + \frac{1}{2} \alpha_0 t^2 \end{aligned}\]


Lost In Network allows you to store your devices information in a database in a secure way. The passwords are encrypted in a way that they can only be accessed when logged in the application. The application uses an AES Cipher, the key being the SHA512 of the user's password which is stored in the server-side encrypted session.
Lost In Network will fetch your devices' configurations and store them on disk encrypted, just like the passwords in the database. With that technique, you can keep track of your configurations, by date. You can download them decrypted or create an archive of your encrypted files.
Once you fetched your configurations files for your devices, you can start an analysis. Check your version vulnerabilities, your configurations warnings and such and get a nice reporting.
Don't waste your time, start the task and keep working ! Asynchronous tasks allows you to start a task and keep using the application to do something else. Fetch your configuration, update the CVE , analyse your configurations. Some asynchronous tasks can even be executed at periodic times ! No need to update the CVE manually, it's done once a day.
We never store clear-text data on disk. Everything is encrypted. Want to change your password ? LiN will decrypt everything using your old password's hash and re-encrypt everything using your new one !
You can even monitor your server from within the application.


Class Config
Used in initialization of NimiqClient class.
Inheritance
System.Object
Config
Namespace: Nimiq
Assembly: NimiqClient.dll
Syntax
public class Config : object
Constructors
| Improve this Doc View SourceConfig(String, String, String, String, Int64)
Initializes the configuration object from arbitrary parameters.
Declaration
public Config(string scheme = "http", string user = "", string password = "", string host = "<IP_ADDRESS>", long port = null)
Parameters
| Type | Name | Description |
|---|---|---|
| System.String | scheme | Protocol squeme, |
| System.String | user | Authorized user. |
| System.String | password | Password for the authorized user. |
| System.String | host | Host IP address. |
| System.Int64 | port | Host port. |
Properties
| Improve this Doc View SourceHost
Host IP address.
Declaration
public string Host { get; set; }
Property Value
| Type | Description |
|---|---|
| System.String |
Password
Password for the authorized user.
Declaration
public string Password { get; set; }
Property Value
| Type | Description |
|---|---|
| System.String |
Port
Host port.
Declaration
public long Port { get; set; }
Property Value
| Type | Description |
|---|---|
| System.Int64 |
Scheme
Protocol squeme, "http"
or "https"
.
Declaration
public string Scheme { get; set; }
Property Value
| Type | Description |
|---|---|
| System.String |
User
Authorized user.
Declaration
public string User { get; set; }
Property Value
| Type | Description |
|---|---|
| System.String |


SCIENCE EXHIBITION
Science ExhibitionTechToy
Most enduring modifications in toys are never the work of manufacturers, but are the result of children at play.
About
The best toys are like unicorns. They include enough horse to seem real, but enough horn to become magical. If little else, the brain is an educational toy.Here you have a stage to present your prototype and ideas for making of toys
Participation Criteria
School students of class 7th to 12th, 2nd and 3rd year students (all branches)
Size- team of 1 to 3.
Contact Info
- Ajay Patidar
-<EMAIL_ADDRESS>-<PHONE_NUMBER>
- Chandrama Patel
-<EMAIL_ADDRESS>-<PHONE_NUMBER>
- Ankit Kumar Tripathi
-<EMAIL_ADDRESS>-<PHONE_NUMBER>
- Akshat Agrawal
-<EMAIL_ADDRESS>-<PHONE_NUMBER>
Rules:
- A Live Quiz.
- Abstract submission.
- Presentation.
- Viva (80%) and 3D model(20%).


| expn .. expn |
var i : 1 .. 10 % i can be 1, 2
up to 10
type xRange : 0 .. 319 % Define integer subrange
var pixels : array xRange of int
% Array elements are
% numbered 0, 1,
319
for k : xRange % k ranges from 0 to 319
pixels ( k ) := 0
end for
The lower bound of a subrange must be known at compile time. The upper bound is allowed to be a run time value only in one situation and that is when it gives the upper bound of an array being declared in a variable declaration, in other words when declaring a dynamic array.
Subranges are usually a subset of the integers, as in 1 .. 10. You can also have subranges of enumerated types and characters (the char type).
You can apply lower and upper to subrange types.


Your email or username
Your password
Not a member yet ? Join us
Password
Username
Your First Name
Your Last Name
Your email
Already a member ? Go and log in


Ryan uses tools
I'm using this space to document all the tools I do and don't use. Not all of these definitions make a ton of sense, or are 100% clear, but I think it's good to keep track and be critical of my process.
Design:
- Illustrator: For making icons, illustrations, compositions
- Sketch: For making UIs and literally nothing else
- Form: For prototyping motion of elements in a UI
- InDesign: For multi-page print stuff or posters
- Photoshop: For editing large amounts of pixels to deceive humans
Web Dev:
- Sublime Text 2: Text Editor
- Ionic: Lets me make native apps with web dev stack. Built on Angular
- HTML/CSS/Javascript: static webpages
- Angular.js: Front end data presentation for dynamic web apps, extends HTML
- Node.js: Server-side data moving
- Homebrew: Missing package manager for OSX
- Bower: package management for front-end
- MEAN.io: full-stack for modern web apps. (mongoDB>Express.js>Angular.js>Node.js)
- screenGrabber, a free, automated screen shot app for mac :) You'll have to option>right click>open or go to system preferences>security & privacy> approve the app. Coded by Ryan Mather in AppleScript.


Public Radio Finder finds the public radio stations (NPR stations) in the United States with the best chance of being available at your current location. Results are based on station data and service contour data published by the FCC.
Visiting the tool in your browser loads data for all public radio stations in the United States. As your location changes, the results are updated automatically. This means you can load the tool while you have cell phone service in Denver and then find the nearest NPR station when you make it to middle-of-nowhere Kanas with no cell phone service.
Station recommendations should be fairly reliable. The FCC publishes "service contours" describing the area where towers' signals should reach and should be free on interference from other stations. This tool calculates your distance to each station using the haversine formula and compares that to the FCC's range estimate for that station.
The FCC's data is far from perfect and Wikipedia's list of NPR stations is too. If you notice missing or incorrect data, you can reach me on Twitter.
While this tool requests access to your location, that information never leaves your device. I am not collecting or selling your data.


Stephen White, 51, from Exeter, has become a recluse since drastic surgery left him without a nose or any top teeth.
The dad-of-three, who has eight grandchildren, said he is living like a ‘vampire’ because he is too ashamed to go out in daylight.
He would like to start dating but says he doesn’t have the confidence because his appearance ‘scares’ people.
The former sales assistant said: ‘I scare my grandchildren and when I go out in the street I scare, not just children, but everybody. People look at me and cross the road to avoid me.
 If it wasn’t so visible I’d feel like I’d be able to date again. Really all I want is to fall in love.’
Stephen discovered he had nasal cancer four years ago, when he had a cold and noticed his nose was bleeding.

He has been waiting for a prosthetic nose since 2015 and suffered from impaired vision as he has been unable to wear his glasses.
He said: ‘Before I had laser eye surgery last month, I could not see further than the end of my arm without my glasses. I couldn’t put my glasses on because there was nothing to rest them on.
‘I couldn’t go out because I couldn’t see to cross the road and would be paranoid about bumping into people, as I couldn’t see them until they were a yard in front of me.
‘Then they would look at my face and see I didn’t have a nose. It destroyed my self-confidence and I now have no self-esteem.’
According to the NHS, nasal cancer is very rare. It develops in the nasal cavity behind the nose and most often affects men over 40.

However, he wasn’t expecting to wake up without one when he went in for surgery.
‘They were talking about having to remove my nose altogether and fitting a prosthetic, or cutting into it and replacing the bridge with bone from my rib and skin from my forehead’ he recalled.
Advertisement Advertisement
‘But they didn’t really know what they could do until they’d cut it open. I can’t remember how long the operation was but it felt like it took hours.
‘When I woke up, I had no teeth, top palate or nose because they saw the cancer was attacking my palate and gums.
 I couldn’t speak because my teeth had gone.’
Stephen said he ‘burst into tears’ when he first looked in the mirror as he feared people would think he was a ‘monster’.‘
He thought his ‘life was over’ and felt depressed as he spent months on a diet of mushy food while going through aggressive radiotherapy treatment to remove the cancer.
He has been going back and forth trying to get a prosthetic nose fitted, and last month had to pay over £3000 for laser eye surgery, as he did not qualify for free treatment on the NHS.
Although this has had a huge improvement on his life, his confidence remains at rock bottom.
He said: ‘I used to go and visit my grandchildren on the train, but I haven’t done that for years because I’m scared to be near all the people.
‘Mums with prams will steer their buggies away from me. I look at people and they will cross the road. It’s soul-destroying.
Advertisement
‘Now I would just like to find love. I want to find a girlfriend who will love me like I would love her.
‘I think once I have my new nose I will feel more confident to go out and meet someone.
‘I used to go to the pub and see friends, but over the last five years that’s gone down the toilet. I just want to be treated like a decent human being.’
Family members are now trying to raise money via GoFundMe to help Stephen get back on his feet and pay for any remaining work he may need doing, as well as to buy him a car, so he can visit them and have a social life.