Now a Professional Pythonista at Points!

I have been working for the past month as a Software Development Engineer at Points International.  While my role is not officially as a Python developer, a large portion of my work is building Python applications, services and libraries.  Also I get to develop in Java as well and maintain some very well engineered systems as well, so I get to deal with both worlds.  Even after a month, I am super excited to work at such a cool company and with awesome people.  It really feels like a bit of a dream job, in terms of what technology I get to use (Python, Linux desktops and distributed version control systems, w00t!) and the processes (yes Agile and proper software engineering totally works when done right).

But it is the people within the company that really makes it shine.  I get to be surrounded by smart, savvy, and welcoming coworkers, including a number of important and active Pythonistas that I look up to.  My team is just amazing, supportive, and I feel that in this short time span I’ve become a much better developer thanks to them.  Even on stressful days I feel motivated and excited to come to work and give it my all.  I feel incredibly lucky and fortunate to be at Points. 🙂

Diving into the Deep End with Python

Where I Stand with Java

Most of my professional experience in software development has centered around Java.  That should be no surprise as I learnt Java in university, and all the trappings that go with it: Javadoc, the Java Standard API, Eclipse and JUnit.  My professional work exposed me to JSP, Servlets, SpringMVC, Struts, JDBC, TestNG, Ant and the Android SDK.  Sure I’ve used other languages such as PHP, Perl, Scheme (mmm… functional programming…), C and Prolog.  The mainstay of my experience is still Java.

All that said, even as I include more and more exotic features of Java as language (i.e. enumeration, annotations, reflection, etc.) and as a platform, I find myself more and more constrained by the language itself.  Sure I feel comfortable with it, and I’ve written code personally that spans tens of thousands of lines.  However I find a lot of the code is boilerplate code.  Heck thanks to JAXB, I can quickly describe a series of classes using a XML schema.  That is right, a XML schema, one of those awfully obscure XML trappings that only enterprise application developers really should ever care about (or those working with complex document-style data).  Also a large Java codebase is nearly unapproachable with anything less than a powerful IDE.  Thank goodness for Eclipse!  (I write this wearing an Eclipse branded fleece jacket.)

Java is a wonderful and powerful language with great tooling.  However it just seems so wrong to have so much complexity.  I fear that this has more to do with the design decisions in the language itself than anything else.

Enter the Competitor: Python

I also learnt Python in university but I ended up using it largely for building system administration scripts rather than a general programming tool.  Instead of fighting with unwieldly BASH or Batch scripts for admin work, I use Python.  And I have created some powerful scripts using Python for tools for hunting down empty directories and rogue files for automated renaming.  After fighting with Java to do my bidding, I felt the need to look for some better language when building my new hobby project.  Also my recent attempts at learning Qt and C++ at the same time, have made me want to first learn the platform and then the language.  This is where Python seemed to hit a sweet spot.

While talking with one of my old university friends, Dan D’Alimonte, the topic of learning Qt came up.  Instead of using C++ for his Qt apps, Dan used PyQt.  After looking at his code, I decided to experiment with PySide and lo and behold I made a Qt app myself!  On the web side of things I heard a lot of good things about the Django web framework.  Hence I started experimenting with and investigating Python, PySide and Django.  In addition to the simple can-I-do-this-with-that experiments, and playing around with the tutorials, I researched the tooling and performance of Python based applications.

I am impressed so far with what I have found out about Python.  Coding in Python is a breeze and enjoyable.  I can comfortably use any text editor to program in Python.  I found that PyDev makes Python development while using Eclipse easy.  Getting new packages for Python is simple, and I do not have to rely on a package maintainer.  The standard libraries in Python are on par with Java’s.  You can always extend Python with a C or Java binding.  Building a desktop app using PySide turned out incredibly easy, compared to the standard C++ way of doing things.  Django is proving to be a very capable, and apparently *gasp* fast web framework especially when run on the optimized PyPy version of Python.  There is even mention of Python being able to build web frontends, at least in the documentation.  And importantly for me, Python has various XML, database layer, testing, and other enterprise and mobile capable libraries that I can potentially use in my day-to-day work.

