Wednesday, December 9, 2009

My shortcut to open any gem in TextMate with 1 command

Using the implementation from @peepcode's blog on shell method missing as a base.
I've added another action (code snippet below) to open a gem library in TextMate by typing in the name of the gem followed by ".mate".

when /^[A-Za-z0-9_\-\/]+\.mate$/
  # Open the gem in textmate
  # @example
  #   haml.mate
  gem_to_open = command.first.gsub(/\.mate$/, '')
  run "gem which #{gem_to_open} | tail -1 | xargs dirname | sed -e's/$/\\/../' | xargs mate"

Wednesday, November 25, 2009

Download sources jar from maven

We use Maven, when Maven downloads dependencies it doesn't download sources, which I rely on when learn and debug programs....
I was expecting, for what seem a simple thing to me, a flag that I can add in maven's settings files or an option to pass to mvn command.... but I couldn't find the solution (or anything close to it). Don't get me wrong, there are solutions out there, but I just feel it is too much hassle for the task.

So I wrote a little script that go thru my repo and downloads any jar that doesn't have its respective sources :p

Monday, November 23, 2009

ImageMagick and JPEG on OSX

I am not a fan of port or fink so I always install ImageMagick from source.
Recently I came across a problem where ImageMagick fails to identify JPEG's.
The error looks something like this
identify: no decode delegate for this image format

After some digging around it appears I need to install libjpeg and reinstall ImageMagick for JPEG support.
So I downloaded jpegsrc.v7.tar.gz and just run thru the standard configure, make & make install then reinstalled ImageMagick.
After the installation you should be able to see JPEG as one of the supported format via the command "identify -list format".
It should contain something like this.
JPEG* JPEG rw- Joint Photographic Experts Group JFIF format (70)


Tuesday, September 8, 2009

Mass erb to haml conversion

Do this in your application's root folder.

find . -name "*.erb" | while read f; do html2haml -r $f ${f%.erb}.haml; done;

Thursday, August 27, 2009

How to stop unix read command escape backslashes

If you want to pipe any output that has backslashes in it (or make 'read' take a string with backslashes) to the read command then you will need to stop the read command treating backslash as escape character by using read -r
e.g.
cleartool ls | while read -r file
do
# do something to file
done

Monday, August 24, 2009

Software design or code design

Software design

Generally high level, a.k.a.
  • architecture
  • infrastructure
    e.g. 3-tiers or client server, ejb or not

Code design

  • domain design
  • flow design
  • good code design means clean, maintainable code
  • code design issues are easier to fix than software design
The following extract from Domain Driven Design applies regardless the type of project (waterfall or agile).
Any technical person contributing to the model must spend some
time touching the code, whatever primary role he or she plays on
the project. Anyone responsible for changing code must learn to
express a model through the code. Every developer must be
involved in some level of discussion about the model and have
contact with domain experts. Those who contribute in different
ways must consciously engage those who touch the code in a
dynamic exchange of model ideas through the Ubiquitous
Language.
A solution consultant should touch the code (or at least know the code if they don't want to touch it).

Rails Rumble after thoughts

Building an application in 48 hrs is hard. Time flies when you are not prepared.


Here are some of the things that you want to touch on before the competition starts.

  • application security / access - who has access to what
  • model / resource routes - what models are required and how are they connected from browser / UI perspective
  • fields & columns in models
  • model validation / mandatory fields

For the initial first few models that you add to the application, the effort to add each one does not increases in linear fashion.

Because with each model, you need CRUD pages / functionality. Each additional page needs to be styled therefore more visual design required, also more thoughts required for workflow / navigation design.


Often we have to just implement some crude pages to test / visualise our app (particular for workflow) while our designer work thru the markup, which means we usually have to go back and cleanup those pages' markup to fit with the design.


Overall, it was exhausting but I learnt heaps of cool tricks this year building TechMeets.com.