Thursday, July 31, 2008

Python, the evolution

I just stumbled upon a project called code_swarm, which is an experiment in organic software visualisation. The project takes information from a source control system and creates a visual representation of the history of code commits. The end result looks quite awesome. Below is the code_swarm video of Python source code and its evolution.



The project's source code is available here, free of charge, of course. It is created by Michael Ogawa, using Processing environment. Great stuff!

Friday, July 11, 2008

Protocol Buffers

Google decided to open their tool for serializing structured data, called Protocol Buffers. It's language and platform neutral way of communicating data over networks or serializing it for storage. Interesting bit is that Google is using it in almost all of their projects.

On the surface, tt reminds me a lot of CORBA, especially the way you define message structures, but it differs from it a lot in terms of message exchange and serialization - you can store and/or communicate your data structure across the network by any means, unlike CORBA where you're forced to use CORBa message brokers. In my opinion, that's the main reason why CORBA was never so widely accepted.

How does it all work? First of all, you define your structure using a DSL and store it in a .proto file. You then compile that file using a tool and create data access classes for your language of choice. Classes can be generated for C++, Java and Python - my choice would be, as always, Python. Those generated classes are then used to create, populate, serialize and retrieve your protocol buffers messages.

The messages are very flexible - you can add new fields to your messages without breaking old code that's using them; they will simply ignore it. That functionality comes in very handy, especially for larger systems (think versioning and deployment).

Yes, but what about XML, you might ask? According to Google, PBs have many advantages over XML; they are:
  • simpler
  • 3 to 10 times smaller
  • 20 to 100 times faster
  • less ambiguous
  • generate data access classes that are easier to use programatically

I might disagree with the last one (think of JAXB in Java world), but I completely agree with the other ones - it's quite true that XML tends to be cumbersome and a big overkill, especially in environments where size and speed does matter.

For the end, I saved a very interesting quote from Google's PB pages:
Protocol buffers are now Google's lingua franca for data - at time of writing, there are 48,162 different message types defined in the Google code tree across 12,183 .proto files. They're used both in RPC systems and for persistent storage of data in a variety of storage systems.

Looks very interesting and very promising, considering Google is behind it. I'll follow up this article with some neat examples.

Tuesday, July 1, 2008

Back at work after a long vacation

I was away on vacation for 7 weeks. Now I'm back at work. Tough, I must say. My mailbox is a total mess, loads of new mail, meeting invitations, updates and changes, etc. Then an idea hit me! Our corporate email suite comes with Out of Office assistant, which helps you (and your coworkers) to manage the email while you're away on vacation (sending out auto-responders and such). It also has a very nice feature of reporting who emailed you and all that. I am still going through the emails I received, totally stressed out not to miss something important. I'm skimming through as fast as I can and it seems there's no end to it. I'm quite sure I missed something very important, although I'm trying my best to mark messages that I need to check again later. That means, of course, that I'll be reading my emails twice.

Now, the idea - wouldn't it be great to have a feature which would, upon opening your email suite after a long vacation, populate your inbox little-by-little. Let's say you have 120 messages which have been sent to you while you were on vacation. The suite would sent you a dozen messages every 10 minutes, so you can slowly read it and catch up. Preferably over a good cup of coffee. No stress, no worries, you can read your mail at a normal rate as you would if you didn't go on vacation. I'm sure it would take some people few days to catch up, but it sure beats reading 500+ emails in one hour.

Back to reading emails.

Tuesday, April 22, 2008

Core Spring Course

I'm attending a Core Spring Training Course this week, held and organized here in Iceland by my company. I have finally managed to persuade my superiors to invest into Spring training for all the employees of our department. The course is held by Arjen Poutsma, the developer behind Spring Web Services project.

While I have been developing applications with Spring Framework for past few years, I am finding the Core Spring training course very informative and helpful. Most of the material covered so far is familiar and well-known to me, apart from the more advanced usage of Spring AOP, which I haven't used much so far. That is definitely going to change, I am sure. Every topic is followed by a very well designed lab where the newly learned material can be exercised.

Things to cover in the next two days are Spring MVC and Web Flow, configuring Spring Security, Remoting with Spring Web Services, etc. I sure hope we'll be covering (soon to be released) Web Flow 2.0 - I promised to write more about it when we start adopting it in projects, but we have not reached that point yet (one of the reasons is the fact that Web Flow haven't reached final 2.0 version).

While I prefer figuring how things work by experimenting on my own, it will be great to get information about Web Flow first-hand through the presentations and lab work on the course. Which brings me to the point -the real advantage and real value of this course is the chance to talk in person to people behind the Spring Framework, hear their opinion on things and get some good tips and advices (especially advices on AOP advices). Labs are in fact designed with that in mind.

I will write more about Spring AOP and Web Flow in the following days, so stick around.

Friday, February 22, 2008

Spring MVC easy way

Writing web applications using Spring MVC has never been easier, now that we have annotated controllers in Spring 2.5. Basically, it all boils down to just couple of things, from defining the viewResolver bean and the required XML configuration to scan for annotated based controllers to adding an annotation to (any) method in your controller class, just like this:
@RequestMapping(value="/url")
public ModelMap method()

Of course, there are few required beans you need to define for all that magic to work (shown in the Spring Framework documentation online) but I find that very acceptable and a big plus (showing how Spring is very flexible).

