Thom Bruce

In the beginning...

In the beginning...

I mean not to sound too grandiose or even... Biblical. No.

In the beginning... of my blog... there was this post.

Or there wasn't. I did have to create the post, give it form.

Give it form? Is that what this is?

Look, I really don't know how to start these things. I don't know what to say. Do I introduce myself? I'm Thom, by the way. I've been a software developer for... I want to say 20 years. I want to say longer. My first book on software development was an illustrated guide to basic HTML and CSS geared towards kids. I was around 10, I'm 36 now, so let's say I've been developing software for 26 years.

But Thom, HTML and CSS aren't programming languages. That isn't...

Hey, shut up though! And criticism noted (I've replaced instances of "programming" in the previous paragraph with "software development").

But I'm liberal about the meaning. I say if you wrote custom CSS for your MySpace profile circa 2003-2010, you've umm... dabbled in programming. You're not per se a programmer, but you've dabbled. You're a dabbler. You've provided instructions to an interpreter that modified the user experience. Go ahead and slap "UX Design Genius" on your CV right now! You have my permission.

Anyway, that book... Couldn't tell you today what it looked like, but if you were to show me a copy I'd say "THAT'S IT, THAT'S THE ONE!" Got that thing at a Scholastic Book Fair. There were probably Goosebumps and Animorphs books on the shelves of those big, metal cabinets (both series I was a big fan of), but I saw a book promising to teach web design and went for that.

What a geek!

Then by 2004 or '05 or whatever, we were all tweaking the CSS on our MySpace pages, as aforementioned. I got really into Newgrounds around this time too and was intrigued by the idea of doing animation or some basic games programming in Flash myself. I will not say here that I had a cracked copy of Macromedia Flash, and this sentence is not a confession. But I had a copy of Flash in any case and taught myself the basics. I remember trying to create a simple side-scrolling platformer where you played as a pirate fighting enemies who... walked towards you for 240 frames, then promptly disappeared. And I didn't know the first thing about how to debug that at the time (read: "Stack Overflow didn't exist yet"), so that game never made it much further than that. But it was the beginning of something, you know? I still see those days of writing ActionScript as a sort of... halfway introduction to JavaScript, which I think I'd dabbled with at this point (I'm a dabbler) but hadn't yet made any serious use of.

It really wasn't until university that I took more of an interest in building websites. You need to promote yourself, I started to think. You need a website. A website, I had decided, demonstrated professionalism. And so I wrote the first iteration of a personal website in around 2008-or-so, at which time the big, dominant technology powering websites was PHP and, in particular, WordPress. I love WordPress, still. It really does give you all of the essentials out of the box, while at the same time being extensible enough to do so, so many things; things that platform really has no business doing! But by writing clever little plugins, you could make it do them anyway. Here then was my introduction to writing extensions for other frameworks, here then was where I went semi-pro!

And where are we in the timeline at this point? 2008-or-so? We skip forwards then to the end of university, to 2011 and to the beginnings of a job search.

I had done some semi-professional web and systems administration work at this time. I recall contributing to some digital project for the university while I was employed as a Student Ambassador. And based on these skills, I had found work as a web administrator for a little business in Manchester. This wasn't particularly fulfilling work, nor did it take advantage of all of my capabilities... but it was something.

I had also started to sort of dismay at the apparent lack of opportunity to gain recognition as a writer or as... really almost any kind of creative professional. It really is or... was or... maybe this is an unfair observation but... it really seemed a very nepotistic world, the creative arts; very much a case of "it's who you know". This was a problem, and me... I love a problem! It was this that spurred me on to create first a platform built in WordPress called Weirdo Media aiming to help creatives self-promote their work, then another very similar platform by a different name I do not remember, then finally... Quotable.

Quotable was such an interesting project, and genuinely if I can ever think of a viable way to resurrect some of its core ideas... I'm eager to. The thing is though... it really wasn't viable. It also might have summoned Cthulhu. The idea was essentially to make the web more... "quotable". Pinterest for text snippets was sort of the project tagline. I would make it so that you could easily click or tap a sentence anywhere on the web and instantly share it to the Quotable social platform with a link back to the original content. And while I am partially joking about the summoning Cthulhu part (it is easy to avoid summoning Cthulhu by parsing the HTML separately and replacing the tags with tokens before processing the natural language structure of a paragraph), the basic premise does still seem unviable to me. To make the individual sentences of a webpage selectable using my code required a hefty (though predominantly successful) RegEx that had some ideas about what a sentence should look like (and this varies a lot more than you might think, not just by language but also simply by authorial style--I'm looking at you, Amanda Palmer, lead vocalist of the Dresden Dolls and occasional blogger who starts every sentence with a lowercase character). It also required a browser extension and, worst of all, backend content parsing. By which I mean the JavaScript of the browser extension could not parse the contents of a page itself (the RegEx contained features not implemented in JS), but instead sent the relevant content to my backend API where the HTML tags were stripped, the natural language was parsed and <quotable></quotable> tags added, and the original HTML was restored before delivery back to the client for rendering. Said backend in fact became the basis for demonstrating the idea on mobile, where I also found I could bypass CORS protections by having my server request a webpage itself, modifying its contents and then rendering this in an iframe. Clever... definitely. But that there is also essentially what's called a man-in-the-middle attack. I had almost by accident discovered a way for my website to impersonate any other website, while also modifying said any other website's contents.

Oops?

Yeah, oops. But even that isn't why I think the whole idea remains unviable. Fact is, the web just continues to evolve at a blazing pace. And my platform depended on understanding the language of the web, even as this was quickly changing. Because there is a lot going on there, and every part of it will have been broken by the continued progress of the World Wide Web. It was a resource-intensive maintenance nightmare. And also... It was one hell of an introduction to Ruby on Rails.

That, Quotable, was my first Rails project and it introduced me to...

  • Authentication
  • The PostgreSQL database
  • RegEx (Regular Expressions)
  • HTML parsing
  • CORS
  • Bypassing CORS
  • Chrome browser extension development
  • Client-to-API communication

I mean really just... what an absurd first project.

The year was 2012 and... at this point, I begin to get actual work as a web developer. Specifically as a Rails developer. I think I owe my career to the absurdity of that first project, because I don't have the traditional background in computer science or programming. I studied film at university, I wanted to be a writer. I still dabble. No, instead my journey into a career in programming and software engineering was born out of curiosity, stubborness, a near-miss with a cosmic monstrosity and... accidentally bypassing CORS headers before I even knew what they were.

Most people start with Hello, World!