Tuesday, December 06, 2005

SQL Injection and XSS Attacks

Some topics everyone involved in web development must read at least once:

  1. SQL Injection Attacks by Example - It's a lot easier than you think. And yes, you customers will try it out some of the standard approaches out of idle curiosity if nothing else.
  2. Real World XSS - You'll be surprised at the sites which are vulnerable to attacks of this nature.
  3. More XSS
  4. And still more XSS

Mark Cuban - Success & Motivation

Blog Maverick - The Mark Cuban Blog

In Essence:

  1. Be driven
  2. Know the industry you're in, inside out.
  3. Use 1. and 2. to ensure you're ready when Lady Luck strikes.
  4. You only need to be lucky once...

Cuban comes across as an intense, driven, workaholic; kind of like my current (successfully entrepreneurial) employer :-D. It's a bit depressing to think that the only way to free yourself from the chains of a 9-5 life, is to handcuff yourself to a 00:00-23:59 one!

Friday, November 18, 2005

ColorMatch Redux

Thanks to this, I can now tell which shirt will go with which trouser.

Breakthrough!

Tuesday, November 15, 2005

Slacker Manager: Full frontal personal marketing assault

I'm always interested in reading about innovative interviewing techniques and this post from the Slacker Manager is really interesting.

An innovative way to stand out from the crowd without using cheap gimmicks or tricks. Nice.

Corporate Cargo Cultism

"In the South Seas there is a cargo cult of people. During the war they saw airplanes with lots of good materials, and they want the same thing to happen now. So they've arranged to make things like runways, to put fires along the sides of the runways, to make a wooden hut for a man to sit in, with two wooden pieces on his head to headphones and bars of bamboo sticking out like antennas--he's the controller--and they wait for the airplanes to land. They're doing everything right. The form is perfect. It looks exactly the way it looked before. But it doesn't work. No airplanes land." -- Richard Feynman in "Cargo Cult Science"


Acting like a large corporation will not make you one. The trappings of such companies - the meetings, the excessive documentation, the blind insistence of following process and damn the consequences - are a by-product of becoming successful and large, not their cause. It can in fact be argued that many large companies are actually diseased, paralysed by their size, their culture of CYA and their unwieldy processes.

No wonder then that mega-corps that still retain their drive and ambition are looking to inject some much needed small company vibe into their moribund veins. They want the agility, the passion and the personal touch that only a smaller company can provide.

So if you're a smallish company, don't blindly adopt the practices of the big boys simply because that's the way they do things. They do things the way they do because they have no choice. It's difficult to maintain the personal touch when you have a team of 1000 under you, and you need the reams of documentation when both the product and the team size is massive.

Companies like Apple and especially Google know how to retain the common touch. While the press releases of Microsoft look like they've been written by Borg drones, Googles communiques read like they've been written by the actual people behind the product. People who are genuinely excited and happy about releasing something they've worked on and sweated over and believe in. Real people.

Free flowing information and passion is what makes small, committed start-ups such great places to be. Don't stifle the life-breath of your organisation by trying to be excessively professional and all grown up.

You can make your little firm look like a flake off of a blue chip, but it's not going to make the airplanes land...

Monday, November 14, 2005

GTD TiddlyWiki

This has got to be the flat-out, most mind-blowing thing I've seen all month!

A fully functional wiki in a single, standalone page of HTML. Using the magic of Javascript and CSS, the authors have managed to make a complete application which requires nothing more than a modern browser to operate. Just save the empty template to your own computer, double click it and away you go!

It's got regex incremental searching, tagging, snazzy animations... the works. It's replaced my text only todo file habit of several years and that is quite a milestone. It's got some basic keyboard shortcuts which make editing your entries (or tiddlers) quite easy. Since it's HTML, you have the ability to create links, add formatting etc. which isn't possible with a plain ol' text file natch.

It's got all the advantages of a text file (free form, completely portable, searchability) plus a whole lot more. Absolutely fantastic! :-)

It's derived from TiddlyWiki so you can use the original instead of the fork if you want.

Monday, November 07, 2005

The 3 Urinal Salute

Pass by the urinals in the office loo and *gush*, *gush*, *gush*, you just might be greeted by a volley of cheerful flushing. The urinals spot the presence of what they think is a satisfied user and smugly activate their self cleaning mechanisms...

