Wednesday, December 31, 2008

Happy new year 2009

So, we are in 2009. As always, it's a good time to sum up the past year, and plan for the future. Of course, it's not the only moment for that, it's just that it seems to be in the ambient mood ;)

So, what next ? A little report about top things on 2008, and some previsions ? General topics or more personal ones ? Tech or not ?

Well, at least I will list some topic that were important to me, and we will see if a emerging design emerges ;)

- I met really interesting people in 2008, and I would like to especially thank you Bruno for the time spent with us, I hope to work again with you. I would also thanks my team for the good time spent on developing software this year. Other cool people are lurking on #tapestry there were really surrealist and funny moments. And there is all the others I'm forgetting, but thanks for all the good time.

- I miss perhaps one of the best opportunities that I will ever have in 2008. I will have to be less timorous this year, more self confident.

- Java-the-language died in 2008, and perhaps it's a cool new. I only hope that it won't stop the JVM evolution. Moreover, Sun is not in its best wealth to say the least... I can't imagine my future on a MS platform, that's clear (even if F# and C# 4.0 are becoming thrilling). So, perhaps it's time to look more carefully at Android...

- A little think for my Grand-mother who died a 3 weeks ago...

- That's 4 years that I'm Paris, and almost as long that I work on Linagora. That's a long, long time. I will have to do real software developpement in 2009, that's for sure.

- I'm playing with Scala for almost 18 months now, but only for kid work. Perhaps it is time to start real projects with it now...

- I'm developing with Tapestry 5 for almost 2 years now, it's really a wonderful framework. Thank you Howard for that piece of architecture, it's a great work !

Oh, wait, perhaps there's an emerging design here ;)

So, what next for 2009 ? That will have to be a year of major evolution, both on a personal and a professional point of vue. Perhaps it's time to go outside of France, perhaps it's time to come back on the south. Let's see how it can be done.

So, let's go for 2009, let's take the opportunies this year !

Friday, December 12, 2008

Tapestry 5 Final is out !

At least !

After almost two years of public alpha/beta releases, Tapestry 5 final is out !

The vote for the 5.0.18 release succeeded this night, so perhaps not all the resources are already up to date, but it should be updated soon.

So now, spread the words !

The next BIG task for the community is to write a great and powerful third par component library, something like GWT-EXT. Chenillekit seems to be the best candidate today, even if it's in no way as polish and broad as gwt-ext.

So, Tapestry 5 community, join our force to make T5 really attractive !

Monday, November 24, 2008

Tapestry final coming soon !

On the tech side, it's a good time for me !

Soon after the release of Scala 2.7.2, it's Tapestry 5 time to reach an RC status (OK, I didn't blog about the RC1, some personal stuff were more important at this time).

Moreover, Tapestry 5 is gaining a kind of hype in Europe, or at least in France : the new official French weather site is coded with T5, and it's a big one (about 800,000 visitors in a day), and I just learn that Unedic[1], the French civil service for the unemployed, which a BIG civil service (as most of them in France ;), chose Tapestry 5 as there new default "ligth" web framework.

I'm quite happy of my choice for T5, almost 2 years ago :)

[1] sorry for the English readers, I didn't find an English description about Unedic :/

Saturday, November 22, 2008

Windows refound if when you buy a computer

It's the first time I ever see that in the description of a new computer. It's saying : "ask a vendor if you don't want Windows Vista with your new computer, the refound is 50€". The computer was an Acer of about 500€, it was in a big electronic french brand, and that's reaaly cool.

Minds are evolving...

Monday, November 10, 2008

Scala 2.7.2 is out

Here we are, Scala 2.7.2 was released on november, the 10.
And it's a great news !

You may wonder why a minor release seems to be so important ?

C'm'on, it's a palindromic release number, it's so fantastic !

Well, more seriously, it's because this released is the one that will be cover by the coming book "Programming in Scala", and so, this release mark a kind of shift in the Scala language development : Until now, the language was evolving quite quickly, what was great in term of enhancement, but bring some recurring problems, and seems to frighten a lot "the enterprise developers" (or at least there bosses).

