LinkedIn Twitter Email Github
KishCom
Andrew Kish

My Week as an iPhoney

This year seems to have a common theme for me: trying things out that I’ve previously proclaimed to hate. The contract I’m on is working with a Java backend, they gave me a MacBook Pro to develop on and now I’ve been given the opportunity to try out a bunch of new phones — including the iPhone 4S. Java, Macbooks, iPhones — things I’ve never been a big fan of, not because I had used them before and didn’t like them, all because of personal philosophical hangups. So this year I’ve been trying them all out while being as unbiased as I possibly can be. Thus far almost all of the things I’ve tried confirmed my previous assumptions (my work Macbook Pro now runs Linux Mint 12, and Java is still as cumbersome as ever).

This week I’m going to try and use the iPhone 4S as my “daily driver” – that is to say I’ll be taking the SIM card out of my Galaxy S II X and putting it in the iPhone to take it for a test drive as if it was my only phone. I’ll be updating this blog post through out the week with my thoughts.

Initial impressions

As with everything Apple makes – the hardware of this phone is beautiful. The screen feels tiny compared to my Galaxy SIIX, yet bulkier at the same time because it’s heavier too. Right off the bat I wanted to install some apps that I knew were popular on iPhone – fortunately having done development for iOS devices in the past I already have an Apple ID. The app store prompted me to install iBooks – so I did. What struck me as odd was that it asked for my Apple ID password again when I went to install the Twitter app… and than again when I installed Instagroanram. It asks you for your password every time you install an app?! Annoying.
I have a small amount of music I keep on my phone – only about 500MB (mostly mixes and a few albums). I plugged my iPhone in to transfer music I got this message: “Unhandled Lockdown Error (-15)“. I pretty much knew iOS devices were incompatible with Linux, but I at least had to try. So, time to boot up my WinXP VM and install iTunes (no Wine support either). I guess I’ll be testing out iTunes while I test out the iPhone this week too, having developed for iOS, I suppose it was naive of me to think I could do this without iTunes (*Ninja edit!* I was wrong. It works perfect in Mint 12 (Ubuntu 11.10 based), doesn’t work in Mint 11 (Ubuntu 11.04), more info and a screen shot below). 40 minutes of copying, praying, importing and configuring later… I have music on my phone and in my iTunes library – importing my existing music library was nothing short of painful. Of course adding music to my library from the iTunes store is super simple (I haven’t bought any music yet, but I plan to before my iPhoney trial is over). I am sure both the pain of existing music import and ease of buying from the iTunes store is very intentional.

I had a couple issues with the on-screen keyboard, specifically, why is it always in upper case? On Android the keyboard is all lower case, then when you press SHIFT or Caps Lock they all change to upper case – it’s a very great visual indication of what letters and case you’ll be typing. I was also dissapointed to see I couldn’t tap and hold a letter to get an alternate character (punctuation, numbers, etc). I also seem to make more mistakes on the iPhone keyboard – I am far too used to both the large screen size of my Galaxy SIIX and the sloppy ease of text entry using Swype.

Day 3
It’s been an interesting few days as an iPhoney. I’m having a hard time finding a decent Twitter app because I use 4 or 5 private Twitter lists almost exclusively… all the apps I’ve tried are very cumbersome to navigate around lists. Speaking of awkward UI, I don’t think I’ll ever get used to “pull to refresh” (Twitter ‘owns’ that anti-pattern anyways). It’s also hard to get used to the “back” button being in the top-left as opposed to it being a dedicated button… but I’m getting used to it.
I’ve downloaded some popular games and they’re really quite fun, I don’t do much gaming on my Android… but the level of detail and fanciness of the 3D on each platform are comparable.
When I’m reading things I find that I hold the phone way closer to my face than I do with Android; however this is a bit of a trade off since the clarity of the display while holding it closer to your face is much more noticeable.
Multi-tasking works better than I expected it would, but I’d really like the ability to remove apps from the “running” tab (double tapping the home button) – it seems more like a list of recently run apps rather than a true task-switcher.
Typing is hands down more difficult than on Android. I don’t think I’m even capable of ‘getting used’ to it. Errors are more frequent, the auto-complete is half-assed, and forget about trying to quickly use punctuation. I really wish I could at least install Swype.
Dropping calls is another real issue. I can’t be sure if it’s the Bell network or the iPhone itself. When I start a call I can see “full bars” – however sometimes those full bars drop down to one and a few times to nothing at all – resulting in a dropped call and a little “Searching…” notice where it usually says “Bell”. I live in the heart of the Entertainment District downtown Toronto – coverage here has to be better than anywhere else in Canada – yet I still get dropped calls. It’s worth noting I’ve never experienced a dropped call on my Galaxy S II X.