Now naturally the quirks of a language become more readily visible once you actually start working on a real-life project.  That is my next step.  Then I can figure out if Python could really replace Java as my go-to language.  I will keep you posted once I get further in the project I am working on.  In the meantime, I’ve collected a bunch of links related to my investigation with Python.  Enjoy!

Python Related Links

Does Complexity Necessarily Translate Into Capability?

Two months ago I started work as a Java developer at Bluerush Media Group.  Shifting gears back into Java EE/JSP/Servlet and mostly backend work from Android development definitely took a while.  On one hand my work now is hidden behind layers and layers of servers, middleware and other “businessy” systems.  I definitely miss being able to have my work appreciated by many people.  Now only my fellow developers can compliment or complain about my work.  But on the other hand, I enjoy working with tested and tried technologies and platforms.  No more worrying about inconsistencies between devices.  No more fretting about what systems I communicate with.  No more frustrating moments of dealing with performance and optimization issues.  Instead there is more than enough computational power lying around that automation and abstraction become powerful tools to approaching and solving problems.  I feel less guilty about using some crazy library to configure itself, gather the necessary data and build part of the system for me.  In short, as with everything in life there are pros and cons to my work.

Just recently I discovered the joy of using JAXB.  It is mindbogglingly convenient to build entire packages of Java model classes from a single XML schema, and having JAXB handle the serialization and deserialization of Java models into XML and back again.   Using JAXB, some XML configuration files, a TestNG suite and some result data in CSV form, I could build out a pretty sweet and rather involved automated testing setup.  This let me run real stress tests on the application I am working on and letting me flesh out the code much faster and with greater confidence.  Or take the use of dependency injection from Spring or Guice, to help a developer initialize a large number of objects with complicated dependencies without getting lost.  The amount of automation and abstraction in Java EE is simply overwhelming.  However it does come with a price: complexity.  So while using the full power of Java EE and various libraries gives my applications a lot of capability, they also make the applications terribly complex.  It only gets more complex, the more “enterprisey” the application becomes.  There is simply no way I could even build the applications that I do, without having lots of complex tools such as a full-on IDE like Eclipse.

This brings me to the point of my post.  At same time as I delved further into Java EE, I am getting more and more interested in Python and Django.  After playing around a tiny bit with PySide building Qt apps in Python, and looking into Django I am surprised by how terse yet functional Python is.  Yes, Python being a scripted language will never outperform a compiled program (or even byte-code compiled Java app) in terms of performance.  But looking at how much computing power is available and how many more steps it takes to write a Java or other compiled source app… I wonder if programming in something like Python can not be more efficient.  What I am especially curious to find out is if one can build and maintain a large complex web app as one can in Java EE, but in Django and Python.  Basically I am curious of the capability of an app is proportional to its complexity.  Or is this just an illusion from living with a language and platform that lets you easily craft monolithic monsters?  Can one get the same results with good architecture, some smart engineering and a flexible language?

Kicking Tires

This week, I’ve started working on my delayed projects again.  I feel exhausted from the week.  But I also can not wait to play around with my projects.

Learning Qt

I’ve always admired the KDE and Qt developers.  They make some of the most innovative and interesting technology in the consumer-desktop-mobile land.  I’ve decided to pick up learning Qt and C++.  So far I’ve read the beginning of C++ GUI Programming with Qt 4 (1st ed).  I need to play around with C++, which I plan on doing it while using Qt Creator.  One of my first major Qt experiments might be getting the TEA text editor working on my Nokia 5800 XpressMusic.  I know that Nokia just released the tech preview  of Qt 4 for S60 devices.  But I’ll give it a shot.  Hopefully the GUI will port over nicely.

Completing justCheckers

Yes, the project that I left for dead still lives.  I want to work on it, as portfolio material.  I first plan on building a website in PHP (or maybe JSP?) that renders beautiful CSS and XHTML.  And then I need to give the project much love.  But I owe it to myself to finish this application.  I won’t build any crazy game servers.  But I want to make something totally configurable and fun.  And in the process I want to create something that proves that I am a strong Java developer.

Writing A Collection of Shards

I am going back to writing.  Unfortunately I need to start almost from scratch, since many of my written sections simply will not work.  The ideas are there.  I just need to get them down on paper.

