Friday 31 December 2010

On being outclassed

I got a kick out of solving puzzles. The feeling of churning (rusty) gears in my head is a great feeling - and many times unstoppable. That's why I could, after a nice lunch in our Common Room, go on with various Sudoku versions for ages. But as I find many games boring after a while, programming never really got to that point so far. That's why programming + puzzles is such a tempting combination for me.

Not that I'm really good at it, au contraire. All I said is I enjoy them. The place which grew synonymous to programming puzzles for me is TopCoder, a site with regular "single round matches" or SRMs, which are basically frantic 75 minutes coding fests, for score and glory. And learning. I'm on TopCoder since 2003, but only took part in a handful of SRMs, about one a year, while they are held almost every week. The schedule of the one this week was kind to my timezone, 10am is good to do anything that requires great deal of thinking. It was really fun, and while I haven't got a great score, I got some (unlike in the last few matches :P ) and it was interesting to see the differences between good and great coders.



The ranking system divides people into two divisions based on their scores. In every SRM there are three problems, in increasing difficulty, Level One, Two and Three. Divison Two's Level Two and Three problems are the same as Division One's Level One and Two, thus one can see how people in the different division solve the same question. Oh, because you can see, check and challenge every submitted code.

This time I finished the easiest problem, but run out of time on the second one (see links to the problems and explanation in the SRM 492 Match analysis). So I was really curious how does the best solution (highest score) looks like in my division. It's two pages of code with multiple helper functions, global variables and the likes. Even the second and third were similar in essence.
Then I took a look at the best solution of the top people: about 3/4 of a page, single function, concise, organized.... And all that had to be written in a very short time to have such high score. (Could check some of this out from the SRM 492 Match statistics).

All this got me thinking, there has to be a qualitative difference between the good and great people, not just the "quantitative" difference in the score. To solve the problems you are given (in this competition, or any programming) most programmers who try hard enough would get somewhere. But what makes a person who can code so clearly? More practice? Or is it more like going from Siddhattha to Buddha, a transition that goes one way: you are either enlightened, or not, and if you are, you'll never look at the world the same way.

Thinking about it, this qualitative difference must be here present in many other things as well. Like all the "good" coffees that I drink to fuel the brain, but that cannot prepare me for the occasional find of "great" coffee. The two share almost only the name. Just like programmers: same title, different universe.

Probably I'll never get great, but I'll sure will try. And how? Practice and learn more from people ahead of me (not hard, on TopCoder I'm currently at the 13th percentile, such a crying shame:). There are other places as well to solve maybe different kind of problems Coderloop and Facebook engineering puzzles. But once, just once, I'd like to do the TopCoder Marathon Match. But that's for a different post.

Ps: the coffee example just popped up because I had a really great one yesterday. Almost 24h ago and I can still feel its effect.

Friday 10 December 2010

Chrome Web (Candy) Store

My first browser was Netscape in 1997. Never really cared for IE for many reasons. Then along came Firefox and I really liked it. Started to spread the word, convert family and friends - with reasonable success. Then Google Chrome arrived. I really adored it. It was fast, useful, kinda no-nonsense browser that I wanted. But at that time it didn't have any extension support so I went back to Firefox for most of Internet adventures, only had a few "flings" every now and again. But then it got out of control and I eloped with Chrome... Now I only use that whenever I can (even if sometimes running the latest developement version, like 10.0.607.0 at the moment, can be slightly painful, but that's by definition).

When Chrome got extensions, they felt like an evolutionary step. I can install something in the browser that does not need restart? It was like going from Windows to Linux where instead of waiting for the reboot all the time you could run the same system for weeks and months if you wanted to. A bliss...

Don't remember when I first heard of the Chrome Web(App)Store, but I do recall that I didn't think much of it. The idea looked neat but not something that I would use. A few days ago, however, it got a bigger advertising push, had new features (as much as I can tell) like syncing the apps between different computers (the extensions did that before as well),... So I set out to try it.

It's like first trip to the candy store - I go and install every one of them that looks interesting. So what do I have now?