Things I’m liking

  • The music app – I really like how the iOS music app works. Only thing that would be better is controls on the lock screen. It’s better than any music app I’ve tried on Android
  • “Retina display” is actually really noticeably clearer
  • *Update* iTunes isn’t needed for music and documents management. It works flawlessly in Linux Mint 12 – check this screen shot out.
  • Games are fun and butter smooth

Things I’m not liking

  • Keyboard (mentioned above)
  • iTunes reliance – can’t install new apps from the web
  • Dropbox – Wow. Android users get WAY more functionality with Dropbox.
  • Gmail – I suppose it’s not surprising the Gmail app isn’t as good as the Android version. *Update* Why do I get push notifications for new email, but have to manually refresh Gmail to see it?
  • Lack of quality free apps. Seems like any app worth having is $2.99
  • Drops calls like crazy.

More updates to follow…


 

My Entitled Generation

I’ve had this blog post brewing for months now, almost a year. However this Globe and Mail article titled “2012 vs. 1984: Young adults really do have it harder today” and the subsequent Reddit conversation around it really was the tipping point for me to write my thoughts out on the issue. I was blown away by how many people my age (20 somethings) were upset (absolutely furious even) that they weren’t getting the same deal as their parents. The same people seemed blind to the sheer number of opportunities around them. My comment on Reddit was a simple jab: “Oh woe is us and our iPhones.” – I’ve never had such hate directed at me for such a simple comment. What I loved most is being accused of being a baby boomer myself because someone in their 20s couldn’t possibly disagree with The Globe’s article. When the comment came in trying to compare a Sony Walkman with an Apple iPhone – I realized my generation didn’t truly understand the stunning gift that technology and the internet had given us. To me it was a gateway into anything I could imagine – to them it was a glorified music box. Few people saw why the prevalence of smart phones had anything at all to do with the economy, education, or employment. All they see is how the baby boomer generation “screwed us” because we’re not going get the same things as they did for the same price.

The two big points I want to drive home:
1) The world in 1984 is a completely different one than ours today in 2012. The main factor for this is simple: technology and the internet.
2) The old school mentality of: “Go to university -> Get great job with your degree -> Buy a house + car -> Work 2 or 3 jobs for 35-40 years -> Retire” is LONG OVER. Our baby boomer parents may not believe it, but it is, and the evidence of such is all around us.

The internet has changed how we live almost completely, and will continue to whether you want it to or not – it’s an unstoppable force driven by not only corporate greed, but more importantly mankind’s desire to progress. This year in Salt Lake City it will become common-place to pay for your bus fare, lunch and other small purchases with an Android smart phone. Next year it will be more cities, and in 5 years time people in North America will be insulted when a merchant doesn’t have a “tap to pay” terminal installed. To some this is a natural progression, but let’s take a mental step back: our currency is changing. The way we pay for things has been largely unchanged over the past several hundred years, and all of that is about to change over the course of a mere decade. Currency is only a single example of the major changes technology is bringing us. Everything is changing: from the way we consume media, the way we communicate with each other, the way we travel, even the way we age – it’s all being changed more dramatically and quickly than ever before in human history. The speed that these changes come is unnatural for almost everyone born before the 80′s and almost everyone born after the 80′s takes this speed of change for granted – in fact – for most it’s expected (even if on an unconscious level).

