programming Technology

Long Live the Desktop

No doubt about it, hardware is getting plain ridiculous in terms of throughput. Gone are the days of old where 64K RAM was *plenty*. That said, we still have this unyielding and biased fascination with RAM and processor speed when it comes to comparing computing devices on the market. Truth is, computing has changed sufficiently for us to largely ignore those specs and look elsewhere for performance gains, namely the hard drive.

“Hahaha”, I hear some tech enthusiasts saying. How does a hard drive speed up your computing? A bigger or even faster hard drive won’t make any difference to the speed of your processing: your processor does that, right? And the ability for you to multitask and have lots of applications open at once is directly dependent on how much RAM you have, right? Right? Computing 101. Well, no.

A regular hard drive can only spin so fast, at about 7200rpm. On a laptop, usually 5400rpm. In days of olde (when everybody learnt all there was to know about computers) the biggest bottlenecks were in fact processors and memory and out of memory errors were common place. To get past that, operating systems started using a technique called swopping which persisted some memory contents to the hard drive to make place for more memory. That way, every time you tabbed between applications, if the working memory for that application wasn’t immediately available, it would “restore” the working memory from the hard drive and swop out what was currently in memory. And by doing so, RAM now became a more pressing requirement. The more RAM you had, the less you had to regularly swop out.

But when you did need to swop out, you’d need more space on your hard drive to persist the swop because there was, simply put, more RAM needed to persist. Of course, the speed at which your device could handle that (directly related to the frequency of your personal requirements) also impacted on perceived performance. For most the time, adding more RAM and a better processor did increase performance. To a point. Memory speed and processor speeds are getting so fast now that in most devices, the RAM and processor are now waiting for the hard drive to spin fast enough and catch up with writing and reading from disk.

You want to give your computer real performance? Get an SSD. 3 years ago, I got an SSD for my MBP (Core 2 processor with 4GB RAM). At the time, it was on the edge of requiring an upgrade to a Core-i processor but the cost of getting a faster processor hardly justified the little-to-no benefit gains. I would still be stuck with 5400rpm of spinning hard drive. Not to mention that laptops are limited by design in their speed because they are less efficient at cooling themselves down, no matter what you have inside. Down the line, I’m still running that same SSD and my MBP still outperforms its more recent versions.

As a software developer though, working off a laptop has limitations, especially when you start running multiple virtual machines, each with their own development environments. Sure, you get the benefit of being able to work from anywhere but that’s very different to being hugely productive and efficient while you are actually coding.

Waiting 40 minutes for a build? Long enough to walk away but what if unexpected stops while you’re away. You could get on with something else, but then risk the interruption of a context switch. What about the performance of the machine while the build is taking place (and yes, automated builds and having a dedicated machine are all good- this is not that kind of situation).

Waiting 40 seconds for an environment to load before debugging? Enough time to almost forget what you’re doing. Code and test for 2 minutes and then make another change which triggers another reload. Wait another 40 seconds watching progress spinners. Add up the number of 40 second waits during the course of one day and you get a free lunch.

Now what if that same build went from 40 minutes to 8 minutes? And what if that massive productivity increase came at a ZERO cost to perceived performance working on other applications during the build?

Enter an All-In-One, aka the AIO, Core i5-4570 2.9GHz with 16GB RAM. On it’s own, a pretty decent spec but dished out with SSDs (yes, plural, something you can’t do with a laptop) and you have, quite simply, a beast of a workhorse. One SSD to keep up with the RAM and processor and service the primary operating system and another SSD to run VMs off. And the sweet part, it costs the same as a laptop but very clearly at N-times more horsepower, where N is a real integer > 5.

The cost difference between the SSD and traditional 7200rpm HDD has paid for itself inside month in billable hours alone not spent waiting. And that’s without factoring in productivity gains and general mood enhancement by being able to spend more time actually coding and not waiting for anything- ever.

