Archive : February 2010

Storytelling in Design

bmw

Instead of a "loading" animation that we may bail out on, why not tell a story? I was impressed with this technique used by BMW.  They are running banner ads on NBC's site which hypes the upcoming Olympic events. You see a car in the banner ad, you expect to click and see more car. But you don't. Instead, a blank white screen with just a few short words pops up. But the words tell a quick paced story. phrase by phrase, of what joy is. Joy is Timeless. Joy is Freedom. Joy is Innovation. And below those words is the "loading" indicator. 10%, 20%, 32%, and so on. A nice example of storytelling used in design - if you are going to make someone wait (or have to, because you are loading a high-end car video), consider getting them engaged with a story.

http://www.bmw.com/com/en/insights/technology/joy/bmw_joy.html

Remembered: Claude Shannon

Claude Shannon

Claude Shannon

So, it's little Stevie Jobs' birthday today. Certainly he's been influential in the world of digital computing. But when folks wax on and wax off about how great some of these more recent figures in computing have been, I like to remind them of some of the all-time greats. It just so happens that that today is also the 9th anniversary of the death of Claude Shannon. Who is Claude Shannon, you ask? How soon they forget, or perhaps they never knew.

Well, in his masters thesis at MIT in 1937, he observed that you could solve Boolean algebra problems using switching and relay circuits. OK, think about what that means. Wait for it...yes, he invented the modern digital computer. In 1937. In a masters thesis.

It was all downhill from there, of course. He only founded the field of Information Theory (central to cryptography, computational linguistics, and pretty much any kind of digital information processing). Yes, the digital revolution started with him.

Oh, and he also laid out the field of computer chess in 1950, describing the different ways a computer chess program could be designed. Sixty years later, his roadmap for the field has been dead on.

So, the next time someone celebrates Stevie's birthday, let them know about Claude Elwood Shannon.

Topics:

mort_calc gem: Rails Mortgage Calculation Gem

I recently published the mort_calc gem at gemcutter.org. The code can be found at http://github.com/perry3819/mort_calc/.

The gem calculates the APR and monthly payment for a mortgage in the United States.

Calculating the monthly payment is straight forward.

monthly_payment

C = Loan amount

E = Extra costs

r = monthly interest rate = interest rate / 1200

N = amortization term in months

An iterative approach is needed to find the APR. The equation for the APR follows.
Continue reading »

Where the iPad will take over: 15 examples

There's still a lot of internet chatter about why you'd want a tablet anyway. I think there's a big space between the laptop and the iphone, and that in particular, the iPad, iPhone and iPod Touch will take over from a lot of purpose built devices that deliver specific high value functionality. Here are a few examples:

iPad standing

1. The daily commute. It's a simple matter of ergonomics here. I will use the iPad, sold with a cheap data plan when I'm sitting down on the El, rather than the iphone. Because it has a bigger screen, and it's already connected. I won't use my laptop, because it doesn't come with a data plan (or only an expensive one that I won't buy), and it's pretty uncomfortable to use in a cramped row of seats. I'll use it instead of a laptop because the form factor works much better, and because I will have bought the data plan bundled with the iPad.

2. The eBook reader. I'll use it instead of a Kindle because it will be good enough (or better), and I can do a lot more than read with it. My guess is there will be more people that read on the tablet than who buy a dedicated reader. (Just as there are more people who do photo sharing on facebook than on flickr.)

3. In the Kitchen. If I'm in a situation where a sealed, mess resistant device with a big screen is a big advantage (like a kitchen) then I will use the tablet. I will prefer it to the iPhone because it's bigger and I can look at it while I'm doing something else, and I will prefer it to a laptop because the keyboard will not get gunked up. There are already devices retailing around $300 to store and retrieve your recipes in the kitchen - an iPad with the right recipe app will run rings around that.
Continue reading »

Post-Agile in the Game Development World?

V&A Kanban December 7
Creative Commons License photo credit: Rich B-S

Gwarred Mountain over at Climax Studios has posted a very thoughtful blog post about software development methods and the appropriateness of Agile Software Development. I was ready not to like this article, what with the title and things like this:

If I have to sit through another meeting with some little "agile" toe-rag defending their train wreck of a project then I may end up forcibly ramming a kanban where the scrum does not shine.

