Work Experience
Three Point Turn, Software Developer (Sep. 2014 - Present)
- SQL Server, ASP.NET MVC, Entity Framework, and other C# libraries for updating and maintaining warehouse automation web applications and other business automation apps.
- Cordova mobile app development.
- Python (Pandas, BeautifulSoup and Scrapy) for web scraping and variable substitution in several HTML and PHP files.
- Microsoft Bot Framework and Language Understanding Intelligent Service (LUIS) for improvement of internal dev ops.
Cookthru Inc., Software Engineer Internship (May 2014 - Sep. 2014)
URL: http://savaa.co
- Used Java to process XML files in order to make a proper database out of them using DOM and SAX.
- Regression Testing on Desktop, Mobile Websites and iPad app.
- Data Analytics - Tracking user activity and workflow on the website.


With this tool, you can create a keypair for logging and retrieving the log files. When an activity is launched, a logging key can be specified. All the activities launched with the same logging key will save the submitted logs to the same logging store. It is possible to download all the logs from the specific logging store by using the secret key.
You can use the same logging key for all activities or you can create one key for each class etc.
Use the public logging key below when launching activities from Acos. The key should
be in the launching request as a GET parameter logkey
. For example,
{{ host }}html/coding/ex1?logkey=123456.
Public key: {{ publicKey }}
To download the collected log files, visit the URL {{ host }}logs/SECRETKEY and a zip file containing all the logs will be generated. Replace SECRETKEY with the correct key that is shown below.
Secret key: {{ secretKey }}
Important! Do not lose this secret key or otherwise you are not able to download the collected logs.


AWS Codedeploy plugin
Plugin Information |
|---|
View AWS CodeDeploy on the plugin site for more information. |
Older versions of this plugin may not be safe to use. Please review the following warnings before using an older version:
The AWS CodeDeploy Jenkins plugin provides a post-build step for your Jenkins project. Upon a successful build, it will zip the workspace, upload to S3, and
start a new deployment. Optionally, you can set it to wait for the deployment to finish, making the final success contingent on the success of the deployment.
Setting up
After building and installing the plugin, some simple configuration is needed for your project.
- Open up your project configuration
- In the Post-build Actions section, select Deploy an application to AWS CodeDeploy
- Application Name, Deployment Group, Deployment Config, and region are all required options.
- For authentication, there are two options. Either option requires that the associated role has, at minimum, a policy that permits
codedeploy:*
ands3:Put*
.- Access/Secret key pair. For example, the keys associated with a specific IAM user. If left blank, the default chain of credentials will be checked.
- Temporary access keys. These will use the global keys from the Jenkins instance.
License
This plugin is licensed under Apache 2.0. See the LICENSE file in the source repository for more information.


System Architect Definitions, Encyclopedia:"D:\DATA\SYSARCH\HCM\GEN_DATA\SUBJECT\V01\CURRENT\"
Abandoned Activity (Class)
- Description:
"Activity" which has ended abnormally and for which no further work is intended.
- Source:
post-CBS
- State Type:
F
- &Abstract:
F
- Value:
F
Abandoned Intention (Class)
- Description:
"Intention" which has not been fulfilled, but for which there is no further action intended.
- Comment:
As distinct from "Not Required", where it was never required in the first place.
- Source:
HcM QA
- State Type:
F
- &Abstract:
F
- Value:
F
ABD/party (Gen-Spec Arc)
- Open:
F
- Base Class:
"Agent By Devolvement"
- Definitions Used:
-
Agent By Devolvement (Class)


| Triacetin A General Information
-
| Synonyms: |
Triacetin; 1,2,3-Triacetoxypropane; 2-acetyloxy-1-(acetyloxymethyl)ethyl acetate |
| Molecular Formula: |
C9H14O6 |
| CAS Registry No.: |
102-76-1 |
| Chemical Category: |
Glycols |
Usage and Performance Characteristics
-
| Manufacturer: |
Tessenderlo Fine Chemicals, Ltd. |
| Outstanding Properties: |
Good light resistance, low volatility, low toxicity |
| Used for Products: |
Cigarette filters |
Physical Properties
-
| Specific Gravity: |
1.16 (20°C) |
| Aggregate State at 25°C: |
Liquid |
| Dynamic Viscosity, cP: |
20 (20°C) |
| Vapor Density, relative to H2: |
7.56 |
| Vapor Pressure, kPa: |
0.00030664 (20°C) |
Chemical Properties
-
| Henry Law Constant, atm/(m3 mol): |
9.869E-09 |
| Solubility in Water at 25°C, g/L: |
6.1 |
Optical Properties
Hazard-Related Data
-
| ADR/RID Class: |
Not classified |
| DOT Class: |
Not classified |
| ICAO/IATA Class: |
Not classified |
| IMDG Class: |
Not classified |
| OSHA Hazard Class: |
Not hazardous according EC 67/548/EEC |
| UN Safety Phrases: |
23-24/25 |
| UN/NA Class: |
Not classified |
| Autoignition Temperature, °C: |
433 |
| Lower Explosive Level, LEL, %: |
1.05 |
| Upper Explosive Level, UEL, %: |
7.75 |
| Eye Irritation (human): |
Mild irritant |
| Flash Point Temperature, °C: |
148 |
| HMIS Personal protection: |
Close fitting goggles, protective gloves |
| Skin Irritation: |
Not harmful |
Environmental Parameters
-
| Octanol-Water Partition Coeff., log Kow: |
0.36 |
| Organic Carbon Adsorption Coeff., log Koc: |
-0.6 |
| Theoretical Oxygen Demand, ThOD, g/g: |
1.39 |
Aquatic Toxicity
-
| Daphnia Magna, mg/L: |
380 (48-h EC50) |
Animal Toxicity
-
| Rabbit Dermal, LD50, mg/kg: |
>5,000 |
| Rat Oral, LD50, mg/kg: |
3,000 |
Plasticizers Database (2nd Electronic Edition) Copyright © 2004 by ChemTec Publishing |


Welcome
Your Archery Headquarters
Join the Community
28
Indoor Lanes
26
Outdoor Lanes
2
Private Rooms
100+
Happy Customers
Address
Phone Number
Open Hours
528 Nock Point Ln
Tacoma, WA 98412
+1<PHONE_NUMBER>
Mon-Fri 11 am - 7 pm
Sat. 11 am - 6 pm
Closed: Sunday


Home
About Me
Resume
Blog
{% include tag_cloud.html %} {% include cat_cloud.html %}
Youssef Chaker
{{ content }}


Upload File
{%- with messages = get_flashed_messages(with_categories=True) -%} {%- if messages -%} {%- for category, message in messages -%}List File
| File Name | Delete |
|---|---|
| {{ file }} | |
| No uploaded file found. |
Upload Results:-
-
{% for response in responses %}
{% if responses[response]==1 %}
- The file {{ response }} has been uploaded successfully. {% else %}
- The file {{ response }} couldn't be uploaded as this file extension is not allowed. {% endif %} {% endfor %}


JS Interior Design is one of Portugal's leading companies providing interior design and Renovations for Workplace environments. We have been designing and renovating modern working and learning environments for over twelve years. Today we have 18 experienced workplace interior designers and highly skilled professional in Portugal, Brazil and Angola.
Workplace Specification: Our workplace consultants help you specify your needs for the workplace: the amount and type of space needed as well as the areas for different activities. An analysis of the results of the work environment survey and interviews will be created.
Design: Our experienced interior designers design a flexible workplace to fit your needs both now and in the future. The design is based on the space plan created during the specification phase on the basis of various needs.
Communicaton: Our implementation team delivers the turnkey solution as well as takes care of the recycling when needed. Our consultants help you with the change management.
And once implemented, our consultants help you continuously optimise and develop your workplace according to your changing needs.


Kirkland Lake Gold to acquire Detour Gold in stock deal worth $4.9 billion
TORONTO — Kirkland Lake Gold Ltd. has signed an agreement to acquire Detour Gold Corp. in a deal that values the company at about $4.9 billion. Under the agreement, Detour Gold shareholders will receive 0.
by Canadian PressTORONTO — Kirkland Lake Gold Ltd. has signed an agreement to acquire Detour Gold Corp. in a deal that values the company at about $4.9 billion.
Under the agreement, Detour Gold shareholders will receive 0.4343 of a Kirkland Lake share for each Detour Gold share they hold.
The exchange ratio implies a value of $27.50 per Detour Gold share based on the closing price of Kirkland Lake Gold shares on the Toronto Stock Exchange on Friday, a 24 per cent premium to Detour Gold's closing price that day.
Detour Gold owns the Detour Lake open pit gold mine in northeastern Ontario.
Once the deal is completed, existing Kirkland Lake Gold shareholders will own about 73 per cent of the combined company, while Detour Gold shareholders will hold about 27 per cent.
The deal requires approval by a two-thirds majority vote by Detour Gold shareholders and a majority vote by Kirkland Lake Gold shareholders, in a addition to regulatory and court approvals.
This report by The Canadian Press was first published Nov. 25, 2019.
Companies in this story: (TSX:KL, TSX:DGC)
The Canadian Press


Setting Up Neo4j
The detail instruction for installing Neo4j(latest version) can be found at official website of Neo4j. Here are the simple steps created the current time (2019 -Oct 15).
Before you install, make sure the correct version of java is installed in your device
Install Neo4j
- To install Neo4j Community Edition:
sudo apt-get install neo4j=<version>
- To install Neo4j Enterprise Edition:
sudo apt-get install neo4j-enterprise=<version>
Startting Stopping or Restarting Service
- To start the neo4j service:
sudo service neo4j start
Go to IP/localhost:7474
to have neo4j browser.
- To stop the neo4j service:
sudo service neo4j start
- To restart the neo4j service:
sudo service neo4j start
For Forgotten Password
- Stop the neo4j service
- remove the auth file inside
/var/lib/neo4j/data/dbms
- restart the service
- Follow
server connect
command to recreate password
For remote access
- Stop the neo4j service
- Setup
<IP_ADDRESS>
instead oflocalhost
in the configuration file - Start the neo4j service
How to use new graph database
- Stop the neo4j service
- Find out
neo4j.config
file and repoint the new graph database. - Start the neo4j service


--- layout: page title: About me subtitle: Why you'd want to go on a date with me css: "/css/aboutme.css" ---
Currently a frontend and backend Javascript Full-stack developer and mobile developer (iOS and Android). Product Lead Developer, previously worked as a QA, Scrum Master and DevOps.
I enjoy writing useful & reusable software to help others — check out my projects.
I'm addicted to classical music (playing my violin), getting into philosophical debates, and meeting new people :)
I was born in Spain and travelled as far as Japan. Appart from Spanish, I speak English fluently and some French and Japanese.


So, you’ve got a data set, you say? Some points And you’re not sure what do with them. Maybe you have a set of x and y coordinates?
In my case, I had a set of coordinates, each representing the number of an DJs followers on SoundCloud. I had another set of coordinates that represented an DJ’s cost per night.
I wanted to be able to use this data set to be able to predict given an artist’s Soundcloud followers count, how much they might cost! So which set is the x and which is the y? And how do I go about this?
A great Rubyist once said, now we’re in math world, so let’s go to the Google.
I found these two sites, which combined helped me make my algorithm pretty easily.
The data we have is x and the data we are predicting would be y.
In this website all you do is plug in your x, y coordinates and it creates for lines of best fit.
http://www.had2know.com/academics/regression-calculator-statistics-best-fit.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
Then you can use this site to graph them - which isn’t technically necessary but it helped me see which type of line seemed to make sense.
http://www.mathsisfun.com/data/grapher-equation.html
It’s pretty neat and helped me discover the following method aka my predictive algorithm. (sdcl_followers is an attribute of a Dj.)
1 2 3 4 5 6 7 |
|
That all said, this algorithm is pretty shit. It turns out soundcloud followers isn’t the greatest determiner of cost/night. I’ll need to take some other factors into account.
Hope this is helpful.


