• About

    Swaroop C H is 29 years of age. He is a coder and startupper. He has previously worked at Yahoo!, Adobe, his own startup and Infibeam.


    Read more about him


    Email: swaroop (at) swaroopch.com

  • Subscription

    If you want to know when new stories and articles appear on this website, you can receive them via:

  • I'm a Wannabe Hacker

    The Glider: A Universal Hacker Emblem

Archive for the ‘Tech’ Category

Two nuggets from Coders at Work book

Saturday, December 31st, 2011

I’ve been reading Coders at Work on and off, and it is a good read for coders who want to learn how coders, who they admire, think and approach programming.

Two favorite nuggets of mine so far are from JWZ and Brad Fitzpatrick who are definitely two of my programming heroes:

About taking things apart

Seibel:

Is there a key skill programmers must have?

Zawinski:

Well, curiosity – taking things apart. Wanting to know what’s going on under the hood. I think that’s really the basis of it. Without that I don’t think you get very far. That’s your primary way of acquiring knowledge. Taking something apart and looking at it is how you learn to build your own. At least for me. I’ve ready very few books about computers. My experience has been digging through source code or reference manuals. I’ve got a goal and, alright, to do this I need to know what this thing does and what this thing does. And I’ll just sort of random-walk through that until I find where I’m going.

How to improve oneself

Seibel:

Do you have any advice for self-taught programmers?

Fitzpatrick:

Always try to do something a little harder, that’s outside your reach. Read code. I heard this a lot, but it didn’t really sink in until later. There were a number of years when I wrote a lot of code and never read anyone else’s. Then I get on the Internet and there’s all this open source code I could contribute to but I was just scared shitless that if it wasn’t my code and the whole design wasn’t in my head, that I couldn’t dive in and understand it.

Then, I was sending in patches to Gaim, the GTK instant-messenger thing, and I was digging around that code and I just saw the whole design. Just seeing parts of it, I understood. I realized, after looking at other people’s code, that it wasn’t that I memorized all my own code; I was starting to see patterns. I would see their code and I was like, “Oh, OK. I understand the structure that they’re going with.”

Then I really enjoyed reading code, because whenever I didn’t understand some pattern, I was like, “Wait, why the fuck did they do it like this?” and I would look around more, and I’d be like, “Wow, that is a really clever way to do this. I see how that pays off.” I would’ve done that earlier but I was afraid to do it because I was thinking that if it wasn’t my code, I wouldn’t understand it.

Inspired by companies incubated at RTBI, IIT Madras

Friday, November 4th, 2011

I am here at IITM, Chennai to help out NextDrop in some technology discussions, and have been blown away by the kinds of companies incubated at the Rural Technology Business Incubation facility (RTBI).

IITM Research Park

RTBI portfolio

For example, consider Stellapps which is developing an automated cow milking system!

To get a taste of what I’m talking about, definitely watch this talk at Google by Prof. Ashok Jhunjhunwala (the good stuff starts at 17 min 13 sec):


Syncing Android with Mac

Wednesday, November 2nd, 2011

I switched to a Samsung Galaxy S-2 phone a couple of months ago, after my old iPhone 3G (not 3GS) became slower and started having button issues. The biggest problem I faced with the new phone was how do I sync data like music and contacts without it being a constant manual effort and without going through Google’s servers?

I paid for and tried Missing Sync ($39.95), but it would refuse to sync music complaining that there is no space even though there was clearly 10GB of free space, even support couldn’t solve this issue. And there were other annoyances like having to install an ugly calendar app for calendar syncing instead of it syncing to the default calendar app already on the phone.

I finally settled for SyncMate ($39.95) for syncing contacts, calendar, bookmarks, photos, folders, sms and calls, and iSyncr ($3) for syncing music and playlists.

I just wanted to put this out there for other people like me who miss the smooth syncing between iTunes and iPhone and wish they had the same with their Android device.

Freelancing for Joshua Schachter

Friday, October 28th, 2011


joshua schachter

The first person I started freelancing for is Joshua Schachter. Joshua is well known as the founder of del.icio.us, the bookmarking website which made “social filtering”, “tagging” (at the same time as Flickr) and “Web 2.0” common buzzwords.

I stumbled upon his tweet one day that he was looking for remote Python developers for his pet projects, I said “Hey, I’m interested” and next thing I know he is throwing ideas (and he has lots of ideas) and I’m furiously thinking about the fastest way to implement it. Over time, what interested me the most was not the idea itself but rather the evolution of the idea while iterating over prototypes and how Joshua creates this evolution. It has been fascinating to be a “fly on the wall” in this process.

