technology Pearls

Facebook is a Ponzi Scheme

Now that you know what a Ponzi scheme is, I will tell you how and why Facebook is like a Ponzi Scheme. The argument is similar to how Paul Graham describes that Yahoo was a ponzi scheme in 1998.

Facebook posts huge revenues. In fact, recent reports are that Facebook is very profitable. This boosts both their respect in the world and their valuation. However, these returns, while real, are unsustainable. They exist and are sustained in the same manner that Ponzi schemes are. Facebook is a Ponzi Scheme.

Have you ever bought a Facebook ad? I have. I have talked to many, many people who have. We have spent hundreds, many have spent thousands or even more, experimenting with Facebook ads. They are worthless. Nobody ever looks at them, and nobody ever clicks on them. I just talked to someone who was trying to promote a book. He found it cost him over $100 in ads to sell one book. Moreover, as you increase your ad spending, people get used to the ads and just ignore them. So, your already low click-through rate plummets even further.

People go to Facebook to interact with their friends. It is fundamentally different from the ad platform that is Google. People go to Google to find something they need, possibly ready to buy, which a good percentage of the time can in fact be solved by someone's ad. Facebook ads, on the other hand, annoy users. They yield no real value, and thus no profits.

But, then, how is Facebook so profitable? Are they lying? No. They are growing. More and more people sign up to Facebook, and more and more businesses hear about how many people are on Facebook. It seems like a huge opportunity. TV shows and award-winning movies are made about Facebook.

Because of Facebook's presumed success, many small, medium, and large businesses individually and in turn experiment with Facebook ads. They spend hundreds or thousands or more on Facebook ads. At the end of the first run, they see bad ROIs. They tweak the ads and spend more money and try again. Nothing. So they stop, understanding that Facebook ads are worthless. Almost everyone I've talked to who has actually bought Facebook ads knows this. But, not everyone has bought Facebook ads yet. There are still more and more new businesses finding out about Facebook ads. As they grow, even more businesses give their money to experiment in destined failure.

Eventually, though, and this might take a long time, but it is finite, everyone will have tried Facebook ads and know that they are useless. Eventually, after 10 million businesses have invested $1000 each, and Facebook has earned $10 billion in revenue in total, then they will have run out of new customers and their revenue will dry up. A useless product is never sustainable. I wish I could short Facebook.

Now, it is possible that some extremely niche businesses have found limited utility from ads (for example, BustedTees and social games may be the lucky few). It has been shown, however, that some of the biggest advertisers are huge, outright scams and others have deceptive practices at best. Also, Mark Zuckerberg might have a fit of brilliance and then announce a revolutionary ad platform that somehow actually works on social networks. My guess is not. They haven't yet. What is clear from everyone I know who has advertised on Facebook is that it was a waste of money. Facebook promises big returns on ad spending, but delivers nothing. Yet, their value and growth continues because they can use that money to grow their user-base more and assert profitability (in this sense it's not quite entirely a ponzi scheme, but there is no closer idea). It's possible that they do not even realize that they are like a Ponzi scheme.

That's right, they may not even realize that their ad platform is completely useless because they always get new clients signing up and giving up their offering to the god of web 2.0 hype. They may be blind, as I used to be. They may be truly surprised when the supply of suckers runs dry.

More likely, in the end, they will get teenagers to pay a monthly fee to host all of their party photos. Of course, then the next VC-funded Facebook (just as MySpace killed Friendster, and Facebook killed MySpace, so will NextFB kill Facebook) will offer the same services and be free and take over the "market." The cycle repeats itself.

over 10 years ago on January 18 at 6:34 am by Joseph Perla in technology

Weby templates are easier, faster, and more flexible

Weby Templates are used in production on websites that have garnered over 500,000 uniques a month. They are incredibly easy to work with. They are the "templates for lazy people". They have 3 main benefits:

  • easier
  • faster
  • more flexible

The main codebase is implemented in 100 source lines of code. Extensive libraries only add just a couple hundred other lines of code. It is simple. It ensures that all tags have closing tags. It is compiled and fast. It is unicode compliant and safe. You can be fully fluent within 5 minutes since it is just Python and a transparent library.


Writing with weby templates takes less than 3 minutes to learn. Below is a sample:

import weby_templates as weby
from weby_templates.templates.lib import html

def index(p):
    with p(html.html()):
        with p(html.head()):
            p(html.title('Hello, World!'))
        with p(html.body()):
            p(html.h1('Hello, World!'))
            p(html.p('Please choose from the following items:'))
            with p(html.ul()):
            with p(html.div({'class':'footer'})):
                p(u'About | Links | ... | ')

        <title>Hello, World!</title>
        <h1>Hello, World!</h1>
            Please choose from the following items:
        <div class="footer">
            About | Links | ... | 

Fundamentally, weby templates are based on 3 simple concepts.

  1. First, use Python to its fullest. Weby does not invent a new esoteric language for you to learn. You know enough useful ones already. For mature developers, using the full power of Python makes things obvious and intuitive. Moreover, the simplicity allows the core code of Weby Templates to be just 100 lines. Every template is just a function that returns a unicode string. A template is just a string, not a fancy programming language or a complicated environmental-variable dependent rigamarole. Just call any functino that returns a string.
  2. Second, we include a decorator to make building the string easier. @weby.template() is a decorator that adds a first argument to the function. This first argument is an accumulator, conventionally named 'p', as in 'print'. With it, you can basically print out each html element in the text. It can also work with the 'with' statement in Python to ensure that all tags are properly enclosed.
  3. Finally, straightforward helper libraries exist that make writing html or xml or using filters (functions that accept and output strings) easier. For example, the html library is extremely useful. Every html tag has an analogous function in the html library, as seen above. The first argument are the content words, and the second argument is a dictionary of the attributes. If the tag is in a with statement, then the first argument is just the dictionary of the attributes of the tag (since the contents are contained within the with statement. That's all of the documentation you need to be productive in the library.

This README is generated with Weby templates if you want more examples.

./ > README.html


./ | ./weby_templates/tools/ > README.html


Weby templates are written in Python, and they compile to bytecode. Moreover, they utilize the complete Python stack, so you can use the Python debugger tools, source code checkers, and your normal build process.

You get the whole python compiler and optimizer speeding up your templates.

More Flexible

Weby Templates are just Python functions which return strings. It makes no other assumptions. That means that you can write HTML templates with it using the minimal HTML lib, or you can write standards-compliant XML with the XML lib, or you can write your emails, or you can write your own helper functions to generate documents in a custom format!

Also, unlike in other languages, writing filters and nested subtemplates or modules of arbitrary nesting or which take an arbitrary number of inputs is simple: just write such a function that returns a string, and optionally use the Weby Template decorator if that makes your life easier. Usually it does. Every filter is just a Python function that accepts a string and returns a string. How do you interface with this? How do you truncate? How do you pretty print? The answer is obvious and in the standard lib.

Just accumulate an object, or even just create a unicode string generator. Any function that returns a string will be a template. For example, each of many_hellos_* methods below are all valid, equivalent weby templates:

            import weby_templates as weby

            def many_hellos(num=10):
                return ('Hello, World!\n' * num)

            def many_hellos_redux(num=10):
                def many_hellos_generator(num=10):
                    for i in range(num):
                        yield 'Hello, World!\n'

                return u''.join(many_hellos_generator(num))

            def many_hellos_decorated(p, num=10):
                for i in range(num):
                    p(u'Hello, World!')
            def many_hellos_decorated(p, num=10):
                for i in range(num):
                    # raw function does not append newline
                    p.raw(u'Hello, World!\n')

            def many_hellos_decorated(p, num=10):
                for i in range(num):
                    # raw function does not append newline
                    p.raw(u'Hello, World!\n')

            # a sub-template (equivalent to Django filter, Django sub-templates, and Ruby helpers)
            # Since they are just functions, they can be nested, of course
            def add_greeting(p, thing):
                p.raw(u'Hello, %s!' % thing)

            # the main template, which calls the sub-template
            def many_hellos_subtemplate(p, num=10):
                for i in range(num):


Q: I get this unicode error: "Always work with Unicode", what is this?

A: Weby Templates are unicode compliant.

I love Python, but Python 2.x made some poor assumptions when it comes to unicode compliance which some other languages like Ruby do not suffer from. It contains both str and unicode types, and their interaction can sometimes cause problems.

Python 3.x fixes this by only having one string datatype: unicode. This greatly simplifies everything, but most code is still on the 2.x branch. To avoid annoying and difficult to debug situations, Weby Templates always outputs unicode, and it only accepts unicode. It does not try to intelligently or magically deal with improper strings; magic like that is hard to debug. The developer will explicitly deal with that before passing strings to Weby Templates. Explicit is better than implicit.

As a tip, make sure you always use unicode throughout your app, and only encode/decode strings when you are inputting/outputting data to the world. For reading from files, use the 'codecs' package in the standard library. Make sure that you read and understand this excellent article about Unicode from Joel Spolsky.

Q: I like that Django Templates constrain me. It helps me ensure that I keep templates strictly within an MVC framework. Can I do this with Weby Templates?

First, since it is possible and even easy for some calls in Django Templates to have side effects, be aware that Django only provides the illusion of constraints. In fact, database calls and state mutation can be embedded in the calls. The template language merely encourages an MVC style which template writers often adhere to.

Second, in practice, we have used Weby Templates and similarly are encouraged to write in an MVC style due to the nature of the tool. Mature app developers naturally have no compelling reason to violate the MVC framework, when it makes the most sense. Moreover, arguments are passed explicity to templates in the function arguments, unlike in Django where they are implicit and unpythonic, and the structure of with statements and accumulator naturally encourage an MVC style separation. Finally, since sometimes bits of html are generated in views (links, messages, etc), you can use the same template library and filters to generate these snippets as you use in your templates. Thus, you don't repeating yourself and have less, tighter code. You do not need a separate file to generate a separate 1-line template, just add a 1-line function to your Python scripts.

over 10 years ago on August 15 at 11:06 am by Joseph Perla in technology, open source

Apple's amazing customer support system

Pick up your phone. Dial 1-800-MY-APPLE, 1-800-692-7753.

Listen to the automated system tell you that he can understand complete sentences. Shake your head in disbelief. There's no way this is going to work.

Say 'I want to know if I can buy an AppleCare protection plan for my Mac Mini I bought 15 months ago.'

Notice how it asks you if you are asking for personal or business use. Stare in disbelief as it responds instantly and without a long awkward pause. Listen to the quick and conversational, not slow and stilted, tone of the computer voice. Let it automatically send you to the AppleCare department where you have no wait to begin speaking to someone.

Best phone system ever. I understand that it is very limited, but it fools you well enough to be a pleasant experience. It's a big stepping stone to even more powerful interactive phone systems.

over 11 years ago on August 23 at 5:50 pm by Joseph Perla in technology

Log Reader 3000

I wanted to show off another python script today.  I think it’s pretty cool.  It’s kind of like a very rudimentary version of something you might see in Iron Man.  And, of course, anything in Iron Man is cool.

I dub it Log Reader 3000.  It’s purpose?  It helps me monitor logs.  How?  Well, sometimes I need to follow a log in real time as it is written, but I can quickly get bored.  The log scrolls by endlessly while, very often, little new information spits itself out.  I can quickly lose focus, or at the very least, damage my vision after staring at a screen intently for extended periods.

Ideally, I want the log to simply flow through me, and if my subconscious notices something odd, then I can act on it.  If the log is read aloud to me, then I can work on other tasks and let my auditory memory and auditory processing take note of oddities on which I need to act.

So, I made a python script to read the log out to me as it is written. It is my first Python 2.6 script.  I take advantage of the new multiprocessing module built into the standard library.  I also use the open-source festival text-to-speech tool.

First, install festival.  sudo apt-get install festival in Ubuntu.  You probably want to set it up to work with ALSA or ESD sound.  By default, festival uses /dev/dsp, which means that you can’t use festival and any other program that uses audio (like Skype) at the same time.   Fortunately, and as usual, Ubuntu provides detailed, simple instructions to set up festival with ALSA: .

Finally, just find an appropriate use case.  Note that most log monitoring applications would not be improved with Log Reader 3000.  If you just want to be notified of errors, you should have a program email you when an error appears in a log.  If you want to understand the log output of a program that has already run, understand that Log Reader 3000 is meant for live-running programs.  Yes, Log Reader 3000 can be modified to read any text file line-by-line.  But, you will find that reading ends up being much faster than listening to a slow automated voice, so I recommend that you just try to skim a completed program’s output with VIM.

So then why ever use Log Reader 3000?  It is useful for applications which fit all of the following criteria:

  1. you want to monitor a live running program
  2. and the debugging information is nuanced and you need a human to interpret it (i.e. it cannot be filtered programmatically) and/or you want to be able to intervene while the program is running to keep it doing what it ought to be doing in real time.


  • Say that you are spidering the web, and what the spider should and should not be spidering is not yet well-defined, but a human knows, then the Log Reader 3000 can read aloud where the spider is, and the human can correct course as he or she notices the spider going astray.
  • Or, say that you are working on some kind of artificial intelligence.  Perhaps, the AI program can reason aloud and a human can correct or redirect the machine’s reasoning as it goes along.  I have no idea how or why an AI would do that.
  • Maybe you want to protect against bot attacks, but your aggressor is particularly clever and seems to avoid looking like a bot in all of the obvious ways.  You can pipe the output of your log into Log Reader 3000 and notice new kinds of suspicious patterns live while reclining in your chair or surfing the web.
  • You run a securities trading program.  You have numerous checks and double-checks to ensure that everything works correctly.  Nevertheless, you need to have a human monitoring the system as a whole continuously anyway, so you have Log Reader 3000 read aloud total portfolio value, or live trades, or trading efficiency, or fast-moving securities, or all of the above.
  • The lobby of your startup has a TV screen with graphs of user growth and interaction on the site.  You want to increase the coolness factor by having a computer voice read aloud some of the searches or conversations happening on your site live.
  • You make a living by selling cool techy art projects which blend absurdity with electronics.  You read aloud live google searches, or live wikipedia edits, or inane YouTube comments out of what looks like a spinning vinyl record.  Passersby whisper of your genius.

Once you have the application, just tail -f the log, parse out the parts you want the log reader to read (you can use awk for that, for example, or maybe a simple python script), and pipe that into the Log Reader 3000.

tail -f output.log | awk “{ print $1 }” | ./

How does Log Reader 3000 work?  The main process reads in one line at a time.  As it reads in each line from stdin, it sends it to the processing queue.  The child process reads the last item in the queue (it discards the items at the top of the queue because those are old and we need to catch up with the latest output line) and then calls a function to say() the line.  The say() function simply uses the subprocess module to call festival in a separate process and then blocks until it is done saying it aloud.

Because having a computer voice read aloud a sentence takes a while, the log probably outputs many more lines than can be read aloud.  That is why a multiprocess queue is needed, and that is why Log Reader 3000 only reads out the most recent line which has been output, which is why it is most useful for specific applications.

Here is the script,

#!/usr/bin/env python2.6
import sys
import subprocess
from multiprocessing import Process, Queue
def say(line):
    say = '(SayText "%s")' % line
    echo = subprocess.Popen(['echo', say], stdout=subprocess.PIPE)['festival'], stdin=echo.stdout)
