Wednesday, June 14, 2017

How to Learn Programming Languages Faster

The following is an excerpt from The Complete Software Developer's Career Guide by John Sonmez. To get the entire book delivered to your inbox, go here.

How to Learn Programming Languages Faster

For software developers, learning is a journey, not a destination. You will always be able to get better --- if you choose to. I've spent plenty of time developing my technical skills the wrong way. However, I've also learned how to develop technical skills at a lightning fast speed and to teach others at the same time. After all, I created over 50 highly technical developer training courses on Pluralsight over a period of about three years.

I used to think the best way to learn a technical skill was to take a big reference book and read it cover-to-cover.

Back then, I read too many 800+ page books to count and didn't benefit much from the exercise; although my arms might have grown from carrying around books of that size.

I don't want you to make the same mistakes I did, and if you already have, I want to show you a better way.

Learning How to Learn Quickly

Before we get into the specifics about learning technical skills, I think it's worth taking a second to talk about learning anything quickly and teaching yourself in general.

As I mentioned, I spent a large amount of time both learning and teaching various technologies.

I learned whole programming languages in a matter of weeks and then turned around and taught courses on them.

During that process, I developed a reliable system for learning just about anything I needed to learn.

This wasn't so much a conscious effort as it was a necessity. I was trying to learn at such a rapid rate that I had to come up with efficient ways of doing things, and naturally, patterns of learning developed which helped me to become faster and faster.

Here's how it works.

The Basic Process

The basic idea is pretty simple.

Essentially, you want to first get a good idea of what you are learning and what the scope of it is.

You need to get enough information about your subject to understand the big picture and narrow the subject down to a small enough scope that you can actually tackle it and wrap your head around it in a realistic amount of time.

Then, you need a goal. You need to establish what it is you are trying to learn and why and, most importantly, what metric you will use to know that you've learned it.

Far too many people set out to learn something but have no way to measure whether they have succeeded or not.

Equipped with that starting point, you can start to gather some resources for learning.

I recommend not just reading one book cover-to-cover but to instead gather multiple resources, which may include books, blogs, podcasts, magazines, video courses and tutorials, expert opinions, etc.

Then, you are going to use some of those resources to create an actual plan for learning.

You are basically going to figure out in what order to learn everything you need to know about your topic.

Then, you dive in. From your learning plan, start with each module you are going to learn about your subject. For each module, learn enough to get started , play around for a bit, and then go back and answer any questions you had while playing around.

You are basically going to focus on learning by doing , which we'll talk about in a second.

The key here is to not learn too much up front. Instead, utilize natural curiosity to drive your learning as you play around on your own. Then, go back and actually read the text or consume the content about your topic, with questions in your head and some experience which will naturally guide you to seek out what is actually important.

A big problem we face when learning by consuming a bunch of material is that we don't actually know what is important. By playing around first and forming your own questions, you solve that problem and what you learn actually sticks.

Finally, you take what you learned and you teach it to someone else.

It doesn't really matter the format and it doesn't matter who you teach it to. You could talk to your dog or the squirrels in your yard if you like. Doesn't really matter.

What matters is that you somehow reorganize the thoughts in your head in a way that communicates them to the outside world.

This is the place where learning changes from knowledge to understanding.

And that's it.

What we have here is a basic formula you can apply to just about anything you want to learn quickly.

