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…

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>

Big things in small boxes

Two justifications I’ve seen for dismissing the relevance of computer ethics in decision making:

  • this decision is harmless,
  • this is a business decision not a technology one

Computer Ethics and Professional Responsibility
I’m reading a great collection called Computer Ethics and Professional Responsibility. In the essay Unique Ethical Problems in Information Technology Walter Maner writes:

In the discreet world of computing, there is no meaningful metric in which small change and small effects go hand in hand.” – (Dijkstra 1989. p. 1400) … the normally predictable linkage between acts and their effects is severely skewed by the infusion of computing technology.

This disconnect around human perception, size and complexity reminded me of John Maeda’s Laws of Simplicity:

Thus while [integrated circuits] are a primary driver of complexity in modern day objects, they also enable the ability to shrink a frighteningly complex machine to the size of a cute little gum-drop… There is no turning back to the age when large objects were complex and small objects were simple.

So in hard and soft technology, size is no longer a predictable measure of consequence. Small contains great expressive power.

From Bill Joy’s 2000 wired article on the threat of miniaturization, ubiquity and self-learning systems, Why the future doesn’t need us:

The cause of many such surprises seems clear: The systems involved are complex, involving interaction among and feedback between many parts. Any changes to such a system will cascade in ways that are difficult to predict; this is especially true when human actions are involved.

Not only small tools but mundane and seemingly insignificant decisions about their use can have tremendous consequences.

Should we limit our concern for consequence to harm: injury, economic loss and the like?

To think so would be to absolve most technologists of ethical considerations most of the time. But an ethical view point doesn’t limit itself to harm but considers net benefit. So this isn’t just a discussion of quality control, it’s one of maximizing value and not just to our employers, clients and ourselves but with consideration for all those who are affected by the use of our products.

But is good ethics good business?

If “good business” is maximizing return over a fixed period then that clearly is not the same as maximizing benefit to the larger society. Most would argue that there are meaningful considerations besides acquiring wealth for both an individual and an organization but I’ll leave that for now. Let me concede that in business there are winners and losers and that winners often gain at the expense of those around them.

Nonetheless, what Walter Maner, John Maeda and Bill Joy are telling us is that in a way unique to this time in history we cannot deem a thing or a thought innocuous because it is small.

To borrow from an ex-Secretary of Defense, our work is fraught with far more “known unknowns” and “unknown unknowns” and far less “known knowns” than our ape-evolved brains would have us believe.

Even out of narrow self interest we must approach decision making around technology with humility and not skip the hard work of thinking through the consequences of our actions.

  • this decision is harmless
  • this is a business decision not a technology one

Embrace such thoughts at your peril for you deny complexity that both envelops you and fits on the tip of your finger.

Yet Another Manifesto

When we set out to build consumer software, I pulled together sentiments from our CEO, lessons learned, and principles behind the Agile Manifesto into our own set of principles.

Since I’ve already received permission from my employer to publish it in a paper, Agile Practices and Innovation, I thought I’d include it here.

Oxygen Software Product Development Manifesto

Building consumer software is a joyous and daunting challenge. We, software developers, owe Oxygen and Oxygen’s customers every chance at success. We believe success springs from the following principles:

It’s all for the end user

The most important relationship is between us, the people building these tools and the women and men who are our customers. We must continually refine our products based on ever increasing knowledge of our customers.

Our highest priority is to satisfy the customer through early and continuous delivery of valuable software. — http://agilemanifesto.org/principles.html

People own their identity and information

We respect our customers. We respect their privacy. We believe people own their virtual selves.

To that end, we will never misuse data, we will always provide a way to keep personal information private, we will always give our customers a way to export their assets and remove their identity from our systems.

Each tool we build helps people do a specific thing better than anything else available

Build the best solution for a specific need felt by a broad range of women.

Build simple tools that are useful, elegant and fun and go from there

First build a specific solution and then abet our customers using that tool in ways we never imagined.

This is both a cause and a business

We must remember that this is a business proposition. As our products evolve, we need to understand the revenue models and targets. We need to help define and measure appropriate metrics. We need to do everything we can without sacrificing the other values in this manifesto to achieve the business aim of the company.

Gerry Laybourne is the product owner

If our most important relationship is with our customers, our most important collaboration is with our product owner. Gerry sets our priorities. She must embrace what we are doing. Our relationship must remain direct. The best way to convey information is face-to-face.

These tools spring first and foremost from Gerry’s imagination. Direct connection between Gerry’s vision and our team’s creative efforts leads to success.

We are inventors

We must imagine solutions outside current limitations and ask ourselves, “what of this can be done now”. We must build something never seen before that when handed to the right consumer feels inevitable and obvious.

We must engage creativity, empathy with our customers, resolute professionalism and an inspired sense of play.

If we don’t love our inventions, no one else will.

We have authority, we are responsible, we are accountable

We are a self-organizing team in the best spirit of Agility.

If we, the people doing the work, allow this project to drift from its founding principles it will fail – with consequences for all concerned. In the face of that possibility, we must have courage to speak truth to power.

Specific technologies and mediums are just tools. Get over them.

This project is about helping our customer get more out of computing and making a profit for our company. We must not let assumptions or affection for specific tools, technologies and platforms on anyone’s part distract us from our mission.

Admit failure and move on

Resources are limited. Set specific, measurable goals. Face the truth and course correct. Don’t knowingly waste time or effort. Don’t use lack of knowledge as an excuse for wasted time or effort.