I don’t wait for a system to boot up. I don’t wait for an IDE to load. I don’t wait for a compile. I don’t wait for a VM to get up and running. I don’t wait for a system to shutdown. I just simply don’t wait anymore. The only time I stop while coding now is when I stop to think and plan. I am back in control of all the subtle interrupts and can direct my attention more intentionally. Liberating.

Some say the desktop is dead- I disagree. Not for the kind of software development I do. Yes, I once tried to run everything off an iPad and Cloud and what a mistake learning experience that was. And I really don’t like desktops but the AIO is compelling. And it comes with a capacitive multi-touch screen so testing apps with gestures is dead easy. The laptop is still useful for some things, I guess, but less and less so.

The desktop computer is dead. Long live the desktop computer.

programming Technology

Building Kentico CMS for Azure

When you’re putting a Kentico CMS site together, and you’re deploying to Azure, the one thing that doesn’t work too well is the emulator. It works, it’s just really intensive and slow-going. Especially if you want to run through small features or logic and need to do relatively frequent (and normal) build updates.

Enter build configurations and preprocessors. Under the hood, a KCMS web app for Azure is not that much different to a regular web application, with the exception of the AzureInit class. For local testing and running my app as a regular web application, I simply created a new build configuration (copied from the default ‘Debug’) calling it ‘Local’. In the other configurations, I added an extra pre-processor definition “FOR_AZURE” and then in the AzureInit class (in the web app project), I added:

public void ApplicationStartInit()
AzureHelper.OnGetApplicationSettings += AzureHelper_GetApplicationSettings;

That way, when I’m building for local testing, I skip all the Azure goodness, and then if I need to package and deploy, let the project settings take over. Sure, there some specific things that you won’t be able to work through- but you can still get a near-perfect resemblance on a straightforward deploy.

Business programming Technology

Opensource is not Free

Opensource, love it or hate it, has a definite place in our software ecosystem. I use opensource all the time, and i put a lot of projects up on opensource too. I don’t have any issue with it at all, on the contrary, opensource, by-and-large, has helped shape me as a developer. So, for the record, i love opensource. But then there’s also free software…

Free software is software you can download and use, for free, to do *something*. There is a lot of it. In fact, there is so much free software, some folk don’t even like paying a single penny for *any* software. I’m not going to touch on piracy- that’s a completely different issue. Chances are, if you look hard enough, you’ll more than likely find a free piece of software out there to do whatever you need to do. Even if you end up using two or three different free software apps to accomplish one task…

Now the proliferation of free and opensource has had an interesting side-effect. I hear a lot of “wtf?!” in response to actually paying for software. For example, I mention a licence fee of USD$300 to do a relatively complex task and I often hear: “why pay $300 when you can download and use some opensource component to do the same thing?” Or even better: “but you’re a developer, can’t you just build the same thing for me?”


The same thing.

It’s never the same thing. And often, to build the “same thing” would probably cost 3 times as much, if not more. And it has nothign to do with how good or bad a developer I am. Sure, I could use an opensource component. But I still need to vet the code, integrate the libraries, write a test suite for it (if there’s nothing attached) and make sure it does everything and that the “same thing” is exactly what is needed.

Sometimes that works. Sometimes that doesn’t. You can spend hours working with a “free” or “opensource” project only to discover some weird edge case that you need to cover or you end up trying to extend it (or trim it down) and find out the architecture is a real mess. Either way, your free component is now costing you, and more, putting __your__ product at risk.

On the contrary, a paid-for product has (usually) been built, tested in a standard QA environment, released with support options and comes with a warranty of sorts. I say usually because, as in life, you get software lemons too. But mostly, there is a system of connected people behind a paid-for product. An opensource project on the other hand, is (again) usually a smaller team more focused on *other things* (or next delivery milestone) that they don’t, can’t, won’t fix *your* problems with the codebase -for free-.

Again, there are always exceptions.

Bottom line, there’s a real business, with real people who need real money, behind the product. And yes, there are some opensource projects that are also a business- those actually fall more into a product offering than “free as in free beer” code.