(If you want a more detailed example, with a workbook and videos to help you master this process, I've created an entire course on this approach, called 10 Steps to Learn Anything Quickly.)

Now, let's talk more specifically about learning and developing technical skills.

Learn by Doing

I believe we all learn best by doing, but when it comes to technical skills, this is paramount.

It is just not possible to learn most technical skills by simply reading a book or even watching a video tutorial.

You may get an idea of what is possible using a particular technology, programming language, or tool, but until you've actually used it yourself, or solved problems with it, you are only going to have a surface level understanding.

This might be obvious for programming languages, but can you really learn how to use source control from just reading about the syntax?

If you've never made the mistake of merging a file into the wrong branch or checking out the wrong version of the source code, and you've never actually used a version history to figure out where a bug got introduced, you aren't really going to know how to use source control --- you'll just think you do.

Continue reading %How to Learn Programming Languages Faster%


by John Sonmez via SitePoint

19+ JavaScript Shorthand Coding Techniques

This really is a must read for any JavaScript-based developer. I have written this article as a vital source of reference for learning shorthand JavaScript coding techniques that I have picked up over the years. To help you understand what is going on I have included the longhand versions to give some coding perspective.

June 14th, 2017: This article was updated to add new shorthand tips based on ES6. If you want to learn more about the changes in ES6, sign up for SitePoint Premium and check out our screencast A Look into ES6

1. The Ternary Operator

This is a great code saver when you want to write an if..else statement in just one line.

Longhand:

const x = 20;
let big;

if (x > 10) {
    big = true;
} else {
    big = false;
}

Shorthand:

const big = x > 10 ? true : false;

You can also nest your if statement like this:

const big = x > 10 ? " greater 10" : x < 5 ? "less 5" : "between 5 and 10";

2. Short-Circuit Evaluation Shorthand

When assigning a variable value to another variable, you may want to ensure that the source variable is not null, undefined or empty. You can either write a long if statement with multiple conditionals, or use a short-circuit evaluation.

Longhand:

if (variable1 !== null || variable1 !== undefined || variable1 !== '') {
     let variable2 = variable1;
}

Shorthand:

const variable2 = variable1  || 'new';

Don’t believe me? Test it yourself (paste the following code in es6console):

let variable1;
let variable2 = variable1  || '';
console.log(variable2 === ''); // prints true

variable1 = 'foo';
variable2 = variable1  || '';
console.log(variable2); // prints foo

3. Declaring Variables Shorthand

It is good practice to declare your variable assignments at the beginning of your functions. This shorthand method can save you lots of time and space when declaring multiple variables at the same time.

Longhand:

let x;
let y;
let z = 3;

Shorthand:

let x, y, z=3;

4. If Presence Shorthand

This might be trivial, but worth a mention. When doing “if checks”, assignment operators can sometimes be omitted.

Longhand:

if (likeJavaScript === true)

Shorthand:

if (likeJavaScript)

Here is another example. If “a” is NOT equal to true, then do something.

Longhand:

let a;
if ( a !== true ) {
// do something...
}

Shorthand:

let a;
if ( !a ) {
// do something...
}

5. JavaScript for Loop Shorthand

This little tip is really useful if you want plain JavaScript and not rely on external libraries such as jQuery or lodash.

Longhand:

for (let i = 0; i < allImgs.length; i++)

Shorthand:

for (let img in allImgs)

Shorthand for Array.forEach:

function logArrayElements(element, index, array) {
  console.log("a[" + index + "] = " + element);
}
[2, 5, 9].forEach(logArrayElements);
// logs:
// a[0] = 2
// a[1] = 5
// a[2] = 9

6. Short-Circuit Evaluation

Instead of writing six lines of code to assign a default value if the intended parameter is null or undefined, we can simply use a short-circuit logical operator and accomplish the same thing with just one line of code.

Longhand:

let dbHost;
if (process.env.DB_HOST) {
  dbHost = process.env.DB_HOST;
} else {
  dbHost = 'localhost';
}

Shorthand:

const dbHost = process.env.DB_HOST || 'localhost';

7. Decimal Base Exponents

You may have seen this one around. It’s essentially a fancy way to write numbers without the trailing zeros. For example, 1e7 essentially means 1 followed by 7 zeros. It represents a decimal base (which JavaScript interprets as a float type) equal to 10,000,000.

Longhand:

for (let i = 0; i < 10000; i++) {}

Shorthand:

for (let i = 0; i < 1e7; i++) {}

// All the below will evaluate to true
1e0 === 1;
1e1 === 10;
1e2 === 100;
1e3 === 1000;
1e4 === 10000;
1e5 === 100000;

8. Object Property Shorthand

Defining object literals in JavaScript makes life much easier. ES6 provides an even easier way of assigning properties to objects. If the property name is the same as the key name, you can take advantage of the shorthand notation.

Longhand:

const obj = { x:x, y:y };

Shorthand:

const obj = { x, y };

9. Arrow Functions Shorthand

Classical functions are easy to read and write in their plain form, but they do tend to become a bit verbose and confusing once you start nesting them in other function calls.

Longhand:

function sayHello(name) {
  console.log('Hello', name);
}

setTimeout(function() {
  console.log('Loaded')
}, 2000);

list.forEach(function(item) {
  console.log(item);
});

Shorthand:

sayHello = name => console.log('Hello', name);

setTimeout(() => console.log('Loaded'), 2000);

list.forEach(item => console.log(item));

10. Implicit Return Shorthand

Longhand:

function calcCircumference(diameter) {
  return Math.PI * diameter
}

Longhand:

calcCircumference = diameter => Math.PI * diameter;

11. Default Parameter Values

You can use the if statement to define default values for function parameters. In ES6, you can define the default values in the function declaration itself.

Continue reading %19+ JavaScript Shorthand Coding Techniques%


by Michael Wanyoike via SitePoint

Sass Basics: The Sass Mixin Directive

Sass Mixins

This article first appeared on SitePoint in 2015 and republished on 14th June 2017 following a number of small corrections and revisions.

For me finding Sass was a revelation. For the longest time I had tired of writing plain or 'vanilla' CSS. For a small site it was fine, but for larger sites the CSS quickly got out of hand. Debugging was a nightmare and I couldn't help but feel like I could do more with my CSS.

I found Sass and everything changed. With Sass I could break my CSS down into modular chunks to make troubleshooting a breeze. I could also use programming concepts, such as functions and variables, when creating my CSS. And most importantly Sass introduced me to Mixins.

What Is a Sass Mixin?

A mixin allows you to create reusable chunks of CSS. Being able to do this will help you to avoid writing repetitive code. For example:

[code language="css"]
a:link { color: white; }
a:visited { color: blue; }
a:hover { color: green; }
a:active { color: red; }
[/code]

Writing this code over and over again can get old very quickly, especially if you have a large site with a lot of links. You can create the styles for your links with a Sass mixin like this:

[code language="sass"]
@mixin linx ($link, $visit, $hover, $active) {
a {
color: $link;
&:visited {
color: $visit;
}
&:hover {
color: $hover;
}
&:active {
color: $active;
}
}
}
[/code]

How to Include a Sass Mixin

To make use of a mixin you have to include it in your Sass files. To call the linx mixin from above you would add this line:

[code language="sass"]
@include linx(white, blue, green, red);
[/code]

The @include directive allows you to use mixins within your Sass files.

How to Create a Sass Mixin

To create a mixin you use the @mixin directive. For example:

[code language="sass"]
@mixin sample {
font-size: 12px;
}
[/code]

You define this directive by using @mixin followed by the name of the mixin. You can also optionally include arguments in your mixin, like you did with the linx mixin above.

You can also use variables in your mixin, which are defined elsewhere in your Sass files. Let's say you wanted to use $font-base as a variable in your mixin. As long as the variable has been defined you can use it in your mixin:

[code language="sass"]
$font-base: 12px;

@mixin sample {
font-size: $font-base;
}

p {
@include sample;
}
[/code]

The resulting CSS is:

[code language="css"]
p {
font-size: 12px;
}
[/code]

Arguments in Sass Mixins

Continue reading %Sass Basics: The Sass Mixin Directive%


by Reggie Dawson via SitePoint

Measuring the Effects of Brotli Compression on WordPress

WordPress is a great CMS for a variety of reasons. It's easy to use, has a great community, is configurable, and much more. However, one thing that WordPress users seem to struggle with quite often is the performance of their WordPress site. This post will take a look at Brotli Compression, and its effects on the performance of WordPress.

Disclaimer: I work for KeyCDN and have referenced a couple of their articles and tools here.

There are many "Speed up WordPress posts" available online that provide great insight into how to improve the loading times of your site using a variety of methods, including optimizing via plugins. However, since Google's release of their newest compression algorithm - Brotli, there hasn't been much data collected to determine what sort of performance improvements one might experience from enabling it on a WordPress site.

In this article, we're going to be measuring the effects of Brotli compression by testing WordPress performance under three different scenarios:

  1. WordPress with Gzip enabled
  2. WordPress with Brotli enabled
  3. Wordpress with Brotli enabled + a Brotli-supported Content Delivery Network

What Is Brotli Compression?

Named after a Swiss bakery product, Brotli is a relatively new compression algorithm released by Google back in 2015. According to Google, Brotli compression uses a combination of a modern variant of the LZ77 algorithm, Huffman coding and 2nd order context modeling.

Google has performed various tests using the Brotli compression algorithm and has benchmarked the results against other modern compression algorithms. Based on this study, Google found that Brotli outperformed Zopfli (another modern compression algorithm) on average by 20-26% in terms of the compression ratio. When it comes to performance, having your files compressed to be smaller in size is always welcome.

Install and Configure Brotli on Your Server

One of the minor downsides of Brotli is that it is not yet officially distributed on any popular web servers. This means that if you want Brotli enabled on your server today, you'll need to do a bit of your own configuration work. For the following Brotli performance tests, everything was carried out on Ubuntu 16.04.2 LTS running Nginx (Need to learn about using Nginx? Check out the SitePoint Premium course Faster Websites with Nginx). Below, we'll step through the process of how you can get Brotli up and running using the same OS and web server.

Ubuntu 16.04 is the first Ubuntu distribution that allows you to install Brotli using apt-get. To do this simply run:

$ apt-get update && apt install brotli

Once that is complete, you'll need to install the Nginx module for Brotli compression and compile the latest version of Nginx (currently 1.13.0):

$ git clone --recursive http://ift.tt/1MiQtZN ngx_brotli

$ wget http://ift.tt/2pxsK8K
$ tar zxvf nginx-1.13.0.tar.gz
$ cd nginx-1.13.0

$ ./configure --add-module=../ngx_brotli
$ make && make install

Brotli should now be properly installed on your server. Next, you'll need to configure your nginx.conf file to specify your desired configuration directives. The following directives were used for the purposes of these performance tests; however, you can modify them as you see fit.

Brotli Settings

brotli on;
brotli_comp_level 3;
brotli_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;

A full list of directives can be found on Nginx module Github page.

Since the nginx.conf file was modified, the last step is to reload Nginx. To do this, run the following command:

systemctl reload nginx

Continue reading %Measuring the Effects of Brotli Compression on WordPress%


by Cody Arsenault via SitePoint

Hosting: What are Multi-Domain and Reseller Plans?

Many web developers and agencies choose to handle hosting for their clients. This provides a number of benefits to both parties:

  • Few clients understand the implications of hosting -- that's why they hired you!
  • Clients are less likely to break their systems if you have control of DNS, databases and email.
  • Charging fees above the actual hosting cost provides a regular income.
  • The client has less reason to go elsewhere.
  • You have more leverage in the event a client fails to pay bills.
  • You could consider offering hosting services to anyone -- not just your own clients.

Of course, it may not be as practical or lucrative as you expect…

  • Hosting can become a full-time job. Few developers want to spend their days configuring systems.
  • The service becomes your responsibility. Be prepared for 3am support calls when someone can't access their email.
  • Any profits can be wiped out if you encounter hosting or support issues.

Continue reading %Hosting: What are Multi-Domain and Reseller Plans?%


by Craig Buckler via SitePoint

How to Build a Cryptocurrency Auto-Trader Bot with PHP? 💰

This tutorial will walk you through the full process of building a bitcoin bot with PHP - from setup, on to your first execution of an automated trade, and beyond.

Cryptocurrencies

I should not need to tell you but, a couple of months ago you could buy the cryptocurrency Ether for $11, it rapidly went up to $43 (I bought in between those prices) and has now gone to over $335 as of June 2017. Those kinds of gains are nearly unbelievable to a traditional investor and yet these are across the board in this space.
Excited yet? So here is a scenario:

You made a ton of money on cryptocurrencies and have some concerns about shuffling it through your bank because of potential capital gains tax issues. There are places that have a solution for you if you want to be able to use this money for other investments. These places won’t make you photograph your license and send it in, just use an email and they provide you with a BTC deposit wallet, demo accounts, APIs, then when you are ready, you send money in and it’s ‘go time’, you can trade everything from treasury bonds to Forex using Cryptocurrencies as your base monetary instrument.

But, you say, I am a coder who likes to automate things, surely we can fire up some BTCbot and we can have it just do the work for us, it will make us millions in our sleep, right?

Probably not.

My solution

I don’t want to write a bot and publish it with a single strategy and just say “here, use this”, I don’t think that is helpful to anyone, I would rather give you the tools and show you how to write strategies yourself, show you how to set up data collection for the strategies and how to implement them in a trading system and see the results.

Also, I don’t want to create this in a new or arcane language, I want this written in PHP which the biggest number of people are familiar with and in a framework (Laravel - here's a great premium course for sale, and a bunch of free articles if you're not familiar with it) that is simple to use but powerful enough to let you can create what you need. If you think PHP is just for web pages, read on, this should surprise you.

I like to build systems. I have been working on this post for a while and it represents a good deal of non-derivative custom work. If you have read some of my other tutorials you know that I like to write tutorials that “I wish that I had found instead of having to to write”, so you are in for a thorough read, with a lot of copy-paste style recipes.

Let’s get started.

Steps we are going to take:

  • Get boilerplate/framework installed.
  • Walk through the core parts of the system, see what is where.
  • Install and configure the software we need.
  • Account creation at the brokerages we will be using, setting up the API keys for the scripts.
  • Run tests and examples.
  • Set up websocket streams to get data.
  • Finding strategies for our automated agents.
  • Deep dive into Indicators and Candles available to us.
  • Coding up our first agent.
  • Testing the agent.
  • A few closing words about the risks you are taking.

Get boilerplate/framework installed (Bowhead)

You can find the repository for the Bowhead boilerplate at it’s Github repository. It's a full application already, but we'll be using its functionality to get the stuff in this post done.

It is recommended you use the extremely Laravel-friendly Homestead Improved Vagrant box for a good, isolated development environment you can get started with in under 5 minutes. If you're unfamiliar with Vagrant, here's an excellent re-introduction, and if you'd like to dig deeper, this premium book will teach you amazing things.

git clone http://ift.tt/2rhggPO
cd bowhead
composer install
cp .env-example .env
sudo pecl install trader
echo "extension=trader.so" | sudo tee /etc/php/7.1/mods-available/trader.ini
sudo phpenmod trader

Now let's explain the the current folder structure of the app.

app/Console/Commands/

This is where all our console commands are located.

  • BitfinexWebsocketCommand.php - Stream market data from Bitfinex
  • CoinbaseWebsocketCommand.php - Stream market data from GDAX
  • ExampleForexStrategyCommand.php - Forex example strategy
  • ExampleStrategyCommand.php - Our example of a strategy
  • ExampleUsageCommand.php - Basic usage examples
  • GetHistoricalCommand.php - Pull in historic data from broker
  • OandaStreamCommand.php - Stream market data from Oanda

app/Util/

Is where all the utility classes that are available are found.

  • Bitfinex.php - Bitfinex API wrapper
  • BrokersUtil.php - Utilities for various brokers
  • Candles.php - All 60 TALib candle methods wrapped
  • Coinbase.php - GDAX API wrapper
  • Console.php - Console color, tables and progress
  • Indicators.php - 21 TALib indicators and moving averages.
  • Oanda.php - Oanda API wrapper
  • OneBroker.php - 1Broker API wrapper
  • Other.php - possible indicators, not implemented yet
  • testStrategy.php - Here is your test strategy
  • Whaleclub.php - Whaleclub API wrapper

app/Scripts

Extras and some testing data, these scripts are SKLearn price forecasting scripts taken from a study on beer consumption I thought was really useful, these might be used for market price predictions.

  • close_prediction.py - SKLearn script to predict a closing price
  • ohlc-btc.csv - Sample CSV data, if needed
  • open_prediction.py - SKLearn script to predict an opening price - a python script in the root dir called ‘streaming.py’ which is part of the Oanda streaming command.

If you execute php artisan, you should see something like the following, the part you are interested in is below.

Screen Shot 2017-06-11 at 1.08.02 AM.png

Redis and MySQL

Redis really does not need any tweaking out of the box, it's installed and ready if you're using Homestead Improved.

MySQL will need a database and a few tables. Change the credentials in the .env file (create it from .env.example if it doesn't exist).

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

Let's add the DB dump into MySQL:

mysql -u homestead -psecret < app\Script\DBdump.sql

Open up the database in a tool like Sequel Pro and you will the sample data in the bowhead_ohlc (open, high, low, close) table.

API accounts we need in order to set up automated trading

Full disclosure: Where possible, I have set up bonuses for you on these links, all sites below offer free accounts which do not require ‘verification’ and do not require a deposit. The links are referral links which also bring me some perks if you sign up.

1) Whaleclub is the main site we want to trade on for this tutorial. They key their market data off of the Bitfinex websocket and match with Oanda streaming data for Forex. This site allows you to trade many instruments and commodities with BTC at up to 20x leverage, Forex up to 222x as well as providing BTC-based binary options. They have a simple, easy to understand interface and an excellent API. The API key is found by clicking on your name in the upper-right, and clicking on API. (use DEMO API key to start)

2) 1Broker the secondary site we want to trade on, they are similar to other BTC-based market makers and have a ‘trader follow’ system as well that is fairly interesting, particularly to get people following ‘you’. The API key is found on the right, just under the email icon, there is a small box with what looks like sliders on it, then click on Access & API Management.