| Name | Position | Team | Bye Week | Abs Rank | Pos Rank | Price | Current Bidder | Original Owner | Submit Bid | Match Offer |
| {{bid.player.name}} | {{bid.player.position}} | {{bid.player.team.name}} | {{bid.player.team.byeWeek}} | {{bid.player.absRank}} | {{bid.player.posRank}} | ${{bid.price}} | {{bid.owner.name}} | {{bid.origOwner.name}} |
Enter Bid:
Your roster is full - you're done
Bid is too high
You've got no money
|
You're roster is full
You can't match this
|
| Owner | $ left | Spots |
| {{owner.name}} | {{gvar.salaryCap - owner.salary}} | {{gvar.maxPlayers - owner.numPlayer}} |
| Name | Pos | Team | Bye | Price | Yr |
| {{player.name}} | {{player.position}}{{player.posRank}} | {{player.team.name}} | {{player.team.byeWeek}} | ${{player.price}} | {{player.yearsOwned}} |


Raikkonen wouldn't have believed he'd still race into his 40s at start of career
by Tom MasonKimi Raikkonen has said that he would never have believed that he would still be racing into his 40's when he began his career. The 40-year-old made his debut in 2001 and has since gone on to make 311 starts in F1.
“I don’t think I would have believed someone if they’d told me back then I would still be racing in F1 at the age of 40,” Raikkonen told Yahoo Sport.
“Obviously, at that time, it was all about simply trying to drive well and stay in F1. Nothing was guaranteed.”
“Yes, I had a contract in 2001 for three years – two plus one – but it was such early days that the aim was to try to do well and see what happens, but even when I was 27 or 28 I wouldn’t have put any money on it.”
The Finn currently races for Alfa Romeo and has collected 43 points so far this season which sees him placed twelfth in the drivers' standings.


By using a Table of Contents at the beginning of a document, the user may click on a particular link, allowing the user to "jump" to that section. Thank you to Andy for providing the Table of Contents format.
The web serves as a bunch of computers with many pieces all of which communicate with each other. Users initiate a requests via
an HTTP Request that interacts with a server. Udacity Intro to Programming offers this video
does a good job of explaining more.
HTML stands for Hypertext Markup Language. HTML documents form the majority of the content on the web.
There are approximately 30 billion pages and hyperlinks are throughout. A variety of document types and hyperlinks included within HTML. These include:
Udacity offers this video providing an overview
HTML documents are made of HTML elements. When writing HTML, we tell browsers the type of each element by using HTML tags. Udacity's video explains the distinction well.
Tags are primarily composed of opening and closing tags. However, there are tags called 'void' which do not require a closing tag.
Failing to properly close a tag may result in everything following the opening tag to assume that attribute of that tag. For example, if one were to use an opening tag of "em" and fail to close that tag, everything from the opening tag forward would be shown in italics.
Sample tags include:
Attributes are properties of HTML and used properly, create powerful pages.
Attributes include:
Anchor tags use the "href" attribute while image tags use the "src" attribute.
 This makes them very unforgiving since a small mistake by a programmer can cause huge problems in a program.
Computers have yet to reach a full state of articial intelligence and currently posess the properties
applied by a programmer.
HTML elements are either inline or block. Block elements form an "invisible box" around the content inside of them.
Inline elements include:
Block elemeents include:
Addtionally these block elements may be considered 'container' elements and have content.
The web structure uses headers, titles, and body content to create a lively and interesting webpage. The structure includes
elements, attributes (properties), linkages for reference and easy access, as well as a variety of stye options (CSS or JavaScript).
Depending on the visual, one may "nest" elements inside each other, creating varying layers of intricacy.
CSS stands for Cascading Style Sheets and they give programmers a way to control the style of related HTML elements. This is done by giving similar HTML elements the same class name and then specifying the style that should apply to that class.
Avoiding repetition creates cleaner code which may then become 'reuseable'. It supports "work smarter, not harder".
Creating consistency: Use CSS (Cascading Style Sheets) to standardize the look of web pages.
To create a style structure within the HTML one would do something like this:
Within the header, create a link as shown here: Using opening and closing "style" tags", Be sure to define your class and place
your element details between left and right braces ({}).


Published on May 28, 2012.
This is an example HTML file to demonstrate really basic HTML5 markup.
We're using several of the new HTML5 elements, including the <section> and <time> elements.
<section>
<time>


On page load, we fetch the entity from the persistence storage in order to polulate the view.
Register the CrudController
's init method:
<f:metadata> <f:viewParam name="id" value="\#{customerController.currentEntityId}"/> <f:event type="preValidate" listener="\#{customerController.initCurrentEntity}"/> <f:viewAction action="\#{customerController.initCurrentEntity}"/> </f:metadata>
This implementation is also ready for use with a @RequestScoped
controller.
By using CrudFaces' readOnly
tag,
you can turn your input mask into a read-only mask in two lines of code:
<cf:readOnly disabled="\#{param.edit}"> <!-- your components --> </cf:readOnly>
Note that this implementations relies on OmniFace's <o:from>
to keep \#{param}
attributes in the request.
Also, don't forget to show / hide the correct buttons.
This mask uses OmniFace’s <o:from>
instead of the vanilla JSF <h:from>
because the latter would purge HTTP request attributes from the URL on form submit; most importantly, it would delete them
when the form is submitted with validation error.
<o:form id="form" includeRequestParams="true">
This is the solution for this problem.
Thanks to the RESTful, stateless nature of this application, resetting the input fields is a matter of reloading the page with the same parameters:
<p:button value="\#{I18N[empty entity.id ? 'clear' : 'reset']}" outcome="show.xhtml"> <f:param name="id" value="\#{entity.id}" disable="\#{empty entity.id}"/> <f:param name="edit" value="true"/> </p:button>
Thanks to the RESTful, stateless nature of this application, cancelling input is even trivial: Just go back to the previous page.
<p:button id="cancelAction" value="\#{I18N['cancel']}" outcome="list.xhtml"/>


Before Change
weights_initializer = np.array([
np.concatenate((np.arange(num_atoms), np.ones(num_atoms))),
np.concatenate((np.ones(num_atoms), np.ones(num_atoms)))])
kernel_initializer = tf.compat.v1.initializers.constant(
weights_initializer, verify_shape=True)
bias_initializer = tf.keras.initializers.Ones()
// Store custom layers that can be serialized through the Checkpointable API.
self._dummy_layers = []
After Change
weights_initializer = np.array([
np.concatenate((np.arange(num_atoms), np.ones(num_atoms))),
np.concatenate((np.ones(num_atoms), np.ones(num_atoms)))])
kernel_initializer = tf.constant_initializer(weights_initializer)
bias_initializer = tf.keras.initializers.Ones()
// Store custom layers that can be serialized through the Checkpointable API.
self._dummy_layers = []


Uh-Oh!
The provisioning server was unable to find a hostname that matched this devices IP address.
Try Again
{{ template "footer.html" . }}


Wainwright guaranteed $5M by Cards, can earn $5M for starts
ST. LOUIS (AP) - Adam Wainwright is guaranteed $5 million in his one-year contract with the St. Louis Cardinals and can earn up to $5 million in performance bonuses, which allows the pitcher to match his 2019 earnings.
That is up from a $2 million guarantee in his 2019 deal, in which he earned an additional $8 million based on starts.
Wainwright’s contract, announced Tuesday, calls for $1.5 million each for 20 and 25 starts, and $2 million for 28.
In the event he is shifted to the bullpen, he could earn $500,000 apiece for 35, 40, 45, 50, 55 and 60 relief appearances.
Wainwright also gets a full no-trade provision.
Last season’s deal had a $500,000 bonus for five starts, $1 million each for 10 and 15, $1.5 million for 20, and $2 million apiece for 25 and 30. That was down from a $19.5 million salary in 2018, the final season of a $97.5 million, five-year contract.
The 38-year-old Wainwright was drafted by the Braves in 2000 and traded to the Cardinals three years later. He made his major league debut in 2005 and has been a stalwart for St. Louis the past 14 seasons, going 162-95 with a 3.39 ERA and three All-Star appearances.
He was 14-10 with a 4.19 ERA last season while helping the Cardinals reach the NL Championship Series.
Wainwright was especially valuable down the stretch. He had a 2.97 ERA in September and a 1.62 ERA in the postseason, where the Cardinals were ousted by eventual World Series champion Washington.
“We’re obviously excited we could reunite again,” team president John Mozeliak said Tuesday at the annual general managers meetings in Scottsdale, Arizona. “You think about his history and what he’s meant to the Cardinals. He and Yadier (Molina) will continue to set records together, hopefully.”
Wainwright has become one of the franchise’s most popular players, due not only to his success but also his longevity. He didn’t miss a start last season and will head into next season trailing only Jesse Haines (1920-37) and Bob Gibson (1957-75) among the Cardinals’ longest-tenured pitchers.
The right-hander, who helped the Cardinals to World Series titles in 2006 and 2011, is fourth in franchise history in wins. He is second in strikeouts (1,776) and sixth in innings pitched, even though he missed substantial parts of the 2011, ‘15 and ‘18 seasons with injuries.
Each time, Wainwright has come back seemingly better than ever.
“It’s not only impressive, it’s almost miraculous,” Mozeliak said. “That’s part of what makes him special. He’s so focused and understands there’s other ways to get people out in this game other than throwing 100. He proved you can do it by being strategic.”
He was tied for sixth in the NL in wins last season with his highest total since 2014, when he won 20 games. In doing so, Wainwright became the first Cardinals pitcher since Pete Alexander in 1928 to win at least 14 games at age 38 or older. Alexander won 16 games at the age of 41.
Wainwright also is the franchise leader in postseason games pitched (27) and strikeouts (115).
More AP MLB: https://apnews.com/MLB and https://twitter.com/AP_Sports
Sign up for Daily Newsletters
Copyright © 2019 The Washington Times, LLC.
Please read our comment policy before commenting.


Introduction page where you can edit your personal information by clicking on pencil icon in the top right hand corner.
The portfolio page allows the patient to import documents on the phone or by taking an image with the camera.
You also can search by name or filter by type and date of the documents.
You can also email selected documents.
The diary allows for a patient to record information about themselves. It has almost the same functionality as the portfolio page in terms of adding documents. It is to record anything you wish to report to your medical advisor on your next visit.
The edit and delete are handled by the icons in the top right hand corner of the entry.
The reminder page allows the user to create the following:
When to take your medication X times per day.
When is your next appointment with your medical advisor.
The user will be notified even when not in the application.


Enumeration for interaction modes.
An instance of the seymour client, adding the rendering canvas to the supplied html element.
(boolean)
: If true, client canvas will resize with window.
(boolean)
: If true, requests will be sent for server renderings.
(Object)
: Current mode as INTERACTION_ENUM.
(boolean)
: Request render from server with/without texture.
(Object)
: Reference to div element containing the client canvas and imgOverlay.
(Object)
: Reference to img element holding rendered server frame.
Start sending rendering requests to the server for each frame.
Stop sending rendering requests to the server for each frame.
Hide the imgOverlay.
Show the imgOverlay.
Render a frame in the client canvas and, if doRequestRender is true, request a render from the server.


Getting Started with PARROT¶
Installation¶
PARROT is available through GitHub or the Python Package Index (PyPI). To install through PyPI, run
$ pip install idptools-parrot
To clone the GitHub repository and gain the ability to modify a local copy of the code, run
$ git clone https://github.com/idptools/parrot.git
$ cd parrot
$ pip install .
This will install PARROT locally. If you modify the source code in the local repository, be sure to reinstall with pip.
Testing¶
To see if your local installation of PARROT is working properly, first install the “pytest” package:
$ pip install pytest
Then, you can run the unit test included in the package by navigating to the /tests folder within the installation directory and running:
$ pytest -v
Note that this only works if the package is installed as a repository via GitHub. Installation through PyPI does not include the necessary datafiles to run the tests.
Example datasets¶
Example data that can be used with PARROT can be found in the /data folder on GitHub. Examples of usage with these datasets can be found in the documentation.


property of class JsNgram
Description
Define the word delimiters those are excluded from indexes.
Example
self.ignore = r'\s+'
Default value
r'[\s,.，．、。]+'
Spaces, tabs, line feeds, punctuation marks both in English and Japanese.
Usage
import jsngram.jsngram # gives at class initializing ix = jsngram.jsngram.JsNgram(ignore=r'[\s!-.]+') # sets property value later ix.ignore = r'[\s!-.]+'
- The value must be a valid regular expression pattern string.
-
Non string values like
None
are prohibited.
more examples
Including periods and spaces to the index
r'[\f\n\r\t\v]+'
Form feed ,line feed, carriage return, horizontal and vertical tabs.
Including everything into the index
r'[^\s\S]+'
Technically, this regular expression matches none.


