Reficio™ - Reestablish your software!

Long-awaited Babun 1.1.0 has been just released!

After months of hard work a new version of Babun has been finally promoted to production!
This release features an important change in the auto-update behavior.

From now on babun update will also check and update the underlying Cygwin instance with all Cygwin packages that have been already installed, apart from updating babun itself.

The main reason for this change was to make sure that the packages installed with pact are compatible with the underlying Cygwin instance. Pact always fetches the newest available package from the Cygwin repository, but it does not update Cygwin’s internal DLLs’, thus it was possible that a new version of given package like git, ruby, emacs etc. would not work on top of the older Cygwin version embedded in babun. For this reason it is important to keep pact packages and Cygwin core libraries in sync.

Babun will automatically check on startup if there is a newer Cygwin version available and prompt the user to update it. On Cygwin update babun will close itself, run the Cygwin installer in a separate cmd process and restart itself once the installation has been completed. If there is a newer version of Cygwin available pact will not allow the user to install new packages. Instead they will be prompted with the following message:

{ ~ } » pact install arj ~
——————————————————————————-
CRITICAL: The underlying Cygwin version is outdated!
It’s forbidden to install new packages as they may fail to work.
Execute ‘babun update’ and follow the instructions to update Cygwin.
If you know what you are doing add ‘–force’ flag to proceed.
——————————————————————————-

As you can see it is still possible to install packages using the –force option but it is not guaranteed that the downloaded package will work correctly. Big thanks to @v-yadli for helping us designing and developing the concept of this feature.

The auto-update improvement is not the only change in 1.1.0. This release is shipped with other new features coded up during several hackergartens, hacking sessions and long coding nights. The most important features are:

  • pact update, so that you may update a package to a newer version
  • fake sudo, so that you can run scripts containg sudo
  • soft links to harddrives, like /c, /d, so that you may forget about /cygdrive/c
  • a lot of fixed bugs; all of them are listed below this post

Many thanks to everybody who contributed to this release via pull requests, by helping other users, or even by fixing typos! Also a big thank you to the following GitHub users: @almorelle, @vanushv, @tonilampela, @v-yadli, @harijoe, @airborn and @kubamarchwicki for taking time and effort of testing the this version.

In case you have the previous version installed it’s important to invoke babun update to stay up-to-date!
We really hope that you’ll like this release. If you do, tweet about it, star babun on github or just… enjoy it :)

P.S. If somebody is interested in the full list of issues that have been squashed in 1.1.0, just have a look:

  • MD5 sum did not patch, exiting #265
  • Package git is broken after update #259
  • Cmake just returns to prompt without doing anything #252
  • Upgrading Git #242
  • versioning in pact, and pact upgrade & pact dist-upgrade (or the other way) #239
  • Updating git #232
  • Numpy not working after pact install #231
  • Command exits with 127 on Babun, but works on Cygwin #225
  • Unable to start X server after pact install xorg-server xinit #222
  • Emacs doesn’t run #210
  • g++ compilation doesn’t produce any resulting file #203
  • Upgrading with pact not available #199
  • shellshock: bash 4.1.10(4) and zsh 5.0.2 (i686-cygwin) vulnerablility #198
  • Pact Installer, Md5 checksum not matching… #257
  • Add “login” command to babun’s script #253
  • Rerun babun startup scripts after running babun update #250
  • Duplicate call of babun.zsh in /etc/zshrc #249
  • Git plugin changes my gitconfig #247
  • Cannot update oh-my-zsh on start #211
  • etc/zprofile is being called twice causing CHERE_INVOKING to fail. #205
  • .bashrc running three times #166

Just another “Hack Weekend”

And they say that Software Engineering is boring… It doesn’t get more wrong than that! At least it’s like this with me… but I know a couple of other freaks (Hackergarten Basel team) that hack on a lot of interesting stuff whenever they can :) Here’s the proof:
https://twitter.com/galderz/status/409642141036838912

After the last weekend of hacking when I worked on my own open source projects, mainly on the p2-maven-plugin, this weekend I decided to contribute to the Grails Framework. I have done a couple of project using Grails, but I haven’t seen the latest releases, so it was a chance to get the gist of what has changed. And I wasn’t disappointed! The framework really rocks!

