Google Static Maps API – Google Code

The Google Static Maps API lets you embed a Google Maps image on your webpage without requiring JavaScript or any dynamic page loading. The Google Static Map service creates your map based on URL parameters sent through a standard HTTP request and returns the map as an image you can display on your web page.

Me likey, nice way to quickly embed a map into your web app without any javascript or API calls, just a simple IMG tag.

Posted via email from Sijin Joseph

Google Chrome – Extensions run in separate processes too

At some level I knew that extensions for Google Chrome ran in separate processes too, but I never really gave it a lot of thought till I was in process explorer today and saw a bunch of chrome.exe processes taking up memory, a little more investigation showed that it was all the extensions that I was using that were causing the multiple processes running even for one open tab. I am going to cull the extensions today to the bare minimum because Chrome is running for me almost 100% of the time and I cannot have nice-to-have extensions taking up the memory.

Posted via email from Sijin Joseph

Keyboard shortcut for Sniping Tool

Windows Vista introduced the “Sniping Tool” which removed the need for me to install a third-party screen capture tool (Gadwin PrintScreen was the one that I was using). However I never really thought about the fact that I had no keyboard shortcut for this and was doing Win + “Snip…” to launch it for so long.

So today I finally stopped myself and googled for an answer which turned out to be surprisingly easy. Right –click on the Sniping Tool shortcut in the Start Menu and assign a keyboard shortcut. I assigned Ctrl + Alt + P to this and works like a charm.

Posted via email from Sijin Joseph

ZeroMQ: Modern & Fast Networking Stack – igvita.com

Berkeley Sockets (BSD) are the de facto API for all network communication. With roots from the early 1980′s, it is the original implementation of the TCP/IP suite, and arguably one of the most widely supported and critical components of any operating system today. BSD sockets that most of us are familiar with are peer-to-peer connections, which require explicit setup, teardown, choice of transport (TCP, UDP), error handling, and so on. And once you solve all of the above, then you are into the world of application protocols (ex: HTTP), which require additional framing, buffering and processing logic. In other words, it is no wonder that a high-performance network application is anything but trivial to write.

Wouldn’t it be nice if we could abstract some of the low-level details of different socket types, connection handling, framing, or even routing? This is exactly where the ZeroMQ (ØMQ/ZMQ) networking library comes in: “it gives you sockets that carry whole messages across various transports like inproc, IPC, TCP, and multicast; you can connect sockets N-to-N with patterns like fanout, pubsub, task distribution, and request-reply”. That’s a lot buzzwords, so lets dissect some of these concepts in more detail.

Well written post about ZeroMQ. Lead to some interesting links about RabbitMQ, ActiveMQ the AMQ protocol, ICE (Internet Communications Engine) from ZeroC.

Posted via email from Sijin Joseph

Scott Adams Blog: The Illusion of Winning 08/30/2010

Let’s say that you and I decide to play pool. We agree to play eight-ball, best of five games. Our perception is that what follows is a contest to see who will do something called winning.

But I don’t see it that way. I always imagine the outcome of eight-ball to be predetermined, to about 95% certainty, based on who has practiced that specific skill the most over his lifetime. The remaining 5% is mostly luck, and playing a best of five series eliminates most of the luck too.

I found this really insightful. It seems obvious when you read it but for some reason it doesn’t seem to occur naturally to me.

Posted via email from Sijin Joseph

High Scalability – High Scalability – Pomegranate – Storing Billions and Billions of Tiny Little Files

Pomegranate is a novel distributed file system built over distributed tabular storage that acts an awful lot like a NoSQL system. It’s targeted at increasing the performance of tiny object access in order to support applications like online photo and micro-blog services, which require high concurrency, high throughput, and low latency. Their tests seem to indicate it works:

We have demonstrate that file system over tabular storage performs well for highly concurrent access. In our test cluster, we observed linearly increased more than 100,000 aggregate read and write requests served per second (RPS). 

Rather than sitting atop the file system like almost every other K-V store, Pomegranate is baked into file system. The idea is that the file system API is common to every platform so it wouldn’t require a separate API to use. Every application could use it out of the box.

The features of Pomegranate are:

  • It handles billions of small files efficiently, even in one directory;
  • It provide separate and scalable caching layer, which can be snapshot-able;
  • The storage layer uses log structured store to absorb small file writes to utilize the disk bandwidth;
  • Build a global namespace for both small files and large files;
  • Columnar storage to exploit temporal and spatial locality;
  • Distributed extendible hash to index metadata;
  • Snapshot-able and reconfigurable caching to increase parallelism and tolerant failures;
  • Pomegranate should be the first file system that is built over tabular storage, and the building experience should be worthy for file system community. 

Very cool technology. This reminded me of a distributed filesystem Google Tech Talk (http://www.youtube.com/watch?v=3xKZ4KGkQY8) on Wuala (http://www.wuala.com/) that I found fascinating for all the little problems they had to overcome to make this work.

Posted via email from Sijin Joseph

Summary of use cases for non-relational storage

To understand why NoSQL is important to you as an app developer, let’s consider the use cases for some of these features:

  • Frequently-written, rarely read statistical data (for example, a web hit counter) should use an in-memory key/value store like Redis, or an update-in-place document store like MongoDB.
  • Big Data (like weather stats or business analytics) will work best in a freeform, distributed db system like Hadoop.
  • Binary assets (such as MP3s and PDFs) find a good home in a datastore that can serve directly to the user’s browser, like Amazon S3.
  • Transient data (like web sessions, locks, or short-term stats) should be kept in a transient datastore like Memcache. (Traditionally we haven’t grouped memcached into the database family, but NoSQL has broadened our thinking on this subject.)
  • If you need to be able to replicate your data set to multiple locations (such as syncing a music database between a web app and a mobile device), you’ll want the replication features of CouchDB.
  • High availability apps, where minimizing downtime is critical, will find great utility in the automatically clustered, redundant setup of datastores like Casandra and Riak.

Despite all the use cases described above, there will always be a place for the highly normalized, transactional, ad-hoc-query capabilities of SQL databases. We’re adding new tools to our toolbox, not removing old ones.

Nice summary on the Heroku blog about use cases for non-relational storage services.

Posted via email from Sijin Joseph