Free beer code works when your dev team integrating it groks the codebase. It’s no different than having a regular team member contribution. Everyone needs to know what that code is doing: they can read it, can debug it, can modify it. If your team can’t (for whatever reason) then leave that code alone, or be happy to run the risk of bleeding later, which is usually when you really don’t want to.

And don’t be so scrooge about paying for software. Often, the licences are well-priced because the spend has already been done- and the model is in place to make a business of selling. Again, due diligence is required, as you would any other purchase. But you cannot run on the default strategy that opensource = free = cheaper.

Life perspective Technology

Twitter Money

Stumbled upon a funny chirp the other day; equating twitter fame with monopoly money. Chuckle. It’s true. Obviously, some would disagree quite strongly with that sentiment- probably the same ones with a lot of hotels on Eloff Street?

Anyhow, shortly after that, Pussy Riot made headlines. Erm, ok. I ignored that (who on earth are Pussy Riot anyway?) till I read about the Kremlin’s interpretation of “free-speech” and their utter disregard for the entire Twitter-protest. I mean, even celebrities were tweeting! Shucks. Pussy Riot was trending.. somewhere. People were getting upset. And tweeting! Surely that would have made Putin think twice?

Apparently not.

Then I came to a frightening conclusion after a little extrapolation of online cultural behaviour: we’re going to tweet our demise and be left with a world burning behind us while we wonder #wtf?

Egypt worked because people actually *did* something and used a medium to communicate and co-ordinate their actions. It doesn’t mean Facebook and Twitter became all powerful and capable of toppling governments. If you believe that, you’re probably sitting on a stack of Get-Out-Of-Jail-Free cards and smuggly smiling to yourself.

No, Twitter is not powerful. Nor is Facebook or any other social medium. Fact is, you can organise a coup d’etat without any online social platform. Shock. Even more startling: you actually have to get off the network for a bit and *do* something in the real world to affect real change.

It’s much the same as a $1 re-tweet to help save children dying of hunger in Eritrea. How do you even know that’s *really* working? Or are you happy to just RT and put your conscience to sleep? What about closer to home: the homeless freezing their tails off but at least you look good by sparing them a thought online. As someone in my TL suggested: spare a blanket, not a thought! That would mean actually getting outside and doing something about it though…

Ok, enough of the holier-than-thouness. We’re all guilty of sitting cosy and looking good- trying to capitalize on events and circumstances and adding our thoughts. We’re good at being human. And as you will notice, most of the thoughts outlined here have purposely been chosen from those very same platforms- to illustrate a point. Conversations are great, but without action…

So going back to our little demise… Edmund Burke is quoted as saying: “The only thing necessary for the triumph of evil is for good men to do nothing”. I say: “The only thing necessary for the triumph of evil is for good men to keep busy tweeting about it”. Oh, and I would include women there as well as men.

Less virtual. More real.

Business perspective Technology

Brand Invasion

Online social spaces are a quagmire. While they were primarily created for people to engage and share ideas, the prevailing subtext is less noble. You can start a revolution, join a collaboration or just be human inside that virtual world- with real-world effects, or you can spend waste hours watching fake videos.

Hello, brand invasion. Like the Portugese traders of yesteryear, the brands arrived bearing trinkets we couldn’t refuse. A pair of sunglasses for a “like”. A T-Shirt for a “follow”. Some even trade comments, page visits, emails, photos or simply a click-through. And so we trade happily and frivolously, indulging the offerings and running back to the village boasting our “gains”. It’s playful. What we never counted on was the brands taking it too seriously.

Facebook today is a mess as a result (and trying to recover). Twitter is fast going the same route- with the brakes on. People like, follow, talk, share and get entertained by brands- not so much by people anymore. But in the real world, we don’t talk about brands really- unless there’s a strong emotional event attached to the brand. And the brands with their agencies love it. They see the effect and keep pumping the same strategy because, well, it’s working. Can you say viral? That’s codeword for success. But I think they’re confusing correlation and causation…

