February 22, 2010


Scrum Agile Software Development: Chicken And Pig Story

Scrum is an iterative incremental framework for managing complex work (such as new product development) commonly used with Agile Software Development methodology. Although the word is not an acronym, some companies implementing the process have been known to spell it with capital letters as SCRUM. Maybe because Ken Schwaber capitalized SCRUM in the title of his early papers about this methodology.

Although Scrum was intended for management of software development projects, it can be used to run software maintenance teams, or as a general project/program management approach.

A number of roles are defined in Scrum. All roles fall into two distinct groups — pigs and chickens — based on the nature of their involvement in the development process. These groups get their names from a joke about a pig and a chicken opening a restaurant

There are several variants as to how the Chicken and the Pig meet and the level of the relationship between the two.

However, in every variant, the Chicken suggests that the two involve themselves in a scheme involving ham (or bacon) and eggs (some suggest a breakfast, others suggest a restaurant). In reply, the Pig always notes that, for the Chicken, only a contribution is required (as a chicken can simply lay an egg and then resume normal activities), while for the Pig a "total commitment" (or total sacrifice) is needed (as in order to make ham or bacon, the pig must be slaughtered).

So the “pigs” are committed to building software regularly and frequently, while everyone else is a “chicken”—interested in the project but really indifferent because if it fails they’re not the pigs—that is, they weren’t the ones that committed to doing it. The needs, desires, ideas and influences of the chicken roles are taken into account, but are not in any way allowed to affect, distort or get in the way of the actual Scrum project.

“Pig” roles

The Pigs are the ones committed to the project in the Scrum process—they are the ones with “their bacon on the line” and performing the actual work of the project.

Scrum Master (or Facilitator)
Scrum is facilitated by a Scrum Master, whose primary job is to remove impediments to the ability of the team to deliver the sprint goal. The Scrum Master is not the leader of the team (as the team is self-organizing) but acts as a buffer between the team and any distracting influences. The Scrum Master ensures that the Scrum process is used as intended. The Scrum Master is the enforcer of rules. A key part of the Scrum Master’s role is to protect the team and keep them focused on the tasks in hand.

The team has the responsibility to deliver the product. A team is typically made up of 5–9 people with cross-functional skills who do the actual work (design, develop, test, technical communication, etc.).

Product Owner
The Product Owner represents the voice of the customer. He/she ensures that the Scrum Team works with the “right things” from a business perspective. The Product Owner writes customer-centric items (typically user stories), prioritizes them and then places them in the product backlog. A Product Owner can be a member of the Scrum Team but cannot be a ScrumMaster.
According to original Scrum, Product Owner is in a "pig" role. However, if the Product Owner does not have involvement regularly, he/she may be considered as a "chicken" .

“Chicken” roles

Chicken roles are not part of the actual Scrum process, but must be taken into account. They are people for whom the software is being built.

Stakeholders (customers, vendors)
These are the people who enable the project and for whom the project will produce the agreed-upon benefit[s], which justify its production. They are only directly involved in the process during the sprint reviews.

People who will set up the environment for the product development organizations.

That's all for now... I'm just sharing my readings about Scrum Agile Software Development. Most of these are taken from wikipedia while the cartoon was found in implementingscrum.com. Enjoy it.

Share This Article:

Bookmark This Article:
Feed Me Digg Technorati del.icio.us Best to Stumbleupon Reddit Blinklist Furl Spurl Yahoo Simpy

February 14, 2010


How to install notify-send in ubuntu

notify-send is a command to send desktop notifications to a notification daemon. It is included in libnotify-bin package, which is a library that sends desktop notifications to a notification daemon, as defined in the Desktop Notifications spec. These notifications can be used to inform the user about an event or display some form of information without getting in the user's way.

You can install it using Synaptic Package Manager by searching for libnotify-bin package and install it. Or you can install it via terminal using this command:

apogee@apogee-ubuntu:~$ sudo apt-get install libnotify-bin

And then, you can use the notify-send command as described in my previous post about Custom Gnome Notification for your apps. Have fun!!

Share This Article:

Bookmark This Article:
Feed Me Digg Technorati del.icio.us Best to Stumbleupon Reddit Blinklist Furl Spurl Yahoo Simpy

February 13, 2010


Custom Gnome Notification for your apps

When you run a command that would take long time to finish, you would rather do something else beside staring at the terminal to wait until it finished to do the next procedure. In my case, if I write the SD cards for my ts-7260, I would leave it and do other stuff.

Since it is easy to get distracted with so many stuff on the internet, I sometimes forget to get back to check the dd terminal. This could waste my time because the process have stopped for quite long time where I should write another card instead just right after the first card finished.

Therefore, I use notify-send from libnotify-bin package to notify me about my process while I'm free to check my mail, reading, surfing and so on. Here is the screenshot of my gnome notification when it is ready.

It can be done with one line of command like this:

notify-send -i /usr/share/icons/Human/scalable/devices/media-flash.svg \
-h int:x:$(xrandr -q|grep '*' | sed -e 's/x.*//' -e 's/\ //g') \
-h int:y:10 -u normal -t 10000 "Copy SD card from dd Image" \
"dd image to /dev/sdd finished"'!' ; mplayer /usr/share/sounds/purple/receive.wav

