PC vs. Mac vs. Linux for Android Development

For some reason the following instructions on how to set up a computer for Android development crack me up — they pretty much illustrate the difference between Windows, Mac and Linux for many things you’d do with a computer:

  • If you’re developing on Windows, you need to install a USB driver for adb. For an installation guide and links to OEM drivers, see the OEM USB Drivers document.  [This will all go very smoothly the first time, we promise.]
  • If you’re developing on Mac OS X, it just works. Skip this step.  [Is this why I keep seeing so many Macs at dev conferences?]
  • If you’re developing on Ubuntu Linux, you need to add a udev rules file that contains a USB configuration for each type of device you want to use for development. In the rules file, each device manufacturer is identified by a unique vendor ID, as specified by the ATTR{idVendor} property. For a list of vendor IDs, see USB Vendor IDs, below. To set up device detection on Ubuntu Linux:
    1. Log in as root and create this file: /etc/udev/rules.d/51-android.rules.  [Umm, since when do Ubuntu users memorize commands? Do we need to sudo this thang?]Use this format to add each vendor to the file:
      SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666", GROUP="plugdev"In this example, the vendor ID is for HTC. The MODE assignment specifies read/write permissions, and GROUPdefines which Unix group owns the device node.  [But what if I don’t have an HTC device… oh wait, here’s help…]Note: The rule syntax may vary slightly depending on your environment. Consult the udev documentation for your system as needed. For an overview of rule syntax, see this guide to writing udev rules.
    2. Now execute:
      chmod a+r /etc/udev/rules.d/51-android.rules

[That’s for each device, people!]



graphics, process, ui, Uncategorized, web design

On Mockups & Prototypes

It is generally a good idea to show your client what an app or site will look like before you actually build the thing.

And one typically does that through the use of mockups or prototypes.

Mockups vs. Prototypes

I think of mockups as the simplest possible sketches, while prototypes fill in many of the details (colors, logos, fonts, etc.).

Both represent a balancing act — They need to be polished enough to convey your ideas to clients, but you don’t want to spend a lot of time making them.

There are tons of ways to make them — pencil & paper, Balsamiq, etc.

How I Do It

I have a habit of skimming over the mockup stage and just making prototypes — For anything more polished than a line-drawn sketch, it’s usually faster for me to code the HTML/CSS, render it in a browser, and then save a screen shot than to monkey with PhotoShop, etc. Plus, a lot of that code can be reused as the project goes forward.

But this skipping-the-early-mockup-stage approach usually assumes that I have a good idea of a way forward — what if I want to present several different ideas for a project?

Rapid Prototyping

My Stanford – Coursera MOOC course on Human-Computer Interaction has me thinking more about rapid prototyping. In this course, our professor Scott Klemmer makes a strong, research-backed case that it is better to develop multiple ideas in parallel. There are many reasons for this — the designer/developer doesn’t get “married” to any one design (“separating ego from artifact”), and having multiple ideas allows for better group dynamics as these projects go forward. (The real mind-blowing stuff from Professor Klemmer is that the mockups don’t matter nearly as much as the FEEDBACK that you get from your users.)

Get Your Free Browser Line Drawing Here!

So in order to produce more ideas more quickly, I’m back to sketching…. I need some structure for this, so I produced my own little line-drawn template of a browser window:

Browser Template for Mockups


(Note that the file is in .zip format b/c WP doesn’t like .SVG for security reasons.)

(And, yes. Yes, I am a fan of Firefox. Why do you ask?)

Now I can print out a handful of these and sketch designs very quickly.

The next stage of my experiment will be to edit this SVG template into an actual prototype (I hesitate to do this, because I still think it would be quicker to do via HTML/CSS.)


mobile, Uncategorized, web development

All I Got Was This Lousy T-Shirt!

This weekend I participated in the official Mobile Developer Week.

All I got was this lousy T-shirt:

Official Salesforce Mobile Developer Week T-shirt Official Salesforce Mobile Developer Week T-shirt