Status messages allow an application to notify users. These notifications are delivered through general messages with descriptions, specific status messages with icons or inline messages using only an icon and descriptive title. Specific status messages notify users of errors, warnings, or indicate when a status is okay.
Status messages come from Bootstrap Alerts, and are styled using Quantum's look and feel.


11 Data manipulation with dplyr
11.1 Readings
11.2 Overview
dplyr is a grammar of data manipulation, providing a consistent set of verbs that help you solve the most common data manipulation challenges:
mutate()
adds new variables that are functions of existing variablesselect()
picks variables based on their names.filter()
picks cases based on their values.summarise()
reduces multiple values down to a single summary.arrange()
changes the ordering of the rows.
 You can learn more about them in vignette("dplyr")
. As well as these single-table verbs, dplyr also provides a variety of two-table verbs, which you can learn about in vignette("two-table")
.
dplyr is designed to abstract over how the data is stored. That means as well as working with local data frames, you can also work with remote database tables, using exactly the same R code. Install the dbplyr package then read vignette("databases", package = "dbplyr")
.
11.3 Lesson
Lesson below is adapted from UBC’s Stat 545 course materials by Professor Jenny Bryon.
11.3.1 Prerequisites
Load dplyr
(or tidyverse
, which will load dplyr
) and gapminder
(install it if not yet installed):
library(gapminder)
library(tidyverse)
## Loading tidyverse: ggplot2
## Loading tidyverse: tibble
## Loading tidyverse: tidyr
## Loading tidyverse: readr
## Loading tidyverse: purrr
## Loading tidyverse: dplyr
## Conflicts with tidy packages ----------------------------------------------
## filter(): dplyr, stats
## lag(): dplyr, stats
11.3.2 Use filter()
to subset data row-wise.
filter()
takes logical expressions and returns the rows for which all are TRUE
.
filter(gapminder, lifeExp < 29)
## # A tibble: 2 x 6
## country continent year lifeExp pop gdpPercap
## <fctr> <fctr> <int> <dbl> <int> <dbl>
## 1 Afghanistan Asia 1952 28.801 8425333 779.4453
## 2 Rwanda Africa 1992 23.599 7290203 737.0686
filter(gapminder, country == "Rwanda", year > 1979)
## # A tibble: 6 x 6
## country continent year lifeExp pop gdpPercap
## <fctr> <fctr> <int> <dbl> <int> <dbl>
## 1 Rwanda Africa 1982 46.218 5507565 881.5706
## 2 Rwanda Africa 1987 44.020 6349365 847.9912
## 3 Rwanda Africa 1992 23.599 7290203 737.0686
## 4 Rwanda Africa 1997 36.087 7212583 589.9445
## 5 Rwanda Africa 2002 43.413 7852401 785.6538
## 6 Rwanda Africa 2007 46.242 8860588 863.0885
filter(gapminder, country %in% c("Rwanda", "Afghanistan"))
## # A tibble: 24 x 6
## country continent year lifeExp pop gdpPercap
## <fctr> <fctr> <int> <dbl> <int> <dbl>
## 1 Afghanistan Asia 1952 28.801 8425333 779.4453
## 2 Afghanistan Asia 1957 30.332 9240934 820.8530
## 3 Afghanistan Asia 1962 31.997 10267083 853.1007
## 4 Afghanistan Asia 1967 34.020 11537966 836.1971
## 5 Afghanistan Asia 1972 36.088 13079460 739.9811
## 6 Afghanistan Asia 1977 38.438 14880372 786.1134
## 7 Afghanistan Asia 1982 39.854 12881816 978.0114
## 8 Afghanistan Asia 1987 40.822 13867957 852.3959
## 9 Afghanistan Asia 1992 41.674 16317921 649.3414
## 10 Afghanistan Asia 1997 41.763 22227415 635.3414
## # ... with 14 more rows
Under no circumstances should you subset your data the way I did at first:
excerpt <- gapminder[241:252, ]
Why is this a terrible idea?
- It is not self-documenting. What is so special about rows 241 through 252?
- It is fragile. This line of code will produce different results if someone changes the row order of
gapminder
, e.g. sorts the data earlier in the script.
filter(gapminder, country == "Canada")
This call explains itself and is fairly robust.
11.3.3 Use select()
to subset the data on variables or columns.
Use select()
to subset the data on variables or columns. Here’s a conventional call:
select(gapminder, year, lifeExp)
## # A tibble: 1,704 x 2
## year lifeExp
## <int> <dbl>
## 1 1952 28.801
## 2 1957 30.332
## 3 1962 31.997
## 4 1967 34.020
## 5 1972 36.088
## 6 1977 38.438
## 7 1982 39.854
## 8 1987 40.822
## 9 1992 41.674
## 10 1997 41.763
## # ... with 1,694 more rows
Think: “Take gapminder
, then select the variables year and lifeExp, then show the first 4 rows.”
11.3.4 Revel in the convenience
Here’s the data for Cambodia, taking certain variables:
gapminder %>%
filter(country == "Cambodia") %>%
select(year, lifeExp)
## # A tibble: 12 x 2
## year lifeExp
## <int> <dbl>
## 1 1952 39.417
## 2 1957 41.366
## 3 1962 43.415
## 4 1967 45.415
## 5 1972 40.317
## 6 1977 31.220
## 7 1982 50.957
## 8 1987 53.914
## 9 1992 55.803
## 10 1997 56.534
## 11 2002 56.752
## 12 2007 59.723
11.3.5 Pure, predictable, pipeable
We’ve barely scratched the surface of dplyr
but I want to point out key principles you may start to appreciate. If you’re new to R or “programming with data”, feel free skip this section and move on.
dplyr
’s verbs, such as filter()
and select()
, are what’s called pure functions. To quote from Wickham’s Advanced R Programming book:
The functions that are the easiest to understand and reason about are pure functions: functions that always map the same input to the same output and have no other impact on the workspace. In other words, pure functions have no side effects: they don’t affect the state of the world in any way apart from the value they return.
In fact, these verbs are a special case of pure functions: they take the same flavor of object as input and output. Namely, a data frame or one of the other data receptacles dplyr
supports.
And finally, the data is always the very first argument of the verb functions.
This set of deliberate design choices, together with the new pipe operator, produces a highly effective, low friction domain-specific language for data analysis.
11.3.6 Use mutate()
to add new variables
Imagine we wanted to recover each country’s GDP. After all, the Gapminder data has a variable for population and GDP per capita. Let’s multiply them together.
mutate()
is a function that defines and inserts new variables into a tibble. You can refer to existing variables by name.
gapminder %>%
mutate(gdp = pop * gdpPercap)
## # A tibble: 1,704 x 7
## country continent year lifeExp pop gdpPercap gdp
## <fctr> <fctr> <int> <dbl> <int> <dbl> <dbl>
## 1 Afghanistan Asia 1952 28.801 8425333 779.4453<PHONE_NUMBER>
## 2 Afghanistan Asia 1957 30.332 9240934 820.8530<PHONE_NUMBER>
## 3 Afghanistan Asia 1962 31.997 10267083 853.1007<PHONE_NUMBER>
## 4 Afghanistan Asia 1967 34.020 11537966 836.1971<PHONE_NUMBER>
## 5 Afghanistan Asia 1972 36.088 13079460 739.9811<PHONE_NUMBER>
## 6 Afghanistan Asia 1977 38.438 14880372 786.1134<PHONE_NUMBER>1
## 7 Afghanistan Asia 1982 39.854 12881816 978.0114<PHONE_NUMBER>1
## 8 Afghanistan Asia 1987 40.822 13867957 852.3959<PHONE_NUMBER>9
## 9 Afghanistan Asia 1992 41.674 16317921 649.3414<PHONE_NUMBER>9
## 10 Afghanistan Asia 1997 41.763 22227415 635.3414<PHONE_NUMBER>5
## # ... with 1,694 more rows
Hmmmm … those GDP numbers are almost uselessly large and abstract. Consider the advice of Randall Munroe of xkcd:
One thing that bothers me is large numbers presented without context… ‘If I added a zero to this number, would the sentence containing it mean something different to me?’ If the answer is ‘no,’ maybe the number has no business being in the sentence in the first place."
Maybe it would be more meaningful to consumers of my tables and figures to stick with GDP per capita. But what if I reported GDP per capita, relative to some a benchmark country.
I need to create a new variable that is gdpPercap
divided by Canadian gdpPercap
, taking care that I always divide two numbers that pertain to the same year.
How I achieve:
- Filter down to the rows for Canada
- Create a new temporary variable in
gapminder
:- Extract the
gdpPercap
variable from the Canadian data. - Replicate it once per country in the dataset, so it has the right length.
- Extract the
- Divide raw
gdpPercap
by this Canadian figure. - Discard the temporary variable of replicated Canadian
gdpPercap
.
ctib <- gapminder %>%
filter(country == "Canada") %>%
select(year, BasegdpPercap=gdpPercap)
ctib
## # A tibble: 12 x 2
## year BasegdpPercap
## <int> <dbl>
## 1 1952 11367.16
## 2 1957 12489.95
## 3 1962 13462.49
## 4 1967 16076.59
## 5 1972 18970.57
## 6 1977 22090.88
## 7 1982 22898.79
## 8 1987 26626.52
## 9 1992 26342.88
## 10 1997 28954.93
## 11 2002 33328.97
## 12 2007 36319.24
my_gap <- gapminder %>%
inner_join(ctib, by="year") %>%
mutate(gdpPercapRel = gdpPercap / BasegdpPercap,
BasegdpPercap = NULL)
my_gap
## # A tibble: 1,704 x 7
## country continent year lifeExp pop gdpPercap gdpPercapRel
## <fctr> <fctr> <int> <dbl> <int> <dbl> <dbl>
## 1 Afghanistan Asia 1952 28.801 8425333 779.4453 0.06856992
## 2 Afghanistan Asia 1957 30.332 9240934 820.8530 0.06572108
## 3 Afghanistan Asia 1962 31.997 10267083 853.1007 0.06336874
## 4 Afghanistan Asia 1967 34.020 11537966 836.1971 0.05201335
## 5 Afghanistan Asia 1972 36.088 13079460 739.9811 0.03900679
## 6 Afghanistan Asia 1977 38.438 14880372 786.1134 0.03558542
## 7 Afghanistan Asia 1982 39.854 12881816 978.0114 0.04271018
## 8 Afghanistan Asia 1987 40.822 13867957 852.3959 0.03201305
## 9 Afghanistan Asia 1992 41.674 16317921 649.3414 0.02464959
## 10 Afghanistan Asia 1997 41.763 22227415 635.3414 0.02194243
## # ... with 1,694 more rows
Note that, mutate()
builds new variables sequentially so you can reference earlier ones (like tmp
) when defining later ones (like gdpPercapRel
). Also, you can get rid of a variable by setting it to NULL
.
How could we sanity check that this worked? The Canadian values for gdpPercapRel
better all be 1!
my_gap %>%
filter(country == "Canada") %>%
select(country, year, gdpPercapRel)
## # A tibble: 12 x 3
## country year gdpPercapRel
## <fctr> <int> <dbl>
## 1 Canada 1952 1
## 2 Canada 1957 1
## 3 Canada 1962 1
## 4 Canada 1967 1
## 5 Canada 1972 1
## 6 Canada 1977 1
## 7 Canada 1982 1
## 8 Canada 1987 1
## 9 Canada 1992 1
## 10 Canada 1997 1
## 11 Canada 2002 1
## 12 Canada 2007 1
I perceive Canada to be a “high GDP” country, so I predict that the distribution of gdpPercapRel
is located below 1, possibly even well below. Check your intuition!
summary(my_gap$gdpPercapRel)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.007236 0.061648 0.171521 0.326659 0.446564 9.534690
The relative GDP per capita numbers are, in general, well below 1. We see that most of the countries covered by this dataset have substantially lower GDP per capita, relative to Canada, across the entire time period.
Remember: Trust No One. Including (especially?) yourself. Always try to find a way to check that you’ve done what meant to. Prepare to be horrified.
11.3.7 Use arrange()
to row-order data in a principled way
arrange()
reorders the rows in a data frame. Imagine you wanted this data ordered by year then country, as opposed to by country then year.
my_gap %>%
arrange(year, country)
## # A tibble: 1,704 x 7
## country continent year lifeExp pop gdpPercap gdpPercapRel
## <fctr> <fctr> <int> <dbl> <int> <dbl> <dbl>
## 1 Afghanistan Asia 1952 28.801 8425333 779.4453 0.06856992
## 2 Albania Europe 1952 55.230 1282697 1601.0561 0.14084925
## 3 Algeria Africa 1952 43.077 9279525 2449.0082 0.21544589
## 4 Angola Africa 1952 30.015 4232095 3520.6103 0.30971764
## 5 Argentina Americas 1952 62.485 17876956 5911.3151 0.52003442
## 6 Australia Oceania 1952 69.120 8691212 10039.5956 0.88321046
## 7 Austria Europe 1952 66.800 6927772 6137.0765 0.53989527
## 8 Bahrain Asia 1952 50.939<PHONE_NUMBER>.0848 0.86803421
## 9 Bangladesh Asia 1952 37.484 46886859 684.2442 0.06019482
## 10 Belgium Europe 1952 68.000 8730405 8343.1051 0.73396559
## # ... with 1,694 more rows
Or maybe you want just the data from 2007, sorted on life expectancy?
my_gap %>%
filter(year == 2007) %>%
arrange(lifeExp)
## # A tibble: 142 x 7
## country continent year lifeExp pop gdpPercap
## <fctr> <fctr> <int> <dbl> <int> <dbl>
## 1 Swaziland Africa 2007 39.613 1133066 4513.4806
## 2 Mozambique Africa 2007 42.082 19951656 823.6856
## 3 Zambia Africa 2007 42.384 11746035 1271.2116
## 4 Sierra Leone Africa 2007 42.568 6144562 862.5408
## 5 Lesotho Africa 2007 42.592 2012649 1569.3314
## 6 Angola Africa 2007 42.731 12420476 4797.2313
## 7 Zimbabwe Africa 2007 43.487 12311143 469.7093
## 8 Afghanistan Asia 2007 43.828 31889923 974.5803
## 9 Central African Republic Africa 2007 44.741 4369038 706.0165
## 10 Liberia Africa 2007 45.678 3193942 414.5073
## # ... with 132 more rows, and 1 more variables: gdpPercapRel <dbl>
Oh, you’d like to sort on life expectancy in descending order? Then use desc()
.
my_gap %>%
filter(year == 2007) %>%
arrange(desc(lifeExp))
## # A tibble: 142 x 7
## country continent year lifeExp pop gdpPercap
## <fctr> <fctr> <int> <dbl> <int> <dbl>
## 1 Japan Asia 2007 82.603 127467972 31656.07
## 2 Hong Kong, China Asia 2007 82.208 6980412 39724.98
## 3 Iceland Europe 2007 81.757<PHONE_NUMBER>0.79
## 4 Switzerland Europe 2007 81.701 7554661 37506.42
## 5 Australia Oceania 2007 81.235 20434176 34435.37
## 6 Spain Europe 2007 80.941 40448191 28821.06
## 7 Sweden Europe 2007 80.884 9031088 33859.75
## 8 Israel Asia 2007 80.745 6426679 25523.28
## 9 France Europe 2007 80.657 61083916 30470.02
## 10 Canada Americas 2007 80.653 33390141 36319.24
## # ... with 132 more rows, and 1 more variables: gdpPercapRel <dbl>
I advise that your analyses NEVER rely on rows or variables being in a specific order. But it’s still true that human beings write the code and the interactive development process can be much nicer if you reorder the rows of your data as you go along. Also, once you are preparing tables for human eyeballs, it is imperative that you step up and take control of row order.
11.3.8 Use rename()
to rename variables
The Gapminder use camelCase
for variable naming, an alternative convention is snake_case
. Let’s rename some variables to use snake case!
my_gap %>%
rename(life_exp = lifeExp,
gdp_percap = gdpPercap,
gdp_percap_rel = gdpPercapRel)
## # A tibble: 1,704 x 7
## country continent year life_exp pop gdp_percap gdp_percap_rel
## <fctr> <fctr> <int> <dbl> <int> <dbl> <dbl>
## 1 Afghanistan Asia 1952 28.801 8425333 779.4453 0.06856992
## 2 Afghanistan Asia 1957 30.332 9240934 820.8530 0.06572108
## 3 Afghanistan Asia 1962 31.997 10267083 853.1007 0.06336874
## 4 Afghanistan Asia 1967 34.020 11537966 836.1971 0.05201335
## 5 Afghanistan Asia 1972 36.088 13079460 739.9811 0.03900679
## 6 Afghanistan Asia 1977 38.438 14880372 786.1134 0.03558542
## 7 Afghanistan Asia 1982 39.854 12881816 978.0114 0.04271018
## 8 Afghanistan Asia 1987 40.822 13867957 852.3959 0.03201305
## 9 Afghanistan Asia 1992 41.674 16317921 649.3414 0.02464959
## 10 Afghanistan Asia 1997 41.763 22227415 635.3414 0.02194243
## # ... with 1,694 more rows
I did NOT assign the post-rename object back to my_gap
because that would make the chunks in this tutorial harder to copy/paste and run out of order. In real life, I would probably assign this back to my_gap
, in a data preparation script, and proceed with the new variable names.
11.3.9 select()
can rename and reposition variables
You’ve seen simple use of select()
. There are two tricks you might enjoy:
select()
can rename the variables you request to keep.select()
can be used witheverything()
to hoist a variable up to the front of the tibble.
my_gap %>%
filter(country == "Burundi", year > 1996) %>%
select(yr = year, lifeExp, gdpPercap) %>%
select(gdpPercap, everything())
## # A tibble: 3 x 3
## gdpPercap yr lifeExp
## <dbl> <int> <dbl>
## 1 463.1151 1997 45.326
## 2 446.4035 2002 47.360
## 3 430.0707 2007 49.580
everything()
is one of several helpers for variable selection. Read its help to see the rest.
11.3.10 group_by()
is a mighty weapon
I have found friends and family collaborators love to ask seemingly innocuous questions like, “which country experienced the sharpest 5-year drop in life expectancy?”. In fact, that is a totally natural question to ask. But if you are using a language that doesn’t know about data, it’s an incredibly annoying question to answer.
dplyr offers powerful tools to solve this class of problem.
group_by()
adds extra structure to your dataset – grouping information – which lays the groundwork for computations within the groups.summarize()
takes a dataset with \(n\) observations, computes requested summaries, and returns a dataset with 1 observation.- Window functions take a dataset with \(n\) observations and return a dataset with \(n\) observations.
mutate()
andsummarize()
will honor groups.- You can also do very general computations on your groups with
do()
, though elsewhere in this course, I advocate for other approaches that I find more intuitive, using thepurrr
package.
Combined with the verbs you already know, these new tools allow you to solve an extremely diverse set of problems with relative ease.
<IP_ADDRESS> Counting things up
Let’s start with simple counting. How many observations do we have per continent?
my_gap %>%
group_by(continent) %>%
summarize(n = n())
## # A tibble: 5 x 2
## continent n
## <fctr> <int>
## 1 Africa 624
## 2 Americas 300
## 3 Asia 396
## 4 Europe 360
## 5 Oceania 24
Let us pause here to think about the tidyverse. You could get these same frequencies using table()
from base R.
table(gapminder$continent)
##
## Africa Americas Asia Europe Oceania
## 624 300 396 360 24
str(table(gapminder$continent))
## 'table' int [1:5(1d)] 624 300 396 360 24
## - attr(*, "dimnames")=List of 1
## ..$ : chr [1:5] "Africa" "Americas" "Asia" "Europe" ...
But the object of class table
that is returned makes downstream computation a bit fiddlier than you’d like. For example, it’s too bad the continent levels come back only as names and not as a proper factor, with the original set of levels. This is an example of how the tidyverse smooths transitions where you want the output of step i to become the input of step i + 1.
The tally()
function is a convenience function that knows to count rows. It honors groups.
my_gap %>%
group_by(continent) %>%
tally()
## # A tibble: 5 x 2
## continent n
## <fctr> <int>
## 1 Africa 624
## 2 Americas 300
## 3 Asia 396
## 4 Europe 360
## 5 Oceania 24
The count()
function is an even more convenient function that does both grouping and counting.
my_gap %>%
count(continent)
## # A tibble: 5 x 2
## continent n
## <fctr> <int>
## 1 Africa 624
## 2 Americas 300
## 3 Asia 396
## 4 Europe 360
## 5 Oceania 24
What if we wanted to add the number of unique countries for each continent? You can compute multiple summaries inside summarize()
. Use the n_distinct()
function to count the number of distinct countries within each continent.
my_gap %>%
group_by(continent) %>%
summarize(n = n(),
n_countries = n_distinct(country))
## # A tibble: 5 x 3
## continent n n_countries
## <fctr> <int> <int>
## 1 Africa 624 52
## 2 Americas 300 25
## 3 Asia 396 33
## 4 Europe 360 30
## 5 Oceania 24 2
<IP_ADDRESS> General summarization
The functions you’ll apply within summarize()
include classical statistical summaries, like mean()
, median()
, var()
, sd()
, mad()
, IQR()
, min()
, and max()
. Remember they are functions that take \(n\) inputs and distill them down into 1 output.
Although this may be statistically ill-advised, let’s compute the average life expectancy by continent.
my_gap %>%
group_by(continent) %>%
summarize(avg_lifeExp = mean(lifeExp))
## # A tibble: 5 x 2
## continent avg_lifeExp
## <fctr> <dbl>
## 1 Africa 48.86533
## 2 Americas 64.65874
## 3 Asia 60.06490
## 4 Europe 71.90369
## 5 Oceania 74.32621
summarize_each()
applies the same summary function(s) to multiple variables. Let’s compute average and median life expectancy and GDP per capita by continent by year … but only for 1952 and 2007.
my_gap %>%
filter(year %in% c(1952, 2007)) %>%
group_by(continent, year) %>%
summarise_each(funs(mean, median), lifeExp, gdpPercap)
## `summarise_each()` is deprecated.
## Use `summarise_all()`, `summarise_at()` or `summarise_if()` instead.
## To map `funs` over a selection of variables, use `summarise_at()`
## # A tibble: 10 x 6
## # Groups: continent [?]
## continent year lifeExp_mean gdpPercap_mean lifeExp_median
## <fctr> <int> <dbl> <dbl> <dbl>
## 1 Africa 1952 39.13550 1252.572 38.8330
## 2 Africa 2007 54.80604 3089.033 52.9265
## 3 Americas 1952 53.27984 4079.063 54.7450
## 4 Americas 2007 73.60812 11003.032 72.8990
## 5 Asia 1952 46.31439 5195.484 44.8690
## 6 Asia 2007 70.72848 12473.027 72.3960
## 7 Europe 1952 64.40850 5661.057 65.9000
## 8 Europe 2007 77.64860 25054.482 78.6085
## 9 Oceania 1952 69.25500 10298.086 69.2550
## 10 Oceania 2007 80.71950 29810.188 80.7195
## # ... with 1 more variables: gdpPercap_median <dbl>
Let’s focus just on Asia. What are the minimum and maximum life expectancies seen by year?
my_gap %>%
filter(continent == "Asia") %>%
group_by(year) %>%
summarize(min_lifeExp = min(lifeExp), max_lifeExp = max(lifeExp))
## # A tibble: 12 x 3
## year min_lifeExp max_lifeExp
## <int> <dbl> <dbl>
## 1 1952 28.801 65.390
## 2 1957 30.332 67.840
## 3 1962 31.997 69.390
## 4 1967 34.020 71.430
## 5 1972 36.088 73.420
## 6 1977 31.220 75.380
## 7 1982 39.854 77.110
## 8 1987 40.822 78.670
## 9 1992 41.674 79.360
## 10 1997 41.763 80.690
## 11 2002 42.129 82.000
## 12 2007 43.828 82.603
Of course it would be much more interesting to see which country contributed these extreme observations. Is the minimum (maximum) always coming from the same country? We tackle that with window functions shortly.
11.3.11 Grouped mutate
Sometimes you don’t want to collapse the \(n\) rows for each group into one row. You want to keep your groups, but compute within them.
<IP_ADDRESS> Computing with group-wise summaries
Let’s make a new variable that is the years of life expectancy gained (lost) relative to 1952, for each individual country. We group by country and use mutate()
to make a new variable. The first()
function extracts the first value from a vector. Notice that first()
is operating on the vector of life expectancies within each country group.
my_gap %>%
group_by(country) %>%
select(country, year, lifeExp) %>%
mutate(lifeExp_gain = lifeExp - first(lifeExp)) %>%
filter(year < 1963)
## # A tibble: 426 x 4
## # Groups: country [142]
## country year lifeExp lifeExp_gain
## <fctr> <int> <dbl> <dbl>
## 1 Afghanistan 1952 28.801 0.000
## 2 Afghanistan 1957 30.332 1.531
## 3 Afghanistan 1962 31.997 3.196
## 4 Albania 1952 55.230 0.000
## 5 Albania 1957 59.280 4.050
## 6 Albania 1962 64.820 9.590
## 7 Algeria 1952 43.077 0.000
## 8 Algeria 1957 45.685 2.608
## 9 Algeria 1962 48.303 5.226
## 10 Angola 1952 30.015 0.000
## # ... with 416 more rows
Within country, we take the difference between life expectancy in year \(i\) and life expectancy in 1952. Therefore we always see zeroes for 1952 and, for most countries, a sequence of positive and increasing numbers.
<IP_ADDRESS> Window functions
Window functions take \(n\) inputs and give back \(n\) outputs. Furthermore, the output depends on all the values. So rank()
is a window function but log()
is not. Here we use window functions based on ranks and offsets.
Let’s revisit the worst and best life expectancies in Asia over time, but retaining info about which country contributes these extreme values.
my_gap %>%
filter(continent == "Asia") %>%
select(year, country, lifeExp) %>%
group_by(year) %>%
filter(min_rank(desc(lifeExp)) < 2 | min_rank(lifeExp) < 2) %>%
arrange(year) %>%
print(n = Inf)
## # A tibble: 24 x 3
## # Groups: year [12]
## year country lifeExp
## <int> <fctr> <dbl>
## 1 1952 Afghanistan 28.801
## 2 1952 Israel 65.390
## 3 1957 Afghanistan 30.332
## 4 1957 Israel 67.840
## 5 1962 Afghanistan 31.997
## 6 1962 Israel 69.390
## 7 1967 Afghanistan 34.020
## 8 1967 Japan 71.430
## 9 1972 Afghanistan 36.088
## 10 1972 Japan 73.420
## 11 1977 Cambodia 31.220
## 12 1977 Japan 75.380
## 13 1982 Afghanistan 39.854
## 14 1982 Japan 77.110
## 15 1987 Afghanistan 40.822
## 16 1987 Japan 78.670
## 17 1992 Afghanistan 41.674
## 18 1992 Japan 79.360
## 19 1997 Afghanistan 41.763
## 20 1997 Japan 80.690
## 21 2002 Afghanistan 42.129
## 22 2002 Japan 82.000
## 23 2007 Afghanistan 43.828
## 24 2007 Japan 82.603
We see that (min = Afghanistan, max = Japan) is the most frequent result, but Cambodia and Israel pop up at least once each as the min or max, respectively. That table should make you impatient for our upcoming work on tidying and reshaping data! Wouldn’t it be nice to have one row per year?
How did that actually work? First, I store and view a partial that leaves off the filter()
statement. All of these operations should be familiar.
asia <- my_gap %>%
filter(continent == "Asia") %>%
select(year, country, lifeExp) %>%
group_by(year)
asia
## # A tibble: 396 x 3
## # Groups: year [12]
## year country lifeExp
## <int> <fctr> <dbl>
## 1 1952 Afghanistan 28.801
## 2 1957 Afghanistan 30.332
## 3 1962 Afghanistan 31.997
## 4 1967 Afghanistan 34.020
## 5 1972 Afghanistan 36.088
## 6 1977 Afghanistan 38.438
## 7 1982 Afghanistan 39.854
## 8 1987 Afghanistan 40.822
## 9 1992 Afghanistan 41.674
## 10 1997 Afghanistan 41.763
## # ... with 386 more rows
Now we apply a window function – min_rank()
. Since asia
is grouped by year, min_rank()
operates within mini-datasets, each for a specific year. Applied to the variable lifeExp
, min_rank()
returns the rank of each country’s observed life expectancy. FYI, the min
part just specifies how ties are broken. Here is an explicit peek at these within-year life expectancy ranks, in both the (default) ascending and descending order.
For concreteness, I use mutate()
to actually create these variables, even though I dropped this in the solution above. Let’s look at a bit of that.
asia %>%
mutate(le_rank = min_rank(lifeExp),
le_desc_rank = min_rank(desc(lifeExp))) %>%
filter(country %in% c("Afghanistan", "Japan", "Thailand"), year > 1995)
## # A tibble: 9 x 5
## # Groups: year [3]
## year country lifeExp le_rank le_desc_rank
## <int> <fctr> <dbl> <int> <int>
## 1 1997 Afghanistan 41.763 1 33
## 2 2002 Afghanistan 42.129 1 33
## 3 2007 Afghanistan 43.828 1 33
## 4 1997 Japan 80.690 33 1
## 5 2002 Japan 82.000 33 1
## 6 2007 Japan 82.603 33 1
## 7 1997 Thailand 67.521 12 22
## 8 2002 Thailand 68.564 12 22
## 9 2007 Thailand 70.616 12 22
Afghanistan tends to present 1’s in the le_rank
variable, Japan tends to present 1’s in the le_desc_rank
variable and other countries, like Thailand, present less extreme ranks.
You can understand the original filter()
statement now:
filter(min_rank(desc(lifeExp)) < 2 | min_rank(lifeExp) < 2)
These two sets of ranks are formed on-the-fly, within year group, and filter()
retains rows with rank less than 2, which means … the row with rank = 1. Since we do for ascending and descending ranks, we get both the min and the max.
If we had wanted just the min OR the max, an alternative approach using top_n()
would have worked.
my_gap %>%
filter(continent == "Asia") %>%
select(year, country, lifeExp) %>%
arrange(year) %>%
group_by(year) %>%
#top_n(1, wt = lifeExp) ## gets the min
top_n(1, wt = desc(lifeExp)) ## gets the max
## # A tibble: 12 x 3
## # Groups: year [12]
## year country lifeExp
## <int> <fctr> <dbl>
## 1 1952 Afghanistan 28.801
## 2 1957 Afghanistan 30.332
## 3 1962 Afghanistan 31.997
## 4 1967 Afghanistan 34.020
## 5 1972 Afghanistan 36.088
## 6 1977 Cambodia 31.220
## 7 1982 Afghanistan 39.854
## 8 1987 Afghanistan 40.822
## 9 1992 Afghanistan 41.674
## 10 1997 Afghanistan 41.763
## 11 2002 Afghanistan 42.129
## 12 2007 Afghanistan 43.828
11.3.12 Grand Finale
So let’s answer that “simple” question: which country experienced the sharpest 5-year drop in life expectancy? Recall that this excerpt of the Gapminder data only has data every five years, e.g. for 1952, 1957, etc. So this really means looking at life expectancy changes between adjacent timepoints.
At this point, that’s just too easy, so let’s do it by continent while we’re at it.
my_gap %>%
select(country, year, continent, lifeExp) %>%
group_by(continent, country) %>%
## within country, take (lifeExp in year i) - (lifeExp in year i - 1)
## positive means lifeExp went up, negative means it went down
mutate(le_delta = lifeExp - lag(lifeExp)) %>%
## within country, retain the worst lifeExp change = smallest or most negative
summarize(worst_le_delta = min(le_delta, na.rm = TRUE)) %>%
## within continent, retain the row with the lowest worst_le_delta
top_n(-1, wt = worst_le_delta) %>%
arrange(worst_le_delta)
## # A tibble: 5 x 3
## # Groups: continent [5]
## continent country worst_le_delta
## <fctr> <fctr> <dbl>
## 1 Africa Rwanda -20.421
## 2 Asia Cambodia -9.097
## 3 Americas El Salvador -1.511
## 4 Europe Montenegro -1.464
## 5 Oceania Australia 0.170
Ponder that for a while. The subject matter and the code. Mostly you’re seeing what genocide looks like in dry statistics on average life expectancy.
Break the code into pieces, starting at the top, and inspect the intermediate results. That’s certainly how I was able to write such a thing. These commands do not leap fully formed out of anyone’s forehead – they are built up gradually, with lots of errors and refinements along the way. I’m not even sure it’s a great idea to do so much manipulation in one fell swoop. Is the statement above really hard for you to read? If yes, then by all means break it into pieces and make some intermediate objects. Your code should be easy to write and read when you’re done.
11.3.13 Working with two datasets
When working with two or more datasets, we routinely join them. dplyr
adopts the SQL-dialect for joining datasets. Below are examples for those of us who don’t speak SQL so good. There are lots of Venn diagrams re: SQL joins on the interwebs, but I wanted R examples.
Full documentation for the dplyr package, which is developed by Hadley Wickham and Romain Francois on GitHub. The vignette on Two-table verbs covers the joins shown here.
11.3.14 Variable recoding with dplyr
recode
andrecode_factor
: Replace numeric values based on their position, and character values by their name;if_else
: Replace values based on a logical vector;case_when
: Vectorise multiple if and else if statements.
Recoding, when to use which function: - one-to-one, many-to-one: recode
and recode_factor
Download the NHTS 2009 data file for the demos here (Right click & select Save As…)
library(tidyverse)
# load NHTS2009 travel diaries subset
dd <- read_csv("data/NHTS2009_dd.csv")
## Parsed with column specification:
## cols(
## HOUSEID = col_integer(),
## PERSONID = col_character(),
## HHSIZE = col_integer(),
## HH_RACE = col_character(),
## HHFAMINC = col_character(),
## URBRUR = col_character(),
## TRIPPURP = col_character(),
## TRPTRANS = col_character(),
## TRVLMIN = col_integer(),
## TRPMILES = col_double()
## )
# recode race (HH_RACE column) according to data dictionary: http://nhts.ornl.gov/tables09/CodebookPage.aspx?id=951
dd %>% mutate(hh_race_str=recode(HH_RACE,
"01"="White",
"02"="African American, Black",
"03"="Asian Only",
"04"="American Indian, Alaskan Native",
"05"="Native Hawaiian, other Pacific",
"06"="Multiracial",
"07"="Hispanic/Mexican",
"97"="Other specify",
.default = as.character(NA) # any unspecified values would be assgined NA
)) %>%
select(HH_RACE, hh_race_str)
## # A tibble: 304 x 2
## HH_RACE hh_race_str
## <chr> <chr>
## 1 01 White
## 2 01 White
## 3 01 White
## 4 01 White
## 5 01 White
## 6 01 White
## 7 01 White
## 8 01 White
## 9 01 White
## 10 01 White
## # ... with 294 more rows
- a logical condition:
if_else
# code driving & non-driving based on travel modes (TRPTRANS column) data dictionary: http://nhts.ornl.gov/tables09/CodebookPage.aspx?id=1084
dd %>% mutate(driving=ifelse(TRPTRANS %in% c("01", "02", "03", "04", "05", "06", "07"), 1, 0),
driving=ifelse(TRPTRANS %in% c("-1", "-7", "-8", "-9"), NA, driving) # retain missing values as NA
) %>%
select(TRPTRANS, driving)
## # A tibble: 304 x 2
## TRPTRANS driving
## <chr> <dbl>
## 1 03 1
## 2 03 1
## 3 03 1
## 4 03 1
## 5 03 1
## 6 03 1
## 7 03 1
## 8 03 1
## 9 03 1
## 10 03 1
## # ... with 294 more rows
- multiple logical conditions:
case_when
# code driving & non-driving based on travel modes (TRPTRANS column) data dictionary: http://nhts.ornl.gov/tables09/CodebookPage.aspx?id=1084 use case_when
dd %>% mutate(driving=case_when(
TRPTRANS %in% c("01", "02", "03", "04", "05", "06", "07") ~ 1,
TRPTRANS %in% c("-1", "-7", "-8", "-9") ~ as.double(NA), # retain missing values as NA
TRUE ~ 0)) %>%
select(TRPTRANS, driving)
## # A tibble: 304 x 2
## TRPTRANS driving
## <chr> <dbl>
## 1 03 1
## 2 03 1
## 3 03 1
## 4 03 1
## 5 03 1
## 6 03 1
## 7 03 1
## 8 03 1
## 9 03 1
## 10 03 1
## # ... with 294 more rows
# reclassify households into low, med, high income based on HHFAMINC column data dictionary: http://nhts.ornl.gov/tables09/CodebookPage.aspx?id=949 with brackets [0, 30000, 6000]
dd <- dd %>% mutate(income_cat=case_when(
HHFAMINC %in% c("01", "02", "03", "04", "05", "06") ~ "low income",
HHFAMINC %in% c("07", "08", "09", "10", "11", "12") ~ "med income",
HHFAMINC %in% c("13", "14", "15", "16", "17", "18") ~ "high income",
TRUE ~ as.character(NA) # retain missing values as NA
))
# verify recodeing results with group_by & tally
dd %>% group_by(HHFAMINC, income_cat) %>%
tally()
## # A tibble: 13 x 3
## # Groups: HHFAMINC [?]
## HHFAMINC income_cat n
## <chr> <chr> <int>
## 1 01 low income 4
## 2 02 low income 2
## 3 03 low income 12
## 4 04 low income 2
## 5 06 low income 18
## 6 07 med income 6
## 7 08 med income 10
## 8 12 med income 7
## 9 14 high income 20
## 10 16 high income 38
## 11 17 high income 64
## 12 18 high income 115
## 13 -7 <NA> 6
11.3.15 Programming with dplyr
11.4 Exercise
- Filter days where there are missing values in bike counts and weather information. Count number of days with missing values on either bike counts or weather information;
- Calculate weekly, monthly, and annual bike counts from the daily bike counts data using dplyr verbs;
- Join the bike counts data with the weather data. Which type of joins works best here?
- With the NHTS2009 travel diaries data, how do you cacluate total miles traveled (using any modes) and miles traveled by driving for each household (hint: the TRPMILES column contains information of trip distance for each member of a household).
- [Challenge] How do you compute the average household-level miles driving per capita by income categories (low, med, high)?