The first project was ClueDB, a “tips and tricks” website, or a “lifehacker, by the people” as I like to call it. Built using MongoDB, Flask, my flask-boilerplate project, HTML5 Boilerplate, jQuery, jQueryUI, Twitter/OAuth integration, and Fabric. Standard stuff.

cluedb.com

Joshua started with a simple answers / tricks site and slowly hacked on features. For example, he said “let there be tags” but there was a twist. The tagging would not be done by the submitter of the clue him/herself but by other people visiting the site. “It would be less spammy this way” he said. Boy, was that an eye-opener to me on how a simple social “tweak” could make a big change to the content and hence the trustworthiness of a site.

The second aha moment for me was when he said “let there be votes” :

cluedb voting scheme

This was a very interesting scheme of voting where we ask for the direct action by the user and not a simple plus/minus counter which doesn’t say anything about the usefulness of a clue (as opposed to popularity).

Things were going along, and then Joshua said “let there be user profiles” and things were going along again.. and then Joshua said “let there be a page listing all the clues that the user has voted ‘Plan to try it’” and we created such a page. The beauty of this was that now there was a single page that a user can use as a bookmark, homepage or share it with friends – voila, viral and useful at the same time.

Similar aha moments was creating a link called “random clue you haven’t voted” which would encourage the user to both explore more content as well as encourage to vote at the same time, and so on.

The latest project is StackParts.com – a simple catalog of parts for a web stack so that developers can weigh in their options and discover new ones for their next webapp. Built using Tornado, Python, Fabric and YAML files as the NoSQL database ;-) .

This project was again interesting for the use of tags to organize the projects and the relationships between them, which you can see in action when you visit any project page on stackparts.com.

stackparts.com

There was a good discussion on HN about StackParts and was featured on O’Reilly Radar, and if Wayne Seguin likes it, there must be some value in it.

(As an aside, the site is also a testament to my total lack of design skills.)

And all the while, Joshua is busy with his own startup!

In summary, it’s been a fascinating experience where Joshua is doing the product management and I’m doing the coding.

My two favorite lessons from this experience are:

“You can’t reason about products – great products are emotional.”

and:

joshua startupquote idea log

Talk on Productivity at Barcamp Bangalore 10

Tuesday, June 14th, 2011
At Barcamp Bangalore 10 on Saturday, I talked about GTD, Pomodoro and Productivity: NOTE: If you have trouble viewing the web version, there is also a PDF version of my slides. I was nervous when preparing for this talk because it is not a concrete topic, it’s something abstract and perhaps even illusive for many people, so when I started off my session, I asked people to set aside their cynicism for half an hour, I then established some source credibility, explained my view of how I look at productivity, success and happiness, and how GTD and Pomodoro tie into all this. The presentation above is quite self-explanatory, so I’ll not repeat that again, except for the demo-on-whiteboard part where I did a live session about how to do Pomodoro. (photo by @the100rabh) The session went surprisingly well, and most people grokked what I was explaining, which I’m still very surprised about. I guess part of it is because (1) the audience was so interactive and asked questions and (2) most people in the audience have already tried experimenting with todo lists and GTD, so it is a problem they were already facing, so they assimilated what I was saying very quickly. (photo by @anenth) The best part about Barcamp is that I got to talk about a personal obsession of mine and I would have otherwise probably never gotten a chance to discuss such a topic in-person with other people who are interested in this topic. Some of the feedback on my session:

Loved the session on Pomodoro and GTD by @swaroopch at #BCB10!
Jun 11 via TweetDeckFavoriteRetweetReply

swaroopchSwaroop C H
in reply to @swaroopch

@swaroopch i wanted to attend that but it was full, i couldn’t come in!! #bcb10
Jun 11 via TweetDeckFavoriteRetweetReply

Interesting, thought provoking conversations with @swaroopch about productivity and planning on getting things done. Now for the doing…
Jun 11 via EchofonFavoriteRetweetReply

It was even more fun to hear from people when days after the conference, they were actually trying out the Pomodoro technique:

@swaroopch Looks like, i need a pomodoro allocated to read the pomodoro ebook . .too many distractions!
Jun 13 via MetroTwitFavoriteRetweetReply

I started practising the Pomodoro Technique @swaroopch taught us at #bcb10. So far so good! (cc: @theAnand). (oops, this is interruption ;)
Jun 13 via webFavoriteRetweetReply

arunbasillalArun Basil Lal
in reply to @arunbasillal