So, I have worked on 5 tickets assigned to the next release (2.3.5) – along the way I have submitted 3 pull requests. Hopefully. I have solved all of the problems. In some cases the users tried to use the mechanisms in a wrong way -> maybe doc should be supplemented? Anyway, here’s the list to the issues, in case you are interested.
http://jira.grails.org/browse/GRAILS-10753
http://jira.grails.org/browse/GRAILS-10843
http://jira.grails.org/browse/GRAILS-10875
http://jira.grails.org/browse/GRAILS-10877
http://jira.grails.org/browse/GRAILS-9041

Now, it’s time to get some sleep! Eventually! It’s 3.32 am :)

Hackergarten coding session at centeractive!

I am pleased to invite you to the first Hackergarten session that will be held at centeractive (Worbstrasse 170, Guemligen) on Friday – 23rd of November!

Hackergarten is a craftmen’s workshop, classroom, a laboratory, a social circle, a writing group, a playground, and an artist’s studio. Our goal is to create something that others can use; whether it be working software, improved documentation, or better educational materials. Our intent is to end each meeting with a patch or similar contribution submitted to an open and public project. Membership is open to anyone willing to contribution their time.

Our plan is to begin at 17.30 and have a lot of fun coding together – in pairs or bigger groups – eating pizza and drinking beer right from the start :)

What will we work on?

  • Hamlet D’Arcy who is a groovy commiter, mentor and expert working at the canoo ag in Basel will join us so we’re gonna have a lot of Groovy stuff to work on during the session.
  • Tom Bujok will prepare some topics on the soap-ws project that he is the leader of, so if you want to touch the void and play with some Web-Services you simply cannot miss out on this!
  • Or we can pick up any other topic and simply work on it a bit…

Please invite your friends (developers) – everybody is invited. By the way, every participant will get a free Retrospective Log Analyzer license.

Please let me know if you come and with how many people – we have to know how many people we buy beer for :) – simply contact me on LinkedIn.

EDIT: Andres Almiray (the Griffon project lead and the Java Champion) will join us, so expect some cool Griffon stuff coming up! Thanks Andres!

UberConf – be ready to have your mind blown!

I hate blogging about conferences. I find it dull, unentertaining and worthless. Yet another blog entry about a few sessions that the person attended and some comments whether it was good or bad. I did it once following the “common” pattern and I still feel bad about it. I don not particularly like these posts since they rarely judge the conference as a whole and concentrate on that year’s events that, guess what, will not be there the following year. IMHO, the only noble purpose that they serve is to broadcast the message that this particular person attended that specific conference. Fair enough.

This post is supposed to be different (I hope at least) because what I would like to do is to basically focus on the fact why UberConf rocks. That being said I will give you 5 reasons to prove my point.

  • First of all, there are no sponsors (literally NULL). That is really fair since you have to pay for the ticket and there is nothing worse in the schedule than the sessions presented by sponsors. They are pretty often boring, unobjective and tiresome.
  • Next, sessions are 90 minutes long. It is the biggest advantages in comparison to other conferences (JavaZone 60 min., Devoxx 60 min., Geecon 60 min., JAX 50 min., Jazoon 50 min). 90 minutes is enough to give a proper introduction, develop the topic, present decent code samples, and wrap up in a thorough Q&A section. From now on, anything shorter than that seems just too short.
  • In addition to that, a full-day workshop preceding the conference is a brilliant idea. I am aware of the fact that many conferences offer university days, but the sessions are maximally 3 hours long which, in my opinion, is not enough to fully cover the topic on a reasonable level of abstraction.
  • Do not be suprised if it is 21.30 in the evening and you are still at a lecture, a session or a workshop. The wide variety and amount of sessions is just mind-blowing.
  • Over many years UberConf and NFJS have proven to invite the most influential java rock star speakers, like Ted Neward, Venkat Subramaniam, Mark Richards, Ken Sipe, Tim Berglund, Matthew McCullough, Neal Ford, etc.. .You cannot discuss with that.
  • Finally, the atmosphere rocks at UberConf. People are so friendly and open that you immediately have the impression that you know each other for a long time. That enthusiasm and dynamism is also so tangible that you almost feel it in the air.

