Nov
3
PBS 85 of X — Objects as Arrays in JavaScript (Redux & Update)
Filed Under Software Development, Computers & Tech on November 3, 2019 | 3 Comments
There are many programming concepts that are common to the vast majority of programming languages, but each language implements these concepts in their own unique and special way. In JavaScript, objects are used to implement many concepts. I like to think of JavaScript objects as a single language feature that wears many hats. In the previous instalment we focused on one of these hats, JavaScript’s use of objects to implement dictionaries. In this instalment we’ll look at another hat JavaScript objets get to wear — arrays. As with the previous instalment, this instalment will be a mixture of consolidated reminders of things we’ve met before, and of some new features added to arrays in more recent versions of the JavaScript language.
We’ll also look at a sample solution to the challenge set at the end of instalment 83, but unusually, we’ll do that after our look at arrays.
You can download this instalment’s ZIP file here (now via the JSDelivr CDN). If you prefer, you can access this instalment’s resources directly at the following links:
-
pbs85a.html
:
View Page or
View Source -
PBS 83 Challenge Solution:
View Page or
View Source
Oct
19
PBS 84 of X — Objects as Dictionaries in JavaScript (Redux & Update)
Filed Under Software Development, Computers & Tech on October 19, 2019 | 2 Comments
As we near the end of our initial exploration of client-side web technologies I want to re-visit some key JavaScript features so cement what we already know, and add some new features brought to the language in more recent releases of the ECMA standard that underpins JavaScript.
Since objects are so ubiquitous in JavaScript I want to start there, and I want to start with their most fundamental use, as so-called dictionaries.
You can download this instalment’s ZIP file here.
Oct
4
PBS 83 of X — Bootstrap Cards
Filed Under Software Development, Computers & Tech on October 4, 2019 | 1 Comment
In this instalment we’ll finish our first exploration of Bootstrap 4 with a look at one its most versatile components, the so-called Card. This is one of those components that’s so generic it’s hard to describe, but once you learn about it you’ll start seeing it all over the web. Cards really are ubiquitous!
It’s important to stress that while we’re wrapping up our exploration of Bootstrap 4 with this instalment, that does not mean we’ve come close to covering every feature this impressive library offers. Instead, the aim was to cover the big-picture items, and leave you with enough experience to be able to learn the rest independently by reading Bootstrap’s excellent documentation.
You can download this instalment’s ZIP file here.
Sep
21
PBS 82 of X — Async & Await
Filed Under Software Development, Computers & Tech on September 21, 2019 | Leave a Comment
In this instalment we finish our exploration of promises with a look at the two new promise-related keywords added to JavaScript in ES 2017. These keywords allow us to write asynchronous code in a more human-friendly way.
You can download this instalment’s ZIP file here.
Jul
26
Right-click to Copy File Contents to Clipboard on macOS with Automator
Filed Under Automation, Computers & Tech on July 26, 2019 | Leave a Comment
How often does someone email you a file who’s content you need to copy-and-paste into a web form of some kind? Maybe it’s just me, but I find I need to do it a lot!
What I wanted was the ability to right-click any file with plain-text content (text, markdown, XML, JSON, Certificate Signing Requests, …) and send its content to the clipboard.
By combing Automator, the cat
and pbcopy
terminal commands, and a little JavaScript, I was able to build a nice service that can be accessed by right-clicking any file in any app that reports its outcome using a standard OS notification.
Download the Quick Action here, extract it, and copy it to your ~/Library/Services
folder.
Jul
13
PBS 81 of X — The JavaScript Promise Utilities
Filed Under Software Development, Computers & Tech on July 13, 2019 | Leave a Comment
So far in our exploration of promises we’ve learned the core concept — a promise is an object that represents the status and/or result of an asynchronous task. Asynchronous tasks are inherently parallel, but we’ve learned how to use .then()
and .catch()
to create so-called promise chains, allowing promises to be executed in series. What we’ve not looked at yet is JavaScript’s native Promise
class. This class is primarily used to create promises, but it also provides some useful utility functions. For now at least, we’re focusing on using promises rather than creating them, so we won’t be digging into how the Promise
class’s contractor works. However, some of the utility functions are designed to help developers use promises in more powerful ways, so those will be our focus for this instalment. The most powerful of these utilities is Promise.all()
, a function that allows us to create promise chains that perform some tasks in series, and others in parallel, allowing us to efficiently manage our asynchronous tasks.
You can download this instalment’s ZIP file here.
Jun
17
Moving my .bashrc to .zshrc
Filed Under System Administration, Computers & Tech on June 17, 2019 | 1 Comment
Having used Zsh rather than Bash for over a week it was time to make the move permanent by migrating my shell customisations from ~/.bashrc
to ~/.zshrc
. Your milage may vary, but I was pleased to find I didn’t need to make any changes, and, that I could get rid of one command from the script because Zsh defaults to a behaviour I had to explicitly opt in to with Bash.
TL;DR: environment variables (including PATH
) and aliases work just the same in Zsh as they do in Bash, so if those are the only things you alter in your ~/.bashrc
, then you can just copy it over to ~/.zshrc
. But, if you alter Bash settings in your ~/.bashrc
, you’ll need figure out the equivalent Zsh options and replace the relevant lines with the appropriate Zsh setopt
or unsetopt
Zsh commands.
Jun
17
Moving from Bash to Zsh on macOS
Filed Under System Administration, Computers & Tech on | Leave a Comment
During their 2019 World Wide Developers Conference (WWDC 2019) Apple announced that the default command shell for their next OS release (macOS Catalina) from the Bourne Again Shell (Bash) to the Z Shell (Zsh). Not only will Apple be switching the default in Catalina, they will be removing Bash completely in an as-yet unspecified future update. Apple’s advice is clear — make the switch now so you’re ready!
Never being one to try hold back the tide, I dove right in and made the switch within 5 minutes of reading about the announcement. This series will document my experience of making the change.
Jun
14
PBS 80 of X — JavaScript Promise Chains
Filed Under Software Development, Computers & Tech on June 14, 2019 | 3 Comments
In the previous instalment we got our first introduction to the concept of promises in JavaScript. By the end of the instalment we’d learned how to use promises to deal with single asynchronous tasks, but not how to use promises to deal with multiple interdependent asynchronous tasks. That’s what we’ll be focusing on in this instalment. In the previous instalment we looked at the arguments to .then()
, but we ignored its return value. It’s the return value from .then()
that this instalment revolves around. That return value is the key to dealing with interdependent asynchronous tasks by combining multiple promises into so-called promise chains.
You can download this instalment’s ZIP file here.
Jun
13
Bash to Zsh: Allowing Comments in Interactive Shells
Filed Under System Administration, Computers & Tech on June 13, 2019 | Leave a Comment
As I continue my move from Bash to Zsh at Apple’s strong suggestion I continue to bump into little differences that cause me minor problems. Today it was the fact that while Bash treats comments as comments even when they’re entered in an interactive shell, Zsh does not, at least not by default on MacOS.
TL;DR – setopt INTERACTIVE_COMMENTS