Sunday, August 26, 2012

Fantastic America's Cup World Series in San Francisco - The best sailors, the fastest boats...

Fantastic America's Cup world series regatta this week in the San Francisco Bay. The best sailors, the fastest boats, in the best place in the world for sailing.

That was just a warm-up to test the waters before the America's Cup finals on the real deal 72 foot boats next summer... but what a warm-up!!!

 It's all on YouTube here:

and much more, including replays of this week's races there.

Next event: same place, same boats, Oct 02-07.

Too bad my sailor son was not here to see this as he's on vacation in France, but hey, you can't have everything... Enjoy your vacation :)

Sail fun, Sail fast!

Saturday, August 11, 2012

Autoconf and Automake on Mac OS X Mountain Lion

It's summer and I've been thinking about blogging more regularly again. I'm usually too busy to find time to blog, so I'm going to try a shorter format this time: sort of middle ground between a tweet and a full blown blog.

So, here's my first entry in that shorter format.

If you're upgrading to Mac OS X Mountain Lion and Xcode 4.4.1, you'll find that Xcode does not include anymore the GNU Autoconf, Automake and Libtool build tools used by most open source projects to generate makefiles and dynamic libraries... That's not so great :(

I wanted to share what I did to build them myself from source, as it could help others too:

export build=~/devtools # or wherever you'd like to build
mkdir -p $build

cd $build
curl -OL
tar xzf autoconf-2.68.tar.gz
cd autoconf-2.68
./configure --prefix=$build/autotools-bin
make install
export PATH=$PATH:$build/autotools-bin/bin

cd $build
curl -OL
tar xzf automake-1.11.tar.gz
cd automake-1.11
./configure --prefix=$build/autotools-bin
make install

cd $build
curl -OL
tar xzf libtool-2.4.tar.gz
cd libtool-2.4
./configure --prefix=$build/autotools-bin
make install

Notice how I configured to install in --prefix=$build/autotools-bin? You can also omit that to install the tools in your system dirs if you want. I usually install what I build under my own user dir to avoid polluting the system dirs, but it's really your choice.

Hope this helps

Monday, May 7, 2012

New Exciting Human Computer Interfaces from Disney and Microsoft

Each year the ACM SIGCHI Conference on Human Factors in Computing Systems unveils exciting advances in Human-Computer Interfaces.

This year Disney Research will present its new Touché interface. Touché turns everyday objects into multi-touch, gesture-recognizing interfaces. It only requires minimal instrumentation of the objects, with just a single small electrode.

Here's a demo:

Technical details are available in their research paper: Touché - Enhancing Touch Interaction on Humans, Screens, Liquids, and Everyday Objects.

Microsoft Research will present SoundWave. SoundWave is a Kinect-like system that uses your computer’s built-in microphone and speakers to provide object detection and sense gestures using the Doppler effect, similar to how a submarine uses a sonar.

Here's a demo:

Technical details are available in their research paper: SoundWave - Using the Doppler Effect to Sense Gestures.

Exciting times! I wonder what it would take to get these new technologies working on everybody's smartphone...

Monday, April 23, 2012

Comparing Broadband Internet Service Providers

It looks like ATT is starting to offer Fiber Optics Internet in my area. I've been pretty happy with Comcast Cable Internet but I thought I'd check it out anyway.

There are many unreliable and biased ISP comparisons out there but I came across an interesting report from the Federal Communication Commission: "Measuring Broadband America - A Report on Consumer Wireline Broadband Performance in the U.S.".

The report is available there. It compares Internet Service Providers using various criterias, including actual vs advertised performance. If you're shopping for a Broadband ISP, take a look and draw your own conclusions...

For now I'm staying with Comcast Cable Internet. I will check again when/if Verizon FiOS ever becomes available here.

Monday, April 9, 2012

The Instagram Architecture - How they're scaling their data storage layer

A brief overview of the Instagram Architecture (just acquired by Facebook for $1B) on the High Scalability blog, based on an earlier post on the Instagram Engineering blog.

It's interesting to see how they're scaling their data storage layer using 12 PostgreSQL databases in a master-replica setup with streaming replication, PostgreSQL schemas for sharding, Skype's PgBouncer to pool database connections, and vmtouch to load disk pages in memory.

Tuesday, March 6, 2012

Pictures From Last Weekend

After my last blog post a few folks asked me what else I'm doing on weekends besides watching software geek videos :) Yeah I do that, and I also hack on some open source projects to free my mind from the week's routine, but I just wanted to reassure everybody that I also have a real life, with some pictures from last weekend.

Saturday - Squaw Valley
I had initially planned some ski races (slalom on Saturday, GS on Sunday) but preferred to do a family ski day instead. We had a great time! good snow, amazing weather and stunning views of Lake Tahoe as usual.

After last week's snowfall, Squaw was a little crowded, and I'm glad we drove up early in the morning so we didn't have to park like this:

Sunday morning - Breakfast in the backyard with a friend
Deers come to our backyard all the time as some of it is wild and not all fenced. Before moving here I never imagined that Silicon Valley was in the country!

Sunday afternoon - Pacific Ocean, San Gregorio State Beach
Picnic time, relaxing and enjoying the view. Isn't that beautiful? Where else in the world can you ski on Saturday and go to the beach on Sunday?

Simple vs Easy, or How Going Easy Creates Complexity

Last weekend I watched an entertaining presentation of the key differences between Simple and Easy from Rich Hickey (the inventor of Clojure).

I had already watched it last year, and found it enlightening again! In a nutshell, Rich Hickey argues that:

Simple is the opposite of complex and means one fold, one braid, one pure concept or dimension not polluted or interleaved with unnecessary aspects. Simple is an objective measurable quality of the end product, but simplicity, purity and design elegance are hard to achieve.

Easy is the opposite of hard and means near your capabilities, familiar, and requiring no effort or reflection. Easiness is relative and depends on who's building the software, as something easy for you may not be easy for me.

Unfortunately, many software projects choose to go Easy (cheap) vs Simple (hard and requiring to think harder up front). These projects create incidental complexity -- or just a mess -- by using tools and constructs that are not right for the job and drag unnecessary constraints and dimensions into the end product.

Sounds familiar?

One of the things I love with open source development is that you can't choose the easy route. If you sacrifice simplicity by choosing the easy route in the open, in public, there'll be no place to hide it. Be assured that someone will get on your project mailing list and comment on the mess you've created or, even better, he'll make the effort to think harder and show the world a simpler alternative to what you've done.

Could it be one of the reasons why open source wins?

Monday, February 27, 2012

Happy 17th Birthday Apache - Version 2.4 Ideal For Cloud Environments

The Apache Software Foundation celebrates the 17th Anniversary of the Apache HTTP Server with the release of version 2.4.

The Apache HTTP server is is the world's most popular Web Server, powering nearly 400 million Web sites across the globe.

I played around with version 2.4 over the weekend. It brings numerous enhancements, making Apache ideally suited for cloud environments, including:
  • lower resource utilization, better concurrency and async I/O support, bringing performance on par, or better, than pure event-driven Web servers like Nginx;
  • dynamic reverse proxy configuration;
  • more granular timeout and rate/resource limiting capability;
  • more finely-tuned caching support, tailored for high traffic servers and proxies.

More details on the Apache Software Foundation blog and a list of all the new features in the Apache HTTP server documentation.

Thursday, February 16, 2012

Tumblr Architecture - 15 Billion Page Views A Month

Interesting entry on the High Scalability blog describing the Tumblr architecture and how they're scaling to 15 billion pages a month.

A few points caught my eye:
  • Confirmation that MySQL scales just fine with sharding. More details on their sharding implementation here.
    With all the buzz around NoSQL I think people are underestimating good old SQL databases like MySQL or PostgreSQL for example.
  • Confirmation that Redis is just great.
  • Assigning users to Cells helps handle the combinatorial explosion of users x followers x posts.
    To draw an analogy with Ethernet networking, this reminds me of how you can segment a LAN using network switches to reduce bandwidth usage and congestion (as some of the traffic will stay within each cell / segment).

Tuesday, January 31, 2012

We Really Don't Know How To Compute!

One of my new year resolutions was to blog more. It's not working out yet, as I've been too busy the last few weeks. It's already Jan 31 and this is only my second blog entry this year.

I recently came across a fascinating presentation from Gerald Jay Sussman, co-author of the famous MIT computer science text book 'Structure and Interpretation of Computer Programs' and co-inventor of the Scheme programming language.

He claims that we really don't know how to compute, compares computer programs (constrained to rigid designs and difficult to adjust to a new situation) to living organisms (which can be reconfigured to implement new ways to solve a problem) and makes a convincing argument that we need drastically different programming models to approach that level of flexibility.

He then introduces the Propagator Programming Model (work supported in part by the MIT Mind Machine project). A propagator program is built as a network connecting cells and propagators. Cells collect and accumulate information. Propagators are autonomous machines which continuously examine some cells, perform computations on the information from these cells and add the results to other cells.

A propagator program is analogous to an electrical wiring diagram. To extend it and add a new way to approach a problem, you simply add and connect new propagators. Your cells now collect alternate results from different propagators, and you can then decide to merge redundant results, combine partial results, or even exclude contradictory results when some propagators do not work well in a new situation.

This is similar to how human beings resolve problems. We try several approaches, weigh and combine their results, then wire up our brain with the approaches that work well for the next time we face a similar situation.

I couldn't help but see some relation between that propagator model and my recent interests in computer programming models.

Massively Parallel programming
A propagator program is naturally parallel. Each propagator is continually watching its neighbor cells and computing new results as their values change, autonomously and in parallel with other parts of the program.

Functional programming
A propagator is like a pure function that computes results only from its inputs. A result can also be wrapped in a monad to provide information about its premises, relevance or correctness (useful to pick or combine partial results as they accumulate in a cell for example).

Web Component Assembly
The wiring diagram describing a propagator program seems to map really well to an SCA (Service Component Architecture) component assembly wiring diagram. A propagator could easily be realized as a stateless Web component providing a computation service. A cell could be realized as a Web resource accumulating and storing data.

The propagator model also seems like a great candidate to represent programming expressions as networks of connected components, a subject I researched a bit last year, but which would be too long to describe here... perhaps in another blog post.

Anyway, that got me thinking about a fun weekend project. If I find the time, I'd like to do a little hacking and experiment with implementing a propagator program as an assembly of SCA components wired together.

How about defining two new cell and propagator SCA component types, perhaps with REST interfaces to allow propagator programs to live on the Web and play with data from some useful REST services out there?

Wouldn't that be fun?

Wednesday, January 4, 2012

Happy New Year 2012!

Happy New Year 2012 from the Delfino Family!

January 2nd, a great day in Squaw Valley: shopping for the girls, free skiing for my son, slalom gate training for me.

Just got back to work today after a long vacation. Still trying to figure out the year 2012 resolutions.

We wish you all a happy new year 2012!

The postings on this site are my own and don’t necessarily represent positions, strategies or opinions of my employer IBM.