def listen_to_lines(queue):
    line = 'I am Log Reader 3000.  The world is beautiful.'
    while True:
        while not queue.empty():
            line = queue.get()
queue = Queue()
p = Process(target=listen_to_lines, args=(queue,))
while True:
    line = sys.stdin.readline()

over 12 years ago on November 21 at 4:33 am by Joseph Perla in art, hacks, technology

A Clean Python Shell Script

Guido van Rossum, the creator of Python, recently wrote a post on his blog about how Python makes great shell scripts, even (especially?) compared to shell scripts traditionally created in Bash and using purely shell commands.

Guido is absolutely correct.  Shell scripts birth themselves painfully from my fingertips.  Bash’s kludgy syntax irks my orderly sensibilities.  Typos frequent my unreadable scripts.  iffi?  Who invented this?

On the other hand, Python sticks to just a handful of language constructs, so the language does not force me to google how to create else statement every time I need to do it.  Python just makes sense.

One of the comments asks if Guido can show him some “really beautiful” python shell scripts.  I don’t mean to brag, and by no means do I think that my scripts in particular invite the light of the heavens to shine upon them, but I think I follow PEP 8 fairly closely and I pay attention to the brevity and clarity of my language.  I find that I can quickly debug my scripts because of their transparency at run-time and their concise self-annotating source code.

So, below I show a script which I call Do

chmod +x 

so that you can run it from the command line with a simple ./  I alias it in ~/.bashrc.

alias mb='../path/to/'

The script simplifies what I would have to do manually in git many times a day.  You see, git exemplifies a great version control system for keeping track of source code.  I create branches instantly.  This encourages me to work on bug fixes and new features separate from the main code base.  As others make changes, I can easily integrate their changes by merging the changed branch into my branch.  Git’s merge algorithm embarrasses any other I have ever used.  Some of Subversion’s merges still haunt my nightmares to this day.

So, git rocks.  Unfortunately, conflicts sometimes do occur.  So, the proper procedure for merging a branch needs to be followed carefully.  People are bad at doing things carefully. That’s okay.  We should spend more time on making mistakes being creative.  That is why we invented computers to do work for us.

For best results, merge the latest changes people made to master into your branch as often as possible.  Small changes incrementally will probably mean small merge fixes.  One big change will probably cause you major pains.  So, merge from master into your branch often.

If you use GitHub or another central repository with a number of other people, then you must do a number of things.  First, make sure that all the commits that you wanted to make are commited to your branch and that you didn’t leave any files out that you have not explicitly git-ignored.  This happens a lot in SVN and Git if you are not careful, and it is the greatest source of frustration for anyone who uses a system like this.  To human is to err, c’est la vie.  Then, git-checkout master.  Make sure that origin has the latest changes from your master.  Then git-pull the latest changes form origin (github) into master.  Then git-checkout your branch again.  Then git-merge master into your branch.  If there are any errors, fix them and commit, otherwise you are done.

Also, when you complete all the changes in your branch and all the tests pass, then you need to git-merge your branch into master and git-push it back up to origin (possibly github).  You need to follow the procedure above to ensure the latest master changes are included in your branch (preferably before you run the tests).  Then, you check out master, git-merge master into the branch (this will be clean since it should just be a fast forward because you already have the latest master).  git-push the changes to origin.  Finally, delete the branch that you just completed.

This tedium rotted my brain for weeks.  Finally, I resolved to write a script to solve the tedious parts, but bring possible errors to my attention if they occur.

Please let me describe to you a few features of the script.  First, I try to follow PEP 8 as much as I can.  I have read it at least times; you should too. Also, recite the Zen of Python every night before you go to bed.

Notice how I start the script with a shebang line which says /usr/bin/env python, the preferred way to start Python since it is most flexible.  For example, I can use Python 2.6, or my own local version of Python.

I use the logging module which is part of Python’s very large standard library.  Logging gives you so much for free.  For example, instead of commenting out print statements, just change the default logging level threshold.  Always use the logging module instead of using print for everything.  Always.  It’s as easy as import logging; logging.error(’…’).  Also, the logging.basicConfig(…) I use here is the same one I use everywhere.  Logging the time that a message appeared saves hours and hours when I debug long-running scripts.

Use the optparse module in every Python shell script you write (getopt is too weak and will end up being much, much less simple by the end of a non-trivial program).  Again, you get so much for free, like a -h help command.  The documentation for optparse explains how to do everything in detail.  Make sure you set the usage parameter.  Also, make sure you call parser.error() for input option errors instead of raising an exception yourself.

Write utility functions.  Use the power and simplicity of Python to your favor.  Here, I use call_command().  I use it throughout the script and it makes the code so clean and clear.

Finally, I like to put the main() function of scripts at the top.  That makes the most sense to me.  If I open a file, I want to instantly read what it does, not read what its utility functions do.  I put the utility functions below.  Of course, at the bottom, after everything else has loaded, I place the if __name__=”__main__” code and then call main().   This way, I can import this as a module (in, for example, py.test or iPython) to test the utility functions without running the actual script.  (warning:  Do not put anything except the call to main() at the bottom.  Otherwise, you may not realize under what circumstances you call main() and with what parameters.)

Here is the script:

#!/usr/bin/env python
import os
import re
import subprocess
import logging
import optparse

                    format='%(asctime)s %(levelname)s %(message)s')

def main():
    usage = "usage: %prog [options]"
    parser = optparse.OptionParser(usage)
    parser.add_option("-m", "--merge-master", dest="merge_master",
                    help="Merges the latest master into the current branch")
    parser.add_option("-B", "--merge-branch", dest="merge_branch",
                    help="Merge the current branch into master; forces -m")
    options, args = parser.parse_args()

    if not options.merge_master and not options.merge_branch:
        parser.error('Must choose one-- try -m or -B')

    # Merging branch requires latest merged master
    if options.merge_branch:
        options.merge_master = True

    if options.merge_master:
        output,_ = call_command('git status')
        match ='# On branch ([^\s]*)', output)
        branch = None
        if match is None:
            raise Exception('Could not get status')
        elif == 'master':
            raise Exception('You must be in the branch that you want to merge, not master')
            branch =
  'In branch %s' % branch)

        if output.endswith('nothing to commit (working directory clean)\n'):
  'Directory clean in branch: %s' % branch)
            raise Exception('Directory not clean, must commit:\n%s' % output)'Switching to master branch')
        output,_ = call_command('git checkout master')

        output,_ = call_command('git pull')'Pulled latest changes from origin into master')'Ensuring master has the latest changes')
        output,_ = call_command('git pull')
        if 'up-to-date' not in output:
            raise Exception('Local copy was not up to date:\n%s' % output)
  'Local copy up to date')'Switching back to branch: %s' % branch)
        output,_ = call_command('git checkout %s' % branch)

        output,_ = call_command('git merge master')'Merged latest master changes into branch: %s' % branch)'Ensuring latest master changes in branch: %s' % branch)
        output,_ = call_command('git merge master')
        if 'up-to-date' not in output:
            raise Exception('Branch %s not up to date:\n%s' % (branch, output))
  'Branch %s up to date' % branch)'Successfully merged master into branch %s' % branch)

    if options.merge_branch:'Switching to master branch')
        output,_ = call_command('git checkout master')

        output,_ = call_command('git merge %s' % branch)'Merged into master latest branch changes: %s' % branch)

        output,_ = call_command('git branch -d %s' % branch)'Deleted safely branch: %s' % branch)

        call_command('git push')'Pushed master up to origin')'Ensuring that origin has latest master')
        stdout,stderr = call_command('git push')
        if stderr == 'Everything up-to-date\n':
  'Remote repository up to date: %s' % branch)
            raise Exception('Remote repository not up to date:\n%s' % output)'Successfully merged branch %s into master and pushed to origin' % branch )