@arunbasillal @swaroopch @theAnand well, a fact is that Pomodoro Technique is well suited for exams. Tried and tested. higher efficiency !
Jun 13 via webFavoriteRetweetReply

http://twitter.com/kaushalgoa/statuses/80498975857324032 There were many other good sessions in Barcamp that I liked, I especially loved the sessions about the Namma Cycle project and about ShreeKumar’s adventures and how to survive while doing a yatra across the country, talking the locals, etc.

The slower you travel, the more you learn. What have you learned on a flight? – Shree at #BCB10
Jun 11 via twiccaFavoriteRetweetReply

And I really do hope that the Namma Cycle project takes off – Murali who effused passion when talking about it has shown a lot of progress already – got sponsorship, got government buy-in, and is starting off at Bangalore University and has big dreams about turning Bangalore into a cycling city. That seems to be already under way, with the new cycle stand near M G Road. Overall, even my non-techie wife thoroughly enjoyed the day and was inspired by the people she met at Barcamp. And that really says it all for me on how much I enjoyed going to Barcamp again.

Good talks on Productivity hacks, JS, Bangalore bicycle venture etc. Met some great folks. Lovely day. #bcb10
Jun 11 via webFavoriteRetweetReply

Thanks @barcampbng for pulling off another fine barcamp. Some good sessions plus catching up with folks made it worth the travel #BCB10
Jun 11 via twiccaFavoriteRetweetReply

Special thanks to SAP Labs India for hosting the Barcamp in their beautiful campus and the great lunch as well. And not to forget, all the organizers of BCB10, kudos to you guys for making it happen! P.S. Regarding the Quantified Self phenomenon, I highly recommend reading the New York Times article by Gary Wolf on The Data Driven Life. Update: Just remembered a related old article of mine – Creativity and Organization is Impact”.

Statistics to wow non-techies about digital future

Wednesday, May 25th, 2011

A common question I get from non-techies is “Is ecommerce for real? Do people really buy online?”

My line of argument is that the future is digital, and hence buying online is a natural consequence of that.

However, just saying that was not convincing enough. So I gathered some statistics as proof and to wow them:

Closer to home:

Then there always is the trump card of how ubiquitous online ticketing has become…

As you can see, digital is happening in India and with RBI reporting that 35% of transactions (and 88% of the total amount) were electronic and Cash on Delivery slowly happening, how far will ecommerce be behind?

How would you convince someone that the future is digital and that ecommerce will be big in India?

Passionate Programmer book review

Tuesday, May 17th, 2011

Every once in a while I get an email like this:

Sir, I am a beginner to python and programming. I started with the C++ and found it hard so one day via google I found your perfect tutorial “A byte of Python”. I read the whole tutorial in one day because it is so interesting and helpful. Sir, I have created the script to backup files from directory as you mentioned. Please see the script once and tell me if I have chances in programming career. Sir I am final B.tech student and I love programming. But I was rejected by every company during campus placement because of my poor communication skills and due to this my confidence level is very low. Sir I have also created a web based application using PHP, MySQL and Kannel on Debian based server for intra-college communication. Sir, I am regular reader of your blog and I respect what you are doing to help freshers like me. Sir I would like to know if you have any advice for me.

And like this:

I want to thank you about this great book ;-) . I am a 20-years-old student in computer science from Bulgaria and i found this book very interesting and helpful. I’ve been programming in python for half a month. I had little experience in C from the university and I wanted to learn a high level language with simple syntax like Python and then learn C++ and start writing useful programs. I send you a solution of the problem in the end of the book that is just a demo version. Can you give me a hint what i got to improve to make the address book program better and give me the source code of your solution? I really want to become a programmer so any advices especially from a man with your knowledge would be highly appreciated! Thanks.

For a long time, I used to scratch my head for every such email because I really didn’t know what advice I have to offer. I did end up writing How Fresh Graduates Can Grow which a lot of students have liked.

In the past couple of years, I have started replying with just one line - I ask them to read The Passionate Programmer: Creating a Remarkable Career in Software Development by Chad Fowler. I happily recommend this book knowing that if they actually do read and apply the principles in this book, they can’t go wrong.

I had read this book in its first edition when it was called My Job Went to India and I read it again when the renamed second edition came out.

The title of the book is self-explanatory but what makes the book special from other regular career books is that it is geared specifically to the art of software programming as well as explaining networking and many soft concepts/human aspects in a for-geeks “53 recipes” style.

Some of my favorite recipes/lessons are:

4. Be the worst

