Scrum, XP, Management and the Ethics of Agile Software Development

Agile NYC Presentation Handout

Here is a draft handout from my presentation at “Agile NYC”, Instilling Agile Values for Creativity, Self-Improvement and Organizational Change – A Manager’s Perspective.

http://idisk.mac.com/kenjudy-Public/papers/agile-values-outline.pdf

  • email
  • Print
  • Digg
  • Reddit
  • StumbleUpon
  • Google Bookmarks
  • del.icio.us
  • LinkedIn
  • Facebook
  • Twitter

I’m speaking at Agile NYC on May 12th

I have a week to prepare for this month’s APLN-NY which now goes by the zazzy name “Agile New York City”.

Last month, I was the last minute replacement for the planned speaker until the planned venue fell through. So this month, I am the scheduled speaker. This lends an air of improvisation to the event.

Right now, I am a year and a half into my current job and locked in the kind of agile adoption I’ve only presented with hindsight. Right now, I am about the day to day: acknowledging incremental progress, working through setbacks and full of my own limitations. I don’t know the ending. What I feel is an urgency to do better and be better.

So, I worked out the topic over some e-mail exchanges with Jochen Krebs. In the absence of a story to tell, it’s time to do a little a personal retrospection.

Instilling Agile Values for Creativity, Self-Improvement and Organizational Change – A Manager’s Perspective

The scale and speed of an agile adoption are external measures that don’t speak to the founding values of the practice. Collective ownership, continuous improvement and high trust are hard won, take time and discipline but lead to craftsmanship and joy. They are enabling conditions for innovation and beneficial change.

I will retrospect on my contributions both positive and negative towards cultivating these values in two teams. The first was a practice that matured over four years, led to a new mission for the team and direct collaboration with the founder and CEO. The second, is a new team finding its way at the end of its first year.

What will I do more off? What will I do less of? What impediments got in the way?

  • email
  • Print
  • Digg
  • Reddit
  • StumbleUpon
  • Google Bookmarks
  • del.icio.us
  • LinkedIn
  • Facebook
  • Twitter

Catastrophic system failure

Cameron Blow Out Preventer
A Cameron Blow Out Preventer (BOP) is installed at the base of the BP leased, Transocean owned Deepwater Horizon rig. An unmanageable surge of oil led to the fire that sunk the rig and ended 11 lives.

The BOP is not preventing up to 200,000 gallons/day of oil from gushing into Gulf of Mexico. At this point, no one appears to understand why.

The Blow Out Preventer is only a very visible part of an intricate human and technological system under enormous economic pressure to deliver crude oil.

If interactive complexity and tight coupling — system characteristics — inevitably will produce an accident, I believe we are justified in calling it a normal accident, or a system accident. The odd term normal accident is meant to signal that, given the system characteristics, multiple and unexpected interactions of failures are inevitable. This is an expression of an integral characteristic of the system. System accidents are uncommon, even rare; yet this is not all that reassuring if they produce catastrophes. — Normal Accidents: Living with High-Risk Technologies

  • email
  • Print
  • Digg
  • Reddit
  • StumbleUpon
  • Google Bookmarks
  • del.icio.us
  • LinkedIn
  • Facebook
  • Twitter

Technology IP Patents

Facebook patents news feeds in a social network context

The method covered in the patent includes “generating news items regarding activities associated with a user of a social network environment and attaching an informational link associated with at least one of the activities, to at least one of the news items, as well as limiting access to the news items to a predetermined set of viewers and assigning an order to the news items.” — PC World

Apple sues HTC for violations on 20 patents

Here’s the actual filing that includes the titles of each of the patents including:

  • Object oriented graphic system – granted 1995
  • List scrolling and document translation, scaling, and rotation on a touch-screen display – granted 2008
  • Object oriented event notification system with listener registration of both interests and methods – granted 2002

What kinds of Inventions can be Protected?

An invention must, in general, fulfill the following conditions to be protected by a patent. It must be of practical use; it must show an element of novelty, that is, some new characteristic which is not known in the body of existing knowledge in its technical field. This body of existing knowledge is called ” prior art“. The invention must show an inventive step which could not be deduced by a person with average knowledge of the technical field. Finally, its subject matter must be accepted as “patentable” under law. In many countries, scientific theories, mathematical methods, plant or animal varieties, discoveries of natural substances, commercial methods, or methods for medical treatment (as opposed to medical products) are generally not patentable. — World Intellectual Property Organization

  • email
  • Print
  • Digg
  • Reddit
  • StumbleUpon
  • Google Bookmarks
  • del.icio.us
  • LinkedIn
  • Facebook
  • Twitter

Apple iBooks announcement on the iPad

Apple ibooks announcement on the ipad via ZDNet

At an Apple press event, CEO Steve Jobs shows off the company’s new iBooks app. Users can now browse, read reviews, read a sample excerpt, or just buy books-and the book downloads to a virtual “book shelf.” The software has the support of five of the largest publishers, including Simon & Schuster. (from ZDNet…)