Some people might argue that the (now) old-fashioned way of defining the links the controllers respond to via urlMapping bean (SimpleUrlHandlerMapping) is similar to routes in Rails where everything (in regards to URL requests) is in one place. Then again, how many times are you going to change the URL locations and where does it look to be more natural - especially when you basically do all your work within the controller.

Similarly, this is how TurboGears (a web framework for my favorite language, python) handles request mappings (with a twist), where the name of the method in the controller declares the request mapping. That can be easily achieved with Spring MVC annotated controllers, too.

All this ease-of-use for writing web applications plus all the benefits of the Spring Framework - there's no need to switch to another framework, developers used to work with Spring can leverage all their knowledge and still be in the front lines, especially in regards to developing web applications.

Wednesday, February 20, 2008

Jython development gaining momentum

Jython developers gathered last Sunday in San Francisco and held a sprint to work on the next major release. This will bring Jython implementation of Python on par with the CPython implementation, which is now version 2.5.1 (with a v2.5.2 release candidate 1 released to public testing just few days ago). The San Francisco Sprint focused on the Roadmap list for the Jython 2.5.

There is not much information to work with in regards to what is the outcome to the Sprint, but I suppose a lot of good work came out of it. Hopefully we will see a stable release soon. With Groovy and JRuby already having a steady (and growing) number of followers, Jython needs a jolt.

Monday, February 4, 2008

Technical evangelist?!

What is up with technical people and the urge to have titles? Especially strange ones.. I have been reading a lot lately about Flex and AIR, technologies for developing rich internet applications, mainly for two reasons - first and foremost, it's very interesting technology and second, it might come in handy at work. But I'm not going to talk about that just yet.
During my reading, I came across more than a few times with a a rather unusual title. Apparently, one of the guys behind Flex and AIR calls himself a technical evangelist. If we look up the definition of the term evangelist, we can find out various things:
  • Evangelism is the verbal proclaiming of the Christian Gospel or, by extension, any other form of preaching or proselytizing.
  • "To announce the good news", one who preaches the facts of the Gospel in order to win converts.
  • The traditional view of the evangelist is a bearer of the "Good News", proclaiming the gospel to the unbelieving world.
So, technical evangelist is doing what, exactly? Somebody who verbally proclaims technology? Isn't just pretty much everyone who works in the field an evangelist? We should stop calling ourselves bloggers and start using evangelist instead..
This is, in my honest opinion, the worst title I have ever heard in my life. Sounds ridiculous and I honestly don't believe how can anyone take it seriously. Rubbish.

Tuesday, January 29, 2008

Street view..

Funny, yet a bit scary video portraying usage of Google Maps and Street View. Check it out below..

Few years from now, who knows..

Friday, January 25, 2008

Shift some time

Few weeks back, I downloaded a TimeShift game demo from Xbox LIVE! Marketplace. The demo features both single-player (campaign) and multi-player modes. The game itself is a first-person shooter game but unlike many other similar games, it has a rather unique feature - playable character in the game wears a special suit which enables you (as a player) to manipulate flow of time in the game.
You are able to slow down, stop and even reverse time, which affects everything (and everyone) around you - while you move freely! Some people might remember the very popular Max Payne series of games with a special (and very cool matrix-esque) Bullet-Time feature - you could put things in slow-motion to aim better and deliver bullets precisely.
In TimeShift, you're able to do that, and a lot more! If you get flanked by enemies, no problem - reverse time a bit and throw a grenade where they pop up - problem solved. If there are too many enemies to handle - stop (or slow) time and give each of them a proper gift (a bullet in the head).
Now you're probably thinking, that makes a very easy game to play. That's true, but - the suit offers you only limited time manipulation possibility, and the gameplay is challenging even with the special feature. What really makes this game extremely interesting is the (you guessed it!) multi-player game mode, where everyone has same capability. It's quite impressive (and for me, an average joe player) sometimes confusing, but a lot of fun!!
Last, but not least, thing worth mentioning is the graphics engine (called Saber3D) - it's visually stunning and attractive with really amazing textures of very high detail, especially on a hi-def TV set.
Be sure to check the game out, or at least download and play the demo before you buy. Really worth checking!

Wednesday, November 21, 2007

Spring 2.5 is out

They finally released it - Spring Framework 2.5 is finally out. It comes with loads of new features and enhancements (you can read more about it in the announcement). Things that concern me the most and what I have been looking forward to put to paces are annotation-driven DI and annotation-based controllers in Spring MVC. What makes me happy is that the documentation is largely improved, which is always a great plus.

Next thing that I'm patiently waiting for is the release of Spring WebFlow 2.0, which looks extremely promising tool. I am following it up very closely, as I plan to introduce it in my company and start a project based on WebFlow.

During next few weeks, I'll make sure I write something about the new features.

Wednesday, November 14, 2007

Right tool for the right job

What a fantastic line - "choose the right tool for the right job". I was reading a Superman/Batman comic I purchased recently (Superman/Batman: Public Enemies) and was quite impressed when.. Oh-well, I'm not going to unveil the story-line - anyways, Superman said aforementioned line at the beginning of the story.

Got me thinking - I had been running my blog with many various blogging systems, some of them good, some of them really bad. Usually, experiments with those systems ended up with me installing and using another system.

Well, choose the right tool for the right job. I am moving my blog to Blogger service. Easy to use, always accessible, no worries about server uptime or software upgrades.