Web Tools Weekly
What a Tool!

Issue #216  (Currying, Build Tools, Testing/Debugging, Media)

If you're like me then you've probably heard of currying in JavaScript and other programming languages but maybe haven't taken the time to understand what it is and why it's useful.

I'm not going to try to even begin to explain it fully myself because I'm just starting to understand it, but here's a quick summary from some resources, which are all linked so you can do more research in case I butcher it.

According to Andrea Zanin's Practical Introduction to Functional Programming:

"Currying is the technique of translating the evaluation of a function that takes multiple arguments into evaluating a sequence of functions, each with a single argument."

He goes on to explain why this is useful:

"Because we are now able to pass the arguments at different points in time; this means that we can use currying to 'construct' a function."

M. David Green's excellent article on currying in functional JavaScript says currying can make your scripts more readable. He explains:

"[C]urrying is a way of constructing functions that allows partial application of a function’s arguments. What this means is that you can pass all of the arguments a function is expecting and get the result, or pass a subset of those arguments and get a function back that’s waiting for the rest of the arguments."

If currying is a new concept to you, then that's probably still pretty confusing. You should definitely check out those two articles, both of which provide plenty of code examples.

Lastly, the comments section of that last article covers the practical use cases for currying which point to an article on cleaner Angular directives with currying and a video presentation on React components.

So there's lots to look over if that's a topic you want to understand better.

Now, for some odd reason I have a huge craving for some naan bread and butter chicken. Not sure why though.

Now on to this week's tools!
Did you buy my previous JavaScript/DOM tips book? Here's the latest one...
70 JavaScript & DOM Tips for $5 (Volume 2)

Build, Deploy, Task Runners, etc.

Deploy infinitely scalable serverless apps, APIs, and sites in seconds.

webpack plugin to transform your code into emoji ready to be shipped to production.

Rapidly release code with confidence on a modern continuous integration and delivery platform. Offered on hosted cloud, Enterprise, and OS X platforms.

The bundle-buddy utility (a tool to identify bundle duplication across splits) as a webpack plugin.

Now at version 5+. Service to obfuscate and secure your app's JavaScript.

The popular module bundler is now at version 3+.

Keep your bundle size in check.

A collection of libraries and build tools that make it easy to store your website’s files locally, on your users’ devices, to help with offline websites.

Mission to make cloud computing as easy and accessible as mobile computing.

Testing and Debugging Tools

Enter a URL and this tool will output numerous page speed optimization tips and suggestions.  Very comprehensive.

e2e test builder
Chrome extension that allows you to record interactions and perform various assertions. Compatible with Selenium IDE test cases.

Dynamic analysis tool to intercept, record, and analyze JavaScript at run-time.

Enter a URL (and optionally a comparison URL) to test a site's latency performance.

Why No Padlock?
I recently started switching all my sites over to SSL and this is my go-to tool for finding out why a site still doesn't get the green padlock.

Chromeless Playground
Chrome automation made simple. Runs locally or headless on AWS Lambda.

The best way to inspect JavaScript code. Just find problems in your app or website.

Update to the old modern.ie. Free remote testing of Microsoft Edge using BrowserStack.

Do you like this newsletter? Here's an option to show your support...
Make a One-time Donation via PayPal.me/WebToolsWeekly

Multimedia Tools

A real-time spatial audio encoding JavaScript library for WebAudio applications.

A simple tool to hide encrypted text messages inside JPEG images. But you won't use it for nefarious purposes, obviously.

An image manipulation library with a very specific set of skills. Works as a replacement for Canvas in non-supporting environments.

JavaScript image compressor. Online version available or use it in your apps to pre-compress user submitted images.

Now at version 3+. A complete JavaScript framework for building 3D games with HTML5, WebGL, WebVR and Web Audio.

A JavaScript library for building audio-visual charts in D3.

3D wireframe drawing library for HTML Canvas.

A Tweet for Thought

Eric Hu's take on the different ways to order CSS properties.

Suggestions / Corrections

Made something? Send links via Twitter @WebToolsWeekly (details here). No tutorials or articles, please. If you have any suggestions for improvement or corrections, feel free to reply to this email.

Before I Go...

LOOPY looks useful. It helps build interactive simulations (like flow charts) of complex systems (could be a programming flow or anything really).

Thanks to all for subscribing and reading!

Keep tooling,