Legendary jazz guitarist Pat Metheny has a stock piece of advice for young musicians, which is “Always be the worst guy in every band you’re in.” Being the worst guy in the band means always playing with people who are better than you.

Being the worst guy/gal on the team has the same effect as being the worst guy in the band. You find that you’re unexplainably smarter. You even speak and write more intelligently. Your code and designs get more elegant, and you find that you’re able to solve hard problems with increasingly creative solutions.

6. Don’t listen to your parents

I remember talking to a friend about potentially moving out of this company, and he said, “Is it your destiny to work at $bigcompany for the rest of your life?”Hell no it wasn’t!_ So, I quickly found another job and left.

This movement marked the clear beginning of a nonlinear jump in my success in the software industry. I saw new domains, I worked on harder problems, and I was rewarded more heavily than ever before. It was scary at times, but when I decided to be less fear-driven and conservative in my career choice, the shape and tone of my career – my life – changed for the better.

15. Practice, practice, practice

When you practice music, it shouldn’t sound good. If you always sound good during practice sessions, it means you’re not stretching your limits. That’s what practice is for. The same is true in sports. Athletes push themselves to the limit during workouts so they can expand those limits for real performances. They let the ugliness happen behind closed doors – not when they’re actually working.

Our industry tends to practice on the job. Can you imagine a professional musician getting onstage and replicating the gibberish from my university’s practice rooms? It wouldn’t be tolerated. Musicians are paid to perform in public – not to practice. As an industry, we need to make time for practice.

Practicing may include learning more about your programming environment (APIs, libraries, methodologies, etc.), sight reading (reading new pieces of open source code to improve your ability to read and understand code), improvisation (introduce new constraints in small projects to improve your thinking abilities) and so on. [paraphrased]

32. Say it, Do it, Show it

You should start communicating your plans to your management. The best time to start communicating the plans is after you have executed at least one cycle of the plan. And – this is an important point – start doing it before they ask you to do it. No manager in his or her right mind would be unhappy to receive a succinct weekly e-mail from an employee stating what was accomplished in the past week and what they plan to do in the next. Receiving this kind of regular message unsolicited is a manager’s dream.

Start by communicating week by week. When you’ve gotten comfortable with this process, start working in your thirty, sixty, and ninety-day plans. On the longer views, stick to high-level, impactful progress you plan to make on projects or systems you maintain. Always state these long-term plans as proposals to your manager, and ask for feedback.

The most critical factor to keep in mind with everything that goes onto a plan is that it should always be accounted for later. Every item must be either visibly completed, delayed, removed, or replaced. No items should go unaccounted for. If items show up on a plan and are never mentioned again, people will stop trusting your plans, and the plans and you will counteract the effectiveness of planning. Even if the outcome is bad, you should communicate it as such. We all make mistakes. The way to differentiate yourself is to address your mistakes or inabilities publicly and ask for help resolving them. Consistently tracing tasks on a plan will create the deserved impression that no important work is getting lost in the mix.

43. Making the Hang

Speaking for myself (and extrapolating from there), the most serious barrier between us mortals and the people we admire is our own fear. Associating with smart, well-connected people who can teach you things or help you find work is possibly the best way to improve yourself, but a lot of us are afraid to try. Being part of a tight-knit professional community is how musicians, artists, and other craftspeople have stayed strong and evolved their respective artforms for years. The gurus are the supernodes in the social and professional network. All it takes to make the connection is a little less humility.

Of course, you don’t want to just randomly start babbling at these people. You’ll obviously want to seek out the ones with which you have something in common. Perhaps you read an article that someone wrote that was influential. You could show them work you’ve done as a result and get their input. Or, maybe you’ve created a software interface to a system that someone created. That’s a great and legitimate way to make the connection with someone.

44. Already Obsolete

You have to start by realizing that even if you’re on the bleeding edge of today’s wave, you’re already probably behind on the next one. Timing being everything, start thinking ahead with your study. What will be possible in two years that isn’t possible now? What if disk space were so cheap it was practically free? What if processors were two times faster? What would we not have to worry about optimizing for? How might these advances change what’s going to hit?

Yes, it’s a bit of a gamble. But, it’s a game that you will definitely lose if you don’t play. The worst case is that you’ve learned something enriching that isn’t directly applicable to your job in two years. So, you’re still better off looking ahead and taking a gamble like this. The best case is that you remain ahead of the curve and can continue to be an expert in leading-edge technologies.

Looking ahead and being explicit about your skill development can mean the difference between being blind or visionary.

P.S. This lesson was the reason why I started admiring DHH even more after seeing he is not afraid to include CoffeeScript and SCSS in Rails 3.1

