Last updated on November 19, 2012

How to Get Startup Ideas ~

Live in the future and build what seems interesting.

After reading Paul Graham's essay, I wholeheartedly agree with his methodology on getting startup ideas. I have been bruteforcing myself into thinking up ideas that might be great startups, but in a very undirected manner and letting my mind wander wherever it took me. It ended with mostly futile attempts. Instead, Paul recommends that one should be in the lead of some rapidly changing field and train your brain to notice things that you yourself needs. The best plan of action is to just keep a background process running, looking for things that seem to be missing.

A good way to trick yourself into noticing ideas is to work on projects that seem like they'd be cool. If you do that, you'll naturally tend to build things that are missing. It wouldn't seem as interesting to build something that already existed.

I think I'm in love with LRU ~

Dropbox's engineering blog details the theory and rational behind the caching algorithm that they've chosen for their mobile client. It's a very insightful read that compares between Most Recently Used (MRU), Least Recently Used (LRU) and Least Frequently Used (LFU).

Here's my implementation of LRU caching in Java:

public class LRUCache<K, T> {

  class Node {
    Node prev;
    Node next;
    K key;
    T data;
    public Node(K key, T data) {
      this.key = key;
      this.data = data;
    }
  }

  HashMap<K, Node> map;
  Node head;
  Node tail;
  int maxSize;

  public LRUCache(int maxSize) {
    this.maxSize = maxSize;
    head = new Node(null, null);
    tail = new Node(null, null);
    head.next = tail;
    tail.prev = head;
  }

  private void detach(Node node) {
    node.prev.next = node.next;
    node.next.prev = node.prev;
  }

  private void attach(Node head, Node node) {
    node.prev = head;
    node.next = head.next;
    node.next.prev = node;
    node.prev.next = node;
  }

  public T get(K key) {
    Node node = map.get(key);
    if (node == null)
      return null;
    if (map.size() == 1)
      return node.data;
    detach(head);
    attach(head, node);
    return node.data;
  }

  public void put(K key, T data) {
    if (maxSize <= 0)
      return;
    Node node = map.get(key);
    if (node != null) {
      // hit, refresh the data
      detach(node);
      attach(head, node);
      node.data = data;
    } else {
      // miss, create new node and adjust the size
      node = new Node(key, data);
      map.put(key, node);
      attach(head, node);
      if (map.size() > maxSize) {
        detach(tail.prev);
        map.remove(tail.prev.key);
      }
    }
  }
}

Maps - Apple and Google ~

I'm sure everyone has heard of the problems that Apple's proprietary iOS6 Maps is having. Apple has given an official statement on this:

Customers around the world are upgrading to iOS 6 with over 200 new features including Apple Maps, our first map service. We are excited to offer this service with innovative new features like Flyover, turn by turn navigation, and Siri integration. We launched this new map service knowing it is a major initiative and that we are just getting started with it. Maps is a cloud-based solution and the more people use it, the better it will get. We appreciate all of the customer feedback and are working hard to make the customer experience even better.

Mike Dolson brings up very interesting points on why Apple needs to play a lot of catch up. The most important point is that Apple's relied on quality control by algorithms and not informed human analysis.

The issue plaguing Apple Maps is not mathematics or algorithms, it is data quality and there can be little doubt about the types of errors that are plaguing the system. What is happening to Apple is that their users are measuring data quality. User’s look for familiar places they know on maps and use these as methods of orienting themselves, as well as for testing the goodness of maps.

Amazon's Play ~

John Gruber on Daring Fireball:

Apple’s goal is to sell as many iPads as it can. Amazon’s goal is to sell as many Kindle Fires as it can to a specific audience: active Amazon.com customers. And for that specific audience, it’s a very appealing proposition. The Fire makes it even easier to do things you’re already doing — reading Kindle e-books, watching movies and TV shows through your Prime membership. And the low prices speak to the heart of the Amazon.com customer base. When Bezos says he wants Amazon’s interests aligned with those of their customers, he means it.

Amazon's unique business model with Kindle Fire is not to sell Android tablets, but to sell a service that is platform independent. The Kindle Fire is just a tool for accessing these services. Today, people want services, not gadgets.

Android App - Purdue Maps

After my internship at Amazon, I became even more comfortable with Eclipse IDE and Java programming so I decided to make some Android Apps to enhance my OOP skills. Browsing through Google Play's directory of apps led to me believe there is a shortage (and a need) of a Purdue campus finder very much like the one that is available on iOS. So, I present to you Purdue Maps:

Purdue Maps Screenshot

If you're a Purdue CS student like me, you might be wondering how I've managed to create a database of campus locations as there isn't really one made available "publicly". I started my search from Purdue's campus map and wondered if the Google Maps overlay and geo-coordinates are somehow obtained from a database. I digged deeper into the website's JavaScript files using Google Chrome developer tools and I discovered this gem:

JavaScript Screenshot

Very interesting! So I navigated to that address and found myself looking at an XML file of campus locations with their abbreviations, geo-coordinates and street addresses! What comes next is rather easy, I converted the XML contents into an SQLite database and included it into my Android app to be accessed through custom search suggestion functionality. I didn't create a web service to serve the data as I didn't see the need to overcomplicate things when it is just a small database of locations. I hope you enjoy the app!