Living With Ubuntu

I’ve never been a fan of windows. Switching to a mac was definitely one of the best things that I’ve ever done in my life. It opened my life to a world of stress free computing, until Leopard. I still like the mac and I think the fonts and visuals are nice but I’ve also noticed some prominent people like Mike Pilgrim and Cory Doctorow moving off of macs and using Linux distributions like Ubuntu.


Work as a programmer requires a lot of server-side stuff and most of this is exclusively unix/linux especially if you are using open source frameworks. My curiosity was probably piqued when I was forced to go back to Windows XP for my previous job. In order to stay away from windows I did most of my development on a test server and eventually started using CoLinux within my Windows machine. One thing I learned is that you really don’t want to become reliant on any single platform or operating system. It pays to be versatile. I’m confident that I can work on any platform, as long as I can develop using Vim. Plus, I was getting spoiled by the command “apt-get install” for a variety of development tools and programs whenever setting up servers as opposed to the “configure and compile” hell on macs (I’d rather not use fink or mac ports, and these don’t even compare to the ease of use that linux package managers have achieved).


I’ve been slowly getting more and more curious about Ubuntu. Can I get used to it? Does it really work as an everyday operating system? Does it look good? Yeah, macs do that to you.


One of the main reasons was that I ended up ordering a netbook, Dell Mini 9 Inspiron to be exact. It has some wonderful specs 64GB SSD hard drive, 2GB RAM and a decent processor. I had two options for an operating system, Windows XP or Ubuntu. Windows is not a choice to me and it would also require lower machine specs (due to their backwards vendor agreements). I wanted something I could carry around with me and do some hacking on the train since I spend so much time on the commute and even more time tied to my desk at the office. Although, I know that I could hack the Dell to run OS X, I wasn’t convinced that it would be a good choice. Plus, I wanted to save using up the limited hard drive, which I know will be more than enough for lighter operating system.


In preparation for my netbook I decided to re-appropriate a computer that was sitting unused for my Ubuntu adventures. Set up was straight forward. I just kept looking stuff up and running “apt-get install” as needed. There were some tricky things and I ended up wiping my hard drive and redoing the install after screwing up the graphics but even then the learning curve was relatively mild.


General Impressions


I love it. The visuals aren’t bad at all, even though it requires a lot of tweaks here and there. One of the things about Ubuntu is that it’s infinitely customizable from the source down. The desktop feels like a cross between Windows and OS X. I’m sure they get a lot of their ideas from both sides. I got everything I wanted from my Ubuntu install from transparent terminals (for vim), smoothed fonts, and all the software I need (basically FireFox for browsing and all the development tools that are way too easy to install). Since I’ve been using the mac for a while, I have my vim setup in a code repository along with a bunch of other dot files needed to customize my shell environment.


Productivity


This operating system is really built for productivity. First of all, there aren’t games (not a gamer but still) and no iTunes. The operating system is lightweight and there are a lot less distractions. Since I’ll be keeping my mac around for some time, I can safely keep all my media and other distractions away from me. Switching operating systems is the ultimate contextual switch so I’d like to keep it this way for as long as possible.


Also, Ubuntu has a variety of productivity tools that are even better than anything I’ve used on OS X or Windows. For example, the todo list/task manager Tasque comes with Remember the Milk integration built in! I’ve been longing for something like this on the mac for ages. It could use some work with syncing but I’m more than happy. Evolution is a great email/calendar client that tightly integrates with Google Calendar and other services. Keeping your system current is really simple and you can do it with a single command from the terminal or use the supplied GUI. If you think the Windows release cycle of 7+ years is ridiculous and Apple’s somewhere around 1.5 years is awesome, you’ll love Ubuntu’s 6 month cycle. Not to mention package updates are frequent so staying current is really simple (and involves a lot less headaches in terms of regressions etc.).


Light


Although the operating system is your typical heavy duty unix system with a great desktop, the system requirements are ridiculously low and it consumes less resources like your hard drive. In fact, I use an 80GB hard drive of which 12GB is a partition holding a botched install but I still have plenty of room and will continue to. All the packages I’ll ever need for development and otherwise are a simple “apt-get install away”. In the rare cases I need to compile, it’s a smooth ride as well. The stability of the system is exactly what you’d expect (although the distribution upgrade can be trouble for some).