Nothing like a 3 urinal salute to make you feel appreciated; and a little moist.

Introducing the Non-intuitive Manager

In this series of articles, I want to explore some of the practices we as managers follow because instinctively, we think they're effective. Unfortunately, a little experience and thought quickly shows that many of these practices are actually counter-productive and occasionally, down right destructive.

People spending far too much time chatting on the intranet? Log every key press and word sent across! Getting the feeling that people are wandering the halls with far too much abandon? Restrict access to the various parts of the office! Want an update? Drop in unannounced and demand it on the spot!

The basic problem is that of a lack of empathy. We forget - usually because it's been a while since we've been in a similar situation - how we'd feel if placed in the same spot as the one we've just stuck someone in. At other times, we lose sight of the fact that not everyone comes from a similar background as us, and so an incident which we may shrug off as being insignificant may actually be taken quite seriously by others.

As straight-forward as the problem is, it's solution is simpler still. Just about every philosopher, religious figure and ascetic has expounded some version of the Golden Rule; Do unto others as you would have done unto you. In other words, place yourself in the situation of your hapless team members. Would you like to have someone breathing over your shoulder, eyeing your every move? Or tracking every keystroke of your messaging activity? Probably not. And if something like this would make you uncomfortable, chances are, it makes other people uncomfortable as well.

There is a danger here though. Not everyone is the same. As I mentioned earlier, people come from varied backgrounds and have varied expectations and tolerances. For example, behaviour that you might consider intolerable micro-management might be comforting to someone who's less sure of himself and wants a little hand-holding. You have to make allowances for things of this nature and that's where experience helps, I suppose...

Anyway, that's why I decided to name the series, "The Non-intuitive Manager" since good management is sometimes about going against what your gut tells you is the right thing to do. You can't always rely on your intuition or your instincts to guide you, since these are often completely off the mark. If managing was something that came naturally to most people, there wouldn't be so many horror stories about the "supervisor from hell". The only way to be sure about what you're doing is to test things out and then measure the effects.

The only way to be sure that what you're doing adds to the teams well-being and overall happiness is to implement your policy and then see if it's had the desired effect. If so, continue to refine it, taking constant feedback from your victims team members as you go. If not, take suggestions and feedback and try something else. You have to implement a constant loop of innovation, testing and feedback if you want to be sure that what you're doing is having the desired results. Relying on whims and fancies and ruling by decree is for tin-pot dictators...

It isn't the Non-intuitive manager you've got to be worried about, since he understands the dangers of relying on instinct. It's the natural, intuitive ones who are completely confident about their inherent talents who are terrifying!



Articles in the series

  1. Introducing the Non-intuitive Manager
  2. The Non-intuitive Manager [How doing what seems 'right' can be counter-productive]
  3. The Non-intuitive Manager: The Semantic Weight & Half-Life of Words

Thursday, October 20, 2005

Resume Writing 101

So my cousin is thinking of hopping employers and sat down to update his resume a while ago. While going over his efforts, I was struck by a rather obvious 'insight'; a resume is just a marketing document!

I can only blame my complete stupidity for not having thought of this before. All this time, I've always thought of the resume to be, well, a curriculum vitae. A summary of one's education, professional history, and job qualifications... as Answers.com puts it. A numbered list of enraged ex-employers, dubious educational institutions and dodgy projects to be paraded before incredulous HR drones. A stack of paper, with as dense a mass of black on white as possible. Something to win your next assignment with by boring - or more satisfying still - bludgeoning, the opposition to death.

However if you really think about it, a resume is really the first step is marketing that most desirable of commodities.

You.

Like any good marketing campaign you've got to not only provide accurate information, but also dress it up in a manner that attracts and excites. Let's face it, there's not much difference between a good resume and what's on a packet of chips. You've got the ingredients, the promotional puffery, the endorsements by trusted spokespersons... What we've got to learn is what makes people buy one brand and not another. Especially since at heart, all they're really getting is some sliced, salted spuds and a warm feeling that's just impending indigestion.

It's - to a large part - all in the presentation.

So apply standard marketing techniques to your resume. Identify your target audience. Satisfy HR enough to get by their buzzword filter. Stand out enough so you're noticed by first level decision makers. Give HR their alphabet soup of acronyms and certifications, but make sure the tone is such that it also catches the attention of your (you hope) new superiors.