Driving License

This one is the ultimate in the tire kicking sense.  I plan on getting my driver’s license really soon.  Aside from parking, I feel comfortable driving.  Once I figure out all this parking stuff, then I’ll be ready.  I’m exciting since this will give me a lot more mobility and flexiblity.  I’ll be able to solve a lot of problems and have even more time to do things in the day.  And I’ll be able to sleep and live in normal time periods.

Shifting Sands and Schedules

I’m blogging this entry fairly late in the day today.  I will enjoy sleeping longer and missing being in the office before the sunrises.  At least I will enjoy these guilty pleasures for the next couple of weeks.  Hence my blogging schedule will be thrown out of whack.  But I don’t mind the extra sleep.  I am definitely less cranky and more productive.

I should pick a better time to write this.  But I need a creative outlet.  Fighting with Perl and web applications, and reading reams of documentation can wear a person out.  I look forward to taking a change from Java.  But Perl is not a pretty language.  You can easily write code that you can’t maintain.  At least not easily.  The same could be said about Python, C or C++.  Still Perl can easily win a code obfuscation contest.  And my Perl skills need work.  Still I welcome to the shift from Java and JSP to mixture of Perl and my firm’s in-house RAD tools.  Even if it means wading through tons and tons of documentation.

Another shift is writing I guess.  I’m doing more of it, and enjoying it.  The effort of writing novel still drags on.  I blame my compulsive reading of RSS feeds, and magazines.  Still I like to stay in touch with the parts of the tech world that I enjoy and see future promise.  Also other tasks hang over my head, so it can be difficult to concentrate at times.  Writing and coding projects seem to move at a glacial pace nowadays.  Still they move forward.  I need to shift in Qt, C++ and Python coding again.

Lastly I have a trip to plan and random life tasks to do.  I’m excited about the results obviously.  But such tasks often involve decisions that take time and some can be life-altering.  I’d prefer that the tasks would do themselves.  But unfortunately my not doing them, is just procrastination.  That is what I’m doing right now, procrastination by writing.  I should get back to work now.

Maemo Hacking and Project Revivals

With such a cold wet summer, I thought I would spend more time hacking. Yet this year spare time is a scarce commodity and most of that time I find myself far from a proper development workstation. Fortunately with an Internet tablet in my pocket, I can at least start on learning about Maemo development.

For an embedded device, the maemo platform is neither the easiest nor the hardest device to start hacking. Setting up the SDK on Ubuntu takes only a few minutes. In fact I also managed to setup Eclipse to do maemo development too. But I didn’t try to compile any source code so far.

Developing on Maemo, requires knowledge in both Linux and C programming. The N810 itself uses a heavily modified version of the 2.6.27 Linux kernel, Gnome and GTK. GTK seems to handle the GUI side of things in much that the same that Java Swing does. And I like the fact that GObject brings some semblence of OO programming to C. I’d prefer to learn Qt instead of GTK, but I guess I have to start somewhere. Judging by blog posts from KDE developers that got N810s at Akademy 2008, the state of Qt and KDE on Maemo is in its infancy.

In a recent conversation with Dan D’Alimonte, he suggested that I should think about reviving the justCheckers project as a web application. Considering the state of the codebase I work on a daily basis, the justCheckers codebase is very much maintainable. As a web application, the releases can happen faster and casual users can play with the program. And I’d like to play around with some more advanced Java web technologies. Now whether or not I actually revive the project is another matter. It is a definite maybe for now.

Technorati Tags:

The Open Source Gamer Looking for Work

I am currently looking for work, so if anyone is interested in a software developer or software engineer position please let me know. I have experience from university (finished my B.Sc. in Computer Science at the University of Toronto) and from my open source projects in:

  • Java development.
  • PHP and JSP scripting.
  • Database (MySQL and SQL Server) programming.
  • Technical, computer manual writing.
  • Graphics: mostly Java AWT and SDL.
  • Website development (XHTML, CSS and Javascript).

I am looking something that I can either do at home or commute to in Brampton, Mississauga or Toronto. So if anyone is interested please send me an email at:

dorian dot pula at gmail dot com.

