Episode 10: New Year Special, 2010 Edition
Note: I originally posted this article on a personal blog I ran when I was in my late teens and early twenties. I discovered in May 2020 that the Internet Archive had preserved the contents of that blog in its entirety, including some of the media. That blog was an important part of my personal history, so I reposted all of that content on this website for archival purposes. While my politics, opinions, and outlook on the world have changed radically since I wrote those posts between 2009 and 2011, it’s good to know that I was as much of an idiot then as I am now.
It’s December 31st, 2009, at least here in New Delhi. A glorious year is ending, and another (potentially) glorious year is just around the corner. This is reason enough for me to put on my writing cap and add another pointless piece to A Series of Uncool Events.
Year 2008 was disappointing, to say the least. I’d love to write twenty paragraphs and explain in detail how sad year 2008 was, but that would be a waste of precious electrons. Point is, 2008 was a tragic, miserable, wretched year. Did I tell you it was distressing, depressing and pathetic? Let’s throw in “lamentable” and “piteous” for good measure. Yes, I love my thesaurus.
Now that we’ve established how gloomy year 2008 was, let’s move on to year 2009. 2009 was, in contrast, a wonderful year. It was an year of excitement, discovery and many, many changes. Here’s a quick rundown of the highs and lows of 2009, neatly categorized and methodically packaged for mass-consumption.
The Good
-
Built index_server for Haiku. This was a great experience because: (1) it was the first time I got paid for writing code, (2) while working on improving indexing performance, I learned a lot about real world threading issues and (3) the BeAPI is simple, elegant, intuitive and fun to program. Moreover, Haiku is a pleasure to use. BeOS was a beautiful OS, and the Haiku community has kept that same Be spirit alive in Haiku R1A1.
-
Finally got some real-world, hands-on experience with version control and build systems. Got comfortable with Vim and noticed an immediate increase in productivity.
-
Met a bunch of smart people from the Indian FOSS community. Was intrigued by the variety of great software—and, sometimes, hardware—people have been building right under my nose. Impressive, and downright humbling.
-
Realized Mac OS X is the One True Operating System and started learning Cocoa. One thing led to another, and now I’m building Goonj with Pratul and Nandeep.
-
Made some great friends at college. The kind of people you can trust with your eyes closed.
The Bad
-
After five years of using Linux on my PC, got burned-out by all the hardware, compatibility and stability issues. Using Windows 7 on the PC right now, and finding it a good enough OS for most of my needs.
-
Bought a Dell laptop. My dog can design a better machine. Never again.
-
Didn’t do very well at college. Ah well.
-
Wrote way too many blog posts involving bulleted lists.
The Ugly
-
Watched helplessly as the incessant buzz of byte-sized updates from Twitter and the so called “social media” ate away at my brain. Deleted my Twitter account a week ago.
-
Was involved in an incident involving a certain carbon compound. Learned that ingesting said carbon compound is not a good idea. Never again.
So, that was year 2009. Year 2010 will be here in another 30 minutes. Let’s just hope it’s as beautiful as last year. Thank you for tuning in to A Series of Uncool Events. Good night, and a happy new year :)
Episode 9: A Note to Myself
Note: I originally posted this article on a personal blog I ran when I was in my late teens and early twenties. I discovered in May 2020 that the Internet Archive had preserved the contents of that blog in its entirety, including some of the media. That blog was an important part of my personal history, so I reposted all of that content on this website for archival purposes. While my politics, opinions, and outlook on the world have changed radically since I wrote those posts between 2009 and 2011, it’s good to know that I was as much of an idiot then as I am now.
This post is exactly what the title says it is. Just a small note to remind me what I should be focusing on. Spending a weekend playing with genetic algorithms in Scheme is a wonderful learning opportunity, but it detracts from some of the bigger projects I’m working on. Idle curiosity can do more harm than good if you’re trying to juggle college and code. Genetic algorithms can wait until Christmas.
Ongoing Projects
I never start projects. I bump into them. Sometimes they feel like a distant member of Grampa’s extended family. Other times, they feel like a close friend you’ve been dying to talk to for the past 6 months, but gosh darn it where’s his number? Unlike most seasoned hackers, I only have three large projects I wish to see to completion before I touch something new.
-
index_server: the full text indexing tool for Haiku I wrote this summer.
-
Goonj: a media player and music library manager for Mac OS X (I’m working on this with Pratul).
-
Make the Dell Vostro 1520 100% Haiku compatible. For this, I need to write drivers for the following devices: (1) touchpad (2) wireless card (3) webcam and (4) sound card. I’ve already started digging through some driver code, but it will be a while before I have something usable.
Interests
I’m a sad case, really. I need to write a blog post to remind myself what I’m interested in. If you don’t want your kids to turn out this way, make sure they take enough baths. Yes, even in winter.
High-level stuff bores me. I find I’m much more comfortable with C and C++ than Python. With that in mind, here’s a small overview of my fields of interest:
-
Compilers
-
Virtual machines (and emulators)
-
Operating systems
-
File systems
-
Games (why not?)
-
Information retrieval
Lately, I’ve been reading up on electronics. I’ve barely scratched the surface of what’s possible with just a few cheaply available components, and I’m already shaking with excitement. College does not permit me to learn as much as I’d like to, but I’m slowly getting there. I’ll have something to show for my efforts in a couple of months. Let’s see what comes of this new obsession :)
Episode 7: Parenting License
Note: I originally posted this article on a personal blog I ran when I was in my late teens and early twenties. I discovered in May 2020 that the Internet Archive had preserved the contents of that blog in its entirety, including some of the media. That blog was an important part of my personal history, so I reposted all of that content on this website for archival purposes. While my politics, opinions, and outlook on the world have changed radically since I wrote those posts between 2009 and 2011, it’s good to know that I was as much of an idiot then as I am now.
I watched The Dead Poets Society today. It’s about an English teacher who tries to teach his students how to live. Go watch it.
The Dead Poets Society struck a chord with me because I have been thinking about the same issues it talks about for the past few days. What got me thinking was a conversation I heard at a party last week. This is how it went:
Kid: But mom, I don’t want to eat right now.
Mom: It’s lunchtime. You’re going to eat that chapati right now.
Kid: Okay, ma.
Mom: Why are you using your left hand to eat? Can’t you do anything right?
(At this point, my mom goes over to talk to that annoying lady.)
Mom: Say namaste to aunty. Have you forgotten your manners?
… and so on …
The conversation itself is not offending. In fact, I clearly remember being told to eat with my right hand when I was a kid (a piece of advice that still doesn’t make sense to me). What offended me was the fact that the mother was barking orders, in a way that made me want to put my fork down and leave the room. That kid could not have been older than ten. Show some love, lady. You’re supposed to be his mum. Oh well. What goes around, comes around.
Another story. A guy we (we = my family) know just enrolled his ten year old son into a boarding school. The reason? “He is unruly. We can’t take care of him.” Yeah, right. Do you expect military-style discipline from a ten year old? As far as I know, ten year olds do not want to take over the world (yet). Their curiosity gets them into a lot of trouble, but whatever they do is well intentioned. My parents were visibly shocked.
No one without a parenting license should be allowed to raise kids.
Episode 6 ½: Chromium on Mac
Note: I originally posted this article on a personal blog I ran when I was in my late teens and early twenties. I discovered in May 2020 that the Internet Archive had preserved the contents of that blog in its entirety, including some of the media. That blog was an important part of my personal history, so I reposted all of that content on this website for archival purposes. While my politics, opinions, and outlook on the world have changed radically since I wrote those posts between 2009 and 2011, it’s good to know that I was as much of an idiot then as I am now.
I have only used Google Chrome on Windows for a few minutes. That was a few months ago. Since then, I have been waiting eagerly for the Mac version.
The wait is (almost) over.
xAbhishek points out here that Google has finally started releasing Chromium binaries for the Mac, which means you no longer have to build from source. Note that these are nightly builds, which means pre-alpha quality.
Here are some observations:
- “Inspect Element” and “View Page Info” crash the browser.
- Most of the preferences are grayed out.
- Chromium doesn’t play well with Spaces. If I have Chromium on space 1 and I switch to space 2, clicking on the Chromium icon on the dock should automatically switch to space 1. Unfortunately, this is not what happens, which is pretty annoying.
- I still can’t grasp what the maximize button in Chromium is supposed to do.
Besides these little problems, Chromium is a well behaved Mac app. I expect the final release date for Chrome on Mac is very close. Oh, and here’s a screenie:
Update (May 13): I clobbered together a quick hack (in Python) to download and install the newest Chromium build on Mac OS X. Download it here. I take no responsibility for deaths, injuries or nuclear explosions that might result from the use of this script.
Usage: type this in Terminal:
$ sudo python <PATH TO SCRIPT>/chromium_updater.py
… and hope that nothing bad happens.
Episode 6: Getting Things Done
Note: I originally posted this article on a personal blog I ran when I was in my late teens and early twenties. I discovered in May 2020 that the Internet Archive had preserved the contents of that blog in its entirety, including some of the media. That blog was an important part of my personal history, so I reposted all of that content on this website for archival purposes. While my politics, opinions, and outlook on the world have changed radically since I wrote those posts between 2009 and 2011, it’s good to know that I was as much of an idiot then as I am now.
I’m currently on a mission to increase my productivity up to a respectable level. Right now, I don’t know about any metric that can effectively measure productivity, so I’m using a very simple metric of my own. Out of the total time not spent on life-sustaining activities (eating, bathing, bathroom breaks etc.), how much time do I spend on things that matter? Things that matter include: learning stuff, reading articles online (the news.YC kind, not the Digg/Reddit kind), programming, reading books, blogging, relaxing, pondering the ultimate question of life, the universe and everything, and spending time with family and friends (talking to friends on the phone is not “spending time” with them). Right now, the measure of my productivity should be between 5% and 10%. I want to get my productivity levels up to around 50%.
Some of the steps I’ve taken to increase my productivity are:
-
I have cut down on useless RSS feeds. Slashdot, Macworld get the boot. Planet Python kept me updated on the latest going-ons in the Python community, but it was low on the kind of content I enjoy. So, Planet Python gets the boot, too. I feel I should remove some of the Cocoa blogs I read from my RSS reader, too.
-
I am keeping a TODO list in my OS X menubar and reviewing it before I go to sleep. I’m using a slick app called Anxiety which integrates nicely with iCal.
-
I have stopped whining. You will see no more rants here on SUE. If you are following me on Twitter, you will see no more whiny tweets (although I will continue to point out genuine problems I have with the software and web services I use).
-
I’m fighting the urge to correct people all the time. I’ve spent countless hours correcting people on Reddit/news.YC/Twitter. None of that now.
-
I’m getting into the habit of putting my MacBook to sleep when I’m not using it for something productive. No more Wikipedia marathons, no more Amazon explorations and no more AskReddit.
-
I have written down exactly what I want to achieve this year on a piece of paper and stuck it on my wall. Whenever I catch myself doing something useless, I evaluate whether it gets me closer to my goal and then decide to continue with what I’m doing or to drop the task.
I’ve also added a productivity blog to NetNewsWire: 43Folders. I don’t have any particular affinity towards the self-help “industry”, but I find that some of the content on 43Folders is actually pretty good (none of that “you can do anything if you put your mind to it” bullshit that sounds nice but doesn’t really help). Another blog that looked interesting was ZenHabits, but I was put off by some of the cheesy posts I saw on the front page (”5 Foolproof Ways to Produce a Burning Desire for Your Goals”. WTF?).
Right now, my mind is less cluttered than it was a week ago. I’m much calmer, and I got a lot of work done today (got through a lot of dry Objective-C documentation, wrote this blog post, spent a lot of time with my parents and still had time left over for other stuff). This routine suits me. Now the only thing I need to fit in here is some light exercise.
Episode 5: Something to Do
Note: I originally posted this article on a personal blog I ran when I was in my late teens and early twenties. I discovered in May 2020 that the Internet Archive had preserved the contents of that blog in its entirety, including some of the media. That blog was an important part of my personal history, so I reposted all of that content on this website for archival purposes. While my politics, opinions, and outlook on the world have changed radically since I wrote those posts between 2009 and 2011, it’s good to know that I was as much of an idiot then as I am now.
First things first. Python and Django programmer for hire this summer (June and July). If anybody in or around New Delhi needs something built, I’m your man.
Now, on to the trivialities.
The results for Google Summer of Code 2009 came out on April 21, and I failed to make it. According to my mentoring organization, I was one of their top picks, but failed to get in because I didn’t submit as many patches as the other students. No GSoC work means I have no commitments this summer. Akshay is trying to get a RoR job somewhere, and I think Apoorv has something planned, too. I feel I ought to start making my own TODO list now.
I have spent the past few weeks thinking about how much time I waste on worthless activities (something which led to a fight between me and Apoorv - he’s absolutely certain he’s not wasting any time). The agenda for April is to cut out all the time-sucking activities from my routine. I’ll probably read up on time management and check out what the GTD hype is all about. Also part of the agenda is keeping my workspace clean. Right now, I have a single table for everything - study, web browsing, movies, programming and food. I’m going to have to try and keep my work and fun areas segregated so that when I sit down in my work chair, my mind goes, “Okay, time to work. No more distractions.”
lut4rp tells me I need to get some code “out there”. A lack of Objective-C knowledge is preventing me from delving deeper into Cocoa, so I will be spending some time writing ObjC code and putting it up on GitHub for everyone to see (and laugh at). I really wish I could spend more time with Python, but I want to go indie with a few desktop apps and that’s something which Python fails to do well (at least on OS X). I want to push the limits of ObjC, just to see how dynamic it really is (so far, I’ve used it like a spiced up version of C). In my experience with the language so far, I have felt it is nothing compared to heavyweights of the dynamic world - Ruby and Python. I sincerely hope I’m wrong.
The next logical step after Objective-C is to sharpen my 1337 Cocoa skillz. The strategy this time is to leave the more advanced technologies for later. What’s the point of getting into CoreData or Keyring Services if I never plan to use them? As an aside, the Hillegass book is awesome, but I don’t think it’s written for people new to Cocoa. It reads more like a cookbook than an introduction to OSX programming. I’ll be using Apple’s docs + online tutorials (and refer to Hillegass if the need arises). Since I’ve already covered more than 50% of what is required to write decent OSX apps, my next steps are mostly going to center around getting familiar with the libraries available to me.
My one-post-a-day idea bombed, mostly because exams kept me busy. I had two weeks of exams, followed by a week of semi-rest, followed by a week of practical exams. Another round of practicals begins on Monday, which will be followed by ten days of semi-rest and another two weeks of exams. The last two months of the semester are always like this at IPU. I’m used to it now, so no worries :p
Episode 3: Ergonomics, Thou Art a Bitch
Note: I originally posted this article on a personal blog I ran when I was in my late teens and early twenties. I discovered in May 2020 that the Internet Archive had preserved the contents of that blog in its entirety, including some of the media. That blog was an important part of my personal history, so I reposted all of that content on this website for archival purposes. While my politics, opinions, and outlook on the world have changed radically since I wrote those posts between 2009 and 2011, it’s good to know that I was as much of an idiot then as I am now.
Update [March 31]: Added a photo of my setup.
Owing to Google Summer of Code 2009, I have been spending more time using my MacBook than ever before—hanging out in IRC channels, building Haiku (the project I applied to), writing code and doing a lot of reading. The result? The entire last week spent dealing with severe back pains, shoulder pains, wrist pains and irritable eyes. I have never had these pains before. I remember days when I would spend eight hours in front of my PC without any kind of discomfort. Why now?
After some Googling, I figured out poor laptop ergonomics was to blame. In the past, I have felt some discomfort while working with my MacBook, and I have taken some steps to eliminate that. I got myself a new chair, and reduced the height of my desk by sawing off its legs. Apparently, it wasn’t enough. The problem with laptops is that if you manage to set up the screen in a comfortable position, using the keyboard becomes difficult and if you set up the keyboard in a comfortable position, you can’t read the screen.
With a desktop, you’re usually sitting up straight, with your head in its natural position and your eyes looking straight ahead of you at an angle of 90°. Your elbows, too, are positioned at an angle of 90° with your body and the keyboard is below the level of your chest. If you have a good chair then it supports your lower back, thus reducing back pains. When using a laptop, on the other hand, you’re sitting in a hunched position with your neck bent down. Since the keyboard is so small, your hands are placed unnaturally close to each other, resulting in wrist and shoulder pains. You have to bend forward to type, which kills your lower back.
An overwhelming majority of people who use their laptops as desktops recommend separating the keyboard and the screen. One way to do that is to buy a new screen. Since I don’t have that kind of money, I went with the second alternative—use a USB mouse and keyboard instead of the built in trackpad and keyboard. I already had a portable Logitech mouse, so I headed to the nearest Croma and picked up a Logitech Ultra Flat keyboard for Rs.649 (I know I could have had it for less, but the pain was too excruciating to bear for even one more day). Let me digress from the main post so I can tell you how awesome my new keyboard really is.
The Ultra Flat is smaller and more compact than the regular Logitech Classic keyboard. The keys are placed very close together, but that’s not a problem since they are much larger than the keys on a Classic. They are also softer and much more responsive. There seems to be some kind ’shock absorber’ at the bottom of each key, which slows it down as you press it. Whatever it is, it feels very comfortable. The entire experience of typing on the Ultra Flat could be summed up in one word: smooth. Oh, the best thing about the Ultra Flat? Spring loaded keys! There’s nothing more a geek could ask for.
Okay, back to ergonomics. There’s nothing much to tell now. The next step was to raise the height of the laptop to prevent neck pain. Introduction to Algorithms and The MINIX Book came to my rescue, and now my laptop is standing on the shoulders of giants. As of this writing, I have been working with my new setup for about 5 hours without discomfort. No more pains!
Update [March 31]: I just installed a nify application called KeyRemap4MacBook which allows me to remap several keys on my USB keyboard. The default layout of the bottom row on a regular keyboard is something like this: CTRL | WINDOWS | APPLICATION | ALT | SPACEBAR | etc.
On the other hand, the default layout on the MacBook keyboard is like this: FN | OPTION | COMMAND | SPACEBAR | etc.
I used a screwdriver to pop-off some of the keys from the UF, and rearranged the bottom row to this: CTRL | APPLICATION | ALT | WINDOWS | SPACEBAR | etc.
Then I used KeyRemap4MacBook to remap the ALT
key (listed as OPTION_L
in the prefpane) to COMMAND_L
and the APPLICATION
key to OPTION_L
. I also remapped CAPSLOCK
to CTRL
, and checked the Use Keypad as Arrow Keys option. After installing KeyRemap4Mac, the DEL
, HOME
and END
keys have started functioning properly, too. Finally, I have my Windows keyboard set up (almost) exactly like my MacBook keyboard.
Now get off my lawn.
Episode 2: What Grinds My Gears
Note: I originally posted this article on a personal blog I ran when I was in my late teens and early twenties. I discovered in May 2020 that the Internet Archive had preserved the contents of that blog in its entirety, including some of the media. That blog was an important part of my personal history, so I reposted all of that content on this website for archival purposes. While my politics, opinions, and outlook on the world have changed radically since I wrote those posts between 2009 and 2011, it’s good to know that I was as much of an idiot then as I am now.
Buzzwords. This is what Wikipedia has to say about them:
A buzzword (also fashion word and vogue word) is a vague idiom, usually a neologism, that is common to managerial, technical, administrative, and political work environments. Although meant to impress the listener with the speaker’s pretense to knowledge, buzzwords render sentences opaque, difficult to understand and question, because the buzzword does not mean what it denominates, yet does mean other things it ought not mean.
Twitter has a crisp, concise sentence on their homepage that describes exactly what their service is all about. Someone must have worked hard coming up with that description. Here it is:
Twitter is a service for friends, family, and co–workers to communicate and stay connected through the exchange of quick, frequent answers to one simple question: What are you doing?
I’m going to take that description and have some fun with it.
There seems to be no mention of Web 2.0 there, so I’ll put that in. I’ll also toss in “real time”, because I can. The sentence now reads:
Twitter is a Web 2.0-based real time service for friends, family, and co–workers to communicate and stay connected through the exchange of quick, frequent answers to one simple question: What are you doing?
What about “empower”? I think I can squeeze that in somewhere. Since “friends, family, and co–workers” sounds too normal, I’m going to replace it with “end users”.
Twitter is a Web 2.0-based real time service that empowers end users to communicate and stay connected through the exchange of quick, frequent answers to one simple question: What are you doing?
“What are you doing?” is too easy to understand. It has to go. These days, “core competency” seems to be the hot new term in town, especially among entrepreneurs. I’ll re-phrase the blurb so I can throw that in, too.
Twitter is a Web 2.0-based real time service. Twitter’s core competency is empowering end-users to communicate and stay connected through the exchange of quick, frequent answers to one simple question: What activity is the said end-user engaged in?
Something about “rich media” would be nice. “quick, frequent” can be replaced by “holistic, crowsourced” and “question” becomes “query”.
Twitter is a Web 2.0-based real time rich media service. Twitter’s core competency is empowering end-users to communicate and stay connected through the exchange of holistic, crowdsourced answers to one simple query: What activity is the said end-user engaged in?
Change “stay connected” to something better, like “allowing them to initiate a synergizing convergence of thought and action”.
Twitter is a Web 2.0-based realtime rich media service. Twitter’s core competencies are empowering end-users to communicate and allowing them to initiate a synergizing convergence of thought and action through the exchange of holistic, crowdsourced answers to one simple query: What activity is the said end-user engaged in?
And that, folks, is what grinds my gears.
Episode 1: Perspective Shift
Note: I originally posted this article on a personal blog I ran when I was in my late teens and early twenties. I discovered in May 2020 that the Internet Archive had preserved the contents of that blog in its entirety, including some of the media. That blog was an important part of my personal history, so I reposted all of that content on this website for archival purposes. While my politics, opinions, and outlook on the world have changed radically since I wrote those posts between 2009 and 2011, it’s good to know that I was as much of an idiot then as I am now.
Somewhere in the depths of my hard disk, lies a small RTF file titled “Goals for 2009″. It has largely been forgotten. It was an ill conceived idea, anyway. The RTF said: “write at least 150 blog posts this year”. Evidently, whoever typed in that number did not belong to civilized society. Want to smell my feet?
I, too, had dreams. I dreamt of an age where man does not suffer from writer’s block, where little children have no trouble coming up with blog posts containing just the right balance of bad advice, irrelevant anecdotes and mindless drivel, where tiny flying hippos put clever words right into your mouth while Douglas Adams explains the exact meaning of the number 42 to Why the Lucky Stiff on the radio. I realized my quest for such a world was futile. To write, you must think. Unfortunately, on average, I have only two modes of thinking. They are:
Mmmmmm … wha? Bugger off.
And:
# TODO: figure out a better algorithm for this.
def writeBlogPost(clevernessFactor):
for word in randomize(oxfordEnglishDictionary, clevernessFactor):
blogPost += word
Now my perspective on life, the universe and everything has changed. I have have realized that pure awesomeness is not a substitute for good thinking. That means I’m not qualified to write clever articles that provide wholesome entertainment for the entire family. I ask myself: what, then, will you do with this blog you paid Rs.4500 for?
This is what: I will try to post here every day. Even if it’s mindless drivel. Even if it leads to invisible sock-pixies spreading chalk powder over my toenails. Even if nothing I write makes sense. This is the perspective shift. I don’t need to write deep, insightful, Hacker News-worthy posts to justify my investment. Something that was meant to be an outlet for thoughts, emotions and opinions seems to have become a dead weight I need to carry around. No more. I shall now write for the sake of writing, not for the sake of making a point or getting more hits.
Episode 1 ends here. You may now be awed.
Thoughts on Using a Mac as a Development Platform
Note: I originally posted this article on a personal blog I ran when I was in my late teens and early twenties. I discovered in May 2020 that the Internet Archive had preserved the contents of that blog in its entirety, including some of the media. That blog was an important part of my personal history, so I reposted all of that content on this website for archival purposes. While my politics, opinions, and outlook on the world have changed radically since I wrote those posts between 2009 and 2011, it’s good to know that I was as much of an idiot then as I am now.
This post was inspired partly by this Reddit post.
Take my opinions on the Mac as a development machine with a grain of salt, since I’m neither a professional programmer, nor do I contribute to any major open source projects. I’m still in the early stages of hackerdom, and most of the code I write is either for learning, part of simple scripts I write to automate tedious tasks or, more recently, part of small desktop apps I write using the Cocoa libraries. Even though I haven’t written or worked on any complex piece of software, I grew up using Linux and open source software and have been exposed to many different programming languages (before I settled on Python as my language of choice). I installed Fedora Core 1 (or was it FC2?) just for fun when I was 14 and ended up using various Linux distributions for about four years before I bought my MacBook.
I bought the MacBook about 8 months ago, and started learning Cocoa for writing desktop apps for the Mac, and I’m loving every bit of it.
All right, here’s my list.
The Good Parts
-
Mac OS X is UNIX under the hood. Heck, launch Terminal.app and have fun playing with awk, grep, sed and friends—the same stuff one would use under Linux. OS X also comes with Perl pre-installed. I have no idea if Python and Ruby are parts of the core system, but they’re definitely parts of Apple’s Developer Tools package.
-
You can grab all your favorite editors and languages off MacPorts, which is very similar to Debian’s APT (actually, it’s closer to Gentoo’s emerge tool).
-
Most Linux applications run perfectly on Mac OS X. In fact, many of the lesser known apps have Linux and Mac OS X ports, but no Windows ports. The Transmission BitTorrent client is one example.
-
I believe the UI of my OS has a profound effect on my productivity. The OS X UI has been designed to not draw attention to itself unless you look very hard. Contrary to popular belief, OS X does not have any eye candy, unless you consider smooth transitions from boot screen to login screen to the desktop eye candy. Exposé and Spaces look like eye candy to someone who has never touched a Mac before, but they are productivity features which just happen to be beautifully designed. A stock Ubuntu system with Compiz has much more intrusive eye candy than a stock OS X system.
-
If you’re looking for a new programming language and a new set of APIs to learn, then there’s no better choice than Objective-C and Cocoa (this is exactly what I’m learning these days). After having written a few apps using Cocoa, you will never want to go back to writing apps for Windows or Linux. The API is consistent and well designed, and contains classes for the most common tasks you might wish to perform in a desktop app. Interface Builder is awesome in the true sense of the word, and unlike most other IDEs, XCode is fast, responsive and almost a pleasure to use (almost, because I still prefer the editing capabilities of Emacs over any other editor).
-
No tinkering with config files, no hardware driver issues, minimal maintenance, no slowdowns over time, no malware issues and not having to do an apt-get upgrade every three hours. The it just works nature of the Mac has given me more time to work on my own code, rather than spending most of my time finding ways around other people’s mistakes.
The Bad Parts
-
If you’re writing commercial applications, then Windows is the way to go. Apple will never have significant market share on your average desktop, since both Windows and Linux can run on anything from a Rs.25000 ($500) Zenith desktop to a custom built, Rs.65000 ($1360) gaming machine, whereas the Mac OS runs only on Apple hardware.
-
Macs don’t play well with other operating systems. Installing Windows using BootCamp works fine and dandy, but running it for a long time causes my MacBook to heat up to over 65°C. While installing Linux on a Mac is easy, it’s not officially supported by BootCamp, and getting it to play well with the hardware requires many hacks and workarounds.
-
Customizing a Mac is not easy. Linux allows you to customize every aspect of the OS, and even Windows allows a certain level of customizability, but the Mac allows none. Be prepared to either install unsafe hacks that mess with the OS or just STFU and follow the One True Way of Steve Jobs.
-
Be prepared to pay for quality. The software-wants-to-be-free culture of the Linux world is not acceptable in the Mac world. If you can’t pay up, then have fun using unstable ports of clumsily put together GTK apps under the X-Server.
Even though the Mac has its own disadvantages, I’d rather use a Mac than a Windows/Linux machine for development any day.