Write your resume taking into account the kind of company and industry you're aiming for. Be edgy and provocative if you're targeting a hipper crowd. Stay a little more conservative if you want to be a banker or accountant. Remember though, it's better to be specifically rejected than simply ignored. If you make something that some people hate, then others will love it. Design to elicit emotional responses. It's better to be hated than to not to make an impression at all.

Think of using colours, textured paper, blurbs from past employers/superiors, innovative designs... whatever. The people reviewing your resume plow through hundreds of boring CVs a day written by earnest hopefuls. You have to make an impact if you're going to get an invite to an interview...

...which is a whole 'nother packet of chips.

Monday, October 03, 2005

The Non-intuitive Manager: The Semantic Weight & Half-Life of Words

[You might wish to read the Introduction to the Series before you proceed...]

Words matter. A lot.

How you phrase something makes a big difference, especially when you're talking to people who are technically your subordinates. Now, this may seem like the most obvious statement in the world, but it's surprising how often it's forgotten.

What we tend to forget is that when the boss speaks, his words are mined quite intensely for subtleties and hidden meanings by his subordinates. A simple "Hello" might send some of your more insecure underlings into a panicky tizzy. Now this might seem unfair to you, but that's just the way things are. Human nature isn't slated to change anytime soon, so you might as well get used to it, bugs and all.

The problem is a basic one of power. The bossman has it, the wage-slave doesn't. The managers whims directly impact the average workers life in measurable ways, while things don't quite work vice-versa. It isn't surprising then that the communication flowing from the top is analysed much more obsessively than you expected it to be.

In other words (HA!) we need to examine...

The semantic weight and half-life of words


Description: You words and opinions, even ones joking expressed, are examined much more deeply for nuances than you'd like. Often, your subordinates build-up their stances or expectations on utterances which were hasty, or meant to be taken lightly. What seemed like banter to you, was taken as a reprimand; or your flippant remark about a company product has made people treat it lightly.

The Problem: People are apprehensive in nature. Real or perceived power resides in you in this relationship, not them. In addition, you're looked at to provide leadership and direction. People will emulate your stances and align their positions to the ones they think you hold. In addition, there's no expiry date on words, so something you said 6 months ago may still be shaping the teams perceptions about itself, the product or the company, long after the situation has changed.

A Possible Solution: Being aware of the issue is halfway to solving it. You have to be very careful with what you say. Your heart should be behind your tongue, as it's sometimes put, not before it. There's no need to be fake, or a bland, emotionless robot. Joke and josh around with your team with abandon, but remember the limits. Don't put anyone down, even in jest and never denigrate an in-house product or another team.

Having to be so careful may seem like an over-reaction.

But words matter. A lot.

Wednesday, September 28, 2005

The Non-intuitive Manager [How doing what seems 'right' can be counter-productive]

[You might wish to read the Introduction to the Series before you proceed...]

Managing people is easy.

Managing people effectively is not.

If managing people were easy and intuitive, Dilbert wouldn't exist. The fact that a cartoon strip about a disaffected white collar wage-slave not only exists but is widely read by the cubicle classes, is telling. Everyone knows or has worked under at least one PHB or been bombed by a wandering Seagull Manager, even other PHBs and SMs!

Of course, no one sets out to become a bad manager, so how come the corporate world is chock full of them?

The problem is fairly insidious. It seems to be that when people think they're doing the right thing, they're usually not. Our intuition about what is constructive behaviour is very often wrong.

A classic example is what I'll label the gratuitous walkabout:


The Gratuitous Walkabout


Description: This involves the manager in question sauntering up to his unsuspecting target on padded feet and ambushing him with a cheery "So, how're things going?". The surprised subordinate turns around and tries desperately to collect his thoughts, mumbling senselessly in the mean time. By the time he's managed to context-switch successfully, he's already succeeded in making a fool of himself and the manager has moved on in search of his next kill, smiling ruefully and shaking his head. Bonus points if he manages to squeeze in a heavy I-really-expected-better-from-you sigh.

The Problem: It's difficult for most people to instantly switch from problem solving mode to reporting mode, especially when they're tense and on the back foot from being surprised. Someone working hard at his job will find it difficult to context-switch and swap in the information required to answer your questions accurately and fully. Nervousness from being under the microscope doesn't help.