However, the above command is long and I wouldn't dare to type this command every time I will write new SD card. As usual, the lazy programmer would make a bash script for this repetitive task:

# default device name

# the icon

# check my command arguments
if [ $# -gt 0 ]; then

# create the message
mymsg="dd image to $mydev finished"
mytitle="Copying SD card image"

# get my resolution
myres=$(xrandr -q|grep '*' | sed -e 's/x.*//' -e 's/\ //g')

# the sound

# and the notify command
notify-send -i $sd_icon -h int:x:$myres -h int:y:10 -u normal -t 10000 "$mytitle" "$mymsg"'!' & mplayer $mysound

After copying to /usr/bin and change the mode to +x like this:

apogee-ubuntubox:$ sudo cp notifyme.sh /usr/bin/
apogee-ubuntubox:$ sudo chmod +x /usr/bin/notifyme.sh

Now, we can run the script like this:

apogee-ubuntubox:$ sudo dd if=myddimage.dd of=/dev/sdc ; notifyme.sh /dev/sdc

Therefore, when the dd process finished, the notification will pop and the sound will play. You can also download the code here: notifyme.sh

That's all for today... see you later!
...Read more

Share This Article:

Bookmark This Article:
Feed Me Digg Technorati del.icio.us Best to Stumbleupon Reddit Blinklist Furl Spurl Yahoo Simpy

February 4, 2010


Print Active Network Interface List in Linux using Python

I'm checking the replies of my previous code on Create network interfaces list using Python. E A Faisal suggestion to use /proc/net/dev is somehow seems interesting to me. Now, let's do some python code for fun before going out to lunch.

Here is my code to get the same result as my previous python code to list the network interfaces:


# read the file /proc/net/dev
f = open('/proc/net/dev','r')

# put the content to list
ifacelist = f.read().split('\n')

# close the file

# remove 2 lines header

# loop to check each line
for line in ifacelist:

ifacedata = line.replace(' ','').split(':')

# check the data have 2 elements
if len(ifacedata) == 2:

# check the interface is up (Transmit/Receive data)
if int(ifacedata[1]) > 0:

# print the interface
print ifacedata[0]

Seems like it is working on my ubuntu linux (in the office ). I believe it should possibly work on other linux without any issue with that SIOCGIFCONF and ioctl. And the code is even simpler.

That's all for now... I'm going out for lunch. Happy python coding!

Share This Article:

Bookmark This Article:
Feed Me Digg Technorati del.icio.us Best to Stumbleupon Reddit Blinklist Furl Spurl Yahoo Simpy


Create network interfaces list using Python

While checking my email this morning, I found a python question on python.my mailing list which sound like this:

Date: Wed, 3 Feb 2010 23:48:10 +0800
Message-ID: <52d26d931002030748pd2c6321p1290b1eeee703...@mail.gmail.com>
Subject: showing interfaces
From: Umarzuki Mochlis <umarz...@gmail.com>
To: pythonmy@googlegroups.com

Hi all,

I wonder how I can output network interfaces with python the same
way I can with these commands on linux

sudo ifconfig | cut -d " " -f 1 > ifconfig.txt
sed '/ *#/d; /^ *$/d' < ifconfig.txt


Umarzuki Mochlis

For those who couldn't imagine the output of those two lines command in the question, here is the explanation:
  • The first command write to 'ifconfig.txt' the name of up interfaces which comes from ifconfig output and remove other unwanted informations.
  • the second line read the 'ifconfig.txt' file, remove empty lines and print the list on the screen.
You can read the discussion thread on python.my mailing list: showing interfaces

Here is how you can create network interfaces list with python:

import array
import struct
import socket
import fcntl

BYTES = 4096 # Simply define the byte size

# get_iface_list function definition
# this function will return array of all 'up' interfaces
def get_iface_list():
# create the socket object to get the interface list
sck = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# prepare the struct variable
names = array.array('B', '\0' * BYTES)

# the trick is to get the list from ioctl
bytelen = struct.unpack('iL', fcntl.ioctl(sck.fileno(), SIOCGIFCONF, struct.pack('iL', BYTES, names.buffer_info()[0])))[0]

# convert it to string
namestr = names.tostring()

# return the interfaces as array
return [namestr[i:i+32].split('\0', 1)[0] for i in range(0, bytelen, 32)]

# now, use the function to get the 'up' interfaces array
ifaces = get_iface_list()

# well, what to do? print it out maybe...
for iface in ifaces:
print iface

This code is tested to be working in my ubuntu linux. Since I made SIOCGIFCONF ioctl number (0x8912) hardcoded, it may seems broken on other UNIX like system. However, you may modified the code to be compatible with your system when you understand it. I hope this snippet can help others too. Enjoy coding!

Share This Article:

Bookmark This Article:
Feed Me Digg Technorati del.icio.us Best to Stumbleupon Reddit Blinklist Furl Spurl Yahoo Simpy