But then I thought about all of those fresh-faced management consultants we've run into recently -- who have read a book about agile -- trying to teach us how to do it. Well, yes. I've had some uncharitable thoughts myself. Continue reading »

Topics: ,

Why Computers are (aren’t) Better Than People at Playing Chess

It is very easy to misunderstand software and it's capabilities. Although people and software often perform the same tasks, they often do so in very different ways and achieve very different results. The results software can achieve are sometimes surprising, even amazing. But what computers can do is still quite limited. Making software development decisions based on an incomplete understanding on how software works, or drawing unwarranted equivalence between humans and computers, can lead to comical or even disastrous consequences.

It is with this in mind that I wanted to revisit one of my favorite topics: chess engines -- the computer programs that play a game of chess. Chess and computers were back in the news with a mainstream article by the mother of Kris Littlejohn entitled The Role of Computers in Planning Chess Strategy. Her son, Kris, helps current US Chess Champion Hikaru Nakamura prepare his openings for torunaments and matches and he makes use of various software (chess databases and engines) for this purpose. It's a well written article and well worth a read.

I've been an avid chess player for many decades and have also written a number of chess playing programs over the years. So it really tickles me how when then world champion Gary Kasparov lost to Deep Blue in a match back in 1997, many folks predicted that chess as a human past time would die. over a decade later, the situation is even worse for the humans: the best GM's can not hope to defeat the best programs, even at material odds. Yet the game is more popular than before. Part of the reason is online play thanks to the Internet. Another reason is that these strong chess engines make for primitive coaches. So the future of chess is safe for now.

Continue reading »

Topics:

Single Purpose Devices vs. Flexible Platforms and Functional Cases

A few weeks ago, I wrote about the Skype Video Phone, part of a trend towards trading needless complexity for simplicity and ease of use. It's also on the wrong side of another trend: The trend away from single purpose mobile devices to flexible mobile platforms.

smdemyrecipe

panasonic-mca-h1-nursescanning

For a while there was a trend towards more and more purpose built digital products, from ebook readers to portable picture frames and pocket size digital cameras, all the way to to digital recipe readers ($299) and tablet pcs with tough cases, handles and barcode scanners for the medical industry.

The iPhone, the iPod Touch and the soon to be launched iPad signal a reverse of that trend. Apple has designed and built flexible platforms that combine the ease of use and simplicity that single purpose devices with the flexibility of general purpose devices, and that is proving to be a compelling value proposition.

On the iPad, for example, you can easily get as good or better a recipe reader experience as you would with the demy digital recipe reader, a better digital picture frame or slide show experience than with a digital picture frame, likely as good or better of an ebook reader experience, and likely as good or better of a bar code scanning medical tablet experience.

How is that last possible, when the iPad does not come with a bar code scanner? The solution will likely be through peripherals built into functional cases. As an example, take a look at the digital checkout devices like Apple's own EasyPay touch (used at Apple's retail stores), Verifone and Morphie - that combine a magnetic card reader, a bar code scanner and a battery in a case for an iPod touch.
Continue reading »

Tiling a 2-D Polygon using C# GDI+

Tiling a Polygon

Tiling a Polygon

One of the most challenging problems I came across working on a .NET PDF Annotator and Editor application was to tile a 2-D polygon and also accurately determine the number of tiles that fill the surface of the polygon.  The tiling part was not as much of a challenge as the counting part. The tiled polygon was to be rendered on a PDF document since the application in question is a PDF Annotating and Editing tool. We looked for anything the third party .NET PDF rendering/manipulation API that was used could provide for the tile rendering but there was nothing unfortunately.
Continue reading »

Architectural Anxiety and the Waterfall Approach

an unwitting victim...bwahahhahahaa
Creative Commons License photo credit: bark

We've discussed the benefits of Agile development before and that the iterative approach to building the architecture -- where you explore architectural issues (very few apps are completely new and unknown) a little bit through each iteration -- is an effective method for arriving at a good application architecture. What is less obvious is the psychological benefit to working in this way.

