Thursday, August 31, 2017

Bear Grylls

Bear Grylls is known around the world as one of the most recognized faces of survival and outdoor adventure.
by via Awwwards - Sites of the day

The State of Social Sharing in 2017 [infographic]

Social Marketing is becoming more and more complex.Every year new challengers try to grab some of Facebook’s market share. In some cases, it can be a great opportunity for businesses that want to get an edge over the competition. At GetSocial, we’re tracking 30+ social networks and messaging apps,...

[ This is a content summary only. Visit our website http://ift.tt/1b4YgHQ for full links, other content, and more! ]

by Web Desk via Digital Information World

Learning JavaScript: 9 Common Mistakes That Are Holding You Back

A lot of people try to learn JavaScript and then give up. Then they tell themselves things like, "JavaScript is too confusing," or worse, "Maybe I'm not cut out for web development."

The sad part? There was no need to give up. All that was needed was a different learning approach.

In this article, we'll cover some of the most common learning mistakes people make and find out how to avoid them. Many of these tips will be applicable outside of JavaScript or even web development, so there's that bonus too.

Let's dive in!

Mistake #1: Overanalyzing Instead of Getting Started

It can be tempting to look for all the information you can get before you start learning JavaScript. If you look, you'll find information about how JavaScript is the best thing ever or the worst thing ever, or that you need to be on this framework or that framework. You might also hear that you need to write JavaScript a certain way or else you'll never be a "real" developer.

Whether or not these points have validity, nothing is worse than the six months to a year you'll waste agonizing instead of starting.

Just type one line of code. It doesn't have to be perfect. It can be terrible. If you get started, you've already passed one of the hurdles that stop a lot of people.

Mistake #2: Learning a Framework Before Learning Plain JavaScript

JavaScript frameworks are built on top of vanilla JavaScript, so if you understand JavaScript, you automatically understand the fundamentals of how to use any JavaScript framework.

However, if you jump straight into a framework, you'll end up memorizing without understanding. It's like trying to write sentences without knowing what words mean. You'll end up memorizing random phrases instead of understanding how words work and how to put them together to make your own sentences.

If you go straight to a framework it'll be harder to learn and you'll have a harder time adapting to another framework if you need to. If you learn plain JavaScript first, you have a firm basis to understand all the frameworks.

Mistake #3: Moving to the Next Step Too Soon

One of the most common mistakes is to move on immediately after understanding a concept.

I've definitely struggled with this one because it's tempting to move forwards once you understand something.

What helped was to treat each concept like a new toy; That means taking some time to enjoy what you just learned. Play around, experiment, see if you can do something new with it. You'll learn a lot that way, and you'll remember better as well.

Once you feel like you can apply a concept in your sleep, move on. It takes a little bit more time up front, but soon it makes everything go much faster.

On the other hand, if you rush, you'll end up forgetting and having to backtrack for every little thing. That ends up taking way more time, and it can be discouraging. In fact, this is a common reason people have said they quit JavaScript.

Mistake #4: Not Breaking Concepts Into Small Enough Pieces

Learning is like a staircase: If you can take one step, you can keep taking more steps until you reach your goals. When something is tough to understand, it's often because you're trying to take a flying leap instead of going one step at a time. Of course, it seems impossible!

Continue reading %Learning JavaScript: 9 Common Mistakes That Are Holding You Back%


by Yaphi Berhanu via SitePoint

5 Social Sharing Tools for Teams

Do you want your employees to contribute to your social media marketing? Looking for tools to manage the content people share on social? In this article, you’ll discover five tools that will help you coordinate the content your team posts on social media. #1: Leverage Employee Advocacy With Smarp If you’re looking for ways to [...]

This post 5 Social Sharing Tools for Teams first appeared on .
- Your Guide to the Social Media Jungle


by Cynthia Johnson via

Wednesday, August 30, 2017

New eBooks from A Book Apart, Smashing Magazine & more!

How to Create CSS Conic Gradients for Pie Charts and More

More and more websites use gradients in one way or another. Some websites use them for navigation components, while others use them in elements like buttons, or with images to create some nice effects.

All browsers have had support for basic CSS linear and radial gradients for a long time now. The CSS Gradients: A Syntax Crash Course article on SitePoint gives you a quick summary of the syntax required to create linear and radial gradients, as well as how to use repeating gradients to create some basic patterns, which is great if you care about web performance and try to avoid using images whenever possible.

After linear and radial gradients, browsers are now slowly starting to support conic gradients, which were first championed by Lea Verou.

In this article, you will learn about the syntax, uses, and browser support for simple conic gradients and repeating conic gradients.

What are Conic Gradients?

Conic and radial gradients are similar in the sense that both of them start from a specified or default point as the center of the circle used to draw them. The difference between the two is that, in the case of radial gradients the color-stops are placed along the radial line, while in the case of conic gradients the color stops are placed along the circumference of the circle.

The position of color-stops for a conic gradient can be specified either in terms of percentage or in terms of degrees. A value of 0% or 0deg refers to the top of the conic gradient. The values keep increasing gradually as you move clockwise. A value of 360deg is equivalent to 0deg. Any color whose color-stop value is greater than 100% or 360deg won't be drawn on the conic gradient but it will still affect its color distribution.

The following image shows a conic gradient that starts with a yellow color and ends with orange.

Yellow and Orange Conic Gradient

It is hard not to notice the sharp transition that separates the orange at 360deg from the yellow at 0deg. Remember that conic gradients always produce this transition whenever the starting and ending colors of the conic gradient are very different. One way to avoid it is setting the starting and ending color to the same value.

Syntax for Conic Gradients

Continue reading %How to Create CSS Conic Gradients for Pie Charts and More%


by Gajendar Singh via SitePoint

6 jQuery Form Wizard Plugins

A jQuery Form Wizard is a jQuery plugin that assists with the creation of forms with some sort of form flow (without refreshing your page). For example, if you had a large form for entering user data, you could use a form wizard to divide it into a series of related steps. This has the advantage of not overwhelming users with a really long form and also giving them some indication of their progress as they enter their information.

In this post we list 6 of our favorite jQuery form wizards, examine their different features and finally look at a couple of paid options, as well as how to create your own. This isn't intended to be an exhaustive list, but if you are looking for a jQuery form wizard, then hopefully this will point you in the right direction.

This popular post was updated on 30.08.2017. Broken / abandoned plugins were removed from the list and new plugins were added to reflect features people were asking for in the comments.

1. jQuery Steps

jQuery Steps is a smart UI component which allows you to easily create wizard-like interfaces. This plugin groups content into sections for a more structured and orderly page view. It has a plethora of features, such as async content loading, state persistence (it saves your input between steps) and transition effects between sections. It can be installed via NuGet or bower and has a well-documented and feature-rich API.

jQuery Steps

Homepage | GitHub | Demo

2. jQuery Smart Wizard

Smart Wizard is a flexible and heavily customizable jQuery step wizard plugin with Bootstrap support. It is easy to implement and gives a neat and stylish interface for your forms, checkout screen, registration steps etc. Its features include theme support (with various themes included), URL navigation and step selection and the ability to dynamically hide or disable steps. It can be installed via npm, bower or composer and has a well-documented and feature-rich API.

jQuery Smart Wizard

Homepage | GitHub | Demo

3. formToWizard

This lightweight plugin turns any webform into multi-step wizard with jQuery, whereby every form <fieldset> is turned into a separate step with forward and back buttons. It doesn't have nearly as many features as the previous two plugins, but does integrate with the jQuery validation plugin to provide validation functionality. It is a single file (so you can just grab it off GitHub and go) and if JavaScript is unavailable, it degrades gracefully.

formToWizard

GitHub | Demo

Continue reading %6 jQuery Form Wizard Plugins%


by James Hibbard via SitePoint

#305: A Thorough Guide to Building Layouts with CSS Grid

Frontend Focus
Issue 305 — August 30, 2017
A helpful guide to CSS Grid, including a free visual grid builder tool.
CoffeeCup

Gajendar Singh introduces you to the font-size-adjust CSS property and explains why it’s important and how you can use it to enhance your web typography.
SitePoint

A thorough beginner-level guide to setting up a frontend workflow using Gulp.
Andrew Welch

SPEC stands for Speed, Productivity, Ecosystem, and Compatibility. Click to learn more about our JavaScript framework application and let us help you find the best framework for you and your team.
GrapeCity Wijmo   Sponsor

Pally, is a set of free and open-source tools that aims to make designing and developing accessibility easier. Here’s how to use it.
Ire Aderinokun

A look at some practices that tie in with the different way HTTP/2 operates to regular HTTP.
Trevor Davis

Jen Simmons, designer advocate at Mozilla, introduces new ways of thinking about page layout on the web.
An Event Apart

Forms on the web don’t often play nice with bad connections, but here’s an approach to making them more robust.
Max Böck

A versatile cross-browser way to work with desktop notifications from JavaScript.
Tyler Nickerson

Jobs

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

In Brief

Polymer 3.0 Preview: Moving to npm and ES6 Modules news
Polymer Project

Building a simple To Do web app with Stitch, React, and MongoDB tutorial
This short tutorial will get you started with MongoDB Stitch.
MONGODB  Sponsor

Breaking Down a CSS Grid Layout tutorial
Tim Wright

The Best Way to Implement a 'Wrapper' in CSS tutorial
How best to implement an element that wraps around everything else on a page.
Kaloyan Kosev

Solve Your Specificity Headaches With CSS Modules tutorial
Louie Rootfield

An Approach To Structuring SCSS with Bootstrap 4 tutorial
Mirijam B.

How to Combine Flexbox and CSS Grids for Efficient Layouts tutorial
Abbey Fitzgerald

Fancy Web Animations Made Easy with GreenSock Plugins tutorial
SitePoint

A Super Quick Way to Try Out CSS Grid tutorial
Jen Simmons

How to Run a Front-End Infrastructure Team opinion
The human aspects of collaborative front-end projects.
Jyri Tuulos

It’s easy to version control your database alongside your application 
Connect your database to your version control system with SQL Source Control and keep track of every change.
Redgate  Sponsor

Introducing the Extension Compatibility Tester tools
A tool for testing if extensions you’ve built/are building will work with Firefox.
Mozilla Hacks

Essential WebVR Resources tools
A collection of useful resources for WebVR development.
Mozilla Hacks

Rendertron: A Dockerized, Headless Chrome Rendering Solution code
Google Chrome Team

Reframe.js: Make Unresponsive Elements Responsive code
Dollar Shave Club

Baffle: A Tiny Library for Obfuscating and Revealing Text in DOM Elements code
Cam Wiegert

Vivify: A Simple CSS Animation Library code
Martin KnĂ­Å¾e


by via Frontend Focus

Debunking 3 Common WordPress Myths

As the largest and most widely used content management system (CMS) on the internet, it should come as no surprise that people are constantly trying to bring WordPress down. Naturally, a number of WordPress myths have been conjured up over the years. In order to be properly informed, you have to make sure you know how to separate fact from fiction.

WordPress: The Leading CMS Platform on the Web

WordPress isn’t the only CMS around, but it certainly blows the competition out of the water in terms of adoption and appeal. Just consider the popularity of the platform:

  • As of last count, WordPress powers more than 26 percent of the web and has a whopping 59.4 percent market share, which makes it the most used CMS platform.
  • More than 500 sites a day are created on the WordPress platform.
  • There are 44,225 WordPress plugins, which have been downloaded more than 1.25 billion times.
  • WordPress is translated into 56 different languages worldwide.

These are just a few of the striking data points. When you dig into the nitty gritty of WordPress, it becomes clear that this is one of the most superior CMS platforms on the web. But along with this title comes a target. When you’re the best, people want to tear you down. And when they can’t tear you down, they resort to bending the truth or making things up altogether.

Don’t Fall for These 3 WordPress Myths

In order to be an informed website developer, entrepreneur, or business owner, you need to be cognizant of the fact that the internet is filled with myths regarding WordPress.

Here are three of the most common myths about WordPress:

Myth #1: WordPress Isn’t Scalable

Somewhere along the line, a myth has been perpetuated that WordPress isn’t scalable. Some people believe that it’s a platform that’s only suited for small blogs and tiny business websites. However, this simply isn’t true. If you look at the facts, you’ll see that WordPress is anything but a CMS designed exclusively for small sites. Just ask celebrities and businesses who regularly rely on WordPress for their websites.

Musicians like Beyonce, Justin Bieber, Snoop Dogg, Katy Perry, and The Rolling Stones all use WordPress. From the business side of things, companies like Bacardi, Sony Music, Mercedes Benz, The Rotary Club, and the New Yorker Magazine are all WordPress users.

One of the primary reasons why large businesses and brands use WordPress is that it is scalable. Not only are the search, caching, and content delivery capabilities top-notch, but there’s also true horizontal scalability. This allows websites with high traffic demands to always have sufficient architecture on-demand if they need it.

Put simply, the idea that WordPress isn’t scalable is ridiculous. "With the right infrastructure, services and resources, WordPress is highly scalable," Pragmatic explains. "It can serve tens of thousands of logged in users at a time and deliver hundreds of millions of monthly page views. It can process page requests immediately and can produce lightning-quick results to search queries. It is flexible, upgradeable and ultimately can power all manner of websites, right up to the largest and most visited."

Continue reading %Debunking 3 Common WordPress Myths%


by Larry Alton via SitePoint

40 Social Media Video Marketing Stats for 2017

Social media video marketing continues to be an uptrend in any and all industry commerce. In the last 30 days, more online video content has been uploaded to the web than in the past 30 years of TV content. Marketers who have been used to the forced audience captivation of commercials now need to...

[ This is a content summary only. Visit our website http://ift.tt/1b4YgHQ for full links, other content, and more! ]

by Irfan Ahmad via Digital Information World

6 Best New Android Launchers 2017! [video]



[ This is a content summary only. Visit our website http://ift.tt/1b4YgHQ for full links, other content, and more! ]

by Web Desk via Digital Information World

UX Lessons from Amazon: 4 Hacks Guaranteed to Boost Conversions

I’ll admit, Amazon’s visual design is awful and kind of outdated. I’m sure a lot of UX experts will agree with me on that, so naturally, an article sharing UX lessons from Amazon might raise some eyebrows at first.

However, while Amazon still has a lot of work to do on their visual design (it’s 2017 after all, users care about aesthetics!), we can still learn a lot from Amazon in regards to user experience. In fact, Amazon has an amazingly-effective UX system, where research shows that they were responsible for 53% of ALL online retail sales growth in the U.S. in 2016 alone. Yes, read that again.

One single company was responsible for 53% of retail sales growth in a country as big and diverse as the U.S.

How did Amazon do it? Let's take a look.

1. Having a Well-Oiled "Recommendations Engine"

If there's something Amazon has mastered, it's the subtle art of reading their users’ mind (or, rather, putting things into their users’ mind?). If you shop on Amazon, as soon as you order something, before you even realize that you need something to complement it, complementary options are staring you right in the face.

Continue reading %UX Lessons from Amazon: 4 Hacks Guaranteed to Boost Conversions%


by John Stevens via SitePoint

React Crash Course for Beginners, Part 2

React Crash Course for Beginners, Part 1

The Hottest Visual Content Marketing Trends for 2017 [infographic]

Visual content, done well, can be incredibly popular. Infographics, videos, data visualizations, and other forms of visual content can generate tons of engagement and attract links to your site. More importantly, visuals help tell your story. Visual content can be an incredibly powerful marketing...

[ This is a content summary only. Visit our website http://ift.tt/1b4YgHQ for full links, other content, and more! ]

by Web Desk via Digital Information World

Polymorphism With Protocols in Elixir

Polymorphism is an important concept in programming, and novice programmers usually learn about it during the first months of studying. Polymorphism basically means that you can apply a similar operation to entities of different types. For instance, the count/1 function can be applied both to a range and to a list:

How is that possible? In Elixir, polymorphism is achieved by using an interesting feature called a protocol, which acts like a contract. For each data type you wish to support, this protocol must be implemented.

All in all, this approach is not revolutionary, as it is found in other languages (like Ruby, for example). Still, protocols are really convenient, so in this article we will discuss how to define, implement and work with them while exploring some examples. Let's get started!

Brief Introduction to Protocols

So, as already mentioned above, a protocol has some generic code and relies on the specific data type to implement the logic. This is reasonable, because different data types may require different implementations. A data type can then dispatch on a protocol without worrying about its internals.

Elixir has a bunch of built-in protocols, including Enumerable, Collectable, Inspect, List.Chars, and String.Chars. Some of them will be discussed later in this article. You may implement any of these protocols in your custom module and get a bunch of functions for free. For instance, having implemented Enumerable, you'll get access to all the functions defined in the Enum module, which is quite cool.

If you have come from the wondrous Ruby world full of objects, classes, fairies and dragons, you'll have met a very similar concept of mixins. For example, if you ever need to make your objects comparable, simply mix a module with the corresponding name into the class. Then just implement a spaceship <=> method and all instances of the class will get all methods like > and < for free. This mechanism is somewhat similar to protocols in Elixir. Even if you have never met this concept before, believe me, it is not that complex. 

Okay, so first things first: the protocol must be defined, so let's see how it can be done in the next section.

Defining a Protocol

Defining a protocol does not involve any black magic—in fact, it is very similar to defining modules. Use defprotocol/2 to do it:

Inside the protocol's definition you place functions, just like with modules. The only difference is that these functions have no body. It means that the protocol only defines an interface, a blueprint that should be implemented by all the data types that wish to dispatch on this protocol:

In this example, a programmer needs to implement the my_func/1 function to successfully utilize MyProtocol.

If the protocol is not implemented, an error will be raised. Let's return to the example with the count/1 function defined inside the Enum module. Running the following code will end up with an error:

It means that the Integer does not implement the Enumerable protocol (what a surprise) and, therefore, we cannot count integers. But the protocol actually can be implemented, and this is easy to achieve.  

Implementing a Protocol

Protocols are implemented using the defimpl/3 macro. You specify which protocol to implement and for which type:

Now you can make your integers countable by partly implementing the Enumerable protocol:

We will discuss the Enumerable protocol in more detail later in the article and implement its other function as well.

As for the type (passed to the for), you may specify any built-in type, your own alias or a list of aliases:

 On top of that, you may say Any:

This will act like a fallback implementation, and an error will not be raised if the protocol is not implemented for some type. In order for this to work, set the @fallback_to_any attribute to true inside your protocol (otherwise the error will still be raised):

You can now utilize the protocol for any supported type:

A Note About Structs

The implementation for a protocol can be nested inside a module. If this module defines a struct, you don't even need to specify for when calling defimpl:

In this example, we define a new struct called Product and implement our demo protocol. Inside, simply pattern-match the title and price and then output a string.

Remember, however, that an implementation does have to be nested inside a module—it means that you can easily extend any module without accessing its source code.

Example: String.Chars Protocol

Okay, enough with abstract theory: let's have a look at some examples. I am sure you have employed the IO.puts/2 function quite extensively to output debugging info to the console when playing around with Elixir. Surely, we can output various built-in types easily:

But what happens if we try to output our Product struct created in the previous section? I will place the corresponding code inside the Main module because otherwise you'll get an error saying that the struct is not defined or accessed in the same scope:

Having run this code, you'll get an error:

Aha! It means that the puts function relies on the built-in String.Chars protocol. As long as it is not implemented for our Product, the error is being raised.

String.Chars is responsible for converting various structures to binaries, and the only function that you need to implement is to_string/1, as stated by the documentation. Why don't we implement it now?

Having this code in place, the program will output the following string:

Which means that everything is working just fine!

Example: Inspect Protocol

Another very common function is IO.inspect/2 to get information about a construct. There is also an inspect/2 function defined inside the Kernel module—it performs inspection according to the Inspect built-in protocol.

Our Product struct can be inspected right away, and you'll get some brief information about it:

It will return %Product{price: 5, title: "Test"}. But, once again, we can easily implement the Inspect protocol that requires only the inspect/2 function to be coded:

The second argument passed to this function is the list of options, but we are not interested in them.

Example: Enumerable Protocol

Now let's see a slightly more complex example while talking about the Enumerable protocol. This protocol is employed by the Enum module, which presents us with such convenient functions as each/2 and count/1 (without it, you would have to stick with plain old recursion).

Enumerable defines three functions that you have to flesh out in order to implement the protocol:

  • count/1 returns the enumerable's size.
  • member?/2 checks whether the enumerable contains an element.
  • reduce/3 applies a function to each element of the enumerable.

Having all those functions in place, you'll get access to all the goodies provided by the Enum module, which is a really good deal.

As an example, let's create a new struct called Zoo. It will have a title and a list of animals:

Each animal will also be represented by a struct:

Now let's instantiate a new zoo:

So we have a "Demo Zoo" with three animals: a tiger, a horse, and a deer. What I'd like to do now is add support for the count/1 function, which will be used like this:

Let's implement this functionality now!

Implementing the Count Function

What do we mean when saying "count my zoo"? It sounds a bit strange, but probably it means counting all the animals that live there, so the implementation of the underlying function will be quite simple:

All we do here is rely on the count/1 function while passing a list of animals to it (because this function supports lists out of the box). A very important thing to mention is that the count/1 function must return its result in the form of a tuple {:ok, result} as dictated by the docs. If you return only a number, an error  ** (CaseClauseError) no case clause matching will be raised.

That's pretty much it. You can now say Enum.count(my_zoo) inside the Main.run, and it should return 3 as a result. Good job!

Implementing Member? Function

The next function the protocol defines is the member?/2. It should return a tuple {:ok, boolean} as a result that says whether an enumerable (passed as the first argument) contains an element (the second argument).

I want this new function to say whether a particular animal lives in the zoo or not. Therefore, the implementation is pretty simple as well:

Once again, note that the function accepts two arguments: an enumerable and an element. Inside we simply rely on the member?/2 function to search for an animal in the list of all animals.

So now we run:

And this should return true as we indeed have such an animal in the list!

Implementing the Reduce Function

Things get a bit more complex with the reduce/3 function. It accepts the following arguments:

  • an enumerable to apply the function to
  • an accumulator to store the result
  • the actual reducer function to apply

What's interesting is that the accumulator actually contains a tuple with two values: a verb and a value: {verb, value}. The verb is an atom and may have one of the following three values:

  • :cont (continue)
  • :halt (terminate)
  • :suspend (temporarily suspend)

The resulting value returned by the reduce/3 function is also a tuple containing the state and a result. The state is also an atom and may have the following values: 

  • :done (processing is done, that's the final result)
  • :halted (processing was stopped because the accumulator contained the :halt verb)
  • :suspended (processing was suspended)

If the processing was suspended, we should return a function representing the current state of the processing.

All these requirements are nicely demonstrated by the implementation of the reduce/3 function for the lists (taken from the docs):

We can use this code as an example and code our own implementation for the Zoo struct:

In the last function clause, we take the head of the list containing all animals, apply the function to it, and then perform reduce against the tail. When there are no more animals left (the third clause), we return a tuple with the state of :done and the final result. The first clause returns a result if the processing was halted. The second clause returns a function if the :suspend verb was passed.

Now, for example, we can calculate the total age of all our animals easily:

Basically, now we have access to all the functions provided by the Enum module. Let's try to utilize join/2:

However, you'll get an error saying that the String.Chars protocol is not implemented for the Animal struct. This is happening because join tries to convert each element to a string, but cannot do it for the Animal. Therefore, let's also implement the String.Chars protocol now:

Now everything should work just fine. Also, you may try to run each/2 and display individual animals:

Once again, this works because we have implemented two protocols: Enumerable (for the Zoo) and String.Chars (for the Animal).

Conclusion

In this article, we have discussed how polymorphism is implemented in Elixir using protocols. You have learned how to define and implement protocols, as well as utilize built-in protocols: Enumerable, Inspect, and String.Chars.

As an exercise, you can try to empower our Zoo module with the Collectable protocol so that the Enum.into/2 function can be properly utilized. This protocol requires the implementation of only one function: into/2, which collects values and returns the result (note that it also has to support the :done, :halt and :cont verbs; the state should not be reported). Share your solution in the comments!

I hope you have enjoyed reading this article. If you have any questions left, don't hesitate to contact me. Thank you for the patience, and see you soon!


by Ilya Bodrov via Envato Tuts+ Code

#173: A Progressive Roadmap for your PWA

Mobile Web Weekly August 30, 2017   #173
Chris Brandrick recommends
Where in the World is Mobile Development? — A global view of where mobile development happens based on Stack Overflow data.
Jason Punyon
Brian Rinaldi recommends
Migrating from Cordova to NativeScript — A look at why NativeScript reduces the number of compromises required when building hybrid apps with tools like Cordova.
Telerik Developer Network
Sponsored
Linux cloud hosting starting at 1GB of RAM for $5/mo — Get a Linode server up and running in seconds. Simply choose your plan, distro and location and you’re ready to deploy your server. Use promo code MOBILEWEB20 for a $20 credit on a new account.
Linode Cloud Hosting

Brian Rinaldi recommends
iOS 11 Safari Will Turn AMP Links Back Into Regular Ones When Sharing — iOS 11 will transform Google AMP links back into their original forms when sharing a story.
The Verge
Holly Schinsky recommends
A Progressive Roadmap for your Progressive Web App — A major benefit of Progressive Web Apps is that you can start implementing features right away and roll the rest out incrementally. Read on about how this approach was taken by Cloudfour.
CloudFour
Holly Schinsky recommends
Hybrid Development Is How We Give Our Teams of Three Superpowers — How three people at Basecamp launched a major new feature across five platforms in six weeks because of their hybrid-development ‘superpowers.’
Signal v. Noise
Brian Rinaldi recommends
Progressive Web Apps and Web Push API — Part 1 of a series (part 2 and part 3 are already online) covering how to enable push notification messages to all clients on web or mobile instances of a PWA.
Brian Clark
Holly Schinsky recommends
Testing in Ionic: Configure Existing Projects for Testing — Step by step instructions on how to configure your Ionic projects for unit and end to end testing.
Leif Wells
Holly Schinsky recommends
Developing Ionic Apps in WebStorm — WebStorm is a popular (commercial) IDE made by JetBrains.
Ekaterina Prigara
Brian Rinaldi recommends
How to Use Deep Linking in Ionic 1 Apps with the Ionic Native Deeplinks Plugin
Nikola Brežnjak
Holly Schinsky recommends
Where Does Authentication Fit in a React Native App?
Gosha Arinich
Chris Brandrick recommends
Gridzilla: A Responsive, Mobile-First Flexbox Grid
Mostafa Fouad
Holly Schinsky recommends
Will the 'Real' Web Developer Please Stand Up? — Why Progressive Web Apps are the first genuine attempt at kicking amateur coders out of their comfort-zone.
Attila VĂ¡gĂ³


by via Mobile Web Weekly

How to Improve Your LinkedIn Engagement

Want your LinkedIn posts to attract more viewers? Wondering how to increase views and shares of your LinkedIn content? In this article, you’ll discover five simple tactics to improve engagement on your LinkedIn posts. #1: Write Text-Only Posts You’ve probably heard that people engage more when a social media post shows an image or video. [...]

This post How to Improve Your LinkedIn Engagement first appeared on .
- Your Guide to the Social Media Jungle


by John Espirian via

World of Synesthesia

Synesthesia is a neurological phenomenon where the stimulation of one sense triggers another. Synesthetes can taste shapes, see music and hear colors. Dive in the World of Synesthesia.
by via Awwwards - Sites of the day

Bobby Giangeruso

Bobby Giangeruso

Brutalist One Page portfolio with a neat intro glitch-effect for Product Designer, Bobby Giangeruso.

by Rob Hope via One Page Love