All Open


I love that everything tied to this project with the exception of certain drivers and other commercial packages are open source. All the crucial components are developed by a community of people who care. You can be assured that desktop linux will keep getting better for everyone for decades to come since people will be standing on the shoulder of giants. If Ubuntu starts taking wrong turns, a group of talented people will start offering a better alternative. In fact, there are already too many alternatives to name and any of those could possibly be my next distribution of choice. It gives you power over what you use and opportunities for lots of education and discovery.


All in all I can’t wait to get my hands on a personal machine I can carry around with me and get even more acquainted with Linux! Unfortunately, the Dell Mini Inspiron I ordered on March 31 is yet to arrive and will likely be in my hands sometime at the beginning of June. However, Dell has pushed back my order no less that 3 times so I frankly don’t trust them. The only thing I know is that there is some kind of a global 64GB SSD hard drive shortage, at least with their supplier. I guess I’ll just get my fix at work and read a little more on the commute.

Enter the Googleplex

Google is probably one of the most treasured work places a programmer can go to right now.  They have a non-traditional interview process that’s gotten to the point where interview stories have their own lore.  On the surface, these people are Google rejects but in actuality they are close runner ups with distinguished credentials that would get them hired in a heart beat any where else.

It is hard to get in a good organization and just as hard to warrant getting booted out once in.  Once in, you more or less control the destiny (albeit collectively) of others seeking a way in.  I sometimes wonder how effective this process is.  I guess it depends on the organization and people but you really can’t guarantee that people will try to select people who have a chance of outshining the interviewers unless the interviewers will directly benefit (as say managers or owners, in which likelihood they don’t have the technical foundation or are currently out of touch with technology to sufficiently assess candidates) or the engineers in place might not be brilliant enough to fully appreciate a chance encounter with really good talent.

Sucks to work for the man either way.

How I Blew My Google Interview – Silicon Alley Insider

Tales from the Google interview room | The Register

More on Google interview | Philosophical Geek

My Interview With Google

Google interview

Birds, Speech, or Beer: The Dilemma of Free Software

Should software be free as in birds? free as in beer? or free as in speech?  I don’t think anyone has the right answer aside from secretly straddling the gray zone between, "piracy is illegal" and "it should all be free".

Daniel Jalkut had an interesting post on the topic of free software.  It’s a major dilemma for independent software developers who solely depend on software sales for their income.  The mac community is famous for its support of third-party/indie developers.

It sucks to try eking out a living in this day and age of rampant piracy of music and videos.  I think there is a great psychological divide between paying for intangibles such as software.  When you think about it, it’s a bit absurd how people will jump through fire hoops just to skimp on a $5 piece of shareware while thinking nothing of spending $5 or so on a Big Mac with a side order of fries and a coke but would rather use a far inferior free version of software that they use everyday.

Desktop applications have it tough.  People with the best chances of succeeding are those that build excellent products, first to market (or dominant share), good customer service and offer something unique.  That’s no different from any other business but third-party developers have to compete with open source projects and more importantly with large enterprises starting with the manufacturer of the operating system (and you know they always throw in a cartload of free apps as part of the system).

At the same time, little purchases of $15 – $40 apps eventually add up to quite a sum so the reluctance to pay is understandable.  The problem with perceived expensiveness of such shareware to me comes from the fact that there’s little to distinguish them from web apps, open source apps, or utilities bundled with the computer since we’re essentially looking at the same thing.  I think our brains are designed to mainly attach a sense of possession to physical objects or intellectual property of our own creation, rather than something like software.  The competition from web apps is also tricky because desktop apps don’t have the same advertising monetization options as web apps. 

As a Pukka owner I can see why Leo would want Pukka to be free.  It’s a small app, it uses a freely available web api to a very free site, many free alternatives (such as the Firefox extension I use away from macs) and is rarely the main focus of your daily activity (unless you’re a really hardcore del.icio.us user).  However, that doesn’t do justice to the effort put in by the developer in creating the app, support (he really does a great job answering customers), not to mention how much time you’ll save using it or adding value to del.icio.us itself.  I wouldn’t go anywhere near del.icio.us on the mac if it wasn’t for pukka.

