This post is part 17 of 92 in the series Programming by Stealth

At this stage in the series we have made very good progress towards understanding the core JavaScript language. However, there is still one very important piece missing – objects. We have mentioned them in passing in almost every instalment, and each time, we put them off until later. We finally remedy that in this instalment.

Read more

Tagged with:

This post is part 16 of 92 in the series Programming by Stealth

In the previous instalment we introduced the concept of JavaScript functions. We learned how to all existing functions, and how to create out own.

In this instalment we’re going to take our understanding of functions to the next level. The techniques we encounter today would be considered advanced techniques in most other languages, and you could spend years developing in Java and never encounter an anonymous function. However, because of how JavaScript is integrated into HTML documents, these techniques are considered fundamental in JavaScript, and anonymous functions are a dime a dozen!

Before we delve into anonymous functions, we’ll start by taking a deeper look at how JavaScript deals with function arguments.

Read more

Tagged with:

This post is part 15 of 92 in the series Programming by Stealth

At this stage we’ve learned about five key components to any programming language, and how they are implemented in JavaScript – variables, operators, branching, arrays, and loops. Now it’s time to add another – functions.

A function is a collection of statements that is given a name so it can be easily re-used. We’ve already used functions, but without knowing that’s what we’ve been doing.

Read more

Tagged with:

This post is part 14 of 92 in the series Programming by Stealth

At this stage we’ve learned about three of the key components common to just about every programming language, and how they’re implemented in JavaScript – variables, operators, and branching. Now it’s time to add two more – arrays, and loops.

Arrays store a list of related data in a single variable, and loops allow us to apply the same action over and over again. To process an arbitrarily long array, you need some kind of iteration, and loops are the simplest way of achieving that.

Read more

Tagged with:

Smiling a Little More

Filed Under Computers & Tech on April 12, 2016 | Leave a Comment

Since my initial, rather negative, reaction to Smile’s release of Text Expander 6, with it’s move to subscription pricing and forced use of their un-encrypted in-house cloud, Smile have announced some important changes.

Critically, they will continue to sell the non-cloud versions of their OS X and iOS apps (TE5 & TE3 respectively). This means that users can continue to use TextExpander for the foreseeable future, without having to trust their data to an un-tested and un-encrypted cloud. Smile have also addressed the cost issue by extending the 50% discount for existing users from 1 year to a lifetime.

It’s great to see Smile responding to their customers, and I think the price-drop for existing customers will resolve the cost issue for many people. It does for me.

Personally, I would like to be in a position to move to the new subscription version of the apps in the future, but I’m not going to feel comfortable doing that unless and until they address the privacy concerns I have about their current cloud design. I’m hopeful that they have heard that feedback too, and that encryption will show up on their cloud offering within the next year or so. If that comes to pass, I’ll happily make the switch.

I’m also hopefully that as Smile conduct their postmortem of this troubled launch, that they look again at how they use data from their support inbox when planning product changes. Support requests can serve as a good metric for what new features would be of the most value, but they provide no information at all about the relative importance of existing features. Text Expander 6 removed an existing feature, DropBox/iCloud sync, to facilitate the addition of a new feature, sharing. The support mailbox provided evidence of the desire for the new feature, but the value of the old seems to have come as a complete surprise to Smile! You simply cannot infer the value of existing features from support inboxes of Twitter feeds – the only way to figure that kind of thing out is to ask users, or to run betas. Smile kept all this totally secret until they had made a massive investment of time and resources. A mistake IMO, but then again, I am only an armchair CEO, and it’s not my livelihood that’s on the line!

The bottom line is that Smile have clearly been paying attention to the feedback, which can only be a good thing.

Tagged with:

This post is part 13 of 92 in the series Programming by Stealth

In the previous instalment we got our first taste of JavaScript. We learned about variables, literal data types, and some basic string and arithmetic operators. In this instalment we’re going to focus on booleans. We’ll look at how non-boolean values get converted to booleans when needed (e.g. is 'boogers' true or false?), we’ll learn about some comparison operators that result in boolean values, and we’ll learn about some logical operators. At that stage we’ll have all the knowledge we need to learn about our third fundamental programming concept – branching.

Read more

Tagged with:

For many years now I have been an avid user, and eager evangelist for, a Mac app called TextExpander. TextExpander allows you to create snippets that you can invoke with shortcuts, and those snippets can range from the simple to the very complex, as in the URL conversion snippet I blogged about recently.

TextExpander has worked really well for me on all my Macs. I have it configured to sync my snippets over DropBox, and it just works. I have years of problem-free text expansion under my belt now with TextExpander. From my point of view, there was no problem to be solved – the app just worked!

The app was sold as a standard app – pay full price once, then pay a reduced price for future upgrades. I bought in at version 3, and have paid to upgrade to versions 4, and then 5. I’m in Ireland, so I do everything in Euro, so after currency conversion, my total spend on TextExpander for the last five years is a little under €65. Not a €0.99 app by any means, but a reasonable and fair price IMO.

Yesterday, TextExapnder 6 was launched, and it comes with an unexpected surprise – a whole new business model! The app has gone subscription – all syncing is now through their private cloud, whether you like it or not, and, you have to pay a monthly fee to use the app. If you pay the monthly fee annually you get a bit of a discount, so you can get the app for $47.52 per annum. Existing users get a 50% discount for one year.

So – is this a positive development for long-time and very happy users like myself?

Read more

Tagged with:

This post is part 12 of 92 in the series Programming by Stealth

With this instalment we’re starting into a whole new phase of the series. We’ve looked at using HTML to define the structure of an HTML document, and then we moved on to looking at CSS for defining the look of an HTML document, and now we’re going to move on to JavaScript to add interactivity to HTML documents.

Learning the basics of JavaScript, and learning how to connect JavaScript into the browser environment are two very different tasks, so, we’re going to separate them. We’ll start by learning some JavaScript fundamentals in a JavaScript playground I’ve created. Only when we know enough JavaScript for the mechanics of the browser’s JavaScript integration to make sense will we move tackle the so-called DOM, and the browser event model.

Read more

Tagged with:

These are my slides from a talk I delivered to the CT Mac Connection Mac Users Group (MUG) on the 30th of March 2016.

IoT Talk Front Page
Click to View Slides

A PDF version can be downloaded from here.

Tagged with:

This post is part 11 of 92 in the series Programming by Stealth

Finally, after many months of making Allison wait, it’s time to look at tables on web pages. We’ll start by describing the HTML markup for tables, and then look at how to style them with CSS.

Remember – tables are for one thing, and one thing only – displaying tabular data!

Read more

Tagged with:

« go backkeep looking »