From the range of TrustFLEX Use Cases Library available below, choose the one(s) that fits closly to your application. Each Use Case comes with an example (Python Notebook & C code) and its respective documentation.
TrustFLEX METHODOLOGY
To help your design journey, Microchip is offering this Use-case Tool.
It is a step by step guide for application developers to go from concept to
production.
Starting from identifying your Use Case, all the way to creating prototype ready
configuration and finally to setup a custom part number for their required
configuration before going in production.
This tool is intended to provide various Use Cases where secure elements provide
value for customers to reduce risk,
increase revenue or reduce cost in their applications.
In each use-case, we have provided following information for you to easily get
started.
You will be guided through the following process.
1. USE CASE IDENTIFICATION
2. TRANSACTION DIAGRAM
Once the use-case is identified, it is important to understand the communication flow between the Host MCU and Secure element for accomplishing the use-case with secure element. Generally each of the Use Case would consist in a host sending a “Challenge” and expecting a “Response”. This flow is called the transaction diagram.
In some use-cases, there could be more than one way to achieve the goal based on the secure element features and we will illustrate these paths and explain the pros/cons of each path for the user to select the path that fits best for them.
3. INFER CRYPTOGRAPHIC ASSETS
An asset relates to credentials, token, certificates, key(s) etc.. . A Policy relates to what a memory slot can do such as writing, reading, or both, if the slot is locked or not etc…
As part of the use-case configuration flow, certain cryptographic assets need to be stored inside the secure element and this section will explain the required assets needed along with the security policies needed and the importance of these assets as it pertains to the use-case.
At this stage of the document, it is assumed that the reader has good understanding of the use-case and also the communication protocol between the host MCU and secure element as well as various crypto assets needed in the secure element. It is time to allocate secure element slots for storing necessary cryptographic assets and set the appropriate policy settings. In each of the use-case pages, you will find proposed standard templates. If you want to make any changes to this configuration, you can go to the interactive tool in the Configurator tab to customize your configuration.
For development purpose, you will need to generate the development keys & certificates through the Jupyter Notebook:
Start Jupyter by launching Trust Platform GUI then run TrustFLEX\00_resource_generation\TFLXTLS_resource_generator.ipynb
4. SECURE ELEMENT CONFIGURATION
ATECC608B-TFLXTLS devices are already configured for Use Cases listed.
5. PROTOTYPING
Test the configuration and host/Secure Element transactions on the DM320118 prototyping platform (check "PROTYPING PLATFORM" section in START HERE)
Notebooks are executable tutorials allowing to prototype the entire set of transactions using the host PC and the actual Secure Element. Start Jupyter by launching Trust Platform GUI then run the selected Use Case(s). As an example for Firmware Validation: "TrustFLEX\02_firmware_validation\notebook\TFLXTLS_firmware_validation.ipynb"
Cryptoauthlib is C library which supports Microchip CryptoAuth devices. A collection of reference C code examples are available for the most common use cases. As an example for Firmware Validation, navigate to : "TrustFLEX\02_firmware_validation\c" and retrieve the C code to be implemented in your embedded project.
6. SECRET EXCHANGE PROCESS
The Secret Exchange process consists of securely transmitting the secrets, keys and certificate authority to Microchip Hardware Security Modules (HSMs) to allow for volume production
The TrustPlatform Design Suite provides the TrustFLEX Configurator to generate the encrypted secret exchange files.
7. PRODUCTION GRADE PROVISIONING
Once Secrets, keys and Certificate Authorities are securely loaded in Microchip HSMs, the products can be produced from very low to extremely high volume without the need for any further setup thanks to the extreme scalability of Microchip's provisioning system.


