Macha
Android, the early days
So, for quite some time, I've been meaning to buy a smartphone to replace my current dumbphone and iPod Touch 2G combination. It had worked fairly well for most of the last few years, with a few exceptions, but I was getting tired of carrying around 2-3 devices with me (depending on if I needed a camera or not) and iOS 4 was very problematic. I was left to choose between a stable, responsive device (downgrading to 3.1.2) and one which could continue to install most apps from the App Store. My iPod Touch 2G was also looking like it would soon fall completely to the onslaught of planned obselence breathing down it's neck, as updates such as iOS 4.3 did not appear to support it, and many apps ran unacceptably slowly on it.
Initially I had hoped to buy a device in roughly the price range of a new iPod Touch, at around €300. This obviously ruled out the iPhone, but I reckoned that once I'd eliminated the Apple tax, I'd be able to get an acceptable smartphone for that price range.
As some of you already laughing at my naivety have guessed, I was wrong on that point. The sub-€300 price range was represented by a cheap Vodafone branded phone, the obsolete-at-birth Sony Ericsson X8, and the Samsung i5500 and HTC Wildfire, both of which had a screen resolution identical to my 3 year old €80 dumbphone, the Sony Ericsson k800i. Nice job guys. I know it's relatively the budget end but you're selling a smartphone that has fallen at the first hurdle to a 3 year old phone at 1/3 of the price.
So with the budget end ruled out, I waited a while until I had enough cash and decided to have a look at more expensive phones. The iPhone? €460 for the obselete 3GS, €600 for the iPhone 4. Pass. Around the €400 mark, I noticed the HTC Desire. It was certainly well reviewed and the 3.7" screen was roughly around the size I wanted. It did however look a little dated with the HTC Desire HD and HTC Desire Z having been released since.
None of the networks here sold the Desire Z, which limited my HTC choices to the HTC Desire or the Desire HD. There was also the Samsung i9000 hanging around that price point also, but the general consensus I got from people I knew was that HTC was the better of the two.
So, with the choices down to two, I agonised over the HTC Desire vs. the HTC Desire HD. While the HTC Desire HD was €50 dearer, that wasn't a major factor. Instead, I was worried that the 4.2" screen was too big for practicality.
However, that decision was made for me pretty quickly when HTC announced the Desire S, a definite replacement to the Desire. Not as you might think, to wait for the Desire S, as with the phone networks here there is no telling how long that would be, but for the Desire HD. So pretty quickly I went into the store to buy it. I know, I know. You bought it in store? What a caveman! However, the online discount of €30 was only slightly more than the €20 discount I got in store from switching from O2 to Vodafone, and I find it always helps to be able to shout at a specific store if things go wrong.
When I'd first bought my iPod Touch, one of my initial thoughts was how much better the screen looked than any other device I'd owned before. While people with Retina displays might scoff at the 800x480 screen on the Desire HD, that too managed to inspire the same reaction, being a huge improvement over my old iPod Touch's 320x480 screen.
Performance was a huge improvement too, although anything would have been as iOS 4 completely destroyed any semblance of responsiveness in my iPod Touch. However, it still seemed faster than my iPod had been under 3.1.2 and than my friend's 3GSes (none of them had an iPhone 4 for me to compare with).
It's more stable than iOS from what I've seen so far. Safari used to crash on a fairly regular basis, occasionally requiring the entire iPod to be rebooted. However, I'm not willing to make a final judgement on this until I've used the device a bit more, and twice I've hit the home button to be brought back to a Loading dialog for a minute instead of my home screen, as if the home screen app has been closed.
Compared to an unjailbroken iOS device, the vanilla Android experience is extremely well featured. Notifications are handled much better, though the pull down UI was a bit unusual. I like the idea of the letters typed appearing above the area occupied by my fingers, though on my first few uses as I got used to it from iOS, I had to shrug off the feeling that I was hitting the wrong button upon seeing this. One annoyance when typing that I still mess up is that the close keyboard button occupies the space taken by the button to bring up numbers and symbols on iOS devices. I've heard that this keyboard is HTC specific, but I haven't access to any other Android device to check at the moment.
Applications are pretty good too. My must have App Store apps on an iOS device are Twitter, Canabalt and Angry Birds. Far from a huge collection, obviously, as I got bored of most other apps and removed them eventually, and for some found they never worked that well anyway on my iPod (Call of Duty, Simcity, etc.). Angry Birds is on Android, free too, though the ads are somewhat annoying. If they offered a paid no-ads option I would probably buy it again. Canabalt is not, however my device has a flash player, so I can actually play it on Canabalt's website. I probably won't, because it's not the most practical, thought it was a funny discovery.
Twitter was already included on the device, and my first few comments were about how it was inferior to Twitter for iPhone, but acceptable. A quick search of Twitter clients (Twidroyd, HTC Peep) failed to show up anything better so I stuck with Twitter for Android. However, I soon discovered that preinstalled apps don't auto update, and manually installing it from the Market got me Twitter for Android 2. Which is pretty close to the iPhone app, missing only the My Tweets, Retweeted functionality. On the plus side, it has no dickbar.
Moving onto jailbreak applications, my must haves were sbsettings, MxTube, and.. and.. well that was about it really at the end. sbsettings I do miss, mainly for the brightness control, as auto brightness (on either device) never seems to set brightness to the minimum, which makes using the device when it's anyway dark rather painful. MxTube had tons of equivalents on the Android market, and the one I went for is TubeMate. It's a bit clunky, but it'll do.
I also found plenty of GBA emulators. While there was one on the iPhone, gPSPhone, which I used when it was free, I just kept the free version until I updated to iOS 4 which it no longer worked on. Since iOS 4 had performance problems, I never bothered with any emulators on it. There is also a PSX emulator, FPSe. It's very nice, and unlike on my iPod Touch 2G, it runs the games at an acceptable speed without ruining the sound. There is also psx4droid, which I tried, but putting a ROM on it took more than 15 minutes so I missed the refund window when I discovered it was too slow.
An interesting fact about these emulators is that they are on the Android Market, and worked without rooting, unlike the iOS ones which required Cydia and a jailbroken device. Likewise, other jailbreak features such as custom themes and a slide down app launcher (part of sbsettings) are inbuilt into the software. Anything that saves on potental warranty voiding is always good.
One of the nicest features of Android is how syncing works. Take files, drag and drop to device, either by plugging it into a computer or by using sftp over an app running on the device (I use SSHDroid but it was literally the first I found). No crapware programs, and none of the horribly painful bloat that is iTunes. On the negative side, this does make album art a bit more difficult to manage.
All in all, I'm fairly happy with my new phone, though there are still a few teething issues, such as the close keyboard button placement, and my tendency to not use the search key in a lot of cases where I should.
Welcome to argv
So, I've had my blog and my twitter account for a while, and sometimes the constraints imposed by both formats has led to thoughts that didn't really have a place. Too long for Twitter, not long enough for a full blog post.
To top that off, Twitter lost all my tweets from when I started using it to about a month ago, further making me want to bring my content under my own control. This also rules out using Tumblr for this blog.
Taking some inspiration from Zed Shaw and his many sites, I've set up a seperate blog for these shorter posts. I'm not going to take it to the extreme of one blog per topic, however.
Also, for some technical experimentation, this is powered by blogofile, a Python blogging program which takes posts in Markdown and renders it to a static site. This does mean that it won't have comments initially, but I have strong opinions on the need for comments, so I'm looking for how to deal with that. I don't particularly like Disqus (it's way too bloated), but I'll probably end up needing to use that.
A Self-Taught Programmer's Journey
I was helping someone who is just beginning to program over the past few weeks, and it led me to actually write a blog post I'd been saying I should write for a long time, about how I got where I am today as a programmer. This is mostly from memory, so some of the timing may be wrong.
My first experience with anything even close to programming was when I was around 12. I had gone through all my mum's ECDL stuff for MS Office years before, and there was one program in Office on my then computer that wasn't even mentioned - Frontpage. So I got bored one day, and decided to check what it was. I gathered quickly enough that is was for making websites, and I sort of got parts of it, but I had to get a book from the library to figure it out fully. Armed with this newfound knowledge, I managed to make a basic website, a horribly primary-coloured frame-filled website, but a website nonetheless.
Of course, my instinct was to show it to people, so I found out about Angelfire for hosting from an even older book, and uploaded it, then showed it to people online. Needless to say, people didn't like it very much. But a few people did give me some somewhat useful advice, to drop Frontpage. They mentioned something called Dreamweaver as being better, and also suggested learning HTML. Which I did, until eventually I was using Dreamweaver as a glorified text editor.
Meanwhile, looking for the next thing to do, I decided to learn actual programming, in the form of Java. In retrospect, not the best choice of language for starting out, but it was one of the few that my local library had books for. The other alternative if I was to stick to library books was Visual Basic 6.0, so it was definitely the better of the two options. I went through the whole book of Java All-In-One for dummies, went through it, did all the examples, got to the end, and wrote a little Java clock applet for my website. I was so happy with myself, that I decided to go even further, and my next plan of a project was to make a Simcity clone in Java. Unsurprisingly, that didn't work out too well, and the failure put 13 year old me off programming for a while.
By this stage, I had long cured any illusions of coding being anything like the MatrixThe next time I came into contact with programming was when I was running a forum with a few friends. It ran off phpBB, and when installing mods, I noticed that all I was doing was editing programming code, which was kind of familiar. I looked into it a bit more, found out about PHP, and then quickly learned that. It was significantly easier to learn, both because it was my second language to learn, and also because languages with weak dynamic types are easier to learn in my opinion.
Of course, the problem with learning PHP, especially if you use the phpBB 2 code base as your example is you pick up bad habits. Now there's nothing inherently wrong with the language nowadays, but this was the PHP 4 days, with it's half-assed attempts at OOP. On top of that, something that is still a problem today is the amount of bad material floating around. Now, this is a problem with any language, but given PHP's large userbase, and popularity with hobbyist coders, it's far more pronounced in PHP than others I have used. So code found on the internet is ripe with a lack of care towards seperating output and processing, full of SQL injection holes, and often even relying on register_globals. But this isn't anything new. But it does lead me to recommend to everyone trying to get a good book. I started with this one, and while it did help me learn PHP, it set me back a long distance in terms of proper coding practices. Eventually, I got this book to learn how to code properly in PHP.
Around that time I started reading programming blogs, and found out about source control, in the form of Subversion, a rather important topic that no programming book seems to mention. Seriously, apart from Code Complete, which mentions it in glancingly a few times, the only book on my shelf that explains source control at all is the Linux Bible, 2009 edition. And that's talking about CVS. Now for all Subversion's faults, any source control is better than no source control. Later I was introduced to git and DVCS in general by some friends, and it's now my preferred form of source control (git for all Linux projects, hg if I have to work with Windows users). It didn't exist at the time, but for anyone looking for a good DVCS tutorial now, I reccomend Joel Spolsky's hginit. Even if you plan on using git or another program afterwards, it's the best basic explanation of the concepts of DVCS I've seen.
This was the only book to mention version control.
Going back to my own journey, after that time in PHP, and several ill-fated projects, countless attempts at building a forum, a incomplete social network, and a completed, if basic, social network that I failed to get anyone to join, I moved on to Javascript. I spent ages messing about in that, making small scripts to move things around, before getting more ambitious. Yet again, I returned to the idea of a simcity clone. Given that this was before canvas became well supported or known about, the core of the program used a 200x200 table for the game's grid. It was every bit as slow as that sounds.
After a while of this, I returned to trying to make GUI desktop apps. I know, I know, many considering this a step backwards from web apps, but at the time, I couldn't think of many examples of web apps that had progressed of the "Oh, that's mildly interesting" stage. I had used Swing before, in my failed Simcity game, but wasn't particularly impressed by it. I gave SWT a go, before giving up again. I guess my problem with GUI apps resolves from my desire to control every last detail, compared to the designer-tool-centric design of most of the GUI toolkits. Somewhat bored with GUI apps again, but also bored of the general dislike of my main language, PHP, I went on a quick tour of several languages, including C#, C++, Ruby, Python, Ruby again, before finally deciding on Python as my new favourite.
Around this time, I switched to Linux as my primary OS. I'd tinkered with Linux for a while before this, but had always been too used to Windows to actually make the switch until then. Since then, Windows has been mostly relegated to use for gaming and iTunes.
I spent a while coding in Python, before going on a short hiatus from programming for a while, being somewhat bored as all the languages I learned being roughly the same at this stage, and no new ideas for a project to keep me interested. Projects are another thing I recommend to anyone starting to teach yourself programming, as even the failed ones or ones you get bored of are a good learning experience, especially if you have others looking over the code.
After a while, I decided to learn a less mainstream programming language, and after a quick straw poll on Twitter, Haskell emerged the winner. Luckily for me, Haskell has a good beginner's tutorial, Learn You a Haskell. I've heard it described as like Why's Poignant Guide, but it's not really. It's much more to the point which works for me (I'm sorry to say I found Why's Guide a rather boring read, having too much unneeded meandering with stories. But I accept it's good for others). It is a rather basic tutorial, but there is also Real World Haskell for when you need to go further, even if it isn't as well done.
And now, my current project is to write an IRC bot in Haskell to learn Haskell better. I'm still learning and improving, and it's going to be a handy headstart for college that I have all this done already, so the story goes on.
Customer Service
Recently, Linode upped the RAM on all their packages by an average of 42%. My own VPS went from 360mb to 512mb. And yet, the first I heard about it was a RT on Twitter. Considering it's quite a considerable upgrade, almost doubling the RAM, you'd expect them to be shouting it from the rooftops. Most other hosts I have had before this sure would have. Yet I didn't even get emailed about it, so finding out was a pleasant surprise.
This reminds me of a contrasting experience I had on a budget shared host. They were using Apache 1.3.37 and PHP 4.4.7. In early 2010. This host was on a website belonging to a client, and it predated me, so moving them to a new host wasn't an option. "If it ain't broke, don't fix it", was their reasoning. And obviously non-technical people don't quite see the problems with having outdated software.
Looking through the knowledge base for the host, as they made it really hard to talk to a real person, found that there was a process to get PHP5. So I emailed tech support. They said that it may take some time as the client was on a "Legacy Web Hosting" package. They also strongly hinted that new customers get Apache 2 and PHP5. But old customers? They already have those, so why would they upgrade them? The total opposite to Linode's attitude of "Oh, hello, we've just upgraded your RAM for free."
To add insult to injury, that upgrade to PHP5 on the old host took over a month, in which time the ticket was closed incorrectly twice and it was twice hinted that new customers get PHP 5 as standard. Finally, the version of PHP 5 I finally got? 5.1.2. Weren't we all supposed to be using PHP 5.2+ since 2008 anyway?
I guess the old saying of "You get what you pay for" is alive and well and definitely applies here.
On Twitter
Twitter is, depending on who you ask, the greatest invention, or the greatest timewaster of recent times. I certainly use it a lot, and it provides around 40% of the traffic to my blog, so evidently others do too. But, whenever I use it, I have a tendency to wonder: is this really a valuable use of time? Most of the time I use it, I am just timewasting. I might be putting off tidying stuff, study, or even activities I enjoy such as coding or blogging while on Twitter.
Of course, pre-Twitter the other two big timewasters were email and IM. I've never been a big user of email, and IM requires the other person to be on at the same time as you. In comparison, some of the people I follow on Twitter have a 12 hour time difference, meaning I'm never on at the same time as them. As well as that, because following people on Twitter isn't two ways, I can follow the famous people like @stephenfry, or even just relatively well known programmers like @codinghorror (Jeff Atwood) or @shanselman (Scott Hanselman).
But... 90% of famous people I follow on Twitter end up getting unfollowed within the next 2 weeks. Why? Because they tend to either end up doing one of the following.
- They constantly promote whatever they are working on, to the point the tweets are little more than ads.
- They completely ignore why they are famous and tweet about their cats or other boring subjects.
- They try to keep up their reputation to the point where there tweets are little more than 140 character fortune cookie style tweets, with either absolutely no substance, or tweets that make you go: "Well, Duh..."
Another problem with Twitter is that there are loads of automated bots on it. Some range from the mildly irritating, quickly blocked, porn spambots that follow 1500 people in the hope someone will notice them, to those that retweet every tweet containing certain words. And of course, they manually retweet, show it shows up with the rest of your @replies. And the marketers, the annoying marketers.
Yes, I'm sure that they really are interested in what I'm going to say, and the fact that all they have is ads for their products and 10k people they follow won't affect that. Really.
Another problem with Twitter is part of it's core functionality. Every tweet is limited to 140 characters. While it's partially one of twitter's strengths, it can cause significant problems. Some things just don't fit in 140 characters, as evidenced by the existence of sites such as Twitlonger. Others can be reduced to 140 characters, but end up losing all meaning, To quote one of my own tweets:
How many great possible blog posts, go out in a blaze of 140 chars, I wonder?One of my biggest problems with this blog is thinking of things to write about. And lately, looking through some of my tweets, I wonder how many of them would have been better used by expanding them to a blog post, rather than reducing them to 140 characters. Others have evidently came to the same conclusion before I did, as you can see by the amount of tweets that are just links to blog posts, but then this has the flip side of reducing some Twitter accounts to being inferior RSS feeds (worse because decent RSS feeds include the content as well).
One of the big features of twitter is it's API, which is easily the best one out there. Before OAuth it took all of 5 minutes to code your own twitter client, using nothing more than the standard libraries included with your programming language. And it's led to many great clients like Twitteriffic on the iPhone/iPod Touch and TweetDeck on PC, both of which I use a lot. The problem with these is it makes it even easier to waste time on Twitter.
And, I do waste a lot of time on Twitter. When my timeline froze the other day, rendering Twitter unusable for me, I got nearly twice as much work done.
The final problem with Twitter is who to follow. This used to be much easier, as you could see @replies by people you follow to people you didn't. If people you follow tend to tweet at one person a lot, maybe they had similar interests. So you followed them. Now the closest we get is Retweets. Unless you want to manually look through all the following lists of the people you are following of course.
Now of course, it's not all bad, and if it was I'd have deleted my Twitter account already, but in the future, I will definitely be spending less time on Twitter, but if you'll excuse me, I'm off to tweet about this blog post.