Time to move out of the browser

Some thoughts on the browser and  the OS: I believe that its is time to move applications out of the browser. There are too many things that we do inside our web browser, that we could do otherwise easier, better, and at less CPU load and network traffic.

The mobile devices show us the way to go: There are little apps for everything. With the App store for MAC OS, Apple also brings this concept to the desktop and laptop (Note, that Linux essentially had an App store since the first days: apt, yast, yum, and whatever they are called).

To me, the core benefit of these App concept is that I get a little application that is tailored to the goals of the application. Hence, it does not have to deal with the limitations of the browser in terms of languages, html, java script, ajax, flash, lack offline support, and until recently the lack of right clicks. It is just so nice to have a couple of little windows (standalone): one for email, one for notes (I love Evernote), one for Blog writing (such as Windows Live Writer).

In Google Chrome and especially Chrome OS we see Google addressing some of the issues by deeply integrating the OS and the browser. However, stuff still seems to be bound to the browser (and html etc.). Now, I know that html forms a great platform abstraction layer (you can view it essentially on all systems, throw in a mobile site of your stuff and it can be conveniently viewed on smartphones, too) and also forms a second “narrow waist” above IP (there is a HotNets paper on this). However, all this loading, rendering, scripting, is just too inefficient (sure, Ajax etc. help you with it, but still, this is quite a beast).

So, what does this mean for the browser and the OS. From my point of view, the OS (or services on top it), need to provide two features: (1) a Just In Time Compiler (a nice JIT compiler, best with Hotspot support) and (2) a html renderer. Both shall be common services shared across multiple active applications. The Compiler shall handle the efficient execution of all the scripted high level languages we are using today: JavaScript, Python, Flash (and all other Adobe stuff), etc.. Additionally, it can deal wit the byte code of Java, C# (and .Net in general), and all the other stuff. LLVM, .Net, and the new Java core show that this can be done nicely. The apps may use html inside for visualization where appropriate (see Evernote etc.). Hence, the html renderer will parse their html as well as normal web browsing sessions.

I believe that it is important to make both the renderer and the JIT essential services of an OS. Using java shows how heavyweight it is to startup a such a compiler just for a single little application. Similar effects can be noticed when starting up all the different browser you have installed (especially, as many of them are not only html renderer but also JIT compilers for JavaScripte etc.). Furthermore, all this sandboxing and protection that modern browser do, they often tend to double functionality that is provided by the OS anyway.

What does this mean for the OS: looking at the JIT aspects maybe it is time to make Singularity (One of my favorite papers – or better series of papers) or Java OS reality. From the html renderer perspective, I believe chrome OS is on a good may, they just have to hop more on the App concept and leave the browser behind.

Flying with Swiss / Changing in Zurich

Commonly, I use London, Amsterdam, or Frankfurt as hub when flying to the US. This time I was booked on Swiss and changed planes in Zurich (Stockholm-> Zurich –> San Francisco). It was my first time connecting in Zurich and I have to admit that I was a bit nervous: I was scheduled for to have only one hour to change planes in Zurich. Based on my experience from major hubs I was not expecting that I could make it on time to my flight to the US.

And then the plane even was delayed 10 minutes when we arrived in Zurich…

But, somehow, everything went smooth: short queues, quick but precise security checks, and I nicely boarded 15 minutes before takeoff (what seems to be normal in Zurich). That is nice! Service is great with Swiss as always, just the screens are not really not good (at least mine).

So, I finally found some time to watch the “Social Network” Movie. Now, I like it, but they really make him look like an idiot. I am not sure if he deserves this.

P.S. Matt Welsh: I do not like your the way they dressed you in the movie. And I hope that you have had a couple of more people in your class, at least in the undergrad ones.

TinyOS and Cooja

A little HowTo on running TinyOS applications in the Cooja emulation / simulation environment.

  1. Cooja is included in the Contiki CVS Git. Hence, make sure you have a recent cvs checkout git clone / checkout / branch /… of Contiki on your system. See http://www.sics.se/contiki/download.html for installation instructions.
    2011-03-27: update: contiki is now on Git.
  2. Compile your tinyos application with “make telosb”
  3. In your Contiki installation, go to tools/cooja/ and run “ant”. This requires you to have java and ant installed. After compilation it will greet you with an empty simulation environment.
    cooja1
  4. Hit File –> New Simulation to configure your simulation run.
    cooja2
  5. Press create and you will see your initial setup.
    cooja3
  6. Now it is time to add some sensor nodes. Hit mote types –> create mote type –> sky mote type and select the image (main.exe) of your tinyos application by hitting browse.
    cooja4
    cooja5
  7. Hit open and create and next specify the number of sensor nodes you need with that application image. You can add other application by repeating the steps 6 and 7. Hit create and add to make the sensor nodes appear.
    cooja6cooja7
  8. Play with select visualizer skins to customize the sensor visualizations. I prefer mote ids, leds, and radio traffic.
    cooja8
  9. Activate the radio logger (Plugins –> radio logger) and place all windows conveniently on the screen.
    cooja9
  10. Press start to see the action. Check the timeline to see packets sent and received and also the Leds. Check the loggers to see radio packets and serial communication.
    cooja10
  11. Cooja has many other features such as serial sockets, debugging, etc. I will leave it to you to explore them. Please keep in mind that some functionality in Cooja is specific for Contiki and will not work (or only partially) with TinyOS.

Funny bug in TinyOS sequence numbers

