Career Advice
There have been many times where I’ve been asked for “career advice”, especially after a talk. I usually suggest them to ‘build a repertoire of things you have done, things you are capable of, things you like to do’. But I’ve never really been sure of this advice nor do I feel I have the credibility to answer such questions.
The good thing is that I have now found something to point them to - Garr Reynolds‘ presentation on a career advice book. This presentation explain things very well and is so beautifully done that it can capture the attention of a young mind:
The other resource I have found useful is Aaron Swartz’s “How to Get a Job Like Mine”.
Cultivating a good career is like creating the Mona Lisa. The right tools and strategies will only get you partway there - the soul of the artist is necessary to create something worthwhile.
Last day at Adobe
As Jeff Atwood said recently in his entry on Choosing Your Own Adventure:
I’ve spent the last six months staring at this page trying to figure out what to do. With some trepidation, I’m now turning to page 10. Thursday will be my last day at Vertigo. I will sorely miss the camaraderie and the many close personal friends I’ve made at Vertigo. Vertigo remains a fantastic place to work.
Sometimes choosing your own adventure means closing one door to open another. And I have to close the door on Vertigo, however reluctantly, to fully and wholeheartedly explore the alternatives. It would be unfair to Vertigo and to myself to do anything less. I’m not sure what exactly lies on page 10. I won’t lie to you. It’s scary to trade the security of a safe, salaried job for the unknowns. But the way I look at it, if it’s not a little scary, then it’s not the right choice. Failure is always an option.
Just s/Vertigo/Adobe/g and that’s my situation.
It was not an easy decision to make. Especially considering the people I work with. In fact, I squarely blame my Flex teammates Sreenivas, Sameer, Raghu, Harish, Harpreet, Kaashif, Anirudh, Sujit, Annam, Ram, Jyoti and so many others for making this such a difficult decision.
There are two incidents that have stuck in my mind for the past few days. One is the recent internal tech summit we had at Noida where Adobeans got to showcase each others’ technologies and ideas. Second, the (internal) showcase applications that our team created using our data visualization platform. I was simply blown away. The enthusiasm, the energy and the ideas was so addictive.
It seems strange that I should leave all this behind. It seems stranger that I have no clue where I’ll be six months from now. But yeah, I have some ideas.
As Ray Bradbury said:
If we listened to our intellect we’d never have a love affair. We’d never have a friendship. We’d never go in business because we’d be cynical: “It’s gonna go wrong.” Or “She’s going to hurt me.” Or, “I’ve had a couple of bad love affairs, so therefore …” Well, that’s nonsense. You’re going to miss life. You’ve got to jump off the cliff all the time and build your wings on the way down.
Closed source on Linux is hard
After working on the porting project to make Flex Builder run on Linux, I am starting to see why closed source software on Linux is hard.
There are just a handful of closed source products on Linux (counting only the famous ones) - Opera, Skype, Nero, Acrobat Reader, and Flash Player. Hmmm, I can think of just 5.
Why is that important at all? Because software developers who are not initiated to the FOSS philosophy will be scared off the platform because of its inherent complexities. For example, in this project, getting the software to run on the various Linux distros was, to put it lightly, troublesome.
There are a number of issues that we faced, which I’m certain is the reason others don’t want to get into this as well.
Let’s start with Eclipse. Eclipse runs fairly well on different platforms (let’s ignore the memory-hogging issue here), but on Linux, it’s a different ballgame. Somehow, the polishing of the UI is markedly lacking. Yes, we’ve filed bugs, but turns out it’s not really Eclipse’s fault, it’s simply because different window managers work differently on Linux, and handling all of this is a nightmare.
Oh, and this gets better when it comes to distros. For example, the latest released Eclipse 3.3 won’t run on the latest released Fedora version. You have to wait till Fedora 8! Because of this, we had to drop support for Fedora, and instead concentrated on other distros such as Suse, Red Hat and Ubuntu.
That brings up another problem - the number of distros. The QA effort required for the Flex Builder (FB) on Linux project was huge indeed. And yes, we found problems that occurred only on Red Hat but not on Ubuntu, and so on. For example, clicking on help links in Eclipse on Red Hat opens a new window every time whereas it properly displays in the same window on Ubuntu. Again, it’s not really Eclipse’s fault. Go figure.
Then, there’s the issue of running Firefox. There’s nothing wrong with
Firefox itself, but what’s with each distro trying to customize the
Firefox startup script?! FB on Linux has to check whether the correct
version of the Flash Player plugin is installed in the browser, and
checking this is a long
procedure
- do we check in ~/.firefox/plugins/ directory or
~/.mozilla/plugins/ or $MOZ_PLUGIN_PATH or some
Suse-distro-specific directory such as
/usr/lib/browser-plugins/!
Life is simply too hard compared to other operating systems.
Isn’t it a wonder that nobody wants to develop a closed source product for Linux? Even Microsoft is just handing over the audio video codecs to Novell and letting them to do the hard work of creating Moonlight on Linux. Microsoft is smart enough not to try to maintain a Linux version of Silverlight on its own (I’m considering only technical issues, let’s set aside philosophical issues on this one).
If we really want to make Linux a good platform, then we need to stop messing around with the basics - at least please don’t muck up the basic shell scripts and paths.
The way to get more people, in large numbers, to understand the open source and free software philosophies is by making their first steps easy. It cannot be an all-or-nothing approach. Closed source software on Linux is not practical. And that’s a bad thing because if we can’t convert software developers to use a different platform, how can we expect mom and pop to switch to Linux?
In spite of all this, I think we’ve done a good job of FB on Linux, and happy to see all the great response we’ve seen so far, including reports of success on various distros that we’ve never even heard before. So please keep the feedback coming!
Standard disclaimer: The opinions expressed here are my own, not Adobe’s.
Announcing Flex Builder on Linux
Now presenting the alpha of the Flex Builder IDE on Linux! (this was announced at the Adobe MAX 2007 conference). You can now create Flex projects, write code with intellisense-like hinting, compile and debug all within an IDE based on Eclipse, on Linux. You heard it right, it’s officially supported by Adobe. Download it NOW.
The future direction of Flex Builder on Linux depends mostly on community feedback. Yes, seriously. So please do write in your feedback even if it is just “works well” or “it sucks”. Why is this important? The more the feedback, the more thought will be given to the product. This is how things work in Adobe (as far as I’ve seen). So again, voice your opinion on what you think of Flex Builder on Linux, and what you’d like to see and not see in it.
Disclosure: I am part of this project. I mostly handled the Linuxisms in the IDE functionality.
Update : Lots of feedback and comments (good to see that it’s mostly positive) on Digg, Slashdot and ZDNet. There’s also a video of the actual announcement put online by Peter Elst.
Moxie . AdvancedDataGrid . OutInTheWild()
Flex 3 beta 1 is out, and along with it something that I’ve been part of - the AdvancedDataGrid component.
An example built using the AdvancedDataGrid is embedded below (it is a SWF file, requires Flash Player 9 for viewing):
Notice the tree view within a grid - that alone is a feature not found easily. On top of that, notice that there is a ‘total’ row in each of the categories of planets (click on the arrow to unfold a branch) - there are two aspects to this, first the summary (i.e. the total) is automatically calculated using a Collections API we have built, and secondly, you can specify a custom SummaryRenderer to display it any way you want, and in our case we are using column spanning so that it spans over the entire row. Now try doing that with your UI framework!
To understand what more you can do with AdvancedDataGrid, do read our writeup with lots of example code. Unfortunately, the live samples are not inline in the writeup (as we had originally written), you have to download them separately. You can also watch a video demonstration of AdvancedDataGrid. I hope this gives an inkling about the wide range of features and functionality in the AdvancedDataGrid.
Working on AdvancedDataGrid has been fun for me, mostly because of Sreenivas and Sameer, my teammates, who taught me most of what I have learnt about Flex.
And as someone commented on Ted’s post featuring AdvancedDataGrid:
OK, the workflow and the code enhancements were nice, but not enough to get me excited. But now I totally want to get my hands on that AdvancedDataGrid!
Evolution of Adobe Flex : now open source
That’s right, the Flex SDK is going to be licensed under the Mozilla Public License - this means the compiler, debugger, the huge libraries - it’s all going to be open source when Flex 3 “Moxie” is going to be released.
This news was not so surprising to me because I’ve heard there have been lots and lots of discussions before on how to make Flex “open”. You have to keep in mind that a big company like Adobe is making transition from being a fully closed company to being more open - from the introduction of Adobe Labs to getting more open culture infused from Macromedia, to donating the ActionScript3 VM as open source to Mozilla, and now Flex. You can clearly see how this evolution is happening. Even the PDF format is going from a de-facto standard to a de-jure standard by the ISO organization.
Coming back to Flex, just some time ago I had noted how open Flex is, even source-open but not “open source”, we’re now taking the next big step and making even the code free. Awesome stuff.
I personally still think there’s one issue that needs to be addressed. There are two parts to the story - the production and consumption, which is, the creation and the playback. The creation part is now not just open but open source! Why not make the playback part open? If we can allow anyone to create a player that plays SWF formats, that would be great. Of course, if we make the Flash Player itself open source, that would be mind-blowing, but I think the minimum that should be done is to allow other SWF players in the market. Not that anybody can beat Flash Player (it’s very very hard)…
The news is still sinking in (it was announced just an hour ago, as of this writing). So, more coverage here:
Big Brother
Long ago, I had seen Nat Friedman show off a small Mono app that displayed the amount of time you spent on each application, and updated the chart in real time - so that you could clearly make out how much time you’re spending in the browser and how much time you’re actually spending on work.
I couldn’t locate that app, so I had been wanting to write my own version for a long time and finally got around to doing it today.
It turned out to be easier than I thought. First, I had to figure out how to
find out what application has the current focus at any point in time, and I was
trying to see if I can do it from Python (using the Win32 extensions, and yes,
this hack is Windows-only). After a lot of searching, I finally found out that
it boils down to just one line:
win32gui.GetWindowText(win32gui.GetForegroundWindow()) and this
would fetch the title of the application that the user is using at that moment.
After this, all I had to was record the window title every 5 seconds and increment the time spent for each window, and voila, the data is ready. I was quite satisfied with just a command line output, but Raghu egged me on to create a Flex chart frontend for it as well, and when Harish joined in, the fun really got started. The first problem was how to push the data from Python to Flex, and we use the oldest trick in the book - write it to a file. Next, Flex can read the same file as long as the file is in the same directory as the SWF (i.e. the Flash file) location. Then we parse the text to get back the original data, create a pie chart and point it to this data, and voila we have a beautiful chart:
Now I can finally track what I actually end up doing the whole day, heh. You can download the files if you want to use it as well:
- The Python script called “BigBrother.py”
- The MXML file called “BigBrotherGUI.mxml”
- The compiled SWF file for those who don’t want to go through the hassle of compiling the MXML to SWF.
- Just run/open both
BigBrother.pyandBigBrotherGUI.swfat the same time and watch the statistics.
And who said meetings aren’t productive
Update:
Chris J Andrews made a JavaScript GUI frontend.
Theyagarajan modified the Python script to make it work on Linux.
Outlook on Linux : Evolution Exchange
My laptop at work has some network configuration issue (I think) leading to Outlook not finding the server - sometimes it works, sometimes it doesn’t. But every other application uses the internet/intranet just fine. Only Outlook doesn’t work and I’m tired of reading the mails from a web interface because it is painfully slow and more so for high traffic mailing lists.
So, I switched on my desktop (which has only Kubuntu installed and no Windows),
ran apt-get install evolution and apt-get install evolution-exchange
commands, started Evolution, added a
new Microsoft Exchange account and it started downloading all the messages.
It’s ironic that I have to use a Linux machine to connect to a Microsoft Exchange server. Maybe now I can get my laptop fixed by our IS. The last time I reported the same problem, they deleted my profile and added it again and I had to spend an entire day customizing my setup again, and the original problem still wasn’t fixed. I don’t want to go through that trouble again…
P.S. On a completely unrelated note, Beryl makes using Linux so much more fun. The Expose-like preview of windows (F8 key) is very useful.
Update: It’s not over til it’s over.
Update 2: Well, Evolution is locally caching the mail, all I have to do is to leave it on overnight :), well that mitigates my email reading issues a lot, assuming it keeps working that way.
Update 3 on 2007-06-13 Wed 04:07 PM: Finally solved the mystery of Outlook not working… it was because of the Sify Broadband software installed! Renaming all the Sify-related exes to some other extension fixed the issue. Go figure!
Moxie
Yep, Moxie. That’s the codename for the next version of Flex. And it was one of the suggestions by yours truly in the internal discussions.
Why this name? My reasoning was:
flex -> strength -> http://thesaurus.reference.com/browse/strength -> mana, pizzazz, moxie, thew, …
Ely liked the name ‘moxie’ a lot especially because of the way the fingers are evenly distributed across the keyboard when you type ‘moxie’ :), and he championed the name which convinced the Flexers to vote for it.
This led me to say:
Looking at the popularity of ‘moxie’, I now also propose that our slogan be “Flex your moxie”
In this particular context, moxie can mean appetite, aspiration, craving, desire, love, passion, right stuff, zeal, chutzpah, guts, temerity, energy, robustness, vigor, competence, savvy, skill, gumption, impetus, vitality, endurance, grit, stamina, staying power, ability, mettle, stamina, etc.
(Source: http://thesaurus.reference.com/browse/moxie )
Also, Moxie was the name of a language for real-time computer music synthesis — so Moxie is how you express your beautiful tunes on the computer, and Flex is how you express your beautiful UIs on the computer.
[”Moxie: A Language for Computer Music Performance”,
D. Collinge, Proc Intl Computer Music Conf, Computer Music
Assoc 1984, pp.217-220].
(Source : http://dictionary.reference.com/browse/moxie)
And Ted says Drink Moxie.
It’s all in the mind
(Warning : I just started typing this post because the title popped into my head, so what follows might seem like a lot of rambling.)
No matter how much we talk about talent, opportunities, and other things we can blame on, making things happen basically boils down to one thing - it’s all in the mind. And of course, you need to put in some effort too, but that again is derived from your mindset.
For example, I have a few problems that I chronically face:
If I have an idea or come across something interesting or even start on a new project at work, I tend to have a lot of enthusiasm at first but soon forget it later in the drudgery of everyday life, and especially so when it comes to personal projects.
I tend to get worked up on deadlines and schedules without actually paying attention to the work.
I am constantly worried about not following up on things and not being organized.
About six months ago, I started following the ‘Getting Things Done’ (GTD) philosophy and it has helped me improve a lot w.r.t. these problems. This helped me concentrate on actions and not only on problems. As and when you keep showing up and doing things, you’ll see the progress yourself and you’ll be a happier person. That reminds me of this LifeHack article: “All you need is the willingness to take the next most obvious step - then repeat the process again and again, regardless of how you feel. Try it.Happiness comes from seeing the results of your efforts. You don’t need it before you start.“
The gist of GTD is to concentrate only on the next physical action and let other things take care of itself. This helped me deal with the second problem.
When it comes to problem 3, I’m way more organized now, to the point, where I think my actual talent (or the lack of it) and the willingness to put in effort are the barriers. I hope Knuth’s philosophy of being at the bottom of things will help me here.
These three problems are similar in the sense that they tend towards one point - it’s all in the mind. To alleviate it, I applied the GTD approach.
Similarly, if you’re worried about what kind of raise you’re going to get this year, etc., then stop worrying. There is no use of worrying over things that you can’t control. You can’t control the traffic on the road, so if you need to reach a place on time, just leave early and the rest will take care of itself.
If you’ve been sweating it out for the past couple of hours trying to fix a bug and you’re not making any headway, then it is important to switch to a different problem and then come back later. You’ll come back with a fresh perspective, fresh energy and fresh ideas on what to look out for and may be the things you’ve overlooked previously might be the actual problem. This is also important because it helps you to always keep moving forward, one way or another, and you don’t get stuck in one project and don’t move in other projects (and by project, I mean the GTD meaning of ‘project’).
There has been many a time when I’ve gotten frustrated and feel like just banging my head on the keyboard. This is where I take a step back, relax and say to myself ‘CUT to the G’ (yes, that’s a phrase I coined for myself):
- Concentrate
- Understand
- Think
- Get Things Done
Each of these steps is important in its own way, but I personally underestimate the value of the second step. Knowing what you’re exactly doing is a critical nature of a programmer especially because only you would know how the system exactly works and nobody else would look at it, everyone else is just a end user.
Step 4 is eventually what gets you moving, but Steps 2 and 3 are equally important. As Abraham Lincoln once said “If I had eight hours to chop down a tree, I’d spend six hours sharpening my axe.” And to get to this stage, you need to do Step 1 which boils down to one thing - It’s all in the mind. That’s why it’s so hard.
Footnotes
Related reading: ‘Leadership - Some Random Thoughts’ by Lawrence Rabiner.
That doesn’t mean to say that you/I can achieve anything and everything, it’s just that you need to get over the mindblocks to do even the simple things that you are capable of achieving.
But Flex is not open source…
My manager and myself were having an informal chat about the various RIA frameworks and platforms out there. To be honest, I wasn’t convinced about Flex and so, we kept on discussing the pros and cons, and it turned out that I learnt a bit about Flex this way. One of the points we discussed was that Flex is not open source. He said “It’s not open source, but it is as close to it as it can get.”
I was intrigued by this and did some homework.
Update : You may want to read the updated remarks at the end before reading the whole passage.