At the end of the day, you need to ask yourself long and hard why you wouldn’t hesitate to drop $10 on a piece of software while you could easily spend that much on a daily basis for food and other stuff (including a lot of junk you don’t need).

Red Sweater Blog – It Should Be Free

Developing Web Apps on Windows

I finally got my windows environment up to par though I still have some ways to go. In a sense I’m not really developing on windows since I log in to a regular UNIX server where I check out code and run vim remotely to write the web app. As long as I’m using putty, GNU screen and the Osaka font (which is a nice clone of mac’s Monaco font for the windows platform) it’s really hard to even think I’m even on windows. I guess in a sense a blessing that I don’t have any of my shiny mac apps since it would cut into productivity.


Right now I’m basically writing code on the server via GNU screen (so I can resume coding when I cut my internet connection) and running a test server that connects with the windows Apache to test code. Of course, I could be doing a lot of this out of the box with the mac but once you get a development environment going none of it really matters. I’m just happy that it wasn’t as much of a royal pain as I initially thought.

Your Code is Your Resume, the Platform Should be Your Slave

I haven’t been posting lately since: a) I’m lazy and b) I’m about to switch jobs. Yeah, it didn’t last long. The good news is that I didn’t get fired and the next job will be challenging to say the least. The bad news is that I just might get fired if my code isn’t up to snuff. I’m pretty sure my code quality meets the low bar standard because I gave them the source to one of the applications I wrote. In fact, I did the same for my current job. As a matter of fact, the code hasn’t changed much since then since I’ve been busy on this job. So basically, one body of code, two jobs. Not bad considering that my lack of experience is a big negative.


If you’re aspiring to get a programming job (so help you God), having a body of work is important. The standard advice of contributing to open source projects certainly holds true. However, none of my stuff is open source. I OPENED the source for a limited few. Of course, there was nothing all that original to my code either. The only unknown left was really productivity (“Uhm yeah, we didn’t realize it took you 5 years to write that….). So it is also important to have a body of work that is unequivocally yours.


The bad news that ended up being good news is that I have to give up using a mac during working hours. As much as you my reader discount me as a mac fan boy, I was also a Windows user for close to a decade (Otherwise I wouldn’t be a mac fan boy). I’ve been clubbed in the head enough to know my way around Windows. Switching platforms wouldn’t be so bad if Microsoft Word and some email client was the tool of my trade. Unfortunately, I drank the kool-aid and was tied to a certain Cocoa-based editor.


The choice basically came down to: do you want to switch jobs AND platforms? I had to think long and hard on that one. I only chose to switch to Windows on the job because it came with the option of pretending to be on windows while doing all my programming on UNIX. So I’ve been using Vim to write code lately and I’m glad I switched even before actually switching. I’ll miss the pretty interface though.


The experience did make me a convert to the power of UNIX. I don’t ever want to tie myself to a single platform again and the only way to avoid is to delve a little more deeply into the land of *NIX. Now I don’t need a mac. I just need a shell into any standard server and maybe wget to download my .vimrc file & .vim directory. Unless you’re actually writing programs for the platform you shouldn’t tie yourself to any single one. It’s always good to have more options. I was already spending a lot of time in the terminal anyway. The god thing about OS X is that it allows for a nice, gentle path to enlightenment rather than something mashed into a pulp, crammed into a glass box, and reconstituted to look something like its original form.


Oh yeah, the Leopard transition (while painless for the Apple stuff) was a major headache for compiling stuff. They did some stuff to their API where I just couldn’t compile a lot of essential tools from source like before (yay for MacPorts). So much for the illusion of OS X as the ultimate UNIX distro. I’m sure these will get ironed out in time but it did make me scratch my head.


See you all next year! (I’m joking… I hope)

Programmer on a Train