With this release, seconded by a great book, the Scala language reach a new level of maturity, and perhaps will gain more visibility outside the rather small (but growing !) circle of first time enthusiastic who use it today.

So, it's a great news for Scala users, and a great time to go and discover Scala !

Tuesday, November 4, 2008

ProjectEuler#42, aka Scala shines as a scripting language

I'm still playing with project Euler, and I'm going to love Scala more and more.
Yesterday, I solved the #42 problem, on which we need to parse a text file, and make some simple transformations and filtering on the results (it's why I choose this title, because it's generally the kind of things you expect to do in a scripting language, and well, I'm really
impressive, and I read this morning the post "Scala as a scripting language?", and I say "ho, it's exactly what I felt when I did pb#42 yesterday, let's blog on it, it's fashion :)

So, this problem is a simple Project Euler one (at least, there is no math on it), but just stop and think to what may look the Java's solution. Yes, you will have to deal with Files, input stream, and the like, filtering data, sorting things, and even if it's quite simple, it's always a little too heavy compared to what it may be.

So, there is the full solution in Scala, in a mixed imperative and functional style, as produced in the first sketch version (OK, I'm lying, in the first sketch, I didn't include comments and variables names looked more to 'lsv' and the like, these transformations are blog add-ons).

I'm sure there is a lot of optimizations available, but the important think is that Scala let you program as you think, whitout to much noise and boilerplate...

So let's go for the code:


package ex26_50
import scala.io.Source
/*
Problem#42
The nth term of the sequence of triangle numbers
is given by, tn = n(n+1);
so the first ten triangle numbers are:
1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...

By converting each letter in a word to a number corresponding to its
alphabetical position and adding these values we form a word value.
For example, the word value for SKY is 19 + 11 + 25 = 55 = t10.

If the word value is a triangle number then we shall
call the word a triangle word.

Using words.txt (right click and 'Save Link/Target As...'),
a 16K text file containing nearly two-thousand common English
words, how many are triangle words?

*/

object Problem42 extends Application {

/*
* iterate over all the lines of a file and
* split each one on ',', remove surronding ",
* and put the result in a list
*/
def parseWords(file:String): List[String] = {
for {
line <- Source.fromFile(file).getLines.toList
s <- line.split(",")
if(!s.isEmpty)
} yield s.replaceAll("\"","")
}

/*
* Simple mapping function that associate
* each char to it's value (position in the alphabet, begin to 1)
* and a word to the sum of its char value
*/
def wordValue(s:String) : Int = {
var sum = 0
for(c <- s) {
// iterate over the chars of the string
val cval = c.toInt
if(cval >= 64 && cval <= 90) {
// 64 = ascii val for 'A', 90 = ascii val for 'Z'
sum = sum + cval - 64
} else {
error("Unauthorized char: " + c.toString)
}
}
sum
}

/*
* That's the definition of the list number on witch we will work:
* - parse the file to a list of word
* - transform each word to it's word value
* - sort the resulting, so that we can know the
* upper bound of our triangle value to caluculate
*/

val list_wordValues =
parseWords("src/words.txt").map(wordValue(_)).sort(_ > _)

//we also see that in Scala, Format syntax is actually usable
println("Max value in %s words: %s (min: %s)".format(
list_wordValues.size,
list_wordValues.head,
list_wordValues.reverse.head))

/*
* Given the upper bound,
* generate the set of triangle number
*/
val set_triangles = {
var set = Set[Int]()
var n = 1
var i = 1
while (n < max ) {
n = (i * (i+1))/2
i = i + 1
set = set.+(n)
}
set
}

/*
* That's all, we just have to filter the list of words to
* only keep whose which are in the set of triangles value,
* and take the size of the resulting list.
*/
val nb = list_wordValues.filter( (i:Int) =>
set_triangles.contains(i)).size

println("Found %s triangles words !".format(nb))
}