Personally, I extremely enjoyed the conference and all the fun that was around it. Ken Sipe offered once 20 USD to the person that implements a cross-tab scripting example on his web-security workshop. I am neither a javascript expert nor a web-development geek, but this task was pretty enjoyable to me. You can see the full script below (works on Firefox only). The “showAllURLs” function displays all URLs opened in all browser’s windows/tabs. I enjoyed this 20 bucks as well – Long Island ice tea with Szczepan Faber and some other guys was great!

I was also happy to discuss the issues around JmsTemplate with Mark Richards, who claimed that JmsTemplate was 10 times slower than the native JMS code on sending 1000 consecutive messages. He even presented some examples and performance charts to prove this fact. That was pretty confusing to me since my internal tests performed a few years ago have proven something completely different. After a while I noticed that he simply had not compared apples with apples. In the code using the native JMS API Mark reused one JMS connection and one JMS session whereas in the code using JmsTemplate he did not use caching at all (be default JmsTemplate opens a new conncetion and a new session on every operation – it is well documented though). I sent him the following XML snippet with CachingConnectionFactory setup and he rerun the test. The result was very different – JmsTemplate was only about 2 times slower – and this could be fine-tuned as well. It was a reasonable result, though, since JmsTemplate offers you a lot of convenience stuff and eliminates boilerplate code from your app.

That is pretty much it. I hope I convinced you that UberConf is really a great show that is a bit different from the ones that we have in Europe. I have never regretted going there twice – even when I suffered from a jet lag at 4am in the morning. I hope you will not regret either. See you at UberConf!

Mission Impossible with Kirk Pepperdine

Last Tuesday Kirk Pepperdine gave a talk at Warszawa Java User Group. Kirk is a Real Guru in the Java world so I was truly excited to meet him. He has been working in high performance and distributed computing for nearly 20 years. What is more, in 2006 Kirk was recognized by Sun Microsystems as a Java Champion recipient for his contributions to the Java community.

“Performance Tuning with Cheap Drink and Poor Tools” was the topic of the session. At the beginning participants got a cheap food (pizza) and a cheap drink (coke) – so everybody was in high spirits :) You can expect everything when you attend a JUG meeting. Sometimes people present something you actually got acquainted with very well, sometimes you don’t know the subject, but Wikipedia, Google and Eclipse would give you the same answers without leaving your home. Some sessions are, however, sensational – and Kirk’s talk was really that case!

At first, Kirk put emphasis on the fact that there is no taxonomy regarding performance tuning. The main problem is that very often developers do not realize that the process of giving a performance boost to an application is much different than the development itself. Kirk made a joke that many companies tune their application in accordance with the following rule:

“We don’t know where we are going, but we are having a great time” .

According to the speaker, issues concerning performance should be take into consideration at every stage of the project life-cycle. Could we disagree with that? I don’t think so, but why it is neglected most of the time…?

Later, Kirk presented a sample application which encompassed the most common performance bottlenecks. The audience was supposed to tune it on the spot. It was really funny as this simple exercise showed the main problem right away! Developers are used to work with the code – we can even say that we love the code :) So, what do we actually do to solve potential performance problems? – we look into the code! According to Kirk it is the last thing that should be done. However, to cut the long story short, here are some general rules presented by Kirk:

  • When is the performance bad? – When users do complain!
  • Everything matters – tune application in exactly the same hardware/software environment as the production environment.
  • DON’T LOOK INTO THE CODE unless you really know where you wanna look.
  • Find the DC (dominating consumer): application, jvm, os, hardware.
  • If CPU kernel time is higher than 10% – application is the DC.
  • Use poor tools – such as: jps, jstack, jvisualvm – to locate the piece of code that is responsible for the degradation of performance. THEN look into the code to modify it.
  • Using a profiler is the last step
  • Don’t shoot wild – don’t do anything blindfold – making your code look beautiful won’t help!

Do you agree with that? YES, YES, YES ;)

COOLuary 2009 – a real belter of an unconference

I spent an additional day in Cracow to participate in the third edition of COOLuary organized by Grzegorz Duda and his Developer’s World. I was really excited to take part in it, since I have heard that the idea of unconference is gaining popularity nowadays.