In the real world, people engage with people. When last did you go down to your favourite brand’s spot and just enjoy the company of their people- not their product? Hang out with the VP, shoot the breeze with the software guy, have coffee with the secretary….? You see, it’s not really a meaningful relationship. I mean, you don’t invite BrandX to dinner ever, do you (as a consumer)? And if you did, who/what would you invite anyway?

I can understand the economic models around social media; online presence and returns (and dangers). What you do with money makes the world go twirly-wirly and we all benefit in the long term (or supposed to at any rate). In much the same way the Portugese traders arriving could be argued as a good thing (well, at least it wasn’t on the same scale as the Spanish strategy of “submit or die”), the brand-invading-social event can be a good thing. We do need to remind ourselves though: who ended up ruling the land?

I used to see ordinary people having meaningful conversations about love, life, the universe- academic revolutions, religious and philosophical debates- the “essentials” of living- on social spaces. Now we share a TED video for that. Like it. Follow someone. (I still see those conversations, but not in the spaces where you’d think they’d be)

People are having conversations about how a brand’s t-shirt changed their lives- competing to win a freebie; vying for position of “influencer”- for more freebies. Their motives are ulterior, emotions cliched, strategies shallow. The brand invasion changed the way people engage and altered the energy distribution: they changed the game. Even the big issues; a war in Somalia? Don’t worry, retweet this and BrandX will donate $1 to aid…

In the social spaces, the revolutions were organised by people. The masses were mobilised by people. Action was effected by people. The real conversations took place between people. Brands can’t do that. They risk segmenting their market and losing revenue if their position is too strong on one side (and the market is 50/50): the quintessential diplomat.

And yes, this is a general discussion. And yes again, there is an example out there which can be used as an argument to counter any one of the points above. It’s easy to pick out one example because it stands out as one example against the norm. And that’s the point really- it’s an outlier. Cult-brands aside…

Ultimately, there is a space and a place for brands online- even on Facebook. Some will invade the popular mediums and behave like a weed, others will grow in harmony. Some will appeal to the base and primitive needs of online-man and continue to trade likes for product. Economically, there is only so much you can give away before you realise you have a fanbase of 100000 followers who only want a freebie- and are not interested in actually paying for your product. The Groupon effect. Others will make a real difference.

In the meantime, social spaces will struggle to be personal and meaningful. When they don’t succeed on the whole, the people will move into another space where they can touch base with the personal and meaningful; the stuff that makes them human. Maybe one day we’ll all be back chatting on ##family… or on BBM.

And that’s precisely why a relevant and meaningful social space can’t be invaded (in the offensive sense) by a brand. The energy inside a relevant space is dynamic, powerful, unpredictable. It demands a constant stream of energy. Brands need constraints, constructs, predictable returns and an efficient communication mechanism relative to their budgets. The inefficiency and chaos of a real conversation is what makes it beautiful and adds dimension, frustration, inspiration, colour and emotion.

perspective Technology

Mobile Zealots

What’s with the flame wars? As a human race we seem to be hard-wired into living in a state of binary. Good vs Evil. North vs South. Black vs White. iPhone vs BlackBerry. PHP vs ASP.NET. Java vs C++. Mac vs Windows. Israeli vs Palestinian. Russian vs American. East vs West. Ad tedium.

Bigger problem is it’s so easy to stir because the triggers and responses are so predictable. Which is why, I guess, it’s so tempting for anyone who’s bored and has the motivation to go “watch-what-happens-when-i-do-this”. Sometimes you don’t need an intentional agent though; things just happen by chance. When things do, the stuff that crawls out the woodwork never ceases to astound me…

Today was definitely a BlackBerry vs iPhone day. The BB service was out and just like that, all the “jokes” come tweeting out. Some even tried roping in the recently deceased to flesh out their attempts at humour like an amateur stand-up comedian high on bad drugs. Ugly.

Different technology, different software, different hardware- in fact different anything- exists for a reason. It’s just different. It does stuff differently. Not better, or worse necessarily (economics *should* weed out the bad over time). Just different. Some folk like iPhone, others Android. Others BlackBerry. Some don’t like any of the above. It doesn’t really matter. Each have their own purpose and fit their own- it’s why they all have *a* market share. Who really cares whose is bigger? It seems the classical jock envy pervades all facets of life and is gender-immune.