I love scala :)

PS: It's the full working solution, appart from the leading "_", sorry for the formatting, it seems that blogger is not the most friendly for code formatting. If somebody has some hint on that subject, I will be glad to heard them (ok, perhaps I should have a look on the plugins)

EDIT: I found a way to highlight code thanks to SHJS. Thanks to the author for this plugin that wasn't to hard to make it work with blogger, and which the only Javascript highlighter that supports Scala :)

Wednesday, October 22, 2008

On static vs. dynamic type systems in programming languages

I'm a "static typed languages" guy. Whose who know me see what I mean :)

The Rail's boys would say it's because I'm frightened by the field of possibilities, the freedom of dynamic languages [1]. I believe that it's more certainly because I came to software development through OCaml, a really good static typed language, and not like a vast majority of developer through languages from the C family (Java the worst among them [2]), which really missed the point of most of the advantages of static typing (yes, one days I will write about how enlightening was my experience with the Coq Proof assistant, and why things like FPH are beautiful)

So, because I'm dealing with Javascript, Pearl, Ruby and Python fan boys quite often (Lisper and Smaltalker are somewhat rarer ;), I would highlight this really good article about static and dynamic type systems, and the fallacies that most programmers believe about statically typed language : http://www.pphsg.org/cdsmith/types.html.

Synopsis:

Fallacies About Static and Dynamic Types

Many programmers approach the question of whether they prefer static or dynamic types by comparing some languages they know that use both techniques. This is a reasonable approach to most questions of preference. The problem, in this case, is that most programmers have limited experience, and haven't tried a lot of languages. For context, here, six or seven doesn't count as "a lot." On top of that, it requires more than a cursory glance to really see the benefit of these two very different styles of programming. Two interesting consequences of this are:

  • Many programmers have used very poor statically typed languages.
  • Many programmers have used dynamically typed languages very poorly.

This section, then, brings up some of the consequences of this limited experience: things many people assume about static or dynamic typing that just ain't so.


And as I clearly fit in the category of "programmers [who] have used dynamically typed languages very poorly", I have to find the same article about fallacies on dynamic type language.
I would really enjoy stuff about run-time optimization, contract on dynamic language, meta-programing [3] and such things.

[1] actually, when I see something like Jquery, I understand that Javascript is somewhat amazing. I will have to look harder on it.
[2] when you reach something like that to get a real static type check for something like an heterogeneous list, then you know that something goes wrong.
[3] it's something that is possible in static typed language,as for example with OCamlP4, but I believe meta-programing in Lisp (for example) is more powerful, and the concept of meta-programing is more spread in dynamic typed language. It may be one of the fallacies ;)

Thursday, October 9, 2008

Metting Tapestry father - Howard Lewis Ship in Paris

Thuesday the 7 october, I met Howard Lewis Ship, the father of Tapestry 5 Java web framework in Paris.
He was here for a 3 weeks trip in Europe, far from its home, Portland, USA.

There were Howard, his wife Suzan, and almost all my developers team, so 5 people from Linagora, all of them T5 addicts.

Evening part I : bar and T5

Imminent release of 5.0 final....

The evening began with a beer (or two...) in a bar near Linagora, and the discussion almost immediately started on Tapestry 5. Howard wanted to know how we came to T5, so I explained that I'm following its development since 5.0.1 and that I didn't chose at all by luck T5. Now, every developer in my team use T5, and quite like it.

We chatted about the iminent release of T5.0 final (YES !), the beauty of the framework thanks to the IoC framework, its scalabity, not only in performance, but in all thinkable meaning of the term : scalabitly in component from technical ones to business ones, scalabilty of the T5 user target from the business oriented people to the the technical nerd, etc.

We also discussed the missing points, around the documentation and some little things (what bring me to a ml post on the subject).

... and Tapestry 5.1 project...

The discussion followed on the 5.1 release, it's short, time-based and not functionnality-based release cycle, every 3 to max 5 month.

