Sunday, February 24, 2013

The Scrum/Agile Methodology

What new Agile teams don’t realize, is that there are different types of Agile methodologies, the most popular one being Scrum.

The Scrum Methodology

Most teams that transition to Agile choose to start with Scrum because it is simple and allows for a lot of flexibility.

As explained on, “Scrum is unique because it introduced the idea of “empirical process control.” That is, Scrum uses the real-world progress of a project — not a best guess or uninformed forecast — to plan and schedule releases.”
What differentiates Scrum from other methodologies?

– Scrum has three roles: Product owner, team members, scrum master.

– Projects are divided into sprints, which typically last one, two or three weeks.

– At the end of each sprint, all stakeholders meet to assess the progress and plan its next steps.

– The advantage of scrum is that a project’s direction to be adjusted based on completed work, not on speculation or predictions.
The Scrum process includes the following steps:
Backlog refinement

This process allows all team members to share thoughts and concerns, and properly understand the workflow.
Sprint planning

Every iteration starts with a sprint planning meeting. The product owner holds a conversation with the team and decides which stories are highest in priority, and which ones they will tackle first. Stories are added to the sprint backlog, and the team then breaks down the stories and turn them into tasks.
Daily Scrum

The daily scrum is also known as the daily standup meeting. This serves to tighten communication and ensure that the entire team is on the same page. Each member goes through what they have done since the last standup, what they plan to work on before the next one, and outline any obstacles.
Sprint review meeting

At the end of a sprint, the team presents their work to the product owner. The product owner goes through the sprint backlog and either accepts or rejects the work. All uncompleted stories are rejected by the product owner.
Sprint retrospective meeting

Finally, after a sprint, the scrum master meets with the team for a retrospective meeting. They go over what went well, what did not, and what can be improved in the next sprint. The product owner is also present, and will listen to the team lay out the good and bad aspects of the sprint. This process allows the entire team to focus on its overall performance and identify strategies for improvement. It is crucial as the ScrumMaster can observe common impediments and work to resolve them.

ADB: All Commands and Options

ADB stands for "Android Debug Bridge". It comes with the android 2.0 sdk and can be run from the windows command prompt or a mac/linux terminal.

In order to run ADB from your machine, you will need to set up the following in your Droid "Settings".

Settings -> Application Settings -> Developement
Then check all of the boxes. Really, you only need the "USB Debugging" box checked, but I checked em all cause I'm cool like that.​

Once you have ADB and have your Droid set for developement, you can plud your Droid into your machine with the USB cable supplied with the device.

On a Mac or Linux machine, you will have to "cd" to the "Tools" directory, under where ever you put the the "android-sdk-(mac or linux)" folder.

EX. On a mac you would do the following:

CODE:cd /Users/[I]yourusername[/I]/android-sdk-mac/tools

(Its prettty much the same on a PC, but there are .bat files to run ADB for you in the "tools" folder)

Now that you can start adb here is how you can use it. I pulled the following from my terminal:

Android Debug Bridge version 1.0.25

 -d                            - directs command to the only connected USB device
                                 returns an error if more than one USB device is present.
 -e                            - directs command to the only running emulator.
                                 returns an error if more than one emulator is running.
 -s <serial number>            - directs command to the USB device or emulator with
                                 the given serial number. Overrides ANDROID_SERIAL
                                 envivornment variable.
 -p <product name or path>     - simple product name like 'sooner', or
                                 a relative/absolute path to a product
                                 out directory like 'out/target/product/sooner'.
                                 If -p is not specified, the ANDROID_PRODUCT_OUT
                                 environment variable is used, which must
                                 be an absolute path.
 devices                       - list all connected devices
 connect <host>:<port>         - connect to a device via TCP/IP 
 disconnect <host>:<port>      - disconnect from a TCP/IP device

device commands:
  adb push <local> <remote>    - copy file/dir to device
  adb pull <remote> <local>    - copy file/dir from device
  adb sync [ <directory> ]     - copy host->device only if changed
                                 (see 'adb help all')
  adb shell                    - run remote shell interactively
  adb shell <command>          - run remote shell command
  adb emu <command>            - run emulator console command
  adb logcat [ <filter-spec> ] - View device log
  adb forward <local> <remote> - forward socket connections
                                 forward specs are one of: 
                                   localabstract:<unix domain socket name>
                                   localreserved:<unix domain socket name>
                                   localfilesystem:<unix domain socket name>
                                   dev:<character device name>
                                   jdwp:<process pid> (remote only)
  adb jdwp                     - list PIDs of processes hosting a JDWP transport
  adb install [-l] [-r] <file> - push this package file to the device and install it
                                 ('-l' means forward-lock the app)
                                 ('-r' means reinstall the app, keeping its data)
  adb uninstall [-k] <package> - remove this app package from the device
                                 ('-k' means keep the data and cache directories)
  adb bugreport                - return all information from the device
                                 that should be included in a bug report.

  adb help                     - show this help message
  adb version                  - show version num

 (no option)                   - don't touch the data partition
  -w                           - wipe the data partition
  -d                           - flash the data partition

  adb wait-for-device          - block until device is online
  adb start-server             - ensure that there is a server running
  adb kill-server              - kill the server if it is running
  adb get-state                - prints: offline | bootloader | device
  adb get-serialno             - prints: <serial-number>
  adb status-window            - continuously print device status for a specified device
  adb remount                  - remounts the /system partition on the device read-write
  adb reboot [bootloader|recovery] - reboots the device, optionally into the bootloader or recovery program
  adb root                     - restarts the adbd daemon with root permissions
  adb usb                      - restarts the adbd daemon listening on USB  
  adb tcpip <port>             - restarts the adbd daemon listening on TCP on the specified port

  adb ppp <tty> [parameters]   - Run PPP over USB.
 Note: you should not automatically start a PPP connection.
 <tty> refers to the tty for PPP stream. Eg. dev:/dev/omap_csmi_tty1
 [parameters] - Eg. defaultroute debug dump local notty usepeerdns

adb sync notes: adb sync [ <directory> ]
  <localdir> can be interpreted in several ways:

  - If <directory> is not specified, both /system and /data partitions will be updated.

  - If it is "system" or "data", only the corresponding partition
    is updated.

From the above, you should be able to see that you can send adb commands from your machine to your Droid using the following:

CODE:adb -s [yourdeviceserialnumberhere] shell

The above will start an interactive shell from your machine, but running on your device. So if you "cd" to a directory, it will be on your device. Use "ls" or "ls -l" to see what is in the directory that your are currently in. NOTE: Runing the adb shell directly has gotten me nowhere as far as rooting the device, but its a good place to start learning.

Now for the fun part!! You can "pull" some data from your device using:

CODE:adb -s [yourdeviceserialnumberhere] pull /system /somedirectoryonyourmachine

This will try and write all the files and folders from the "/system" directory on your Droid, to wherever you decide you want it on you machine.

I did the "pull" on a mac and I was able to get about 140mb of the data from the following directories on my Droid:


It both as an admin and a super user on the mac and I got about the same results. My Droid was in the regular boot mode. I have not tried booting into the restore or safe modes and tried a "pull" ... yet.