def call_command(command):
    process = subprocess.Popen(command.split(' '),
    return process.communicate()
if __name__ == "__main__":

over 12 years ago on November 17 at 11:00 pm by Joseph Perla in hacks, technology

Ruby is a Ghetto

Zed Shaw (the creator of Mongrel) not long ago described how the Ruby on Rails community is a ghetto.

Working with both Python and Ruby now, I learn every day how much Ruby, too, is a ghetto.  Nobody documents anything (e.g. solr-ruby).  The few projects that have documentation do not document clearly or completely (Rails…).

Moreover, take Ruby’s standard package management system: rubygems.  A simple gem install uses up 600+ MB of RAM on my SliceHost machine.  But again, lack of documentation scars this project even more deeply.  Take a look at its Frequenty Asked Questions Page:

[I lost my internet connection while composing the answer to this question. Unfortunately, I now no longer recall what I intended to write. The answer (or at least part of the answer) is buried deep in the RubyGems mail archive. I’ll try to update this after a bit of research. Sorry for leaving this question hanging.]

Seriously, “I now no longer recall what I intended to write.”  For how many months has this lunacy been online?  Ruby is a ghetto.

over 12 years ago on October 26 at 11:14 pm by Joseph Perla in technology

Switch windows quickly

I want to avoid RSI.  So, I want to use the mouse as little as I possibly can while I focus on my keyboard.  Unfortunately, alt+tabbing between windows takes far too long and annoys me with how much I have to think to move between the windows.

I often have several windows open.  I want to switch between them very quickly.  So, I created a program using Python and Xlib that generates another program.

The program moves my mouse automatically to a specific location and then clicks automatically.

The program also creates a keyboard shortcut in Gnome.  So, I can type something like Alt+q which calls the program above, moves the mouse to a specific location, and then clicks.

Finally, the program also generates a program which, when called, opens up many windows at specific locations in a grid:

If I combine all of these programs, I can focus between windows very easily. I can move the mouse between 12 spots in a 4×3 grid using the keyboard letters Q,W,E,R, etc like below:

To move to the Top-Left window, I hit Alt+q, which moves my mouse to the top left and clicks, focusing the top-left window.  To move to the bottom right, I press Alt+v, then the mouse moves to the bottom right and clicks, focusing into the bottom right window.

Basically, when I’m programming, I never have to move to my mouse to switch between windows very quickly.  I can open up 12 files at once, and switch between them swiftly and deftly.  When you work on a large application, this becomes very useful.

I’ve open-sourced the program here: .

over 12 years ago on September 18 at 8:19 am by Joseph Perla in hacks, technology

Kohl looking into telecom pricing practices

I have been saying for a long time that AT&T, Verizon, and others operate in a market with little real competition which allows them to charge ridiculous rates and have unfathomably bad customer service.  Finally, one senator begins investigations into their text messaging pricing practices which have increased by laughable amounts:

over 12 years ago on September 15 at 2:43 am by Joseph Perla in technology

Y Combinator Application Guide

Y Combinator, a kind of mini-venture capital firm, invests tens of thousands of dollars ($$$) into very early seed stage start-up companies run by smart technology hackers.  They wanted to fund me in Summer 2008.

I applied to Y Combinator two times.  The first time, when I applied with my friend Mason for the Summer 2007 round,  I arrogantly presumed that Paul would lavish on us praise and beg us to fly to California to work with him.  I spent no more than an hour on the application.  We had no passion in the idea we presented.  Our projects list hinted at nothing particularly remarkable or unique.  Our analysis of the idea and our competitors delved only into the shallowest parts of a deep lagoon.

The second time, when I applied alone in Summer 2008, in an inspired moment I sat down in Starbucks for a solid few hours to work on the application.  I strived for excellence, not perfection.  A few months prior, I had briefly glimpsed the semi-successful application of Liz Jobson and Danielle Fong.  I recalled their deep detail and thoughtful writing, so I imitated that kind of deep analysis which shows off one’s mastery of logic and breadth of experience.

I wish I had known how to write a good application the first time.  So, taking my cue from Brian Lash’s recent question on Hacker News, I helped him out.  I write here a slightly expanded version to help out anybody else who wants Paul Graham & co. to fund his or her startup.

If I were to advise myself in 2007, I would recommend that I write briefly but write a lot.  This advice seems contradictory, but I mean it in a very specific way.  My first application, I kept brief.  I did not want to swamp YC with a tome of text. I saved many of my accomplishments for the interview.  Do not do this.  Write, write, and write some more.  Write everything interesting and unique about yourself.  If you have doubts about a statement you made about a competitor, qualify it.  Don’t vacillate, but at the same time don’t seem shallow, ignorant, and inexperienced.

Of course, once you’ve written all that, you have a very long application.  Now, take out filler words.  Compress ideas that take up two sentences when you can use just one. If you waste two words in a sentence, delete the whole sentence and write it again from scratch.  If you see a phrase that you think an investment banker might use on his resume, nuke it.  Achieve a high density.  In my experience, the YC crew truly pores over these applications to understand all of the meat of it.  They do not skim your application when it has rich content.  Cut, cut, and cut some more.

Now, step back and look at your application.  If you have very little writing left, real content, then you may not be the best fit for Y Combinator this year.  That’s okay.  It’s good you know now.  Take this year off and work on some interesting, hard projects that nobody has done before.  Bounce your idea off of the smartest person you know.  Hell, micro-test the idea.  Then, repeat this process.

Step back, look at your tight list of accomplishments.  If it’s long, that’s great, since reading something long but rich in content everyone loves to do.  The length indicates strength.  In my limited experience, I think this is how I made my application successful.

Here’s some of my application below (I elided some less relevant parts). I was accepted for Summer ‘08 2008 but decided to pass this time for a variety of reasons.


What is your company going to make?

I’m open to anything. Here’s one idea:


Have you ever scanned a document before? How was that experience?

It was terrible for me, too. Everyone I have ever asked has agreed that it is physically painful. But, there is a solution, one based on understanding actual human needs. What is wrong with the scanners of today?:

* slow (takes time to heat up)

* slow (scanning at a high dpi takes a long time)

* complicated (please select the dpi, now select bla, now bal[sic]…)

* cumbersome (files generated at high dpi are huge, slow down system)

* cumbersome (OCR’ing a document is a whole other rigamarole)

What do people really need?  Simply a decent, readable scan of the document. This should be as easy as holding the paper up to face the monitor.

Imagine that.

I propose that I sell a device which is basically just a decent-resolution CCD chip with a special lens which connects to a computer (wired at first, but v2 wireless). Scanning a document is as simple as holding the camera up to a document and clicking. In my tests, scanning a whole text books takes 5-10 minutes. This is a game-changer. I’ve worked with an ip lawyer to file the provisional patent on this and a few other aspects of the designs.


For each founder, please list: name, age, YC username, email address, personal url (if any), and current employer and title or school and major. List the main contact first. Separate founders with blank lines. Put an asterisk before the name of anyone not able to move to Boston June through August.

….. [Be sure to put your blog here. Don't have a blog? Make one. Blog about whatever is on your mind. Blog about your hacking.

To be honest, an Ivy League pedigree probably helped.  Also, my computer science degree (as opposed to Economics or Business one) probably encouraged YC's faith in me.]

Please tell us in one or two sentences about something impressive that each founder has built or achieved.

Looking at some things in ~/projects folder: ……..

[Here I mention a few of my projects, with links to open source code, web pages, anything I can publicly show. I didn't spend more than one or two sentences describing any one project, but I listed many of my most interesting projects and why I worked on them. YC likes to see you working on real problems, so I talked about problems I solved for myself and for others directly

They want to see that you think creatively and that you actually finish things.

It goes without saying that you should list projects which uniquely describe you.  Building a toy language in Programming Languages class many people probably do.  Yes, it may have taken you a long time, and you may have learned a lot, but you do not necessarily stand out.  Writing a CAPTCHA solver to hack Digg few people do or can do.]

Please tell us about the time you, ljlolel, most successfully hacked some (non-computer) system to your advantage.

…… [I talked about my shotgun email to dozens of startups here in Silicon Valley which gave me the opportunity to meet a lot of cool entrepreneurs.  I'll probably blog about this at some point in the future.]

Please tell us about an interesting project, preferably outside of class or work, that two or more of you created together. Include urls if possible.

(see above) [I applied alone, so group projects inapplicable.]

How long have the founders known one another and how did you meet? Have any of the founders not met in person?

n/a [Again, I was a sole founder.]

What’s new about what you’re doing? What are people forced to do now because what you plan to make doesn’t exist yet?

(see above) Basically, nobody ever scans anything because it takes forever, doesn’t really do what you want (you just want a readable, small image and for the document to be searchable),

What do you understand about your business that other companies in it just don’t get?

Scanner manufacturers try to pack in the highest dpi they possibly can. They focus on resolution, when they should be focusing on the user experience. Speed is what they should optimize, but I see no scanner manufacturer doing that.

Who are your competitors, and who might become competitors? Who do you fear most?

HP, Xerox, etc, also ScanR, Qipit, Evernote …… [I go on to be brutally honest about the difficulty and vulnerability of my position as a hardware startup in a crowded field. Remember, you are writing for some very, very smart people. They want to see your analytical thinking skills here. They want to see you be realistic, not delusional.]

……. more questions, answer analytically deeply, answer honestly to the best of your ability ……

If you had any other ideas you considered applying with, feel free to list them. One may be something we’ve been waiting for.

…….. [I always think of new ideas and discuss them with friends. I chose 4 and listed them here. I crisply described each in no more than 2 brief sentences.]

over 12 years ago on July 20 at 10:37 pm by Joseph Perla in entrepreneurship, hacks, life, money, personal, technology, ycombinator

TipJoy ingeniously simplifies and enables micro-payments

I have already written about my distaste for advertising.

Sometimes, however, these newspapers and blogs manage to make something of value. A particularly hard-hitting expose in a newspaper, or a particularly helpful guide in a blog, offers to people real value. Nobody can create this kind of content every day, or probably even every week or month. A subscription subsidizing the page-filling fodder misallocates wealth. I want to pay for the value more directly, not indirectly through ads.

Or, more commonly, a blog post provides for me a little bit of value. Not $50/month in value, but perhaps 50 cents/month. No payment system can pass around payments like that easily for the user, especially without ridiculously large credit card fees. How can I tell Michael Arrington of TechCrunch that his site I find useful sometimes? Combined with the millions of others who find his site just a little bit useful, he can make some money directly from us.

Fortunately, I think TipJoy solves many of these problems. The site only launched a few months ago, so it has to grow quite a bit before it reaches a tipping point. Nevertheless, TipJoy designed their product beautifully.


First, for new users, creating an account takes a few seconds. Just click on the TipJoy button, write in your email, quickly create a password, and finish up. No credit cards required. A new user signs up by tipping, integrating the first-use with registration. Ingenious.

They follow a model that bar’s use where you can set up a tab and pay later. Readers get drunk tipping blogs here and there all around, running up a huge tab. Users only pay once the tab gets large enough to justify the credit card fees. Their model differs from the bar, of course: just like the tips themselves, paying the tab is optional. Nevertheless, through this system, TipJoy encourages people to sign up easily, and only over time pay off their tabs.


Second, once signed in, tipping takes just one click. No annoying confirmation steps required. No complicated questions about how much you tip. You get one choice: 10 cents. Of course, you can tip more if you want. This encourages readers to tip generously around many sites across the web. The tab builds up invisibly behind the scenes.

When I first read about TipJoy, I knew that it, or a model very similar to it, would take over the web. I think it will take time. However, I will support this service by putting it up on my blog. Maybe, one day, I will write a post that many people find just a little bit useful, and I can finally monetize this blog :) .

over 12 years ago on April 20 at 5:45 pm by Joseph Perla in entrepreneurship, money, technology

Make your own chimes

I just bought a Mac Mini.  I love it.  Apple spent a lot of time polishing OS X.

I configured OS X to create a chime, a 21-st century chime.  In the Date & Time settings, I selected it to tell me the time every hour.  At 6pm, a voice from the computer says, “It’s 6 o’clock.”  At 10pm when South Park comes on, it reminds me by saying “It’s 10 o’clock.”  The chime keeps me conscious of the time passing when I’m online.

I dual-boot Ubuntu on this Mac Mini.  Ubuntu, unfortunately, does not have this chiming feature. However, I set it up in minutes.  I installed festival, the free open-source text-to-speech synthesizer, as well as an American voice (I struggled to understand the British voice).

sudo apt-get install festival festvox-kallpc16k

Then, in crontab, I added one line:

0 * * * * echo "(SayText \\"Its`date +\%l` oclock\\")" | festival

Now I easily keep track of the time.

over 13 years ago on April 17 at 1:12 am by Joseph Perla in hacks, technology

How to check email two times a day

Tim Ferriss popularized the idea that you should limit the amount of time you spend checking email every day.  He espouses a philosophy of life called the low-information diet.  By following these guidelines, you get more done and, more importantly, feel less stressed.

One of his suggestions about email spread across the blogosphere very quickly because of its simplicity and practicality.  He recommends that you check email only twice a day (or preferably less often) and strictly adhere to that rule.  I started following these guidelines a few days ago, but I easily relapse.  Nevertheless, I do a few things to try to stay on the wagon:

  • Add a message to all outgoing emails:
EXPERIMENT: I will be checking email 2 times a day at 1pm and 6pm pacific time.
If you need me earlier, then please contact me below.

And of course I put my contact information below.  With this signature, I do not worry about missing out on important and urgent information or replies.

  • Delete all links, shortcuts, and bookmarks to GMail
  • Set up a script to automatically open up GMail at 1pm and 6pm every day.  In Ubuntu, I write just one line in crontab:
0 13,18 * * *  export DISPLAY=:0 && firefox

Linux makes hard things easy.

over 13 years ago on April 15 at 9:02 pm by Joseph Perla in hacks, life, technology

Untenable advertising

Ads annoy me. Ads annoy everyone.

ads suck

More importantly, I cannot envision building a serious business which depends on these kinds of banner ads, or even text-link ads. But many websites do: TechCrunch, Project Wedding, Reddit, MightyQuiz, Justin.TV, Scribd, Loopt, and so on.

I use many websites online every week. Many provide a lot of value to me, they help me do my job more quickly or help me live my life more easily. They offer me so much value, I would even pay to use them. Some of these services include Google, Amazon, GitHub, Bank of America, Kayak, Craigslist, and a number of blogs like Slashdot, XKCD, and so on.

Except for Google services and the content creators (the blogs), I pay directly for the value these websites give me, given how little the services cost. The smartest ones all do. Kayak, for example, makes money off of the airline and hotel referral fees, not ads.

Unfortunately, many startups think that Google’s AdWords will be their sole source of revenue for their website.


But, advertisements as a business model suffer from a fundamental weakness: advertisements indirectly monetize a website. Sometimes, the indirect monetization means that you make more money. Often, it means you make less.

Imagine you make a technically amazing product on your site. Nothing else exists like it. I sign up, and I notice that you provide an incredible amount of value to me. I would be willing to pay a large monthly fee for that. Instead, though, you monetize the website through advertisements. I never click on the ads. I visit to your site to use your product, not to buy chainsaws. You make no money off of my use. Even if I clicked on a few ads, you still make less money than if I paid a monthly fee.

That doesn’t work. You get none of the pay off from the value you provide me, while simultaneously actively annoying me. Project Wedding offers a good example. I would use Project Wedding to review, for example, photographers and find the perfect photographer for my wedding. The Google Ads at the top for random photographers who happen to pay for the ads do not help me; they only confuse me. A referral fee model makes more sense, or preferably an even more creative never-before-seen model.

The Quintessential Advertising model

Now, for a few kinds of websites, advertising makes sense. When I’m looking for a chainsaw to buy, I google “chainsaw” to find results, but I also see “chainsaw” sponsored ads on the right. That makes perfect sense; it directly provides me value. Google search exemplifies a great use of advertising. As Google’s customer, you watch Google continually provide us a better, more targeted service. It is the Yellow Pages model.

The Common Advertising Model

Advertising does not make sense in most other models. It does not provide value any other way, but it does annoy me. Nevertheless, I would use advertising if I started a company that built one class of product: products that provide little to no value. Examples include most television programs (think “reality” TV) and online games. People spend time watching random television shows to waste time and not think. These provide little (negative?) value. You have absolutely no opportunity to get people to spend money on your silly time-wasting flash game. You can, however, put ads along the side. With this kind of advertising, you transform your customers from the people playing the games into the advertisers. The advertisers pay you to reach out to these game-players, at the expense of the already-void user experience. Advertisers pay more.

Most magazines, newspapers, and blogs also fall into this category. Reddit and Digg as well. Little to no (to negative) real value offered. Newspapers and magazines offer nominal subscription fees, not because they cover the cost of the reporting–it probably does not even cover the cost of the ink– but because advertisers demand that they know real circulation numbers. Advertisers assume that if you pay at least a little, you probably read it and look at the ads. Because content creators cannot extract enough money from you directly into paying for all of the reporting and server overhead, they resort to becoming the servants of advertisers. Digg now displays (or at least recently used to) very annoying flashing ads.

Make something useful

But if I want to create something that depends on this kind of advertising, why do I want to create it in the first place? Why do I want to make something that nobody values, that nobody finds useful? For me, I cannot do that. I want to make something great, not a time-waster.

over 13 years ago on April 8 at 8:10 pm by Joseph Perla in entrepreneurship, technology

Stanford’s Entrepreneurial Thought Leaders Series (now on your iPhone!)

The Stanford Technology Ventures Program runs a well-developed incubator for tech businesses at Stanford University.

STVP offers some very cool resources free to the world. For example, I have been listening to their Entrepreneurial Thought Leaders audio podcast. The program brings in some of the greatest entrepreneurial forces in Silicon Valley today. Some of the speakers include

and so on.

While I was listening to Mike Maples and Ron Conway give their talks about angel investing, I had trouble following along and knowing who was saying what. I had subscribed to the talks through iTunes. When I visited the site, I noticed that they published videos as well, but in a Flash format, and not available as a podcast. I followed the videos much more easily.

So, in accordance with their fair use license, I decided to scrape the video metadata, download the video files, transcode them into an iPod-acceptable format, and republish them in a simple video podcast format. I now have scores of these talks in my iPhone and on my Mac Mini to view at my leisure.

Now, you can download them to your iPod, too. Just subscribe through iTunes or any other podcatcher.

P.S. I’ve open-sourced the code (AGPLv3), in case you ever want to make a podcast yourself.

over 13 years ago on April 5 at 7:43 pm by Joseph Perla in entrepreneurship, hacks, technology

Learn 100 digits of pi at lightning speed

Learn 100 digits of pi at lightning speed.

In a previous post, I wrote about the Secret to Pi.  I wrote about the method I used to learn 100 digits of pi in under an hour and remember them days later without extra practice.

While memorizing the digits of pi using this method, I realized that I was spending most of my time trying to think up words that would translate to the digits.  I tried to think of the longest word I could.  Sometimes I would screw up and use a word that did not translate to the correct digits.  I spent 2/3rds of my time just thinking of good words, images, vivid pictures.  It was hard and slow.

So, I decided to make a computer program to find the words and optimize everything for me.  I did, and I’m releasing the code under Affero GP.  Of course, all the code is PYthon2.5.  Please allow me describe it to you.  With the words precomputed, I can learn pi as quickly as I can tell a story!

At the top above, I linked to a page which I generated automatically using these libraries I’m releasing.

There are a few libraries.  They all require NLTK.  NLTK is an excellently-designed, well-developed, actively-maintained open-source natural language parsing library.  It has many (nearly 1GB of) corpora.

First, is a script.  We need to automatically generate a good, long list of concrete nouns for you to have strong images and remember the story of pi visually. It uses the CMUDict Pronunciation Corpus which is in nltk.corpus.cmudict.  It also uses the wordnet corpus in nltk.wordnet.  The script does some intelligent processing to filter out archaic words, curse words, and abstract nouns.  Run at the command line to create a nouns.csv file, or just download my copy in the repo.  50-75% are very good, concrete, vivid nouns for this purpose.  If you can help me get a higher percentage/more good nouns, please tell me.

Second, there is is a library (import soundmap) that you can use to convert a word or phrase into the corresponding digits.  To be perfectly flexible, it loads a file which describes how to match which sounds to which digits.  I provided the sounds.csv file which is the one I use.  I haven’t tried to figure out what would be the optimal configuration yet, but maybe you can :) .  This also uses the CMUDict Pronunciation corpus (of course).  Call soundmap.convert_to_digits(phrase) to have it return a string of digits.

Finally, there is is a library that takes in a string of digits (such as the digits in pi) and uses the nouns.csv list of nouns and to figure out the optimal sequence of words for people to remember that sequence of digits.  It also has a couple hundred digits of the famed constant inside the library: mapwords.pi.  Simply call mapwords.get_best_mapping(mapwords.pi) for it to return a list of words.

You can put all these together and quickly learn thousands of digits of pi.  Here’s a great page with many digits to throw into the program.

over 13 years ago on March 14 at 12:01 am by Joseph Perla in art, hacks, science, technology >

A recently-launched startup, won the TechCrunch40 award for best new startup. TechCrunch raves incessantly about I had used Microsoft Money a couple of years ago, and I liked that I could sync up with some of my banks and credit cards. Unfortunately, the process was tedious, Microsoft Money did not automatically categorize my expenses. It did not do what I wanted. Because of the hype surrounding Mint, I finagled an invitation to try out the site. I used very early on; I beta-tested their product.

I put in my bank information, which was relatively easy to do. It loaded up my credit card transactions, although that process took a long time. showed me charts of my spending and nothing else., not only devoid of features, actively tolerates bugs in the website. Their product loaded the transactions from my Bank of America accounts twice. It said I was spending twice as much as I was, it said I had twice as much money in the bank as I did. Seems like a simple bug to fix, and a common one considering the popularity of Bank of America. As a beta-tester, I emailed customer service informing them about this problem. Their reply: “we know.”

So, the only feature Mint offers to me, expense tracking, I cannot use. The other major feature they claim to offer, as well as putatively their only source of revenue, lies in their “intelligent” financial recommendations. Really, they just try to get a referral fee by directing you to ING or American Express. If you have a low-yield savings or checking account, they recommend a high-yield ING account. If you use a credit card with no rewards, Mint refers you to American Express or another card with benefits. That’s it, I already have both, so Mint offers me nothing.

I closed out my account, and I can only hope they deleted all my financial information. (Either way, knowing how startups and hacking work, I think my accounts are fairly secure). I waited for another new product to rise to the challenge of managing my finances. I had tried another company,, which is a well-designed website with learning algorithms to categorize expenses, plus they don’t offer to store your passwords for you. But, you have to download a client for you to download financial statement updates yourself. I tried it out to discover that I’d really rather they use up their bandwidth and their time downloading financial updates. Moreover, they didn’t have a Linux client. They recently released a Firefox client, but I prefer Opera now. Finally, on balance, my passwords on my computer have a higher chance of being stolen than my passwords on enterprise servers.

Fortunately, recently, I noticed a relatively new feature on the Online Banking website: My Profile. BOA offers Online Banking free to pretty much anyone with an account. When I first opened my account, the website loaded slowly, crowded text together, and thirsted for features. Hardly usable, I rarely logged in. Over the past two years, though, the website has significantly improved. Bank of America has won awards for its online banking interface. BOA could rest on its laurels, but instead the company seems to be throwing lots of money and resources at building a truly next-generation banking interface.

First, it innovated in security with its SiteKey program. Recently, they’ve launched added security with SafePass. Instead of typing in your password, potentially revealing it to malicious persons, BOA text messages you a temporary password to use to log in. This looks like a 21st-century equivalent to the old key fobs people had to carry around and click when they wanted to type in a password to a highly-secure area, except better since you can use your own cellular phone normally.

In terms of banking, they offers checking, savings, and business accounts. CD’s, and now stock investment options, IRA’s, and mutual funds. They now have a sophisticated, granularly-controlled alert system, and free online BillPay for automatic payments. I can send money to other Bank of America accounts, even recurring payments, easily at no charge. Sending money to other banks is only slightly harder. They released a new mobile banking interface that let’s you do everything from your cell phone. The site is now fast, secure, easy to use, and I love it.

Finally, my favorite new feature, My Portfolio. It does everything Mint claimed to do and more, but it does so correctly. Moreover, it’s probably more secure. This feature is powered by Yodlee, which is also used by Microsoft Money, ETrade, and many other major companies. They have to be secure.

The features of My Portfolio are extensive. I set it up to automatically update my transactions from ING, Scottrade, my other Bank of America accounts, and American Express. It even let me add my investment in Nexus Capital as a custom account. Bank of America correctly categorizes most expenses automatically, and I can set up rules easily if it doesn’t. The categories are clear and make sense. Simple, beautiful, and clear, the charts actually help me understand my expenses:
BOA Expenses

Among other charts and views, it shows me a high-level overview of my net worth and investments:
BOA Net Worth

What I like best about BOA is that it constantly impoves its site. The past two years have shown me massive improvements. I do not know what to expect over the next couple of years. I do know that still offers no new features since I tried it a few months ago. Their team is small, and they must worry about scaling more than offering useful new features. Bank of America has proven that they are fully committed to offering me more services through the website for free, and I trust they will continue to do that. I can hardly wait to see what new features the bank will be integrating next. 21st century banking is just around the corner.

over 13 years ago on February 5 at 2:18 pm by Joseph Perla in money, technology


ASUS recently released their Eee PC. It is a laptop that emphasizes computing for everyone. It is small (tiny), unbelievably light, energy efficient, cheap, and it runs Linux. Actually, it can be all of these things because it runs Linux. A Windows Vista computer would require more big and heavy energy-sucking hardware. Plus, you’d have to pay the expensive Windows tax.

There are two important reasons why the Eee PC is revolutionary. First, it is ridiculously portable. It weighs less than 2 (two) pounds. That’s less than a kilo. Based on my experience with the XO-1 OLPC laptop, you hardly notice its weight in your hands. Most so-called “portable” laptops offered by other manufacturers weigh at least 3-4 pounds. Most laptops in general weight 5.5+ pounds. Moreover, it’s screen has a 7″ diagonal. It takes up hardly any space. You can almost throw it in your pocket. Despite its size, it still sports a complete, usable QWERTY keyboard and an acceptably high-resolution screen.

Check out a picture for comparison (courtesy of Cliff)
Asus Eee PC size comparison

The second reason why the Eee PC is revolutionary is that it is cheap. While one of the 3 pound ultraportable laptops other manufacturers offer can cost you upwards of $3000 (!!), the Eee PC costs in the range of $400. Additionally, the ultraportables would be bigger, heavier, and clunkier. Portability carries a premium, and this laptop is the most portable released so far. Yet, it doesn’t have the ridiculous price tag of other ultraportables.

Now, of course, it’s not a perfect comparison. The Eee PC has a lower-resolution screen due to its small size, and the processor isn’t very fast, but it is more than useful enough to run a web browser (Firefox), a word processor, and instant messaging. I would personally love it just to be able to run Firefox and SSH anywhere I want without lugging around a 6 pound mess.

over 13 years ago on November 23 at 11:00 am by Joseph Perla in news, technology

Amazon Kindle Nearly Perfect

Amazon recently released their Kindle eBook reader, and it’s nearly perfect.

Imagine that you have a 6″ small, unusually light, paperback in your hand or backpack everywhere you go. Instead of that paperback just being a single copy of Harry Potter and the Philosopher’s Stone, it’s truly magical. Flip the page, and you can see Catch-22, flip another, and you read Slashdot live. Forgot to pick up the Wall Street Journal on your way to work this morning? Don’t worry, it’s already in your hand.

As you start reading Catch-22, you come across a word you don’t recognize, like infundibuliform, so you instantly read the definition right in your little book. It’s battery lasts nearly a week. You can annotate the books. It works perfectly in sunlight, it is easy to hold in either hand, and you can adjust the font size to the exact size that you want. It is nearly perfect.

Moreover, it is identical to that amazing encyclopedia, the Hitchiker’s Guide to the Galaxy. The Kindle should have the words “Don’t Panic” inscribed in it. It’s a small, electronic book on which you can look up Wikipedia on the fly through its wireless connection. The Hitchiker’s Guide, too, is an electronic book, and

…though it cannot hope to be useful or informative on all matters, it does make the reassuring claim that where it is inaccurate, it is at least definitively inaccurate. In cases of major discrepancy it was always reality that’s got it wrong.”[3]

The Guide can receive updates to its data base via Sub-Etha. Field researchers (like Ford Prefect) can also use the Guide to edit entries and transmit these back to the publisher.

Finally, if you have a question, although you cannot use Google, you can ask Amazon’s Now Now service to get it answered quickly.. The only thing I can’t do that I would want in a small, personal computer is SSH.

Why isn’t it a perfect ebook reader? Well, mainly, the restrictions and the price. The device itself costs $400. Moreover, the books designed for the reader which you buy on cost $10 each. You can easily get a paperback book for less than $10, plus you can resell it. The Kindle’s delivery costs are far lower, so it’s hard to justify that price. One can infer that the book industry has pressured Amazon into a Faustian deal. Each digital e-book is highly DRM-infested, which means it you can’t use it as freely as you could a real paper book or a DRM-free book. Book publishers still haven’t learned from the music industry’s mistakes.

Nevertheless, Amazon offers a revolutionary product on par with the iPhone. They introduce a revolutionary business model where they subsidize the cost of high-speed wireless delivery of information through the price of the content. Although Sony also has an eBook reader, in terms of usability Amazon’s Kindle trumps it. The Kindle is the eBook done right (almost, it just needs fewer restrictions). Because of its uniqueness, Amazon can charge a premium, just as Apple did for the iPhone.

I don’t think I would buy this version of the Kindle. Given the thought put into this, the popularity of the device (Amazon is sold out), and the massive feedback they are getting from users, the next version of the device will improve. And not just in a superficial way. Yes, the price will improve, and yes, hopefully, they will ask an Apple designer to make the case more aesthetically pleasing. More importantly, other manufacturers will see and try to imitate this revolutionary device. They will provide competition, hopefully innovate even more, and ideally start freeing books from the shackles of DRM.

Disclaimer: I have owned Amazon in the past and may buy it before their next earnings call given this product. Also, I include affiliate links to Amazon in my posts.

over 13 years ago on November 22 at 5:23 pm by Joseph Perla in books, news, technology


When someone searches for your name on Google, you don’t know what they might find. They might find an article or two in which you were featured, or they might find a random post you made to an open source project. Or, they might find someone else and not know he is not you. The scattered information evaporates and confounds your online persona. You have a blog, but it might not point to your LinkedIn account, or your home-made balancing robot video.

What I need to be able to do is manage my online identity easily. Moreover, I don’t want my data to be hostage to a single company. But, that’s exactly the opposite goal of a company like Facebook or Microsoft. Ideally, companies want to trap your data entirely on their platforms so that you must use their services, even as they become inferior due to lack of competition.

Now, a knowledgeable guy like me could set up, for example, his own identity server and RDF Friend-Of-A-Friend (FOAF) page. However, most people cannot, of course. Moreover, such an technical, intellectual exercise would seem to serve no purpose. FOAF has not the following of Facebook.

I propose a service which I would value today, even if I were the only person using it. It may even improve as more people use it. Am I proposing another social network? No.     Please, no. Facebook wouldn’t want you to link to your MySpace or LinkedIn accounts. No, Mark Zuckerberg want to be MySpace and LinkedIn. He even wants to be Windows.

I propose an elegant identity aggregator. You constantly create yourself and reveal yourself online. You want to make sure that people can see all that you created and all that you are. Additionally, you want to authoratatively say which sites are about you, so the imposters can stay hidden. You want this to be easy. You want this to be elegant. You want it to be open. You don’t want to sign up for another social network.

I envision a beautiful, simple way to aggregate all of your online personas onto a single page which summarizes and links to all of the others. Onto a single page, a single tile. Your tile shows small thumbnails and links to your Flickr photos, knows who you are on Facebook, MySpace, and LinkedIn, points out and highlights the best articles about your accomplishments.

It happens simply, you go to OneTile, tell it about your blog. Then, it intelligently searches for more about you. It guesses that you might be this user on Digg, and that user on Yahoo Answers. Eventually, it picks up enough information to create a personalized, flashy tile for you. The best content about you stands out, but it’s all reachable. Now, when someone searches your name, your tile comes up. It’s impressive, concise, and accurate. Plus, all the data you have collated is easily downloaded through RDF, not locked into OneTile.

As more and more people start using the service, it gains notoriety. I imagine a sea of tiles for everyone online. This is what I imagine the OneTile homepage could be:
Tiles Homepage Mockup

It highlights the most fascinating tiles with the most interesting content. You can zoom in to have a closer look:

Tiles Zooming Mockup

Slick animation zooms through the sea of tiles as you browse through people’s public online lives. Finally, you can choose one tile to examine closely.

Tiles OneTile Mockup

When choosing a specific tile, one person’s tile, you can see their name and all the tiles that are theirs: their flickr pictures, their photo albums, their rss reader on the right, maybe some friends, links to social networks on the left, some research tiles in the middle.

Some people link to blogs when they mention their friends. I think OneTile would be more complete.

My friend Dan O’Shea sparked the idea for me. He described to me a similar vision, and I had this one. We might start building this soon. As I said, if I can make this nice, it would be useful for me myself. If I can help others, that’s just extra pasta.

over 13 years ago on November 21 at 12:48 am by Joseph Perla in art, entrepreneurship, hacks, technology


Telecom companies (AT&T, Verizon, Telefonica, and so on) undermine capitalism. They always act either monopolistically or oligopolistically. If there were any real competition in this space, then our Internet capabilities would blaze at gigabit speeds, text messages would be free, our phones would have myriad more features, and calling anywhere in the world would cost nearly nothing.

Some trailblazers are pushing the limits of what they can do within the system, leveraging the Internet to provide the useful services that telecoms should have provided a decade ago.

For example, I now have a few phone numbers. My personal cell phone number I give out only to people I trust. But every call eventually gets rerouted to my cell phone. Right now, I am out of the country, so my US cell number would be dead under the telecom’s schemes. It isn’t.

If you call my cell phone, the call gets rerouted to my GrandCentral number which I use as my main business line. If I don’t know you, GrandCentral asks you to record your name once so that I can screen the call. In fact, with GrandCentral, I can send you to voicemail, and listen to you record your voicemail live. If you are leaving me an important message and I realize that I want to interrupt and talk to you directly, I just hit a button. Telecoms should have provided this feature ages ago. GrandCentral is free.

That’s not the end of it. I cannot answer a GrandCentral call directly; GrandCentral redirects calls to another number that you can answer. In my case, I reroute to a number I have in San Francisco. It’s my SkypeIn number which I bought with a discount through my Skype Pro annual membership. Skype Pro also comes with voicemail.

The SkypeIn number in San Francisco forwards to my Skype account, so I can answer your calls on my laptop anywhere in the world. The calls can last for hours, it costs me nothing. Of course, I would prefer a free live video chat through Skype.

Moreover, if I am not at my computer, then Skype will forward your call to my foreign phone at cheap Skype Out rates. There’s the magic of the Internet. All of these features, all either free or very cheap. It lets me connect with you as I normally would, (nearly) anywhere in the world.

The telecoms don’t provide these features because they can get away with it. There is no competition which can enter and provide better services. I’m lucky that GrandCentral and Skype exist at all.

over 13 years ago on November 18 at 11:05 am by Joseph Perla in hacks, technology

Catch-22 Videos

I am reading Joseph Heller’s Catch-22 again. It’s hilarious. As I read through Yossarian’s attention-deficit narrative, I can hear his dry, serious voice, “They’re trying to kill me.” I can see the insane soldiers scurrying through abrupt transitions. I can imagine hilarious shorts made from each chapter of the book.

Traditional media companies like CBS are confounded by online video. They don’t know how to make money with it, or at least they didn’t a year ago. They seem to be on the right track now, posting their television shows online. But that is just a start.

As television loses its prominence, IPTV, internet television, all on demand, will be the prominent medium. With every new format comes a new art. Movies require people to go out to the theatre (or wait on a DVD from Netflix) and sit down in front of a large screen for a couple of hours. The kinds of stories you can tell in a movie are different. The Godfather would not have played out the same on television. The Simpson’s doesn’t necessarily lend itself to being a good movie. Movies compact their character development into key scenes building up to a single climax. Television shows extend character development over months and years, with regular climaxes in each episode.

Internet video is very different. People online want information fast. YouTube videos are often just a few minutes in length. The only videos longer which are seen at all are clips which were shown on television: South Park, Colbert Report, presidential debates. I think the videos can be longer on television because of social effects. I can watch House knowing that I can relate to many others who watch House on FOX. If I watch a random video on YouTube, I don’t want to invest half an hour into something not entertaining that nobody else will watch. I might be willing to spend a couple of minutes for a quick entertainment snack.

Which gets me back to my idea. Movie producers constantly try to make quick money by adapting books to the silver screen (see Lord of the Rings, Harry Potter, The Chronicles of Narnia, and so on). But creating a screenplay usually demands that the screenwriter emasculate the book of much of its meaning. The movie format is far too compact. That’s why many recent book adaptions often exceed 120 even 150 minutes in length filled with action and dialogue, while pure movies are often just 90 minutes long.

I think books can easily be adapted not for the silver screen but for the computer screen. They would play out well. Each chapter can be an episode, just 5-10 minutes long. Or shorter. The Internet does not have the limitation of television in forcing the writers to extend or contract episode plots to a specific 23 minute time slot. Each chapter can naturally fill its vessel. Moreover, book chapters are inherently self-contained stories. Many books often end chapters with cliff-hangers. Cliff-hangers like those in The Giver would make me want to wait eagerly for next week’s show. Most TV shows don’t do that for me. IPTV book adaptation can be straightforward, cheap, simple, and much more faithful to the original than movies.

Catch-22 and Harry Potter each have about 40 chapters. A producer can release one chapter-episode each week for nearly a year. At 10 minutes each, that’s 400 minutes of content for the book. One year of a half-hour television show might yield a little more than that if you subtract out advertising. Typical movies are between 90-120 minutes, longer ones might be 150 minutes. An IPTV book show would be able to delve much deeper into the book than the movie with all that extra time. Why not put books on TV? It’s far too difficult to adapt the book to make an interesting show precisely every 30 or 60 minutes. Books aren’t so periodic: there are short chapters and there are long chapters. Only on-demand Internet episodes can handle this new format requirement.

I would love to watch Catch-22. Many other books, like all of Michael Crichton books, similarly would require little editing of the source material to make an entertaining show. The artform is new, and needs to be perfected, but I think it can be done. Robert Rodriguez faithfully kept to the source material for Sin City, and made a good movie. That fit well into a movie because comic books have less depth. Books need a different video adaptation medium.

I would love to make this video version of Catch-22. I would need some people to help me. I would love to learn how to direct and edit video. I imagine it’s incredibly difficult to turn ideas into good-quality video. I have no misconceptions that it would be easy. I do think it would be fun.

over 13 years ago on October 31 at 5:35 pm by Joseph Perla in art, entrepreneurship, technology

Orders of Magnitude

Never go for the 1% or 2% or even 10% improvements. Although these improvements require time and effort to achieve and maintain, these small gains are tiny, often imperceptible, to a person.

No, I say waste no effort even considering any kind of cost-benefit exchange. Ignore these small fruit within your grasp. You will be picking berries all your life because it is easy, because you can see the nearby goal. Instead, spend a little more effort looking for and finding the watermelons. The larger goal might take more creativity to achieve and the end may not easily be in sight, but in the end you spend orders of magnitude less time and effort. Much more importantly, you employ your natural human faculties to create. You enjoy imagining and innovating much more than the tedious and repetitive.

Unfortunately, the world focuses on picking berries. Although we naturally love to reason and think and be creative, for some reason, we also love to accumulate the small improvements. I think the quick satisfaction and low chance of failure cause us to avoid a much more fruitful but less clear end. Established companies depend on squeezing out small improvements in efficiency, at the cost of quality and employee morale. These big companies grew large due to a several order of magnitude innovation, but, now large, the executives do not want to risk innovation. They prefer to squeeze out whatever profit they can from their established product until the company smothers itself under its own morass of details.

Even in your day to day tasks, you focus on small details which seem significant. They, however, pale in comparison to real efforts you can contribute to create orders of magnitudes of improvement. Environmentalism is a great example. Some people go through great pains to recycle what is left after consuming something. But what if they don’t consume it in the first place? Would their life be materially more unhappy? Not at all by any scientific survey. Not at all by any experiment I have done. In fact, if you really sit down to think about it, the next thing you buy you almost definitely do not need and you probably don’t actually want. It just takes effort to go out and buy, to store, to maintain, to consume, and to dispose of. Sometimes it makes you feel guilty (e.g. many snack foods). What actually affects you most is who you are with and how you think about life, others, and yourself. Changing your thinking brings orders of magnitude of change. Buying more baubles does nothing.

People often hate their jobs because they pick berries. At a career fair the other day, I overheard many students asking the recruiters what kind of work they would be doing, will I be “creating new models” or something else? No matter what job you have, in whatever industry, in a large company you will be making small improvements to the existing process. Thats why they hire you and others. The guys at the top found the berries, and they are hiring you to pick them. It doesn’t matter if you are in the research department or if you are the manager of trading. If you are lucky, your job is minimally creative.

But that does not have to be the case. I think it’s possible to move away from this model. The company just needs to make a solid commitment to not make small improvements. All changes, all work, should not only be quantifiable, but easily qualitatively perceptible in value to the outside world. Demand that no efficiency improve things by less than an order of magnitude. Let’s define an order of magnitude as doubling, twice the original. So, ten times better would be a little more than 3 orders magnitude (2^3). A thousand-fold improvement is 10 OM’s. There are few 10 OM in reach but many 3 OM changes.

So, don’t figure out how to improve department communication by 10%. Figure out how to eliminate the 90% of the communications, documentation, and emails which are not only useless but also suffocating. A strong 10 OM improvement.

Usually, these major improvements are so large and fundamentally revolutionary, the improvements are barely measurable:

Don’t increase staff by 50% so you can have more people indexing the Internet by hand. Instead, build an automated search engine that intelligently uses links already online to figure out which web pages are the best. Immeasurable improvement that actually scales.

Don’t stick a slightly faster computer chip and more RAM into your video game system. Instead, design a completely different game controller which couples motion and your whole body tightly with the game. Qualitatively improve the way people experience and invest themselves in your games.

The orders of magnitude improvements are always there. You can always find them, as long as you do not occupy any of your time with the small ones.

over 13 years ago on October 7 at 1:40 pm by Joseph Perla in entrepreneurship, hacks, technology

I want to work

I want to do some work for someone else. Even if I work on just one project in a month, just a few hours, I would love to make just a little bit of money to pay for my food.

While I would be able to do any job very well, I think I can uniquely offer my programming skills. I want to think about, implement, and perfect complicated solutions for people.

PHP web programmers are a dime a dozen, especially outside the US. They can crank out generic, dumb solutions. I want to create programs that others cannot make with traditional programming techniques. I want to leverage my knowledge of Artificial Intelligence algorithms to save people tens of thousands of dollars, to do things that would take far too long and be far too expensive to hire people to do.

I made a website, Ivycall, to describe what I want to do, and how I will do it. Now, I need to talk to people with whom I have worked in the past. I can help them. They can help me. I just need to work up the courage to actually call people. I should have called on Monday. I will make talking to people my only task for tomorrow. I hope that I can muster the strength to do it. Of what am I afraid?

I should stop writing I as much as I have.

over 13 years ago on October 3 at 10:40 pm by Joseph Perla in entrepreneurship, technology

Python is a great language

I am using Python right now to experiment with a new idea. My friend Greg proposes that there be a stronger link between the file system and the Internet, the cloud, accessible from anywhere.

I think he has the right idea. No company currently offers a service that syncs files easily, quickly, and correctly. He proposes even more. Any data which can be on both your computer and the Internet can be tied together. For example, even though a text file and a blog post are very different in terms of format, you can write a program to sync them together.

And that’s what I am testing out right now. I am typing this in VIM, on Ubuntu, into a text file. I will run the command python test.txt to upload the blog post. I much prefer to write using VIM.

The hard problem, of course, is concurrency. If I change the blog over the Wordpress interface, how do I update the file on my computer without something breaking? The text file must pull the changes. Should it check every minute? Every day? As I open the file? Also, how does the computer know that this text file corresponds to a specific blog post when I edit, as opposed to a brand new post? Possible solutions are to create a file with metadata associated with this text file (problems with keeping it up to date), or changing the text file to include the id number (ugly). The solution is not difficult.

over 13 years ago on October 1 at 12:06 pm by Joseph Perla in school, technology

Big signatures in emails and forums are stupid and annoying

Below is the signature added to outgoing mail I assume to every message sent out of (and probably within) JP Morgan. It is huge. Often, this message is longer than the message itself.

If you have ever received an email from someone working at a company, then you understand the confidentiality statement. If this message isn’t for you, then delete it. Duh. This appendage adds no legal force, it does nothing but annoy. You do not need to receive it from every single person who ever emails you.

If you have ever emailed anyone in a financial institution, then it is again obvious that their message about going to get lunch is not an offer or solicitation to buy Google. I don’t need to see this eyesore every single time from everybody I email.

Also bad are massive signatures that literally write out the person’s home address at the bottom of every single email. I don’t need to know your home address every single time I talk to you. Since the signature is already so long, the person adds random quotes or nonsensical statements like “sortir en Pantoufles” etc. If you want people to talk to you about your Pantoufles, then talk about your Pantoufles. Do not clutter your emails with garbage like this hoping for someone to ask you about it.

I want to read your message. I do not want to read or see random garbage over and over.

I propose a solution. Instead of pasting in the whole of the desired signature, simply link to it. So, JP Morgan’s signature might become:

This is not an offer or solicitation:
This message is confidential:

A big signature could turn into:

Come to my house:
Random fun stuff about me:

It’s very short and clear. The massive legal garbage is in the links, easily accessible but not cluttering. The repeated home information and random quotes are shown only to those interested in looking.

Plus, there is the side benefit that you can update the disclaimers, confidentiality statements, addresses, etc. For example, if you hardcode an address or phone number in your signature, it will become old when you move / change numbers. You don’t want someone digging through old email to find a disconnected phone. There might be some legal problems with changing confidentiality statements, but that can be easily resolved with different version urls or the Internet Archive.

I use this signature style.

JP Morgan’s confidentiality statement and disclaimer
This communication is for informational purposes only. It is not intended as an offer or solicitation for the purchase or sale of any financial instrument or as an official confirmation of any transaction. All market prices, data and other information are not warranted as to completeness or accuracy and are subject to change without notice. Any comments or statements made herein do not necessarily reflect those of JPMorgan Chase & Co., its subsidiaries and affiliates. This transmission may contain information that is privileged, confidential, legally privileged, and/or exempt from disclosure under applicable law. If you are not the intended recipient, you are hereby notified that any disclosure, copying, distribution, or use of the information contained herein (including any reliance thereon) is STRICTLY PROHIBITED. Although this transmission and any attachments are believed to be free of any virus or other defect that might affect any computer system into which it is received and opened, it is the responsibility of the recipient to ensure that it is virus free and no responsibility is accepted by JPMorgan Chase & Co., its subsidiaries and affiliates, as applicable, for any loss or damage arising in any way from its use. If you received this transmission in error, please immediately contact the sender and destroy the material in its entirety, whether in electronic or hard copy format. Thank you. Please refer to for disclosures relating to UK legal entities.

Person’s big signature
* Address: 230 [street] Court, Robbinsville, NJ 08691 *
* Phone: (973)641-[digits] AIM: [PersonAIM] *
* E-mail: [person] From: *
* Web:[person]/ *
I am not a physics major. I am not a physics major. I will never be a physics
major. I never will want to be a physics major. I can never be a physics
major. ~Daniel Jonathan Peng
Sortir en Pantoufles: up 292 days, 13:04

over 13 years ago on September 28 at 11:38 am by Joseph Perla in technology


It’s tragic that scientists exist.

People often think that science is about chemicals in test tubes and electricity flowing through big coils and massive explosions. This is not science. Science is grounded solely in the Scientific Method.

At the root of it, the Scientific Method argues for carefully methodical observation, model creation, testing, and re-testing. Each component is very important. Everybody observes things every day. A key step to doing real science is to create a model or hypothesis. The model doesn’t just explain the observations you noticed, but it also makes predictions about other observations that we could make in the future. This makes our understanding of the world more complete, or at the very least our ability to predict events in the world. The next key step in the Scientific Method is testing. This differentiates science from, say, Literature and other Soft subjects. Writers often do not test their theories and exponentiations. They assert it and believe it, without looking for further evidence to disprove it. Finally, re-testing is what has made science truly useful, truly transformative. Openly publishing the models and test results, and asking others to independently retest and verify results. Science asks others to constantly question the models, all models. Constantly and with wanton disdain toward any orthodoxy.

That is why I think it’s tragic that scientists exist. We shouldn’t have to categorize people who test and verify into an entirely different population, occupation. Everybody should be testing to see if what they assert is actually true. Everybody should constantly question themselves and the world around them. Instead, since people do not, society needs to go through great lengths to train, test, and certify that someone follows these patterns of thought. The process takes years, costs money, and excludes potential scientists who don’t want to go through the approval process. It’s inefficient, but partly necessary since people don’t regularly approach questions scientifically.

No, science is no special magical talent. It simply requires that you question the next thing you say. Generalize it, test it, question it, and continue to question it. That is science.

over 13 years ago on September 28 at 12:15 am by Joseph Perla in school, technology

Capturing frames from a webcam on Linux

Not many people are trying to capture images from their webcam using Python under Linux and blogging about it. In fact, I could find nobody who did that. I found people capturing images using Python under Windows, and people capturing images using C under Linux, and finally some people capturing images with Python under Linux but not blogging about it. This instructional post I wrote to help those people who want to start processing images from a webcam using the great Python language and a stable Linux operating system.

There is a very good library for capturing images in Windows called VideoCapture. It works, and a number of people blogged about using it. I was jealous for a long time.

There are a number of very old libraries which were meant to help with capturing images on Linux: libfg, two separate versions of pyv4l, and pyv4l2. But the first doesn’t work on my computer, the two versions of pyv4l cause segfaults because they are so old and not updated, and the last has no code written.

Finally, I learned that OpenCV has an interface to V4L/V4L2. OpenCv is Intel’s Open Source Computer Vision library. It’s excellent, extensive, and has a good community behind it. V4L is Linux’s standard abstraction for reading in video data. V4L2 is the newer version which Ubuntu also has installed.

Plus, OpenCV has very complete Python bindings. Unfortunately, these bindings and how to use them properly to capture images from a webcam are not documented. Only after careful searching on the sizable OpenCV mailing list did I finally find the answer.

Below is code that reads in up to 30 frames per second from a web cam while simultaneously displaying what it reads in. It’s very cool. It uses opencv’s camera acquisition abstraction, PIL, and pygame for speed in the looping. Note that with the images read into Python, you and I can now do arbitrary things with the image. We can flip it, track objects, draw markers, or do really anything.

This is example utility code. It is not a well structured program. Much of the code I use below is from

import pygame
import Image
from pygame.locals import *
import sys

import opencv
#this is important for capturing/displaying images
from opencv import highgui 

camera = highgui.cvCreateCameraCapture(0)
def get_image():
    im = highgui.cvQueryFrame(camera)
    # Add the line below if you need it (Ubuntu 8.04+)
    #im = opencv.cvGetMat(im)
    #convert Ipl image to PIL image
    return opencv.adaptors.Ipl2PIL(im) 

fps = 30.0
window = pygame.display.set_mode((640,480))
pygame.display.set_caption("WebCam Demo")
screen = pygame.display.get_surface()

while True:
    events = pygame.event.get()
    for event in events:
        if event.type == QUIT or event.type == KEYDOWN:
    im = get_image()
    pg_img = pygame.image.frombuffer(im.tostring(), im.size, im.mode)
    screen.blit(pg_img, (0,0))
    pygame.time.delay(int(1000 * 1.0/fps))

over 13 years ago on September 26 at 12:41 pm by Joseph Perla in hacks, technology

Amazon EC2

Amazon provides a great resource to anyone with its Elastic Computing Cloud (EC2). Right now, the service is in limited Beta, but it should grow and become more open soon.

The purpose of EC2 is to let Amazon create and host virtual computers which you can start and stop at any time. You pay by the hour, with no minimum cost. So, if you have a large computing project, you need lots of computers but only for a short time, then, instead of buying lots of computers for this one task, you just create a number of virtual computers on EC2.

Some companies use EC2 as normal web servers. The hard disks on the computers are virtual, so, if it crashes, then you lose all the data stored on the virtual computer. You will have to take serious backup precautions if you want to use EC2 for serving web pages. Nevertheless, you should be doing so any way. I think a really good application of EC2 is for serving a non-stateful service, such as a PDF converter.

You can use Amazon Simple Storage Service (S3) for backing-up some data, or just for doing logging.

To test the service, I am running one virtual computer at It is lightning fast. I can pull up an SSH terminal into it from anywhere. It runs the latest version of Ubuntu Linux, so I feel at home.

James Gardner provides a very thorough walk-through of EC2 using Boto.

over 13 years ago on September 24 at 12:13 am by Joseph Perla in hacks, technology

If You Approach Your Startup Like Building a Ferrari You Will FAIL

I disagree that if you try to perfect your product, you will necessarily succeed. In fact, I contend that you will necessarily fail.

Perfection is impossible. You will never achieve it. Your startup can get 90% of the way there with just a little effort. To get that last 10%, to be close enough to caress perfection, would take orders of magnitude more work. You never launch.

Take the example of designing your homepage. It is incredibly complex and dynamic, with dozens if not hundreds of individual components. Of course, it is also the most important page of your entire site. Now, consider just one tiny aspect of designing this page: where to align the text. You end up spending hours deciding how many pixels from the left side of the screen your text should start. Yes, there is a perfect distance. You can make focus groups and do scientifically-rigorous experiments, then ask a consultant to run all the data you collected through a quadratic optimizer. Or, you can ask the guy next to you if it’s ugly or not. Saves you money, save you time, and you can actually get the valuable part to the end-user.

Better yet, at regular intervals, just run through a quick usability test with someone, anybody. Sit next to them, and ask them to find some information. If she hesitates, then you found an important problem. If she finds it quickly, then congratulations! Your site is ten times better than nine out of ten sites online. If she says that the orange on your hompage should be just a little more red, then you need a different tester. Color, spacing, width, etc are not important. They are means to an end. Don’t spend time measuring and testing and perfecting the means. Spend your time excelling at the ends.

Ferrari is a great brand. But it also doesn’t make the kind of money that Google makes. They only make any amount of money because they are an old company, and because they advertise to people that they spend a lot of time “perfecting” their engines. I’d still bet Toyota engines last longer. Sure, Ferraris can accelerate faster and have a higher top speed, but a lot Ferrari owners don’t race and instead just buy the cars for their cachet.

So, I can probably create a car company overnight which would have as much or more cachet, but without the wasted effort in trying to “perfect” design. All I have to do is take a Toyota, put a slightly different frame on it (Lotus?), and perhaps stud it with diamonds and layer solid gold on everything. Instantaneous excellence. On top of everything, I’d probably also make more money than Ferrari.

over 13 years ago on September 19 at 12:08 pm by Joseph Perla in entrepreneurship, hacks, technology

White headphones

When Apple started to sell the iPod a few years ago, they faced a large uphill battle. Apple’s device held less music than other mp3 players, had fewer features, was large and bulky (cf. current iPods), priced itself too high, and came late to the game. Other companies had already established themselves in the industry. Creative was a leader in mp3 players and Sony still had brand strength from the Walkman.

I think a key feature in the initial branding, growth, and success of the iPod was its distinctive white headphones. Before Apple, most music headphones were black, presumably to blend in. Ask any magician, she will tell you that black is invisible to the human eye. Therein lies the iPod’s brilliance.

Usually, a music enthusiast hides his small music player in his pockets while walking around. The only visible signs that he is listening to an mp3 player or other device are the headphones. By making iPod headphones distinctively white, Apple made sure that everyone around the music enthusiast knew that he had spent big bucks on a premium device from Apple. The white head phones immediately stand out, unlike the black headphones which people overlook. Even if an onlooker were to notice the black headphones, the headphones could have been plugged in to any mp3 player, cd player, or even Sony Walkman tape player.

The white headphones stood as symbols of buying a premium device. They also served to indicate the growing popularity of the device. At first, one would only notice a few headphones and one may ask about the iPod in passing. Later, as one saw that an ever growing number of people peacocked white headphones, one wanted to buy this apparently very popular device even more. Now, Apple owns the color.

We could all learn a lesson from this brilliance, whether Apple did this purposefully or accidentally. Try to make something distinctive. You don’t have to ask your customers to shout your company’s name and product at all of their friends. You don’t have to ask them to put your company’s logo in loud letters on their shirts and pants. You can brand with just a simple, barely perceptible icon and a unique association.

over 13 years ago on September 19 at 11:49 am by Joseph Perla in entrepreneurship, technology

Flights around the world

Google added a feature to Google Earth which lets you explore the sky as easily as you can cities on Google Earth.

Also, someone created a cool Google Earth plugin that lets you visualize the paths of international flights on Google’s virtual 3D Earth. The video gives me a feeling of connectedness in the world. You can see major cities across the US tightly bound by these paths to every other populated part of the world. The flights hug the planet in a thousand thin embraces.

over 13 years ago on September 2 at 8:41 am by Joseph Perla in news, technology

Voicemail sucks

Voicemail sucks for many reasons.

over 13 years ago on June 3 at 9:01 pm by Joseph Perla in technology

Apple of my eye


Apple recently announced at the All Things Digital Conference that iTunes now sells DRM-free songs.

Why is this important? It is the first time that a major music label has agreed to sell music online in a DRM-free format. EMI is the first to respect music listeners and sell non-DRM-crippled music through iTunes. The other music companies and other media companies have been afraid of doing this for years. Now, the other media giants see EMI as a test case. Without risking anything themselves, they want to watch EMI’s success in selling music without crippling DRM.

This experiment needs to succeed for the good of all consumers. We need EMI to make money off of its agreement with Apple. If it fails even due to natural business cycles, you can be sure that other corporations will forever point to the EMI experiment as a justification for Draconian DRM. Music, television shows, games, and even the hardware in your computer is on the verge of being locked down tight with this DRM: digital crippling technology. Success is necessary to point to as an example that trusting consumers yields better value for everyone: artists and listeners.

So, go out and purchase the DRM-free music on iTunes right now (or Amazon as soon as they release their version). Just download iTunes version 7.2 and purchase the premium versions of songs. Buy whole albums: you get music videos, cover art, and a small discount! Just go and buy songs.

Full Disclosure: I bought Apple stock (AAPL) this morning, before the 4% jump ;-) . I owned Amazon stock last week.