I think this is a really good new, because it was one of the most recurrent criticism against Tapestry : its really really long release cycle, along with the compatibility issue between them. Even if Howard came back several times on the last point (it's even explained in the T5 home page, at the bottom), upgrades would be even smoother if there is less time between them. Moreover, from a customer point of view, it's always best to have his product based on a stable release. I mean, a release tagged stable, because T5 is already one of the most stable soft I used, but the "alpha" or "beta" status is something quite frightening for a customer...

Afterwards, Howard gives us the possibility to argue for our "most wanted feature".
This is our wish-list, along with what Howard expects :

  • Portlets
That would be a great feature, because the component approach to the web really goes together with the portlet world. Howard thinks that it should be rather simple to make T5 portlet aware, because most of the needed abstractions are already here. And it's one of the things that should go in T5.1, so, we may be dreaming to cool webadmin interface with T5 in a portail in a near futur
  • Webflow
That's another point that came back several time in the mailing list, and that is already in the T5.1 scope. Howard seems to be in discussion with Keith Donald to integrate Spring Web 2 and Tapestry 5 together.
Plus, this is a really good feature to ship, especially directed to the IT managers. It's the kind of tool that make them think they can actually develop using boxes and arrows. I'm not completely sure I want Spring web flow integration into T5, but I definitely want a conversation persistence scope, along with a clean way to manage "wizards". So, if it has to come with Spring Web Flow integration, so be it...
  • skinning / themes
Howards was quite enthousiastic about the skinning and theming possibilities he envisions for 5.1. It would be a kind of sitemesh, for free, thanks to a T5 component.
  • OSGi
We chatted a little about OSGi. Several people on the ml already tried to integrate T5 and OSGi together, with more or less success. For now, I'm not quite sure of OSGi, I think it lacks a lot of all the plumbery that T5 so nicely hide to developpers... Perhaps Spring Dynamic Modules is the way to go, but for now, I think its use cases should remain in the proof of concept level.

That was the main points, but we also talked about other framework as Terracotta, and ideas as ""CRUD should be free" (I would just add "as long as it is a side module, and not in the core". That's not really a problem with T5 and it's pluggable architecture, but for example, all the CRUD stuff is of no use in InterLDAP).

...in an evolving Java ecosystem

The last discussions in the bar where less focused on Tapestry, and more on the Java ecosystem. Java 7 came in the discussion, and I was happy to discover that Howard seems to share most of my view on the subject. He agree that the JVM need optimizations (faster, more plugable, more versatile, etc), but that Java the language should not evolve anymore...
We talked about Scala and Groovy, his preference going to the second one (obviously, mine is in the first :), but he really likes the lazy evaluation possibilities that Scala bring.

Here, there is something that I don't understand... For a functional developer, all Tapestry architecture is built around functional concept, I see map/fold and pattern matching every where in Tapestry :)

Jean-Louis, one of my co-worker, talked about his "easy ant" project - take the best of Ant and Maven dependency management thanks to Ivy. A to-be-followed project.

Evening part II : "La Casita" restaurant

For the end of the evening, we moved to "La Casita", a french restaurant near Les Champs Elysées. It's a typical France South-West cooking restaurant, with Champagne, Foie Gras, snails, duck, wine, cheese... And to my great pleasure, Suzan and Howard seemed to enjoy it !
So much for our French a priori and cliché about American taste :)

There, we talked less about Tapestry, and more on general subjects. We chatted about the difference on open source in USA (more pragmatic, due to cost efficiency) and in France (more philosophical and political).
We also had an input around the use of IRC, and the complementarity this communication channel can have with the traditionnal mailing list (folks, come in the Tapestry irc chan : #tapestry on freenode).

See you next time !

Along the night, I tested the Ballmer Peak applied to English spoken skills, and went at least as far in the curve as Millenium developpers...


For me, it was a really really great evening, Howard and Suzan are really nice people.
Moreover, Howard is one of the best architect I know in the Java world, it was a great pleasure to meet him. Suzy is realy nice, the next time I will have to invite my girlfriend too :)

