1807: Learnin’

During quiet periods, I’ve been educating myself in some things that will doubtless prove beneficial to future career plans: specifically, I’ve been learning about the various languages of the Web thanks to a marvellous site that I remember seeing the genesis of a while back, but which I haven’t really delved into until just recently: Codecademy.

Codecademy is a site that truly leverages the idea of interactive learning and makes programming accessible to anyone, regardless of their previous skills. It covers a range of topics, starting at HTML and CSS and working through other useful technologies such as JavaScript, jQuery, PHP, Python and Ruby, and also provides examples of how to use these technologies to leverage the APIs of popular platforms like YouTube, Twitter and Evernote to build your own apps.

There are a number of different approaches you can take through the currently available course material: you can take a specific “skill” (such as HTML and CSS, or JavaScript) and work your way through a series of multi-stage exercises, given clear instructions and the opportunity to immediately see the effects of your work as you go; you can take on a practical project (such as recreating the homepage of a popular site using established Web technologies such as HTML and CSS plus extensions like Bootstrap); or you can do one of the super-quick “this is what you’ll be capable of if you stick with it” projects whereby you “create” something impressive like an animated interactive picture by referencing pre-existing libraries that have conveniently been built for you.

So far I’ve found I’ve responded best to the structured, skill-based work. These courses take the longest out of all of Codecademy’s material, but they provide in-depth experience of getting your hands dirty, and tend to provide enough plausible context for the things you’re doing to make them relatable to real contexts. The JavaScript course perhaps didn’t go into quite as much depth as it could — I would have liked to see greater exploration of how JavaScript code is integrated into a website, rather than (or perhaps as well as) treating it as an entirely separate and independent language, but at least the course game me a reasonably firm understanding of some of the core concepts, and allowed me to get my head around object-oriented programming a lot more than I have done in the past.

I quite enjoy programming, though I haven’t been properly “into” it since the 8- and 16-bit eras, when I used to use variations on BASIC (Atari BASIC on the Atari 8-bit computers, and STOS on the Atari ST) to put together simple games. I fell out of the habit of programming around the time you no longer had to put line numbers in manually, though a few abortive attempts to learn over the years have made me pretty familiar with common conventions such as {curly braces} and ending lines with semicolons();

As with any new skill, the real thing you need to do to ensure the knowledge sticks it to apply what you’ve learned in some sort of practical situation. I’m hoping that the later exercises in Codecademy will provide some of this much-needed context for my learning and allow me to confidently say “yes, I do know [language]”. That sort of thing makes you eminently attractive when being considered for new positions, and while I’m not intending to move on anywhere just yet, it is, of course, always worth keeping one’s eyes open for suitable opportunities to flex one’s intellectual muscles and make use of the things you’ve learned over the years.

Still got a way to go before I’d consider putting any of these languages (except HTML and CSS, which I’m pretty confident in the use of) on my CV, though; better get back to the studying then, I guess!

#oneaday, Day 247: This Is Why We Can’t Have Nice Things

Twitter broke earlier today. This in itself is nothing unusual, as the existence of the term “failwhale” will attest. But this time it was partly a result of some new changes that the service made, particularly with regard to posting links.

Twitter recently launched its own link-shortening service, called “t.co”. This is one of the shortest link-shorteners out there, and when characters are a precious commodity as they are on Twitter, that’s really important.

Unfortunately, some clever young person discovered that by using t.co it was, in fact, possible to embed HTML code and, worse, JavaScript in these links. It was also possible to format tweets, change their colour and black them out.

Said exploiter quickly discovered that by blacking out a tweet and adding a “mouseover” JavaScript event to automatically retweet the exploit, post giant text on the screen or in some cases, redirect to websites you wouldn’t want anyone to catch you on ever whenever a user moved their cursor over the blocked text, they could cause absolute chaos. Thankfully, most people got wise to the exploit pretty quickly and retreated to the safety of Twitter client apps, as it only affected users on the website itself. Of course, there were a few people who started screaming “OMG VIRUS!!!” and panicking, but most of them were put in their place pretty quickly with a simple, calm explanation (hah, right) that an exploit and a virus are two very different things. And Twitter stepped in to plug the security hole reasonably quickly, too. So the whole thing was over within a matter of hours.

The main point of this, though, is that it wouldn’t have happened at all without the new functionality that Twitter was offering. It seems that every single time something new and potentially awesome appears, there is at least one person out there who wants… no, seemingly needs to break it. Why? Because they can.

This explains the existence of “glitchers”, people who deliberately play video games in order to break them. It explains the existence of software pirates, who are out to break copy protection and DRM on software. It explains the existence of hackers, people who write viruses and spammers. And, indirectly, it’s the reason why every single time you turn on Windows you have fifteen bajillion updates to install.

This is all getting a bit tiresome now. It’s such a shame that things that are new must seemingly go through the “initiation” of being broken by some idiot sitting in his pants in his basement, probably masturbating furiously as he watches the chaos unfold before his eyes. Because you just know it’s a “he”, too. (I’m all for equality, but when it comes to stupid, pointless and inconvenient things to do with computers, it’s always a guy.)

Thankfully, the world seems adequately set up to deal with such dribbling idiots these days. We have spam filters, virus scanners, scripts to clean out malicious code from websites. Companies have teams to fix broken functionality like we’ve seen here. And of course, it’s easy to say that things should be tested more thoroughly before release. But there’s no way you can predict every single possible stupid thing that some member of the human race will try and do. If we could, no-one would ever go outside and the world and everything in it would be covered in sponge just in case we fell over and hurt ourselves and/or tried to kill someone else with something.

So if you know anyone who’s ever come up with one of these exploits, or anyone who’s ever ruined a Nice Thing for anyone else, do the world a favour and go and punch them really, really hard in the testicles.