MBP KeyboardDuring a Jabber talk with my friend Thomas Debarochez I mentioned an app I use everyday that he hardly ever knows. Then I think it might be a good idea to describe the tools I use everyday at work or home on my machines. My main computer is a MacBook Pro (late 2011) running latest OS X version (Mountain Lion). I use it to develop the SRMvision platform which is built using Java EE technologies (the whole stack will be detailed in a further post).

The tools I use on my machine in my development process are the following :

  • IntelliJ IDEA Ultimate 12 : the best Java / JVM language IDE so far. It is a great IDE, offers a really good Maven integration and there is a wide range of plugins available. This last version features the really nice Darcula theme (eye candyness) and out of process compiler which makes it really fast.
  • Sublime Text 2 : it is a simple but really powerful text editor. I use it to open every file that is out of my IntelliJ's projects.
  • Sequel Pro : a nice and powerful mySQL GUI client. It is sometimes more comfortable to query database with a GUI than with the command line.
  • MongoHub : a simple MongoDB GUI client, crashy but it can be useful at times.
  • Apache Maven : there is no need to elaborate on this one, I think every Java developer knows it.
  • Oracle Glassfish : one should chose a JavaEE application server, we chose the reference implementation of the spec.
I also use hosted service (self-hosted on our internal network or in the cloud for some) :
  • GitlabHQ : if you've read past blog entries, you should know this wonderful tool to manage git repositories (self hosted).
  • Jenkins : the well known build tool (self-hosted).
  • Sonatype Nexus : as we build our softwares with Apache Maven, we need an internal artifact repository, this one was chosen because it was the simplest to install (when we did it) (self-hosted).
  • Sonar : associated in our build pipeline, we have got a Sonar install to collect metrics on our projects (self-hosted).
  • Trac : old but not dead, Trac is our source ticketing system from day one. It is surely not the hottest kid in town, but it does its job as expected (self-hosted).
  • Trello : our sprint management tool, its card approach with TrelloScrum plugin allows us to easily plan and run our sprints.
In my list of programs I run everyday without being specifically targeted toward development, I use the following :
  • Synergy : it is a simple tool allowing you to share one computer's mouse and keyboard with many other machines using your network connection. As I have two other machines at my desk, this tool is really useful in order to control each one from a mouse and keyboard.
  • ControlPlane.app : a great app if you use a MacBook, it allows you to define profiles and trigger them based on your location. I have a few profiles allowing me to toggle screensaver password, screen luminosity and my synergy setup.
  • Alfred.app : it is Apple's Spotlight on steroid, you can do whatever you want to by simply hitting the shortcut you defined in Alfred. My usage is mainly using it as an application launcher.
  • Cloud.app : this little tool is really great. Every screenshot I take is uploaded to their servers and the link is then automatically put in my clipboard. It is really useful to quickly share screenshots over instant messenging.
And to finish with this little blog post, here are the stuff I keep installed on my machine even though I don't use them daily :
  • HomeBrew : when I got my first Intel Mac, I used MacPorts to install tools from the Unix world from sources. This tool is great, but you end up downloading a lot of dependencies to get a simple soft to build and you are transforming your CPU to a toaster. Then I heard about HomeBrew, which is the simplest and the greatest way of managing third party applications on your Mac. Everything is clean, there is no need to be root, no need to be part of the global warming thing with your CPU.
  • Dropbox : I think this one is known by everyone now. Just upload and share your files easily, the app is so great that I can even forget the magic it is doing in my back.
  • Pocket : (previously Read It Later) is a great software to mark links, blog posts, everything you can come across on the web as to be read later. The Mac application is beautiful, so is the Android one (Hint : don't stack in it if you can't manage to free time for unstacking).
  • SourceTree.app and Github.app: at times, I need to get a visual help to manage my git repositories. SourceTree is a complete tool offering a really good looking branch visualization. Github allows to seamlessly use their service, I often use it to reorder my commits before making a pull request.
  • Colloquy : a really good IRC client, I use it when I am telecommuting, otherwise I use the classic XChat (linux version).
  • Spotify : I think I can not work without music, the 10€ / month membership allows me to use it with my phone too, it is very unlikely that I cancel this subscription anytime soon (I even use the Linux version).
  • XSlimmer : I use this tool from time to time to slim down the size of the app I have installed. It works by removing unused language in packages.
  • Clusters : I have this one installed and do its work without worrying of what it is doing. It allows me to save some space in the folders where I store documents (compression is very efficient here).
  • Dashlane : this password and identity manager is really good. It exists for different OSes and allows to setup strong passwords on every account you own : must have.

