I finally succumbed to the peer pressure. After I noticed all the cool kids were moving their blogs to static sites, I decided to take the plunge. I could have gone the easy route and just created a blog on github pages with some of their templates but I wanted to geek out a little bit more. This won’t be a how-to guide on static site generators. There are already plenty of guides out there. I suggest starting with the SSG section of Matt Makai’s excellent Full Stack Python. Instead, I wanted to provide some tips and lessons learned from my experience.
Why
-
I wanted to write my posts in a format that was simple and could be done from any text editor. In my case that meant Markdown.
-
Version control for my source content as well as the generated output.
-
I absolutely abhorred having to log into my Wordpress admin site just to write a simple article. The more I could get out of my own way the more content I can produce.
Package Mgmt.
If you only take away one thing from this article it’s this. Please use Conda package manager when installing Python packages. I know that most documentation has you using pip to install packages but one of pip’s biggest drawbacks is it doesn’t track dependencies for non-python packages. Since the ability to import Wordpress xml files relies heavily on parsers that aren’t part of the python ecosystem pip has no way of knowing if these packages are compatible or even installed in the first place. I’ll say it again.  For a more in-depth comparison of pip and conda check out @jakevdp‘s excellent post.
Pelican
I decided to use Pelican to generate my static site. The biggest reason for me was that it was written in Python. If you decide to use Pelican as well you might be wondering why there is a pelicanconf.py AND a publishconf.py file. Both files are utterly the same except one is used for dev/test and the other is used when generating your site for production. The biggest reason for keeping them separate which I could find is that you typically don’t want feed generation or plugins like comments or google analytics in your dev environment.
Github Pages
I decided to use Github Pages because I’d eventually like to use some sort of automation (TravisCI) to automatically publish articles to my site everytime I push with git. Github Pages uses Jekyll behind the scenes so there is a trick to let Github know that I didn’t use Jekyll to build my site. Create a empty file called ‘.nojekyll’ and place it in the following path ‘content/extra’. The folder structure would look similar to what’s below. This prevents Github from trying to parse my site as a Jekyll site.
+— content
|+—— extra
|+————-.nojekyll
To make sure that the file is included in your output make sure to add the following to your publishconf.py file.
STATIC_PATHS = ['extra/.nojekyll']
EXTRA_PATH_METADATA = {'extra/.nojekyll': {'path': '.nojekyll'}
You can add other files here as well to make sure they are included in the generated output. This includes your favicon and robots.txt.
HTTPS
Ever since 2016 Github automatically enables https for all github pages repositories. This is great unless you happen to use a custom domain for your site. Github does not currently support https for custom domain names. Luckily, there are several articles describing how to use Cloudflare to secure traffic between users and Cloudflare. Unforutnately it can’t secure traffic between Cloudflare and github pages with custom domains but it still greatly reduces the attack surface. Cloudflare’s documentation is pretty solid when it comes to setting it up.
I know it’s a little meta to write a blog post about my blog but if I can help save you some time, so be it. Come on, jump on the static site band wagon. Everyone’s doing it.


Help System
Menu for the XCL12 Package
Menu for the XCL12 Package
- compass
- Draw north and east arrows.
- disconlab
- Display image and overlay contours and coordinates.
- dsimg
- Save the image display buffer to an image.
- hltorgb
- Transform brightness and hue to red, green, and blue.
- im2gki
- Send an image to a IRAF GIO graphics device.
- imdisp_pos
- Determine image location in image display.
- mosaic_display
- Display many images in a single image display buffer.
- overlap
- Overlap two images by a certain amount of lines or columns.
- rashead
- Show rasterfile header information.
- rastoim
- Convert rasterfile to IRAF image.
- saodump
- Make image and colormap files from SAOimage display.
- scmapc
- Reformat SAOimage colormap for Celco.
- (Type
"help sdisplay opt=sys" for more information about the 'sdisplay' package).


Ocean [aa02], ocean, in Crystal Sea
Last updated Turn #128
Ocean [aa02], ocean, in Crystal Sea
------------------------------------------------------------------------
6: The Savvy Aardvark [ha5r], ship, 2 hulls, 1 rowing port, 6 sails,
6: 16% damaged, arrived from Small Swamp [ab02], owner:
6: Phantasm [n4b], Imperial Empire, duke, with two workers,
6: eight sailors
7: The Savvy Aardvark [ha5r], ship, 2 hulls, 1 rowing port, 6 sails,
7: 16% damaged, departed for Small Swamp [aa03].
Routes leaving Ocean:
East, swamp, to Small Swamp [aa03], Diamond Island, 2 days
South, swamp, to Small Swamp [ab02], Diamond Island, 2 days
West, to Ocean [aa01], 6 days


Username
Logout
Upload File
Choose Image files or drag it here(max Two Images).
Upload
Reset The Field
Upload Input Video
Upload Info About Video Source


How You Can Engage Modern Learners in a Virtual Training Session
There is no doubt that the demand for Virtual Training is on the rise. With an increasingly global workforce and more employees working from remote locations, organisations are starting to see the benefit of having virtual, coach-led sessions. Taking training virtual makes them not only more cost and time effective, but also encourages more two-way collaboration.
According to a Citrix report, companies can save between $9,550 to $15,870 (£7,289 to £12,113) by moving just 1 face-to-face (F2F) workshop to a virtual one.
Technological advances are making virtual training sessions increasingly more feasible and allows more focus on creating learning transfer through engagement and interaction with colleagues.
Today’s Learners; Keen to learn, but distracted
There are endless distractions for modern learners today, which can encourage them to tune out of a learning session. Therefore, it is essential to understand what educational, professional and cultural background your learners have. Additionally, as much as designing the right kind of session is important, you might need to ask yourself a few key questions;
- What is the purpose of this virtual workshop?
- How will this training help my participants?
- What are their likely learning styles?
Answering these questions will help to provide a strong strategy for developing a highly engaging session. If the content is personalised and relevant, your learners will be more fully invested in the training at hand.
If the above table is true, how can we hope to achieve the sort of engagement which appeals to the always-on-the-phone, always-on-the-go kind of learners?
Well, here are a few tips and tricks that we have found can help in creating meaningful and engaging virtual training sessions.
And here it is in infographic form...
Encourage interaction during the workshop
Encouraging interaction as soon as the session begins can go a long way. By introducing the participants to each other, sharing information on chat and pairing the learners together, you can encourage inclusivity and contribution, right from the beginning.
Breakout sessions and group activities can also help them to get to know each other, feel involved and share insights and experiences to deepen the learning outcomes.
Stay relevant with real examples and case studies
Modern learners are smart and well-informed, as they are harvesting new information constantly. So, by using real-world examples and case studies, you can heighten their engagement.
This is an excellent way to get them to internalise the training as it prompts them to solve problems, but it can also enable them to get analytical too.
Case studies allow participants to build on their own experiences and skill-set and give them the opportunities to focus on figuring out how they would have solved a particular problem in real life.
Provide Opportunities to Collaborate
Collaboration opportunities during a virtual workshop is another way to keep modern learners engaged and invested. Techniques like group discussions, roleplaying or partner interviews encourage collaboration and involvement.
Think of the differences between a webinar-based approach; a one way download of information, compared to what can be achieved in a virtual, interactive session.
Have a quality participant’s checklist
All virtual workshops need a participant’s checklist, listing the things they need to organise or do, in order to have interruption and distraction free, successful learning.
Make sure you have provided them with a clear checklist and logging in details once they have agreed to attend the workshop.
An example checklist is:-
- Find a quiet place for the virtual session where there is no external sound
- Ensure your devices are on “do not disturb” mode
- Ensure you have a strong internet connection throughout the session
- Test your connection in advance before logging in
- Disable any other notifications for the duration of the session
- Use a hands-free headset so you can type notes
Include powerful and engaging visuals
If you’re just using a PowerPoint slide deck as a delivery medium it can get very mundane.
To make virtual training more engaging, you can add videos, audio or even get a graphic designer to illustrate real-time graphics. While you do that, it is important to make sure the selected visuals are connected to the theme of the workshop.
However, be sure to pay attention to the overall design and formatting of the workshop to ensure it isn’t going to overwhelm the user and distract from the learning. Using visuals, videos and multimedia formats help to plug into the varied learning styles of the audience.
Use visual and voice chat functions
Messaging has become an integral part of our lives and while it might sound like a simple tool it is one of the most powerful engagement mechanisms that can be applied to a virtual training environment as well.
Building voice and video chat capabilities into virtual workshops not only allows for the coach and participants to build strong connections, but also can help when challenges arise.
Using the chat feature allows for engagement through tool like sharing files, sharing screens and collaborative whiteboards. It can also promote accountability for the learners too as they feel like they are being seen and heard, in real time, even if they are logging in from remote locations. Additionally, visuals and voice are powerful mediums that elicit strong emotional responses and have been proven to increase engagement and retention of knowledge too.
Remove any distractions
It is impossible to control all the distractions for your participants, especially if they are logging in from several different locations.
However, it is possible to overcome any possible distractions from your own. Prevent others from disturbing you and your virtual workshop, keep pets out of the room and turn off any other devices other than those necessary for your workshop. Ensure that the distractions you can control are in hand, so the potential for disturbance is minimised.
Final Thoughts
Virtual workshops can be powerful tools to engage learners when done with energy and application. The Digital Impact Survery 2019 reports that 42% of businesses are investing in this digital medium for training. And rightly so, for the benefits are huge.
An interactive virtual training workshop is cost-effective, environmentally friendly, great for work-life balance and it can speed up the rate of learning transfer.
All these benefits should guide you to build virtual training workshops that are informative, interactive, engaging and valuable for all your learners.


We're sorry but ui doesn't work properly without JavaScript enabled. Please enable it to continue.
{{if .AnalyticsEnabled}} {{end}}


Earth
The third planet from the sun, Earth is a waterworld,
with two-thirds of the planet covered by ocean. It’s
the only world known to harbor life. Earth’s atmosphere is
rich in life-sustaining nitrogen and oxygen. Earth's surface
rotates about its axis at 1,532 feet per second
(467 meters per second) — slightly
more than 1,000 mph (1,600 kph) — at the equator.
The planet zips around the sun at more than 18 miles per second
(29 km per second).
Diameter: 7,926 miles (12,760 km)
Orbit: 365.24 days
Day: 23 hours, 56 minutes


There's a plug-in for that! Getting started with Cloud Foundry plug-ins
Since IBM Bluemix is build on top of Cloud Foundry, all the knowhow and tooling available for the later can be used in Bluemix too.
One of the tools I'm fond of is the Cloud Foundry command line
A list of current plug-ins can be found in the CF Plug-in directory. Now the installation instructions haven't kept up with the
One of the tools I'm fond of is the Cloud Foundry command line
cf
. The tool is a thin veneer over the Cloud Foundry REST API and is written in GO. "Thin veneer" is a slight understatement, since the cf
command line is powerful, convenient and - icing on the cake - extensible.
A list of current plug-ins can be found in the CF Plug-in directory. Now the installation instructions haven't kept up with the
cf
releases, so here are the steps you need:
- Head to the CF Command Line release page and make sure you have the latest release installed.
At time of this writing that would be 6.12.2 - Add the community repository to your installation using this command:
cf add-plugin-repo CF-Community http://plugins.cloudfoundry.org/
This command is only available in cf versions > 6.10. A lot of blog entries or even the github documentation suggest downloads or even golang installs. With the availability of the repository these steps are no longer necessary (but you are free to use them) - Now listing all available plug-ins is as simple as
cf repo-plugins
- To install a specific plug-in you issue the command:
cf install-plugin '[name of plugin as listed]' -r CF-Community
If the name doesn't contain white space, the quotes can be omitted - After installation
cf help
provides the short instructions on how to use the modules
Read more
Posted by Stephan H Wissel on 24 August 2015 | Comments (0) | categories: Bluemix


| Package | Description |
|---|---|
| bayou.async |
Async programming model.
|
| bayou.file |
Utilities for files.
|
| bayou.http |
Http server.
|
| bayou.ssl |
SSL support.
|
| bayou.tcp |
Non-blocking TCP server.
|
| bayou.util.function |
Some functional interfaces.
|
| Modifier and Type | Method and Description |
|---|---|
static <T> Async<Void> |
AsyncIterator.forEach(AsyncIterator<T> elements,
ConsumerX<T> action)
Perform action on each element.
|
default Async<Void> |
AsyncIterator.forEach(ConsumerX<T> action)
Perform action on each element.
|
default AsyncIterator<T> |
AsyncIterator.peek(ConsumerX<T> action)
Perform `action` on each element as they are being iterated.
|
default Async<T> |
Async.peek(ConsumerX<T> onSuccess)
After `this` action succeeds, perform an action on the value.
|
default Async<T> |
Async.peek(ConsumerX<T> onSuccess,
ConsumerX<Exception> onFailure)
After `this` action completes, perform an action on the result.
|
default Async<T> |
Async.peek(ConsumerX<T> onSuccess,
ConsumerX<Exception> onFailure)
After `this` action completes, perform an action on the result.
|
| Constructor and Description |
|---|
StaticHandler(String uriPrefix,
String dirPrefix,
ConsumerX<StaticFileConf> confMod)
Create a StaticHandler.
|
| Modifier and Type | Method and Description |
|---|---|
ConsumerX<ServerSocketChannel> |
HttpServerConf.get_serverSocketConf() |
ConsumerX<SocketChannel> |
HttpServerConf.get_socketConf() |
ConsumerX<SocketChannel> |
HttpClientConf.get_socketConf() |
ConsumerX<SSLEngine> |
HttpServerConf.get_sslEngineConf() |
ConsumerX<SSLEngine> |
HttpClientConf.get_sslEngineConf() |
| Modifier and Type | Method and Description |
|---|---|
HttpServerConf |
HttpServerConf.serverSocketConf(ConsumerX<ServerSocketChannel> action)
Action to configure the server socket.
|
HttpServerConf |
HttpServerConf.socketConf(ConsumerX<SocketChannel> action)
Action to configure each newly accepted socket.
|
HttpClientConf |
HttpClientConf.socketConf(ConsumerX<SocketChannel> action)
Action to configure each TCP socket.
|
HttpServerConf |
HttpServerConf.sslEngineConf(ConsumerX<SSLEngine> action)
Action to configure each SSLEngine.
|
HttpClientConf |
HttpClientConf.sslEngineConf(ConsumerX<SSLEngine> action)
Action to configure each SSLEngine.
|
| Constructor and Description |
|---|
SslChannel2Connection(boolean clientMode,
SSLContext sslContext,
ConsumerX<SSLEngine> sslEngineConf)
Create a TcpChannel to SslConnection converter
|
| Modifier and Type | Field and Description |
|---|---|
ConsumerX<ServerSocketChannel> |
TcpServer.Conf.serverSocketConf
Action to configure the server socket.
|
ConsumerX<SocketChannel> |
TcpServer.Conf.socketConf
Action to configure each newly accepted socket.
|
ConsumerX<SocketChannel> |
TcpClient.Conf.socketConf
Action to configure each newly created socket.
|
| Modifier and Type | Method and Description |
|---|---|
default ConsumerX<T> |
ConsumerX.then(ConsumerX<T> that)
Similar to
Consumer.andThen(java.util.function.Consumer) . |
| Modifier and Type | Method and Description |
|---|---|
default ConsumerX<T> |
ConsumerX.then(ConsumerX<T> that)
Similar to
Consumer.andThen(java.util.function.Consumer) . |


{% extends "layout.html" %} {% block content %} Hey {{user_name}}! Your Information has been stored in the database. {% if user_activated_subscription %} Your subscribed to the changes happening to mongodb. {% else %} You are not subscribed to the changes happening to mongodb. {% endif %} {% endblock %}
Your Information has been stored in the database.
Your subscribed to the changes happening to mongodb.
You are not subscribed to the changes happening to mongodb.


K-BOT
K-BOT learns from people things it says may seem inappropriate use with discretion and at YOUR OWN RISK
Version 1.0
Created By Adem KOUKI
2017 - 2018
Ahlan Bik ^^ Ena K-BOT ... Najm Net3alm Ay 7aja ...
Jarb Ektb Ay Message


CALMAFX MOISTURE BARRIER- menthol, ferric oxide red and zinc oxide ointment
First Choice Medical Supply
Disclaimer: Most OTC drugs are not reviewed and approved by FDA, however they may be marketed if they comply with applicable regulations and policies. FDA has not evaluated whether this product complies.
Active Ingredients
Menthol 0.45%
Calamine 2%
Zinc Oxide 18%
Purpose
External Analgesic, Skin Protectant
Uses
A moisture barrier that prevents and helps protect skin irritations from
- urine
- diarrhea
- perspiration
- fistula drainage
- feeding tube site leakage
- wound drainage
- minor burns
- cuts
- scrapes
- itching
Warnings
- For external use only.
- When using this product
- do not get into eyes.
Stop use and ask doctor if :
- condition worsens
- symptoms last more than 7 days or clear up and occur again within a few days.
-
Keep out of reach of children. If swallowed, get medical help or contact a Poison Control Center right away.
Directions
When practical, gently cleanse and dry area.
- Adults: Apply externally to affected area up to 6 times daily or after each incontinent episode or diaper change.
-
Children under 12 years: Consult a doctor.
Other Information
Store at 15-30°C (59-86°F)
Inactive Ingredients:
Beeswax, Disodium EDTA, Glycerin, Lanolin, Methylparaben, Mineral Oil, Petrolatum, Propylparaben, Purified Water, Sodium Borate, Sorbitan Sesquioleate
Questions or Comments?
First Choice Medical Supply
127 Interstate Dr.
Richland, MS 39218
800-809-4556 or visit www.fcms.com
Item # 33433
Images of representative artwork
CalmafxSachet.jpg calmafxtube.jpg


A Team That Fits: Iconic Brands. Endless Potential.
Buffermedia is a place where digital legends are born. We offer opportunities across brands and functions, so you can give your career a fresh, new look when you feel like it. With us, you can stay in one place, but keep going somewhere new — whether that’s in your hometown or halfway around the world.
We are looking for talents for our virtual offices, call centers and our corporate office. Whether you are passionate about telling our story in a creative way, getting our products to market or delighting our customers, we have a career for you.
Vacancies
Business Development Manager
Sales
IT & Networking Intern
Tech
HR Coordinator
HR
Digital Marketing Intern
Marketing
Design Intern
Product Design
Full Stack PHP Developer
Engineering
Product Designer
Product Design
Front-end Developer
Engineering
B2B Sales & Account Executive
Sales
Digital Marketing Manager
Marketing
Full Stack Java Developer
Engineering


{% extends 'layouts/boilerplate.html' %} {% block title %}{% if request.endpoint == 'events.view2' %}Stocking Stuffers - {% endif %}{{ event }} - {{ super() }}{% endblock %} {% block main %}
{% if request.endpoint == 'events.view' %} These are the people you're supposed to give gifts to. {% else %} Here's everyone who's looking for something in their stocking. {% endif %}


--- layout: home title: D R E A M O | EN Bio-Acoustical Driven Visual Generator heading: PROVA lang: en ref: home name_en: Why Dreamo front-mission: "The Dreamo project is aimed at developing semi-automatic videographic generation in real-time, based on biomedical sensors and audio inputs." front-heading: Why Dreamo front-subheading: Our idea front-testo: "
What if a device was able to read and display emotions, making unique your musical and artistic performance?
Dreamo is the perfect match between technology and human emotions.
The purpose of Dreamo is to generate a graphical display representing the artist's emotions and the mood of music
On the basis of aesthetic and psychological principles, Dreamo generates an abstract video in real time by changing various parameters and choosing the scene that better fits in a particular execution or interpretation.
" patrocinio: "With the support of the Student Contributions and Projectuality Commission of the Turin Politecnico" ---


Home
About
Interests
Music
CV
Music
My playlist
ACDC
Beatles
B.E.P
Daft Punk
Deadmau5
Frank Sinatra
Nirvana
Queen
Skrillex


--- title: "Coffee Ratings" author: "Joseph Pope" date: '2020-07-07' description: "TidyTuesday project modelling coffee ratings" publishDate: '2020-07-07T08:23:44-04:00' slug: coffee-ratings tags: ["recipes", "tidymodels", "tidyverse"] categories: ["R"] images: - src: "img/2020/tidytuesday/small_coffee.jpg" alt: "Giant Cup O' Joe" ---
A TidyTuesday project modelling coffee ratings predictions
Today I am going to explore Coffee Ratings for this week’s Tidy Tuesday challenge. The data comes from the Coffee Quality Database. The great thing about Tidy Tuesday is that we can do whatever we want with the data. There are no rules or directions!
This data is very interesting with many features and looks ripe for a predictive model. I can use the various ratings provided to predict either a quantitative method, like what the ‘total_cup_score’ (Overall rating) is, or a qualitative measure, like what species of bean (Arabica or Robusta) or perhaps the country of origin.
Predicting scores strikes me as a classic regression problem, best tackled by linear models or random forests, and classification could be solved with logistic regression, Naive Bayes, SVM or even neural networks. I’ve NEVER used tidymodels
before, so let’s give it a go, make some mistakes, and see what we can learn.
But first, some brief background of our data from the TidyTuesday repo:
There is data for both Arabica and Robusta beans, across many countries and professionally rated on a 0-100 scale. All sorts of scoring/ratings for things like acidity, sweetness, fragrance, balance, etc - may be useful for either separating into visualizations/categories or for modeling/recommenders.
Wikipedia on Coffee Beans:
The two most economically important varieties of coffee plant are the Arabica and the Robusta; ~60% of the coffee produced worldwide is Arabica and ~40% is Robusta. Arabica beans consist of 0.8–1.4% caffeine and Robusta beans consist of 1.7–4% caffeine.
Setup
library(tidytuesdayR)
library(tidyverse)
## ── Attaching packages ──────────────────── tidyverse 1.3.0 ──
## ✓ ggplot2 3.3.2 ✓ purrr 0.3.4
## ✓ tibble 3.0.1 ✓ dplyr 1.0.0
## ✓ tidyr 1.1.0 ✓ stringr 1.4.0
## ✓ readr 1.3.1 ✓ forcats 0.5.0
## ── Conflicts ─────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(tidymodels)
## ── Attaching packages ─────────────────── tidymodels 0.1.0 ──
## ✓ broom 0.5.6 ✓ rsample 0.0.6
## ✓ dials 0.0.6 ✓ tune 0.1.0
## ✓ infer 0.5.1 ✓ workflows 0.1.1
## ✓ parsnip 0.1.1 ✓ yardstick 0.0.6
## ✓ recipes 0.1.12
## ── Conflicts ────────────────────── tidymodels_conflicts() ──
## x scales::discard() masks purrr::discard()
## x dplyr::filter() masks stats::filter()
## x recipes::fixed() masks stringr::fixed()
## x dplyr::lag() masks stats::lag()
## x dials::margin() masks ggplot2::margin()
## x yardstick::spec() masks readr::spec()
## x recipes::step() masks stats::step()
library(knitr)
library(kableExtra)
##
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
##
## group_rows
knitr::opts_chunk$set(
fig.height = 5,
fig.width = 8,
message = FALSE,
warning = FALSE,
dpi = 180,
include = TRUE
)
Load the data
tuesdata <- tidytuesdayR::tt_load(2020, week = 28)
coffee_ratings <- tuesdata$coffee_ratings
Now that we have our data and let’s dive in. Let’s review the summary statistics with skimr.
coffee_ratings %>%
skimr::skim()
| Name | Piped data |
| Number of rows | 1339 |
| Number of columns | 43 |
| _______________________ | |
| Column type frequency: | |
| character | 24 |
| numeric | 19 |
| ________________________ | |
| Group variables | None |
Variable type: character
| skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
|---|---|---|---|---|---|---|---|
| species | 0 | 1.00 | 7 | 7 | 0 | 2 | 0 |
| owner | 7 | 0.99 | 3 | 50 | 0 | 315 | 0 |
| country_of_origin | 1 | 1.00 | 4 | 28 | 0 | 36 | 0 |
| farm_name | 359 | 0.73 | 1 | 73 | 0 | 571 | 0 |
| lot_number | 1063 | 0.21 | 1 | 71 | 0 | 227 | 0 |
| mill | 315 | 0.76 | 1 | 77 | 0 | 460 | 0 |
| ico_number | 151 | 0.89 | 1 | 40 | 0 | 847 | 0 |
| company | 209 | 0.84 | 3 | 73 | 0 | 281 | 0 |
| altitude | 226 | 0.83 | 1 | 41 | 0 | 396 | 0 |
| region | 59 | 0.96 | 2 | 76 | 0 | 356 | 0 |
| producer | 231 | 0.83 | 1 | 100 | 0 | 691 | 0 |
| bag_weight | 0 | 1.00 | 1 | 8 | 0 | 56 | 0 |
| in_country_partner | 0 | 1.00 | 7 | 85 | 0 | 27 | 0 |
| harvest_year | 47 | 0.96 | 3 | 24 | 0 | 46 | 0 |
| grading_date | 0 | 1.00 | 13 | 20 | 0 | 567 | 0 |
| owner_1 | 7 | 0.99 | 3 | 50 | 0 | 319 | 0 |
| variety | 226 | 0.83 | 4 | 21 | 0 | 29 | 0 |
| processing_method | 170 | 0.87 | 5 | 25 | 0 | 5 | 0 |
| color | 218 | 0.84 | 4 | 12 | 0 | 4 | 0 |
| expiration | 0 | 1.00 | 13 | 20 | 0 | 566 | 0 |
| certification_body | 0 | 1.00 | 7 | 85 | 0 | 26 | 0 |
| certification_address | 0 | 1.00 | 40 | 40 | 0 | 32 | 0 |
| certification_contact | 0 | 1.00 | 40 | 40 | 0 | 29 | 0 |
| unit_of_measurement | 0 | 1.00 | 1 | 2 | 0 | 2 | 0 |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| total_cup_points | 0 | 1.00 | 82.09 | 3.50 | 0 | 81.08 | 82.50 | 83.67 | 90.58 | ▁▁▁▁▇ |
| number_of_bags | 0 | 1.00 | 154.18 | 129.99 | 0 | 14.00 | 175.00 | 275.00 | 1062.00 | ▇▇▁▁▁ |
| aroma | 0 | 1.00 | 7.57 | 0.38 | 0 | 7.42 | 7.58 | 7.75 | 8.75 | ▁▁▁▁▇ |
| flavor | 0 | 1.00 | 7.52 | 0.40 | 0 | 7.33 | 7.58 | 7.75 | 8.83 | ▁▁▁▁▇ |
| aftertaste | 0 | 1.00 | 7.40 | 0.40 | 0 | 7.25 | 7.42 | 7.58 | 8.67 | ▁▁▁▁▇ |
| acidity | 0 | 1.00 | 7.54 | 0.38 | 0 | 7.33 | 7.58 | 7.75 | 8.75 | ▁▁▁▁▇ |
| body | 0 | 1.00 | 7.52 | 0.37 | 0 | 7.33 | 7.50 | 7.67 | 8.58 | ▁▁▁▁▇ |
| balance | 0 | 1.00 | 7.52 | 0.41 | 0 | 7.33 | 7.50 | 7.75 | 8.75 | ▁▁▁▁▇ |
| uniformity | 0 | 1.00 | 9.83 | 0.55 | 0 | 10.00 | 10.00 | 10.00 | 10.00 | ▁▁▁▁▇ |
| clean_cup | 0 | 1.00 | 9.84 | 0.76 | 0 | 10.00 | 10.00 | 10.00 | 10.00 | ▁▁▁▁▇ |
| sweetness | 0 | 1.00 | 9.86 | 0.62 | 0 | 10.00 | 10.00 | 10.00 | 10.00 | ▁▁▁▁▇ |
| cupper_points | 0 | 1.00 | 7.50 | 0.47 | 0 | 7.25 | 7.50 | 7.75 | 10.00 | ▁▁▁▇▁ |
| moisture | 0 | 1.00 | 0.09 | 0.05 | 0 | 0.09 | 0.11 | 0.12 | 0.28 | ▃▇▅▁▁ |
| category_one_defects | 0 | 1.00 | 0.48 | 2.55 | 0 | 0.00 | 0.00 | 0.00 | 63.00 | ▇▁▁▁▁ |
| quakers | 1 | 1.00 | 0.17 | 0.83 | 0 | 0.00 | 0.00 | 0.00 | 11.00 | ▇▁▁▁▁ |
| category_two_defects | 0 | 1.00 | 3.56 | 5.31 | 0 | 0.00 | 2.00 | 4.00 | 55.00 | ▇▁▁▁▁ |
| altitude_low_meters | 230 | 0.83 | 1750.71 | 8669.44 | 1 | 1100.00 | 1310.64 | 1600.00 | 190164.00 | ▇▁▁▁▁ |
| altitude_high_meters | 230 | 0.83 | 1799.35 | 8668.81 | 1 | 1100.00 | 1350.00 | 1650.00 | 190164.00 | ▇▁▁▁▁ |
| altitude_mean_meters | 230 | 0.83 | 1775.03 | 8668.63 | 1 | 1100.00 | 1310.64 | 1600.00 | 190164.00 | ▇▁▁▁▁ |
I originally wanted to predict “total_cup_points”. However, after some review it appears that this field is simply the sum of ten other ratings, from aroma to cupper_points. What I really want to predict is Cupper Points. This is the reviewer’s (aka the Cupper’s) personal overall rating for the cup of joe. I can use this as dependant variable in a regression analysis. This should help me identify which features (aroma, acidity, elevation, country of origin?) influence the final rating the most.
Before we dig further into the data, let’s speculate what might factors go into a superior coffee bean. If coffee is like wine, then perhaps region (lat, long, altitude, preciptation, average hours of sunlight, etc) makes a big difference. Perhaps certain companies utilize best practices and farming techniques. Maybe certain processing methods are better than others. We are given the testing date and the expiration date, so we can add a feature that measures how fresh the beans are. These features and more could be really important or totally useless. I have no idea! Let’s see what the data has to say about it.
The wiki in the readme suggests that coffee beans are split 60/40 worldwide, by Arabica and Robusta. However, for this analysis the split is much more imbalanced. I thought it would be very interesting to build an Arabica vs. Robusta classifier but with such an imbalanced set I don’t think upsampling or other methods will be enough to build a robust model.
table(coffee_ratings$species)
##
## Arabica Robusta
## 1311 28
Let’s take a peak at the distribution of country of origin field. It is mentioned in the articles that Ethiopia wins top prize, however most of the coffees are from Central and South America.
coffee_ratings %>%
group_by(country_of_origin) %>%
tally() %>%
top_n(., 10) %>%
arrange(desc(n))
## # A tibble: 10 x 2
## country_of_origin n
## <chr> <int>
## 1 Mexico 236
## 2 Colombia 183
## 3 Guatemala 181
## 4 Brazil 132
## 5 Taiwan 75
## 6 United States (Hawaii) 73
## 7 Honduras 53
## 8 Costa Rica 51
## 9 Ethiopia 44
## 10 Tanzania, United Republic Of 40
Let’s pull this list of top 10 countries into a list to reference later.
top_countries <- coffee_ratings %>%
group_by(country_of_origin) %>%
tally() %>%
top_n(., 10) %>%
arrange(desc(n)) %>%
pull(country_of_origin)
Out of curiousity, let’s see the count of coffee bean color. This was news to me, but apparently coffee beans are mostly blue or green in color when fresh. It is only after roasting that the color darkens to that familiar, uh, “coffee-brown” color. If you learn nothing else today, you can at least learn this.
table(coffee_ratings$color)
##
## Blue-Green Bluish-Green Green None
## 85 114 870 52
Robusta is seen below with a higher modal peak, suggesting the species, known for its higher caffeine levels, is rated higher than Arabica. This could be due to a small sample size though.
coffee_ratings %>%
mutate(id = row_number()) %>%
select(id, species, cupper_points) %>%
ggplot(aes(cupper_points, fill = species)) +
geom_density(alpha = 0.1)
# geom_histogram(position = "identity", alpha = 0.7, show.legend = FALSE)
I have never used tidymodels, so let’s see how this goes. Let’s try to tackle the regression model first. From the skim package, we know we have no missing values or junky data for this. Nice!
First thing to do is narrow our data and make it ripe for modeling. TidyTuesday mentions that Yorgos Askalidis already determined that altitude, processing_method and color have no bearing to the cupping score, and I think that makes sense. I will omit those features for now. That leaves us with species, country of origin and several ratings and measurements of the coffee samples. I am going to take the top ten countries only (out of 36 in the data) and lump the rest into “Other” with forcats. This is simply to speed up the processing without losing too much information gain for the feature.
Note - I went back after trying the models a few times and removed ‘species’. In this smaller, filtered dataset there are only 3 records with Robusta coffee beans. It caused me some issues, and with only 3 members of the minority class, I decided to just remove it completely.
coffee <- coffee_ratings %>%
mutate(id = row_number()) %>% # add ID field, convert NA to Other
select(id, country_of_origin, variety, aroma:moisture) %>% # select features
mutate(country_of_origin = case_when(
country_of_origin %in% top_countries ~ country_of_origin,
TRUE ~ "Other"
)) %>%
mutate_if(is.character, as.factor) %>% # convert country and variety to factors
filter(cupper_points != 0) %>% # remove 0 point scores as junk data
drop_na() # drop NA for country and variety fields. only affects 200 records
Split the data
Note - I initially tried to stratify by species, even though there aren’t many Robusta coffee samples in the data. I ended up removing this due to the severe class imbalance. It may have been worth the effort to upsample Robusta and then stratify by species.
set.seed(1234)
coffee_split <- coffee %>%
initial_split()
coffee_train <- training(coffee_split)
coffee_test <- testing(coffee_split)
Naive linear model with no scaling or pre-processing
lm_spec <- linear_reg() %>%
set_engine(engine = "lm")
lm_spec
## Linear Regression Model Specification (regression)
##
## Computational engine: lm
## Linear Regression Model Specification (regression)
##
## Computational engine: lm
lm_fit <- lm_spec %>%
fit(cupper_points ~ .,
data = coffee_train
)
lm_fit
## parsnip model object
##
## Fit time: 10ms
##
## Call:
## stats::lm(formula = formula, data = data)
##
## Coefficients:
## (Intercept)
## 2.501509
## id
## -0.000309
## country_of_originColombia
## -0.099026
## country_of_originCosta Rica
## -0.020488
## country_of_originEthiopia
## 0.029321
## country_of_originGuatemala
## -0.045107
## country_of_originHonduras
## -0.013921
## country_of_originMexico
## 0.030019
## country_of_originOther
## 0.003251
## country_of_originTaiwan
## -0.134839
## country_of_originTanzania, United Republic Of
## 0.052325
## country_of_originUnited States (Hawaii)
## -0.316031
## varietyBlue Mountain
## -0.234205
## varietyBourbon
## -0.004215
## varietyCatimor
## 0.018467
## varietyCatuai
## 0.015110
## varietyCaturra
## 0.036397
## varietyEthiopian Heirlooms
## -0.094942
## varietyEthiopian Yirgacheffe
## 0.011110
## varietyGesha
## 0.046588
## varietyHawaiian Kona
## 0.296594
## varietyJava
## 0.007740
## varietyMandheling
## 0.001044
## varietyMarigojipe
## -0.006565
## varietyMundo Novo
## -0.047911
## varietyOther
## -0.019686
## varietyPacamara
## -0.067598
## varietyPacas
## -0.001151
## varietyPache Comun
## -0.134161
## varietyPeaberry
## -0.022037
## varietyRuiru 11
## -0.016437
## varietySL14
## 0.017365
## varietySL28
## -0.256004
## varietySL34
## -0.055397
## varietySulawesi
## 0.040376
## varietySumatra
## 0.096590
## varietySumatra Lintong
## 0.080224
## varietyTypica
## -0.035801
## varietyYellow Bourbon
## 0.086077
## aroma
## -0.003595
## flavor
## 0.241316
## aftertaste
## 0.278652
## acidity
## 0.040398
## body
## 0.022329
## balance
## 0.194880
## uniformity
## -0.022991
## clean_cup
## 0.013229
## sweetness
## -0.043329
## moisture
## -0.505604
library(ranger)
rf_spec <- rand_forest(mode = "regression") %>%
set_engine("ranger")
rf_spec
## Random Forest Model Specification (regression)
##
## Computational engine: ranger
## Random Forest Model Specification (regression)
##
## Computational engine: ranger
rf_fit <- rf_spec %>%
fit(cupper_points ~ .,
data = coffee_train
)
rf_fit
## parsnip model object
##
## Fit time: 468ms
## Ranger result
##
## Call:
## ranger::ranger(formula = formula, data = data, num.threads = 1, verbose = FALSE, seed = sample.int(10^5, 1))
##
## Type: Regression
## Number of trees: 500
## Sample size: 834
## Number of independent variables: 13
## Mtry: 3
## Target node size: 5
## Variable importance mode: none
## Splitrule: variance
## OOB prediction error (MSE): 0.04135314
## R squared (OOB): 0.7374583
Both models produce a hefty R squared, > .7! This makes me nervous as it’s likely too good to be true (overfit). I know that I skipped some preprocessing steps just to see how these models worked, so let’s go back and see if some recipes
can bring my models back down to earth.
rec_obj <- recipe(cupper_points ~ ., data = coffee_train) %>%
update_role(id, new_role = "ID") %>%
step_normalize(all_predictors(), -all_nominal()) %>%
step_dummy(all_nominal())
summary(rec_obj)
## # A tibble: 14 x 4
## variable type role source
## <chr> <chr> <chr> <chr>
## 1 id numeric ID original
## 2 country_of_origin nominal predictor original
## 3 variety nominal predictor original
## 4 aroma numeric predictor original
## 5 flavor numeric predictor original
## 6 aftertaste numeric predictor original
## 7 acidity numeric predictor original
## 8 body numeric predictor original
## 9 balance numeric predictor original
## 10 uniformity numeric predictor original
## 11 clean_cup numeric predictor original
## 12 sweetness numeric predictor original
## 13 moisture numeric predictor original
## 14 cupper_points numeric outcome original
I tell the recipe not to use the “id” column in the analysis and we can see that it is classified as a “ID” and not “predictor”. I run summary on the recipe object and can see the type of role the variables have, as well as the type. It is important to note that ‘nominal’ is yet another term to describe a factor/string/non-numeric.
Then I use the step_* functions to normalize the data (it centers and scales numerical features) and to create dummy variables for all of my nominal (non-numeric) features.
So we built our recipe. Next step is to prep and juice. I’m getting thirsty.
coff_train <- juice(prep(rec_obj))
dim(coff_train)
## [1] 834 50
names(coff_train)
## [1] "id"
## [2] "aroma"
## [3] "flavor"
## [4] "aftertaste"
## [5] "acidity"
## [6] "body"
## [7] "balance"
## [8] "uniformity"
## [9] "clean_cup"
## [10] "sweetness"
## [11] "moisture"
## [12] "cupper_points"
## [13] "country_of_origin_Colombia"
## [14] "country_of_origin_Costa.Rica"
## [15] "country_of_origin_Ethiopia"
## [16] "country_of_origin_Guatemala"
## [17] "country_of_origin_Honduras"
## [18] "country_of_origin_Mexico"
## [19] "country_of_origin_Other"
## [20] "country_of_origin_Taiwan"
## [21] "country_of_origin_Tanzania..United.Republic.Of"
## [22] "country_of_origin_United.States..Hawaii."
## [23] "variety_Blue.Mountain"
## [24] "variety_Bourbon"
## [25] "variety_Catimor"
## [26] "variety_Catuai"
## [27] "variety_Caturra"
## [28] "variety_Ethiopian.Heirlooms"
## [29] "variety_Ethiopian.Yirgacheffe"
## [30] "variety_Gesha"
## [31] "variety_Hawaiian.Kona"
## [32] "variety_Java"
## [33] "variety_Mandheling"
## [34] "variety_Marigojipe"
## [35] "variety_Moka.Peaberry"
## [36] "variety_Mundo.Novo"
## [37] "variety_Other"
## [38] "variety_Pacamara"
## [39] "variety_Pacas"
## [40] "variety_Pache.Comun"
## [41] "variety_Peaberry"
## [42] "variety_Ruiru.11"
## [43] "variety_SL14"
## [44] "variety_SL28"
## [45] "variety_SL34"
## [46] "variety_Sulawesi"
## [47] "variety_Sumatra"
## [48] "variety_Sumatra.Lintong"
## [49] "variety_Typica"
## [50] "variety_Yellow.Bourbon"
coff_train
## # A tibble: 834 x 50
## id aroma flavor aftertaste acidity body balance uniformity clean_cup
## <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 2 3.84 3.55 3.27 3.35 3.35 2.68 0.312 0.225
## 2 3 2.77 3.03 3.04 2.84 3.02 2.68 0.312 0.225
## 3 5 2.22 3.03 2.54 3.10 3.35 2.41 0.312 0.225
## 4 10 1.66 3.27 3.27 3.10 0.575 2.68 0.312 0.225
## 5 12 2.22 2.78 2.30 2.56 2.09 1.94 0.312 0.225
## 6 13 1.66 3.55 2.77 2.84 1.80 1.68 0.312 0.225
## 7 16 1.40 3.03 3.51 2.05 2.42 1.44 0.312 0.225
## 8 19 2.77 2.26 2.03 2.05 1.50 1.44 0.312 0.225
## 9 21 1.40 2.26 2.03 3.10 2.72 1.44 0.312 0.225
## 10 23 1.96 2.26 2.30 1.51 1.17 1.94 0.312 0.225
## # … with 824 more rows, and 41 more variables: sweetness <dbl>, moisture <dbl>,
## # cupper_points <dbl>, country_of_origin_Colombia <dbl>,
## # country_of_origin_Costa.Rica <dbl>, country_of_origin_Ethiopia <dbl>,
## # country_of_origin_Guatemala <dbl>, country_of_origin_Honduras <dbl>,
## # country_of_origin_Mexico <dbl>, country_of_origin_Other <dbl>,
## # country_of_origin_Taiwan <dbl>,
## # country_of_origin_Tanzania..United.Republic.Of <dbl>,
## # country_of_origin_United.States..Hawaii. <dbl>,
## # variety_Blue.Mountain <dbl>, variety_Bourbon <dbl>, variety_Catimor <dbl>,
## # variety_Catuai <dbl>, variety_Caturra <dbl>,
## # variety_Ethiopian.Heirlooms <dbl>, variety_Ethiopian.Yirgacheffe <dbl>,
## # variety_Gesha <dbl>, variety_Hawaiian.Kona <dbl>, variety_Java <dbl>,
## # variety_Mandheling <dbl>, variety_Marigojipe <dbl>,
## # variety_Moka.Peaberry <dbl>, variety_Mundo.Novo <dbl>, variety_Other <dbl>,
## # variety_Pacamara <dbl>, variety_Pacas <dbl>, variety_Pache.Comun <dbl>,
## # variety_Peaberry <dbl>, variety_Ruiru.11 <dbl>, variety_SL14 <dbl>,
## # variety_SL28 <dbl>, variety_SL34 <dbl>, variety_Sulawesi <dbl>,
## # variety_Sumatra <dbl>, variety_Sumatra.Lintong <dbl>, variety_Typica <dbl>,
## # variety_Yellow.Bourbon <dbl>
Baking applies the pre-processing steps that were ‘juiced’ above to the test data. This way, the train and test data will have the same pre-processing steps (aka recipe) applied to them. Clever!
coff_test <- rec_obj %>%
prep() %>%
bake(coffee_test)
So now we see all our predictors including all the dummy variables that were generated. Neat.
Now we can go back to the linear and random forest regression models used earlier, but now substitute the data with better processing. I think I see why they went with the “recipe” motif! Like baking, I can swap in ingredients without having to start over from scratch.
lm_fit1 <- fit(lm_spec, cupper_points ~ ., coff_train)
glance(lm_fit1$fit)
## # A tibble: 1 x 11
## r.squared adj.r.squared sigma statistic p.value df logLik AIC BIC
## <dbl> <dbl> <dbl> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
## 1 0.751 0.736 0.204 49.4 2.55e-203 49 168. -237. -0.335
## # … with 2 more variables: deviance <dbl>, df.residual <int>
tidy(lm_fit1) %>%
arrange(desc(abs(statistic)))
## # A tibble: 49 x 5
## term estimate std.error statistic p.value
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 (Intercept) 7.71 0.109 70.7 0.
## 2 id -0.000309 0.0000479 -6.45 1.99e-10
## 3 aftertaste 0.0944 0.0163 5.79 1.01e- 8
## 4 balance 0.0665 0.0132 5.02 6.39e- 7
## 5 flavor 0.0789 0.0173 4.56 6.07e- 6
## 6 country_of_origin_Taiwan -0.135 0.0462 -2.92 3.63e- 3
## 7 moisture -0.0230 0.00823 -2.79 5.36e- 3
## 8 country_of_origin_Colombia -0.0990 0.0434 -2.28 2.28e- 2
## 9 sweetness -0.0177 0.00819 -2.16 3.09e- 2
## 10 variety_SL28 -0.256 0.119 -2.16 3.14e- 2
## # … with 39 more rows
lm_predicted <- augment(lm_fit1$fit, data = coff_train)
select(lm_predicted, id, cupper_points, .fitted:.std.resid)
## # A tibble: 834 x 9
## id cupper_points .fitted .se.fit .resid .hat .sigma .cooksd .std.resid
## <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 2 8.58 8.52 0.0749 0.0562 0.135 0.204 2.80e-4 0.297
## 2 3 9.25 8.45 0.0431 0.795 0.0447 0.202 1.52e-2 3.99
## 3 5 8.58 8.39 0.0707 0.187 0.120 0.204 2.67e-3 0.977
## 4 10 8.5 8.49 0.0721 0.00789 0.125 0.204 5.00e-6 0.0414
## 5 12 8.5 8.34 0.0379 0.162 0.0345 0.204 4.75e-4 0.807
## 6 13 8.33 8.43 0.0435 -0.0979 0.0456 0.204 2.36e-4 -0.492
## 7 16 8.17 8.43 0.0443 -0.264 0.0472 0.204 1.78e-3 -1.33
## 8 19 8.42 8.21 0.0570 0.206 0.0783 0.204 1.92e-3 1.05
## 9 21 8.17 8.25 0.0407 -0.0779 0.0398 0.204 1.29e-4 -0.390
## 10 23 8.58 8.24 0.0402 0.344 0.0388 0.204 2.44e-3 1.72
## # … with 824 more rows
ggplot(lm_predicted, aes(.fitted, cupper_points)) +
geom_point(alpha = .2) +
ggrepel::geom_label_repel(aes(label = id),
data = filter(lm_predicted, abs(.resid) > 2)) +
labs(title = "Linear Model: Actual vs. Predicted Cupper Points") +
geom_smooth()
Whoa, what’s up with coffee sample 963? We predicted a score of 7.4 or so, and the real score was a 5.25. This appears just to be a major outlier, so we can likely ignore.
filter(coffee, id == 963)
## # A tibble: 1 x 14
## id country_of_orig… variety aroma flavor aftertaste acidity body balance
## <int> <fct> <fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 963 Taiwan Typica 7.83 7.75 7.67 7.83 7.83 7.75
## # … with 5 more variables: uniformity <dbl>, clean_cup <dbl>, sweetness <dbl>,
## # cupper_points <dbl>, moisture <dbl>
Now let’s repeat for the random forest model. Note - glance
does not work for ranger objects like rf_fit1$fit.
rf_fit1 <- fit(rf_spec, cupper_points ~ ., coff_train)
rf_fit1$fit
## Ranger result
##
## Call:
## ranger::ranger(formula = formula, data = data, num.threads = 1, verbose = FALSE, seed = sample.int(10^5, 1))
##
## Type: Regression
## Number of trees: 500
## Sample size: 834
## Number of independent variables: 49
## Mtry: 7
## Target node size: 5
## Variable importance mode: none
## Splitrule: variance
## OOB prediction error (MSE): 0.04222097
## R squared (OOB): 0.7319486
rf_predicted <- bind_cols(.fitted = rf_fit1$fit$predictions, data = coff_train)
select(rf_predicted, id, cupper_points, .fitted)
## # A tibble: 834 x 3
## id cupper_points .fitted
## <int> <dbl> <dbl>
## 1 2 8.58 8.60
## 2 3 9.25 8.31
## 3 5 8.58 8.54
## 4 10 8.5 8.41
## 5 12 8.5 8.30
## 6 13 8.33 8.36
## 7 16 8.17 8.33
## 8 19 8.42 8.24
## 9 21 8.17 8.29
## 10 23 8.58 8.14
## # … with 824 more rows
ggplot(rf_predicted, aes(.fitted, cupper_points)) +
geom_point(alpha = .2) +
# ggrepel::geom_label_repel(aes(label = id),
# data = filter(rf_predicted, abs(.resid) > 2)) +
labs(title = "Random Forest: Actual vs. Predicted Cupper Points") +
geom_smooth()
results_train <- lm_fit1 %>%
predict(new_data = coff_train) %>%
mutate(
truth = coff_train$cupper_points,
model = "lm"
) %>%
bind_rows(rf_fit1 %>%
predict(new_data = coff_train) %>%
mutate(
truth = coff_train$cupper_points,
model = "rf"
))
results_train %>%
group_by(model) %>%
rmse(truth = truth, estimate = .pred)
## # A tibble: 2 x 4
## model .metric .estimator .estimate
## <chr> <chr> <chr> <dbl>
## 1 lm rmse standard 0.198
## 2 rf rmse standard 0.114
Apply model to the test set
lm_fit1 %>%
predict(coff_test) %>%
bind_cols(coff_test) %>%
metrics(truth = cupper_points,
estimate = .pred) %>%
bind_cols(model = "lm") %>%
bind_rows(
rf_fit1 %>%
predict(coff_test) %>%
bind_cols(coff_test) %>%
metrics(truth = cupper_points,
estimate = .pred
) %>%
bind_cols(model = "rf")
)
## # A tibble: 6 x 4
## .metric .estimator .estimate model
## <chr> <chr> <dbl> <chr>
## 1 rmse standard 0.244 lm
## 2 rsq standard 0.629 lm
## 3 mae standard 0.144 lm
## 4 rmse standard 0.231 rf
## 5 rsq standard 0.664 rf
## 6 mae standard 0.130 rf
We see that the random forest and linear model are both very close together in performance. However, the random forest does have a small RMSE and higher R squared, which means it does a slightly better job explaining the variance and has less overall error in predicting the ratings.
I did all of this analysis without knowing anything about tidymodels. Additionally, I am fairly new to using R for predicting values as well. It would be interesting to see how these models perform with cross-validation, optimized parameters and better feature selection.
The concept of a “recipe” which you can modify and reuse is incredibly interesting in this context. I have a lot more to learn here, and would direct readers to the great YouTube videos made by Julia Silge.


Hello, {{ userProfile.UserDetails.Username }}!

You can pick anything you want. You can also change it any time. Names are not unique; someone else can take the same name as you.
This also means you should not trust other users, as they might or might not be the people they say they are.
You cannot edit or delete what you write, and it only goes away after 6 months. Be careful of what you say if you use a name indicative of your person.


 SAID THE WITCH."
THERE was a woman who lived near Cheadle, who went to the mill one day to get a bag of flour for baking, and as she came back she met an old witch. "Good day," said the witch. "Good day," said the woman again. "What's that you've got on your head?" said the witch. "It's flour I'm taking home for my baking," said the woman. "It isn't flour, it's manure," said the witch. "It's sound flour!" said the woman; "I've fetched it straight from the mill, and I'm going to bake with it as soon as ever I get home."
Now the woman knew very well that it was flour she had in her bag, but this made her feel so uncomfortable, that as soon as the witch was out of sight, she put down the bag off her head and opened it and looked in. And there, sure enough, it was not flour at all, nothing but manure! Well she thought, as she had carried it so far, she might as well carry it all the way, so she took it up again, and went home and set it down by the pig-sty. In the evening her husband came home.
"Whatever have you put that bag of flour down by the pig-sty for?" he said, as soon as he came into the house. "Oh," said she, "that's not flour, that's only a bag of manure." "Nonsense!" said he, "what are you talking of? I tell you it's flour. Why, it's sheeding [spilling] all over the place!" So they went to look, and there actually it was flour again the same as at first; and they took it into the house, and very glad the woman was to get it back. And that was the only thing the witch was ever known to turn [transform] back again. She turnee a many things but never a one ack again but that.
1 Miss C. S. Burne, Shropshire Folk-Lore, p. 159.


GERI-LANTA SUPREME CHERRY - calcium carbonate and magnesium hydroxide suspension
Geri-Care Pharmaceuticals, Corp
Disclaimer: Most OTC drugs are not reviewed and approved by FDA, however they may be marketed if they comply with applicable regulations and policies. FDA has not evaluated whether this product complies.
Ask a doctor before use if you have
• kidney disease
• a magnesium-restricted diet
Ask a doctor or pharmacist before use if you are taking a prescription drug.
Antacids may interact with certain prescription drugs.
Stop use and ask a doctor if symptoms last more than 2 weeks
If pregnant or breast-feeding, ask a health professional before use.
• shake well before use
• adults and children 12 years and older: take 2 to 4 teaspoonfuls between meals, at bedtime, or as directed by a doctor
• do not take more than 18 teaspoonfuls in 24 hours or use the maximum dosage for more than 2 weeks
• children under 12 years: ask a doctor
• each 5 mL teaspoonful contains: calcium 160mg, magnesium 55 mg
• refrigerate after opening to preserve freshness and purity
• protect from freezing
• keep tightly closed
• TAMPER-EVIDENT: Do not use if breakaway band on bottle cap is missing or broken.
|
GERI-LANTA SUPREME CHERRY
calcium carbonate, magnesium hydroxide suspension | ||||||||||||||||||||
| ||||||||||||||||||||
| ||||||||||||||||||||
| ||||||||||||||||||||
| ||||||||||||||||||||
| ||||||||||||||||||||
|
| Labeler - Geri-Care Pharmaceuticals, Corp (611196254) |
| Registrant - GCP Laboratories (965480861) |


ADMIN ONLY. Update an individual recall record.
The request method is PUT.
For example:
PUT /vehicleRecall/recall HTTP/1.1 Host: test.alpineconnectivity.com:8888
Data is passed to POST & PUT services via the body of the HTTP request.
This service passes data in this fashion in a JSON data structure.
An example of the data structure and a detailed description of its elements follows...
PUT /vehicleRecall/recall HTTP/1.1 Host: test.alpineconnectivity.com:8888 { "id": "52e198f103647b232f8b7e71", "recordId" : "123456789", "vehicleMake": "FORD", "vehicleModel": "MUSTANG", "year": "2007", "manufacturerFilingDefect": "DOPE, INC.", "beginDateOfManufacturing": "", "endDateOfManufacturing": "", "recallType": "E", "unitsAffected": "42540", "dateNotifiedByMfr": "20090728", "recallInitiator": "OVSC", "manufacturer": "Ford Motor Company", "reportReceivedDate": "20090511", "reportCreationDate": "20090511", "regulationPartNumber": "571", "fmvssNumber": "108", "defectSummary": "DOPE, INC. IS RECALLING 42,540 COMBINATION CORNER AND BUMPER LAMP ASSEMBLIES OF VARIOUS PART NUMBERS SOLD FOR USE AS AFTERMARKET EQUIPMENT FOR VARIOUS PASSENGER VEHICLES. THESE HEADLAMPS FAIL TO CONFORM TO THE REQUIREMENTS OF FEDERAL MOTOR VEHICLE SAFETY STANDARD NO. 108, \"LAMPS, REFLECTIVE DEVICES, AND ASSOCIATED EQUIPMENT.\" THESE LAMPS DO NOT CONTAIN THE REQUIRED AMBER SIDE REFLECTORS.", "consequenceSummary": "DECREASED LIGHTING VISIBILITY MAY RESULT IN A VEHICLE CRASH.", "correctiveSummary": "DOPE, INC. WILL NOTIFY OWNERS AND OFFER A FULL REFUND FOR THE NONCOMPLIANT COMBINATION LAMPS. THE SAFETY RECALL BEGAN ON JULY 28, 2009. OWNERS MAY CONTACT DOPE, INC. AT 1-626-272-1798. ", "recallNotes": "THIS RECALL ONLY PERTAINS TO AFTERMARKET REPLACEMENT EQUIPMENT AND HAS NO RELATION TO ANY ORIGINAL EQUIPMENT INSTALLED ON VEHICLES PRODUCED BY THE VEHICLE MANUFACTURER.IN ORDER TO DETERMINE IF YOUR AFTERMARKET LAMP ASSEMBLY IS AFFECTED BY THIS NONCOMPLIANCE, PLEASE REVIEW THE LIST OF MODEL NUMBERS PROVIDED TO US BY DOPE, INC.THE LIST CAN BE FOUND UNDER \"DOCUMENT SEARCH\" LOCATED AT THE BOTTOM OF YOUR SCREEN. OWNERS MAY ALSO CONTACT THE NATIONAL HIGHWAY TRAFFIC SAFETY ADMINISTRATION'S VEHICLE SAFETY HOTLINE AT 1-888-327-4236 (TTY 1-800-424-9153), OR GO TO HTTP://WWW.SAFERCAR.GOV .", "recallComponentId": "000031517000219072000000217", "created":<PHONE_NUMBER>374, "updated":<PHONE_NUMBER>374 }
Data in the JSON ...
| id (required) |
(Alpine) unique ID for this recall. |
| record (required) |
(Government) unique ID for this recall. |
| vehicleMake (required) |
The "make" of the vehicle. |
| vehicleModel (required) |
The "model" of the vehicle. |
| year (required) |
The "year" of the vehicle. |
| manufacturerFilingDefect (NOT required) |
|
| beginDateOfManufacturing" (NOT required) |
|
| endDateOfManufacturing (NOT required) |
|
| recallType (NOT required) |
|
| unitsAffected (NOT required) |
|
| dateNotifiedByMfr (NOT required) |
|
| recallInitiator (NOT required) |
|
| manufacturer (NOT required) |
|
| reportReceivedDate (NOT required) |
|
| reportCreationDate (NOT required) |
|
| regulationPartNumber (NOT required) |
|
| fmvssNumber (NOT required) |
|
| defectSummary (required) |
A summary description of the defect. |
| consequenceSummary (required) |
A summary of the consequences of the defect. |
| correctiveSummary (required) |
A summary of the corrective actions to be taken. |
| recallNotes (NOT required) |
|
| recallComponentId (NOT required) |
|
| created (required) |
The time that this recall was recording by alpine. (Specified as an epoch time value). |
| updated (required) |
The time that this recall was updated by alpine. (Specified as an epoch time value). |
The following response codes are possible from this service.
(Client code must handle each of them.):
The content of the body of the HTTP Response will always be JSON.
Therefore, the following header will always be sent:
Content-Type: application/json
The body of the response should always contain JSON.
The type of JSON returned varies by the response code.
4 types of JSON are possible.
If the service executed successfully
JSON like the following will be returned in the body of the response:
HTTP/1.1 200 Success
If there was a major error the request that prevents us from even processing it,
the standard JSON describing the error will be returned in the body of the response:
HTTP/1.1 400 Bad Request { "errorCode": 1, "errorMessage": "INVALID JSON", "data": "No JSON was POSTed!" }
If a valid username/password was not passed via the Basic Authentication mechanism, this error code will be returned.
HTTP/1.1 401 Not Authorized WWW-Authenticate: Basic realm="alpineconnectivity.com" { "errorCode": 401, "errorMessage": "Not Authorized", "data": "Authorization header was not found." }
If an error occurred on the server that prevents us from satisfying the request,
the standard JSON describing the error will be returned in the body of the response:
HTTP/1.1 500 Server Error { "errorCode": 3, "errorMessage": "SERVER ERROR", "data": "Error inserting record into the database.." }


| lpo# | Ref | Client | Ordered Items | Flag | Date |
|---|
| P.O# | Ref | Vendor | purchase Items | Flag | Date |
|---|
| Name | description | Unit Price |
|---|
| Name | description | Unit Price |
|---|
| Title | Fabric Code | Size | Gender | Details | Measurements | Embroidry | Logo |
|---|
| Name | Company Name | Street Address | City | Phone |
|---|
| Name | Company Name | Street Address | City | Phone |
|---|


- Ej ty, check me out!
- In this game called LIFE, I have leveled up and gained experiences in certain area.
- You can inspect my stats by typing the command below in the console:
- cat info, cat skills, cat passion,cat achievements, cat education, cat work_experiences
- See other list of commands by typing help, or download a copy of my CV with download kokyuanting.pdf.


| About Dailyrotten |
|
Feedback
If you like this page, hate it, or would like to suggest changes,
<EMAIL_ADDRESS>is listening. This page
is experimental and somewhat different from what we usually offer, so please
do send your feedback.
Adding Stories
If you are a rotten newshound and you would like to suggest a story,
visit our submit page to
send us the URL. Stories that are accepted will have your name credited.
Viewership
On the first full day this page went live, 100,000 people visited this Rotten
News page. Of course that was the day after the WTC attacks, so that number is
somewhat distorted. Right now this page gets between 50,000 and 75,000 people
every day.
Linking
We encourage everyone to link to this page; if you like it, others probably
will as well.
Other Rotten
Rotten
Gaping Maw
Celebrity Morgue
Mugshots
Rotten Store
Shockumentary
Rate My Poo
Rate My Kitten
Rate My Finger
Penny Postcards
Phallic
Boners
Dead Pool
NNDB
Home
Make Dailyrotten your start page
|
|
|
May 04, 2003
North Korea pretending to aim hundreds of nukes at U.S.
Sky News | Submitted by: DailyRottenFan
The executive director of the Centre for Korea-American Peace claims that North Korea possesses a "minimum [of] 100 nuclear warheads, maximum 300." And furthermore, the unofficial NK spokesman claims: "They all lock onto American cities." Even though he's been saying this for two months, nobody's actually buying it. 1-3 warheads? Maybe. 100-300?  Tell you what: incinerate a couple dozen cities, and we'll revise our estimates.
|
|
Read article...
|
|
Australian offered $1.5 million for his wife
News Corporation | Submitted by: Dirty Sammy
"A British businessman has offered a husband $1.5 million if he lets his wife spend the rest of her life with him." Why bother bargaining with the husband? Cut out the middleman and just cut a deal with the wife.
|
|
Read article...
|
|
Teen's drug lab/bomb workshop/fake ID factory raided
Boston Herald | Submitted by: Reid Fleming
Police searched the home of a 17-year-old looking for evidence of a fake ID business. That they found, along with a marijuana stash and some stolen property. Plus a laboratory where the teenager made pipe bombs and cooked up ecstacy and methamphetamines. At least he's got hobbies.
|
|
Read article...
|
|
Baseball heroes promoting incest babies
San Francisco Chronicle | Submitted by: Reid Fleming
A group of former major-league baseball figures are working to outlaw euthanasia, stem cell research, and abortion under any circumstances. They have donated autographs and memorabilia to raise money for a group whose mission is to ban abortion across the board, even in the case of rape and incest. Their motto? "Pro-life -- without exception, without compromise, without apology."
|
|
Read article...
|
|
Serial foot licker on trial again
Newsday | Submitted by: Tim Howard
"A man convicted of licking the feet of three female shoppers in Rhode Island is facing a trial in June on charges he allegedly licked a woman's foot in a Massachusetts supermarket. Raymond C. Dublin, 35, of Rhode Island, is finishing a one-year sentence for simple assault charges in connection with the foot-licking complaints in Rhode Island. Dublin allegedly sneaked up behind a woman last year at a Bellingham supermarket and licked her feet and toes."
|
|
Read article...
|
|
Family values crusader gambled away $8 million
Chicago Sun-Times | Submitted by: Tim Howard
"William Bennett, the former Cabinet secretary and family values campaigner, is a high-rolling gambler who has lost millions over the last decade, according to published reports. Casino documents show Bennett is a 'preferred customer' in at least four venues in Atlantic City and Las Vegas." Bennett, who may have lost more than $8 million over the last ten years, collected snippets from hundreds of famous works and published The Book of Virtues. Please don't call him an author.
|
|
Read article...
|
|
Australian casino robber gone loco
News Corporation | Submitted by: Dirty Sammy
Thomas Mangos used a plastic toy gun to rob the Crown Casino last year, and walked away with $136,600 Australian. Then he went off on a three-week gambling spree. Mangos had once been a millionaire, but he lost it all in the casinos. You've got to know when to fold 'em.
|
|
Read article...
|
|
Endangered species: not just for breakfast
entertainment.tv.yahoo.com | Submitted by: Tim Howard
The upcoming cookbook 101 Exotic and Exquisite Meals includes recipes for Green Sea Turtle Soup, Raspberry-glazed Spotted Owl, Grizzly Bear Sausage, Bighorn Sheep Lamb Chops in Garlic Marinade and Snail Darter Kebabs. One wildlife activist opined: "This cookbook is appalling. It implicitly calls for the slaughter of creatures that are at the verge of extinction." Well duh.
|
|
Read article...
|
|
Another documentary about the differently-abled
Sacramento Bee | Submitted by: Tim Howard
A new film details the everyday lives of a Sacramento family.  Katie, mentally disabled by fetal alcohol syndrome, smothers him in a hug. Chloe, her joints frozen by a birth defect, jumps into his lap. Libby, who has spina bifida, turns up the volume on the television while Margaret, the big sister born with a seizure disorder, dishes with her boyfriend. Soon, Anthony, who suffers from a rare genetic disease that causes his skin to blister and peel at the slightest touch, will come downstairs, and Xenia and Hannah, both born without legs, will arrive home from school."
|
|
Read article...
|
|
Let's just give it a rest already
Associated Press | Submitted by: Dirty Sammy
There was exactly one protestor outside the recent Dixie Chicks concert in Orlando, Florida. Evidently somebody thought it was important enough to spend his evening standing outside with a sign saying "I Am Ashamed The Dixie Chicks Are From Texas." No doubt this guy is always the last to sit down when the wave rolls through his section of the grandstand.
|
|
Read article...
|
|
Little girl needs operation very, very badly
All Africa | Submitted by: Dirty Sammy
"Habbi Jarju, 5, had undergone surgery operations at the Royal Victoria Hopital since she was born, but doctors there could not find a way around her deficiency, which meant that she had to be aided every time her body needed to expend excreta. This physiological inconvenience had prompted the RVH to poke two holes into her stomach to allow natural excretion to take place as a temporary solution until she is able to secure funds for medical surgery abroad."
|
|
Read article...
|
|
Death by corkscrew
iAfrica | Submitted by: Tim Howard
"A woman allegedly killed her cousin with a bottle opener during an argument at their house in Ashton, near Worcester in the Western Cape on Friday, police said. Captain William Reid said the woman (31) was arrested after she had allegedly stabbed her male cousin (42) in the chest with a corkscew bottle opener and he died at the scene."
|
|
Read article...
|
|
Employees paid to visit porn sites
SiliconValley.com | Submitted by: Any Mouse
"Viewing porn all day is not as titillating as some would think. Some porn-trackers have quit after a few days. All are told that counseling is available. Pay starts at $10/hour. Most like the job because of the people they work with, not the porn." I would much rather like to hear from the ones who hate the people they work with but love the porn.
|
|
Read article...
|
|
|
|
|


?REVISION
OF
CANAVALIA,
1962
Subgenus
Canavalia
Canavalia
maritima
(Aubl.)
Thou
BIMINI
ISLAND
GROUP
Bahamas,
B.W.I.
R.
A.
&
E.
S.
Howard
9991
New
York
Botanical
Garden
lblb3bb
1616366
Legend -
Level of confidence that token is an accurately-transcribed word
extremely low
very low
low
undetermined
medium
high
very high


Gloucester 20-25 Toulouse: Gloucester beaten in Champions Cup opener
Scrum-half Joe Simpson scored two magnificent tries but it was not enough to get Gloucester's European campaign off to a winning start as they were beaten 25-20 by Toulouse in the Champions Cup.
Simpson's two first-half efforts temporarily took the wind out of French sails but Toulouse regrouped to dominate the second half by scoring 16 unanswered points and ran out deserved winners.
Danny Cipriani converted both of Simpson's tries and kicked two penalties to complete the scoring for Gloucester.
Sebastien Bezy scored a try for Toulouse, which Thomas Ramos converted as well as kicking four penalties, with Romain Ntamack kicking another penalty and Zack Holmes adding a drop goal.
A knock-on from Gloucester wing Tom Marshall surrendered early possession and the visitors took advantage to take the lead with a neat drop goal from Holmes.
Toulouse continued to have the better of the opening exchanges but, against the run of play, the hosts scored a brilliant opening try.
From just outside their 22, Gloucester nicked a line-out for Simpson to burst away and inter-pass with Matt Banahan before the scrum-half ran 55 metres to just hold off the tackle of Ramos and crash over.
Ten minutes later, Simpson scored an even better one. Clever play from international three-quarters Yoann Huget and Ntamack had taken the French menacingly into the home 22 but the visitors lost possession for Simpson to pick up and run fully 80 metres for a superb score.
Toulouse were stunned but still continued to dominate territory and possession and were rewarded with a penalty from Ramos.
Ramos kicked another penalty but Cipriani succeeded with two to give Gloucester a 20-9 lead at the end of a breathtaking first half.
Toulouse brought on Scotland lock Richie Gray and withdrew outside half Holmes at the interval and the changes paid immediate dividends when Ntamack and Ramos both kicked penalties to reduce the deficit.
The French dominated the third quarter as they penned the hosts in their own half but despite some excellent ball-handling skills, they were unable to break down a stubborn Gloucester defence and remarkably the home side still held a 20-15 lead going into the final quarter.
However, Gloucester had to crack against a fierce onslaught and Bezy was on hand to secure the crucial touchdown which Ramos converted to put his side into the lead for the first time.
Mark Atkinson was then penalised for a late tackle and Ramos knocked over the resulting kick to complete Toulouse's comeback.


Mobflare is a mobile application which allows any number of
phone cameras to be synchronized, coordinating them so that
they all flash
simultaneously or in patterns. You can use it at concerts,
parties, sporting events, demonstrations, boring business meetings,
or anywhere a bunch of people want to lighten things up.
Remember that scene in Hitchcock's Rear Window where Jimmy Stewart blinds his attacker with a big flash bulb? Well, one puny little phone camera is not gonna do it, but get a big enough crowd together and perhaps you can stop Godzilla
Build a crowdsourced light-field camera (once there's support for taking a picture instead of just firing the flash)
Any other legal activity you can dream up
What Do I Need?
An Android phone (until someone develops an iPhone port)
with a flash on the camera
and Internet access (no Bluetooth...yet)
also a network-synchronized clock (most phones are set up for this by default; if not, use an app such as ClockSync)


Numbers
Rules: Use the given numbers (once or not at all) and the four basic binary operators (+,–,×,÷) to reach the target value.
Main Menu
Created by Maxime Robeyns (2018). Feel free to contribute.
Rules: Use the given numbers (once or not at all) and the four basic binary operators (+,–,×,÷) to reach the target value.
Main Menu
Notes:
Answer:
Created by Maxime Robeyns (2018). Feel free to contribute.


China Planning Record Sale of Dollar Bonds
Insiders anticipate offering at $6 billion
by Zero HedgeChina is set to expand its bond market through a record sale of sovereign bonds in dollars, according to Bloomberg sources.
The bond offering could raise up to $6 billion, would be one of the largest dollar bond offerings on record. The offering could be seen as soon as Tuesday.
Sources said the Ministry of Finance is considering tenors of three years, five years, 10 years and 20 years:
“It reaffirms China’s determination to develop an orderly offshore dollar bond market for Chinese issuers,” Anne Zhang, head of fixed income for JPMorgan Private Bank in Asia, told Bloomberg. “The new deal will further complete a sovereign curve,” she said.
The size of the issuance would be more than double last year’s size, and triple the amount from 2017.
“The size is twice what it was last year, that just speaks to the fact that the past two years have been perceived as successful by the Ministry of Finance,” a banker working on one of the dollar bond deals told The Financial Times. He added that previous offers were “not enough to match demand.”
The Chinse dollar bond market is valued at around $740 billion, according to Bloomberg data, and is an important funding source for domestic borrowers.
China Is Telling Us What We Can Say In America
Alex Jones breaks down the entertainment and media industry in America being taken over by the Chinese.
Dollar bond issuances slid in 2018 following the escalation of the trade war. Despite the further escalation of the trade war in 2019, dollar bond issuances have increased as US treasury yields have fallen.
Dollar bond demand from Chinese borrowers has been elevated in 2019, so far there has been $195 billion in recorded issuances, already surpassing levels seen in 2017 at $211 billion.
At least 53% of the dollar bonds issued this year have been investment-grade securities and 38% high yield notes.
Property developers have been a huge source of demand for the dollar bond market this year with at least $78.5 billion of the issuances.
Becky Liu, head of China macro strategy at Standard Chartered Plc in Hong Kong, told Bloomberg that China is expanding its dollar bond market for companies to have ample funding amid periods of uncertainty:
While China has the world’s second-largest bond market, in some ways it remains relatively underdeveloped, according to Becky Liu, head of China macro strategy at Standard Chartered Plc in Hong Kong. The country is still building out a domestic institutional investor base such as the pension funds and insurers that are a major feature overseas. Banks are the main holders of bonds onshore. “There is a good number of companies that do not have a funding channel at home,” Liu said. That’s why even domestic-focused enterprises can tap the dollar-debt market, she said.The record China sale isn’t huge relative to some other sovereign issues. Italy sold $7 billion of dollar bonds last month. Argentina sold $9 billion in January 2018.
And it makes sense why China is ramping up its dollar borrowing because once it displaces the dollar as a reserve currency with yuan, it would be cheaper to repay dollar debt as the dollar is crushed into oblivion. China is playing the long game.
ADL Launches Hostile Takeover Against Silicon Valley’s Big 6
Bill of Rights under assault.


An interactive, infinite-looping scroller jQuery plugin that applies a motion hover effect to a list of HTML elements just like a carousel.


align |
string
|
Shorthand for css align-items, This defines the default behaviour for how flex
items are laid out along the cross axis on the current line. |
auto |
bool
|
Shorthand for css flex: 1 1 auto |
basis |
string
|
number
|
Shorthand for css flex-basis, it defines the default size of an element
before the remaining space is distributed |
className |
string
|
By default this element will have className of 'flex' or 'inline-flex', this
property is for extra classes |
col |
number
|
How many x of 1/12 of width of the parent container that this element should take.
This equals to css width: (col * 100 / 12)% |
fullWidth |
bool
|
Shorthand for css width: 100% |
grow |
number
|
Shorthand for css flex-grow, it defines what amount of the available
space inside the flex container the item should take up |
inline |
bool
|
Make this Flex to be inline-flex which displays itself as inline |
justify |
string
|
Shorthand for css justify-content, it defines the alignment along the main axis. |
order |
number
|
Controls the order in which this Box appears in the Flex container |
reverse |
bool
|
Reverse the direction of aligning items |
shrink |
number
|
Shorthand for css flex-shrink, it defines the ability for a flex item
to shrink if necessary. |
style |
object
|
Element style |
wrap |
string
|
Shorthand for css flex-wrap, it allows the items to wrap as needed |


You have Gym
~ Refath
Settings
Select:
Settings
To Do List
Contacts
Options
settings
Settings
check
To-Do
contacts
Contacts
settings
Settings
check
To-Do
contacts
Contacts
Contacts
Options
settings
Settings
check
To-Do
contacts
Contacts
Settings
Options
settings
Settings
check
To-Do
contacts
Contacts
Google
Change
Done
Amazon
Change
Done
Youtube
Change
Done
Facebook
Change
Done
Speed
Change
Done
Background Image
Go
Simplify
Weather
switch units
switch units


Get started
BitDegree API is currently at version 1.0 and the root endpoint is https://www.bitdegree.org/api/v1.0/ for all resources.
To use this API, you need an API key. API key can be generated on BitDegree website.
get courses
To get courses you need to make a GET call to the following url :
https://www.bitdegree.org/api/v1.0/courses
QUERY PARAMETERS
| Field | Type | Description |
|---|---|---|
| api_key | String | Your API key. |
| page | Integer | (optional - default: 1) A numeric value indicating the current page. |
| page_size | Integer | (optional - default: 15) A numeric value indicating the page size. Max: 100 |
| instructor_data | Boolean |
(optional) If true, courses will have instructor data |
| category_data | Boolean |
(optional) If true, courses will have category data |
Errors
BitDegree API uses the following error codes:
| Error Code | Meaning |
|---|---|
| 400 |
Missing header Accept: application/json
|
| 401 |
Unknown, missing or invalid api_key .
|
| 414 | Request parameters are too long. Maximum length: 190 |
| 429 | Daily request limit reached. |
| 500 | Server error |


User Guide - Guide to using the WICS converters
ITS, or the Internationalization Tag Set, is a standard for adding internalization-related information to XML, XLIFF, and HTML5 documents. For example, using this tag set you can mark parts of a document as untranslatable, as needing special treatment for a given locale, or as being related to a given media resource.
ITS provides for two methods of annotating documents. The first is through local attributes. The second is through global rules, which use a query language (XPath for now) to select nodes to be annotated.
In XML,
ITS information is added to the document via markup in the http://www.w3.org/2005/11/its
namespace.
In HTML5,
most ITS attributes begin with its-
,
but the ITS standard also strives to re-use attributes already available in HTML5,
such as translate
.
Elements in the ITS namespace can be used,
if contained in a


 Every year around 50,000 people die in the US due to brain trauma and about 1 million cases are reported in India. A clinically usable pressure sensor comprising of a polylactic-co-glycolic acid membrane suspended in a frame of magnesium and silicon was invented by the neurosurgeons working at Washington University School of Medicine in St. Louis and Murphy and Rogers’s duo, engineers at the University of Illinois at Urbana-Champaign.
Neurosurgeons attempt to decrease the pressure inside the skull using medications, in patients with traumatic injuries. They often undergo surgery if the pressure cannot be reduced sufficiently. During such operations, this device could be placed in the brain at multiple locations. Once implanted, this device is absorbed by the body after its time period, which eliminates the need for its surgical removal.
The sensors are accessed remotely by means of wireless connectivity. Advanced wireless brain sensors work on brain-computer interfaces to help severely paralysed people. It measures temperature and intercranial temperatures. It is a fully rechargeable implantable model and it transmits real-time neuron signals. The BCI (Brain Computer Interfaces) system, on which the brain sensors work, acquires, analyses and transmits them into commands. These commands are relayed to an output device.
Silicon and magnesium, present in quantities that are recommended parts in the daily diet are present. Hence on their dissolution, there is minimum chance of infection. The implant may trigger an immune response in a patient body which may lead to infections or inflammation. This is a major limitation.
This remarkable invention will help in therapy of epilepsy, dementia, Parkinson’s disease, Huntington’s disease, migraine, stroke, traumatic brain injuries and sleep disorders.
Did you like it?


Good morning, FIRSTNAME.
It would appear that you haven't found any information of use to Information Acquisition. Now, it's possible that there genuinely wasn't any useful information available, but I doubt it. When I perused the reports, I noticed several suspicious looking pieces of information. You need to work on improving your instincts.
Consider this quote by one of my favourite authors, G.K. Chesterton: "The days of idealism and superstition are over. We live in a time of science and hard common sense, and it has now been definitely proved that in any game where two are playing IF ONE DOES NOT WIN THE OTHER WILL."
In this game, it's us versus the subversives, and if we don't win, they will destroy everything that our glorious civilisation has built. I really hope you haven't been tempted to let things slide. Always remember that if we don't win, they will. If you work on improving your instinct for winning, you may have a successful career ahead of you at AlethiCorp.
As you may have already learned, the investigation is being upgraded, so we will both be reporting to Salvinu Manduca from now on. I am sure he will have even more important lessons to teach you!
Shào


Hi
My name is Maksim Kamenev and I am a lead developer
You can contact me via
mail
,
telegram
or
linkedin>


Polygon Class
Polygon class.
Constructor
Polygon
()
Item Index
Methods
Properties
Methods
append
-
poly
-
from
-
to
Append points "from" to "to"-1 from an other polygon "poly" onto this one.
Parameters:
-
poly
PolygonThe polygon to get points from.
-
from
NumberThe vertex index in "poly".
-
to
NumberThe end vertex index in "poly". Note that this vertex is NOT included when appending.
Returns:
at
-
i
Get a vertex at position i. It does not matter if i is out of bounds, this function will just cycle.
Parameters:
-
i
Number
Returns:
canSee
-
a
-
b
Check if two vertices in the polygon can see each other
Parameters:
-
a
NumberVertex index 1
-
b
NumberVertex index 2
Returns:
clear
()
Array
Clear the polygon data
Returns:
copy
-
i
-
j
-
[targetPoly]
Copy the polygon from vertex i to vertex j.
Parameters:
-
i
Number -
j
Number -
[targetPoly]
Polygon optionalOptional target polygon to save in.
Returns:
The resulting copy.
decomp
()
Array
Decomposes the polygon into one or more convex sub-Polygons.
Returns:
An array or Polygon objects.
first
()
Array
Get first vertex
Returns:
getCutEdges
()
Array
Decomposes the polygon into convex pieces. Returns a list of edges [[p1,p2],[p2,p3],...] that cuts the polygon. Note that this algorithm has complexity O(N^4) and will be very slow for polygons with many vertices.
Returns:
isReflex
-
i
Check if a point in the polygon is a reflex point
Parameters:
-
i
Number
Returns:
isSimple
-
path
Checks that the line segments of this polygon do not intersect each other.
Parameters:
-
path
ArrayAn array of vertices e.g. [[0,0],[0,1],...]
Returns:
last
()
Array
Get last vertex
Returns:
makeCCW
()
Make sure that the polygon vertices are ordered counter-clockwise.
quickDecomp
-
result
-
[reflexVertices]
-
[steinerPoints]
-
[delta]
-
[maxlevel]
-
[level]
Quickly decompose the Polygon into convex sub-polygons.
Parameters:
-
result
Array -
[reflexVertices]
Array optional -
[steinerPoints]
Array optional -
[delta]
Number optional -
[maxlevel]
Number optional -
[level]
Number optional
Returns:
removeCollinearPoints
-
[precision]
Remove collinear points in the polygon.
Parameters:
-
[precision]
Number optionalThe threshold angle to use when determining whether two edges are collinear. Use zero for finest precision.
Returns:
The number of points removed
reverse
()
Reverse the vertices in the polygon
slice
-
cutEdges
Slices the polygon given one or more cut edges. If given one, this function will return two polygons (false on failure). If many, an array of polygons.
Parameters:
-
cutEdges
ArrayA list of edges, as returned by .getCutEdges()
Returns:
Properties
vertices
Array
Vertices that this polygon consists of. An array of array of numbers, example: [[0,0],[1,0],..]


{include file="common/sidenav_index" /}
{include file="common/zone_userinfo" /}
{:__('Home page')}
{:__('Photo album')}
{:__('Returns')}


Problem 2. Quoted text
Create a string variable with quoted text in it.
For example: `'How you doin'?', Joey said'.
Would be best to use console Chrome or Firebug.


Introduction
-
The Pythonic style isn’t regimented or enforced by the compiler. It has emerged over time through experience using the language and working with others.
- Python programmers prefer to be explicit, to choose simple over complex, and to maximize readability.
Item 1. Know Which Version of Python You’re Using
-
Throughout this book, the majority of example code is in the syntax of Python 3.7 (released in June 2018).
-
This book also provides some examples in the syntax of Python 3.8 (released in October 2019)
Item 2. Follow the PEP 8 Style Guide
-
Always follow the Python Enhancement Proposal #8 (PEP 8) style guide when writing Python code.
-
Sharing a common style with the larger Python community facili- tates collaboration with others.
-
Using a consistent style makes it easier to modify your own code later.
-
Whitespace
-
In a file, functions and classes should be separated by two blank lines.
-
In a class, methods should be separated by one blank line.
-
-
Naming
-
Protected instance attributes should be in
_leading_underscore
format. -
Private instance attributes should be in
__double_leading_underscore
format.
-
-
Imports
- Imports should be in sections in the following order: standard library modules, third-party modules, your own modules. Each subsection should have imports in alphabetical order.
Item 3. Know the Differences Between bytes and str
-
bytes contains sequences of 8-bit values, and str contains sequences of Unicode code points.
-
str.encode()
: convert Unicode data to binary data -
bytes.decode()
: convert binary data to Unicode data
-
a = b'h\x65llo'
print(list(a)) # [104, 101, 108, 108, 111]
print(a) # b'hello'
a = 'a\u0300 propos'
print(list(a)) # ['a', '`', ' ', 'p', 'r', 'o', 'p', 'o', 's']
print(a) # à propos
- Use helper functions to ensure that the inputs you operate on are the type of character sequence that you expect (8-bit values, UTF-8-encoded strings, Unicode code points, etc).
# always returns a str
def to_str(bytes_or_str):
if isinstance(bytes_or_str, bytes):
value = bytes_or_str.decode('utf-8')
else:
value = bytes_or_str
return value # Instance of str
# always returns a bytes
def to_bytes(bytes_or_str):
if isinstance(bytes_or_str, str):
value = bytes_or_str.encode('utf-8')
else:
value = bytes_or_str
return value # Instance of bytes
-
bytes and str instances can’t be used together with operators (like >, ==, +, and %).
-
If you want to read or write binary data to/from a file, always open the file using a binary mode (like ‘rb’ or ‘wb’).
-
If you want to read or write Unicode data to/from a file, be careful about your system’s default text encoding. Explicitly pass the encoding parameter to open if you want to avoid surprises.
UnicodeDecodeError: 'utf-8' codec can't decode byte ...
: the file was opened in read text mode (‘r’) instead of read binary mode (‘rb’). When a handle is in text mode, it uses the system’s default text encoding (utf-8) to interpret binary data
Item4. Prefer Interpolated F-Strings Over C-style Format Strings and str.format
-
C-style format strings that use the % operator suffer from a variety of gotchas and verbosity problems.
-
The str.format method introduces some useful concepts in its formatting specifiers mini language, but it otherwise repeats the mistakes of C-style format strings and should be avoided.
-
F-strings are a new syntax for formatting values into strings that solves the biggest problems with C-style format strings.
-
F-strings are succinct yet powerful because they allow for arbitrary Python expressions to be directly embedded within format specifiers.
Item5. Write Helper Functions Instead of Complex Expressions
-
Python’s syntax makes it easy to write single-line expressions that are overly complicated and difficult to read.
-
Move complex expressions into helper functions, especially if you need to use the same logic repeatedly.
-
An if/else expression provides a more readable alternative to using the Boolean operators or and and in expressions.
# before
red = my_values.get('red', [''])[0] or 0
green = my_values.get('green', [''])[0] or 0
opacity = my_values.get('opacity', [''])[0] or 0
# after
def get_first_int(values, key, default=0):
found = values.get(key, [''])
if found[0]:
return int(found[0])
return default
Item6. Prefer Multiple Assignment Unpacking Over Indexing
-
Python has special syntax called unpacking for assigning multiple values in a single statement.
-
Unpacking is generalized in Python and can be applied to any iterable, including many levels of iterables within iterables.
-
Reduce visual noise and increase code clarity by using unpacking to avoid explicitly indexing into sequences.
item = ('Peanut butter', 'Jelly')
first, second = item # Unpacking
Item7. Prefer enumerate Over range
-
enumerate provides concise syntax for looping over an iterator and getting the index of each item from the iterator as you go
-
Prefer enumerate instead of looping over a range and indexing into a sequence.
-
You can supply a second parameter to enumerate to specify the number from which to begin counting (zero is the default).
# before
for i in range(len(flavor_list)):
flavor = flavor_list[i]
print(f'{i + 1}: {flavor}')
# after
for i, flavor in enumerate(flavor_list, 1):
print(f'{i}: {flavor}')
Item 8. Use zip to Process Iterators in Parallel
-
The zip built-in function can be used to iterate over multiple iterators in parallel.
-
zip creates a lazy generator that produces tuples, so it can be used on infinitely long inputs.
-
zip truncates its output silently to the shortest iterator if you supply it with iterators of different lengths.
-
Use the zip_longest function from the itertools built-in module if you want to use zip on iterators of unequal lengths without truncation.
Item 9: Avoid else Blocks After for and while Loops
-
Python has special syntax that allows else blocks to immediately follow for and while loop interior blocks.
-
The else block after a loop runs only if the loop body did not encounter a break statement.
-
Avoid using else blocks after loops because their behavior isn’t intuitive and can be confusing
Item 10: Prevent Repetition with Assignment Expressions
-
Assignment expressions use the walrus operator (:=) to both assign and evaluate variable names in a single expression, thus reducing repetition.
-
When an assignment expression is a subexpression of a larger expression, it must be surrounded with parentheses.
-
Although switch/case statements and do/while loops are not available in Python, their functionality can be emulated much more clearly by using assignment expressions.
# before
while True:
fresh_fruit = pick_fruit()
if not fresh_fruit:
break
...
# after
while fresh_fruit := pick_fruit():
...


-
Websites Are Wary of Facebook Tracking Software
online.wsj.com
Fearing the growing clout of Facebook, some publishers and retailers are reprogramming their websites to send less data back to the social network ...
-
Google Denies It Hurts Competitors or Allows Piracy
blogs.wsj.com
Google argues that the online search leader doesn't use its dominant position to quash competition and tackles web piracy more than most companies.
-
Light Bulbs Get Smarter, but Not Easier
online.wsj.com
Wi-Fi enabled 'smartbulbs' do more, but they can't beat the wall switch for ease of use.
-
Orange Juice Searches for a Fresher Image
online.wsj.com
Orange juice's reputation as a health drink has suffered amid concerns about sugar, and the drink has gotten crowded out of the beverage aisle by ...
-
Starboard Pushes for Potential Yahoo-AOL Tie-Up
online.wsj.com
Activist investor Starboard Value said it has taken a stake in Yahoo and pushed the Internet pioneer to cut costs and explore a possible combination ...
-
Ride-Sharing Services Face Legal Threat From San Francisco, Los Angeles
online.wsj.com
The district attorneys of San Francisco and Los Angeles on Thursday delivered letters to Uber, Lyft and Sidecar accusing them of violating California ...
-
Field Experience Helps Win Board Seats
online.wsj.com
More boards are heeding activist demands to bring on more members with industry experience—and get rid of some without it.
-
Apple's New iPhone Pitch: Privacy
online.wsj.com
Along with new iPhones and a promised smartwatch, Apple Inc. is selling something else these days: privacy.
-
Obama Administration Issues New Rules to Combat Tax Inversions
online.wsj.com
The Obama administration on Monday issued new rules to combat so-called tax inversions, intended to make the deals harder to accomplish and less ...
-
Alibaba Debut Makes a Splash
online.wsj.com
Alibaba shares surged 38% to $93.89 in their market debut, making the Chinese e-commerce giant one of the most valuable companies in the U.S.
-
Student Loan Defaults Vary Wildly by State
blogs.wsj.com
Across the U.S., the share of Americans defaulting on their student loans shortly after leaving school fell in the past year. But the performance of ...
-
U.S. New-Home Sales Surge 18% in August
online.wsj.com
Sales of newly built homes surged last month to the highest level since 2008, an early sign of higher consumer demand that could—if sustained—boost ...
-
Billionaire Vinod Khosla Can’t Block Surfers From Martin’s Beach, Judge ...
blogs.wsj.com
In a showdown of California archetypes, a Superior Court judge ruled Wednesday that venture capitalist billionaire Vinod Khosla couldn’t block access ...
-
Apple Pulls iOS 8.0.1 Update Due to ‘an Issue’
blogs.wsj.com
Apple issued the first update to its iOS 8, then immediately pulled it due to "an issue."
-
Larry Ellison to Step Aside as Oracle CEO
online.wsj.com
Oracle said its longtime leader Larry Ellison will step aside as CEO but take over as chairman of the business software giant. Mark Hurd and Safra ...
-
More Americans Forgo Marriage as Economic Difficulties Hit Home
blogs.wsj.com
For today's women, a good man--an employed, educated one--is harder to find.
-
The Reinvention of the Entry-Level Suit
online.wsj.com
Affordable no longer equals regrettable. Thanks to a suiting revolution led by J. Crew, men without thousands to spend can step out in ...
-
Exposing Hidden Bias at Google - NYTimes.com
www.nytimes.com
Google, like many tech companies, is a man’s world.
-
Marc Andreessen’s Warning to Cash-Burning Startups: “Worry”
blogs.wsj.com
The influential investor joins a growing chorus of cautionary voices in his latest Tweetstorm.
-
Christina Bechhold: How to Prepare for 1 Billion New Internet Users
blogs.wsj.com
CHRISTINA BECHHOLD: According to Cisco’s Visual Networking Index, another 1 billion people will move online in the next few years. The solutions ...
-
DirecTV Shareholders Approve AT&T Deal
online.wsj.com
DirecTVsaid Thursday that its shareholders approved the satellite-television provider's proposed acquisition by AT&T Inc.
-
Apple's iPhone Margin Call
online.wsj.com
Bigger iPhone screens are unlikely to weigh down Apple's profit margins for the time being.
-
How Startups View Alibaba as an Active Investor
online.wsj.com
Alibaba Group HoldingsLtd. is more than an enormous e-commerce conglomerate that just held history's biggest IPO. It's also an increasingly active ...
-
Richard Branson's Tech Essentials
online.wsj.com
The founder of the Virgin Group and author of the new book "The Virgin Way: Everything I Know About Leadership," on his training regimen for space ...
-
Walter Isaacson: Where Innovation Comes From
online.wsj.com
As computer pioneer Alan Turing is honored in the film "The Imitation Game" starring Benedict Cumberbatch, we see now that today's biggest ...
-
The No, 1 reason not to attend a for-profit college - MarketWatch
www.marketwatch.com
Want to make good on your student loans? You may want to steer clear of for-profit colleges.
-
Live Chat with Kickstarter CEO Yancey Strickler
www.inc.com
Yancey Strickler discusses entrepreneurship, leadership, and lessons learned in this exclusive Inc. live chat.
-
Global Anxiety Roils Markets
online.wsj.com
The Dow industrials fell 264.26 points Thursday, and traders and money managers blamed high stock prices, the uncertain global economy and ...
-
Joan Siefert Rose: The Rising Influence of Angels
blogs.wsj.com
Joan Siefert Rose, president of CED: Angel investors are playing a larger role in a greater number of deals. Angels have quietly increased their ...
-
Mike Bergelson: Why the Employee Experience at Startups Is on the Rise
blogs.wsj.com
-- EverwiseMike Bergelson, co-founder and CEO of Everwise: It used to be that working at a young company meant making lots of sacrifices. But there ...


C C#/Db D D#/Eb E F F#/Gb G G#/Ab A A#/Bb B Ionian/Major Dorian Phrygian Lydian Mixolydian Aeolian/Minor Locrian Melodic Minor (Ascending) Harmonic Minor Root Root and 5th Major Pentatonic Minor Pentatonic Chromatic Phrygian Dominant Major Major 6th Dominant 7th Major 7th Minor Minor 7th
Guitar (EADGBE) Guitar (DADGAD) Guitar Open G (DGDGBD) Guitar Open D (DADF#AD) Bass (EADG) 5-String Bass (BEADG) Violin (GDAE) Ukulele (GCEA)