This could be a lot of fun…

  • email
  • Print
  • Digg
  • Reddit
  • StumbleUpon
  • Google Bookmarks
  • del.icio.us
  • LinkedIn
  • Facebook
  • Twitter

When the customer is not the end user

Sorry, we’re unable to load a message from our sponsors. Hulu’s advertising partners allow us to provide a free viewing experience. To ensure advertisements play properly please: Ensure minimum software and bandwidth requirements are met. Confirm all ad-blocking software has been fully disabled. If you continue to experience issues, please email us at support@hulu.com so we can help diagnose the problem.
  • email
  • Print
  • Digg
  • Reddit
  • StumbleUpon
  • Google Bookmarks
  • del.icio.us
  • LinkedIn
  • Facebook
  • Twitter

Consume a feed from a site that doesn’t syndicate using Yahoo Pipes

clownmommy screenshotIt’s surprising how hard it is to subscribe to sites intent on driving traffic to their main page, particularly if you want a subset of content by author or topic.

My wife writes for the nycmoms blog. She wanted to show a list of her recent blogs on her personal blog.

Nycmoms exposes a single feed aggregating recent posts across all authors.

Create a feed

My first iteration was to filter this feed through Yahoo Pipes. Pipes provides a graphical interface for chaining rules for manipulating web content and exposing it in a feed.

I used the “fetch feed” module pointed to the recent posts feed, connected it to the filter module set to only permit items where the author.name contained my wife’s handle.

This produced a correct result. However, only one or two of my wife’s posts are in the “recent posts” feed at any given time.

For the next iteration I found an alternative source outside the blog itself. Being a Yahoo tool, pipes provides a Yahoo search module. So, I searched for the phrase “Posted by KathieH” restricted to the site, nycmomsblog.com.

This produced more but less precise results. It includes additional pages such as my wife’s bio and sorted by relevance not post date.

I used the sort module on the item.updatedon field in the rss feed.

Next I used the filter module to exclude anything that was not an actual post identified by the term: “NYC Moms: KathieH” and piped out to rss.

Then I used the RSS widget in wordpress to expose this feed on my wife’s blog. Done!

Yahoo Pipes Screen Shot

Consume the feed

Except, my wife’s blog began suffering from the dreaded “Fatal Error: Allowed Memory Size” error in the simplepie library used by the RSS widget.

Well documented on the web, this is caused by my service provider’s decision to restrict accounts to 32MB of memory for PHP script execution. This and the 50MB-200MB storage limits were reasonable when I first signed up with my ISP ten years ago but is about as appropriate as using a 80286 processor now.

I decided to switch from server side processing to client side.

Luckily, Yahoo Pipes exposes feeds in the JSONP format. JSON is easily parsed by Javascript in the browser. JSONP is an established workaround (i.e. hack) that allows the client to make requests to third party URL’s without triggering the cross site security restrictions built into current browsers. It simply wraps the data response in a prefix that the browser parses as a function (allowed) as opposed to pure data (not allowed).

WordPress already uses the jQuery library which is well documented by examples on how to request, parse and render a feed.

I used the getJSON function to retrieve and parse the feed. It is exposed as a nested array containing at the top level, key/value pairs associated with the entire feed and an array of items containing the actual posts.

I loop through the value.items format them into HTML and append them into a div with the id nycmoms_posts. Probably overkill given how fast this all works but I display a loading indicator which I fade out when the loop is complete (from Kyle Meyer).

<div id=”nycmoms”>
<h2>Kathie on <a href=”http://www.nycmomsblog.com/kathieh/”>nycmomsblog.com</a></h2>
<div id=”nycmoms_loading” >…</div>
<ul id=”nycmoms_posts” />
</div>

<style>
#nycmoms { width:250px;min-height:125px;}
#nycmoms_loading { position:absolute;top:0;left:0;width:100%;height:100px;padding:100px 0 0 125px;}
#nycmoms .description, #nycmoms .postdate { font-size:small;}
</style>
<script src=”wp-includes/js/jquery/jquery.js?ver=1.3.2″></script>
<script>

var descriptionPattern = /^(.*) … Posted by Kathie H. on (\w+) (\d+), (\d+) .*$/g