3) Oanda is where we get our streaming Forex data, you need an account. API access is found here.

4) Coinbase/GDAX is what used to be called ‘Coinbase Exchange’ and is now called GDAX. I have been automated-trading there since they first opened. The API key is found at the far upper-right, then click on API and create your keys.

5) Bitfinex - you need an account here with an API key so we can get Cryptocurrency quotes. API keys are found under ‘Account’ then click on API.

6) Poloniex is like Bitfinex but supports many alt-coins. API keys are found under Settings - API Keys.

7) TradingView is not mandatory, but you will want an account there because all the indicators bowhead uses can be viewed on charts to help you build your strategies.

The reasoning behind this combination is that the Whaleclub and 1Broker APIs are rate limited, WC only allows 60 requests per minute, if we want to make sure we have streaming real-time data to work with we need to stream from a BTC brokerage. Same with Forex.

Definitely look around on these sites and see what they have to offer, I’ve been around the block with a lot of brokers and market maker sites and for BTC, these are all good as of June 2017. For Forex, Oanda is great, but for the purposes here of trading using BTC we just need their streaming Forex data.

Once you get the API keys for these sites, you will want to put them in your .env file.

Continue reading %How to Build a Cryptocurrency Auto-Trader Bot with PHP? 💰%


by Joel Degan via SitePoint