over 13 years ago on May 30 at 7:25 pm by Joseph Perla in technology


I just got LaptopConnect from Cingular working.

Haven’t had a chance to use it yet. I get no reception from Cingular in my dorm room. Butler College. It will be torn down in 10 days. Nobody ever liked the look of it.

I am in the last sophomore “graduation” class of Butler College. It is a little sad. The new Butler College, though, will be very cool.

I will report more on the card once I get a real chance to use it.

over 13 years ago on May 25 at 10:46 pm by Joseph Perla in technology

Cingular Customer Service

I just got a LaptopConnect card from Cingular (the new at&t). I called their offices to activate it. Instead of activating the SIM card for Option GT Max 3.6, they replaced my mobile phone’s SIM card.

Then they told me that the old SIM card is now deactivated. It would soon stop working.

And then it did, so I couldn’t even talk to them.

Cingular customer service, like that of most other companies, is terrible.

over 13 years ago on May 25 at 9:49 am by Joseph Perla in technology

Amazon Prime

Let’s talk more about Amazon.

I recently signed up for Amazon Prime. Amazon is brilliant. Immediately after signing up, I bought a dozen items. It is so easy to use. I can understand why Amazon wants to keep their patent of one-click shopping. It is incredibly addictive to see something, and then know that you will have it very soon at the click of a button.