So, thank you Howard and Suzy for this meeting, and see next time (in Portland ?)

Tuesday, September 30, 2008

Java Bar Camp Mardi 30 septembre

J'ai participé hiers soir à mon premier "Java Bar Camp" à Paris, dans les locaux de Octo Technologie.

Avant d'aller plus loin, je tiens à remercier les organisateurs, mis à part le retard sur l'arrivée des participants, tout le reste a été très bien géré, bravo !

Premières impressions : ce n'est pas du tout ce à quoi je m'attendais. Je m'attendais à un rassemblement de geek & développeurs barbus, alors que l'assemblée était beaucoup plus hétéroclite, avec une forte coloration consultant/chef de projet.
Les thèmes s'en sont fortement ressenti : méthodes de développement, build et tests étaient à l'honneur.

Mais revenons sur le déroulement de la soirée :
- 18h30 / 19h30 arrivée des participants (un peu de retard, Julien Dubois (M. Spring en France) absent (il est papa :), toutes mes félicitations )
- 19h30 :
* tour de salle : chacun décline nom/prénom, et 3 tags, des sujets qu'il souhaite évoquer - dans un bar camp, tout le monde est acteur ;
* après le tour de salle, chacun est libre d'aller inscrire sur un post-it le sujet dont il souhaite parler parmi les tags;
* 8 sujets sont choisis parmi les post-it, organisés en 2 sessions (donc réparti dans 4 salles)
- 19h45/20h35 : première session : TDD/Test ; Licenses OSS ; Spring vs JEE ; ? ;
- 20h40/21h30 : seconde session : usine logicielle (build, maven...) ; scrum en vrai ; ? ; ?
- ensuite, buffet et discussion libres.

J'ai choisi en première session JEE5 vs Spring (à regret), et en seconde session "Scrum en vrai".

Je ne vais pas m'éterniser sur la première session, orienté "débat", et il fut relativement stérile et consensuel. Rien n'émerge clairement, sauf que "certain client ne veulent que des normes, et JEE s'impose", "Sans Spring, Java en entreprise serait sûrement mort, bouffi par sa complexité". Bref, rien de nouveau. Le point de vu de Julien aurait sûrement mis un peu de couleurs.

La seconde session m'a beaucoup plus plû. J'y ai rencontré Eric Mignot de Pyxis, un "évangéliste Scrum", intégriste (dans le bon sens ), qui m'a permis de voir le chemin qu'il reste à parcourir dans sa mise en place dans les projets auxquels je participe, mais aussi de prendre consience du chemin déjà parcouru.

Après avoir revu les bases de scrum (organisation, objets), nous avons abordé les problèmes contractuel, la gestion de l'architecture, la gestion humaine des équipe.

Le mot qui revient le plus souvent est "engagement" : un projet Scrum ne peut pas fonctionner si toutes les personnes y prennant part son convaincu par la méthode, en particulier si le scrum master n'a pas un soutient indéfible de sa direction, et si le product owner n'a pas le pouvoir décisionnaire sur les paiement/le budjet et sur le périmètre fonctionnel.

La fin de la soirée étaient agréable, les groupes se formant et se séparant au gré des discussions, souvent pationnée.

En résumé : une expérience intéressante, un fin de soirée nettement plus intéressante que le début, et je reste sur ma fin en terme de développement pur - ce n'est pas dans ce genre de soirée que je parlerais de Scala ou de language fonctionnels :)

Project Euler - Scala

I discovered Project Euler, a website that purpose a lots of Mathematical problems that can be solved with programming. The website provides a check of you solution, and a forum to discuss it but only after you give the rigth answer.