51. Avoid Waterfall Career Planning

The important thing to realize is that change is not only possible in your career but necessary. As a software developer, you would never want to pour yourself into developing something your client doesn’t want. Agile methodologies help prevent you from doing so. The same is true of your career. Set big goals, but make constant corrections along the way. Learn from the experience, and change the goals as you go. Ultimately, a happy customer is what we all want (especially when, as we plan our careers, we are our own customers) – not a completed requirement.

I probably put more excerpts from the book here than I should, but I wanted to drive home the point on some of the non-obvious-but-critical points that the book raises that every software developer should ponder about.

Go buy the book / ebook now!



Update: Also see Top 5 Developer Skills That Will Get You Hired or Promoted

Everyday reminder about Impact

Wednesday, February 23rd, 2011

Everyday I get emails from readers of my books that makes me wonder: Am I continuing to make an impact everyday? Can I have the same impact again through my work? Maybe, let’s see.

But still, it’s difficult to top this:

I’m a 16-year-old boy from Guangxi,China.

Thanks for the book named A Byte of Python of yours.I learnt lots of things from it.

And this:

Dear Sir,

I have never been able to program before but with your byte of python I actually managed to not only write the small programs but even understand. For me this is good because I am 57 years old and I always gave up any programming I attempted to learn before no matter how desirable a goal it seemed. The real problem I run into is what the words mean. I consider myself fairly literate but when I run into a special word I do not know the meaning of, it frustrates me, especially when I cannot find a definition, and there goes the understanding. Also, there are gradients of knowledge that are skipped. One minute you’re riding along nicely and the next minute you’re behind the 8 ball. Along the way, one quits. You, on the other hand, seem to have undercut this better than anyone I have encountered before. Your explanations are clear and concise and you define words well so I understood more of python than I have of any other language including Basic which I tried and gave up on years ago and the understanding flows very well. And you’re giving hope to an older person who really wants to learn to program!

Thanks so much

These emails are enormously humbling and reminds me to continue to focus on the impact of what I do.

Programming Language Adoption

Tuesday, February 1st, 2011

55 people have asked me to write about:

Indian companies just don’t take Python seriously, not as much as Perl. Why is that?

28 people have asked me to write about:

Most companies opting for Ruby as their programming language of choice instead of Python

51 people have asked me to write about:

The future of the Perl programming language?

Phew, that is quite a lot of people asking about programming language adoption!

The TLDR version of my thoughts on this topic is: Companies are choosing the right tool and the right community for the right job. Which programming language is used in your company depends on the kind of work they are doing.

Ruby and Rails ecosystems are built by and built for web programmers. That is why you will see web programmers switching from PHP and Python to Rails. For web programming, I do believe that Rails has an edge, not just because of the framework itself, but because of the community rallying around it. The amount of amazingly useful stuff that they churn out outpaces any other community w.r.t. web-dev, and they even have quick effective screencasts to make it digestable, hence their edge!

Data analysis is the hot thing these days and as per O’Reilly, Python is the choice of language for data analysis even though Ruby gets more buzz in the tech news. It is the same reason why scientists are switching away from Ruby to Python.

Similarly, I believe that Perl is still used a lot as a “glue language” and “text munging language” which has always been its forte and continues to be its forte, although Python and Ruby have been slowly entering that territory. Even though there are marketing reasons why Perl is no longer as popular, if you do use Modern Perl, you can be as effective as with the other two languages [1]. For example, if you notice the recent announcement of Amazon “Simple Email Service”, you will notice that their scripts SDK is written in Perl! Also, if you read the latest Perl news it is not lagging behind the other languages, it just doesn’t get the “buzz” factor these days. Programming languages are like fashion, they keep coming back in cycles. Remember the days when JavaScript was considered a pain and today, it’s the new hotness? (same goes for Haskell) We owe a lot to Perl and perhaps Perl 6 will teach us the future of things yet again, who knows!

So I have a question back for the 134 people who asked the above 3 questions – Is the programming language chosen by your company match the kind of community we have described here?

What would you say to these 134 people?


[1] Perl was the original magical language which I still have a soft corner for, since I have written a lot of Perl code at Yahoo! and thoroughly enjoyed it.

Cyber Celebrity?

Monday, January 17th, 2011

Deccan Chronicle article says:

In the blogosphere, technology rules supreme as some of the most popular bloggers, Prashanth HN (techbangalore.com), Swaroop C H (swaroopch.com) and Vikas S N (techknots.com) all blog about it.

Mentioned in Deccan Chronicle