RandomC (in lib) and UniqueSendC (in chips/cc2420/unique) are both wired the MainC.SoftwareInit. On my system it seems that that UniqueSendC is initialized first and hence without a seeded random number generator. As a result, all nodes have the same initial DSN. This leads to funny effects when nodes start to transmit simultaneously, as 802.15.4 ACKs are bound to the DSN only.

Contacting tinyos-devel on this, Phil proposed the following fix: “The trivial change is to have init() post a task that initializes the sequence number”. Now, this is really a nice and simple fix (and I tried it: it works).

SigComm Summary

As usually at SigComm, all papers where really good. It was hard to pick my three favorite ones, here are the ones I have chosen today (Tomorrow this might look different):

  1. Efficient Error Estimating Coding: Feasibility and Applications (BEST PAPER): “Without actually correcting the errors in the packet, EEC enables the receiver to estimate the fraction of corrupted bits in the packet, which is perhaps the most important meta-information of a partial
    packet.” The paper shows how this information can be used for video streaming etc. where it is not so important that all bits are received correctly. Hence, EEC is somewhere between ECC (error correction codes) and CRCs on the other hand.
  2. SourceSync: A Distributed Wireless Architecture for Exploiting Sender Diversity: “SourceSync enables concurrent senders to synchronize their transmissions to symbol boundaries, and cooperate to forward packets at higher data rates than they could have achieved by transmitting separately. The paper shows that SourceSync improves the performance of opportunistic routing protocols.” Ok, this is cool: in classic opportunistic networks we exploited receiver diversity, now we do the same with the senders. I am wondering if this would also work for Wireless Sensor Networks. However, the tight synchronization requirements (down to the symbol level) seem to make it at least challenging.
  3. Understanding Block-level Address Usage in the Visible Internet: “We have little information about the edge of the network. Decentralized management, firewalls, and sensitivity to probing prevent easy answers and make measurement difficult. Building on frequent ICMP probing of 1% of the Internet address space, we develop clustering and analysis methods to estimate how Internet addresses are used.” This paper gives interesting insight in the edge, i.e., end hosts, of the Internet. I like this paper for a special reason: all measurements they do is to ping 1% of the Internet addresses. From this simple information they then smartly draw their conclusions. 

3nd Session of Green Networking WS

1. Breathe to Stay Cool: Adjusting Cell Sizes to Reduce Energy Consumption: Adapt cell coverage (and even big others bigger and turn off some) according to network load to make cellular networks more energy efficient. Interesting, this seems to align well with work going on at Ericsson and probably others.

2. Reducing energy consumption in IPTV networks by selective pre-joining of channels: How to safe energy in IPTV networks, but results are not really promising. But a very nice talk, as always from Jon Crowcroft.

3. Energy Proportionality of an Enterprise Network: Build power models for your network infrastructure and use SNMP to measure the current configurations and operation modes (traffic rates etc.) to estimate the overall power consumption. Use this information to optimize your network.

2nd Session of Green Networking WS

1. Greening Backbone Networks: Reducing Energy Consumption by Shutting Off Cables in Bundled Links: Energy consumption off routers seems to depend on whether the link is on or off and not depend on the actual load. Hence, you should turn off links to safe energy and to keep the others well loaded.

2. How Internet Concepts and Technologies Can Help Green and Smarten the Electrical Grid: How Grids can be be made green by learning from the Internet. Very interesting talk. Current problems in the grid: storage, over provisioning, loss in distribution (lines, transformation). However, the grid of tomorrow looks different, it will change: people start producing energy, too (wind, solar) and hence to not only consume (bidirectional energy flow), store energy, and collect energy information on energy usage at high detail (smart meters). This causes funny problems: with solar cells and wind mills in each garden we have millions of not really predictable sources. This results in a complex distribution / backhaul of two way flows: energy sinks now become a source, too. Furthermore, wind and sun are strong were people and industry are typically not located: in the desert, at the sea.
The talk suggest to use Internet techniques such as Peer-To-Peer etc. to solve grid problems and identifies interesting similarities between power grids and the Internet. For example, they have similar problems / challenges: heterogeneous, critical to society, ossified. Furthermore, they share some similarities: Simple API (simple plug vs. simple protocol known as IP) … but also have nice difference as electrons do not have headers and are not routed in a “packet” based fashion.  Also, storage of energy if much more difficult than storage of data. For more, please read the paper, this talk is too interesting to type and listen.

3.How Green is IP-Telephony? Compare P2P relaying to a centralized relaying. But the interesting question was left open (future work) compare to classic PSTN network.

4. Shipping to Streaming: Is this shift green? Interesting talk, but not really surprising: When you do your data center right, streaming is more energy efficient.

1st Session of Green Networking WS

1. Running Servers around Zero Degrees: Can this work? Or more general: at what temperature should computers be run so that energy cost of cooling etc. and the cost of failure are fair.
Nice words from the talk: What is computer science? CS looks at the question at what can be automated. Or more precisely asking what can be automated efficiently. Maybe we should now ask, what can be automated sustainable…

2. NapSAC: Design and Implementation of a Power-Proportional Web Cluster. Paper shows power proportional web cluster. Basically, it adds atom based machines to the web server front ends for low loads. Each CPU class and machine type has a different operating range where it handles a good number of request at low joules per response. Combine Atom and server class machines to serve Wikipedia loads etc. by doing some cool software load balancing.

3. SpinThrift: Saving Energy in Viral Workloads: SpinThrift: in social/viral  networks people often look at a fraction (for example seconds 45 to 55) of a video that friends/others consider funny. This paper helps to make this more scalable

The talks for “energy aware routing” and the one on compression were cancelled. Talk 3 of this session was scheduled in session 3.