this is normal test
this is paragraph text which has word spacing "2em"
this is span text which has letterspacing ".3em">
this is h2 text with text decoration "overline"
this is h2 text with text align ""
this is h2 text with text align ""
this is h5 text with text align ""


[gecode-users] Reified Global Constraints
Pierre Flener
Pierre.Flener at it.uu.se
Mon Apr 23 12:03:38 CEST 2012
See http://soda.swedish-ict.se/5194/ for a recipe on how to reify many global constraints. For reifying Distinct (called AllDifferent in that technical report), you need Sorted (called Sort there).
Cheers,
Pierre
Guido Tack wrote, on 2012-04-23 06:00:
> Hi,
>
> you can look through the API documentation (or the int.hh header file) for the constraints that take an additional BoolVar as the last argument, those are the ones that support reification. Concerning your concrete question, there are reified linear constraints but no reified distinct.
>
> Cheers,
> Guido
>
> --
> Guido Tack
> http://www.csse.monash.edu/~guidot/
>
>
>
> On 23/04/2012, at 1:48 PM, Md Solimul Chowdhury wrote:
>
>> Hi,
>>
>> Greetings.
>> I am currently engaged with a research project, for which I need to model CSPs with reified global constraints. In the Gecode manual, "Modelling and Programming with Gecode", I did not find much discussion on modeling CSPs with reified global constraints. In the current version of Gecode, which global constraints have reified versions? I am particularly interested with the reified versions of Linear and Distinct global constraints, if there is any. Any pointer to a resource, which contains a sample Gecode model with reified global constraints will be appreciated.
>>
>> Thanks in advance.
>>
>> Solimul Chowdhury
>> Department of Computing Science
>> University of Alberta, Canada.
>>
>>
>>
>> _______________________________________________
>> Gecode users mailing list
>> users at gecode.org <mailto:users at gecode.org>
>> https://www.gecode.org/mailman/listinfo/gecode-users
>
>
>
> _______________________________________________
> Gecode users mailing list
> users at gecode.org
> https://www.gecode.org/mailman/listinfo/gecode-users
More information about the users
mailing list