Think about it for a moment: literally, the entire compendium of human knowledge is available at your fingertips no matter where on the planet you are (not to mention the instantaneous communication). This has far reaching implications for education, work forces, and well beyond. Suddenly you don’t have to be a history major to “know” when a specific event occurred – give me 20 seconds to look it up and I’ll have a guaranteed-accurate result that’s arguably more trustworthy than the one the history major can spout off the top of their head (talk of authority and trustworthiness of that digitally obtained information is a topic for another post). This just plain wasn’t possible up until about a decade or so ago. Suddenly if you need to know something, you don’t have to go spend hours/days/years learning it. This is an absolutely mammoth change for all mankind (and also why free software is important). Again, speaking as a developer, I see how this impacts my industry in a very real way: a cursory awareness of a technology is enough for most talented developers to claim to people that “they can do it” because they know after a weekend of tinkering, tutorials, IRC + forums they know enough to implement a solution using that technology. You may think this isn’t applicable to your industry, but it really is. A talented brick-worker can simply watch a video and read up on a new technique some other brick-worker came up with. Of course, they would have to play with it and practice to develop their own skill – but they certainly wouldn’t have to go back to school to learn it. This ability to rapidly uptake new knowledge is what is making post-secondary education almost obsolete (save for advanced, and/or very specific research). It’s also what makes a good employee into a great employee.

I went to Humber College to get a “computer programmer” degree for 3 semesters before I dropped out and got a job as a computer programmer. I was lucky enough to realize the stuff they were teaching was already out dated. A teacher reciting lines of Java out of a textbook was a vastly inferior way to learn when I compared it to how I had been teaching myself my whole life. This would have been much less true had I have taken a University computer science program of course, but what little concerns I had about this were put to rest after I had worked with a few computer science grads. A few of these people, with $100K+ computer science degrees barely knew how to use a terminal, let alone write good code. It was absolutely stunning to see how little they actually knew despite having a piece of paper that said they should know all of it. Of course, these people are edge cases, but I found myself easily able to keep up with the com-sci grads who were talented even though I didn’t have a degree myself. For the times when I’m not able to keep up on a subject – a quick Google’ing of the topic and 10 minutes or so of reading is usually enough to get me up to speed and able to contribute to the conversation.

You don’t have to go to university to get a good job. You don’t have to own a car to get around. You don’t have to own a house to live in. You don’t have to get married to be in a happy relationship. You don’t have to retire to take it easy in your old age. These are the death knells of the baby boomer ways of life – your parents want the best for you and for some “the best” means explicitly all of those things: University, a single high-paying career, a beautiful house, a car, a family and a retirement plan. Those are all very nice things, but it’s certainly not “the best” for all of us, and it’s coming to the point where it’s not even “the best” for most of us. Blindly striving for these things almost becomes binding when you look at all the freedom technology affords us today. You as an individual (or as a family) need to ask yourself: is this really what I want? Will it make me happy to have all these things (Did it make your parents happy?). Learn to appreciate what technology can do for you in every aspect of life and embrace it. If you don’t, you’ll be left behind because it’s only getting bigger and more prevalent at a faster and faster pace. If you do, you’ll excel past your peers, you’ll excel into employment success well beyond what your baby boomer parents could have hoped for … you’ll make them proud in ways they never could have expected.


 

FITC Toronto 2012

FITC Toronto is today! I’ve been looking forward to this conference for a few months, there’s lots of exciting things to see. I’ve got a long way to travel … it’s so far away, like almost 500 meters from where I live (seriously, the hotel the conference is at is around the block from me). Following suit some of the other attendees; here’s what my schedule looks like:

MONDAY:
HTML5: Life in the Trenches
Emerging Technologies in the Real World
NFC: Thinking Creatively Beyond Mobile Payments (!! Hype)
The Adobe Keynote
The Trouble with JavaScript (and Why It’s Worth It)
From Free Software to Fine Art

TUESDAY (Tentative):
The Thing is Your Friend: Making the World Alive One Bit At a Time
Hello Sencha: HTML5 Applications
CreativeJS Typography
How to Give Everything Away
Object Oriented Electricity in a Social Setting

WEDNESDAY (Tentative):
Hey Ellie, What Are You? (So hyped, an old college friend is giving this presentation)
Storyworlds in Abstract Experiences
Mozilla’s State of Games on the Web
WebGL – Now is The Time to Start Paying Attention


 

Mass Effect 3

I finished my second play through of Mass Effect 3. The game is awesome, the series was amazing and I would recommend it to anyone… except the ending, specifically the very last 10 minutes. I played each of the earlier two Mass Effect games twice as well, once as a hero do-gooder (aka “Paragon”) and once as a cunty jerkface (aka “Renegade”). The slick thing about the Mass Effect series is that you can import the save game from each of your previous games – meaning decisions you make in ME1 and ME2 can affect the outcome of ME3 – it’s totally awesome and worth it, except for the ending, specifically the very last 10 minutes. The story is great and almost everything from the previous two games are tied up nicely, except for the last 10 minutes or so. The combat is fun, albeit a little repetitive, and the weapon system is a good balance between the basic customization of ME2 and inventory-tedium of ME1. This game was great, except for the last minutes of game play and cut scenes.