Scala really shine in this kind of game. Well, I think that any functionnal language, and perhaps Ocaml even better that other (thanks to it's amazing vm), are really well fitted for this kind of small, algoritm instensive tasks.

The first problems are really simple, and brute force works well, but quickly it is not enonght, and the game become really interesting : it force myself to remind old memories of school, and I'm afraid at the size of the hole in them - I mean, I should have followed some advandced Maths courses in classe préparatoires, and it's almost if I have to discover again all the concept and properties and theorems... A good reason to do all the Project Euler problem till the last one !

Amazing Mythical Man Month

Fred Brooks was rigtht. Well, I know I will not have a Nobel for this fantastic discovery, but each time I refer to the TMMM, I'm really impressed by the insight of the man.

Ok, so, to be more specific : TMMM has 33 years. He is older than me. And Fred Brooks already depected most of the Agile programming method (history is constantly repeating itself).

But perhaps what impresse me the most is that he forecasted 33 years ago what is happening with Open Source software and the JVM ecosystem today : we will build better and cheaper programms only if common, higth-quality tools and library are broadly available.

It's (almost, but if we look from a hight level, it's not too bad) what is happeing in the JVM (do not read Java) world, and tools like IVY and Maven,
Superpackages (ah, not yet) only make it happens quicker.

The future will be intersting, if Sun does not break everything (I hope it's too late for that now).

Monday, September 29, 2008

About me

OK, since I broke the rule I decreed in the first post, at least I should let some information about me.

I'm François Armand, I'm French (Paris) and work in software development for an open-source company, Linagora. My daily work is mostly with Java, with all the drowback it brings - and some quite good surprises from time to time, especially about the wealth and diversity of its ecosystem (but this point is more about the JVM's ecosystem than Java-the-language).

I'm rather new in computer related stuff, since my first programms where done when I reach the master cycle (don't now exactly how French's 'Grandes Écoles" translate in other cultures - for whom who migth be curious, I'm from "ENSIIE"). It was in september 2001.

I keep from that period a deep interest for functionnal programming, and especially a real good memory in my 2004 research project (the one for the end of school's master cycle), when I was allowed to take part of the INRIA's CompCert (Certified Compiler) project and had a deeper look into Ocaml and COQ (a great program prover - well, not exactly, see by youserlves). I will thanks for that Sandrine Blazy and all the people I met in this time (Xavier Leroy, Yves Bertot and others).

The following is more boring. I met the "real world, with real programs and stuff that matter", say Java and Web development. Hum. Well, all is not dark in this side of the world, because I work in company deeply involved with open source software, and I take part of some really good projects, as for example the FederId project, in which I was the developer of InterLDAP-WUI.

All in all, I'm not a real common Java developer, and it's perhaps why I'm looking toward Scala, or Tapestry 5.

OK, that all for now, just a last sentence to link my linkedin profil (I'm also on viadeo, and I believe that the two are rather out of date).

Tapestry 5, Scala

Since the first time I played with Tapestry 5 about 18 months ago, I know it would be great, and the more I use it, the more I see how well thought it is. But again, the more I see the limitation of Java-the-language.

I really need to test again Tapestry 5 with Scala as a back-end - Yeah, Scala is the other hot-thing I follow since about the same time, and at that moment Scala/T5 was working fine. But hence Scala evolved a lot, and T5 relies deeply on Javassist and byte code manipulation, I fear that I may encounter some bad surprises, especially in real-life application.

One more item in my to-do list :)

Tuesday, September 23, 2008

Java 7, aka the Rubicon

I'm looking forward to write something about Java 7, and why it makes me feeling more and more uneasy. To summarize my thinking, I believe that Java, the language, can not continue to evolve without a clean deletion of old, not alway smart or still relevant design choice of java 1 to 5, but that the JVM have a great deal to play as the new open runtime environment.

Hope I will find some time to develop it a little, at least it's writing somewhere.

Tuesday, September 16, 2008

Hard to get OpenId

The so called standard authentication standard, with all its hole and drawbacks, is becoming a required tools... So, I have to open a blog to get an OpenID (google already has so many infos about me... Of course I trusted them, they are so nice...).

Don't expect real post here :)

  © Blogger template 'Minimalist G' by Ourblogtemplates.com 2008

Back to TOP