I would like you to answer the following questions in a short answer format using Markdown.
For questions that ask for a list, use the appropriate Markdown syntax to create either ordered or unordered lists.
Use bold and italic text for emphasis in your responses.
GitHub Username: ectomlin Team name: Group 3 Today's date: 10/12/16
So far we have used tools such as * GitHub * C9 * Pandoc * Markdown * HTML * Command Line
** So far I have found GitHub the most potentially useful. **
** I have found GitHub the most useful due to its ability to host and share source files with your peers which helps facilitate collaboration. **
** The tool that I would like to learn more about would be HTML because it seems to have so many usful applications in web development which I would love to become more proficient in. **
When you are finished with the questions in file:


Home
Travel Arrangements
Our travel services
Be aware that all payments are only made via EFT services or by use of credit cards or debit cards
1.Travel requirements
- Passport/National ID
- Health report
- Visa
- Insurance e.g Health and life insurance
2.Travel Services
- Flights
- Taxi services
- Private boat and cruise ship travel services
- Vaccation services
BOOK NOW


AWS Data Protection Workshops
If you are considering protecting data in your AWS environment using methods such as encryption or certificate management, these workshops can help you learn in depth.
Ubiquitous Encryption
Data encryption provides a strong layer of security to protect data that you store within AWS services. AWS services can help you achieve ubiquitous encryption for data in transit as well as data at rest.
Workshops
These workshops demonstrates server side encryption, client side encryption and certfificate management concepts within AWS. For example :
| Title | Description | Learning Time | Teaching Time With Discussion |
|---|---|---|---|
| Level 200: Server Side Encryption | This workshop demonstrates server side encryption on S3 | 15 min | 30 min |
| Level 200: Client Side Encryption | This workshop demonstrates client side encryption | 15 min | 30 min |
| Level 200: Client Side Encryption With Data Key Caching | This workshop demonstrates client side encryption with data key caching | 15 min | 30 min |
| Level 300: Creating Private Certs ACM Private Certificate Authority - Mode-1 | This workshop demonstrates how you create a AWS Certificate Manager private certificate authority(PCA) and use ACM PCA to sign a CSR to create a private certificate | 40 mins | 1 hour |
| Level 300: Creating Private Certs ACM Private Certificate Authority - Mode-2 | This workshop demonstrates how you create a AWS Certificate Manager private certificate authority and use this CA to create private X.509 certififcates for a private domain | 40 mins | 1 hour |
| Level 300: Creating a complete private CA hierarchy on AWS | This workshop demonstrates how you create a AWS Certificate Manager private certificate authority and use this CA to create private X.509 certififcates for a private domain and apply the cert on an application load balancer | 1 hour | 1 hour 30 mins |
| Level 300: ACM Private CA Best Practices, Monitoring and Templates for code signing certificates | This workshop demonstrates private CA best practices, monitoring and use of templates for code siging certs | 1 hour 30 mins | 2 hours |
| Level 300: KMS Managed keys and ACM Private CA best practices combo workshop | This workshop demonstrates to use KMS with AWS managed keys and completing a complete CA hiearchy on AWS | 1 hour 40 mins | 1 hour |
License Summary
This sample code is made available under a modified MIT license. See the LICENSE file.


| China GDP YoY (%) | ||||||
| Release Dt | For Quarter | Market Expectation | Kshitij Expectation | Previous | Released | Revision |
| 18-Jul-17 | Q2 2017 | 6.80 | - | 6.90 | 6.90 | - |
| 18-Oct-17 | Q3 2017 | 6.80 | - | 6.90 | 6.80 | - |
| 18-Jan-18 | Q4 2017 | 6.70 | - | 6.80 | 6.80 | - |
| 17-Apr-18 | Q1 2018 | - | - | 6.80 | - | - |
| Copyright: Kshitij Consultancy Services |


Jersey RESTful Web Application!
Jersey resource
Visit
Project Jersey website
for more information on Jersey!


WITNESS LIST State Recreational Resources Committee March 8, 2001-8:00A HB 1208 For: Dierschke, Daniel (Self) Joiner, Gary (Texas Farm Bureau) Against: Sybert, Brian (Sierra Club, Lone Star Chapter) On: Cooke, Jerry (Texas Parks and Wildlife Department) Sinclair, David (Texas Parks and Wildlife Department)


