February 28, 2010
I found a digital copy of Williard C. Brinton’s 1939 book “Graphic Presentation” via twitter and as I read through the book, it amazed me how little our data visualization techniques have evolved since Brinton wrote the book 70+ years ago. What was even more fascinating was this quote from the preface to the book by Henry D. Hubbard who worked for the U.S, National Bureau of Standards …
“There is a magic in graphs. The profile of a curve reveals in a flash a whole situation —the life history of an epidemic, a panic, or an era of prosperity. The curve informs the mind, awakens the imagination, convinces.”
– Henry D. Hubbard
These words so aptly describe the power of visualizing data.
Here are some interesting snapshots from the book, which I highly recommend checking out …





January 24, 2010
I had the opportunity to present a 4.5 hr lecture on Building Rich Internet Applications at ACM’s Compute 2010 today. We started out by defining what an RIA is and exploring the various RIA platforms available, we then further explored the Flash Platform in more detail, wrote some experimental code to understand the internals of Flash Player, looked at Flex 4 and its various new features and also spent some time understanding the Flex Component Lifecycle
Here’s the slide deck from beginning of the lecture which tries to define what an RIA is and explores the architecture a typical RIA platform …
December 3, 2009
Along with the Custom Components in Flex 4 presentation I shared yesterday, I also gave a 15 minute lightening talk at Adobe DevSummit on Keyboard Productivity in Flash Builder, this was just a quick show and tell where I walked people through various ways of what Jeff Atwood calls Going Commando … read more
December 1, 2009
I gave a presentation on Custom Components in Flex 4 at Adobe Devsummit last week in Chennai and today in Hyderabad, here’s the slidedeck where we create an Imperial StormTrooper component
November 28, 2009
I’ve been learning Erlang for the past few weeks and loving the simplicity and beauty of the language. As part of a discussion at SAP TechEd, last week, I ended up creating a simple, rather rudimentary prototype of a realtime messaging server that enables collaborative user interfaces where multiple users can simultaneously work with the same interface …
Here’s a video of the code in action …
As you watch the above video, note as I drag a rectangle in any one Flash application, its sends AMF encoded binary messages to the server and the server multicasts these messages to other connected clients and those clients update in almost realtime. While in the example above all the application instances are running on the same system, they could just as easily be running on different systems and still communicate via the server.
Here the code for the Erlang server …
0001 -module(server).
0002 -export([start/1,stop/0]).
0003
0004 -define(TCP_OPTIONS,[binary,
0005 {packet, 0},
0006 {active, false},
0007 {reuseaddr, true}]).
0008
0009 start(Port) ->
0010 Pid = spawn(fun() -> manage([]) end),
0011 register(client_manager, Pid),
0012 {ok, Socket} = gen_tcp:listen(Port, ?TCP_OPTIONS),
0013 accept(Socket).
0014
0015 stop() -> todo.
0016
0017 accept(Socket) ->
0018 {ok, NewSocket} = gen_tcp:accept(Socket),
0019 spawn(fun() -> recieve(NewSocket) end),
0020 client_manager ! {connected, NewSocket},
0021 accept(Socket).
0022
0023 recieve(Socket) ->
0024 case gen_tcp:recv(Socket, 0) of
0025 {ok, Data} ->
0026 client_manager ! {multicast,Socket,Data},
0027 recieve(Socket);
0028 {error, closed} ->
0029 client_manager ! {disconnect, Socket}
0030 end.
0031
0032 manage(Sockets) ->
0033 receive
0034 {connected, Socket} ->
0035 NewSockets = [Socket | Sockets];
0036 {disconnected, Socket} ->
0037 NewSockets = lists:delete(Socket, Sockets);
0038 {multicast,Socket, Data} ->
0039 multicast(Socket, Sockets, Data),
0040 NewSockets = Sockets
0041 end,
0042 manage(NewSockets).
0043
0044 multicast(FromSocket, ToSockets, Data) ->
0045 SendData = fun(Socket) -> gen_tcp:send(Socket, Data) end,
0046 Sockets = [ S || S <- ToSockets, S /= FromSocket],
0047 lists:foreach(SendData, Sockets).