Working with Rails as a designer

Installing Rails

You have to install first ruby, rubygems, git, bundle, rails

Installing ruby

Preferable way is to install it with normal user via rvm. I am not an expert in mac so probably you need to install xcode from your disks/Internet. Then use rvm

Here is a one of the many tutorials

here are other ways for installing ruby taken from Ruby on Rails for Designers

  • Windows: One-Click Ruby Installer (I recommend using 1.8.6-26 Final Release)
  • Mac OS X 10.4: Ships with broken Ruby but you can follow the amazing guide by Dan Benjamin
  • Mac OS X 10.5: If you install the Developer Tools from Apple you will be set. Try either your installation discs or Apple’s Developer Site and download Xcode
  • Linux: While this may vary for each distribution, you will need to install ruby, irb, & rdoc

Installing rubygems

Download, extract and run ruby setup.rb

more reading here

Checkout the project

One SCM is git. install it

Then checkout it

git clone ssh://

Starting Rails project

go to the project folder you have checkout already.

cd uppstart

rvm will ask you if you trust the version of ruby specified in the project. Please agree and install it if you don’t have it.

installing is done by

rvm install ruby-what-ever-version

then you have to install bundle. This is done by doing

gem install bundler

After you have install bundler you will have the bundle command available. Bundler will try to install all the project dependencies. do this by typing


if you don’t have errors you will be almost ready to run the application.

check in config/database.yml and prepare the database specified in the development section

cat config/database.yml

If you see in development sqlite3 as an adapter then just type

rake db:setup

start the application by running

rails s

check the app by navigating to http://localhost:3000


All views are located under app.

Files starting with underscore are partials which are reused in multiple places.


Assets could be in several places.


  • app/assets – for assets which are from the application
  • lib/assets – for assets which are exported
  • vendor/assets – for 3rd party assets

If you want to add your own file include it under the




Do not add css/javascript directly in those files.

Deploying the application

Put your ssh keys on the server. This should be done once.

Then you have to put your changes on the remote repository. This is done by doing

First we need to get any remote changes by doing.

git pull
git commit -a

Then we can add our new files and commit the changed files/folders.

add the new files with

git add filename_or_folder

then commit all with a message

git commit -a -m "nice message what was changed"
git push

Finally From the application folder run

cap deploy

uptimed and uprecords

Nice! As I am maniac of  uptime here is nice utility found at

uptimed. It is similar to the utility that most of us have heard of, uptime, except that it runs as a daemon and logs the system’s uptime instead of just reading info that is lost on a reboot. Uptimed provides a secondary command called uprecords

If you have a lot of readings then Struct is the winner.

If you have equal read/write then Hash

And forget for OpenStruct

Here is why and how I benchmark all those methods

guda: ~/vanilla_ui/vanilla_properties  (v2 *$ u=) ∴ irb
ruby-1.8.7-p330 :001 > require ‘benchmark’
=> true
ruby-1.8.7-p330 :002 > require ‘ostruct’
=> false
ruby-1.8.7-p330 :003 > n = 5000000
=> 5000000
ruby-1.8.7-p330 :004 >
ruby-1.8.7-p330 :005 >   puts “convertions”
=> nil
ruby-1.8.7-p330 :006 >
ruby-1.8.7-p330 :007 > do |x|
ruby-1.8.7-p330 :008 >“Struct init at start”) { CustomerOne =, :age);  s =‘a’);   n.times do; end }
ruby-1.8.7-p330 :009?>“Struct with write op”) { CustomerTwo =, :age);  s =; = ‘a’; n.times do; end }
ruby-1.8.7-p330 :010?>“Hash”) {  s =;  s[:name] = ‘a’; n.times do   ; s[:name]; end }
ruby-1.8.7-p330 :011?>“OpenStruct”) { s =; = ‘a’; n.times do   ;; end }
ruby-1.8.7-p330 :012?>   end
user     system      total        real
Struct init at start
1.160000   0.000000   1.160000 (  1.155457)
Struct with write op  1.200000   0.000000   1.200000 (  1.208754)
Hash  1.510000   0.000000   1.510000 (  1.507588)
OpenStruct  5.990000   0.000000   5.990000 (  5.999714)
=> true
Lets do some = operations
ruby-1.8.7-p330 :015 > do |x|
ruby-1.8.7-p330 :016 >“Struct init at start”) { CustomerMale =, :age);  n.times do s =‘a’);; end }
ruby-1.8.7-p330 :017?>“Hash”) { n.times do   ; s =;  s[:name] = ‘a’; s[:name]; end }
ruby-1.8.7-p330 :018?>“Struct with write op”) { CustomerFemale =, :age);  n.times do s =; = ‘a’;; end }
ruby-1.8.7-p330 :019?>“OpenStruct”) { n.times do   ; s =; = ‘a’;; end }
ruby-1.8.7-p330 :020?>   end
user     system      total        real
Struct init at start  9.930000   0.000000   9.930000 (  9.943670)
Hash 11.090000   0.000000  11.090000 ( 11.127766)
Struct with write op 12.230000   0.000000  12.230000 ( 12.243452)
OpenStruct still working ….

