The third of Clarke’s three laws states, in layman’s terms, that anything you cannot understand is basically magic. In our world we are so accustomed to technology that we rarely think about how it works, or how it must look to an outsider.
Any sufficiently advanced technology is indistinguishable from magic.
Arthur C. Clarke
Bringing a modern day cell phone to an impoverished country and telling them that all they have to do is press a few buttons and speak to someone across the world with crystal clear clarity must really be a shock. Imagine looking at our tiny devices, with no wires attached, not even any real, pushable buttons, and then speaking into it to someone else. Religious people might believe they are talking to the heavens. Others might think it is sorcery. Even myself, a person familiar with the workings of cell phones, and radio waves and everything else involved in making a cell phone work, can admit that it is very spectacular to see in action.
So when I say that programming is akin to magic, it isn’t in the Harry Potter style with wands and sparks and secret communities. It isn’t about whispering a few words and having locks be unlocked, candles get lit and making objects float. Programming is magic because with the right combination of words, environments and knowledge, you can make SOMETHING appear from seemingly NOTHING. Is that not magic? Have there not been countless people persecuted for making something happen that others could not understand?
In witchcraft, a person would take a foreign or made up language, they would light their candles in a pentagram shape and summon demons or whatever it is witches do (I am a programmer, not a witch!). Well in the world of web development we take made up languages, we type them into computers in a specific order with strict formatting and we summon websites.
We keep making our “spells” (AKA code) longer and more complex, we start mixing various languages together and we keep pushing boundaries. The end result being crazy and wonderful websites that can automate, entertain, communicate, simplify (and complicate!) our lives.
My peers may understand the magic I use, they can probably even use it better. But really, out in the general population, how many people see us as magicians and wizards and witches and warlocks? Many times I have come across people who tell me they simply do not understand how we are able to create such things all from some text on a computer.
There are other professions, such as carpentry, where people can watch and see a progression from pieces of wood to a beautiful table. We can watch an artist take a blank canvas and create a masterpiece with nothing but paint. But most people looking over my shoulder just see gibberish being typed in and results coming out. Magic!
About the author: Christopher Waldau is an avid fan of street magic. Ever since he was a little boy people like David Blaine would captivate his imagination and fascinate with simple card tricks and illusions. He has also created a portfolio website for a close friends father who practices the art of magic. As such, he may have biased opinions on his views of programming being likened to magic. As he never had the skill and/or dedication to focus on magic, he likes to think they are one and the same. Hopefully there are people out there who he can fascinate and inspire them to choose the path in life that makes them happy.
Not too long ago I decided to re-design and re-launch my personal website. I didn’t know it would coincide with the new year, but with change comes….more change, I guess!
I felt that I outgrew the old design. It was literally the first full site I ever made. And while it was good all those years ago, both myself and the web development world have grown and evolved.
So let’s talk about the new site. First off I used (but heavily modified) a theme from Styleshout. They have amazing themes FOR FREE! They just ask for some love (AKA a link-back) somewhere on the site. To be specific I used the Ceevee theme.
So I separated all the pages, gave them each their own containers and their own links. But then I realized I needed a header, a navigation bar and a footer for each page. Want to change the page title, add something to the menu or change the copyright text? Make sure you remember to do it in all the pages! That isn’t very convenient so the next step was converting the HTML site into a PHP site.
Using PHP I was able to create individual files for header, nav and footer and each page now “includes” each of those files. That means that by simply changing the one relevant file, changes will be made across the entire site.
The method I used to create each PHP page was to call the page in the links. So http://chris.waldau.ca/?p=resume would bring up my resume page. I would also be able to use this in PHP to determine what page I am on and dynamically change and adjust certain things, such as the page title (seen in the browser tabs, for example you should see “Blog | Christopher Waldau” in this tab). But having question marks and equals signs are not very user-friendly in a URL so I created a .htaccess file to redirect the “ugly” links back to “pretty” ones.
I wanted my site to be a little more interactive and programming oriented so I found an amazing JQuery plugin called typed.js by Matt Boldt. I used it to make my home/landing page more fun by having my name and an intro blurb get typed out when the page loads.
The original contact page did not include any sort of captcha so I figured it would be best to implement one. But a captcha can be pretty annoying for a user who just wants to enlist my services. As oppose to having a captcha that requires the user to validate themselves, I implemented one that lets robots invalidate themselves. They are called honeypot captcha’s and the idea is that a robot spammer is not smart enough to distinguish a real form field from one we have hidden from view. The robot spammer will read the website source code, ignore the CSS that says a form field is hidden and simply fill out the entire form. When I process the form I check if the honeypot has been filled out or not. If it has been then it was more than probably a robot spammer and I reject the form. Don’t worry though, I still send back a nice response explaining the situation, in case something went wrong and an actual user has seen and filled in the honeypot field.
I also added a blog, since the original Ceevee template did not include one. I used styling cues from the “about” page in the original template so that my blog could still match the rest of the website. This very blog is actually powered by Tumblr. I am using the Tumblr API and a PHP class built by Dhruv Govil (again, something I heavily modified) to interface with Tumblr. Unfortunately I can’t find the original script anymore (my Google-Fu has failed me!) but it is a pretty basic script that requests all the posts from a specified user and displays them. There is no functionality for creating/editing posts through the PHP class itself, so when I want to write a new post I go to Tumblr and write one from there. The advantage being that Tumblr is already set up to be made for blogging and has all sorts of great features that I would otherwise have to build myself. When a new post is made public on my Tumblr blog, it is instantly also available on my personal website.
Other changes to the original Ceevee template include text (obviously!) the landing page background (Montreal represent!) and other CSS changes (mainly the colour scheme). Oh, and I also swapped out the “latest tweets” for “latest blog post” on the contact page since I don’t use Twitter.
All in all I am very pleased with the result as well as my increasing skill with all things web development. Found a bug? Want to make a suggestion? Use my brand new contact page!
P.S. For legacy sake, I have left my old site available at http://chris.waldau.ca/old. Lets all go laugh at it!