window.onload = function() {

jQuery.getJSON(“http://pipes.yahoo.com/pipes/pipe.run?_id=8a8edd5b1e5181a001892cee910c11fc&_render=json&_callback=?”,
function(data) {
jQuery.each(data.value.items, function(i, post) {
jQuery(“#nycmoms_posts”).append(
‘<li><a href=”‘ + post.link +’”>’ + formatTitle(post.title) + “</a>”
+ “<!– “+formatDescription(post.description)+”–>”
+ “</li>”
) , jQuery(‘#nycmoms_loading’).fadeOut(500);
});
});

}

function formatDescription(description)
{
return description.replace(descriptionPattern, ‘<span=”description>”$1 … </span><span id=”postdate”>posted $2 $3, $4</span>’);
}
function formatTitle(title)
{
return title.replace(/^NYC Moms: /, ”);
}

</script>

  • email
  • Print
  • Digg
  • Reddit
  • StumbleUpon
  • Google Bookmarks
  • del.icio.us
  • LinkedIn
  • Facebook
  • Twitter

FIRST LEGO League Robotics in Brooklyn

2010 FIRST LEGO League Qualifier Brooklyn
FIRST LEGO League (FLL) Robotics Tournament, Brooklyn Borough Qualifier.

FLL is a global program created to get children excited about science and technology. A hands-on program for ages 9 to 16 (9 to 14 in the U.S. and Canada), FLL uses Challenges based on real world scientific problems to engage children in research, problem solving, and engineering. The cornerstone of the program is its Core Values, which emphasize friendly sportsmanship, learning, and community involvement. (more…)

  • email
  • Print
  • Digg
  • Reddit
  • StumbleUpon
  • Google Bookmarks
  • del.icio.us
  • LinkedIn
  • Facebook
  • Twitter

Nine software development aphorisms (that are sometimes true)

  • Beneficial change results from cycles of learning, doing and self-reflection.
  • Success derives from delivering small things of value regularly and often.
  • A discreet piece of work is either done or it is not done.
  • Better to risk a bad decision than make no decision at all.
  • The wisest decision is made just before it can be most efficiently acted upon and no earlier.
  • Most features will receive little or no use. 60% of what you want is better than 100%.
  • Plans document one scenario that will not happen and describe some other application than the one that was built.
  • On time and on budget are not synonyms for success.
  • In human endeavor, every enlightening truth contains a lie. The road to hell is paved with…
  • email
  • Print
  • Digg
  • Reddit
  • StumbleUpon
  • Google Bookmarks
  • del.icio.us
  • LinkedIn
  • Facebook
  • Twitter

How to make wordpress sidebars only appear on certain pages for search engine optimization

I was reading the recommendations in yoast.com’s post on wordpress seo.

Do you really need to link out to all your buddies in your blogroll site wide? Or is it perhaps wiser to just do that on your front page?

I want to link out on my homepage but I don’t need my sidebar to extend two screens below the content on my individual post pages.

So, it appears desirable to have elements of the sidebar (e.g. the blogroll and external social networking arcana) only appear on the homepage of my blog.

Thanks to some sample code from wpcandy.com, this was trivially easy to implement.

I modified the functions.php in my theme to register three sidebars. I called them Top Right Sidebar, Front Page Sidebar, and Bottom Right Sidebar.


if ( function_exists('register_sidebar') )
register_sidebar(array(
'name' => 'Top Right Sidebar',
'before_widget' => '', // Removes <li>
'after_widget' => '', // Removes </li>
'before_title' => '<h2>',
'after_title' => '</h2>',
));

if ( function_exists('register_sidebar') )
register_sidebar(array(
'name' => 'Front Page Sidebar',
'before_widget' => '', // Removes <li>
'after_widget' => '', // Removes </li>
'before_title' => '<h2>',
'after_title' => '</h2>',
));

if ( function_exists('register_sidebar') )
register_sidebar(array(
'name' => 'Bottom Right Sidebar',
'before_widget' => '', // Removes <li>
'after_widget' => '', // Removes </li>
'before_title' => '<h2>',
'after_title' => '</h2>',
));

Then I modified my sidebar.php to render those three sidebars if the dynamic_sidebar function exists also making the Front Page Sidebar conditional on is_front_page().

<?php
if ( function_exists('dynamic_sidebar') && dynamic_sidebar('Top Right Sidebar') ) : else :
?>
//default markup for the top sidebar goes here
<?php endif; ?>
//renders only if the current page is the front page, i.e. is_front_page()
<?php if ( function_exists('dynamic_sidebar') &&
is_front_page() && dynamic_sidebar('Front Page Sidebar') ) {} ?>
<?php
if ( function_exists('dynamic_sidebar') && dynamic_sidebar('Bottom Right Sidebar') ) : else :
?>
//default markup for the bottom sidebar goes here
<?php endif; ?>

Wordpress Widget Admin PageIn my widgets admin I now have three sidebars listed:

  • They are defined in my theme’s functions.php.
  • They render stacked one on top of the other based on the markup in sidebar.php.
  • I can populate them in the widget admin.
  • The middle bar only appears on the homepage.
  • email
  • Print
  • Digg
  • Reddit
  • StumbleUpon
  • Google Bookmarks
  • del.icio.us
  • LinkedIn
  • Facebook
  • Twitter
ken h. judyExecutive manager, software developer, father and husband trying to do more good than harm.
Agile is about the material and human good we create when we respect our co-workers, tell truth to our employers, strive to improve, and care for the people affected by the software we help build.
CSPIEEE CSDP

Papers

Presentations

 

Site menu:


Meta

Creative Commons License
This work is licensed under a Creative Commons Attribution - Noncommercial - Share Alike 3.0 United States License.
Copyright © 2006-2010
Ken H. Judy.
This is a personal weblog. Views expressed are my own and not my employer.