OK I did get some good learning as Salesforce developers from Raleigh to Charlotte were introduced to Salesforce’s new mobile tools. We also hacked out a simple mobile-cloud app.

OK, so the shirt’s not that lousy — the shirt is American Apparel 100% cotton, with some spiffy multi-color screen-printed graphics — And I didn’t find a single louse on it. Plus, they gave us some pretty good chow from O. Henry Hotel‘s catering department.

But the key take-aways for me were meeting some very talented developers and learning more useful stuff about cloud & mobile… I’m grateful to SFDC and the organizers for putting on a very useful workshop.

coding, process, web development

Adzerk Rebuilt Its Ad Server with Node.js

It’s always fun to visit the Triangle and see what the cool kids are working on…

Why Node?

I went to Adzerk in Durham yesterday to see how their team re-built its ad server with node.js, the exciting new server-side JavaScript technology.

So what does an ad server do? It serves ads. (You’re welcome.) For example, say you visit — Adzerk’s ad server will determine which ads you see on the sidebar. Someone visiting the site from Austin, Texas on a Sunday afternoon using Chrome would see a different ad than someone in Australia.

Obviously, speed is a priority, and Adzerk’s ad server has been processing 10,000 – 16,000 requests per second. There is no time for database calls, so they use a ginormous JSON blob.

No database
There is no database

So Node.js is ideally suited for this kind of thing — responding to a ton of requests very quickly. Nate Kohari of Adzerk explained that it would be less useful for web apps that required a lot of intense processing of each request.

While I love seeing how other folks build these kinds of cutting-edge web apps, I told my CIO that hanging out with the node.js folks made me feel like I had rented a programmer costume from the Halloween store or something.


management, process

got Stoos?

If you find yourself thinking about how and why organizations work the way they do, check out the Stoos movement.

Last week I had the opportunity to participate in a session facilitated by one of the original birthers of the Stoos movement, Catherine Louis. [Stoos is named after a Swiss village where 21 big thinkers met to work out a better way for organizations to function. (“Stoos” is pronounced — scht-oooh-sss – well, that’s how I pronounce it).]

Photo of the Actual Research Triangle Where Stoos Was Studied
Shhhh. Students of Stoos Are Studying.

The Stoos founders wanted to spark a revolution in the way organizations were led and managed, as described by Steve Denning. According to their Communiqué, organizations should become

learning networks of individuals creating value . . . [T]he role of leaders should include the stewardship of the living rather than the management of the machine.

Stoos Exercises
One of the Group Exercises Exploring Stoos Principles

Although Stoos is heavily influenced by Agile/Scrum types like Catherine Louis, it is a “movement of movements,” and not limited to I.T.

The presentation was hosted by the Agile Leadership Network (Raleigh/Durham Area Chapter) and included a presentation and exercises to learn and apply Stoos principles.

Further Reading

For an overview, see Steve Denning’s article in

Catherine Louis has shared an in-depth overview of Stoos via SlideShare

Stoos Network Website

The Communiqué

Stoos Network on LinkedIn


coding, mobile, process, ui

RGreenway: Raleigh’s Greenway App

Picture this – you’ve wasted spent another weekend coding with precious few hours of daylight left to claim any outdoor recreation before the weekly grind. You’ve got cabin fever & need to get out for a nice walk/hike in the Great Outdoors. You need to find a public park, locate a parking spot, get a trail map, and check the weather forecast.

If you’re in Raleigh, there is indeed an app for that.

It’s called RGreenway, and its developer, Eric Majewicz, was kind enough to demo it for TriDroid last week.

Eric Majewicz demos the RGreenway app.
Eric Majewicz demos the RGreenway app (for Android).

Eric went over a lot of the challenges in building this app, from working with various APIs (e.g., MapQuest and iSpeech) to wrangling the geographic data for the trail maps (provided by the City of Raleigh, North Carolina, as part of an open data initiative).