Amazon uses any carrier which is fastest. They have sent me goods using FedEx, UPS, and DHL. My orders almost always arrive in exactly two business days. I can even ship overnight for just $4, if I really need something the very next day. It’s nice to not have to go to CVS or, worse yet, take the unreliable town bus to Wal-Mart. Before Amazon Prime, if I wanted to buy something, I would write it down. Many days/weeks later, after accumulating a list of things to buy, I would go out to the shopping areas and buy everything at once to save time. Now, as soon as I think of something to buy, I get to a computer, order it, and forget about it. I get it within a couple of days without worry.

I share my Amazon Prime account with my parents, so hopefully they will take advantage of this amazing service as well. (You should!)

over 13 years ago on May 24 at 12:00 am by Joseph Perla in technology


About a month ago, after Amazon announced earnings on April 25th, Amazon’s stock went up close to 50%. I thought that was incredible for such a large company. They announced a billion dollars in increased earnings. I had noticed Amazon not long before the announcement, wondering why its price seemed so depressed. It is a solid company, with excellent promise of future growth: S3, EC2, etc. seem like the future of the web. Amazon is also experimenting in completely new venues, such as shoe sales through

After the huge rise, I decided to learn more about Amazon. I signed up for Amazon Prime. I love it. Amazon Prime lets me ship, free two-day shipping, all of the books, toiletries, and even food that I want straight to my dorm room door. Normally, I have to take long treks outside of the heart of campus and plan half a day around making a new purchase. Amazon simplifies this for me, and quickly.