Did I mention the ending sucks? Like hardcore, worse-than-Lost style, kick-to-the-groin sucks. This stupid picture really just about sums it up – you get to pick the color of the explosion – that’s the difference between any of the very last endings no matter what decisions you made earlier, I really wish I was kidding or even over exaggerating. It kinda feels like a cop-out, like they ran out of time and had to scramble to make endings. Don’t get me wrong, ultimately as a whole, there is so much great game play and story telling. You can just read the alternate ending a fan wrote, pretend that’s actually how the game ended and be very satisfied with Mass Effect game series.

I honestly thought they were setting up a never-ending-battle type thing with the multi-player tie in, instead, multi-player is an exercise in futility. You just fight wave after wave of Mass Effect baddies with 4 other players co-op earning unlocks at a much slower pace than you would playing the single player campaign. To what end? I have no idea. Like most ‘horde mode’ game play styles, it doesn’t really seem competitive and really gets kind of boring after 4 or 5 rounds. It seems like such a missed opportunity – it would have been neat to have the multi-player portion of the game be part of the single player experience by either: having to help “mop up” the galaxy of left-over defeated reaper forces or defend and survive against the winning reaper forces (depending on your ending — if either of those endings existed — which they don’t — to reiterate: you only pick a laser colour).

When I finished Dragon Age II, I was so dissatisfied with the ending I wrote: “I may just give up on it though and hope that BioWare pulls its head out of its ass for Mass Effect 3″ – they did – for 99% of the game. With the recent DLC controversy (yeah, I caved, and bought it) I can’t help but wonder if there isn’t a slick marketing dude pointing at a social media metrics graph telling a shadowy board of EA execs: “Look at everyone talking about our game. They all want a new ending and we can sell it to them as DLC!”. The sad part is, I’d buy it if it was good.


 

Roll Your Own URL Shortener

Over the past few years we’ve seen the rise of URL shorteners. Sites that take big ugly urls and condense them down into short versions, there are literally hundreds, if not thousands of them out there (bit.ly, goo.gl, t.co … etc). Years ago I made my own ‘Kish.cm’ solely because I wanted to learn a framework in PHP, and a URL shortening app is a fantastic functional example. About a year after it was up I re-wrote it in Python/Django. About 2 weeks ago I finished re-writing it again for Node.js. This little web app has come to represent my “Hello World” for learning a new language and web framework. This re-write was different though, it’s the first real project I’ve ever released on my own.

The project is called shorten-node and you can check it out on my github.

What you’ll need:

  • A short TLD
  • Heroku toolbelt
  • Basic web programming knowledge (or at least no fear of a command line)

What you’ll get:

  • A fully functional URL shortener with an API
  • Such great trendy web dev cred: “Just pushed my Node.js URL shortener to the heroku cloud … check out the diff on my github.”
  • So much attention from the opposite sex on twitter (“Is that a custom url shortener?! *swooon*”)

The first thing you’ll need is a short domain. It can be literally anything you can get your hands on. Getting weirder or less common TLDs can be a little expensive (.cm is about $100/year) and you may face restrictions that you’ll be unable to meet (often countries will require you to have a representative living in their country before letting you get a TLD from them). For the purposes of this post, I’m going to use my ‘kish.cm’.

Open a terminal, and check out check out the code for shorten-node into a new folder. The folder name I’m using is ‘kish_cm’ – again feel free to sub in your own name here and anywhere else that you see “kish_cm”, “kish.cm”, or the app name “kishcm-node” used.

git clone https://github.com/KishCom/shorten-node.git kish_cm
cd kish_cm

Heroku is a very cool new web app hosting platform. Since the app is tiny, we can use the Heroku cloud for free to start. You will have to put in a valid credit card to allow add-ons to be added in, but you can pick only the free add-ons and not get charged. We’ll be using the ClearDB MySQL Database addon, it gives you 5MB for free – I have about 1000 short urls and 10000 log entries that consumes 2MB. So depending on how much you use you can either upgrade to the $9 a month, or turn off stats gathering and make that 5MB go a very long way (such is the beauty of using the cloud). After you’ve signuped at Heroku, configured your SSH keys with them, and installed the toolbelt you can login in your terminal:

heroku login

We’re going to tell Heroku to provision us a new web app. We’re using a custom “buildpack” here, this allows us to use Node.js 0.6.x based web apps (by default Heroku only supports 0.4.x). I’ve named my app ‘kishcm-node’ here, I suggest you name yours whatever your TLD is without the dot.

heroku create --stack cedar kishcm-node --buildpack http://github.com/liquid/heroku-buildpack-nodejs.git

We need a database, I decided to try one of the Heroku addons, but really any MySQL database that accepts a remote connection will do. To get the MySQL addon we need to login to the Heroku website. Once logged in you should see the app you just provisioned in your apps list. The ClearDB MySQL addon requires you to “verify” your account by adding your credit card information, we’ll use the free add-on so you won’t be charged. Once verified, click “add” on the ClearDB MySQL addon page and it will attach to your app.

Go back the the terminal. We’ll set an environment variable so shorten-node knows that it’s in a live/production environment.

heroku config:add NODE_ENV=live --app kishcm-node

We’ll check to make sure the ClearDB MySQL server was added to the app and that our NODE_ENV was set properly.

heroku config --app kishcm-node

We need to get the MySQL username, password and host from the config. You should see something that looks like this:

BUILDPACK_URL          => http://github.com/liquid/heroku-buildpack-nodejs.git
CLEARDB_DATABASE_URL_A => mysql://xxxxxxxxxxxxxx:yyyyyyyy@us-mm-auto-dca-01.cleardb.com/heroku_zzzzzzzzzzzzzzz
CLEARDB_DATABASE_URL_B => mysql://xxxxxxxxxxxxxx:yyyyyyyy@us-mm-auto-sfo-01.cleardb.com/heroku_zzzzzzzzzzzzzzz
NODE_ENV               => live
PATH                   => bin:node_modules/.bin:/usr/local/bin:/usr/bin:/bin

Using your favourite text editor open settings.js from where you checked out the shorten-node code and update the live_domain and live_mysql objects. Update the live_mysql object to match the mysql URL, username, password and port that was outputted from the app config:

live_mysql: {user: 'xxxxxxxxxxxxxx', password: 'yyyyyyyy', dbname: 'heroku_zzzzzzzzzzzzzzz', host: 'us-mm-auto-dca-01.cleardb.com', port: '3306'},

The dev_domain and dev_mysql objects can be updated if you wish to do any development on a local machine – this is useful for making and testing changes in your app before pushing them live. It goes a little beyond the scope of this document, however the README file in the shorten-node github will walk you through setting up a local dev environment if you’re interested.

Next we need to initialize the database – this simply generates the database structure for our app to use. Do this by running the setup command. If it fails it will tell you the SQL error it encountered, otherwise it will print “DB Initalized for live”

node setup_db.js live

Now that our database is setup, and we’ve added our domain to the settings.js file our app is almost ready to deploy! We need to commit our changes to our local git repository and push that repository to Heroku. This sounds daunting but it’s really not that bad. Simply issue this git command:

git commit -a -m "Updated settings and initialized database."

Next we’ll need to configure your domain. This varies from one domain registrar to the next, so unfortunately I can’t walk you though this one, but what you’ll need to do is set DNS “A Records” for your domain. The Heroku documentation page has a little video walking you through how to do this with GoDaddy, but as I said, it will be slightly different from domain-provider to domain-provider. Once you’ve set your A record, you need to tell Heroku to listen for requests to your domain, do this by first enabling custom domains and then adding your domain.

heroku addons:add custom_domains
# Replace kish.cm with the domain of your shortener
heroku domains:add kish.cm

Once you’ve got that setup, you’re ready to deploy to Heroku. What’s really cool about this process is that it’s done entirely though Git – you don’t need to FTP any files around, or muck about with weird web GUIs. You simply push to their remote repo.

git push heroku master

If you get an error along the lines of “fata: ‘heroku’ does not appear to be a git repository” – we just need to make sure the Heroku remote repo is setup with our local git repo. Do this by simply issuing a git remote -v

git remote -v

