If you've ever envied the ability of multilingual friends to bridge language gaps wherever they travel or gained new appreciation for your native language by learning a new one, then you can probably see the advantage of being a programming language polyglot. Developer polyglots travel the IT world more freely than do monolinguists (sure that they can apply their skills in any environment), and they also tend to better appreciate the programming language called home, because among other things they know the roots from which that home is sprung. Isn't it time you became a polyglot?
As it happens, both my most favorite podcasters - Leo Laporte as well as Steve Gibson are passionate e-book readers. They have both purchased and are (mostly) happy users of the Sony PRS-500 aka Sony Reader in addition to several other platforms - (Palm, Pocket PC). In the latest podcasts - both in TWIT as well as Security Now!, the eBooks and eReader got quite some publicity :-).
Both had similar experience with PDF format on PRS-500 as myself - but Steve mentioned the PDF re-flowing the document to make it better suites for small screen - something I have looked into but did not get it working quite right. The preferred approach to using Reader is RTF format - which again, matches my impressions.
(a followup to discussion last week)
In every outsourced software project you have four large areas: your customer, the business vertical you are writing software for, your implementation team and the technology foundation or platform you are using.
Two of these areas are on "internal" side of your organization (team and technology), two of them are on external - your customer side (business domain and customer organization). Two are more micro level in the sense that they have strong human interaction aspect (customer and team) and two are more macrolevel and less personal (business domain and technology). For that reason, you can represent these areas as quadrants using two axis micro/macro and internal/external: micro+internal = team, micro+external = customer, macro+internal = platform, macro+external = business domain.The degree of risk in the project is proportional to how many of these quadrants are actually unknown or new. Why is that ?
This week was full with attending the demos and workshops. On Tuesday, I spent half day on the Microsoft Unify Tour 2007. I planned to be there full day but an important business meeting made me change the plan. Fortunately, the sessions should be available recorded on the Web, so I will be able to check them later. The topic was bang-on - considering that we are in final phase of large project, using distributed network of SQL Server 2005 installations with replication and location was same as usual.
This was one great weekend ! Easter should be more often than once a year, I guess. Unlike Christmas, there was no shopping craziness before and much less overeating danger. Not counting overdose of chocolate, of course, but that's OK.
I managed do mostly nothing for about one day - up to Friday evening. Then I dived into the Ruby and Ruby on Rails world. After reading this and one third of this book, I like Ruby even more. I actually did write some code - not much, but rewrote some of my old Python scripts I use to manage files and repositories. The new Ruby version is shorter and IMHO more elegant (even with my limited command of Ruby idioms), much better readable - albeit a bit slower than Python version. But that does not change my very positive impression of new language. In addition to these (and btw, the mixin's are so great it is even scary), I learned to love the Rake and gem tools. Gem is pre-packaged Ruby component, managed as unit, that can be installed and updated remotely using the gem tool. It solves the problem of versioning - something I wished Java had from the beginning. It also provide similar functionality as the GAC in .NET: allows side-by-side existence of multiple versions of the same component and makes component available to other programs. Very clever, very convenient. Same story as with the language - gem is something similar that Perl did have with CPAN, but it is just cleaner, nicer and polished ...
.NET 2.0 offers very rich and nicely designed library of core data structures, collections and algorithms. Occasionaly, you run into situation when you need something not in there. Before starting to design you very own extension of LinkedList or HashTable, look into interesting open-source project NGenerics - chances are you will find it there.
It contains quite a few new data structures:
Association Bag BinaryTree BinarySearchTree Deque GeneralTree Graph HashList Heap Matrix ObjectMatrix PascalSet PriorityQueue ReadOnlyPropertyList RedBlackTree SkipList SortedList extensions of existing data structures to work with Visitor pattern
I guess it is too early to write any more systematic opinion about the language you know less than 10 days, but after reading the Programming Ruby 2nd edition (thank you, Safari Books) I have found out that I actually do like couple of Ruby features a lot. Your mileage may vary - what speaks here is my Java/C#/C++/C/Python/Perl background and bias. Here there are my favorite Ruby-isms (so far) in no particular order:
Today I have started the walking season 2007. I did some gentle preparation during the week - few short, 4-5 km strolls around the neighbourhood, but it was today when I really started. It was beautiful day in Ottawa - sunny, temperature around 8-10, so I took off and did 12 km loop through Westboro, down south and around Dow's Lake up to downtown. Just fantastic. The companion on the road were Security Now! - I was behind few episodes, but I managed to listen to almost full 3 episodes.
Man lernt nie aus - as the German say - one never stops learning. Thanks to comment found on my blog I found out that there is very nice solution problem of disappearing emails (after you download it with one POP client, other POP client would not get it). It is even documented in GMail help:
http://mail.google.com/support/bin/answer.py?answer=47948&topic=1556If you're accessing your Gmail using POP from multiple clients, Gmail's recent mode makes sure that all messages are made available to each client, rather than only to the first client to access new mail.
As Murphy said - you cannot do just one thing. Thanks to JDK 1.4 entering end-of-life support period (and 1.3 being unsupported for some time), we need to move few applications happily running on these antique Java platforms to at least Java 5 and gain few more years of uninterrupted Sun-supported life.
Upgrading the applications was as expected, piece of cake - as long as you have solid build environment with build scripts and everything - which we certainly do. Ant runs on Java5 exactly as well as on 1.4 (maybe faster, but I did not measure), Tomcat was the same no-brainer thing and switching the Eclipse required only selecting different JRE in preferences window. Codewise, the only change required inside the application code was renaming few identifiers to something else than enum, which happens to be keyword in Java 5.