It's frankly been a while since I've participated in a large waterfall project directly (one benefit of working for a firm that does agile software product development), but I regularly talk with folks who are still in the corporate trenches doing things the old fashioned way. One thing that hasn't changed is the BIG ARCHITECTURE wrestling match up front. Management wants to know the architecture, the guys with "architect" in their job titles want to know the architecture (so they can criticize, natch), the project manager(s) want to know the architecture. How will we scale? How will we ensure security? More useless brainpower is spent on this ultimately fruitless task -- solving problems that end up being no problem at all -- than almost any other activity in the project.

Continue reading »

Unit Testing Sphinx

Sphinx (and its rails plugin thinking-sphinx) is my choice of search engine on ruby/rails project. It is powerful yet super easy to setup.

However, testing Sphinx code is not easy at first. Since Sphinx works by leverging database commit hooks, it cannot be tested within the bounds of unit testing framework that rails provides. This is understandable because, in rails testing, a transaction is started before each test that is bound to rollback after the test is finished. Since the test data is never committed, sphinx doesn't get a chance to index anything and cannot be tested.

The documentation for sphinx testing suggests using cucumber for integration testing. To me, cucumber test are still miles away from the smallest piece of sphinx code (inside Model) to be tested. So, I turned to how transactional code is tested in rails framework for some cue.

Here is what I ended up with:

 
class TransactionalUserTest < ActiveSupport::TestCase
  // any transactional test needs to have this
  self.use_transactional_fixtures = false
 
  context "with no users in database" do
    setup do
      // clear the existing data for our test - not sure if this affects other test but we use machinist instead of fixture files, so we should be good here.
      User.destroy_all
      UserProfile.destroy_all
    end
 
    context "with a few users created" do
      setup do
        @john = @david = nil
        // any data for sphinx test should be wrapped in transaction so sphinx can see these changes
        User.transaction do
          @john = User.make(:first_name => "John")
          @david = User.make(:first_name => "David")
        end
      end
      should "find user with first name john" do
        // start sphinx server
        ThinkingSphinx::Test.run do
          // give sphinx an opportunity to index newly added data (required before calling search)
          ThinkingSphinx::Test.index
          assert_equal([@john], User.search("john").collect)
          assert_equal([@david], User.search("david").collect)
          assert_equal([],User.search("cheese").collect)
        end
      end
    end
  end
end
 

Isn't it nicer to be able to test sphinx code in isolation :-)

Flashback: The iPhone and the Early Days of the Web

269/365 - why even have that deal?
Creative Commons License photo credit: B Rosen

I remember my first real grownup and serious web project outside of the university environment. It was 1994 and SSL was a novelty. People were making insane predictions that one day up to $600 million (think Dr. Evil) worth of consumer goods would be sold on the web worldwide. In 2007, just Canadian B2C sales were US$12.9 Billion.

Some folks, especially startups and smaller companies, saw the web as an opportunity to shake up the established order and establish a new sales channel or an entirely new business model. They invested what they could in building the first of what became known as e-commerce sites. Among established players, and some more conservative smaller players, there was initial hostility toward the new medium. When in 1994 I proposed to Ameritech (now part of SBC/AT&T) that they bring their lucrative print yellowpages online, I was run out of Hoffman Estates on a rail.

Continue reading »

Topics: ,

To the Moon: an iPhone with Wheels

A friend of mine from college is a physics professor who does a lot of stuff with the space station and the new Google Lunar X Prize, that awards up to $30 million for the first non-governmental organization to land a robot on the moon. He likes to get his students involved and has a gift for expressing things in terms they can immediately grasp. "The robot," he tells them, "can be small. Think of an iPhone with wheels."

When something has penetrated the collective consciousness the way the iPhone has, it changes the way we look at what is possible.

How Would Steve Jobs Pitch YOUR Product?

presentation

It's no accident that Steve Jobs is arguably the ultimate technology pitch-man. He's worked with some of the best designers, ad agencies and creative people on the planet even since the early days of Apple. But how would he pitch your idea? It's a fun question to ask and I found a book that just might have the answer. While browsing in a discount brick-and-mortar bookstore I came across "The Presentation Secrets of Steve Jobs" by Carmine Gallo of Businessweek.com.  There was one copy on the shelf and it immediately caught my attention. As I flipped through the pages, I was impressed with the many "how-to" pieces of wisdom. For example, you'll see how answering four simple questions can yield a powerful elevator speech. You'll see how to use high impact words, tight headlines and key numbers to get your point across in a way that seems effortless. While I think the book is a "must have on your desk" for product managers and marketers, I also think it's a great reference for designers to think about what makes a design more marketable and enticing to the customer.