A Possible Solution: Instead of pouncing unannounced on your subordinates, it might be better to set up a regularly scheduled meeting to which they can arrive ready and prepared. Even giving someone a 5 minute warning before you go to meet them should be enough, if all you're looking for is a daily update. If you must insist on surprising them, then make some small talk for a few minutes to give them time to ready themselves and only then get down to business.

Thursday, April 07, 2005

Ruby: Not quite as shiny as one would hope.

Right, what with all the hysteria surrounding Ruby on Rails , I decided to give Ruby and RoR a bit of a whirl.

I was quite disappointed with the almost vertical learning curve of Zope and quite open to abandoning Python and defecting to the dark side of the force. Matz rasping "I am your father..." after he's lopped off your hand can do that to you :-P

So any, after around a week of reading, I'm back in the Python camp and on my knees begging for forgiveness and integration back into the Hive.

What happened?

Ruby happened.

So what's this short foray into enemy territory taught me?

A. The positives.

Ruby has a lot going for it. Its OOP mechanism are much cleaner than Pythons and closures are cleaner and feel more expressive. In addition, the language supports threading, which is great. JRuby is under active development, unlike the recent history of Jython (although that's changed recently with the reactivation of that project with a fresh infusion of blood (and cash!)). The .. and ... are handle stuff sweetly in for loops too.

The community's great and the platform is still far from being fully formed, so your opinions can actually help direct the future of Ruby.

B. The negatives.

Ah, now we get to the meat of the matter. Wait, I'm going to need a numbered list for this :-D

  1. Magic variables: I left Perl and joined up with the Python camp because I hated stuff like $_, $1, $2, $foo etc. I know it's possible to avoid using these in Ruby, but not everyone's as fastidious as I am and reading this kind of code leaves a bad taste in my mouth.
  2. Crap variable names: $why $do @I have_to @@Name $my variables LIKE @this? $pare $ME!
  3. Verbose block delimiters: What exactly does one gain by using BEGIN..END versus {..} or significant indentation?
  4. Weak Libraries: One of the greatest strengths of Python, Perl, Java and other mature languages/platforms is the vast array of easily accessible libraries. It makes coding up a useful application quickly very easy. Ruby's lack of robust industrial strength packaged libraries is a major failing.

You'll notice that points 1..3 relate directly to syntax. I know the niggles seem a little petty, but things like this do matter when your coding. I want something I'm going to be interacting with for several hours everyday, to be smooth and pretty. It's something which is important to me and I'm sure to a lot of other people out there.

As for Rails... I admit that I haven't really gone all that deep into it, but that's because even a cursory examination revealed it to be heavily magical. Far too many things just 'happen' and although it may speed up initial coding, it will come back to bite you later. Besides all the squealing about 10x improvements in productivity remind me of Fred Brooks essay, No Silver
Bullet
. Some one should send the RoR cheerleaders a link.

And I've discovered frameworks other than Zope for Python.

More on that later.

Maybe...

:-)

Thursday, February 24, 2005

Groovy!

<austin powers> Yeah baby! </austin powers>

:-D

Groovy's, well, reeeeeally groovy dude. It's a Pythonisc scripting language which is designed to run on the Java 2 Platform and which is instantly intuitive for Java programmers. It's got native lists and hashes, closures, loose typing and inbuilt regex. If you know Python and Java, you'll be up and running in a few minutes.

Groovy really cuts down on the lines of code required to get things done. No need to declare variables, easy to use for loops and inbuilt list types (with slicing, ranges etc.) reduce code clutter. It's not magic, but a definite improvement on vanilla java.

Since it runs on the JRE, it's got access to Java's "everything and the kitchen sink" library and since it compiles to java byte code, you can call groovy code from within your java classes and vice-versa. Plus, you can run groovy on it's interpreter for easier debugging and testing.

What's the catch? Well, it's still under development and the specs are fairly fluid apparently. However, they've submitted Groovy Java Specification Request 241 to the Java Community Process Program and if JSR 241 is accepted, Groovy will be an official standard.

Final Word: It looks absolutely fantastic, but I'm not going to use it for anything serious till it's standardised. Besides, it's marked as unstable on Gentoo ;-P

Thursday, February 10, 2005

Bob Parsons 16 rules.

Bob Parsons 16 rules for success. Quite cool actually. I've pasted them here for easy reading.

The points I found particularly interesting are in red.