But if getting into a flame war, trolling or just stirring the pot is your thing, then so be it. I do think though, if we had to harness the collective creative energies of our generation (less the amateur stand-up comic wannabe’s maybe?) and directed it towards solving problems, rather than trying to trump each other on points, we would more than likely be half way to a half decent sustainable world.

But then again, going by what Batman said: “we’re defined by our actions”; I’m not sure it’s what we really want. Maybe being “in” with the #1 technology is more important…?

programming Technology

Upgrading Playbook Beta

If you’re keeping up with the Playbook SDK Betas, you will no doubt have gone through the cycle of getting your signing keys and installing them. Thing is, when you update your SDK version, you don’t want to lose those artifacts. Else, you’ll have to request new keys. So before you update, let me tell what to expect…

You will have -a- version of the SDK setup nicely. You will also have your signing keys installed with the .p12 file artifacts along with some barsigner.csk and barsigner.db files. You will also have updated your file. Now, when you install the new SDK, it will display a prompt along the lines of: “Detected previous version. Uninstall old version first. Cancel, Ignore, Retry”. Wait.

If you uninstall your old version, you’re going to lose all those artifacts. You WILL need to request new keys and install them all over again. Mission, but not impossible 🙂

You might want to cancel and think it over. I chose “Ignore”.

I ignored the warning and went on with (Plan A) installing the newer SDK alongside the older one. This kinda worked well, but there were some issues with the paths and picking up the correct one (a non-signing SDK alongside the first version of a signing SDK). It got messy. It turned out easier (at this stage) to just uninstall everything, request new keys and start again.

With the next upgrade, I chose “Ignore” again. But this time, I just installed it right over my old installation folder. I got prompted during the install to “Overwrite existing file? Yes/No/Yes To All”.

“Yes to All”, please.

Didn’t need to request new keys or configure any additional paths- it just worked. Re-compiling against 0.9.4 and signing went off without a hitch.

So, based on my experiences, I would say, once you have a 0.9.n version of the SDK setup with signing keys and it’s all good, the next upgrade experience should be relatively safe if you just ignore the previous version warning and install right over the old SDK 🙂

Of course, if it didn’t (or doesn’t) work for you, you probably didn’t (or won’t) do something that I wouldn’t not have not recommended or didn’t suggest you shouldn’t have tried or didn’t do something that wasn’t not unlike the process that I haven’t described in this or any other post that I may not have written (sic) :p

Business Technology

Managing A Systems Upgrade

Over the years in which I’ve been involved with IT as a software developer, I’ve been on all sides of a major systems upgrade. As developer, I’ve written systems that were the upgrade for a system being phased out; had to support plug-ins that integrate with the newly upgraded systems; assisted in rolling out upgrades.
As a consumer, I’ve been a customer of a corporate who’s upgraded their systems. As a spectator, I’ve seen companies execute upgrades and read the aftermath. One thing is common: upgrades are a headache. As a colleague and friend I’ve listened to peers regale their experiences with corporate upgrades and been the shoulder to cry on.

Sure, updating your WordPress installation is just a click these days- but this is just one piece of software yet a good analogy. It’s rarely the core system that gives you the hassles- it’s all the integration points. The plug-ins that were dependent on the core. Assumptions would have been made in those integrations that were beyond the documentation, the implementation or vision of the core platform. Or they within scope, but now have to change due to “architectural changes” (or any other all-encompassing label). Trust- it can get messy. If you’ve been there, you will know.

And in all that, nothing has impressed me more than the way CellC recently rolled out their billing systems upgrade. They tweeted, they facebooked they warned everyone. It was like their upgrade was a major party that you had been invited to share in and it was going to be awesome! They kept tweeting hour by hour updates as to progress and where the problems were. They released press statements highlighting their challenges and where they were getting unstuck. And when they solved those problems, they let us know. And when it was all done, they kept us in the loop with more updates.

