Microsoft Rides the Android Bandwagon

January 12th, 2012

Most people probably don’t know it but Microsoft is getting a cut from the majority of Android smartphones according to Ars Technica:

In total, Microsoft says that more than 70 percent of all Android smartphones sold in the US are covered by a similar patent agreement.

It’s interesting that Microsoft has decided to facilitate and make money off of Android rather than oppose it in the courts tooth and nail the way Apple has been doing.

UI Design Principles

December 27th, 2011

Here’s a list of user interface design principles that I’ve developed over the years designing user interfaces:

  • Speed – do things fast; the easiest way to lose a user is to bring up a spinning hourglass. If your underlying system can’t go any faster provide feedback to the user so they know what’s happening.
  • Simplicity and minimalist design - focus on the mimimal set of UI controls needed to perform the task. Google’s main search page is a good example.
  • Economize on Text - question every piece of text on a page. Does it really need to be there? Use phrases instead of sentences where possible. If there’s too much text on the page the user won’t read it all.
  • Terminology - use the simplest and most descriptive terms that are familiar to the user. Avoid technical jargon as much as possible so that non-technical users can figure out what you mean (the technical user will figure it out either way).
  • Error Handling - when reporting errors clear language is essential; also point the user to the solution.
  • Help - display context-sensitive help when possible; should be visually appealing with straightforward descriptions.
  • Consistency - use the same controls for actions that the user takes throughout the UI. For example, adding or removing an item from a list.
  • Icons & Graphics - use sharp icons and appealing graphics; use tooltips to explain what icons do if there is no accompanying text.
  • Breadcrumb Trails - if your site has depth in terms of navigation use a bread-crumb trail or some other mechanism to show the user how to get back where they started.
  • Expect User Mistakes - design every interface assuming the user will enter the wrong values or do the exact opposite of what you intend. Don’t punish the user for doing something you think is dumb. Don’t assume they have as much background knowledge of the domain as you or many others do.

Tablet Apps Coming of Age

October 4th, 2011

Adobe Touch AppsThe depth and breadth of software available for tablet devices continues to amaze. It seems destined to grow by leaps and bounds in the years to come. I ran across this announcement on the Adobe web site:

Design, edit, and elegantly present  your work using six new Adobe® Touch Apps designed for your tablet.¹ Whether you use a stylus or just your fingertip, intuitive touchscreen features provide easy, precise control for a variety of creative tasks. Transfer files through Adobe Creative Cloud for refinement in Adobe Creative Suite® software — or to view, access, and share from almost anywhere.

Congratulations to Abobe’s development team. These apps look pretty cool and I’m sure they were a ton of work.

You have to wonder if Adobe will eventually port the full functionality of Photoshop to tablet environments. I personally can’t imagine how the user interface would work given the limited screen space and other constraints but it may be just a matter of time.

Schema.org adds Meaning to Web Pages

June 3rd, 2011

It’s not often that you see Google, Microsoft and Yahoo! working together but it has happened with the Schema.org organization. Schema.org is a joint effort between the three search engine behemoths to create a common and structured markup schema that would help search engines understand the content that appears on web pages and improve the search results that they provide.

Schema.org is trying to solve the age-old problem of figuring out just exactly what the content of a web page is referencing. For example, if I have a header like this on a web page:

<div>
<h1>New York</h1>
</div>

is this page referring to the state of New York or the city of New York? Good question, and one that is impossible to answer just from this header tag. Here’s how Schema.org solves this search engine problem:

<div itemscope itemtype="http://schema.org/State">
<h1>New York</h1>
</div>

Now, the search engine knows that this page is referring to the state of New York. Pretty cool.

What Schema.org ensures is that all of our web pages are using a common lingua franca to explain to the world what they are about. If your objects are not covered by their core schema you can define your own custom extensions. If your custom extensions become commonly used the Schema.org Gods may decide to incorporate them into the core schema. There could be a lot of uses for this type of markup beyond search engines. It will be interesting to see what people do with it.

How Netflix Dodged the AWS Blackout

June 1st, 2011

There’s a very interesting post on the Netflix blog that explains how their architecture held up during the recent Amazon Web Services (AWS) blackout. Among the highlights that stood out for me:

One of the major design goals of the Netflix re-architecture was to move to stateless services. These services are designed such that any service instance can serve any request in a timely fashion and so if a server fails it’s not a big deal. In the failure case requests can be routed to another service instance and we can automatically spin up a new node to replace it.

Netflix systems are design to degrade gracefully. Here are the main principles they follow:

Fail Fast: Set aggressive timeouts such that failing components don’t make the entire system crawl to a halt.
Fallbacks: Each feature is designed to degrade or fall back to a lower quality representation. For example if we cannot generate personalized rows of movies for a user we will fall back to cached (stale) or un-personalized results.
Feature Removal: If a feature is non-critical then if it’s slow we may remove the feature from any given page to prevent it from impacting the member experience.

I also like their idea of a “Chaos Monkey” service that randomly kills instances and services in their system architecture. That technique should be a useful tool in the quiver of any Quality Assurance organization that is responsible for testing a multi-tier or multi-service product.