In my everyday browsing I came across this very interesting link explaining what people tends to do wrong when doing a keynote.
These points are really important but I attended a lot more presentations done wrong than following these simple advices : Five Presentation Mistakes Everyone Makes

I am among the first users of ingress in France, the concept feels good, but for the times being, there is not enough people playing to make it really interesting.
In my hometown (Tours,France) I think we are under ten people running the game for now, so I am the first who captured the portals in the center of the city. The game is addictive even though there is almost nobody, I can't wait to see more people playing.

There is not much portals for now, but you can submit your own portals. I think I will use the camera of my brand new Nexus 4 to do this.

It is not a secret that the SRMvision platform is developped using the Apache Wicket framework.

As our application became bigger and so our team, it's getting harder to find the correct Wicket class beneath the view of the page we get in our browsers.

To help the team in this process, I made a simple Chrome extension and a IntelliJ IDEA plugin allowing to send class names to the IDE from the web browser (at the cost of a very simple class in your project, disabled in deployment mode).

Getting your project ready

In the chrome-wicket-idea-example github repository, you have a very simple example of what needs to be done to enable navigation between your browser and your project opened in your IDE. Have a look at the WicketApplication class (specifically in the the init() method) and at the DebugComponentBeforeRenderListener class (it is where the 'simple' magic happen). The good thing is you only need to use this class in your project (confirmed working with Wicket 1.4, 1.5, and 6), and to mimic the initializer logic to get started.

Please notice that you can specify which classes you want to track in your markup (by restricting on package names) at the listener's instanciation.
To test the sample project, you can run the embedded jetty server by running :

mvn jetty:run

Wicket Open In IDEA

IDEA part

The IntelliJ plugin listens for classnames to open on a http socket (10462, overridable in plugin settings).

You can get the IDEA plugin in its github repository, to install it, you have to select "Install plugin from disk" from the "Plugins" category in your IDE settings.

Chrome part

The Chrome extension is really simple, like my TrelloScrum fork, it is not (yet) available on the Chrome Web Store, thus, you have to download the release here and drag and drop it on your chrome://extensions page.
If you want, you can tweak its settings, via the "Options" page :

  • IDE Host : if you change the setup of the plugin in your IDE (or run your IDE on another machine than your browser), you might need to change the host and port to reflect this.
  • Context menu presence host : if you want the context menu icon to appear only on sites where it should, you can narrow the domains here.

To use it, you only have to right click on an item in your "enhanced" web application and select "Wicket debug this".

From there you'll get a modal window listing the matching classes names (sorted by parent order, the first is the closer to the element you pointed to, the next one is the parent class and so on). If there is not any opened modal when you try to use it, it means the extension did not detect any classname in the markup.

Each classname, when clicked, is sent to your IDE which will in turn opens the class matching the classname so you can edit it. The lower part of the modal window will inform you about the status of your last action :

  • If the plugin is not enabled, or the IDE not running : it will display an error message
  • If all went like expected : it will display a confirmation message

I hope it will help other teams using this great framework, or it will give ideas to user of others frameworks.

There is a lot of buzz around Scala these days. The language is now known to divide a lot of programmers (specially ones with a Java background). To chose the side I'm on, I read the excellent book from Martin Odersky, Lex Spoon and Bill Veners : Programming in Scala. The book is really well written, it explains a lot of great things about the language, but reading without exercising is not really efficient (of course you can try the examples yourself, but as I read it in bed, it is not that easy to do).

In the meantime, I found that Martin Odersky, via coursera, gives a free course "Functional Programming Principles in Scala". I am actually attending it, and, I have to say I enjoy learning this language. I am starting to think differently when coding, I found myself really more critic regarding the side effects of my methods for example.

If you're curious about Scala or about functional programming paradigm, you should attend this course and do the assignments, it takes time but really worth it.