#294:

Read this e-mail on the Web
FrontEnd Focus
Issue 294 — June 14, 2017
Last week we linked the video, now here’s a full write-up focusing on the Paint Timing API.
Google Developers

A recent demo from Tyler Sticka demonstrated how to break content out of a CSS Grid layout and go full width, here Rachel explains how/why the technique works.
Rachel Andrew

Focusing on how many declarations we use in our style sheets, how many of those declarations are unique, and what that means.
Jens Oliver Meiert

Bugsnag
Get real-time crash alerts and collect detailed diagnostics so you can fix errors for your users. See deminified stacktraces with support for sourcemaps. Cut through front-end noise so you can efficiently assess the impact of errors. Learn more.
Bugsnag   Sponsor

font-display controls how and when Chrome displays text content while downloading fonts. Other features include support for the Payment Request API, the Web Budget API and the availability of the CSS :focus-within pseudo class.
Google

A snappy 25 minute talk on modern techniques to improving page loading performance from the front-end perspective, particularly from a mobile POV.
Addy Osmani

Representatives for four different browsers present 10-15 min updates on where those browsers are at. The videos cover Chrome, Edge, Firefox, and Brendan Eich’s Brave.
YouTube

Louis Lazaris breaks down the results of SitePoint’s recent survey, shedding light on developer practices in CSS tooling, technologies, and knowledge.
SitePoint