Thanks in advance for all offers.

The Insanity Returns

If one looks for trouble, one usually finds it. I guess the same applies to work. After a few months, huddled in the sanctity of university studies, I emerge to realize how much work needs my attention. A computer glitch almost killed my graduation. Weeds sprouted on the front yard, where the planned stone and stepping stones will be. My name needed to appear on the convocation list. And I need to get back to a bunch of people’s emails. I could on and on listing things, but that would sound like whining. And I try not to torture my readers with that. Fortunately, I seem to be making progress, in tying up all these loose ends.

As I mentioned in my last post, I resumed working on the justCheckers project. More accurately I resumed planning the future of the justCheckers project. With my disappearance for months at a time, most of the other developers seem to have lost interest. I sometimes wonder if I did not loose interest myself. However I challenged myself to build an open source game.

The challenge now revolves around putting momentum back into the project. justCheckers never had a community clammering for its release. And my designs did not pan out, with the development team being able to work on the project independently of me. For this reason I am working on fleshing out the details of running the project. This means reviewing the style guide, and core component design. My knowledge of Java now spans the entire project, so I should be able to come up with a simpler, cleaner and more efficient design. The most crucial point of the design is get the development team back on-board, and pumping out more releases.

Quiet Morning

This morning seems so quiet. The lack of any real sounds, with the notable exception of the wind, make everything seem so un-alive. Its quite disquieting actually.

The only real sound (other than the typing of keys) is the sound of mental lemmings, walking around. That my friend, is the sound of writer’s block. Coming up with a main theme for an article, placed me into such a state. In an effort to shorten, and ease up on my articles, I had to cannibalize parts from three different articles, and plop them all together. I feel like a literary Dr. Frankenstein. And my article in its current form, plays the part of a half-zombie, half-robotic chicken monstrosity. Oh wait. That would be the robotic chicken… oops, wrong show. Anyways, with the current state of the article makes the lemmings inside my head want to throw themselves off a mental cliff. I mean walk off. Cause thats what lemmings do.

Lemmings aside, I resuscitated another of my projects yesterday. Yes justCheckers will return in all its Java-ish gory err… glory soon. On the topic of justCheckers, Chris Bellini, an important contributer to the project, just turned 30 yesterday. Happy birthday and I am glad you shrugged off the coming age. Is that a grey hair? *ducks*

The marathon of finals continues! Only 9 assignments, 3 exercises, 4 classes and 7 days to go. And the previous experiment seems to be paying off. Better run off now, and take care of my mental lemmings.

Adjusting to the New Universe

The new reality of me being in school, and the prospect of working during the same time is slowly starting to sink in. Still its this sitting in front of a computer doing either homework or chores… trying to catch up. I mean I am catching up. Already I have made progress in my Visual Computing assignment. Got multiple image support working for our mini-Paint program. So I am very pleased with the outcome. No luck with coming up with a project for the Requirements Engineering course. But Mr. D’Ettore, one of my best friend’s father is willing to look into. Of course in my bumbling way, I came across in the most awkward manner… but I hope he understood. I will write an email to him shortly about the subject, and maybe we will get a reply soon. We badly need this. Very badly. The sad thing is my group members are even more clueless than me at this stuff. I still consider myself a messy person but apparently some of my new found habits are turning me into a neat freak, and ultra-organized. I can not stop laughing at that thought.

Tomorrow’s logic test is hanging above my head today. Sigh… I need to sit down and come up with a schedule for the next weeks so that I can be prepared. Too many things happening at once.

From a lighter side, I have joined the GLUE (Gentoo Linux User Everywhere) folding@home group. I hope that my laptop and occasionally my brother’s machine can help with number crunching so that researchers can better understand the way proteins behave, their impact on diseases and pharmaceutical interactions. Maybe this mundane CPU work can one day save someone’s life. OK, this is not going on the lighter side.

OK. Now a definitely lighter side. I probably will be earning money this semester as a developer playing around with an intricate Java web and database system for courses. Also once I get caught up on my studies, I will work at releasing a new version of justCheckers. Up to version 0.1.1, I believe. Maybe I will get some writing done too.

I will be seeing you, fellow netizen.