Mono for Android Released

April 6th, 2011

Novell has just announced the availability of Mono for Android. This will give C# and .NET developers a way to develop for Android platforms using their favorite languages and development and without diving into Java development. Mono for Android integrates seamlessly with Visual Studio and allows development of a common code base for applications that can run on both Android and Windows Phone 7 platforms.

There are certainly a bazillion C# and .NET developers out there so it will be interesting to see how many of them use this avenue to build native Android applications.

Effective Software Development Processes

March 17th, 2011

Lately I’ve been thinking what makes for effective software development practices lately so I thought I would summarize my ideas in a post.

Code Reviews

Code reviews are an essential aspect of any effective software development effort.  They are not only useful for identifying questionable code but they provide other team members with the opportunity to learn about areas of the system that they may not be familiar with.  Code reviews should be focused on more than just finding defects; conformance to coding standards and reliability are also critical.

Any refactoring tasks that arise during a code review can usually be handled in the next iteration.  Code reviews are also best conducted in the absence of management figures.  You know the code review process is working when you hear lots of WTFs.


Unit Tests

Unit testing should be utilized whenever possible to prove out functionality of code at the most basic level. Typically, this would mean writing individual test programs that exercise all of the public functions of a single class.  Unit tests should not have dependencies on external components such as databases or active processes.  They need to be as standalone as possible.  If necessary, employ mock objects to mimic the behavior of classes that the tested class relies upon.  If possible, develop unit tests in advance of coding as Test-Driven Development (TDD) dictates.  Unit tests should run quickly and would ideally be automatically triggered after every checkin to your source control system.

Component Tests

Component tests verify larger aspects of the system and will generally involve external components such as the network or databases. Component tests still do not run against the full system, however. For example, you could build a component test to verify the model portion of a Model-View-Controller (MVC) system. The component test would verify that calling methods on classes in the model results in specific rows being added to specific tables in the database. Again, components tests should be run after every checkin but this may not be practical if they take a while to run.

System Tests

System tests exercise the final product fully. Typically, this would involve installing the system from scratch and putting it through a battery of tests. This could be performed by dedicated QA resources or, ideally, by an automated testing tool.

Refactoring

To keep a software system from becoming brittle and unmanageable, regular refactoring is an absolute requirement. Target areas of the system that are frequently responsible for defect reports from the field. Encourage the development team to carefully design and think through refactoring efforts. The end result should almost always be smaller and faster code that will be more reliable.


Netflix Flooding your Internet

November 22nd, 2010

According to Sandvine, Netflix (NASDAQ: NFLX) traffic accounts for 20% of all downstream Internet traffic during primetime hours. Netflix also reports that its customers now watch more streaming content than DVD content. These customers watch videos on computers running Windows or Mac OSX and a variety of devices and set-top boxes such as the Nintendo Wii, TiVo, iPad, iPhone, Apple TV, and Microsoft Xbox.

There is a certain irony in Netflix’s business model in that the service it provides is carried over the infrastructure of companies like Time Warner and AT&T whose cable and DSL services provide Internet access to millions of consumers. With options like Netflix and HuluTV, how long will it be before consumers start cancelling their cable TV subscriptions altogether? I’m sure that’s already happening especially among the more technically adroit Generation Y. It will be interesting to see how the cable companies respond. It seems only a matter of time before they begin slashing the cost of their television services to keep their customers from fleeing to cheaper products from the likes of Netflix.

Skyfire brings Flash to your iPhone

November 10th, 2010

SkyFire 2.0 for the iPhone is now available in the iPhone App Store. Check out a video of how it allows you to see Flash videos on your iPhone.

For the first weekend of its availability, SkyFire is reporting over 300,000 downloads. At $2.99 a copy it’s a steal from iPhone users who have had difficulty watching Flash videos ever since Steve Jobs declared them sacrilegious.

Coming Soon: the Facebook phone?

September 20th, 2010

Tech Crunch is reporting that Facebook may be developing a Facebook mobile phone:

Facebook is building a mobile phone, says a source who has knowledge of the project. Or rather, they’re building the software for the phone and working with a third party to actually build the hardware.

This shouldn’t come as any more of a surprise than Google’s decision to develop Android and the NexusOne. Companies like Facebook and Google, who have not traditionally been mobile phone and OS developers, find themselves in a competitive quandry when it comes to future growth if they are entirely dependent on the traditional OS developers like Apple and Microsoft. It’s only natural that they should attempt to carve out segments of the market to bring more users to their online properties and hence make more money.

If Facebook does proceed with a mobile phone we would have to immediately start asking the question about where they go from there. Can Facebook Apps be far behind? How about commercializing a Facebook Database to compete with Oracle? Facebook certainly knows a lot about mass storage and speedy retrieval. What about getting into eCommerce in a big way (merging with someone like Amazon might be a wild idea).

A Facebook Phone would put the most pressure on Apple in my opinion. They would need to come up with a way to provide some Facebook-like features on the iPhone or risk being left behind by the social computing wave. Interesting times.