Jobs Supported by Hired.com

Can't find the right job? Want companies to apply to you? Try Hired.com.

In Brief

Firefox 54: E10S-Multi, WebExtension APIs, CSS clip-path news
Completes the transformation of Firefox into a fully multi-process browser.
Mozilla Hacks

Latest Updates to the Credential Management API news
Google Developers

Introducing FilterBubbler: A WebExtension Built using React/Redux news
A text analysis toolkit using the new WebExtensions API.
Mozilla Hacks

Deep Foundations of JS - Kyle Simpson 2-Day Workshop news
The first in a series of upcoming London-based workshops from JavaScript expert Kyle Simpson.
White October Events

Cross-Browser Extensions, Available Now in Firefox news
WebExtensions APIs are inspired by Chrome’s extension APIs, supported by Opera, Firefox, and Edge.
Mozilla Hacks

ForwardJS Tickets on sale today 
Attend full-day hands-on React workshops and dozens of talks at ForwardJS San Francisco this July.
ForwardJS  Sponsor

A Complete Guide To Switching From HTTP To HTTPS tutorial
Covers the individual components and steps required to get setup with HTTPS.
Vladislav Denishev

CSS Shapes, Clipping and Masking, and How to Use Them tutorial
Firefox 54 introduces new CSS clip-path features.
Mozilla Hacks