Just last Thursday, given the fact that investors now have faith in Amazon, and that it is a very solid company financially, I decided to buy them. Today, Monday, the stock rose 8%. giving me very healthy earnings. I have not traded in weeks, maybe months. It’s days like these that give me ridiculously good returns.

over 13 years ago on May 22 at 1:33 am by Joseph Perla in technology


For my Physics 210 class, my team and I built a self-balancing robot. It stands on two wheels, and constantly adjusts itself so that it does not fall over, like a Segway. Building something that moves by itself and reacts to its environment is fun and very cool. The link to our final project report is below:

over 13 years ago on May 20 at 11:46 pm by Joseph Perla in school, technology


I want to get a tablet PC. I have very exacting specifications. No such tablet exists. I will have to build it.

Here is my dream mobile computer that is within the realm of current technology:

goals: light, fast, easy to use — basically an electronic legal pad


  • dual touch screen, with 128 levels of pressure, input pencil that has an eraser
  • 12.1″ screen, high resolution — small, light, power-saving but still high information density and easy to handle
  • flash disk drive — for speed and power saving
  • laser keyboard — to save space, weight
  • no wires: bluetooth, wireless power
  • integrated camera/microphone — for videoconferencing
  • tilt sensors — for unique input and automatic screen rotation

Can somebody build it? I expect costs to be almost $4000.