First impression of the whole Web Store that they are still looking for their own definition, what is an app - and most crucially, how's an app different from an extension or even a bare bookmark?
My thought so far: in most cases the difference is from marginal to non-existent. This is especially obvious for Google's own "apps": Gmail, Finance, Blogger, .... Those are just links to the respective websites. Why make it an app, then? I have two guesses, which are not exclusive:
well, they cannot be left out, duh!
many of the websites we use now are closer to the stand-alone desktop software we know very well than to a traditional website. This might be a nudge of reminder: "this is not a website, this is a web 2.0 application!"
The second one seems to be the more important insight, the blurring boundary of what's on the web and what's off. Guess the distinction is made when you go in a lecture room in the basement of your university and there are no plugs and waves and 2,3,3.5,4G connections... If you can still take notes? App. If have to ask your neighbor for paper, and yeah, pen, then it's Web 2.0.... Duh.

And even besides the Google apps, most others are just links. Some feel more "linky" than other. That's partly a design challenge (there are some truly gorgeous apps, sure) and partly an UI challenge of when to ask for that darn "sign-up" that will bring the business in. The pushy apps, and the ones that don't have Gmail login feel more "old-school" than the seamlessly integrated ones. I definitely don't want to make a new login for every app I install. That wouldn't be more convenient but more annoying than the desktop cousins.

So, what do I installed (and kept for more than 10 seconds)?
  • Graphics apps. They need to improve but I can see their potential, mostly for quick and dirty editing.
    • Aviary has a bunch of those (along with e.g. music editor), I have Advanced Image Editor (compete with Irfanview or GIMP) and the Vector Editor (compete with Inkscape). We'll see how they'll work out. Though I was surprised that it's flash instead of HTML5. Guess I expected too much
    • Sketchpad, because looks cool, otherwise yet another Paint clone.
  •  Productivity/Work, this seems to be a lot of very similar apps, I tried a few in many categories, currently using these ones:
    • Todo.ly, looks quite useful, simple and under developement. I had so many todo lists, but still the paper is best. This is quite okay so far. And it has an API, could think of what to do with it. Even though it merely a link, does not feel like that. Appness is quite justified, I think.
    • 280 Slides, well, I make most of my presentations in Latex/Beamer. But this chould be handy when something's needed quick. Though have to investigate if it can export things in a format other than .pptx (brrrr).
    • Write Space, this is one that I would really call an app, since it is really standalone and works offline. Pretty much a PyRoom clone, but a good one. Goal: distraction free writing. I think it gets there. I'd request the ability of editing more than one document, though.
    • LucidChart, flowchart, mindmap, wireframe, UI mockup site. Haven't tried it much, kinda "just in case". Seems to be team-oriented, collaborative editing.
    • Weeb.ly, website builder. For the ease of it. If there's something I care about I'll create it in a text editor anyway.
  •  Communications/Mobile:
    • Seesmic, a Twitter/Facebook/Linkedin client. Not bad, though I'm not sure how long I will use it: Twitter interface is very similar and already got used to it, Facebook takes up too much of my time already, and I'm on Linkedin not because of the status updates. I feel obliged to try it, though, since on Android it is the one I use.
    • Android Push Contacts, regardless the name it is to send SMS from your computer, through your phone. Also, received messages could show up on your desktop/laptop. I installed because it seems like a very convenient idea. I need to think of a reason/recipent to send an SMS, though, 99.99% of my business is email now. It is also open source (the Android part, the AppEngine site and the Chrome extension as well) so could be an interesting source of learning.
    • Fiabee, file sync between Chromes and other devices, phones included. Have to try it in detail. Looks like a more flashy Dropbox with smaller space and more features.
  • Random
    • Google eBooks, also slightly "linky", but feels like a library (well, it should!) so I guess an app is good for this. Going to check my favorite public domain books, I haven't commited myself to buying electronic versions yet.
    • Geni, a family tree creator. Great idea and I was looking for proper family tree visualization software before (though the jury is still out on how "great" this is), so I'll probably use it. Feels very weird that the program has so many fields to fill out about every single person - but if I think about it, there's nothing unusual. On the contrary, other sites few "bullet points" hollow out the differences between people. Nevertheless, I'm trying to set the right boundaries between usefulness of the site and my willingness of giving them any info.
Well, I guess this candy store won't run out of sweets. Let's see which app sticks and which one will fade.