Upgrades All Around!

It seems that last week was a week of upgrades for me.  First I got to upgrade two laptops and a server to the brand new spanking Ubuntu 12.04 (Kubuntu and the Server editions of course).  Unlike people living in the Ubuntu world, Kubuntu is fairly stable and 12.04 just packaged a few nice updates and bug fixes.  Also I installed the stable release of Calligra, and I plan on trialling that suite out.  This also gave me the opportunity to hang out with some to local Ubuntu fans at the meetup.  Strangely enough I left like one of the youngest people in that group.

In addition to that I finally received an update to my Samsung Galaxy Tab 10.1V.  Now it is finally rocking Android 3.2.1 after running on 3.0.1 for a while.  Not quite the ICS release I hoped for.  However once I get around to flashing my Samsung Galaxy SII with the non-carrier ICS (Android 4.0) official ROM, then I’ll have all my hardware nicely updated.

Update: 2012 May 03

Looks like the fine folks at Bell Mobility and Samsung Canada released an update for ICS for the Samsung Galaxy S2!  Refer to here for more details: http://t.co/ueKFO4qb  And yes my phone is rocking Android 4.0.3, and it works amazingly!  Thanks Bell and Samsung, and sorry for complaining about you taking so long for the update.  The update looks solid and definitely makes the phone “feel” newer and better.  Great work!

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

Hello Again Identi.ca!

It seems that all the cool kids are using Twitter nowadays.  Then again what passes as cool now sounds more like either being different for different sakes.  Or that you use or do things that are “cool” or trendy or interesting to the mass public at the moment.  Rarely the cool, trendy or different thing is actually interesting or innovative or world-changing as much as it something that is well marketed.

As for myself I’m on Twitter because there are a lot of people that are not on my favourite microblogging platform: Identi.ca!  With Twitter being a bit more accessible on my Android smartphone and the smaller crowd on Identi.ca, I sort of stopped using it for a bit.  However that will change.  I prefer Identi.ca because it is libre software and my data is not held hostage in some corporation’s database.  I’ve updated my Identi.ca handle, wired up my microblogging widgets back to Identi.ca (and Twitter).  Now I plan on using it more often, and pushing my blog updates through Identi.ca first and then on to the other three popular social media that I use.  If everything goes as planned y’all should be able to read this post in a few moments after I publish it… right now. 🙂

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?

When Penguins Can Fly… (An Exercise in Portfolio Building)

No, this is not an exercise in a delayed reaction for April Fool’s Day.  I am not that slow!  Rather I spent most of the weekend in a concerted effort to setup a portfolio and renewing my personal website.  I realize now the reason why I procrastinated to do so for years.  Setting everything up in a systematic manner is difficult and painful.  Digging through folders to find great examples of your work even more difficult.  However the effort was worth the pain.

The blog now has a unique title: “When Penguins Can Fly…”.  I think the title is appropriate considering how much of a Linux fan and of penguins I am.  At little bit of magic in Gimp and I replaced the background for the theme.  Anyone interested in using the theme for themselves, can find it here: Hacker Dreams WordPress theme version 0.1

After that and a bit of fun with the favicon, I started work on setting up the various pages and galleries in my portfolio.  It took a while to try out the various galleries, and I settled on the NEXGen Gallery plugin.  After some futzing around, I managed to setup quite a few nice galleries for the Draw section of my portfolio.  In the future I will need to either find even better art or create more artwork.  However this will have to do for now.  In addition I found an animation I did for a visual computing class that I uploaded to Youtube.

The most difficult aspect is the coding part of the portfolio.  I originally wanted to build a bunch of original apps with new source code.  Unfortunately that will take time that I do not have at the moment.  I will add those when I have a chance.  However for the moment downloads, brush ups of old work, screenshots and screencasts will have to do.

In a rare case, I am opening up the comments to take suggestions.  Please let me know what you think.

Website Hosting Migration

You may have noticed the recent changes on my blog & portfolio website.  I am in the process of migrating my websites, domains and what not to a new hosting service.  A nicer hosting service provider who doesn’t support SOPA/PIPA for one.  Plus is much more responsive and nicer to work with.

Anyways a lot of things are up in the air.  Especially since I am still transitioning in terms of my new work.  Plus I am working on a grey op (not quite black) project, that I plan to reveal shortly.  Please excuse the sporadic changes and some issues might pop up while I get everything sorted out.

The Next Big Thing

I am really excited that I am currently working on my next big project.  I won’t spill any details until everything is setup and ready.  This new project I hope not only will give me the opportunity to work on the technologies I love to work with.  But will also benefit the Linux and open source community as well.  More details will follow soon.

As part of this project, I will be doing some major changes to this site.  One of the major things will be the expansion of my portfolio.  It has been something I wanted to do for a long time.   Now I finally have the opportunity to do so. 🙂

Experiments with Wine Gaming