iPad: How big is the space between laptops and iPhones?

Laptops are a strange, inefficient tradeoff between an iPhone’s portability and a desktop’s capabilities. They don’t satisfy either need extremely well, but they’re much closer to desktops than they are to iPhones. The usefulness and portability gap between a laptop and an iPhone is staggeringly vast ... Ergonomics are awful unless you effectively turn them into desktops with stands and external peripherals. But they can do nearly any computing task that desktops can do, and they’re able to replace desktops for many people.

- Marco Arment, “The Tablet” and gadget portability theory"

ipad_accessories_6

One of Steve Jobs slides during the iPad announcement last week showed an iPhone, a macbook, and a space in between with a question mark. Was there room for a third device between a laptop and an iPhone?

If it's a small space, suitable for a few niche products like the Kindle, then the iPad hullabaloo is much ado about nothing. If the space is big, and eats into laptop market share, then this becomes a major turning point in how we interact with computers.

Apple is betting that the space is big, and that the future of computing will look a lot more like the iPhone than the Laptop. Let's think about what that means: If Apple's tablet, like it's smartphone, and it's music player before that, becomes the preferred and dominant device of it's kind, and that device starts displacing the preferred computing device of the current time (the laptop, which in turn replace the previous preferred computing device (the desktop computer), a market for which they currently only have 8.8% (although 91% of laptops above $1000) then they win really big.

pink-shirt-laptop

Why would you replace your laptop (with it's bigger screen and it's moderately comfortable keyboard) with a tablet?

Both are portable, but a tablet is more portable, and more usable while on the go.

To realistically use a laptop, you need a large surface, enough room in front of you, and preferably a seat. Otherwise, you look like this.

A seat on the subway or in economy class on a plane is too cramped and uncomfortable for most people. You need at least some time.

For the times when you need a keyboard - when you're writing an email, or a document, or a presentation, or developing software - you can set your tablet up in a work environment, just like you do with your laptop - docked, or at least connected to a large display, a wireless keyboard and a wireless mouse. You can take the last two with you when you go home, or to a coffee shop, or your in laws house.

Those rare situations where you really need that full keyboard in that cramped setting without a work surface, you can either make do with the onscreen keyboard, or find yourself a flat work surface when you need a laptop.

airplane6

Of course some people will not be able to do without even in those rare circumstances, like this fellow on a plane, or like those who cannot do without their blackberry, and those people will not switch (at least not right away.) The same way that many people bought desktops for a long time, and then eventually switched to laptops when the computing power difference and cost difference no longer outweighed the convenience factor.

But for the rest of the world (and I'm betting that's a much larger audience,) having a multifunction, always connected, portable computing device that I can use like a desktop or in truly portable fashion will be clearly preferable.

At that point, you've introduced a serious disruption to the personal computing market. People who don't buy your laptops but buy your iphones and ipods, now will have another reason to buy a device from you, that's a replacement for their current laptop (likely not a mac, but a windows box.) If that happens, Apple will have won not just the current battle, but the war with Microsoft and IBM that they fought and lost 40 years ago. If it happens, that's the business story of our time.

Topics: , , ,

A Slight Correction to using PureMVC with Vaadin

A while back I looked at the Vaadin Plugin and tried to make it work with the Multiton PureMVC. Back then I proposed the following code:

 
public static ApplicationFacade getInstance() {
   if (instance == null) {
     // nuke the multiton so we can do the grails recompile
     if (ApplicationFacade.hasCore(CORE)) {
       ApplicationFacade.removeCore(CORE);
     }
     instance = new ApplicationFacade(CORE);
   }
   return instance;
 }
 

A little more noodling and you'll see that doesn't work. In a multi-session environment, each user will need his own core. Furthermore, inactive cores should be harvested, otherwise we will have a memory leak.
Continue reading »

Topics: , ,

Launch: Pathfinder Newsletter

    Get a monthly update on best practices for delivering successful software.

    Subscribe via email


    Subscribe via RSS      RSS icon

Topics

Search

WordPress

Comments about this site: info@pathf.com