You should see “git@geroku.com:kishcm-node.git (push)” in that output (again, just a reminder, you should be using your own custom app name in place of ‘kishcm-node’ in these examples). If you don’t, you just need to add the remote repo like this:

git remote add heroku git@heroku.com:kishcm-node.git
#Now reissue the push command
git push heroku master

If you’re still having problems, check out the Heroku help documentation for git. However, if everything has worked you should see git output a bunch of messages from Heroku, ending with one that tells you that your app is deployed. Simple as that, your custom URL shortener is ready to use!

If you want to make changes, updating your app is super easy. Assuming you don’t already have code checked out (you’re starting from scratch on a different machine for example). You can easily get a copy of the current running app (replace ‘kishcm_node’ with your app name) by cloning the repo right off of Heroku like this:

git clone git@heroku.com:kishcm-node.git -o heroku

Now you can make whatever edits to the app you want to (again, replace ‘kishcm_node’ with your app name), commit changes locally, then push your local git repo to Heroku’s git repo for your app – all this is accomplished with a few commands like this:

cd kishcm-node
#edit some stuff
# Commit your changes and with a brief message saying what you've done
git commit -a -m "Updated widgets to be more widgety"
# Push changes to live server
git push heroku master

Again, when you push your changes you’ll see Heroku rebuild your app and also redeploy it live. Simple as that. You’re now a web engineer capable of deploying web apps to the cloud. Congratulations.


 

The Fall of Ubuntu

I had actively been avoiding newer versions of Ubuntu, and yes, even my favourite Linux Mint because of the absolutely terrible things I had been hearing about Gnome 3 and Unity. Seeing how I’ve dove off the deep end in terms of what OS I use, I decided to install Ubuntu 12.04 Beta 1 this weekend and give Gnome3/Unity the old college try. I’ll be honest, I don’t know the difference between Unity and Gnome 3 – how they compliment each other or how they even work together. Frankly I’m so disappointed in them I don’t even care to look it up – I never plan on using them again (such is the joy of free software: so many choices).

The first thing I noticed was ironic and disheartening: the key-bindings are a strange mix between what was in Gnome2 and OSX. Meaning no matter what OS you’re coming from Windows/Gnome2/KDE/OSX – you get to learn brand new keyboard shortcuts (that’s not a shitty pain in the ass at all). Unity adds a weird side bar that functions very much like the dock does in OSX – that is to say; you can never be sure how many windows of that particular application are open, or even if it’s state is minimized/maximized or on another workspace – it’s a single icon with a crappy little light telling you if it’s running or not. A massive step back from what was in Gnome 2. Worse; there’s no clear way to modify keybindings – at least OSX lets you do this (mostly). I managed to install “ccsm” and changed a few, however now I have really weird things happen. For example, when “alt-tabbing” sometimes the “Search” window comes up – it comes up if you press “alt” and no other key – why, I have no friggin clue. No OS ever has done this and since ALT is a typical modifier key if you press it too slow/fast your window focus changes from the window you were on to this crappy “search” box. It’s like a UI punishment for not being exact or fast enough with keyboard modifiers.

It really strikes me as if Canonical hired a new UI guy who really had big ideas based on how he worked with his Mac on OSX – so he flat out took ideas from OSX and stuck them (quite awkwardly) into Gnome 3/Unity – and for some reason either no one disagreed with him or he was high enough on a corporate ladder to force his changes in (despite massive community backlash). I bet to brand new computer users this would be great, and lord knows there’s TONS of people out there who have never used a computer before and therefore will have no trouble or frustrations at all working with Gnome3/Unity (Yes. Sarcasm).

I love FOSS, and Ubuntu is easily the most recognizable brand of GNU/Linux, but with the way they’ve been making massive, heavy-handed changes to the very core elements of the OS – that’s slowly changing. DistroWatch shows Ubuntu’s popularity is dropping quite quickly since they changed to Gnome3/Unity – and that sucks. If Canonical and/or Ubuntu are really interested in getting a bigger user base they need to consider UI elements that compliment and enhance existing UI patterns. That is to say with a car analogy; if everyone is already driving why are you reinventing the steering wheel? It might be better to brand new drivers (who didn’t learn on their parents car), but since 98% of drivers will already be used to the way they drive, your revolutionary new steering wheel concept will be more frustrating to users than useful. Why not start with simple questions: “What’s frustrating about using Windows 7?”, “What can improve my experience with OSX?”. Then throw a bone or two to your biggest, most supportive group; developers and Linux power-users (whom got shit on with Gnome3/Unity): “How easy is this to customize and/or extend?”, “Can this be easily reverted to how it worked in the previous version?”