RGreenway Screen Cap (Android)
RGreenway Screen Cap (Android)

His presentation was especially interesting, though, for its description of “soft” considerations beyond heads-down coding, such as building a team with a diverse skill set and gathering requirements from key stakeholders (a/k/a “users”). Taking this kind of care produced high-quality UI and UX — the ultimate measure of an app people will actually use and enjoy.

web design

Have I Found My Palette?

One day I’ll do a proper* post on how to pick a palette, but for now I just need to vent think outloud.

After several weeks of strategic napping careful thought, I think I have a palette for this portfolio site of mine.


Palette for eidc3, version 4
Palette for eidc3, version 4

So How Did This Palette Come About?

For giggles In order to align with the contemporary Zeitgest on color theory, I started by researching for this year’s cool colors. Inevitably, that lead me to the official Pantone Color of the Year: Emerald.

So Why Do I Give a Crap HootSuite Hoot About Pantone?

The PANTONE® name is known worldwide as the standard language for color communication from designer to manufacturer to retailer to customer. OK, so the folks at Team Pantone seem to know what they’re talking about.  According to them, “Emerald is the new black” or something like that… I’ll humor them by choosing Emerald — hex code #009872 — as the basis of my new palette. What next?

Kuler’s color tools have some interesting controls — It can generate an entire five-color*** theme from a base color.

Emerald Palette Analogous Rule
Emerald Palette Analogous Rule

OK this would be fantastic if my client were**** Sea World, but it’s not — it’s me.

I looked at some of the other Kuler defaults — Monochrome — all green….

Kuler Emerald Palette Mono
Kuler Emerald Palette Mono

… Triad***** — very interesting, but a bit too garish:

Kuler Emerald Palette Triad
Kuler Emerald Palette Triad

At this point it’s like mixing paints. The fuscia color was pretty interesting, but I thought it would be more powerful if I amped it up to make it brighter. I’m using it sparingly, like a spice — only for hovering over links & whatnot. Deepened the forest green… Also, I reduced the vomit factor on the ocre by greatly reducing the saturation. Finally, the brown was just too strong — I knocked the saturation, etc. down on it and — voila! — a new palette for eidc3******.

*Yeah, I speak in British-isms:

** I knew my five years of French language study would prove useful one day.

*** It’s implied that all my palettes have black and white included, so I guess that’s seven colors.

****I think a post on the subjunctive mood would send this blog over the top.

*****Not to be confused with the Piedmont Triad — Greensboro, High Point and Winston-Salem — of North Carolina.

****** “eidc3” means third version of the Edward Ingram Dot Com site, but you knew that, right?

coding, web development

Hello, World!

Is there a better first statement than “Hello, World!”?

It carries the same powerful message as “Greetings, Planet! I’m here. Deal with it!” in a compact, pithy package.

Many programming students wrote “Hello World” as their first output.  (The original such use is widely attributed to Brian Kernighan of Bell Labs.)

Ways to Say It

The syntax required to produce “Hello World!” gives you a flavor of the language.

In Java one would type the following:

class HelloWorldApp {
    public static void main(String[] args) {
        System.out.println("Hello World!");

In JavaScript, one would code the following:

document.write('Hello, World!');

A PHP programmer’s first line is typically something like this:

echo "Hello, world!";

This syntax hints that it’s a lot easier to get up and running in JavaScript or PHP than in Java (The further implications of that suggest a subject for another day).

It’s fairly easy to get started with WordPress — the platform does the actual coding for you.

Ways to Say It, Part 2

But what is in between the quotes?  Doesn’t that say something about the programmer’s (human) language?

Shouldn’t there be a comma in “Hello World”?  In English, commas are used to set off words of direct address, and you’re directly addressing the World.  Speaking of which, “World” should be capitalized – you’re not addressing any world, you’re addressing THE World — by name!  And an exclamation point, for that matter — First impressions count – don’t you want to be seen as enthusiastic about your very first output!

So, “Hello to you, World — hello!”