Build A Minimalist HTML Card in Just 53 Lines of Code (with Flexbox) tutorial
Brandon Morelli

Cropping Images in CSS With 'object-fit' tutorial
Alligator.io

When Large Isn't Large Enough: Designing With Hero Images tutorial
Nick Babich

How Pure CSS Images Helped Me Understand React Components story
Michael Mangialardi

WebAssembly and How It Works in WebKit story
WebKit

Bojler: HTML Email Boilerplate and Guidelines tools
Focused on rendering well on the most popular email clients.
Slicejack

Now UI Kit: A Bootstrap 4 UI Kit tools
Creative Tim

country-flags: SVG and PNG Renders of All Countries' Flags tools
Hampus Joakim Nilsson

$20 Free Credit on a new account 
Linux cloud hosting starting at 1GB of RAM for $5/mo. Use promo code HTML520 and get $20 credit.
linode  Sponsor

billboard.js: A Chart Library, based on D3 v4+ code
80+ examples here.
Naver Corp

ZangoDB: A MongoDB-Like Interface for HTML5 IndexedDB code
Erik Olson

Amplitude.js: A Modern HTML5 Audio Player code
No dependencies required. Demo here.
521 Dimensions

Curated by Peter Cooper and Chris Brandrick and published by Cooperpress.

Stop getting FrontEnd Focus : Change email address : Read this issue on the Web

Cooper Press Ltd. Office 30, Lincoln Way, Louth, LN11 0LS, UK


by via FrontEnd Focus