Finally decided to use Acunote for agile product management 0

Posted by chetan
on Thursday, July 10

In my last post I mentioned Mingle eats too much RAM thus slowing down the server. Another thing I would like to mention is that it has big learning curve; I better learn FLEX than learning MQL.

Acunote on other hand is simple (no story cards) solution to manage agile products. No learning curve and one gets started in less than a minute. Add stories (backlog), create sprint, create sprintlog and that's it.
It has a very good feature of tagging which can be used to tag stories to differentiate them as bugs, defects, tests, tasks, features, change requests, must haves, should haves etc.

On scale of 10 I would give

Acunote - 7
(no project velocity, no users other than current 5 can create defects)

Assembla - 5
(No relationship between Task-Defects, is on the lines of oDesk not agile)

Mingle - 6
(learning curve, complex)

Mingle eats too much RAM

Posted by chetan
on Sunday, June 15

Before I started MingleServer


After I started MingleServer

Install couchdb on ubuntu hardy heron 8.04

Posted by chetan
on Sunday, June 15
Follow instructions below :-

Get couchdb wget http://couchdb.googlecode.com/files/couchdb-0.7.2.tar.gz tar -xzvf couchdb-0.7.2.tar.gz cd couchdb-0.7.2/

sudo apt-get install automake autoconf libtool subversion-tools help2man build-essential erlang libicu38 libicu-dev libreadline5-dev checkinstall libmozjs-dev

./configure
If everything goes fine

make && sudo make install 
Create user couchdb

sudo adduser couchdb
sudo mkdir -p /usr/local/var/lib/couchdb
sudo chown -R couchdb /usr/local/var/lib/couchdb
sudo mkdir -p /usr/local/var/log/couchdb
sudo chown -R couchdb /usr/local/var/log/couchdb
sudo mkdir -p /usr/local/var/run
sudo chown -R couchdb /usr/local/var/run
Copy couchdb init script to global so that it gets started on server startup

sudo cp /usr/local/etc/init.d/couchdb /etc/init.d/

sudo update-rc.d couchdb defaults

sudo /etc/init.d/couchdb start
Start browser and hit at http://localhost:5984/_utils/index.html

Newage Agile Product Managers – what the **** !!!

Posted by chetan
on Sunday, June 15
These are those product managers who came along wailing waterfall model and now struggle to learn and follow agile model but get everything wrong

One of them I experienced lately did everything is not agile but loved when called agile. This is how he managed an agile project

1. Fuck with requirements document; let’s have all the user stories spanned across various emails
2. I am too lazy to update wiki either
3. Fuck sprints and bloody iterations; develop and deploy daily
4. ARRRRGG!! Why developers prepare a timeline?
5. I am too lazy to manage QA; developer can you do it!!?
6. Let’s not differentiate tasks, tickets, change requests

ubuntu - auto recommends - how to install svn

Posted by chetan
on Monday, May 26
This is what I get when I try to use svn when subversion is not installed on my horny ubuntu :)

chetan@devtaa-desktop:~$ svn co http://code.djangoproject.com/svn/django/trunk/ django_src
The program 'svn' is currently not installed.  You can install it by typing:
sudo apt-get install subversion
bash: svn: command not found

shotgun/rubinius gem env

Posted by chetan
on Saturday, April 05

devtaa:rubinius chetanm$ shotgun/rubinius gem env home
/Users/chetanm/Downloads/rubinius/lib/rbx/gems/1.8.6
devtaa:rubinius chetanm$ shotgun/rubinius gem env
RubyGems Environment:
  - RUBYGEMS VERSION: 1.1.0 (1.1.0)
  - RUBY VERSION: 1.8.6 (04/04/2008 patchlevel 111) [i686-apple-darwin9.2.2]
  - INSTALLATION DIRECTORY: /Users/chetanm/Downloads/rubinius/lib/rbx/gems/1.8.6
  - RUBYGEMS PREFIX: /Users/chetanm/Downloads/rubinius
  - RUBY EXECUTABLE: /Users/chetanm/Downloads/rubinius/bin/rbx
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86-unknown
  - GEM PATHS:
     - /Users/chetanm/Downloads/rubinius/lib/rbx/gems/1.8.6
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
     - :sources => ["http://gems.rubyforge.org", "http://gems.rubyonrails.org"]
  - REMOTE SOURCES:
     - http://gems.rubyforge.org
     - http://gems.rubyonrails.org