Remember the post about Japanese commuter trains? Well, now I write code in one. Shocking how far I’ve let myself slide. It’s not because I’m a dedicated Japanese working class warrior either. It’s been a couple months into my “new” job and even while it’s “new” I want a “newer” one. Adjusting to full-time work took a while. Now I’ve settled into the routine. I also get to see what a IT company is like from the inside out. Of course, I don’t know if this is the typical experience or not but I’m sure there are many similarities. One of the disappointing things about this company is that there aren’t any real superstar hackers at least not with my framework. I’m also working on a project that is a whole list of firsts for this fledgling company. I’m really not much of a programmer myself. Yet, I’ve still managed to reach the conclusion that this company isn’t where my future’s at. Not that I ever thought I did. I basically took the first job offer that materialized to gain industry experience. I may or may not change jobs in the near future.


However, I have gained enough confidence to know that I can hold my own with the mediocre code monkeys that inhabit the dark recesses of software shops. I’m pretty convinced that I can hang with this crowd. Let’s list some characteristics:


  1. They write crappy code
  2. Yet manage to have a major ego and opinion on everything
  3. It still takes them forever to write said crappy code

You see there are hackers and there are hacks. I guess I should have known. I was weaned on books, blogs and open source projects because I was trying to teach myself how to program. I had nobody to teach me right from wrong. Naturally, without knowing it, I set a pretty high bar of quality on what basic code should look like even if I didn’t have the slightest clue on how to write it. Well, the people who have the confidence to open source or blog about code are people who can write decent code. So it’s no surprise that once you go into the field that you’ll find your typical programmer who basically managed to survive by fulfilling bare minimum requirements drifting from job to job. One thing they did learn is to “SHIP IT SHIP IT SHIP IT!!”. One thing nobody ever told them is to spend some quiet time to reflect on how they could write their code more eloquently.


Just like you have harlequin romances and great classical novels you have hacks and hackers. Hackers can outclass an army of hacks in quality and volume but you wont find them unless you work for Google or the like.


So basically I walked away with enough confidence to know I can survive in this field and the realization that I’m just as mediocre as the next guy. The only way to overcome this is to type, type, type and so I will. The thing is I rarely feel like programming at home. I always drift off into something else (like blogging or surfing) rather than work on my own project. Yet, I came to realize the value of personal projects, the space to set your mind free from client requirements and experiment with whatever you see fit. The only thing keeping me at bay is this cursed invention called the internet that showers me with distractions. So I thought, “why not write code on the train?”. Yeah, a crowded Japanese commuter train no less. The beauty of my commute is that I ride a single line from start to end. That means I can get a seat guaranteed in either direction. So I bought a fancy back pack that holds a laptop, you know the kind with all the geek pockets that matter, and lug my computer on the train.


The fight for elbow room takes on new dimensions when you’re trying to program. Of course, people avoid you like the plague or just simply get hostile with you. There are some real benefits though:

  1. You’re forced to use keyboard short cuts (otherwise you can’t get anything done)
  2. No distractions aside from physical turf wars (no email, no internet, no nothing—oh, I also listen to music while I’m coding).
  3. A definite time limit and hence measure of productivity.

I’m hoping this exercise will make me more productive as a whole not to mention the additional practice I need to grow. I know people think I’m some kind of a psycho but that’s just the price I’ll have to pay.

It’s the SDK Stupid or “It’s The API, Stupid” Once Again

Stud mac developer Wil Shipley’s not only a superstar programmer but an entertaining writer as well. Today we have some choice quotes on why he wont be releasing any AJAX iPhone web apps soon. It sort of reminds me of the debate on why, despite the lack of polished features, the API makes Twitter a clear winner versus Pownce (though it’s too early to tell for real).

I don’t trust any “SDK” made by a company that won’t use it themselves. Where are all of Apple’s AJAX apps for the iPhone? Anyone? (*chirp*) The iPhone apps are not written in JavaScript—or at least no JavaScript I know. Show me the secret JavaScript commands to get at all that CoreAnimation goodness you guys use, and to get at the Bluetooth and 802.11 and multitouch and local storage, and then maybe… well, no, actually, I still don’t want to write code in JavaScript.

To get an idea of where Wil could take the iPhone if there was a decent API is drool worthy:

+ I want my customers to be able to scan in barcodes with the iPhone’s camera… nope.
+ I want them to be able to wirelessly send these newly-scanned items to the base computer… nope.
+ I want them to be able to scroll through a page full of beautiful renderings of all their books… well, ok, I could (and will) do this by publishing to a web page, but that requires the user to have a web server somewhere, AND wait for her books to download over EDGE, instead of having them locally.
+ I’d like them to be able to re-sort their libraries with CoreAnimation effects, delete books with a flick, etc. Nope nope nope.
+ I’d like for two people who have iPhones to be able to click a button and have the iPhones quickly wirelessly compare their likes and dislikes, and pop up the resulting matches. “Hey, you both love these films… here’s some recommendations Bob has for Sally based on your shared likes, and here’s some recommendations Sally has for Bob”.... nooooooope.

Call Me Fishmeal.: iPhone’s AJAX SDK: No, thank you.

Not even Steve’s distortion field can cover up the inadequacy of not having a proper SDK for the iPhone. It’s something that can take the iPhone to the next level. For example, the wi-fi capabilities supplemented by a custom Skype application would make it a killer (although I can see where the phone companies get scared).

One of the reasons why Palm refuses to die despite many near death experiences is most likely their liberal approach to letting third party developers extend it with more functionality and basically hack their device to death. Ditto for the very rare Newton PDA from Apple’s dark ages.

The iPhone reportedly comes with a hefty 700MB OS X lite installed in it that gives us a close to full feature set (minus copy and paste!!!) so obviously it’s more an issue of corporate politics (internally or maybe with partners like AT&T). At the end of the day a phone is a phone is a phone but opening up the iPhone as a platform would certainly make it a more interesting device that could even be attractive for various business uses.

I don’t think Apple or at least their engineers really want to close off the platform as mobile devices are definitely going to be playing a larger role in the future. However, Apple’s string of successes may awaken Steve’s protective tendencies for a repeat of the past.

Cell phones are really the last frontier as far as ubiquitous connections go and it’s the over-regulation and oligopoly of cell phone carriers that keeps cutting edge technology from letting us truly take hold of all the possibilities offered by mobile platforms and making it all a whole lot cheaper to use (network infrastructure has been a sunk cost for some time yet communications costs have not come down nearly as much).

Rocking and shocking the telecoms once iPhone at a time seems like a long shot but the SDK could be a big blow to the telecoms that finally give us true control of our conversations.

Twitter v Pownce: It’s The API, Stupid | New Web Order – Nik Cubrilovic

10 Reasons Why Your Code is Better Than a Girlfriend

  1. If your code isn’t hot you can borrow someone else’s and call it your own
  2. Lots of hot code (open source) to choose from
  3. When things go wrong you can always revert to better days
  4. If you get tired of your code you can open source it
  5. If your code is hot you can pimp it out to companies
  6. At least you’re directly responsible for its faults
  7. They don’t care about anniversaries
  8. When it cries at least you can understand why
  9. You can share it and work on it with others to make it better
  1. It doesn’t change with age

    inspired by:Ramblings from the Marginalized » 1100 Reasons programing is better than having a girlfriend

The Joys of Learning How to Program as an Adult

I can’t even begin to count the joys of learning how to program as an adult. It’s a wonderful world of discovery and self-loathing. One of the biggest joys is the wonder and excitement of writing your cherished program. The reason for this is you never know what exactly you’re doing so the program always explodes in creative and exciting ways. Even a routine variable assignment in the hands of a newbie can turn into an explosive bug.

On the flip side you find yourself writing code that’s so amazing in its complexity that when you come back to it, you have spend a good deal of time staring at it to figure out just exactly what it does. Sometimes it just works. It’s the most convoluted and unnecessarily complex method you ever saw that shouldn’t work but it does. This is usually the product of cut and paste coding mixed with random stabs in the dark.

Whatever the mess of spaghetti code I create is the sum total of a twisted mind trying to hurt itself in new creative ways. It’s the product of a sluggish brain revolting against the evil overlords trying to coerce a new way of thinking into it.

Despite the wordiness and output of this blog I find myself with a serious case of writer’s block when it comes to writing programs even if they are simple web projects.

Will I overcome this writer’s block and still live to unveil my secret project? Only time will tell.

Kids, try this at home. You need to start early. Really. The biggest obstacle in my opinion is the fear of making a fool of yourself when in fact you’re already the walking definition. It’s much better to keep running into a brick wall because at least that’s progress. If only programming was as easy as they make it look in 24!