|
BitShares-Core
6.1.0
BitShares blockchain implementation and command-line interface software
|
Public Member Functions | |
| get_required_fees_helper (const fee_schedule &_current_fee_schedule, const price &_core_exchange_rate, uint32_t _max_recursion) | |
| fc::variant | set_op_fees (operation &op) |
| fc::variant | set_proposal_create_op_fees (operation &proposal_create_op) |
Public Attributes | |
| const fee_schedule & | current_fee_schedule |
| const price & | core_exchange_rate |
| uint32_t | max_recursion |
| uint32_t | current_recursion = 0 |
Container method for mutually recursive functions used to implement get_required_fees() with potentially nested proposals.
Definition at line 2691 of file database_api.cpp.
|
inline |
Definition at line 2693 of file database_api.cpp.
|
inline |
Definition at line 2703 of file database_api.cpp.
|
inline |
Definition at line 2718 of file database_api.cpp.
| const price& graphene::app::get_required_fees_helper::core_exchange_rate |
Definition at line 2738 of file database_api.cpp.
| const fee_schedule& graphene::app::get_required_fees_helper::current_fee_schedule |
Definition at line 2737 of file database_api.cpp.
| uint32_t graphene::app::get_required_fees_helper::current_recursion = 0 |
Definition at line 2740 of file database_api.cpp.
| uint32_t graphene::app::get_required_fees_helper::max_recursion |
Definition at line 2739 of file database_api.cpp.


Triggers
Mouseenter
{{alert.msg}}
ÊÕ²Ø
¾Ù±¨
Copy
"This was your text: {{ copyMessage }}" was copied!


Welcome to Artiva! Our store contains different types of home decoration items. Made with love and care all for and from home! Decorate your home with beautiful, rare and aesthetic items! Happy Shopping!


export default `

Blogging about programming gets more and more popular. Is it hard to begin writing? See for yourself.

For the past year I have observed blogging trends. I’ll share with you my research. You can draw your own conclusions.

Be careful! This is powerful knowledge. Please use it carefully and remember about this article when you’ll get to the top.

Tips to become fulfilled blogger:

write on technical topic which has already been covered by other programmers on their blogs (“Better to have, and not need, than to need, and not have.”)

use WordPress (“Every blogger should use it.”)

create tutorial with 20 parts of mastering popular library (well it’ll be an achievement if you get to finish it, not to mention your readers)

never ever do the marketing part of your blogs right (“readers? who needs them?”)

If you complete these 4 steps I promise you — you’ll be ready to continue your journey to constantly getting 100k monthly views on your articles.

Important! Make sure your site is published (for example on localhost) and ping localhost responds with something like this:

PING localhost (<IP_ADDRESS>): 56 data bytes

64 bytes from <IP_ADDRESS>: icmp_seq=0 ttl=64 time=0.059 ms

64 bytes from <IP_ADDRESS>: icmp_seq=1 ttl=64 time=0.053 ms

Blog responds pretty fast. It means we did optimization part right. Site is ready and technical part is done.

Help!

If you didn’t complete these steps and you need some help - feel free to use these tips to get first part of our preparations done:

Technical topic which has already been covered: PHP — create CRUD application with MySQL

Long tutorial that no one will read: Master Angular 3 in 100 hours

WordPress download link: https://wordpress.org/download/

If you have naming problem with your blog, you can choose one of the solutions from here.

Now — you have lots of ideas and a site where you can publish your articles! You’re almost ready to write your first article! But hey, do you want it to be awesome? Stay with me for another moment. I’ll tell you how to make it great.

Awesomizers

You can be the best writer, but your articles will never get attention without being awesome. How to make great post? Awesomize it! Here’s a list of awesomizers:

MacBook

Doesn’t it look awesome?

You definitely need a MacBook. You get it and you’re already a blogger. Even if you write only Google search queries to find code on StackOverflow. Ideas come to your mind more often when you own Apple device. Its keyboard almost writes text for you.  When you wake up it’ll still be on. You can continue writing. It even lasts longer than your relationships.

When Magic Mouse runs out of battery you have to charge it. You can’t use it when it’s recharging. Thanks to this phenomenal design you can safely get back to writing. After all, all you need is a keyboard.

Epic feature of Magic Mouse. Writer-friendly.

Facebook page and sponsored ads

You totally need it. It’s almost like cheating. Don’t worry you will have 20 likes when you begin. You can buy them. I didn’t tell you earlier, but sponsored ads are key to becoming good writer. Do you understand correlation between money spent on promoting your article and clicks? More money spent, more clicks, more readers. This is 100% guaranteed trick to become good blogger with lots of readers.

You could stop reading and already become top 1 blogger in the world. However, if you want to go hard way, because you like challenging yourself, continue reading.

Perks:

Your enemies and people who don’t like your site will also see it. Do you get this feeling of satisfaction and smile on your face already?

You can get infinite number of readers — just as much as you’d like to have! Just throw money at Facebook people and you’ll get what you want. Disclaimer: Please don’t do so on conferences. Some people will think that’s rude.

At last you have something to do with money lying in your bank account.

Did you know that Facebook has its own awesomizer? Check their iOS application.

Sunglasses

You think wearing sunglasses is totally unrelated to writing about programming? You’re absolutely right. At first glance it looks like this. But when you investigate deeply and do research you’ll find surprising fact. Here’s the data: every famous writer at least once in his life wore sunglasses.

Sunglasses + beard + that shirt = SWAG

Perks:

SWAG

Wearing sunglasses will reduce the amount of rays reaching the eye by filtering as much as 80 percent of the rays.  Here are some optional awesomizers:

YouTube channel

Ferrari

Rolex

Two girlfriends and a wife

Beard

Believe in yourself and start writing! If you’ll encounter any crisis or lack of faith, please remember this sentence:

Why program when you can write about programming

`
|


#
Title
Comment
Module
Reporter
Status
Owner
Status
Owner
Severity
Created
Updated
Due
1
App crashes when dragged by
Eddie, can you please.
Main App
Ravan
Open
Eddie
Open
Eddie
High
Feb-1, 2016
Mar-13, 2016
Apr-4, 2016
2
Unable to save the data when
Let me take this up.
Save Screen
Kiran
Open
Vasyan
Open
Vasyan
Medium
Mar-3, 2016
Apr-4, 2016
May-15, 2016
3
Improper alignment in Export
Hey, I'm not a.
Exports
Ravan
In progress
Petia
In progress
Petia
Low
Apr-14, 2016
Jun-6, 2016
May-5, 2016


I stand with the Black community against systemic racism, police violence and brutality, intolerance, and hate in the United States and worldwide. We must all demand better from our leaders, and ourselves. Stop tolerating intolerance.
While you're here, please consider making a donation to Black Girls CODE, who do great, important work to provide opportunity to underprivileged girls interested in tech, or any organization working toward equity and safety for all, not just the privileged. Thank you.
Ruby on Rails news and tips, and other ideas and surprises from Aaron at Everyday Rails. Delivered to your inbox on no particular set schedule.


RequestParams
Direct Subclass:
Represents any query parameters to use with a request.
Method Summary
| Public Methods | ||
| public |
Convert params for the request to a an object. |
|
| public |
Convert params for the request to a query string. |


| Miscellaneous Structures | |
| uvm_void | The uvm_void class is the base class for all UVM classes. |
| uvm_utils #(TYPE,FIELD) | This class contains useful template functions. |
The uvm_void class is the base class for all UVM classes. It is an abstract class with no data members or functions. It allows for generic containers of objects to be created, similar to a void pointer in the C programming language. User classes derived directly from uvm_void inherit none of the UVM functionality, but such classes may be placed in uvm_void-typed containers along with other UVM objects.
| uvm_void | ||
| The uvm_void class is the base class for all UVM classes. | ||
| Class Declaration | ||
|
This class contains useful template functions.
| uvm_utils #(TYPE,FIELD) | ||||||||||||||||||||||
| This class contains useful template functions. | ||||||||||||||||||||||
| Class Declaration | ||||||||||||||||||||||
| ||||||||||||||||||||||
| Methods | ||||||||||||||||||||||
| find_all | Recursively finds all component instances of the parameter type TYPE, starting with the component given by start. | |||||||||||||||||||||
| get_config | This method gets the object config of type TYPE associated with component comp. |
static function types_t find_all( uvm_component start )
Recursively finds all component instances of the parameter type TYPE, starting with the component given by start. Uses uvm_root::find_all.
static function TYPE get_config( uvm_component comp, bit is_fatal )
This method gets the object config of type TYPE associated with component comp. We check for the two kinds of error which may occur with this kind of operation.
The uvm_void class is the base class for all UVM classes.
virtual class uvm_void
This class contains useful template functions.
class uvm_utils #( type TYPE = int, string FIELD = "config" )
Recursively finds all component instances of the parameter type TYPE, starting with the component given by start.
static function types_t find_all( uvm_component start )
This method gets the object config of type TYPE associated with component comp.
static function TYPE get_config( uvm_component comp, bit is_fatal )
Returns the component handle (find) or list of components handles (find_all) matching a given string.
function void find_all ( string comp_match, ref uvm_component comps[$], input uvm_component comp = null )


EBD - Easton Bible DIctionary
Calling
CALLING
"CALLING "a profession, or as we usually say, a vocation (
1 Corinthians 7:20
). The “hope of your calling” in
Ephesians 4:4
is the hope resulting from your being called into the kingdom of God.
"CALLING "a profession, or as we usually say, a vocation (1 Corinthians 7:20). The “hope of your calling” in Ephesians 4:4 is the hope resulting from your being called into the kingdom of God.


{% if ( ("false" == post.selection_A1[0]) and ("true" == post.selection_A2[0]) and ("false" == post.selection_A3[0]) and ("true" == post.selection_A4[0]) ) %}


Artist - Craig Thurman
American Apparel™ T Shirts
100% Cotton, Made in USA
VARIATIONS:
|
Men's Fine Jersey Short Sleeve T Shirt Creme' |
$9.99 64% off! |
| SIZES: | l | . | xl | (size chart) |


« CSS « CSS Reference « CSS Reference:Mozilla Extensions
:-moz-system-metric(windows-default-theme)
will match an element if the user is currently using one of the following themes in Windows: Luna, Royale, Zune, or Aero (i.e., Vista Basic, Vista Standard, or Aero Glass). This will exclude Windows Classic themes as well as third-party themes.
This selector is intended for use mainly by theme developers.


The Manchester Free Software group has invited me to give a talk on GNU-R.
http://libreplanet.org/wiki/Manchester/2010-10-19
- Madlab (Manchester Digital Laboratory) Upstairs, 36-40 Edge Street, Manchester, M4 1HN (between Thomas St and the Craft Centre, opposite A Bar Called Common).
- Tuesday, 19th October 2010 (3rd Tuesday of the month) 19:00 – 20:30
R is a system for statistical computation and graphics. At Infonomics we use R to handle much of our analytic work, particularly where there is repeated processing of data, complex statistical models, or requirements for data graphics that go beyond the limitations of spreadsheets. We’ve used it, for example, in the AutoReporter.
The talk will provide: an introduction to R, discussion of when (and when not) to use R, and a guided tour of it’s capabilities with examples. It’s also a chance to learn about the secrets of some of our tools of the trade. We expect that audience will comprise those with a interest in data/ statistics, software and/ or visualisation.
Manchester Free Software was formed in response to the growing need for a group based in the Manchester area that focuses on Free Software and GNU/Linux primarily, but also on issues such as Digital Restrictions Management and other issues which infringe on the freedoms of computer users.