While I was working last month (and last year), I had the need and opportunity to setup Linux properly on my laptop.  Windows simply did not cut it for remote development.  After a bit of fighting with some graphics issues (yes, I got bitten by the switching between the Intel and Nvidia GPUs) I managed to setup my Linux system fairly well.  Yes, I am missing out on some of the nice, new hardware features on my laptop like the fingerprint reader.  Nor can I get a nice boot experience due to the combination of a strange widescreen resolution, using the proprietary Nvidia drivers and the plymouth splash screen.  Running full-blast with the Nvidia graphics card does not help my battery much.  But I can live with that.

The experience with using modern Linux and KDE can not be understated.  Not having to fight with your system when setting up development environments helps too.  The icing on the cake, was my most recent experimentation with Wine.  Back in the day when I started using Linux, getting any Windows program running nicely under Wine was a minor miracle.  An update could change that in a hurry.  Getting a 3D game running smoothly under Wine… just did not happen.

Now imagine my surprise when I tried to use Wine on my most current install.  After using winetricks a few times, and a tiny bit of experimenting I managed to run nearly all my Windows games under Linux without too much difficulty.  Nearly all my Steam powered games worked, including Deus Ex, Half Life, and Myst.  Even Microsoft games like Freelancer and Halo ran with very little work.  So did Risk and the original Homeworld with very little effort.  And yes Uru Online which is my favourite of the Myst series runs really well as well.  What makes this great–beside not having to reboot to play a game–is that old games will run with little extra effort without keeping some ancient version of Windows lying around.  Also important to note is that none of the games lagged under Wine, just some minor sound stuttering and weird cursor grabbing.  So one can enjoy most of one’s Windows games under Linux without needed to reboot necessarily.

A Quiet Moment to Reflect, Regroup, and Rethink

The madness of the past few weeks, has taught me the importance of quiet time.  Time that I can truly reflect quietly and calmly work on the next steps I need to take.  Most of the week I have rushed, ran and tired to compact as much I could into a single day.  But you can only do this for so long before you have to slow down.  While life fills up with small, urgent tasks, those tasks are rarely that important.  Not to say I can forget about the small tasks and go on living comfortably.  Those small tasks after all act as the components of the large important projects in life.  Yet three ideas that have helped me recently are: 1) to keep the important projects in the front of my mind; 2) remember the scale of importance between the day-to-day tasks and the goals in life; 3) maintain balance in one’s life.

Anyways, enough philosophizing for one post…

While I was riding on the train back today, I tried to catch up on some e-mails.  And I found out about the new version of WordPress was available for my sites.  Thanks GoDaddy for being an awesome web host and sending out e-mails notifications of those kind.  Anyways after some twiddling with the new WordPress update, I decided to do some house-cleaning of my website.  One of the slight modifications I made is the new title of the blog.  Yes, I am back to using “The Art of Being Dorian”.  This has been the best title so far, and while thought about using the geeky “Transmissions from High-Earth Orbit” or obscure “Mlaren Racer” or the nice but misleading “The Zen of Dorian”.  (Misleading because even though I like Zen as a design methodology or as a general idea of simplicity, I am not a Buddhist nor do I follow Buddhist philosophy, culture, etc.)  Plus, I good friend of mine in Ireland loved this name back in the day.  And so it is back.

Also note that I dropped the “Hacker, Gamer, Writer” moniker.  Hacker, yes if it means coder and not cracker as it means in conventional terms.  And while I still enjoy playing the occasional game, I rarely do so.  So by definition I fall out of the “gamer” crowd. Just like I’m not much of a boarder since I rarely have the chance to go snowboard, surfing or windsurfing.

So this blog I will dedicate to writing articles about coding, writing and living well.  I think it will be most benefit for everyone.  And I will enjoy sharing my knowledge in these fields, more so than the random ranting that I’ve done in the past.  I hope you enjoy the new blog!

 

Grey Morning in a New Reality

Outside the window, grey clouds fill the sky and raindrops stream through the air.  A warm morning for an early December day, the weather being more likely for mid-November.  The rain does not bother me as I am sitting in a GO train headed to downtown Toronto, and getting ready for the start of a new day.

Since I started working at Indusblue as an Android developer, my mornings involve a morning train commute to Toronto.  While taking the train and streetcar to work extends my commuting time, I can not complain.  I get about two hours each day of time for myself, to get work done.  Amongst other things, I use this time to write or catch up on past work.  Today I decided that instead of sleeping on may to work, I would update this blog.

After a summer of travelling to and from San Francisco and spending a good portion of my Fall travelling in central Europe: Poland, Germany, Austria and Italy; I finally am settling down at the end of the year.  While I love travelling and visiting new places, I am glad that I have returned to Toronto.  I am glad to be close to most of my friends, family and familiar settings.

Since my return, I have concentrated on catching up on overdue work.  So many tasks and delayed projects have piled up, that I feel the need to make progress on them or even finish them before the end of the year.  Amongst other things I started writing two pieces: a science fiction novel and an auto-biography of sorts.  Also I started working on justcheckers again, which I plan to complete as part of my portfolio work.  And I am working on a few other missing or lacking parts of life, that I can not comment on right now.  However I am overjoyed with the progress I have made, and the opportunities that linger on the horizon.

So while the mornings are grey and rainy and sometimes quite cold, I am grateful for the new reality of life I am in now.  It might rain outside, but I feel as if it were sunny.