1. Get and stay out of your comfort zone. I believe that not much happens of any significance when we're in our comfort zone. I hear people say, "But I'm concerned about security." My response to that is simple: "Security is for cadavers."

2. Never give up. Almost nothing works the first time it's attempted. Just because what you're doing does not seem to be working, doesn't mean it won't work. It just means that it might not work the way you're doing it. If it was easy, everyone would be doing it, and you wouldn't have an opportunity.

3. When you're ready to quit, you''re closer than you think. There's an old Chinese saying that I just love, and I believe it is so true. It goes like this: "The temptation to quit will be greatest just before you are about to succeed."

4. With regard to whatever worries you, not only accept the worst thing that could happen, but make it a point to quantify what the worst thing could be. Very seldom will the worst consequence be anywhere near as bad as a cloud of 'undefined consequences.' My father would tell me early on, when I was struggling and losing my shirt trying to get Parsons Technology going, "Well, Robert, if it doesn't work, they can't eat you."

5. Focus on what you want to have happen. Remember that old saying, "As you think, so shall you be."

6. Take things a day at a time. No matter how difficult your situation is, you can get through it if you don't look too far into the future, and focus on the present moment. You can get through anything one day at a time.

7. Always be moving forward. Never stop investing. Never stop improving. Never stop doing something new. The moment you stop improving your organization, it starts to die. Make it your goal to be better each and every day, in some small way. Remember the Japanese concept of Kaizen. Small daily improvements eventually result in huge advantages.

8. Be quick to decide. Remember what the Union Civil War general, Tecumseh Sherman said: "A good plan violently executed today is far and away better than a perfect plan tomorrow."

9. Measure everything of significance. I swear this is true. Anything that is measured and watched, improves.

10. Anything that is not managed will deteriorate. If you want to uncover problems you don't know about, take a few moments and look closely at the areas you haven't examined for a while. I guarantee you problems will be there.

11. Pay attention to your competitors, but pay more attention to what you're doing. When you look at your competitors, remember that everything looks perfect at a distance. Even the planet Earth, if you get far enough into space, looks like a peaceful place.

12. Never let anybody push you around. In our society, with our laws and even playing field, you have just as much right to what you're doing as anyone else, provided that what you're doing is legal.

13. Never expect life to be fair. Life isn't fair. You make your own breaks. You'll be doing good if the only meaning fair has to you, is something that you pay when you get on a bus (i.e., fare).

14. Solve your own problems. You'll find that by coming up with your own solutions, you'll develop a competitive edge. Masura Ibuka, the co-founder of SONY, said it best: "You never succeed in technology, business, or anything by following the others." There's also an old Asian saying that I remind myself of frequently. It goes like this: "A wise man keeps his own counsel."

15. Don't take yourself too seriously. Lighten up. Often, at least half of what we accomplish is due to luck. None of us are in control as much as we like to think we are.

16. There's always a reason to smile. Find it. After all, you're really lucky just to be alive. Life is short. More and more, I agree with my little brother. He always reminds me: "We're not here for a long time; we're here for a good time."

And oh yeah, he insists I print the following...

"The above (or following) article (or rules for survival) is included with the permission of Bob Parsons (http://www.bobparsons.com) and is Copyright 2005 by Bob Parsons. All rights reserved."

Saturday, February 05, 2005

AAAARRGGHH! Someone's got 'my' domain name!

Picture this. You've just been hit by a absolute corker of a brain wave. The product idea looks good, the market is wide open and there's quite a bit of pent up demand. You've also got an excellent, catchy name all picked out. It's easy to use, it's 'punny' and it rolls right off the tongue. It's brilliant!

So you log on to your friendly neighbourhood domain name reseller's and check if it's available...

It's not.

Cue the screaming, tearing of hair and purposeless running around. And to make it just that bit worse, it's pointing to some chintzy site which looks like it hasn't been visited since the Middle Ages (2000 CE). Damn, you could twist that guy's head right off!

But wait! There's hope!! You check the whois records; the domain expires in two months!!! Will the current owner renew it? Won't he? Should you splurge for the domain on SnapNames or buy it for much less manually?! Will you run out of '!'s before this post ends?!

Oooooh, the agony!

Watch this space for updates! :-P

Friday, February 04, 2005

LBB Lesson - 2. Don't give up that day job!


