tag:blogger.com,1999:blog-93463172024-03-07T23:23:38.630+05:30Arsalan Zaidi's BlogBecause blogging's healthier than talking to yourself. At least that's what the voices tell me...Arsalan Zaidihttp://www.blogger.com/profile/03116662629864832986noreply@blogger.comBlogger82125tag:blogger.com,1999:blog-9346317.post-27026395987621279772008-06-15T21:55:00.002+05:302008-06-15T22:02:37.990+05:30Turkey StuffingAs part of the team selection for a certain business function, I was given 60 minutes and a clean slate to express my creativity. With only 45 minutes to go for the bus to leave, I was a bit pressed for time. The fact that I didn't care if I was selected in any case may have had some effect on the final product.<br /><br />So without further ado, I give you:<br /><br /><span style="font-size:130%;">"Turkey Stuffing, or How I learned to stop worrying and love economy class"</span><br /><br />With oil prices shooting through the roof, airlines are looking at further innovative ways to inconvenience their customers and perhaps cut costs. Having reluctantly ruled out pay per kilogram ticket schemes (Pounds for your pounds!) and having been told off for attempting to recycle seat stuffing as in flight meals, they’ve settled on trying to limit baggage allowances to the bare minimum. You’re now only allowed a total of 20 kgs for checked in luggage and some airlines are thinking of limiting you to just one bag. Since you know your company’s never going to shell out for business class, here’s a short guide to stuffing as much as possible into one travel bag and still being able to latch the damn thing.<br /><br />Now the first thing to keep in mind is that not only do we have only one bag to put everything we need in, we’re limited by weight as well. So the first priority is to figure what you absolutely need and what you can do without. The first thing to go should be the toiletries. There’s no sense carrying around deodorant, toothpaste or anything else even remotely connected with hygiene. Your body odour hardly bothers you, so there’s no need to waste precious space on perfume when you can stuff in your Nintendo Wii instead. Don’t worry about your overseas colleagues; they’ll chalk up your reek to cultural differences when they finally regain consciousness.<br /><br />Toss out your underwear too and only carry a single white shirt and a single pair of dark trousers. No one will be able to tell you haven’t changed or that you have nothing to change into. The same goes for your socks, handkerchiefs and every other article of clothing. A quick shower with everything on will suffice for laundry and a short lie down with ‘iron’ everything out quite well. All this leaves more space for the things that matter, like the gazillion adapters you need to keep your gadgets charged up.<br /><br />Wrap all your clothes into one tight bundle and use the socks to lash it all together. Press down on the lump several times to force out all the air and you’re good to go. All the essentials now occupy a tiny portion of the bag, leaving you free to carry several kilos of samosas, pakodas or any other savories that you absolutely cannot do without.<br /><br />In the final step, slam the lid down forcefully and press down firmly with your elbows locked. The hinges may protest a bit, but now is not the time for mercy. Holding down the lid with out hand, slam the latches shut and lock firmly.<br /><br />That’s it, you’re all set. Be sure to read next times newsletter for details on how to further push your ‘baggage allowance’ by ingesting bits of your kit. All will be revealed (or rather concealed)!Arsalan Zaidihttp://www.blogger.com/profile/03116662629864832986noreply@blogger.com2tag:blogger.com,1999:blog-9346317.post-44804331023512531572008-06-15T14:36:00.004+05:302008-06-15T14:54:51.790+05:30The Eye of Sauron<div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXIT4DGPpf7Zu65YgjEkPtDhT-HmMi4NWUbvnyLkz365h4wM6KTRqDA0TZyybA6dOtP66RfSBGSJJsTdTEwCXyLeJO2NDpp9ZHvWOtFOvZmJKSSb5EvYbUcrDuCsRZcpX9nQU0Ow/s1600-h/24052008596.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXIT4DGPpf7Zu65YgjEkPtDhT-HmMi4NWUbvnyLkz365h4wM6KTRqDA0TZyybA6dOtP66RfSBGSJJsTdTEwCXyLeJO2NDpp9ZHvWOtFOvZmJKSSb5EvYbUcrDuCsRZcpX9nQU0Ow/s400/24052008596.jpg" alt="" id="BLOGGER_PHOTO_ID_5212033028916969362" border="0" /></a> <a href="http://maps.google.com/maps?q=bt+tower+london&ie=UTF8&oe=utf-8&client=firefox-a&ll=51.516819,-0.135102&spn=0.000388,0.000821&t=h&z=20">Oxford Street, London (looking towards the North)</a><br /></div><blockquote style="font-style: italic;"> <p>"The Eye was rimmed with fire, but was itself glazed, yellow as a cat's, watchful and intent, and the black slit of its pupil opened on a pit, a window into nothing."</p> </blockquote>Arsalan Zaidihttp://www.blogger.com/profile/03116662629864832986noreply@blogger.com0tag:blogger.com,1999:blog-9346317.post-63899761013044970052008-02-01T14:26:00.000+05:302008-02-01T17:52:38.952+05:30Reaching Clojure on JavaRead <a href="http://www.artima.com/weblogs/viewpost.jsp?thread=221903">Java: Evolutionary Dead End</a> on Artima first, then come back here.<br /><br />…Done?<br /><br />Well, I couldn’t agree more. Java – the language – has got to stabilise. I’ve had an uneasy feeling about it ever since those God-awful generics were shoe-horned onto it and now I get the heebee-jeebees every time I hear of the new ‘features’ they intend to tack on in Java 7. Closures? Weird imports? Enough already!<br /><br />Now I’m not saying that all these proposals are without value, but I get the distinct feeling that Java is suffering from a severe case of ‘language envy’. If C#’s got it, Java’s got to have it too. And like a middle-aged businessman passing through a mid-life crisis and dressing two decades younger than he should, Java wants to fit in with the cool crowd. Ruby’s got closures? We want them too! Groovy and Scala have built in support for XML? Hell, lets pile that on as well! The Java crowd has still to realise that the battle for cool was lost a long, long time ago. There’s no point getting all tooled up and charging the enemy now.<br /><br />Java has found its niche. It’s an excellent language for large, complex enterprise applications. It’s perfect for building massive, scalable apps using large teams of programmers. It’s got excellent tool and library support and it does what it does quite well. It’s COBOL for the 21st century and there’s <span style="font-weight: bold;">Nothing Wrong With That!</span><br /><br /><br /><span style="font-size:130%;">The JVM</span><br /><br />However, we need to make a clear distinction between Java (the Language), Java (the JVM) and the Java Class Libraries. The Java language needs to stabilise and the Class Libraries need to be cleaned up and slimmed down a bit, but the JVM is absolute gold. It’s the best part of the entire stack and an excellent target platform.<br /><br />The Java language is IMHO, the weakest part of the chain. It’s good for enterprisy apps built by large teams of <strike>trained monkeys</strike> skilled programmers, but not so great if you have more kinetic needs. All the language features which help enforce some modicum of control are precisely what come in your way when you need to rapidly prototype a solution. However, you don’t need to throw the JVM baby out with the Java bathwater. You can still leverage the JVM by using the plethora of languages which build upon it, like JRuby, Jython, Groovy, Scala and no doubt a whole stable-full of more esoteric options. You can use a language more suitable to the task at hand without having to abandon the vast ecosystem of high quality Java libraries and that sweet, sweet virtual machine.<br /><br /><br /><span style="font-size:130%;">Clojure, on Java</span><br /><br />So let’s segue smoothly to the real topic I wanted to discuss.<br /><br /><a href="http://clojure.sourceforge.net/">Clojure</a>.<br /><br />Groovy is nice and Scala is sweet, but I’ve had an unfulfilled hankering for a good Lisp on the JVM for a very long time. There are some Common Lisp implementations which work on the JVM, but there’s a difference between a language which has been <span style="font-style: italic;">ported</span> to run on the JVM (E.g. JRuby, Jython) and one which has been <span style="font-style: italic;">designed</span> to run on the JVM (E.g. Groovy). There’s an unpleasant impedance mismatch when you try to stick one language environment on top of another. For example, while using Jython, should I use the Python libraries or the Java ones? Can I easily pass the return values generated by one set of libraries to the other? Mixing them both together is ugly and error prone.<br /><br />That’s one reason a language like Groovy feels so much better. Since it’s targeted at the JVM, it follows a well-know set of idioms and patterns. It’s easy to pick up and comfortable to use.<br /><br />So I was on the lookout for a Lisp which didn’t just run on the JVM, but embraced it. And eventually, I found Clojure. It’s precisely what it says on the label and presses all my buttons. It’s a Lisp for functional programming with excellent support for concurrency, targeting the JVM. In fact, the <a href="http://en.wikipedia.org/wiki/Transactional_memory">STM</a> support is based on <a href="http://en.wikipedia.org/wiki/Multiversion_concurrency_control">MVCC</a>, which is the first time I’ve heard of someone using this technique for thread transactions. It also has excellent support for calling Java code from within itself (the ‘.’ is beautiful)<br /><br />A good Lisp on the JVM has the potential to be a real blockbuster. I detest the closed feel of most CL implementations and Clojure feels like a breath of fresh air. The ability to fit in with a multi-lingual and multi-paradigm world is IMHO essential for any general purpose language.<br /><br /><br /><span style="font-size:130%;">Requests and unsolicited advice</span><br /><br />Since I’m feeling both excited and generous (ha!), here’s some unsolicited advice for Rich Hickey, the guy behind it all.<br /><br /><ol><li><span style="font-weight: bold;">Read Yegge’s </span><a style="font-weight: bold;" href="http://steve-yegge.blogspot.com/2006/04/lisp-is-not-acceptable-lisp.html">Lisp is not an acceptable Lisp</a><span style="font-weight: bold;">:</span> No doubt he already has, but as a newcomer to lisp, I can agree with a lot of what he says, especially about the moribund community and general lack of direction and vision.</li><li><span style="font-weight: bold;">Don’t emphasis the Lispness of Clojure:</span> Yes it’s a Lisp and there’s no way to hide that, (not (with (all (those parentheses)))), but talk about all the cool things you can do with Clojure, not why it’s a better Lisp. You need to reach out to the people looking for a cool language, not try and convert existing lisp fanatics. For the great unwashed, the Lisp heritage is a negative and that has to be accepted and death with. BTW, it looks like the <a href="http://www.livelogix.net/logix/">Logix</a> guys agree, ‘cause what they’ve come up with looks like an infix Lisp without the parentheses to me! No mention of Lisp on their front page, though you’ll find plenty in the docs.</li><li><span style="font-weight: bold;">Better Documentation:</span> This is related to points 1 and 2. The docs are decent, but only if you already have a fairly good idea about Lisp. They need to start from a far more basic level (take a look at <a href="http://http//ycombinator.com/arc/tut.txt">Arc's Tutorial</a> for example). No one needs to write a book on Clojure (yet), but you do need lots and lots of code samples, starting from “Hello World” to a complete application, exercising different parts of the language. A wiki would be nice too.</li><li><span style="font-weight: bold;">IDE Support:</span> It’s an obvious hole. Target Eclipse or NetBeans, not Emacs. Remember, if you really want to reach critical mass, your target audience is going to be Java weenies and not Lispers!</li><li><span style="font-weight: bold;">RAD tools:</span> You need Clojure on Rails, or something. I personally think magical frameworks like Rails aren’t a very good idea, but apparently there are lots of people out there who disagree.</li><li><span style="font-weight: bold;">Better OOP support:</span> Remember, you’re trying to interop with Java. Being able to extend and define classes and interfaces in Clojure itself would be nice.</li><li><span style="font-weight: bold;">Spread the word!:</span> I literally stumbled across Clojure while reading a thread on Reddit. You need to start screaming about the language from the roof-tops! :-) Get the word out. Ruby is going through a bad patch now and there’s plenty of bloggers out there looking for The Next Big Thing. Get them to start talking about Clojure and you’ve got it made. But you need to have better docs and IDE support in place first.<br /></li></ol><br />If all this has piqued your interest, check out the docs on the <a href="http://clojure.sourceforge.net/">Clojure site</a>, and listen to the <a href="http://lispnyc.org/wiki.clp?page=past-meetings">Clojure presentation</a> (<a href="ftp://lispnyc.org/meeting-assets/2007-11-13_clojure/clojure.mp3">audio</a> / <a href="ftp://lispnyc.org/meeting-assets/2007-11-13_clojure/clojuretalk.pdf">pdf</a>). They’re worth the time.<br /><br />So that’s how I reached Clojure on Java (what a terrible pun! I’m almost ashamed. Almost.). Am I going to adopt it as my alternative language? It’s too early to tell. But I am going to be keeping a very close eye on it.<br /><br /><span style="font-weight: bold;">Note:</span> <a href="http://paulgraham.com/arc0.html">Arc's out</a>. And by that I mean it's out of the running. No Unicode support and it's just another gated Lisp dialect. Sorry Paul, no cookie for you.<br /><br /><span><strong><a href="http://social.front.lv/">Socialize:</a></strong> <a href="http://del.icio.us/post?v=2&url=http%3A//azaidi.blogspot.com/2008/02/reaching-clojure-on-java.html&title=Reaching%20Clojure%20on%20Java">del.icio.us</a> | <a href="http://digg.com/submit?phase=3&url=http%3A//azaidi.blogspot.com/2008/02/reaching-clojure-on-java.html&title=Reaching%20Clojure%20on%20Java">digg</a> | <a href="http://reddit.com/submit?url=http%3A//azaidi.blogspot.com/2008/02/reaching-clojure-on-java.html&title=Reaching%20Clojure%20on%20Java">reddit</a> | <a href="http://technorati.com/faves/?add=http%3A//azaidi.blogspot.com/2008/02/reaching-clojure-on-java.html">Technorati</a> | <a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A//azaidi.blogspot.com/2008/02/reaching-clojure-on-java.html&t=Reaching%20Clojure%20on%20Java">Yahoo My Web</a></span>Arsalan Zaidihttp://www.blogger.com/profile/03116662629864832986noreply@blogger.com9tag:blogger.com,1999:blog-9346317.post-8594777274173653272007-12-25T12:30:00.000+05:302007-12-25T12:30:29.837+05:3010 interesting lessons from 1 interesting project<span style="font-size:100%;">I’ve spent six interesting months on my current project and my association with it is at last coming to a close. The design phase is largely over and I can finally move on to other things.<br /><br />Like some sort of technological Santa Clause, I skip from chimney to chimney spreading good cheer, pixie dust and sooty footprints as I go. I like to think I leave happy families in my wake, opening the little ‘presents’ I’ve left behind to shrieks of excitement (or is that terror? I never can tell). I do know they’ll be looking forward to seeing me once more, no matter how much coal they ended up with in their stocking this year :-).<br /><br />Anyway, this current assignment has been a most <span style="font-style: italic;">interesting</span> project; as in “May you live in interesting times” and “Why yes, Nurse, this is quite an interesting case”.<br /><br />Yup, that kind of interesting.<br /><br />It’s a pity that most of the lessons that this project have taught me are of the political, managerial and interpersonal variety than those of the technical type! I’ve noted some of them down in this post, more as a reminder to myself than anything else.<br /><br /><span style="font-size:130%;">A quick overview</span><br /><br /><br />The project aims to develop a Java based data entry application for a large Swiss financial services firm. The onshore team was from a German company (part of the corporate group) and the offshore development was handled in Mumbai. There are around 20 devs, 5 designers and various testers, managers and other assorted mischief makers. The project is now over budget, delayed and the quality of the deliverable is not up to snuff. The only reason there’s any hope of completing in time is because individually, the team members are very highly skilled. It’s just that getting people to work together seems to be very difficult.<br /><br />I joined the project just six months ago, when the good ship INS T******s had already struck ice and was beginning to list rather alarmingly. I came onto the scene just in time to miss the preceding bit where most of the mistakes had been made, but just in time to start seeing their effects start to become apparent. It’s no fun joining a project and immediately realising that you’re going to have to fight your way to the lifeboats before long! :-)<br /><br />Mind you, it’s not been as bad as some projects I’ve worked on, but in many ways it’s been even more frustrating, because success was so close, and now it’s oh so far.<br /><br /><br /><span style="font-size:180%;">The 10 lessons</span><br /></span><span style="font-size:100%;"><br /><span style="font-weight: bold;">1. People have to be aligned to project success</span></span><br /><span style="font-size:100%;"><br />If people can succeed at the expense of the project, then the project will suffer. If you make it almost necessary for them to bury the project to further themselves, then stand clear of the stampede for the shovels!<br /><br />People are not intrinsically evil. They want to do the right thing and they will too, if given the chance. However, if you inadvertently stack the environment such that the only way they can advance their own position is by stepping on someone else’s face, then there will be a lot of people wandering around with bloodied mugs. It’s the responsibility of the project manager(s) to align individuals and teams properly, so everyone is pulling together towards project completion and success.<br /><br />Fail to do so and you doom the project to delay and possible failure.<br /><br />Some things to keep in mind:<br /></span><ol><li><span style="font-size:100%;">There should be no gain in shunting blame between onshore and offshore.</span></li><li><span style="font-size:100%;">Onshore should not be allowed to ‘succeed’ by leaving offshore behind and vice-versa.</span></li><li><span style="font-size:100%;">Onshore should gain nothing by show-casing itself independently before the client and neither should offshore.</span></li><li><span style="font-size:100%;">Onshore should be reassured that their roles and jobs are secure and that they will not be ‘Bangalored’.</span></li><li><span style="font-size:100%;">Offshore should not attempt to aggressively infiltrate and displace onshore. See point 4.</span></li></ol><span style="font-size:100%;"><br /><span style="font-weight: bold;"> 2. Architectural Vision is vital</span><br /><br />You don’t have to nail down each and every detail before you start the build. You can back-track once the build has started and update the design to reflect new learning’s. However, you cannot start the build without having a very clear picture of what you want, how you want it and how you’re going to get it.<br /><br />The first thing I noticed and flagged when I joined the project was a lack of project vision. No one really knew how exactly things were going to interact with each other or how changes to one component were going to impact another. There were a lot of things which were just up in the air and it was anyone’s guess as to where they were going to land.<br /><br />A major reason behind this was the lack of a proper POC (proof of concept). Had one been constructed, the entire design and build stages would have been several orders of magnitude easier. If there’s one thing I’ve taken away from this project, it’s this:<br /><br /><span style="font-weight: bold; font-style: italic;">Don’t skip the POC.</span><br /><br /><span style="font-weight: bold;">3. Never split tasks and teams across geographies</span><br /><br />Take a stale, grilled cheese sandwich and start pulling it apart. You’ll notice that there’re all kinds of tendrils and gloopy bits and amoebic pseudopodia keeping the ends together. There’s also a rather distressing smell, but that’s orthogonal to our discussion (thanks be to God). Now if you pull the bits apart far enough, the tendrils start to snap and you’re eventually left with two soggy pieces of bread rather than a single, disgusting whole.<br /><br />The communication links within a team look like those tendrils of stale cheese. There’s a tremendous amount of communication which goes on within a team. You simply can’t stretch those links across a continent and expect them to hold together. You won’t end up with one team, but two distinct teams.<br /><br />Now if you acknowledge that and formalise the interface between the two teams, then there is no problem. However, if you ignore the separation you’re going to end up facing all kinds of problems, all of which can be traced to the narrow communication bandwidth.<br /><br />In short, stack two sandwiches one on top of the other if you want, but don’t try to pull one apart. That’s just nasty.<br /><br /><span style="font-weight: bold;"> 4. If analysis is incomplete, it’s a major red flag</span><br /><br />Is analysis incomplete? Are the analysts walking around looking sheepish and mumbling something about Agile project management? Well, then, start screaming now and don’t stop till they bundle you away in the coat with the wrap around sleeves. Electro-shock therapy is positively relaxing compared to what you’re going to go through otherwise.<br /><br />Not convinced? Then be prepared for a constant stream of ‘defects’ which are simply holes in the requirements and specifications. Watch the analysts dodge and deflect criticisms as they desperately try to blame everyone but themselves. Laugh as the client tears the hair off his head in frustration. Cry as you work week-ends to try and reduce the defect count. It’s a never ending spectacle of terror and rage!<br /><br />Coming soon to a project near you! Well, unless you insist that the analysis be up to snuff before you start to build the application. I don’t care how much the client is screaming, complete the analysis. To do otherwise will simply postpone the whipping, not help you avoid it.<br /><br /><span style="font-weight: bold;">5. You can’t estimate use cases which have not been analysed yet</span><br /><br />Seems pretty obvious, doesn’t it? So why oh why did the drivers of this train wreck go right ahead and do that? Why oh why did they then commit on these fantastical dates to the client? And why oh why did we not fall over ourselves laughing when they wanted us to meet those deadlines?<br /><br /><span style="font-weight: bold;"> 6. If the onshore team has never done offshore before, it’s a major project risk</span><br /><br />There’s a first time for everything and ignorance is nothing to be ashamed of. However, not recognising the lack of experience as a project risk and not mitigating it is inexcusable. Do not pass ‘Go’, do not collect $200. It’s straight to jail for you.<br /><br /><span style="font-weight: bold;">7. One month RUP iterations are too short</span><br /><br />A one month <a href="http://en.wikipedia.org/wiki/Rup">RUP</a> iteration may be too short. The team was always running to keep up, with hardly any time to breathe. With a one month iteration, you have one week of defect fixing from the previous iteration, two weeks of build activity and then one week for integration. Of course, you’ve not actually planned for that one week of defect fixing, so everything is running behind schedule from the get go.<br /><br />You have to choose a pace which is sustainable. Anything else is asking for developer frustration, burn-out and murderous rampages.<br /><br /><span style="font-weight: bold;"> 8. Requirements – keep them simple, keep them consolidated</span><br /><br />If you find yourself with more than 3-5 requirement documents in your design document’s references section, then you’re in trouble. Scattering requirements across too many documents means you’ll always miss something out and have to re-work it.<br /><br />Keep the analysts on a short leash. Left to themselves, they’ll loose themselves in a twisty maze of interdependent documents, all alike. Only it’s you who’s likely be eaten by a grue, not them.<br /><br /><span style="font-weight: bold;"> 9. Regular, formal communication is a must</span><br /><br />If the project can afford it, then get yourselves a full or part time secretary. Involve him in all your onshore/offshore meetings and have him keep the minutes and publish them. Appointing someone from within the team might also work, but people hate to keep minutes.<br /><br />You need at least two long video conferences a week to synchronise on design and one quick sync meeting a day for the team leads and testers. Keep them short.<br /><br /><span style="font-weight: bold;">10. Constant reviews are a must</span><br /><br />You have to keep reviewing project and team performance on a background thread. Someone has to have enough mental bandwidth to spend some time every Nth iteration examining all the problems faced in N-1 and apply any lessons learnt to N+1. Don’t expect the project manager to do this, since he’ll be too busy fighting fires. Ideally, this should be done by the delivery head or the project champion.<br /><br /><br />So that’s it. The project is limping along with the harried offshore build team chained to the oars. Morale is low and the pace is slow. However, it’s still likely that the project will be delivered in some form or another. We’ll have to wait and watch.<br /><br />The only bright spark is that the onshore team (which I’m holding responsible for much of the mess here) has had their bonuses canceled and are going to be getting coal in their stocking this year. Now that’s something to put a smile on Sadistic Santa’s face.<br /><br />Ho. Ho. Ho.</span><br /><br /><span><strong><a href="http://social.front.lv/">Socialize:</a></strong> <a href="http://del.icio.us/post?v=2&url=http%3A//azaidi.blogspot.com/2007/12/10-interesting-lessons-from-1-interesting-project.html&title=10%20interesting%20lessons%20from%201%20interesting%20project">del.icio.us</a> | <a href="http://digg.com/submit?phase=3&url=http%3A//azaidi.blogspot.com/2007/12/10-interesting-lessons-from-1-interesting-project.html&title=10%20interesting%20lessons%20from%201%20interesting%20project">digg</a> | <a href="http://reddit.com/submit?url=http%3A//azaidi.blogspot.com/2007/12/10-interesting-lessons-from-1-interesting-project.html&title=10%20interesting%20lessons%20from%201%20interesting%20project">reddit</a> | <a href="http://technorati.com/faves/?add=http%3A//azaidi.blogspot.com/2007/12/10-interesting-lessons-from-1-interesting-project.html">Technorati</a> | <a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A//azaidi.blogspot.com/2007/12/10-interesting-lessons-from-1-interesting-project.html&t=10%20interesting%20lessons%20from%201%20interesting%20project">Yahoo My Web</a></span>Arsalan Zaidihttp://www.blogger.com/profile/03116662629864832986noreply@blogger.com1tag:blogger.com,1999:blog-9346317.post-38109990234155791242007-11-03T21:41:00.001+05:302007-11-03T22:08:12.926+05:30Borged!I’ve finally started blogging again after a long hiatus, but this time it’s from the belly of the beast. I’ve been swallowed by the Borg. Yes indeed, I’ve abandoned my earlier aversion to formal pants servile ties and joined a large, faceless multi-national.<br /><br />Due to the vagaries of chance, I’ve always ended up in smaller companies before this. Things just turned out that way. Anyway, I’d always suspected that I might have a bit of difficulty fitting into a more formal corporate culture. Dilbert (the true guide to corporate culture everywhere!) didn’t paint too rosy a picture either :-) But surprise, surprise, it’s not so bad (<span style="font-size:78%;">he squealed, as he hung by his thumbs</span>), it’s not so bad at all.<br /><br />Some quick points of comparison:<br /><br /><ol><li><span style="font-weight: bold;">The Facilities:</span> Most smaller companies are unable to offer amenities like a bus service, a proper canteen, housing or other sorts of facilities. These may seem like little things, but they’re important hygiene factors. And speaking of hygiene, you finally get clean toilets! :-)</li><li><span style="font-weight: bold;">Training:</span> This is the first place I’ve been in which offers compulsory training; 40 hours at a minimum every year. More if you can swing it. Now, I’m not a fan of structured, formal learning (having been processed by enough educational institutions in the past), but it’s not a complete waste of time either.</li><li><span style="font-weight: bold;">The Impersonality:</span> Brilliant! I’m finally anonymous! :-) It feels great to be a little fish in a big pond, instead of things being the other way around. Now, this will surprise many people, but it’s actually tiring (and then eventually irritating) when everyone from the janitor to the CEO knows your name, face and birthmarks. This is probably the introvert in me talking, but there’s something to be said for being able to walk through the entire building and not have to constantly ‘Hi!’ everyone you see.</li><li><span style="font-weight: bold;">A larger pool of potential friends:</span> Now for the extrovert in me :-) In an organization of several tens of thousands of wage slaves, you’re bound to come across malcontent deviants as insane as you are. What’s that you said? So you're a fan of red staplers, coke bottle glasses and naked flames too? <a href="http://en.wikipedia.org/wiki/Office_Space">Brilliant</a> ! :-)</li><li><span style="font-weight: bold;">Openness:</span> Paradoxically, larger companies are more open. Try and get the owner of a SME to divulge the details about the companies finances or its future direction. You'll have to break out the pliers to get anything close to the truth. Public corporations are legally obliged to reveal their financial details and you can read about the companies prospects in the daily broadsheet.</li><li><span style="font-weight: bold;">Permanence:</span> The chances of you coming to work one fine day and finding a padlock on the door and shit-eating grin on your 'bosses' face are quite remote.</li><li><span style="font-weight: bold;">Multiple escalation paths:</span> Got a problem with your superior in a smaller company? Tough luck, he’s probably the owner (or a close relative – hello nepotism!). Either live with him or leave. In large organizations, there’s usually a structured escalation path and conflict resolution forums. It’s much easier to iron things out.</li><li><span style="font-weight: bold;">Professionalism:</span> The people you’re working with were (theoretically/presumably) hired because they are the best fit for the job, not because they’re the owner’s retarded cousin from Jalgaon or a member of his community.</li><li><span style="font-weight: bold;">Varied Projects:</span> You don’t need to switch companies to switch projects.</li><li><span style="font-weight: bold;">Brand Recognition:</span> Having to explain what your company does every time gets real old, real fast.</li><li><span style="font-weight: bold;">Better Opportunities for Travel:</span> You don’t get many big spenders contracting with smaller companies. If you want to travel a bit, it’s better to join a larger firm.</li><li><span style="font-weight: bold;">Better long term prospects:</span> Finally, room to grow! Larger firms have more space for growth, bother vertically and horizontally. In smaller organizations, I’ve usually ended up in a position where the only way up is to kill the owner or marry his daughter (preferably both). It feels great to be able to contemplate a career plan which doesn’t include the liberal use of rat poison to open up some space in the ranks first.<br /></li></ol><br />So what’s the reason behind the differences? It’s all pretty straight-forward: money and scale. And one more thing (echo’s of which can be found in <a href="http://azaidi.blogspot.com/2007/07/development-and-delivery-or-management.html">this post</a>). Larger organizations are run by employees in part for their own benefit and not the benefit of nebulous, anonymous ‘shareholders’. It’s not fair to the actual owners (a.k.a shareholders, a.k.a. chumps), but it’s a fact.<br /><br />“<span style="font-style: italic;">What’s that you say, the team’s feeling ‘stressed’? Well, it’s off to Lonavla for a week-end then!</span>” – Manager in Faceless Multinational Pvt. Ltd.<br /><br />In smaller companies, the owner’s breathing down your neck every time you fill in an expense account.<br /><br />“<span style="font-style: italic;">What’s that you say, the team’s feeling ‘stressed’? Well, call them in on the week-end for a side project I’ve been thinking about, that’ll cheer them up!</span>” – Hari Sadu (SME CEO)<br /><br />Maybe the only reason I’m enjoying myself here is because of ye olde “Herbage be greener on the other side”. Or maybe things really <span style="font-style: italic; font-weight: bold;">are</span> better over here. Time will tell. But as I contemplate by assimilation into the beast, I have to accept that the Borg were right after all.<br /><br />Resistance <span style="font-style: italic; font-weight: bold;">was</span> futile.<br /><br /><span><strong><a href="http://social.front.lv/">Socialize:</a></strong> <a href="http://del.icio.us/post?v=2&url=http%3A//azaidi.blogspot.com/2007/11/borged.html&title=Borged%21">del.icio.us</a> | <a href="http://digg.com/submit?phase=3&url=http%3A//azaidi.blogspot.com/2007/11/borged.html&title=Borged%21">digg</a> | <a href="http://reddit.com/submit?url=http%3A//azaidi.blogspot.com/2007/11/borged.html&title=Borged%21">reddit</a> | <a href="http://technorati.com/faves/?add=http%3A//azaidi.blogspot.com/2007/11/borged.html">Technorati</a> | <a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A//azaidi.blogspot.com/2007/11/borged.html&t=Borged%21">Yahoo My Web</a></span>Arsalan Zaidihttp://www.blogger.com/profile/03116662629864832986noreply@blogger.com2tag:blogger.com,1999:blog-9346317.post-57670353979759953582007-10-28T22:38:00.000+05:302007-10-28T22:56:16.963+05:30BlinkenlightsI’ve been struck by a sudden interest in Electronics and Electricity. It’s not too surprising to me, since I was drawn to programming through my interest in computer hardware. In fact, I was first bitten by the bug while in college and I would while away hours in the library, laboriously reading Horowitz's “The Art of Electronics”. However, the siren song of computer programming and the gentler learning curve soon hijacked my interest and I haven’t looked back since. Until now.<br /><br />So what sparked my interest now? I was reading an article in Popular Mechanics covering their annual <a href="http://www.popularmechanics.com/breakthrough07">Breakthrough Conference</a> and one of the winners was the <a href="http://www.ecogeek.org/content/view/1081/">Windbelt </a>. I was stunned by the simplicity of the design, its cleverness; by its down-right, flat out hackish nature. Simple and effective. It also lead me to start researching the topic of <a href="http://en.wikipedia.org/wiki/Appropriate_technology">Appropriate Technology</a> and I was hooked. Further reading of <a href="http://www.makezine.com">Make Magazine</a>, <a href="http://www.ecogeek.org">EcoGeek</a> and <a href="http://www.hackaday.com">Hack a Day</a> just made things worse :-)<br /><br />I’ve always had an interest in making things. Unfortunately, I was always stymied by my lack of electronic knowledge. The age of steam and gearing is long past. If you want to make anything of any significance, you have to stick a circuit in it. That’s what drew me to electronics in college, but the steep learning threw me off. This time, I have a better grasp of what I want and how to get there.<br /><br />My major mistake was to try and use college text books as my source of information. This is an absolutely terrible idea if you’re not actually in a college course! College text books are geared towards helping students pass tests and not necessarily towards helping the reader acquire any actual, usable skills. Tests are treated as ends in themselves. This is precisely the wrong approach if you’re an enthusiast or a hobbyist. You’re interested in the subject because you want to get things done ASAP. If you need deep theoretical knowledge, you’ll pick it up when required. Show me the <a href="http://en.wikipedia.org/wiki/Blinkenlights">blinkenlights</a> already!<br /><br />This time around, I’ve managed to track down some electronics books for hobbyists and there’s a world of difference. No doubt, I’ll pick up some massive canonical tome sometime in the future to fill in the gaps, but by then I actually expect to have a structure with gaps worth filling. If I were to start off with the doorstop, I’d still be stuck on chapter 5 months later. :-)<br /><br />So anyway, if I stick with my study plan, I hope to be able to build simple devices in a couple of months time. I’m particularly interested in eco-friendly power generation, like pico/micro hydro-power and wind power. Stuff that is simple/cheap to setup and simple/cheap to run. That’s the mantra that works in the developing world, which is what I want to target.<br /><br />Ambitious much? You bet! :-) but at worst, I’ll end up wasting a few (hundred) after-work hours and pick up a thorough understanding of computer hardware. Building up your own board to support a microcontroller and writing code which has only a couple of Kb of EPROM and 128 bytes (!) of RAM (OS, what OS?) is going to be a very useful learning experience in any case.<br /><br />People who know me well are probably holding their heads and groaning after reading this missive. I’m notorious for starting projects and dropping them half-way when I'm distracted by the next shiny thing and I lose interest in what I’m currently working on. There’s no guarantee this won’t happen this time as well, but I’m hoping that I’ve become a little more stable over the years (Ha!). Let’s see how this turns out. :-D<br /><br /><span><strong><a href=http://social.front.lv/>Socialize:</a></strong> <a href=http://del.icio.us/post?v=2&url=http%3A//azaidi.blogspot.com/2007/10/blinkenlights.html&title=Blinkenlights>del.icio.us</a> | <a href=http://digg.com/submit?phase=3&url=http%3A//azaidi.blogspot.com/2007/10/blinkenlights.html&title=Blinkenlights>digg</a> | <a href=http://reddit.com/submit?url=http%3A//azaidi.blogspot.com/2007/10/blinkenlights.html&title=Blinkenlights>reddit</a> | <a href=http://technorati.com/faves/?add=http%3A//azaidi.blogspot.com/2007/10/blinkenlights.html>Technorati</a> | <a href=http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A//azaidi.blogspot.com/2007/10/blinkenlights.html&t=Blinkenlights>Yahoo My Web</a></span>Arsalan Zaidihttp://www.blogger.com/profile/03116662629864832986noreply@blogger.com2tag:blogger.com,1999:blog-9346317.post-5575908048245456582007-07-11T15:38:00.000+05:302007-07-11T17:53:54.853+05:30Development and Delivery or Management and Marketing Gimmicks?<span class="style2"><strong>SURGEON GENERAL’S WARNING:</strong> </span>The following post contains extreme amounts of cynicism brought on by excessive contact with various marketroids and PHBs. Read at your own risk. May lead to hair-pulling, spontaneous gnashing of teeth and depression.<br /><hr /><br /><br />I’ve been working for a fairly typical, small IT services shop over the last year or so and I’ve seen projects come (rarely) and projects go (often). I’ve become increasingly frustrated by the insistence of upper management on concentrating on the wrong things, viz. management and marketing gimmickry rather than core delivery. I’ll be leaving this place in a couple of days (Hallelujah! :-), so here is an amalgam of what I’ve learnt about servicing your clients and knowing your markets (usually by watching us fail to do so properly).<br /><br /><span style="font-size:100%;"></span><br /><span style="font-weight: bold; font-style: italic;">At the lower end of the SME segment, the customer is more concerned about the actual delivery/success of the project while at the higher end, he's more concerned about the perception of delivery/success.</span><br /><br /><br />Let me illustrate what I mean by taking an extreme example. Let’s compare the actions and attitudes of a large trans-national IT services company (Big Corp) v/s a one man code shop (One Man Army a.k.a. Rambo). The actual situations below are not directly applicable except in the most extreme cases since you’ll no doubt be somewhere in the spectrum between Big Corp and Rambo, rather than at the ends of the rainbow. You’re relationship with your customer will thus be suitable nuanced.<br /><br /><br /><span style="font-size:130%;">The ‘customer’</span><br /><br />Big Corp’s end customer is usually <span style="font-weight: bold; font-style: italic;">not</span> the actual business entity they’re dealing with. It’s far more specific. It’s actually the <em>business person</em> they’re interacting with; the guy who’s brought them in. A ‘company’ has no mind of it’s own and despite the legal precedent set in many countries, it is not a ‘person’ in any sense of the word. It has no concept of profit or loss, or success or failure (or right and wrong for that matter). The people within it do.<br /><br />This may seem like an extremely trite observation, but it is central to understanding the actions of any business. In any business relationship, the vendor/consultant/etc. will try and align themselves to the people they’re reporting to, <strong><em>not</em></strong> to the business at large. If an action will help their corporate patron succeed (and thus help them succeed) at the cost of the client business entity, they will do it<br /><br />This is true for the one man shop too, but at the market level he operates within, he deals with people who are directly and immediately affected by the success or failure of the business as a whole. He’s usually dealing with the business owner or is only one step removed from him. He thus has to justify his presence by providing actual, immediate and tangible business benefits. He has to deliver.<br /><br /><br /><span style="font-size:130%;">The end goal</span><br /><br />Now keeping in mind that the end customer is not the business but someone within it, the end goal shifts in a subtle way. It’s no longer necessarily about providing value, but the <em>perception of value</em>. Big Corp has to concentrate on providing its corporate patrons with ammunition they can use in the boardroom. They have to justify the expenses they’re incurring and to bolster their position. A project which is wildly successful, but cannot be used to further the position of the patron is useless compared to another which is a failure, but can be successfully spun as being otherwise.<br /><br />The goal is to help the customer (i.e. Big Corps corporate sponsor) to move up the ladder, thus putting him in a position to reward Big Corp with larger and juicier contracts.<br /><br />Rambo on the other hand, has to stay on the ball and actually deliver the product as specified. In a smaller business, any investment has to start showing returns pretty fast and a failure to do so can be catastrophic. Small business owners are infamous for trying to squeeze the maximum benefit out of every dime, since the dime in question usually belongs to the owner himself. The one man shop therefore cannot simply deal in perceptions, but has to provide tangible benefits in order to justify its presence. Its goal is thus to deliver the product and satisfy the customer (which is usually the actual business, not an employee within it) in order to receive more contracts in the future.<br /><br /><br /><span style="font-size:130%;">The ‘product’</span><br /><br />The end product description too now undergoes a subtle change. The product is thus not necessarily working software - in time and under budget - but the perception of this having been delivered. Any roll-on effects on the business are usually so delayed that they can be safely ignored or blamed on other people later.<br /><br />Rambo on the other hand, is stuck trying to actually deliver the product as specified.<br /><br /><br /><span style="font-size:130%;">The deliverable</span><br /><br />Now we come to the meat of the matter. Having laid out the realities of life in the industry, what is the actual deliverable expected of the vendor and thus, what is it that is actually delivered.<br /><br />Big Corp will concentrate on strengthening it’s corporate sponsor. Quick on-time delivery of the product is one way to do this, but it may be easier and cheaper to provide him with talking points, studies and white-papers instead. For example, Big Corp will spend quite some time giving it’s sponsors documents and presentations which will show just how profitable it is to farm business out to Big Corp like entities (but especially to Big Corp). Thus the deluge of studies favouring flavour-of-the-month management methodologies and out-sourcing techniques. A quick glance at the web site of any large IT vendor will show it to be replete with things of this nature.<br /><br />The one man shop will concentrate on quick, on-time delivery. It’s very difficult for him to duck the bullet and find excuses for any defects. He <em>has</em> to deliver! Since he’s smaller, he doesn’t have a vast pool of potential <strike>victims</strike> clients to fall back on. Since the investment of the business in him is usually small as well, it’s easy to cut him adrift. Having relatively more to lose and few ways of weaseling out of his obligations, Rambo is usually forced to do a better job of things, or perish trying.<br /><br /><br /><span style="font-size:130%;">The end</span><br /><br />So what does all this mean for smaller IT service shops? Simply this.<br /><br /><strong>Cut the crap.</strong><br /><br />If you're a small company, you need to concentrate on development and delivery rather than trying to copy the big boys and talking about ‘management initiatives’, two-in-a-box hierarchies and all that jazz. Your customer is not interested in your marketing spiel because the market you’re trying to serve is extremely result oriented. Save the bullshit for when you’re all grown up.<br /><br />Figure out how to deliver projects on time and under budget or be forced out of the market. It's as simple as that.<br /><br />In fact, it's so simple and obvious, I just might have to write a white-paper on it...<br /><br /><span><strong><a href=http://social.front.lv/>Socialize:</a></strong> <a href=http://del.icio.us/post?v=2&url=http%3A//azaidi.blogspot.com/2007/07/development-and-delivery-or-management.html&title=Development%20and%20Delivery%20or%20Management%20and%20Marketing%20Gimmicks%3F>del.icio.us</a> | <a href=http://digg.com/submit?phase=3&url=http%3A//azaidi.blogspot.com/2007/07/development-and-delivery-or-management.html&title=Development%20and%20Delivery%20or%20Management%20and%20Marketing%20Gimmicks%3F>digg</a> | <a href=http://www.furl.net/storeIt.jsp?t=Development%20and%20Delivery%20or%20Management%20and%20Marketing%20Gimmicks%3F&u=http%3A//azaidi.blogspot.com/2007/07/development-and-delivery-or-management.html>Furl</a> | <a href=http://reddit.com/submit?url=http%3A//azaidi.blogspot.com/2007/07/development-and-delivery-or-management.html&title=Development%20and%20Delivery%20or%20Management%20and%20Marketing%20Gimmicks%3F>reddit</a> | <a href=http://www.rojo.com/add-subscription/?resource=http%3A//azaidi.blogspot.com/2007/07/development-and-delivery-or-management.html>Rojo</a> | <a href=http://www.spurl.net/spurl.php?v=3&title=Development%20and%20Delivery%20or%20Management%20and%20Marketing%20Gimmicks%3F&url=http%3A//azaidi.blogspot.com/2007/07/development-and-delivery-or-management.html>Spurl</a> | <a href=http://technorati.com/faves/?add=http%3A//azaidi.blogspot.com/2007/07/development-and-delivery-or-management.html>Technorati</a> | <a href=http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A//azaidi.blogspot.com/2007/07/development-and-delivery-or-management.html&t=Development%20and%20Delivery%20or%20Management%20and%20Marketing%20Gimmicks%3F>Yahoo My Web</a></span>Arsalan Zaidihttp://www.blogger.com/profile/03116662629864832986noreply@blogger.com2tag:blogger.com,1999:blog-9346317.post-64421932561169965432007-05-23T11:38:00.000+05:302007-05-23T11:40:52.729+05:30The Great SwitcherooThere is a God!<br /><br />Just a couple of days ago, I decided to back up my system and lo and behold, within an hour or two of my having done so, my partition tables mysteriously disappeared and I had to re-partition and reformat my hard disk. I'm blaming it all on solar flares.<br /><br />So anyhow, I'm left with one clean disk and no operating system to put on it. I'd recently finished downloading Kubuntu and so I decided to go ahead and install that.<br /><br />Now anyone who's known me for any length of time knows that I've only every run GNOME on my system(s) since time immemorial. And I've been using Gentoo since the Universe first flashed into being. I firmly believe that the Earth is simply the result of an errant 'emerge world', which explains a lot of things.<br /><br />Unfortunately, I no longer have the time to download ginormous source tarballs and sit patiently while they compile. Squeezing out that last drop of performance out of my system no longer excites me as it once did and quite frankly, I'm no longer convinced that looking at compiler messages as they flash by increases your intelligence. Portage has been a bit of a mess recently and by the end, my 3 year old installation couldn't compile some basic packages I needed.<br /><br />GNOME too has become a bit of an embarrassment lately. I mean look at it! It's become all corporate-y and boring. It's like cola that's been left out too long; flat, sugary and unwholesome.<br /><br />So it's been out with the old and in with the new. KDE replaces GNOME and (K)Ubuntu replaces Gentoo. And I'm loving it! KDE is absolutely brilliant to work with. It's very configurable and I absolutely LOVE YaQuake. Apt-get is sweet too and it's brilliant how little time it takes to download and install stuff. The installation was a breeze and the default application set is fairly decent. Of course, I have 'special' needs, but I can satisfy them fairly easily.<br /><br />Kubuntu is really a lovely distribution and I plan to stick with it for a long time to come. Or at least until the next solar flare anyway...Arsalan Zaidihttp://www.blogger.com/profile/03116662629864832986noreply@blogger.com1tag:blogger.com,1999:blog-9346317.post-84885643705328214572007-04-16T14:22:00.000+05:302007-04-17T12:19:05.921+05:30Zen and the Art of Functional ProgrammingI’m a regular at <a href="http://programming.reddit.com/">http://programming.reddit.com</a> and just about every day there’s at least one (or two or three) posts about some functional programming language or the other. Usually it’s <a href="http://en.wikipedia.org/wiki/Haskell_%28programming_language%29">Haskell</a> which is being showcased, though you’ll also find entries for <a href="http://en.wikipedia.org/wiki/Erlang_%28programming_language%29">Erlang</a> and occasionally for some of the more obscure ones like <a href="http://en.wikipedia.org/wiki/O%27caml">O’Caml</a> or <a href="http://en.wikipedia.org/wiki/Dylan_programming_language">Dylan</a>. I finally zoned out under the constant barrage of propaganda and moaning softly (“brains! braaaaiiiiins!) zombie-shuffled over to check out what the fuss was all about.<br /><br /><span style="font-size:130%;">What’s all this about Zen then?</span><br /><br />The Zen of programming is when you internalise the correct way of solving a problem using the programming model you’re working with. You might start off programming with something like C, using it in a classic procedural fashion. When you move from <a href="http://en.wikipedia.org/wiki/Procedural_programming">Procedural Programming</a> on to something like <a href="http://en.wikipedia.org/wiki/Object-Oriented_Programming">Object Oriented Programming</a> (OOP) using Java or C++ etc., it’s a bit of a culture shock at first. You keep trying to program procedurally, fighting the language every step of the way. There finally comes a moment however, when all the abstract concepts behind OOP fall into place with an almost audible snap and suddenly, in a moment of epiphany, you attain OOP enlightenment.<br /><br />Now I can’t say I’ve achieve that level of union with the Tao of Functional Programming, but I am starting to finally grok what the whole thing is about. However, all opinions listed below are subject to rather radical change!<br /><br /><span style="font-size:130%;">What’s Functional Programming (FP)?</span><br /><br />I’ll save me some time and copy-paste in some definitions.<br /><br /><span style="font-style: italic;">Functional programming is a style of programming that emphasizes the evaluation of expressions, rather than execution of commands. The expressions in these language are formed by using functions to combine basic values. A functional language is a language that supports and encourages programming in a functional style.</span><br /><br />-- <a href="http://www.cs.nott.ac.uk/%7Egmh/faq.html">FAQ for comp.lang.functional</a><br /><br /><span style="font-style: italic;">Functional programming is a programming paradigm that treats computation as the evaluation of mathematical functions and avoids state and mutable data. It emphasizes the application of functions, in contrast with the imperative programming style that emphasizes changes in state.</span><br /><br />-- <a href="http://en.wikipedia.org/wiki/Functional_programming">Wikipedia</a>.<br /><br />As far as I can make out so far, FP is all about decomposing the problem down to the various algorithms and data transformations involved and then cleanly enumerating them. We don’t really need to worry about the ‘<span style="font-style: italic;">objects</span>’ involved (there aren’t any), or their relationship with one another. It’s all about dividing and conquering the problem by slicing it up into small bits and then figuring out what we need to do to each of the slices. Rather than identify objects, couple the data with behaviour and then deal with those objects, we pass both data and code around as required (and as easily), assembling and disassembling relationships as required.<br /><br />Mind you, this is pretty much the SOP for most programming tasks, it’s just that FP makes it easier to work in this fashion. Besides, if you un-gag the Lispers for a moment, they will endlessly lecture you about the benefits of having small bits of code operate on large blobs of data. Rather like a shoal of Piranha reducing a buffalo. Be sure you re-gag them once you’re through or else they’ll never shut up.<br /><br /><span style="font-size:130%;">Why spend time learning Functional Programming?</span><br /><br />My primary reasons were:<br /><br /><ol><li><span style="font-weight: bold;">A New Paradigm:</span> Learning a new programming paradigm helps to stretch your mind and makes you a better programmer overall, even if you never directly apply any of the new techniques you’ve used. Notice I’m talking about paradigms here, not languages. Learning C++ if you know Java may make you a lightly better programmer over all, but going from Procedural programming to OOP for example, can be a mind-bending experience.</li><li><span style="font-weight: bold;">The Next Big Thing:</span> The Functional programming weenies just can’t stop babbling about how they’re going to take over the world. And who knows, they just might. It takes a while for this sort of momentum to build up (look how long it took OOP to become mainstream!) but the signs abound; FP just might be the next big thing.</li><li><span style="font-weight: bold;">Increased Productivity:</span> Anecdotal evidence suggests that writing code in a functional way leads to smaller, cleaner code and fewer bugs. The logic of the algorithm is clearly detailed and many of the internal details of the operations are hidden away, leading to less clutter. I’ve often heard that FP is about describing <span style="font-weight: bold; font-style: italic;">what</span> you want <span>done</span>, while Imperative Programming ends up detailing <span style="font-style: italic; font-weight: bold;">how</span> you want it done as well.</li><li><span style="font-weight: bold;">It’s Popping Up Everywhere!:</span> FP isn’t all that obscure any more. You’ll regularly come across bits of functional code in various decidedly non FP languages. Java’s <a href="http://java.sun.com/javase/6/docs/api/java/util/Comparator.html">Comparator Interface</a> is a good example of a common FP idiom, where you pass along a bit of code as a parameter as well as the data and have the code act on the data. Java 7 might have <a href="http://blogs.sun.com/gbracha/entry/achieving_closure">closures</a> as well, which are already to be found in Ruby. Python has things like list comprehension, which has a distinctly FP feel and so on. I thought I might as well experience all these concepts in one integrated functional package rather than piecemeal.<br /></li></ol><br /><span style="font-size:130%;">FP vs OOP</span><br /><br />Invariably when you start to talk about a new programming model, you’re met with slack jaws, blank stares and mewling cries of “But, but, but… OOP!”. Now I’m not one to deride OOP because I like the concept quite a lot. It’s a great fit for a range of applications and can really help model a lot of complex domains and interactions. However, it isn’t the end all and be all of computing that the OOP aficionados (and their groupies) make it out to be. One particular domain which seems to be a bit of a mismatch is the Web.<br /><br />Most web programming involves a lot of pointless conversion from flat data to OOP and back again. Take a basic <a href="http://en.wikipedia.org/wiki/Create%2C_read%2C_update_and_delete">CRUD</a> application. The user enters plain data without any OOP savvy behaviours or what have you. Just characters strung together. When he hits submit, we convert this data to fit into our OOP model and play around with it in the middle layer. We then flatten it once more and stick it in the database. We might also have some stored procedures in the database as well (usually written in a non-OOP language/manner). So the only place we’re really using OOP is in the middle layer and most of what we’re doing is simply converting data from one model to another. It’s just a huge waste of time. Embrace the fact that all we want to do is apply transformations to data and use FP (which is admirably suited to the role) to do just that.<br /><br />I mean, <span style="font-weight: bold; font-style: italic;">what’s so Object Oriented about Servlets?</span> They're actually very functional. You usually just implement one method/function which accepts user data as parameters, munges it and then forwards more data somewhere else, where we display the response.<br /><br /><span style="font-size:130%;">Reuse?</span><br /><br />As far as reuse goes, OOP hasn’t proven to be all that. Look at the Java Library. It’s just a bunch of methods. Useful one’s no doubt, but how many times have you inherited from one of it’s classes (other than Object of course! J)? You make an object which represents some data and you call methods on it. Most of the reusability is at the level of the methods. How much more useful then if we decouple the methods completely from the data, use <a href="http://en.wikipedia.org/wiki/Duck_typing">duck typing</a> and work on just about anything that’s passed in? Reusablity goes through the roof! Certainly, it won’t be any less than an OOP design.<br /><br /><span style="font-size:130%;">Which FP Language should I go for?</span><br /><br />“MMRRGH! (LISP!)” scream the Lispers through their gags, shouts of “Haskell!” from one corner and “Erlang!” from the other. They choice is endless. There are a whole load of functional languages out there, so which one should you pick up?<br /><br />My 2p? Go for Erlang and Haskell. Both are relatively pure functional languages (unlike chimera like O’Caml, which are partly OOP and Lisp which is undifferentiated gloop and can be anything you want it to be) and fairly mainstream. Mind you, there’s nothing bad about being multi-paradigm, but when you’re learning FP, it’s best to suffer under a bit of disciple and be forced to be functional. Erlang is actually used in <span style="font-style: italic;">The Real World</span>, though largely only in specialised hardware like network switches etc, which Haskell is under active developments and has a lot of mind-share.<br /><br />I’m learning Erlang first because along with being FP, it has slightly different way of going about threading, though I hope to pick up Haskell as well (since it has another way of doing threading as well).<br /><br /><span style="font-size:130%;">An Aside on Threading with Erlang and Haskell</span><br /><br />Both Erlang and Haskell have taken a novel and (to me) refreshingly different way of going about threading. Neither concept is blindingly innovative, but it’s the first time I’ve seen it implemented as part of a language.<br /><br />Threading is really coming into its own now. We’re moving into an age of massively multi-core CPUs where each core may be less powerful than the chips of today, but there’ll be so many per chip that the net speed will be tremendous. However, programs don’t multi-thread themselves. Developers have to identify concurrent paths and co-ordinate their interactions; something which can be quite difficult to code and fiendishly difficult to debug.<br /><br />One advantage of FP is that functional code is inherently much easier to parallelise. Since functions don’t access or affect global state and act only on their parameters, you can infer possible parallel paths and have them run concurrently.<br /><br />For e.g.<br /><br /><span style="font-family:courier new;">A = foo()<br /></span><span style="font-family:courier new;">B = bar()</span><br /><br />Here, the interpreter can run both foo() and bar()in parallel since they are not related and thus are guaranteed not to affect each other.<br /><br />But wait, there’s more! Both Erlang and Haskell make threading even easier with innovative threading models. Rather than have process communicate through shared memory where you have to handle locking/concurrency yourself, both help make the process of writing multi-threaded code much easier.<br /><br /><ol><li><span style="font-weight: bold;">Erlang (Actor/Message Model) :</span> It’s Unix IPC all over again! You basically have pipes which you use to communicate between processes. Messages are asynchronous and not location specific, so processes can migrate to different machines transparently. Errors are piped to related processes as well, giving you robust error handling. No shared memory and scaling it trivial. In fact, the possibility of basically almost unlimited scaling across multiple machines is what really draws me to Erlang and has me drooling like an idiot. Write your code properly and you can just keep slotting in boxes. Erlang also has the ability to update code while it’s running, which means theoretically zero downtime if you’re careful. And it’s all actually in use in the telecommunications industry, so all this is real, not vapour.</li><li><span style="font-weight: bold;">Haskell (Software Transactional Memory Model) :</span> Database transactions, but in local memory! Separate threads run within their own transactions and see a consistent view of the world. No need to explicitly lock bits of shared memory, we just let the system handle all the error prone bits and concentrate on our logic, confidently that our threads won’t be stepping on each other toes. This is a really powerful abstraction and it’s something that had me smacking my forehead, wondering why I didn’t think of it before. However, I see some fundamental problems with multi-machine scalability. This is a fairly well explored problem in the database world and I’m not sure I want my code doing two phase commits and roll-backs in a cluster. Still cool though.<br /></li></ol><br /><span style="font-size:130%;">Conclusions</span><br /><br />There’s still a long way for me to go yet. I’m going to be going for a vacation in a couple of days, so there’s going to be a bit of a break in my journey of exploration. I hope to pick up the thread once more on my return and forge ahead. Let’s see why else I find worth writing about :-)<br /><br /><span><strong><a href="http://social.front.lv/">Socialize:</a></strong> <a href="http://del.icio.us/post?v=2&url=http%3A//azaidi.blogspot.com/2007/04/zen-and-art-of-functional-programming.html&title=Zen%20and%20the%20Art%20of%20Functional%20Programming">del.icio.us</a> | <a href="http://digg.com/submit?phase=3&url=http%3A//azaidi.blogspot.com/2007/04/zen-and-art-of-functional-programming.html&title=Zen%20and%20the%20Art%20of%20Functional%20Programming">digg</a> | <a href="http://www.furl.net/storeIt.jsp?t=Zen%20and%20the%20Art%20of%20Functional%20Programming&u=http%3A//azaidi.blogspot.com/2007/04/zen-and-art-of-functional-programming.html">Furl</a> | <a href="http://reddit.com/submit?url=http%3A//azaidi.blogspot.com/2007/04/zen-and-art-of-functional-programming.html&title=Zen%20and%20the%20Art%20of%20Functional%20Programming">reddit</a> | <a href="http://www.rojo.com/add-subscription/?resource=http%3A//azaidi.blogspot.com/2007/04/zen-and-art-of-functional-programming.html">Rojo</a> | <a href="http://www.spurl.net/spurl.php?v=3&title=Zen%20and%20the%20Art%20of%20Functional%20Programming&url=http%3A//azaidi.blogspot.com/2007/04/zen-and-art-of-functional-programming.html">Spurl</a> | <a href="http://technorati.com/faves/?add=http%3A//azaidi.blogspot.com/2007/04/zen-and-art-of-functional-programming.html">Technorati</a> | <a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A//azaidi.blogspot.com/2007/04/zen-and-art-of-functional-programming.html&t=Zen%20and%20the%20Art%20of%20Functional%20Programming">Yahoo My Web</a></span>Arsalan Zaidihttp://www.blogger.com/profile/03116662629864832986noreply@blogger.com11tag:blogger.com,1999:blog-9346317.post-9890403786699255272007-02-25T13:16:00.000+05:302007-02-25T13:10:57.038+05:30Generation Gap<span style="FONT-STYLE: italic">"The virtues required in military officers [in Second Generational militaries are] careful, even obsessive attention to process; avoiding risky decisions, and whenever possible making decisions by committee; avoiding responsibility; careerism, because success is measured by career progression; and generally shining up the handle on the big front door. Time is not very important, while dotting every i and crossing every t is vital, since at some point the auditors will be coming...As time goes on, efficiency tends to become more important than effectiveness...</span><br /><br /><span style="FONT-STYLE: italic">...the virtues a Third Generation military requires in its officers [are different]. Those virtues—eagerness to make decisions and take responsibility, boldness, broad-mindedness and a spirit of intellectual inquiry, contempt for careerism and careerists—are not wanted in Second Generation militaries, and officers who demonstrate them are usually weeded out early. A Third Generation culture is difficult to maintain, and even more—impossible perhaps?—to restore once lost."</span><br /><br />-- William S. Lind (<span style="FONT-STYLE: italic">Regression</span>)<br /><br />I’m a bit of an armchair general. It’s nothing more than a boyish fascination with things that clank around and go bang, but I do believe that the stratagems of war and the organisations which implement them have much to teach us. The battlefield is Darwinian by nature. If an idea has merit, then you live another day and if it’s DOA, then you’re KIA. In war, a lot of things are stripped to their core and stand naked in their essence. If an idea works on the battlefield, it’ll usually work just as well in a less lethal environment as well.<br /><br />Now this isn't exactly a stunning new insight or anything. MBA types have been proudly lugging around copies of "The Art of War" since at least the 80's and perhaps longer. However, I believe it's not just overarching stratagems which might have some value, but the nitty-gritty of day to day organisation as well.<br /><br />One area where there is a lot to be learnt, is in team organisation. An army deals with ‘projects’ which are under severe time, resource and quality pressures and with team members who are consequently under intense pressure as well. Ground realities change on a minute by minute basis and new challenges and opportunities pop up constantly. The quality of personnel is quite variable, which a few star performers and a whole load of dross, but everyone has to be put to work as best as possible. The overall techniques are well understood, but the devil is in the details of application. Hell, it sounds just like a software project! :-)<br /><br /><br /><span style="font-size:130%;">The Generation Gap</span><br /><br />Military historians tend to segregate the organisational structure of fighting forces into ‘generations’:<br /><br /><br /><ol><li><span style="FONT-WEIGHT: bold">First Generation armies/warfare:</span> This was the first proper organisation of forces beyond a violent mob. It is completely obsolete and no longer observed. We’re talking lancers in formation and cavalry charges here.</li><li><span style="FONT-WEIGHT: bold">Second Generation armies/warfare:</span> This generation is geared towards wars of attrition where both the enemy and your own men are de-individualised and treated as numbers. It’s all about lobbing the maximum tonnage of shells at one another and slow, steady advances, with victory dependant more on industrial capacity than brilliant planning. The communication is largely top-down, with (one hopes) military savants on top directing every move on the ground far below. WW 1 is a good example of this, with static lines of defence and trench warfare.</li><li><span style="FONT-WEIGHT: bold">Third Generation armies /warfare:</span> This relies on surprise and speed, and depends far more on the quality of the individual soldier. Units are small and highly independent and attempt to get inside the decision loop of the opponent, acting faster than he can respond. The lines of communication are more bi-directional here, with significant input coming from below. In fact, most tactical decisions will probably be made at the lower levels directly. The German Blitzkrieg from WW2 is a classic example of this type of warfare.</li><li><span style="FONT-WEIGHT: bold">Fourth Generation armies/warfare: </span>This is war by decentralised, non-state actors against states, populations and other non-state actors. Units are very small and cell like, almost completely independent and ideologically committed; relying on the media as much as on force of arms to achieve their aims. The recent military and strategic victory of <a href="http://en.wikipedia.org/wiki/Hizbullah">Hizbullah</a> over Israel in 2006 is a stunning example of the effectiveness of this strategy, if properly implemented. It’s Third Generation warfare on steroids.<br /></li></ol><br />So what’s the difference in levels of effectiveness? Let’s compare 3G to 2G first. The <a href="http://en.wikipedia.org/wiki/Wehrmacht">Wehrmacht</a> in WW2 was certainly 3G and performed very well against the rest of Europe. German tanks cut through the <a href="http://en.wikipedia.org/wiki/Maginot_Line">Maginot Line</a> with ease and swiftly defeated every army they faced. It required the combined resources of two continents (Most of Asia and Northern America) and several disastrous decisions on the part of the German high command to finally roll them back. When Allied forces war-gamed some of the battles after the war, they found that it required 25% more Allied troops to equal the performance of the Germans and this was attributed almost entirely to the high quality of the officer corps (in other words, their application of 3G concepts which requires well-trained, independent troops).<br /><br />Even more dramatic was the recent clash between a 4G and a 2G force, when Hizbullah defeated Israel (Israel was once a 3G force, but you don’t need to be a good soldier to massacre civilians and so the IDF has gradually withered in competence). By the last days of the war, Israel had fielded in excess of 40,000 troops, with artillery and air/naval support, while Hizbullah had only one light infantry brigade of around 3000 in the fight. They never felt the need to reinforce them. In other words, 3000 whipped 40,000. With a ratio of around 1:13, that means that Hizbullah was 13x or 1300% more effective than Israel. A truly staggering difference. Read this <a href="http://www.atimes.com/atimes/others/hezbollah.html">complete analysis</a> for more<br /><br /><br /><span style="font-size:130%;">Software organisations</span><br /><br />So what does all of this have to do with software projects? Well, my own observation is that software organisations can also be defined in much the same ways as military organisations. If we segregate them by generations, just like we did with armies, we get:<br /><br /><ol><li><span style="FONT-WEIGHT: bold">First Generation organisations:</span> The first groupings of programmers. Obsolete.</li><li><span style="FONT-WEIGHT: bold">Second Generation organisations</span>: Most service firms making bespoke software fall into this category. Projects are about size and scope, with managers trying to increase team size to the max. Developers are treated as cogs in a giant wheel; as perfectly replaceable components, to be swapped in and out as desired. It’s all about project plans, matrices and counting man-hours, a few PHBs attempting to control the entire project from above while the unwashed mill about below. It’s a war of attrition against the client and the goal, with rigid attention to rules and an emphasis on blind obedience.</li><li><span style="FONT-WEIGHT: bold">Third Generation organisations:</span> Most start-ups, especially those geared towards producing an application, fall into this category. Teams are small and the work fast-paced. Individuals care more about doing the job than looking like their doing the job. Leaders emerge almost spontaneously and eagerly accept new responsibilities. Innovation is encouraged and boldness is rewarded.</li><li><span style="FONT-WEIGHT: bold">Fourth Generation organisations:</span> I’m going to go out on a limb here and say that <a href="http://en.wikipedia.org/wiki/Free_software">Free Software</a> is probably Fourth Generational. You have widely distributed teams, amorphously organised and made up of disjointed individuals united only by ideology. Individuals and sub-teams join and leave almost at random, but the project still forges ahead under the leadership of a charismatic leader.<br /></li></ol>A comparison of how the various generations fare against one another is fairly straight-forward. Start-ups don't always succeed against entrenched players, but they're the ones who usually supply the surprise upsets and market changing products which unseat the Big Boys. Netscape, Google, Amazon and Apple are some names which come to mind. Companies like Google seem to instinctively realise that they must retain their 3G edge, even as they grow and we've seen a whole lot of very innovative ideas on project and people management come out of there.<br /><br />It's the 4G actors which are complete wild-cards. A good <a href="http://en.wikipedia.org/wiki/Open-source_software">Open Source</a> (though it's <a href="http://en.wikipedia.org/wiki/Free_software">Free Software</a> which is really4G) can either open up new markets and platforms for commercial concerns or completely take over a segment and devastate existing players. Or both.<br /><br />You can really go far with this analogy, co-relating the tactics and strategies of 4G armed forces with 3/4G software entities. Much can be gleaned from examining the successes of 3/4G actors against less evolved opponents. I might elaborate about that at a later time, since I have a truly marvelous post about that in mind, which this column is <a href="http://en.wikipedia.org/wiki/Fermat">too narrow to contain</a>.<br /><br /><span style="font-size:130%;">Personal Considerations</span><br /><br />There are few things which guarantee more frustration than being a 3G person in a 2G shop and there are few things more pathetic than a 2G person in a 3G team. The last part of the quote by Lind above, the bit about 3G personality types being weeded out early, is very relevant since it happens quite frequently. The person may not be physically removed, but his 3G <span style="FONT-STYLE: italic">characteristics</span> are usually excised. He may not leave the company, but he will dampen down his native enthusiasm and vigour and fall in line with the rest of the drones; at least for a little while. It can’t last forever though and eventually, he will leave for more hospitable shores.<br /><br />Organisations are not completely stagnant though. Small 3G organisations eventually grow larger and devolve into 2G ones, while large 2G behemoths may occasionally become 3G (or at least 2.5G) in times of crisis. This opens us new opportunities for dormant 3/2G types. You’ll see this happening all the time in armies. Generals who’ve done very well for themselves in peacetime armies are usually dead within months of the start of hostilities, killed either by the enemy or their own side. On the other hand, effective commanders who rise rapidly through the ranks during war are usually shunted aside once combat ends and it’s back to boardroom battles. History is replete with instances of charismatic Generals who’ve ended up committing professional or physical suicide once the war is over.<br /><br /><br /><span style="font-size:130%;">Some Parting Advice</span><br /><br />My personal experience is that the generation gap between your own personality and that of the organisation you work for can be the source of a lot of mental and emotional stress. Trying to swim against the current is very, very exhausting and only very rarely worth the effort. If you’re a 2G type, then accept that and work in an organisation which rewards your particular leanings and if you’re a 3G or 4G type, then for God’s sake, avoid <3G organisations like the plague. You may strike it lucky and end up in a 3G team in a 2G world, but that’s usually a complete fluke. Just skip the frustration and head straight to where you’ll be appreciated. That’s my personal experience and for once, I’m going to be applying this bit of advice to my own personal life.<br /><br />I can’t help it, this post's author just makes so much sense! :-DArsalan Zaidihttp://www.blogger.com/profile/03116662629864832986noreply@blogger.com3tag:blogger.com,1999:blog-9346317.post-44853578754505969322007-02-06T15:09:00.000+05:302007-02-06T15:12:00.950+05:30On the business of softwareA long, but very accurate quote from Joel <span class="blsp-spelling-error" id="SPELLING_ERROR_0" onclick="BLOG_clickHandler(this)">Spolsky</span>. I completely agree with both the points made by him. I wish I had more to say than that, but there really <span class="blsp-spelling-error" id="SPELLING_ERROR_1" onclick="BLOG_clickHandler(this)">isn</span>’t much else to add… :-)<br /><br /><em>"The number one thing is a micro-<span class="blsp-spelling-error" id="SPELLING_ERROR_2" onclick="BLOG_clickHandler(this)">ISV</span> shouldn't be one person, it should be two people at the very least and one of them should have the business and marketing and sales skills experience. The other one should have the tech skills and the programming and the inventing the product type of skills. That kind of partnership is far more likely to be successful than the individual working alone just because people don't usually have both of those skill sets and so they really need to all be covered.</em><br /><em></em><br /><em>Or if you have only the sales and marketing you're not going to be to be successful because you won't have a good product and if you don't have product development skills you won't be successful because no one will hear about you and the business side won't really work. Having two people, I feel, is crucial just to validate your idea, almost to keep each other motivated, bounce ideas off each other and so on - that sort of thing.</em><br /><em></em><br /><em>The first part is the minimum size for a micro-<span class="blsp-spelling-error" id="SPELLING_ERROR_3" onclick="BLOG_clickHandler(this)">ISV</span> that can go anywhere beyond a fun project.</em><br /><em></em><br /><em>The second part, and Bob alluded to this earlier, which is my prototypical example of the photo gallery which is probably nine million micro-<span class="blsp-spelling-error" id="SPELLING_ERROR_4" onclick="BLOG_clickHandler(this)">ISVs</span> have made an application where it's like "Hey, <span class="blsp-spelling-error" id="SPELLING_ERROR_5" onclick="BLOG_clickHandler(this)">everybody's</span> got these digital cameras my application lets you upload all your pictures and put them on the web and make web galleries." There have been about a million of these and a very tiny number of them have been successful and the vast majority of them have been instant flops. For some reason this is an incredibly appealing idea for software developers to do, maybe because they feel like they know how to do everything, all the steps they're going to need to do to write the code to make this work, but for some reason they never really make it work.</em><br /><em></em><br /><em>But what I've always told these people time and time again, and they never listen to me, is instead of making the generic "upload your pictures application" take a very, very small niche audience - wedding photographers - and make the ultimate application for wedding photographers. Find out exactly what wedding photographers need. There's a lot of money around wedding photographers, they get paid an awful lot of money, and figure out exactly what their <span class="blsp-spelling-error" id="SPELLING_ERROR_6" onclick="BLOG_clickHandler(this)">workflow</span> is. If you need to find wedding photographers because they're in the yellow pages and there are directories of these things. Call them all and find out what they want and try to sell them your solution.</em><br /><em></em><br /><em>And so what I always tell micro-<span class="blsp-spelling-error" id="SPELLING_ERROR_7" onclick="BLOG_clickHandler(this)">ISVs</span> is, and that's just an illustrative picture, try to narrow your potential audience almost as much as possible to get started. In order to bootstrap you're going to have to find a very small initial audience you can serve extremely well of people who all speak to each other. One you can find all in one place, where there's money being spent because you're going to need to get a part of it for this thing to work. And once you find that very narrow niche, that's the way you get bootstrapped and you can think about crossing the chasm as Jeffrey Morris says into other kinds of industries and other kinds of larger markets. But you really need to pick something vertical to start with."</em><br /><br />Read the rest at <a href="http://channel9.msdn.com/shows/The_MicroISV_Show">The <span class="blsp-spelling-error" id="SPELLING_ERROR_8" onclick="BLOG_clickHandler(this)">MicroISV</span> Show #10 - Joel <span class="blsp-spelling-error" id="SPELLING_ERROR_9" onclick="BLOG_clickHandler(this)">Spolsky</span></a>Arsalan Zaidihttp://www.blogger.com/profile/03116662629864832986noreply@blogger.com0tag:blogger.com,1999:blog-9346317.post-48131064537567989992007-02-05T18:26:00.000+05:302007-02-05T18:31:27.084+05:30CodephobiaGrady <span class="blsp-spelling-error" id="SPELLING_ERROR_0" onclick="BLOG_clickHandler(this)">Booch</span> had come to Manchester for a couple of days last month and I’d gone for his talk about <a href="http://www.cs.manchester.ac.uk/Events_subweb/special/turing07/">"The promise, The limits, The beauty of Software"</a>. There were several interesting themes explored, but it was one comment made by him, almost in passing, which really struck a chord with me<br /><br />He mentioned how he’s seen organisations which seem as if they’re afraid of code and that jibes with what I’<span class="blsp-spelling-error" id="SPELLING_ERROR_1" onclick="BLOG_clickHandler(this)">ve</span> noticed as well. An organisation or project or team which is completely tied up with process, to the extent that almost nothing can be done without reams of paper being produced, is usually a victim of <span class="blsp-spelling-error" id="SPELLING_ERROR_2" onclick="BLOG_clickHandler(this)">codephobia</span>. Before a single line can be written or modified, several Word documents will have to be either produced or updated, items in the project tracking system will have to be massaged, meetings will have to be called, recalcitrant team leads will have to cudgelled into submission and developers will have to be dragged to their seats – their nails leaving deep groves in the carpeting as they go.<br /><br />Now mind you, this <span class="blsp-spelling-error" id="SPELLING_ERROR_3" onclick="BLOG_clickHandler(this)">isn</span>’t the usual screed by frustrated programmers against the horrors of ‘Process’. The ability to track, managed and control a project is vital to it’s success. However, smart, successful firms realise that all of these things are a means to an end. The customer wants a <em>working application</em>, not reams of design documents and lists of tracked defects. All of these are meant to enable you to write code better and faster.<br /><br />This simple concept however, seems to be beyond the ability of many people. They act as if the various <span class="blsp-spelling-corrected" id="SPELLING_ERROR_4">artifacts</span> of process adherence were what the customer was paying them for and not the actual application. At heart, it’s all about being afraid of putting pen to paper - of producing the code - because that’s when the inadequacies will start to show and the incompetence will start to bubble to the surface, like marsh gas from a bog. In other cases, it’s the managers fear of the unknown. Most project managers are code-illiterate and so fear what they cannot understand or accurately track. They understand documents though and are happy to lose themselves in them. They’d love to have people code in Word if they could. Notice the popularity of code generators in such teams. It’s a dead give away :-)<br /><br />In any successful team that I’<span class="blsp-spelling-error" id="SPELLING_ERROR_5" onclick="BLOG_clickHandler(this)">ve</span> seen, the focus is completely on the code. Everything is subservient to it and team is made up of and lead by competent programmers. Only a minimum amount of ‘process’ is tolerated and it’s all about knuckling down and churning out working code as soon as possible. <span class="blsp-spelling-error" id="SPELLING_ERROR_6" onclick="BLOG_clickHandler(this)">Codephobic</span> teams postpone code generation to the last moment and have to be dragged to their compilers kicking and screaming…<br /><br />Which is kind of poetically just, because that is exactly what their customers end up doing when they see the end result.Arsalan Zaidihttp://www.blogger.com/profile/03116662629864832986noreply@blogger.com0tag:blogger.com,1999:blog-9346317.post-16802453075349985982007-02-01T20:38:00.000+05:302007-02-01T20:44:23.432+05:30Because the stakes are so small"University politics are vicious precisely because the stakes are so small."<br /> -- Henry Kissinger<br /><br />I’m not a fan on Henry Kissinger by any means, but even the Devil can be right sometimes. It’s not university politics which concerns me though, but the sometimes byzantine intrigue which takes place within even relatively minor projects.<br /><br />I’ve found office politics to be in turns, disgusting, depressing and distressing. It can occasionally be amusing, but only in the slightly tight-lipped, pathetic way an argument between two drunken bums might be amusing. What it usually is, is soul-destroyingly depressing. It sours the atmosphere of the entire project, splits teams and causes you to loose respect for people you’ll probably have to deal with on a daily basis.<br /><br />And it’s usually so petty. The motivations are so base; jealousy, imagined slights, over-reaching ambition and profound insecurities. The tactics are so filthy; lies, rumour mongering and gossip. And what are the fruits? The imagined goals are usually minor things like a promotion, a slightly better appraisal or even something as petty as sucking up to management. The eventual result is usually bitterness, a loss of respect of others for ones-self and the debasement of your own soul.<br /><br />How is one to deal with it when it starts? I have no clue. The people who are of this mould are usually incorrigibly bent out of true. You can try to straighten them out or bend yourself to fit their twisted psyche, but it’s usually futile. Both your resistance or compliance will trigger something within them which will make you their target. The base (and it is <span style="font-style: italic;">very</span> base) cause, is that deep down, they actually enjoy the cut and thrust of it. And that won’t change until they do.<br /><br />So should one get down in the mud and wrestle with them? Nope. You’ll feel disgusted with yourself, while they’ll be loving it. The best policy is to keep your interaction with such people to a minimum and just get on with doing a good job. They’ll either make so many enemies, they’ll finally be pushed out…<br /><br />…or they’ll become the CEO.Arsalan Zaidihttp://www.blogger.com/profile/03116662629864832986noreply@blogger.com1tag:blogger.com,1999:blog-9346317.post-91995637948396070372006-12-19T22:00:00.000+05:302006-12-19T23:46:12.255+05:30In the eye of the beholder<span style="font-size:180%;">What is art?</span><span style="font-size:100%;"><br /><br /></span><span style="font-size:100%;">Is it only something like <a href="http://en.wikipedia.org/wiki/Image:Sanzio_01.jpg" title="classical painting">this</a> or <a href="http://en.wikipedia.org/wiki/Image:Berndavi.JPG" title="classical statue">this</a>? Or may be even <a href="http://en.wikipedia.org/wiki/Image:PicassoGuernica.jpg" title="Picasso">this</a> or <a href="http://en.wikipedia.org/wiki/Image:VanGogh_1887_Selbstbildnis.jpg" title="Van Gogh">this</a> or <a href="http://en.wikipedia.org/wiki/Image:VanGogh-still-life-vase_with_12_sunflowers.jpg" title="more Van Gogh">this</a>. How about <a href="http://en.wikipedia.org/wiki/Image:The_Scream.jpg" title="modern art">this</a>? Is <a href="http://www.abc.net.au/tv/btn/stories/s1397826.htm" title="monkey art">this</a> art or just the random scribblings of a demented monkey? Does <a href="http://www.guggenheimcollection.org/site/artist_work_lg_129_8.html" title="drip painting">splattering paint</a> on a canvas qualify as art? If it does, then gulls are consummate artists. With better taste too.<br /><br /></span><span style="font-size:100%;">Can you call <a href="http://en.wikipedia.org/wiki/Image:Paris.performance.600pix.jpg" title="performance art">this</a> art? Or <a href="http://en.wikipedia.org/wiki/Image:GBUMA3.jpg" title="more performance art">this</a>, or even <a href="http://en.wikipedia.org/wiki/Image:CMP.png">this</a>. Is the man who shits in a jar and then sells it as high art, an artist? If poo in a bottle is art, then I've got Picasso beat. Every day.<br /><br /></span><span style="font-size:100%;">Everything up until now has been the work of man (or ape). Is art something which necessarily has to be the creation of Man?<br /><br /></span><span style="font-size:100%;">Is yes, then what about <a href="http://en.wikipedia.org/wiki/Image:Mandel_zoom_00_mandelbrot_set.jpg" title="mandelbrot set">this</a>? Or <a href="http://en.wikipedia.org/wiki/Image:Mandel_zoom_04_seehorse_tail.jpg" title="fractal art">this</a> or <a href="http://en.wikipedia.org/wiki/Image:Mandel_zoom_07_satellite.jpg" title="more fractal art">this</a> or <a href="http://en.wikipedia.org/wiki/Image:Embedded-julia.jpg" title="still more fractal art">this</a>? True, you need a computer to really bring these images to life, but they’re just mathematical functions. Order from chaos. Can we perhaps broaden our definition to include anything that’s beautiful to look at maybe? <a href="http://www.rockymountainscenery.com/monumentvalley/13.html" title="scenic phtotography">This</a> looks great, but few would call the scene ‘art’. They’d call the photographer an artist though. But what about the programmer who wrote to code for the Mandelbrot program? No one calls him an artist even though both of them are simply capturing the beauty of nature. How does that make any sense?<br /><br /></span><span style="font-size:100%;">Or does it? One can argue that given the same camera and scenery, I’d end up capturing disappointing images of mis-framed peaks, but given a computer and the algorithm, any one can produce the exact same images of chaotic functions. Maybe that human spark is key?<br /><br /></span><span style="font-size:100%;">So if art isn't necessarily just something pretty (though it must be pleasing to the eye) and everything humans produce isn't necessarily art (though human involvement is necessary), then ‘art’ must lie at the intersection of these two planes.<br /><br /></span><span style="font-size:100%;">So what is art?<br /><span style="font-size:130%;"><br /></span></span><span style="font-size:100%;"><span style="font-size:130%;">Art is beauty, which is the result of skill or talent.</span><br /></span><span style="font-size:100%;"><br />fin.<br /></span>Arsalan Zaidihttp://www.blogger.com/profile/03116662629864832986noreply@blogger.com1tag:blogger.com,1999:blog-9346317.post-12839263819654661742006-10-26T19:10:00.000+05:302006-10-26T19:25:29.596+05:30GTD and MeI've spent some time hanging around <a href="http://en.wikipedia.org/wiki/Gtd">GTD</a> aficionados and I've been itching to give it a go for quite some time now. Never had the courage to dump my over-flowing inbox though. The clean break required and the abandonment of old and tested ways was always a little too scary. Working at this new place though, I decided to go clean from the get go. I've been 'GTD' for the last month now or so and here's how I go about my business.<br /><br /><span style="font-size:180%;">What is GTD?</span><br /><br />At it's heart, GTD is about two very simple ideas:<br /><ol><li>Be ruthless in how you organise and process tasks.</li><li>Group actions according to <span style="font-weight: bold;">how/where</span> you'll do them, not <span style="font-weight: bold;">when</span>.<br /></li></ol>Point 1 means you never let your inbox get crufty with old emails and posts left around for reference. Dump all non-actionable items in the appropriate folders. Focus on what needs to be done and (point 2) group your activities according to how you'll do them.<br /><br />And then do them.<br /><br />If they can't be done now, defer or delegate them.<br /><br />Rinse and repeat.<br /><br /><span style="font-size:180%;">How do I GTD?</span><br /><br />Everyone's got their own particular flavour of GTD which fits their requirements and personality. Here's how I process the mountains of emails I usually receive.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger2/7437/1140/1600/outlook-gtd.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger2/7437/1140/320/outlook-gtd.jpg" alt="" border="0" /></a>I've set up a bunch of folders prepended with '<span style="font-weight: bold;">@</span>' which I use for all my GTD needs. There's no particular reason to use the '<span style="font-weight: bold;">@</span>' character to mark your folders, it just helps group them together and on top. All these folders (except for <span style="font-style: italic;">@Reference</span> and <span style="font-style: italic;">@Everything Else</span>) have been set to show the total number of mails within them, <span style="font-style: italic;">not</span> the number of unread items.<br /><br />When a new email comes in, I read it and:<br /><ol><li>If it's spam, a duplicate or completely useless, I delete it</li><li>If it was worth reading, but it's purely informational, I dump it into <span style="font-style: italic;">@Everything Else</span></li><li><span style="font-style: italic;"></span>If it's worth keeping as a reference, I put it in <span style="font-style: italic;">@Reference</span></li><li><span style="font-style: italic;"></span>If it's something I need to act on, I put it in <span style="font-style: italic;">@Action</span></li><li><span style="font-style: italic;"></span>If it's a call I need to make or a meeting I need to attend, I put it in <span style="font-style: italic;">@Calls</span> or <span style="font-style: italic;">@Meetings</span> as appropriate<br /></li></ol>Once I'm done with this initial processing loop, I take up the actions in <span style="font-style: italic;">@Action</span> one by one and:<br /><ol><li>If it's something I can do and finish off immediately, I do it.</li><li>If it's something that can be done now, but it's going to take some time to complete, I get to work on it and put it in <span style="font-style: italic;">@In Progress</span></li><li><span style="font-style: italic;"></span>If it's something I need to wait on for sometime/someone, I put it in <span style="font-style: italic;">@Waiting</span></li><li><span style="font-style: italic;"></span>If it's something I would like to do someday, but not right now, then it going into <span style="font-style: italic;">@Someday</span><br /></li></ol>And that's it! :-)<br /><br />I keep reviewing <span style="font-style: italic;">@Action</span>, <span style="font-style: italic;">@In Progress</span> and <span style="font-style: italic;">@Waiting</span> and acting on the items in there, while keeping my inbox empty at all times. All non-email related todo's are converted into emails using self-addressed mails and put into the appropriate <span style="font-weight: bold;">@</span> folder. This keeps everything organised and collected in one location.<br /><br />This may not be the best way to organise a GTD system, but it's been a real productivity booster for me. It also keeps my stress levels under control :-). At all times I know the exact status of every task currently under way, the things that need doing and the people who need pushing.<br /><br />GTD?<br /><br />Yes.Arsalan Zaidihttp://www.blogger.com/profile/03116662629864832986noreply@blogger.com1tag:blogger.com,1999:blog-9346317.post-15274779700100088102006-09-07T22:47:00.001+05:302006-09-07T22:47:09.528+05:3011.2 km/sSince I'm now busy in an office from morning to evening, I find I have plenty of time to blog when I get home. Strange how that turns out. When you have all the time in the world, you have zero motivation to do anything with it. When you're forced to squeeze every free minute out of your schedule, suddenly, you're inspired!<br /><br />A friend mentioned in passing that it seemed that I'd finally returned to the corporate world. I don't think I truly ever left. I'm sure that when <a href="http://en.wikipedia.org/wiki/Sputnik_1">Sputnik</a> was soaring through space, it too thought it had slipped from Earth's grip once and for all. But the great funnel of gravitational suck that is the Earth wasn't through yet. Within three months, it had dragged the spunky little satellite low enough that it burnt up in the upper atmosphere.<br /><br />Escape velocity is hard to achieve, especially when having attained separation, you realise just how cold space is.<br /><br /><em>A streak of light in the sky;<br />celestial debris coming home.<br />Wish upon a falling star.</em><br /><br />God, I sound depressing! :-/Arsalan Zaidihttp://www.blogger.com/profile/03116662629864832986noreply@blogger.com1tag:blogger.com,1999:blog-9346317.post-6046109764370005892006-09-06T22:41:00.000+05:302006-09-06T23:09:25.768+05:30Khaki Blues<a href="http://en.wikipedia.org/wiki/Steve_Irwin">Steve Irwin</a> bites it. And good riddance!<br /><br />Here's a man who spent his life running around after hapless beasts, provoking them into attacking him and then prancing around as if fending off animals with brains the size of walnuts is something to crow about. <span style="font-style: italic;"><br /><br />"Lookit me! I'm sitting on the back of a trussed up croc while ten men hold it down! Ain't I the man!"</span><br /><br />South Park 's caricature of him was biting and insightful. An empty headed, khaki shirt filling buffoon, running around shouting <span style="font-style: italic;">"I'm going to pin 'im down and jam my thumb up his arse!" </span>in his trademark <span style="font-style: italic;">'australian-for-beer'</span> accent. Pray tell, how exactly does wrestling with a Dingo or putting the smack down on a Koala further the cause of either science or conservation? Will the fact that you clotheslined an alligator help protect the species or will giving a Kangaroo a pouch wedgie help spread environmental awareness? I don't see erstwhile Steve's audience of <a href="http://www.wwe.com/">WWE</a> watching mouth-breathers running out to embrace either trees or conservationism anytime soon.<br /><br />Nature has the last laugh as usual though, as Steve is stabbed through the heart by Touche the Sting-ray; no doubt as he tried to wrestle it to the seabed and jam his thumb up its arse. Et tu Brute! and all that.<br /><br />Now it's off to the happy hunting grounds for Steve, to spend the rest of eternity being chased by the spirits of the very animals he abused, as <span style="font-style: italic;">they</span> for once, get to shove their thumbs, claws, pincers and what have you up <span style="font-style: italic;">his</span> arse.<br /><br />Crikey! Now <span style="font-style: italic;">that's</span> what I would call some real entertainment!Arsalan Zaidihttp://www.blogger.com/profile/03116662629864832986noreply@blogger.com2tag:blogger.com,1999:blog-9346317.post-1151069385461246682006-06-23T18:55:00.000+05:302006-06-23T18:59:45.476+05:30Perfection ParalysisIt's taken me more than a month to finally get cracking on a pending project of mine. I've been wanting to get this thing done for <span style="font-style: italic;">months</span> now, but could never seem to get started. The problem? Perfection Paralysis.<br /><br />Being a bit of a perfectionist (HA!) and I'm always fussing over whatever I do. If I write a couple of classes, I'll spend the next few days/weeks/months constantly refactoring, re-designing and re-structuring them. Invariably, I'll either lose interest in the project before I finish or else trash the whole thing to start from the beginning. I was paralysed by my quest for perfection. It was incredibly frustrating.<br /><br />In the case of this particular project, I was fussing as usual about the design and the technology to use (Spring? something simpler? JDBC? but I want to use Hibernate! etc...) and I just had enough. I finally just sat down and started to push out code (at my usual blazing rate :-). Viola, 2 days later and I've written some 700+ lines of working, tested code and I'm happy :-D. Every time I sit in front of the code, I get the itch to refactor, but I squash it. There'll be time enough for that when I get this out as Alpha. Right now, I want it <span style="font-weight: bold;">DONE</span> and I want it<span style="font-weight: bold;"> OUT!</span><br /><br />So yeah, there's a bit of the ol' copy-paste in there, and I can maybe reduce the code size by 20% or so. There are several egregious instances of global variable use and a few too many static methods. One particular class is ballooning alarmingly and needs to be split up... but I'm consciously ignoring these warts. The code works, and it works quite well and at the end, slightly messy but <span style="font-weight: bold;">working</span> code trumps code that's beautifully designed, but which exists only on the whiteboard.<br /><br />It's painful, but I'm learning to say it...<br /><br /><span style="font-weight: bold;">IT'S GOOD ENOUGH!</span>Arsalan Zaidihttp://www.blogger.com/profile/03116662629864832986noreply@blogger.com1tag:blogger.com,1999:blog-9346317.post-1149081513316637112006-05-31T18:22:00.000+05:302006-05-31T18:54:14.613+05:30The Monsoon scale of privilegeThe Monsoons are here in Mumbai and how happy you are about that seems to be directly proportional to how wealthy you are.<br /><br />If you're in the <span style="font-weight: bold;">Upper Middle Class</span><span style="font-weight: bold;"> and above</span>, it's a great time. The weather is cooler, there's a refreshing breeze and finally there's some relief from the unrelenting humidity and heat of summer. A perfect time to visit Lunavala, Mahabalashwar or some other hill station or just to relax in front of a window with a hot cup of cocoa.<br /><br />If you're a part of the teeming <span style="font-weight: bold;">Middle and Lower Middle Classes</span>, your emotions are more mixed. On the one hand, your home and work environment are now much cooler, but you also face terrible problems in your commute, dripping walls at home, flooded compounds and a higher incidence of disease. You're still glad of the rains, but only for a while. Then it's back to struggling to ensure that you survive another deluge. No trips to the green ghats for you!<br /><br />If you're a part of the multitudinous <span style="font-weight: bold;">Poor</span>, you're in deep, deep trouble. You're probably going to enjoy the season for all of one day, before your shack starts to float off. If you're lucky enough to have a shack. If you're living on the streets (and a very large percentage of Mumbai's population does just that), you're going to be reduced to holding off the rain with a plastic sheet drawn over yourself, while you soak from below. You're in for several months of misery, as you're forced to live in several feet of fetid gutter water, struggling to find something clean to drink. But hey, at least the demolitions of your homes is on pause! :-(<br /><br />Enjoy the 'soons!Arsalan Zaidihttp://www.blogger.com/profile/03116662629864832986noreply@blogger.com1tag:blogger.com,1999:blog-9346317.post-1148860107737335932006-05-29T05:16:00.000+05:302006-05-30T00:56:25.580+05:30Why Science Fiction is like DiabetesI like Science Fiction (Sci-Fi). I like it a <span style="font-style: italic;">lot</span>. While in the shower a couple of days ago, I got to thinking about it in a lot more detail than I usually do.<br /><br />What is science fiction all about? What's at the core of it? How do you classify it? <span style="font-style: italic;">Why do we <span style="font-weight: bold;">have</span> a genre of fiction called science fiction at all</span>? Is science fiction about space aliens and laser blasters and space fighters impossibly going 'whoosh' though the vacuum of space? (Well no, that's what <span style="font-style: italic;">crap</span> sci-fi is about, but I'm getting ahead of myself...)<br /><br />Or is it more?<br /><br />It's more.<br /><br />Allow me to broadly classify science fiction into two wide categories. I'll name them in the style of diabetes; <span style="font-weight: bold;">Type 1</span> and <span style="font-weight: bold;">Type 2</span> Sci-Fi. As I discuss this taxonomical system of mine, I hope it'll bring out what I believe is at the core of science fiction.<br /><br /><span style="font-weight: bold;font-size:130%;" >Type 1 Sci-Fi: Asking the right questions</span><br /><br />Good science fiction, like good science, is all about asking interesting questions.<br /><br /><span style="font-style: italic;">What if...?</span><br /><br />What if there was no more scarcity and everyone could have whatever they wanted in whatever quantity they wanted? What if it were possible to indefinitely delay death? What if we faced an immediate, external existential threat? How would human society or a set of human being react to these situations?<br /><br />You take human society and/or a human protagonist and place them in a new situation and you see what happens.<br /><br />Individual episodes of Star Trek, for example, when they're not talking about 'reversing the polarity' of some gizmo or another, are usually of this type. So are BattleStar Galactica's episodes (the 're-imagined' series). For example, in the episode "Flesh and Bone" a very interesting issue that was dealt with, was that of torture. It's unethical to torture and summarily execute a human being, but is it ethical to torture an artificial but sapient creature? This raises other interesting questions. If it's ethical to prefer the safety of a human being over that of an animal's because of sentience, then shouldn't we prefer the safety of a machine over that of a human being if it's smarter?<br /><br />If you start thinking of Sci-Fi in these terms, then many books which you might not have ever thought of as Sci-Fi, can actually be classified under it. A good example would be Orwell's 1984. Not too many people would call it 'science fiction', but it is a very good example of the genre in my opinion. The movie THX 1138 (Lucas' first proper movie) is basically an adaptation of 1984 and it's considered pucca Sci-Fi.<br /><br />Good Sci-Fi is not about machines or robots or technology, it's about people and society.<br /><br /><br /><span style="font-weight: bold;font-size:130%;" >Type 2 Sci-Fi: Space Opera</span><br /><br />Space Opera is all about splashing about and painting on a broader canvas. Things like Star Wars, Firefly, Lost in Space etc. all fall under this category. Let's take Star Wars for example, since it's the most familiar. The entire story could just as easily have been set in a more contemporary time and 'galaxy', instead of being set <span style="font-style: italic;">"a long time ago, in a galaxy far far away"</span>. Replace light sabers with steel swords, X-Wings and TIE fighters with horses and the space ships with galleons and you don't really lose too much. At its heart, it's a take of adventure, war and magic and would fit right into the 14th century.<br /><br />Having the story play out across an entire galaxy however, increases the sense of grandeur and 'space', if you will. Why have Vader destroy a village when you can have him blow up an entire planet? Why give him tuberculosis when you can have him breath like an asthmatic horse by putting him in a ventilator suit?<br /><br />Type 2 Sci-Fi is not as deep as Type 1 Sci-Fi, but it can be a whole load of fun! :-)<br /><br /><span style="font-weight: bold;font-size:130%;" >Science Fiction: The thinking man's time-pass</span><br /><br />Type 1 Sci-Fi is what I really love, though I don't mind Type 2 when I'm in the mood. I find Type 1 Sci-Fi, like the works of Banks or Baxter extremely enjoyable and I can say that some works have significantly broadened my mind. For example, it was one of Baxter's short stories that really helped me understand the concept of Space-Time! :-) My brother thinks it's a waste of time, but I can think of worse ways to relax.Arsalan Zaidihttp://www.blogger.com/profile/03116662629864832986noreply@blogger.com2tag:blogger.com,1999:blog-9346317.post-1147603166960409312006-05-14T15:59:00.000+05:302006-05-14T23:45:12.976+05:30BarCamp Mumbai May-2006It was the best of camps, it was the worst of camps...<br /><br />So I went to the <a href="http://barcamp.org/BarCampMumbai">Mumbai BarCamp</a> held appropriately on the 13th of May at IIT Mumbai; and was thoroughly disappointed by the quality of the vast majority of the speakers as well as the venue.<br /><br />What went wrong? Where to begin!<br /><br />1. It must have been 33-35 deg Celsius out, with very high humidity and all the slightly interesting talks were held in an unventilated, non air-conditioned room. I was sweating like a pig in sauna and my God, I <span style="font-weight: bold;">stank</span>! It just wasn't possible to concentrate in such circumstances.<br /><br />2. This is supposed to be a BarCamp, not a conference. <a rel="nofollow" href="http://sandeep.shetty.in">Sandeep</a> was the one who really pointed this out. We were supposed to be discussing these topics interactively, not sitting in chairs listening to droning speakers...<br /><br />3. ...and the speakers! Where did they find this bunch?! The first talk was on 'SMS Applications'. At the end of it, I knew nothing significant about this technology, but had learned that it may in fact be physically possible to be bored to death. I was really looking forward to a planned talk on <a href="http://www.openlaszlo.org/">OpenLaszlo</a> and <a href="http://labs.adobe.com/wiki/index.php/Flex">Flex</a>, however, both turned out to be completely empty of content. The only bright spot was a talk by some guy from <a href="http://pinstorm.com">Pinstorm</a> about the mechanics of optimising Google AdWords campaigns. That was interesting, however, the heat and humidity had sucked all the life out of me by then.<br /><br />4. Let's not leave the audience out of this however! What a bunch of morons! In just about every talk I was in there were a couple of idiots (different ones every time!) who would bore everyone with endless, inane questions with very little relevance to the topic at hand. You're supposed to ask 'questions' in order to learn retards! Not to try and push your own agenda, you imbeciles! It's a good thing things weren't as interactive as BarCamps should be. I shudder to think of the quality of the discussion.<br /><br />The only redeeming quality of the entire circus was that I got to meet <a rel="nofollow" href="http://vinay.in">Vinay</a> and <a rel="nofollow" href="http://chandrasing.blogspot.com/">Chandrasing</a>. We really clicked and ended up spending pretty much our entire free time holding spirited debates on everything from LISP to PHP, OOP to Procedural programming. After the fiasco that was BarCamp Mumbai finally ended, we went out to the Hirandani Complex where we held out own mini-BarCamp (FooCamp? / BazCamp?). I learnt a hell of a lot more in those few hours than I did in the entire day before it.<br /><br />The plan's now to meet every month or so for our own, more exclusive and as yet un-named, gathering (FooCamp!) and discuss matters of importance to us. Code a bit too. Get our hands dirty.<br /><br />Let's see how things work out! Even if all we end up doing is meeting up in the swamps and flinging poo at each other (PooCamp!), it'll be better than a BarCamp!Arsalan Zaidihttp://www.blogger.com/profile/03116662629864832986noreply@blogger.com7tag:blogger.com,1999:blog-9346317.post-1147602446627690672006-05-14T15:54:00.000+05:302006-05-14T15:59:19.966+05:30A fork() in the roadSo I fired my employers last Friday; and boy do I feel great! :-D<br /><br />Hmmm, that makes things sound more adversarial than they actually were. I'd actually given my notice some 3 months ago and the parting was as amicable as these things usually are. Lots of good-lucks and fare-thee-wells and such. No fireworks or artillery or bridges set ablaze, thank God. That stuff can be quite unpleasant.<br /><br />Anyway. I've decided to head out on my own as an independent consultant/ contractor/ freelancer/ what have you. I tried to tread down this path some 2 years ago as well, but things didn't turn out too well then. I'm better prepared now, or at least, I hope I am :-)<br /><br />So why the big change? Well, de jure, there's been no change at all! For the last year and a half, partly for tax reasons, I've been a '<span style="font-style: italic;">consultant</span>' anyway. So my official designation hasn't changed at all. Of course, de facto, there's all kinds of good stuff now. I've managed to shed one of the most irritating aspects of working in Mumbai; the commute. I used to spend around 1:30 hours <span style="font-style: italic;">each way</span>, every day just to get to and from the office. That's out now and I have an extra 3 hours everyday to myself now, even if I continue to spend the normal 9 hours at work as I used to. And there's the other difference. I have a slightly unique style of working when I'm programming. I work in bursts of intense activity, with long breaks in the middle. The average work-place can't really accommodate such a style, preferring employees to work at a steady pace through out the day. So I used to end up frustratingly trapped in the office for several unproductive hours everyday. No more of that now! :-)<br /><br />I like change too, so working on a myriad of different projects for different people seems very exciting... and once things get going, I'm hoping it'll be a lot more lucrative than being a wage-slave.<br /><br />So I'm going to give it 2-3 months. Let's see how things work out in that time. Here's wishing me some much needed luck! :-DArsalan Zaidihttp://www.blogger.com/profile/03116662629864832986noreply@blogger.com0tag:blogger.com,1999:blog-9346317.post-1144938767975712812006-04-13T19:48:00.000+05:302006-04-13T20:32:10.526+05:30ZK and OpenLaszlo : Ajay and Vijay<span style="font-style: italic; font-weight: bold;">Bhaiyaaaaaa!</span><br /><br />You know the story; two brothers visit the Kumbh Mela and are separated in the crush. One grows up to be a policeman, while the other becomes a vagabond and eventually a hardened criminal. Both of them are then united under extremely contrived circumstances, only to find themselves set against each other. However, everything is eventually resolved, and both of them join hands to save their widowed mother from the hands of the (<span style="font-style: italic;">muwahahaha!</span>) evil villain. Or something like that...<br /><br /><a href="http://zk1.sourceforge.net/">ZK</a> and <a href="http://www.openlaszlo.org">OpenLaszlo</a> seem to me like the Ajay and Vijay of Web UI. On the one hand you have ZK, an extremely rich <span style="font-weight: bold;">AJAX</span> based Web UI Library which allows you to define the interface in XML, while OpenLaszlo is extremely rich <span style="font-weight: bold;">Flash</span> based Web UI Library which allows you to define the interface in XML. They're both Open Source, use JavaScript for scripting and are absolutely gorgeous.<br /><br />Designing using these libraries is really straightforward too. Here's how to make a window with the canonical "Hello World".<br /><br /><span style="font-weight: bold;">ZK:</span><br /><blockquote><window title="1st window" border="normal" width="200px"><br />Hello, World!<br /></window></blockquote><span style="font-weight: bold;">OpenLaszlo:</span><br /><blockquote><canvas><br /><window><br /> <text>Hello World!</text><br /></window><br /></canvas><br /></blockquote><br />Not much to choose between huh? :-)<br /><br />The difference between the two of them is in their emphasis. ZK bills itself as an easy to use AJAX library while OpenLaszlo is more ambitious, describing itself as a way to create "<span style="font-style: italic;">zero-install web applications with the user interface capabilities of desktop client software</span>" In addition, OpenLaszlo can now be compiled into DHTML, not just Flash.<br /><br />So which one will I use if I need something like this? I'm not exactly sure. It's not just a competition between these two libraries, but between using Flash or Ajax for your UI too. If I'm pushed to it, I'll probably side with OpenLaszlo. This is largely because it can also be compiled to DHTML as well as Flash and because the demos at <a href="http://www.openlaszlo.org/demos">www.openlaszlo.org</a> really put it through it's paces and show what it can do. In addition, there's a Flash player available for mobile devices now, but Javascript support on those things can be spotty. Javascript windows and animations really crawl on Firefox under Linux too and since that's my primary platform at home and at work, it's a significant downside for me.<br /><br />There really isn't that much to choose between them. It'll probably boil down to personal preferences. Both libraries are well supported, stable and under active development. Both make the task of creating absolutely stunning interfaces almost trivial.<br /><br />Ajay or Vijay, it doesn't really matter. The bad guy goes down in the end.Arsalan Zaidihttp://www.blogger.com/profile/03116662629864832986noreply@blogger.com5tag:blogger.com,1999:blog-9346317.post-1143555107384675872006-03-28T19:34:00.000+05:302006-03-28T19:46:13.473+05:30Big Ball o' LinksJust a bit of link blogging on a not so slow Tuesday:<br /><br /><ol><li><a href="http://www.laputan.org/mud/">Big Ball of Mud</a>: <span style="font-style: italic;">"A BIG BALL OF MUD is a casually, even haphazardly, structured system..."</span> You know it's a bad idea, I know it's a bad idea, so why is it so damned popular?<br /></li><li><a href="http://www.owasp.org/documentation/appsec_faq.html">The AppSec FAQ</a>: Not exactly ground-breaking work, but it's a good recap of some common web app security boo-boo's.</li><li><a href="http://bitworking.org/news/How_to_create_a_REST_Protocol">How to Create a REST Protocol</a>: The name says it all. Also review <a href="http://www.prescod.net/rest/mistakes/">Common Rest Mistakes</a>.<br /></li><li><a href="http://www.43folders.com/2006/03/21/gtd-2/">43F Recap - The best of GTD</a>: Some of the best posts about GTD at 43 Folders.</li></ol>Arsalan Zaidihttp://www.blogger.com/profile/03116662629864832986noreply@blogger.com0tag:blogger.com,1999:blog-9346317.post-1142947879902777372006-03-21T18:56:00.000+05:302006-03-21T19:03:31.833+05:30It's not a bug, it's a feature!Here's a new one I've heard that's similar and a lot fresher:<br /><br /><div style="text-align: center;"><div style="text-align: left;"><span style="font-style: italic; font-weight: bold;font-size:130%;" >It's not complex, it's comprehensive! </span><br /></div><div style="text-align: left;"><span style="font-size:100%;"><br />Made me smile.<br /></span></div></div>Arsalan Zaidihttp://www.blogger.com/profile/03116662629864832986noreply@blogger.com1