The unconference consisted of four panel discussions (50 minutes each). Grails, BPM, Terracotta, JMS, proxying are only some examples of topics mentioned during the sessions. What I enjoyed most was the fact that the discussions were informal and all participants had the possibility to change the topic when the conversation headed toward an unintended direction. I also liked the idea of the conference being a purely face-to-face, developer-to-developer sharing of experience – without a trace of fuzz or evangelism!

The most interesting part, however, was the hands-together session with Mark Richards. It lasted three hours and I enjoyed every single minute of it! Mark spun a yarn about some of his most interesting JEE projects and problems related to them. First of all, we discussed all pros and cons of distributed transactions (JSR-95 and compensation frameworks). It is a topic where I am currently performing R&D, so I really absorbed every aspect of the session. Later we moved onto business locks, JMS byte messaging and Web-Services.
The three hours spent with Mark was the best time I have had during JDD and COOLuary and I would even come to Cracow if it were the only session that I could attend. It was so great that I really hope to be able to take part in No Fluff Just Stuff conferences to see Mark again… If you want to see Mark in action watch this movie on InfoQ .

Java Developer’s Day 2009 in Krakow

During last weekend I had the possibility to attend the Java Developer’s Day 2009 in Krakow (link) . It was the third time that I took part in this conference (also in 2006, 2007). It was a great event with a keynote speech performed by Mark Richards – one of my idols! Not only is Mark a great speaker, but also a well-educated and experienced computer scientist, thus it was a real pleasure to attend his sessions. Generally, I attended the following ones:

  • “Pimp up your domain model with jBPM” (Tom Baeyens and Joram Barrez)
    The session was really good, however Tom and Joram have only presented the overview of features encompassed by jBPM so it wasn’t anything that could attract me. I’ve been using jBPM for almost one year right now so I would rather be interested in sophisticated usage scenarios. However, I admire Tom and Joram for the last example which outlined how to set up the whole jBPM environment in 60 seconds – it was really a great show!
  • “The Art of Messaging” (keynote, Mark Richards)
    What a session it was! Mark presented a large part of knowledge regarding messaging and JMS in particular. I especially liked the results of the benchmarks performed in different messaging scenarios. The jokes were also great. I hope to see Mark back in Poland soon…
  • “Exception Handling in the Systems Built with JEE” (Tomasz Skutnik)
    Session was really interesting, however the speaker delivered some controversial statements regarding checked exceptions with which I could not agree. Tomasz also encouraged us to implement proprietary code for proper resource management. It is really concerning since these features are already implemented in frameworks such as Spring – so I encourage him to get acquainted with that…
  • “Asynchronous, Concurrent and Distributed Processing in Java EE…” (Waldemar Kot)
    The session was good. Earlier, I have never heard about the CommonJ Work Manager API – the “de facto” standard of manual thread management in JEE. One thing that annoyed me a little bit was fact that Waldi kept his hands in pockets almost all the time during the speech – in my opinion it was inappropriate. However, from the technical point of view the session was cool.
  • “Effective Code Review for Agile Java Developers” (Wojciech Seliga)
    Great presentation of the Atlassian and JetBrains products performed by a guy who was experienced in TDD and Agile. Code reviews and pair-programming were the focal points of this talk. It is really sad that I can’t see a way to use these methodologies in my company in the forthcoming decade…
  • “Common Anti-patterns and Ways to Avoid Them (Mark Richards)”
    Interesting session during which Mark presented some most popular anti-patterns. Excellent speech!
  • “The Architecture of Applications Based on DDD that use Seam and Flex” (Slawomir Sobotka)
    I had been checking my emails during this session, so I can say nothing about it… I was also pretty tired at that time.
  • “Resource-Oriented Architecture (ROA) and REST” (Scott Davis)
    Scott is a real Groovy&Grails enthusiast and it was noticeable from the very first seconds of his talk. Groovy examples were great – especially that one regarding REST service invocation implemented in one line. From the technical point of view this session was quite poor, as Scott presented a lot of evangelism. However, considering the fact that it was the last session, it was a great finish of the conference. I wasn’t disappointed…

To sum up. JDD09 was a great event! After the conference I had the possibility to meet my friends from studies – with whom I (after)partied in Jazz Rock! See you all next year!