All hope is not lost. MATE is a project by Linux Mint that aims to bring the functionality of Gnome2 into Gnome3 – they’ve got a great start, but from my limited use (I plan on installing it next), they have a ways to go yet. In the mean time my OS of choice remains Linux Mint 11 – Gnome2 based.


 

Everyday use of OSX

At my new job they’ve given me a brand new MacBook Pro and OSX 10.7. I really am not liking it (surprise!), it feels like I’m crippled (more accurately, like my OS is crippled). I really have given it a chance (and in the interest of being OS agnostic I continue to) but honestly, I can’t understand why OSX gets the praise that it does; some things actually are intuitive and well implemented. Other things will make you grimace and wonder ‘WTF?!’. ESPECIALLY if you prefer to use the keyboard more than you use the mouse. The first and most painfully stupid complaint I have is to do with pressing “Enter” or “Return” on an icon in “Finder” – in every other OS since the dawn of computers pushing “enter” on something means to execute, implement, or start the selected item — not so on OSX. On OSX pressing Enter on an icon renames it, frigging renames it!! WTF!? (CMD+O opens it)

As a programmer, I write a lot of little words and short ‘sentences’ that need to be edited or modified frequently. I use advanced keyboard commands and little-known text manipulation functions. Try this in the text box below: Place your cursor at the end of the line (just after ‘amet’), while holding down CTRL use the arrow key to move left – you’ll see the cursor jumps to the end of the word! If you hold CTRL + SHIFT and then use the arrow keys it will highlight one word at a time. Unless of course you’re using OSX, in this case you must hold ‘option’ rather than CTRL to achieve the same result — worse — holding CTRL and using the left/right keys in OSX sends you to the start or end of that line (this is what the HOME/END keys are supposed to do! Again, OSX bungs it up and HOME/END keys bring you to the very top or very bottom of the document).

I’ve found a nifty program called KeyRemap4MacBook that allows you to remap much of this functionality to make OSX key-bindings work more like they do in every other OS known to man. The problem with this app is that it’s universal to the OS, and some apps I use actually bind keys properly – using CTRL in the terminal for example works exactly how you might expect (so if your keys are remapped using that software – it no longer works right). I’ve now got a toggle switch for quickly switching between OSX and normal key-bindings – but it is a major annoyance, I hope in time to work out a perfect solution.

Another straight up bizarre behavior of OSX is the new “Maximize” button. It doesn’t really maximize the window… it makes it taller, but not wider (and in some cases will actually shrink the width of the window you’re trying to maximize). Double clicking the title bar in Windows and GNOME will also maximize the window – in OSX this action minimizes the window (*sigh*). Why would anyone not want to use their whole screen for a program?

Yet another seemingly minor, but ultimately major usability fail is when you have multiple windows of the same program open. If you attempt to ALT-TAB (CMD+TAB actually) it only shows you one instance of that app – so if you have 4 Google Chrome windows open, the ALT-TAB menu will only show you one – and give you no indication which one you will be switching back to (the last used one). This is wildly annoying because the only way I’ve found to see all open windows for a given program is to click and hold on that programs dock icon – there is no way to do this (AFAIK) with the keyboard (EDIT! You can do CMD+~ to switch between app windows, or pay $14 and use a piece of software called Witch).

You should be able to use a computer without a mouse – in fact – after getting used to key commands you should be able to use a computer faster without a mouse. This appears to be impossible with OSX – some actions require the use of your mouse, not to mention that keyboard shortcuts are completely proprietary to OSX. This means if you learn to use Windows without a mouse, you’ll be able to use Windows, GNOME, KDE, BeOS (etc) all without a mouse. If you learn to do this in OSX … you’ll be able to use OSX without a mouse and be completely frustrated with every other operating system (which I believe is intentional – after all; why would you ever need to use anything other than Apple blessed OSX?).

Ultimately I want to be able to use any operating system at close to the same level of efficiency. When I’m working in Linux or Windows I feel like I’m running, using OSX makes me feel like I keep tripping. It’s not all bad, I’ve always said the hardware is beautiful, the MacBook itself is really good looking and well designed. I enjoy the trackpad (the gestures are neat) and the keyboard is solid. Don’t get me wrong though, I’d still never actually buy one unless Apple decided to open up a bit.


 

