High Performance Computing at ACM

Anyone can build a fast CPU. The trick is to build a fast system.  
~ Seymour Cray

Cray-1 at the Swiss Federal Institute of Technology.

The Chicago chapter of the Association for Computing Machinery (Chicago ACM) hosted a lecture titled Supercomputing and You yesterday evening. The talk was delivered by Sharan Kalwani of Fermilab. Kalwani’s background blends mechanical engineering and computer science with decades of high performance computing experience.

10x => High Performance Computing

Kalwani began his talk by drawing a distinction between supercomputing and high performance computing (HPC). Supercomputing is the buzzword that everyone knows, but the word implies that the designers are focused only on improving CPU performance. Such narrow focus could cause us to ignore important subsystems. For example, if engineers focus strictly on CPU performance, applications that are CPU-bound will quickly encounter I/O bottlenecks. High performance computing takes the entire system into account: CPU, I/O, cache, memory… anything that can influence performance.

Continue reading →

Homebrew, Ruby, and Git

I encountered some interesting behavior between Homebrew and Ruby this afternoon. I can describe what happened, but I don’t yet understand why. Perhaps another member of the dev community can shed some light.

Upgrading to Git 1.8.5

Earlier today I learned that Git 1.8.5 was available. So I decided to upgrade. Since I use Homebrew for package management, it was time for $ brew doctor and $ brew update as well.

$ brew doctor
Error: Homebrew doesn't know what compiler versions ship with your version
of Xcode (5.0.2). Please `brew update` and if that doesn't help, file
an issue with the output of `brew --config`:
  https://github.com/mxcl/homebrew/issues

Thanks!
Warning: Your Homebrew is outdated.
You haven't updated for at least 24 hours, this is a long time in brewland!
To update Homebrew, run `brew update`.

~/Code/Ruby/apps$ 

$ brew doctor has spoken. Time to update Homebrew.

Continue reading →

Amazon's Guerrilla Marketing

Last night’s episode of 60 Minutes featured an interview with Jeff Bezos, CEO of Amazon. The timing was perfect for Amazon. Black Friday was a few days ago. Cyber Monday is today. Online retailers want to be top-of-mind when people are inclined to spend money.

Amazon’s Surprise: Drones

Bezos unveiled a surprise for interviewer Charlie Rose: Amazon Prime Air, a service that will deliver most Amazon products in thirty minutes or less using a fleet of octocopter drones.

Continue reading →

Specialized Knowledge and the Courage to Execute

Teenagers are a tough audience. If you have ever spoken to a youth group, you know the challenge: Speak about something important without putting the youth to sleep. Tall order.

Three Stories

Boy Scout Troop 534 “Hey!” asked me to speak at the Troop’s annual reunion breakfast this year. I approached them with three stories centered around the theme of Specialized Knowledge and the Courage to Execute. What a boring title! But the three stories appealed to the group. Here’s a summary of the first story:

A tractor maker takes drastic action when when Enzo Ferrari (creator of the Ferrari sports car) pisses him off.

Continue reading →

awesome_print_motion for RubyMotion

The Problem

Let’s say we’re building a version of Atari’s Pong in RubyMotion. We’re debugging an issue with the paddles; they don’t line up the way we want them to. Time to examine the playing field via the RubyMotion console.

pong-rm $ rake

Mouse over the playing field and Command-click to grab the entire playing field object in the RubyMotion console. Confirm that you grabbed the object by typing self at the console prompt.

(UIView(#9d820c0, [[0.0, 0.0], ...)> self

=> UIView(#9d820c0, [[0.0, 0.0], [480.0, 320.0]]), child of UIView(#c876920)

And then, to see what objects are on the playing field, use self.subviews to show the subviews array of the current object.

(UIView(#9d820c0, [[0.0, 0.0], ...)> self.subviews
=> [UIView(#9d82430, [[357.0, 175.0], [50.0, 50.0]]), child of
UIView(#9d820c0), PaddleView(#9d82580, [[410.0, 190.0], [20.0, 100.0]]),
child of UIView(#9d820c0), PaddleView(#9d82970, [[10.0, 190.0], [20.0,
100.0]]), child of UIView(#9d820c0), ScoreLabel(#9d82a80, [[110.0, 9.0],
[20.0, 42.0]], text: "1"), child of UIView(#9d820c0),
ScoreLabel(#9d83c90, [[350.0, 9.0], [20.0, 42.0]], text: "0"), child of
UIView(#9d820c0)]
(UIView(#9d820c0, [[0.0, 0.0], ...)>

This blob of text is difficult for the human brain to parse.

Solution: awesome_print_motion

Now, let’s try it with the awesome_print_motion gem.

Continue reading →