to_i or to_s is faster?

require 'benchmark'
n = 500000

puts "convertions" do |x|"to_i") { n.times do   ; "123456789".to_i; end }"to_s") { n.times do   ; 1234567890.to_s; end }"to_sym") { n.times do   ; 1234567890.to_sym; end }

user     system      total        real
to_i  0.310000   0.000000   0.310000 (  0.315844)
to_s  0.490000   0.000000   0.490000 (  0.490607)
to_sym  0.170000   0.000000   0.170000 (  0.171511) do |x|"string.to_i == number") { n.times do   ; "123456789".to_i == 1234567890; end }"number.to_s == string") { n.times do   ; 1234567890.to_s == '1234567890'; end }"string.to_sym == string.to_sym") { n.times do   ; '1234567890'.to_sym == '1234567890'.to_sym; end }"num.to_sym == string.to_sym") { n.times do   ; 1234567890.to_sym == '1234567890'.to_sym; end }"number.sym == number.sym") { n.times do   ; 1234567890.to_sym == 1234567890.to_sym; end }

user     system      total        real
string.to_i == number           0.400000   0.000000   0.400000 (  0.401863)
number.to_s == string           0.740000   0.000000   0.740000 (  0.744603)
string.to_sym == string.to_sym  0.560000   0.000000   0.560000 (  0.574106)
num.to_sym == string.to_sym     0.460000   0.000000   0.460000 (  0.459292)
number.sym == number.sym        0.400000   0.000000   0.400000 (  0.399014)

Rails tip of the day

Generating random string


Autoicrement the serial in bind zone files

Argh. 30+ zone files and I have to increment all numbers by hand…no way.

Usage:  ./inc.rb in the current directory with all db files.


Dir.glob("*.db") do |file_name|
 new_zone = [] Continue reading

Wireframing for faster website development

I have tried the approach listed in “Getting Real” by 37signals and I have great results.

The client was very happy because he can imagine his website.

Now I am considering to buy or make such nice tools :)
1. Pencil

Pencil (free) is a Firefox plugin that professes to enable you to build wireframes and prototypes. As a prototyping tool it’s quite good, allowing you to quickly put together a reasonably high fidelity mockup. However, be aware you’ll still need to produce the visual design elements for Pencil, as it relies on dragging and dropping pre-made graphical elements.

The output wireframe elements that ship with Pencil do tend to be based on the look and feel of a Windows desktop application. This really is undesirable for a web application, however you could modify this with your own page elements.

Another downside of Pencil is that its export functionality provides only a few image formats. This means that Pencil falls short of being a real interactive prototype development tool.

Balsamiq Mockups

Balsamiq Mockups (price:$US79, demo available) is an interesting product running on Adobe AIR. Its representation of the interface elements has a refreshing hand-drawn, sketch-like quality to them. This does help promote the degree of changeability of the wireframes, as they look very much like a draft. If you lack the skills to create hand-drawn sketches then Balsamiq is a useful tool, as it allows you to produce quality roughs. Balsamiq also offers a standard collection of interactive screen elements, which is helpful to start off with. is like balsamia – for very simple pages- I cant find how to change the layout.


A java based.

Eclipse based plugin –

And a nice topic in stackoverflow


Software development

After my blog post about the junior software developers I have very bright idea of how the world could get benefit from them.

When you catch a junior in mistake – let him contribute to the open source community. Not with coding. With translating. Take some open project and translate it to your native language.

Maybe after all the junior will release that he is much happier to translate than coding :)

win-win condition.

N.B. On the picture – Young coder is coding in Word.

Hash to encode iso-8859-1 (western) to html entities

 'À' => 'À',
 'Á' => 'Á',
 'Â' => 'Â', Continue reading

Is Rails going down?

The first Rails framework was fast. then it become slow, big and the idea of convetion over configuration becomes more poisoned.

Currently to start with Rails you have to learn a lot of stuff which are added just now and is not sure how long they will stay.

Also Rails is not targeting the developers to be fast but is targeting to be the perfect framework.

The price for that is that almost a year and a half there is no new version while the they refactor it.

No goodies like scafolding, only enterprise stuff around.

That is my personal opinion on this framework.

As I like to say – you cant leave your followers without food for such long time.

© 2024 Gudasoft

Theme by Anders NorénUp ↑