Free as in Freedom

Today is blackout day across the internet. Wikipedia is dark, Reddit is down, Google US has a big censored logo, and dozens of other sites are either dark or doing something to draw attention to the very scary PIPA and SOPA bills being considered in the United States. The bill has major ramifications for Canada, we’re already not seeing content because of the USA’s DCMA laws and the language in SOPA and PIPA make it clear that physical location of servers is important (for some reason) – even though Canadian sites might host purely Canadian content, if they are hosted in the USA (as many many sites are), they are to abide by the terms of SOPA and/or PIPA if passed. There’s TONS of information on this all around the internet today – go read it if you’re interested.

I find it kind of strange that it requires such a massive and blatantly Orwellian bill to spur people into action. While every other day of the week they’re fine with Apple and/or Microsoft controlling their computing experience and managing their media. Of course we see that the internet is an important thing to keep free – but if 99 out of 100 machines that comprise that internet network are running non-free software the question arises: just how free is the internet really?

Hardcore geeks such as myself never have much to fear – if the internet gets locked down, we’ll be the ones spearheading urban meshnets, darknets and virtually an “underground internet”. Others who lack the technical expertise to participate in these networks will be left to whims their corporate masters; not just lobbyist influenced politicians, but also to the many companies they blindly clicked “I agree” through. Even if SOPA/PIPA are defeated (and it looks like they will be), you can bet that next year there’ll be a newer, slightly less invasive version and a few years after that another, ad infinitum until corporations finally reign in the control of your computing experience they so desperately want.

There is a sure-fire way to stop this and it starts and ends with you: the consumer. We need to not only demand that our media come DRM free, that we be allowed to share, but that the underlying technology that we use makes it impossible for DRM to function and sharing content as easy as possible. We need to demand that freedom is literally engineered into the operating systems and physical hardware we run. I have made my position on Apple well known, they are by far the worst culprits of this, but Microsoft isn’t far behind (and Sony only wishes they had an OS platform). Did you know your iPhone is only allowed to run software that Apple allows? (Developers must literally get Apples blessing before getting a “certificate” to run on your iPhone or iPad). Did you know that most of the media you buy through iTunes is locked into iTunes forever? Sure Apple is the cool company right now, but for how long? When someone else comes along with something shinier, prettier that all the cool kids want, how easy will it be for you to move your iLife over to that new platform? (Hint: you’ll have to start over because you clicked “I agree” you sold out to Apple or Microsoft – just like the politicians selling out to the lobbyists).

If a free internet is important, shouldn’t a free operating system be just as important?


 

Node.js : Very cool

I have started playing with Node.js way more, it’s totally fun (especially for a JavaScript guy like myself) and extremely powerful. I’ll post more later, but I just wanted to point to a quick little web-app scaffolding I threw together to help get to know the Node.js environment. I called it scaffnode, it’s 3 little Node.js + ExpressJS + mustache (‘stache‘) (+ Socket.io if you want) setups. I’ll be adding MongoDB for sure – I’ve been playing with it too (and it’s so good too) but haven’t put my code anywhere yet.


 

More JavaScript Wonders

Another couple JavaScript oddities I’ve run into recently.
The first one is to do with function expressions vs. function blocks.

//A function in a block
var aNumber = getNumber(); //Returns 42 as you might expect
function getNumber() { return 42; }

Now a slight variation of the same script:

var aNumber = getNumber(); //Error: getNumber is undefined
var getNumber = function() { return 42; }

Why?! It’s easy: function expressions are evaluated at runtime. Function ‘blocks’ are parsed at runtime. Neat little gotcha right?

The next one was brought to my attention from one of my co-workers who was refreshing his JavaScript knowledge:

var aNumber = 42;
var aString = "42";

var result = aString + aNumber; // result is now "4242" - String is automatically concatenated
var result = aString - aNumber; // result is now 0 - String is automatically parseInt() and evaluated

This is just JavaScript being clever – it knows you might want to join two strings, but no such ‘logical’ operation exists if you’re using a minus sign. A very interesting different result based on a mere plus or minus symbol. Always use parseInt and mind your NaNers. ;)