Also it works with rbx .. check this out


devtaa:rubinius chetanm$ rbx gem env
RubyGems Environment:
  - RUBYGEMS VERSION: 1.1.0 (1.1.0)
  - RUBY VERSION: 1.8.6 (04/04/2008 patchlevel 111) [i686-apple-darwin9.2.2]
  - INSTALLATION DIRECTORY: /usr/local/lib/rubinius/lib/rbx/gems/1.8.6
  - RUBY EXECUTABLE: /usr/local/lib/rubinius/bin/rbx
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86-unknown
  - GEM PATHS:
     - /usr/local/lib/rubinius/lib/rbx/gems/1.8.6
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
     - :sources => ["http://gems.rubyforge.org", "http://gems.rubyonrails.org"]
  - REMOTE SOURCES:
     - http://gems.rubyforge.org
     - http://gems.rubyonrails.org

entrepreneurship - fail again, again, and rise

Posted by chetan
on Wednesday, March 19

Tool to derive near-to-real project estimate

Posted by chetan
on Monday, December 03
We have been really keen to implement EBS, in its full scope, at Synerzip couple of months ago and started developing an internal application (ofcourse in Rubyonrails) where

a. Each and every employee views his/her pending tasks
b. Adds daily time booking against these tasks. Each task is divided into different categories such as testing, documentation etc

This gives team/project lead an idea on who worked on what for how long; on daily basis.



Estimates Based System at Synerzip

Posted by chetan
on Friday, November 30
At Synerzip we have been using EBS to calculate near-to-real estimates for newer projects. How we do it is -

1) each and every task (small to big, direct to indirect) on a project is given a rough time estimate. If this project resembles to any previous project we have done before and shares 60-70% of tasks then we use near-to-real estimates (for tasks) derived from previous project.
2) Suppose, we want to derive near-to-real estimates for a new project which doesn't resemble to any older one.
  a) ask developer to give each task, he/she is working on, a rough estimate
  b) make developer re-enter the actual time on the task he/she has worked for
  c) make developer to add reasons of the actual vs estimated varies @ 20%

This process gives us a) near-to-real estimates so that we can quote real delivery dates b) gives us productivity stats for developers c) etc

Erlang's classic video

Posted by chetan
on Friday, November 23
Declarative real time programming in erlang

in love with erlang

Posted by chetan
on Friday, November 09

Erlang structs, Ruby structs

Posted by chetan
on Friday, November 09

Tuple is Hash

What hash is to ruby, tuple is to erlang
rcolors = {{:color=>"white", :hexcode=>"ffffff"}, 
           {:color=>"black", :hexcode=>"000000"}}
ecolors = {colors,
                  {white, ffffff},
                  {black, 000000}}.

List is Array

What array is to ruby, list is to erlang
rmix = %w(apple orange banana)
emix = [1+7,hello,2-2,{cost, apple, 30-20},3].

what about writing a comic on ruby

Posted by chetan
on Thursday, November 08

render layout inside other layout - DRY, Rails

Posted by chetan
on Saturday, October 27
put this code block inside your application_helper.rb

  def inside_layout(layout, &block)    
     layout = layout.include?('/') ? layout : "layouts/#{layout}"    
     @template.instance_variable_set("@content_for_layout", capture(&block))    
     concat(@template.render(:file => layout, :user_full_path => true), block.binding)    
   end
Now, use this method in layout, which you want to render in suppose 'application' layout

  <% inside_layout 'application' do %>
    your code
  <% end %>

How to add primary_key (mysql+rails) on table which already has content

Posted by chetan
on Monday, October 22
You have a legacy database in which one table doesn't have primary_key defined. Now, activerecord needs a primary_key to run queries on this table. What do we do?

Create a migration and execute following SQL query

   execute "ALTER TABLE table_name 
            DROP COLUMN to_be_primary_key, 
            ADD COLUMN to_be_primary_key BIGINT(20) AUTO_INCREMENT NOT NULL FIRST,
            ADD PRIMARY KEY(to_be_primary_key);"