When we migrate data at
SRMvision, we use Groovy to
focus on the migration logic without loosing time with heavy syntax
and POJO mapping. Groovy is a great tool to do this, and its out of
the box Sql handling is really very good. I found myself having the
need to insert data to multiple existing table filling all columns.
While we can do it easily, it can become a mess rapidly when there
is a lot of columns to handle. With this little snippet, you can
leverage Groovy's maps to get a solid insertIntoTable
During 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 :
mvnjetty: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.