Entrepreneurs are by nature optimistic, risk-taking, the-glass-is-half-full type people. You can't be anything else if you're going to start a business. Usually, this is absolutely great! It's this kind of an attitude that gives you the ability to slog on, with unwavering self-confidence when the chips are down and the outlook looks bleak. However, it's this very attitude that tends to blinds us to certain ground realities...

Namely, that it's going to take far longer to achieve profitability (and a living wage!) that you might think.

Thinking of starting a new venture? Make as pessimistic an estimate as possible about how long it's going to take for you to start making some decent dough... Now triple that span and maybe you're in the same ball-park as reality.

So you're going to need a steady revenue stream while you develop YATE (Yet Another Text Editor) or whatever. Of course, holding down in effect two jobs at the same time is going to be challenging (to say the least!), but whoever said shedding the fetters of wage-slave-hood was going to be easy?

You could live off your savings, however, continuing to work for someone else (either as an employee or a consultant) while you plan your own independence has some other, very important advantages:

  1. Networking: I think I've mentioned this before :-). In a nutshell, working alone can be injurious to your mental wellbeing! Well, OK maybe that's an over-reaction, but spending a lot of time obsessive working on The Next Big Thing isn't very healthy. In addition, if you cut yourself off from your peers, you're going to miss out on all those opportunities to make friends and influence people; the very people who might help you find the next, Next Big Thing.

    And I'd like to remind my reader, that when I use the word networking, I don't mean the slimy digging for contacts so beloved of sales people, but genuine friendships, based on mutual respect and affection...

  2. Inspiration: If you're cut off from potential customers and users, you're cut off from potential ideas for new products and features. You can't scratch someone's itch if you don't know they're itchy! Constant (maybe even grinding) contact with a multitude of clueless users is what's required to sensitise you to their situation. Cutting yourself off from them (and that's what's going to happen when you concentrate all your efforts on making and selling your products) is going to leave you the poorer for missing out on all that aggravation :-P

  3. Synergetic Partnerships: Who knows, while working for your current employer, you might get an idea for a product that complements his current spread of offerings, but isn't something he's interested in developing. He might however, be open to bundling your app with his or buying it outright.

    However, keep in mind that there is a fine ethical line that has to be trod here. It's fine to come up with something complementary or to inspired by some chance remark while on the job, it's definitely not OK to rip off your employers ideas or products.

So that it. The lesson to take away from here is that unless you've perfected the art of living off of air, you're going to need a steady revenue stream while you work on your product. You're going to have to work very hard, but hopefully, the rewards will be worth it.

You hope.

Thursday, February 03, 2005

Webcream: The dynamic Java/Swing to HTML converter

Webcream is like a car-wreak. Compelling and repulsive at the same time. It's a product that gives your Java/Swing app an HTML face, letting you put it up on the web with a minimum of code changes. That's absolutely fantastic! Unfortunately, it does this in an astoundingly ugly manner.

Take a look but I warn you, it ain't pretty.

It's an excellent idea, but I'm positive it can be implemented a whole lot better than it currently is. You'd think for the amount they're charging, they'd do a better job of it but I guess what they need is some competition to light a fire under them. Currently there isn't any, but when there's only one provider, there's always place for one more.


Friday, January 21, 2005

SQLite: An embeddable database

OK, this has been written about by others, but it's so cool, I had to mention it myself!

As the home page explains, "...SQLite is a small C library that implements a self-contained, embeddable, zero-configuration SQL database engine.." It's ACID compliant, the data files are portable across different machine architectures, it can handle respectable amounts of data (up to 2 TB) and it comes with Python bindings. :-P

It's seems like a great way to store application data without having to force users to install MySQL/PostgreSQL or hacking up a custom (probably buggy) solution.

I can't wait to use it!

Sunday, January 09, 2005

Tile: an improved themeing engine for Tk

Tk is gag inducingly ugly, but Tile shows us that it doesn't have to be.

Here's what Tk usually looks like:



Here's what Tk with Tile looks like in WinXP:



Impressive.

Read more about it on the wiki and see here for an example using Python.

Thursday, January 06, 2005

Well, I'm back!

The wedding's over and I'm back in the splendidly polluted 'chity' of Mumbai once more! I hate being wrenched away from my computer, but I must say I enjoyed the break. Two weeks of 0 productivity and almost no contact with tech... Heavenly! :-P

Anyway, expect more regular updates from now on...