over 13 years ago on May 19 at 2:40 pm by Joseph Perla in technology

Spam Poetry

How can the NOP be useful to us.
He and I were never very friendly.
How Can her contempt be answer’d.
It isn’t just some Darkfriends and a few Trollocs and maybe a Fade
anymore. Operating procedure for integrated circuit(s) cards.
Under Win95 it is often very difficult to READ disabled text against
the disabled background.
A perfect and celebrated “blood,” or dandy about town, was this young officer.
Billy thought of the song but knew that it was not the time to sing it.
Left + 1, Frame.
Whatever it was was clearly gift-wrapped, neatly and beautifully, and
was waiting for him to open it. She talks about sin all the time.

over 13 years ago on April 21 at 1:04 pm by Joseph Perla in art, technology

The Internet Speeds Up

Check out Justin.TV. I had assumed that the project had been going on for several months, but the site had only gone live a few days before I first looked at it. Justin.TV resembles The Truman Show. Justin Kan, a startup founder, wears a camera and microphone on his cap wherever he goes. Everything he does is broadcast live, 24 hours a day, 7 days a week. He turns his hat around when he goes to the bathroom. Sometimes, it is oddly absorbing to watch. Mostly, it is ridiculously boring.

over 14 years ago on April 8 at 3:13 am by Joseph Perla in technology