--- layout: post title: Show Amazon book reviews on your site with the Product Advertising API date: 2012-11-10 18:48:40.000000000 +01:00 type: post published: true status: publish categories: - Coding tags: - amazon - APIs - books - Product Advertising API meta: _edit_last: '1' _thumbnail_id: '2260' dsq_thread_id: '922094018' author: login: bbWebdesign email<EMAIL_ADDRESS>display_name: Bob first_name: Bob last_name: Belderbos ---
Some months ago I added book reviews from Amazon to My Reading List. Under Reviews, when you click "Amazon" you get an overlay with the 3 most useful reviews. In this post I show you how to do it.
I use Amazon all the time to look if a particular book is worth my time. Hence book reviews had to be in this app. I found a good PHP class to do this easily: Amazon-ECS-PHP-Library. Using this class the app generates an URL to an Amazon page with only the reviews on it (e.g. http://www.amazon.com/reviews/iframe?akid=..more..parameters..), based on its ISBN number. This URL is linked to under Reviews: "Amazon". When clicked, I use Fancybox (discussed previously) to load the URL in an overlay (iframe). See the images below.
Note that My Reading List uses the Google Books API which returns short and long ISBN numbers (10 and 13 digits respectively, about ISBN). The 10 digit string is usually equal to the ASIN which is the "Amazon Standard Identification Number". If there is no response from the short ISBN/ ASIN, I convert the longer ISBN to ASIN and try with that one. I had to add the "lookupIsbn" method to the Amazon ECS class to be able to do this. With the two ISBN types supported I got a response URL for almost all the books I have tested so far.
I was considering caching the Amazon iframe URLs, but they are only valid for 24 hours so I decided to generate them on the fly for now.
This is the Practical Vim page:
# see comment above about 10 and 13 digit ISBNs if($reviews = getAmazonReviews($book['ISBN_10'])) { $amazonReviewsIframe = $reviews; } else { $asin = isbnToAsin($book['ISBN_13']); $amazonReviewsIframe = getAmazonReviews($asin); } .. if($amazonReviewsIframe) { echo "Amazon"; } (functions) # get the first two values from the Product Advertising API, # last 2 values are needed for Amazon-ECS-PHP-Library define("API_KEY", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"); define("API_SECRET", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"); define("COUNTRY_CODE", "com"); define("ASSOC_TAG", "myrealis"); function amazonApi() { # https://github.com/Exeu/Amazon-ECS-PHP-Library/blob/master/lib/AmazonECS.class.php require_once 'AmazonECS.class.php'; $client = new AmazonECS(API_KEY, API_SECRET, COUNTRY_CODE, ASSOC_TAG); return $client; } function getAmazonReviews($asin) { $client = amazonApi(); $response = $client->category('Books')->responseGroup('Reviews')->search($asin); if($response->Items->Item->ASIN == $asin) { return $response->Items->Item->CustomerReviews->IFrameURL; } else { return False; } } function isbnToAsin($isbn){ $client = amazonApi(); # I extended the AmazonECS.class with the "lookupIsbn" function $response = $client->category('Books')->lookupIsbn($isbn); if(isset($response->Items->Item->ASIN)) { return $response->Items->Item->ASIN; } else { return False; } } # added inside the AmazonECS.class .. public function lookupIsbn($isbn) { $params = $this->buildRequestParams('ItemLookup', array( 'ItemId' => $isbn, 'IdType' => 'ISBN', 'SearchIndex' => 'Books' )); return $this->returnData( $this->performSoapRequest("ItemLookup", $params) ); }


background processing More...
#include <hwlib-background.hpp>
Public Member Functions | |
| background () | |
| ~background () | |
| virtual void | work ()=0 |
| Public Member Functions inherited from hwlib::noncopyable | |
| noncopyable (const noncopyable &)=delete | |
| noncopyable & | operator= (const noncopyable &)=delete |
Static Public Member Functions | |
| static void | do_background_work () |
| static void HWLIB_NORETURN | run () |
background processing
This class implements run-to-completion style background processing.
A class that needs background processing must inherit from background and implement the work function. This work function will be called from the wait_s(), wait_ms(), wait_us() etc. functions.
When an application contains background work, all plain wait functions can take longer than the specified time, up to the run time of the longest runtime of the work() functions.
No background work will be done from delay calls made while a work() function is running.
For all background jobs: be careful to preserve the object!
|
inline |
background constructor
The constructor will add this backround item to the list of backround items.
|
inline |
background destructor
The destructor will remove this backround item from the list of backround items.
|
inlinestatic |
do background work
This function is called by the wait functions to do background work.
|
inlinestatic |
keep doing background work
Call this function instead of terminating the application to continue performing the background work.
|
pure virtual |
background work function
This function will be called to do backround work for its class.
Implemented in hwlib::blinker.


---
title: ABOUT
pagina: About
group: "navigation"
order: 1
---
{% include head.html %}
{% include nav.html %}
WHAT IS FUNDREQUEST?
FundRequest is a monetization platform built on blockchain technology, that allows anybody to fund open issues on any open source project in a fast and easy way. Funding a request takes only a minute, and doesn’t require any coding skills.
With FundRequest, any user can create a contractual reward to solve a problem, fix a bug or implement a feature. Funds are allocated to a specific issue, and when a developer solves the problem or develops the feature, he/she receives the reward.
At first, FundRequest will be integrating with Github and Stack Exchange, but our goal is to evolve into a system that can be used to fund and reward any community platform.
Still want to find out more? Read the FundRequest White Paper
HOW WE MAKE THE DIFFERENCE
- Talented and complementary team, surrounded by advisors with extensive crypto experience.
- Fresh incentive: A whole new marketplace to fund Open Source Software & reward contributors.
- Decentralized, fully secure and failproof.
- Quick and easy system of funding, with an intuitive front-end application for online and mobile use of the FundRequest service. One of the milestones we've included in our roadmap is the development of a browser add-on.
- Reputation system for developers: we intend to integrate a dynamic profile for every developer, logging their contributions and earnings.
HOW IT WORKS
With FundRequest, users can request and reward any OSS development issue in just a few clicks. Developers can then propose their solution for a feature request or bugfix. Whoever comes up with the best solution gets the reward – it’s safe and simple!
Find out just how easy it is to Fund a Request.
{% include twocols.html %}
{% include participate.html %}
{% include footer.html %}


Pig Dice
Game Rules
- If the player rolls a 1, they score nothing and it's becomes the next the player's turn
- If the player rolls any other number, it is added to their turn total and the player's turn continues
- If the player chooses to "hold" their turn total is added to their score, and it becomes the next player's turn
First Player to 100 pts wins!
Rules
So You Want To Play The Pig!!
score
Total
score
Total


No signup, no plugin, no installation and no payment
Resize and Reposition video screens
You can sketch anything you want in the chat.
Responsive web design and Cross-platform application
Your information is secure with us. Our website is free of virus and malwares. Sketchat doesn’t place cookies on your browser, so use our website with confidence.


{{ userProfile?.firstName }} {{ userProfile?.lastName }}
If you would like to collaborate and talk about the project, you can contact me on links below


--- layout: default title: Contact permalink: contact.html ---
Your Name:
Email (if you would like a reply):
Subject:
Your message:


A broad collection of African legislation data in machine-readable Akoma Ntoso XML. Accurate, comprehensive, uniform, and up-to-date.
Use Laws.Africa’s broad collection of machine-readable African legislation in your business, apps, research and analysis. Comprehensive, continuously updated, and easy to integrate into your apps and machine learning pipelines.
We monitor a wide range of sources to ensure our legislation data is accurate and up-to-date. New laws and amendments are available within ten business days in most countries. Work with both current and historical versions and track the changes that were made.
We use Akoma Ntoso XML, the open, non-proprietary industry standard for legislative documents. It’s machine-readable and separates content from structure and presentation. This makes it a powerful building block that is easy to integrate into your applications, research tools or machine learning pipeline.
Integrate African legislation into your machine learning pipeline, including natural language processing, topic modeling, machine translation, document clustering and semantic tagging. Our legislation data is uniformly structured across all our country and subject-area collections, making bulk analysis straightforward.
Rich JSON metadata includes original publication details, amendments, commencements, repeals and a detailed Table of Contents for each law. We provide legislative content in multiple formats: Akoma Ntoso XML, presentation-ready HTML, ePUB, and print-ready PDF.
We’re experts in working with Akoma Ntoso XML and legislative data. We can provide your development team with technical guidance on integrating with our APIs and data. Let your developers focus on building features, not on understanding XML and the law.
Flexible options for commercial and non-commercial uses.
FREE for non-commercial uses.
Permissive licensing for commercial use cases.


American Whiskey Brand Forgets Brits Are a Nation of Binge Drinkers With Its 2-for-1 Black Friday Deal
by Shabana ArifThis weekend you can get two for Old Fashioned cocktails to celebrate Thanksgiving,but this sounds an awful lot like a Black Friday deal.

"We’ve all got that friend who owes us a drink or two, so make the most of it this November and grab your free Wild Turkey Old Fashioned at a bar near you!” says Joseph St Clair Ford, Brand Ambassador at Wild Turkey UK. If your mates don't pony up, you can always pick up the tab and then slowly pour out the second free cocktail onto the floor while making unwavering eye contact with them, and ignoring the protests of the irate bar staff.
Only 20 bars across the country are participating, and you can see if there are any in your vicinity below:
- The Con Club, Altrincham
- Hideout, Bath
- Golden Pineapple, Brighton
- Pennyroyal, Cardiff
- Bullard & Worth, Edinburgh
- Five March, Glasgow
- The Domino, Leeds
- Smokestack, Leeds
- Manhattan34, Leicester
- Goat, London
- Heads & Tails, London
- Jack Solomon's, London
- Jones Family Project, London
- London Cocktail Club – Shoreditch, London
- Macellaio Northcote, London
- Sophie's Steakhouse, London
- Two Hundred Rye Lane, London
- Common, Manchester
- A Whisky Affair, Nottingham
- Raouls, Oxford
The offer is running from now until December 1, so make the most of it and get sozzled (responsibly) this weekend.


Visit our site at http://www.entertainmentcruises.com
CELEBRATE EASTER IN STYLE.
Hop aboard Chicago’s most exciting Easter Brunch. Bring the whole
family on a special Mystic Blue Cruise March 31st and make an awesome
memory.
You’ll enjoy:
A visit from the Easter Bunny
Goodie bags for the kids
Tasty kid-friendly buffets
The best views of the Chicago skyline
SAVE 15% on your cruise for four or more!Just use promo code EASTER4
when booking.
KIDS CAN STILL CRUISE FREE!
Extended to 3/10/13: Kids Cruise Free aboard Easter Brunch when you
call<PHONE_NUMBER> to reserve. Hurry, only valid on a limited number
of orders. Learn more
(http://www.mysticbluecruises.com/Chicago/navy-pier-easter-brunch-cruise).
Book Now
(http://reservations.entertainmentcruises.com/search/?metro=Chicago&pax=1-19&tod=Any&product=Mystic_d%/13)
|
Pricing
(http://reservations.entertainmentcruises.com/search/?metro=Chicago&pax=1-19&tod=Any&product=Mystic_d%/13)
|
Directions (http://www.mysticbluecruises.com/Chicago/directions) |
FAQs
(http://www.mysticbluecruises.com/Chicago/frequently-asked-questions)
About Us
(http://www.entertainmentcruises.com/Entertainment-Cruises/aboutus )
| Privacy Policy
(http://www.entertainmentcruises.com/Entertainment-Cruises/privacypolicy
) | Our Service System
(http://www.entertainmentcruises.com/Entertainment-Cruises/our-service-system
) | Contact Us
(http://www.entertainmentcruises.com/Entertainment-Cruises/contactus
) | Email Sign-up (http://mysticbluecruises.com/Chicago/email-sign-up
)
Mystic Blue Cruises Chicago | 401 East Illinois Street, Suite 310 |
Chicago, IL 60611
*Limit 1 child per regularly priced adult ticket. Limit 2 free
children under 12 per order. Prices subject to change, certain
restrictions may apply. Promotions are not valid on previously
purchased tickets and may not be combined
with any other offer. No exchanges or refunds. Not all seats are
discounted.
Make a lasting memory this year and celebrate Easter out on Lake
Michigan.
Use promo code EASTER4 to save on parties of 4 or more.View HTML
online here (http://archives.subscribermail.com/msg/c6799c36276c4f7dbc1aeb6f30de375e.htm).
Safely Unsubscribe
http://app.subscribermail.com/unsub.cfm?tempid=c6799c36276c4f7dbc1aeb6f30de375e&mailId=52e165471d4e49dfa7ffeb6f30de375e
Send this mail to your friend.
http://app.subscribermail.com/send_friend.cfm?template=c6799c36276c4f7dbc1aeb6f30de375e&mailid=52e165471d4e49dfa7ffeb6f30de375e
Powered by SubscriberMail http://www.subscribermail.com
Entertainment Cruises401 E. Illinois StreetChicago, Illinois 60611