Was I impacted by their upgrade? Yes. Did it affect me to the point where I couldn’t communicate and do business? Yes. Was it for very long? No. Was I satisfied with the progress and the way they handled it? Absolutely! Would I recommend CellC as a provider? Yes! Am I a fan? You bet. Am I amazed by their execution (knowing what I know an upgrade to be like?). Definitely. Geek respect. They did an awesome job.

perspective Technology

Phishing Is Fraud

Words are powerful, no argument there. Words shape what we see (not just what we look at) and words shape our understanding of the world around us. Some words have been beautifully chosen while others remain questionably in existence only to serve confusion and engender ambiguity. Once such example is the word “hacker”.

In days of old, ok, not that old, a hacker was someone who lived, eat and breathed binary. They were the geeks of the day and relished their 10000 hours on the computer with zeal. They were not necessarily deviant or trying to overthrow governments, banks or universities. They just (mostly) coded. And then somewhere between 1980 and 2000, the meaning of the word changed and now a hacker is largely understood to be a “bad” person. And I use the term “bad” loosely because one man’s terrorist is another man’s freedom fighter. Heck, these days, just participating in a DDoS (even unknowingly- ha!) can get you labelled a “hacker”. Oooo…

Phishing is another one. I have trouble with the word phishing. Just coming up with the term and calling ‘it’ by something else robs the essence of what ‘it’ is. Let’s face it, phishing is fraud- on so many levels.

If someone knocked on your door, dressed as a policeman, claiming to be a policeman, flashed a policeman badge and requested to enter your house on the premise of official police business (but he wasn’t a policeman)- he would be arrested, tried, found guilty and sent to jail for doing only that. He wouldn’t even need to enter your house to make new chums in the block. He just needs to pretend to be someone he’s not in order to gain something that’s not his. He’s a conman. A fraud. A liar. A cheat. A decepticon.

Do this online (or via text) and you’re only phishing. Happily, justice departments see through the thin veil that the word phishing tries to hide. They apply existing criminal codes which match the behaviour of the phishing agent(s) and go to trial based on that but we tend to be blasé about the word despite very real consequences. Only when there’s a consequence do we upgrade our language and start calling it for what it is: fraud.

Hopefully, with time, the word phishing will convey a stronger sense of immorality. That way, when we are confronted with phishing emails, sms, phone calls, we take them a little more seriously. Not just, “Oh. Spam. Delete”. If some “policeman” was walking around your neighbourhood knocking on everybody’s door, asking to come in, would you just: “Oh. Fake. Close door.” and carry on as you were? Or would you: “Uh-oh. Call the real cops. There’s a phony on the prowl”?

Continuing with cliche abuse, evil reigns when good men do nothing. With Data Protection Day coming up (28 January 2010), think for a moment about your contribution to the battle against fraud.


Repair Your Own BlackBerry

It seems to be a bit of a theme at the moment, and this one is hardware related.

The scrolly-wheely-thingy on my Curve 8900 was giving me hassles. Remember the days of the scrolly-wheell mouse? And how it all got tangled with grit and dust and hair… ew! Well, the same thing happens with the BlackBerry after miles of tracking that ball. So what’s a man to do when you can’t scroll down to read that email, tweet or web page? Why, take it apart and clean it, of course!

I double-checked for a step-by-step guide as to the disassembly of my phone here. Turns out, the instructions are very accurate 🙂

The result?

BlackBerry Curve 8900 Disassembled

If you going to do this yourself a couple tips:
* use the right tools (TX 6)
* everything you detach, put on sticky (or non-slip) surface
* keep all the tiny bits- they really are tiny
* try finish with no left-over bits
* try finish with no missing bits
* be patient

So if next you have a hardware issue with your phone, follow the tradition of fashion apparel and handymen around the world and Just Do It… yourself.

NOTE: you may void the warranty on your phone if you try this. Which is not such an issue unless you end up with an epic fail.