DRM Dead

Steve Jobs recently announced that EMI, a major music label, will now sell songs on iTunes without DRM. Microsoft’s Zune Marketplace quickly followed. What is DRM? It is what stops you from buying songs from Microsoft and playing them on your iPod. It is what stops you from making backups of your music files. It is what stops you from sharing a song you bought on iTunes with your friend, even though you can share a CD with your friend. It is rights-withholding and useless. It costs media giants millions of dollars to implement, a cost passed down to you.

Finally, the first moves to demolishing DRM are on its way. Mark Shuttleworth, the creator of Ubuntu (an excellent version of Debian Linux), wrote the most eloquent essay on DRM I have ever read. I recommend you check it out.

over 14 years ago on April 8 at 2:44 am by Joseph Perla in technology

Howdy, my name is Joseph Perla. Former VP of Technology, founding team, Entrepreneur. Actor. Writer. Art historian. Economist. Investor. Comedian. Researcher. EMT. Philosophe

Twitter: @jperla

Subscribe to my mailing list

* indicates required

Favorite Posts

Y Combinator Application Guide
What to do in Budapest
How to hack Silicon Valley, meet CEO's, make your own adventure
Your website is unviral
The Face that Launched a Thousand Startups
Google Creates Humanoid Robot, Programs Itself

Popular Posts

How to launch in a month, scale to a million users
Weby templates are easier, faster, and more flexible
Write bug-free javascript with Pebbles
How to Ace an IQ Test
Capturing frames from a webcam on Linux
A Clean Python Shell Script
Why Plant Rights?

Recent Posts

Working Copy is a great git editor
Venture Capital is broken
The nature of intelligence: brain bowls, cogniphysics, and prochines
Bitcoin: A call-to-arms for technologists
Stanford is startups
Today is Internet Freedom Day! DRM-free book about Aaron Swartz's causes