Open Source

Persistent Folders: Or, why ideas don’t matter, and execution does

Friday, December 11th, 2009

I’ll start off this post with a somewhat controversial claim: I invented Dropbox.

I’ll show why this claim doesn’t matter later, but for now, I’ll assure you that it’s true.

How many of you out there use Dropbox? If you don’t, you should — it’s an excellent tool. In its free version, it provides you with 2GB of storage “in the cloud”, using a new kind of folder called a “Dropbox”. What distinguishes a Dropbox from other folders on your computer? The following:

  • Every file put in your Dropbox is automatically (and securely) uploaded to Dropbox’s servers, ensuring you have an offsite backup of all data therein.
  • Multiple computers can gain access to a Dropbox, ensuring files are automatically synchronized across computers without having to use complication version control systems.
  • All files in your Dropbox are versioned, ensuring you can always recover an older version of a file in case you accidentally overwrite a good version.

Dropbox is supported on Windows, Mac OS X, and Linux, and now even has mobile applications, as well. Further, I have a special place in my heart for this service because I started using it almost 2 years ago, and it has acted as a file sharing and project management tool for my own startup’s internal operations at Parse.ly. I was therefore more than ecstatic to discover that this excellent tool and its smart founders had also made it through all of the hurdles necessary to get an early-stage company the financing it needs: they’ve raised over $7 million in financing and have over 3 million users.

But there is another reason I absolutely love Dropbox: because it was my idea. I invented it.

Read the rest of this entry »

Simplifying CSS with 960.gs

Tuesday, December 8th, 2009

I recently did some web design work in collaboration with a graphic designer. She introduced me to what has become my latest favorite piece of CSS code: 960.gs.

960.gs is a CSS grid framework, similar in spirit to Blueprint CSS and YUI Grid. However, 960.gs is at once more minimalist than these approaches, and more thorough.

The author has a detailed blog post explaining his motivations for working on 960.gs, so I won’t rehash each of those. Instead, I’ll just dive into what I liked about it.

Read the rest of this entry »

For Linux/GNOME users: tired of nm-applet? Try wicd

Friday, July 31st, 2009

This post is only intended for those who actually run GNOME and Linux, just a warning :-)

I just replaced network-manager on my Ubuntu Jaunty desktop with wicd.  See wicd here:

What's so great about wicd?  I used to think nm-applet and NetworkManager were the best thing since sliced bread, but have grown increasingly frustrated with these tools over time.  Here's my short list of things I dislike about NM:

Read the rest of this entry »

Trouble connecting to GTalk with Pidgin?

Monday, July 13th, 2009

After my recent upgrade to Pidgin 2.5.5 (on Ubuntu Jaunty), GTalk mysteriously stopped working.  Check out the FAQ entry on the Pidgin developer website for an explanation.  The workaround, not listed there, is to change your "Connect Server" to "talk.google.com".  Pidgin will then prompt you once for a certificate, and after that, it will connect fine.

A developer in #pidgin on irc.freenode.org told me to "fix my router" since my "router was broken".  This even though the problem has now occurred on three separate LANs, two of which I don't own/control.  Routers that are used as DNS servers are very common, and the fact they are broken in this regard is a reality.  Wake up — realities trump ideal every time.  Pidgin should automatically work around this problem, IMO.

Ubuntu Jaunty installation process

Saturday, June 6th, 2009

Today, I decided to finally sit down and upgrade my Ubuntu Intrepid installation to Ubuntu Jaunty. I torrented the live DVD last night (causing my roommates to complain of major Internet hoggage — it was downloading at 1.2MB/sec!). I then performed a full system backup to a remote hard drive, and then repartitioned my drives this morning using gparted, the graphical partition editor that comes with Jaunty’s live DVD.

The process took some time, which is why I saved it for a weekend. To backup my hard drive took about 2 hours, and doing the partitioning operations took about 3 hours. I went out in the nice weather and picked up groceries while it was loading.

When I got back and could kick off the installation process, I was pleasantly surprised by the installation wizard UI. It easily guided me through the partition setup process. Even though in my case I had to make use of the “Advanced” editor, it easily visualized what was going on in my hard drive, and even detected the operating systems I had on there (WinXP and Intrepid).

I set up my new ext3 partitions (after deciding ext4 too unstable for my taste), and got started. I was pleasantly surprised when instead of asking me to reboot my computer, it just started right up. I still had access to a functioning computer while it was installing! Nice. That allowed me to jump on my blog and start on this post :-) I even connected my MP3 player and have some tunes playing!

I was considering doing an upgrade of my system from Intrepid->Jaunty, but decided to give a clean installation a try. I get the feeling that there is some “drag” in my Linux installation which has been running on my machine for almost 3 years now. (Wow, has it been that long since I got this laptop?) I went through multiple releases of Ubuntu via upgrades, and I simply feel my requirements for my system have shrunk so significantly that a clean install was best to ensure my system is configured well and cleanly.

What do I mean by “shrunk” requirements? Well, when I profile the usage of my computer, nowadays 90% of what I do personally happens within Firefox. The remaining 10% are all handed by newer software. Among things that don’t include Firefox are browsing photos and listening to MP3s. Even some of these tasks are moving to the web platform.

For my work on Cog Tree, I really only have 3 development tools I lean on directly: vim, WingIDE (Python), and Eclipse IDE (Java). Javascript development and debugging happens inside a browser. I still lean on VMWare to give me some high-quality creative professional tools from the Windows world, e.g. Photoshop and Topstyle (for CSS). Aside from these, I don’t really need nor want much other software on my system. Any other development tools can be installed on-demand using Synaptic.

Jaunty’s installation percentage is about 50% right now. We’ll see how the system runs once it boots directly off the hard drive. I’m pleasantly surprised that most of my hardware seems to be working out of the box. Even my volume buttons, brightness buttons and media buttons on my laptop now work, which is a nice touch. My sound quality is still a little poor due to a chipset detection problem that still seems to be present in the snd_hda_intel driver. But I’m pretty sure by setting some options in /etc/modprobe.d/alsa-base I’ll be able to get it working better.

People who know me know that I’m very skeptical about my computer and about Linux. I regularly complain about all the little silly regressions that Linux has suffered over the years. I’m also particularly upset about how certain beautiful and essential pieces of software never end up making it into the Linux mainstream, e.g. TuxOnIce. But hopefully, Jaunty will capture my heart this time, and gain some love from this Linux cynic…

Favorite PyCon 2009 talks

Monday, April 6th, 2009

I attended PyCon 2009 this year, which was a whole lot of fun. Quite a few people have asked me which talks I liked, so I decided to put together my “top 5 talks” list, in ranked order:

  1. A Whirlwind Excursion through Writing a C Extension. This talk by Ned Batchelder (author of coverage.py and cog) shows that you can write a Python C extension module in under 20 minutes. This is my top talk because I never thought that my skills in C would be so directly useful in writing Python applications. Considering how damn easy it is to write a basic C extension module, I wouldn’t be surprised if the only reason I ever write C code again is to implement some Python functions or types in C. Truly the best of both worlds!
  2. Reinteract: a better way to interact with Python. Owen Taylor (of GNOME/GTK+ fame) has spent some time over the last few months building a better Python shell. Specifically, it’s a lightweight shell that is meant to be a prototyping or “worksheet” environment a la Matlab, Mathematica, or Maple. Except, you’re running and re-evaluating Python code. It even supports things like in-line graph plotting, but I’ve already used it to experiment with Python web services API. Any Python programmer who has been frustrated with IPython before should check out Reinteract.
  3. Easy AI with Python. This talk might have gotten the #1 slot for most interesting, but not the #1 slot overall because it seems like this talk has been given at a lot of conferences (not just PyCon) over the last few years. This talk introduces some complex AI topics in a very short time frame, and in a very intuitive way. For me, the neural networks example with Jets and Sharks was particularly impressive. Raymond Hettinger is a great presenter, and if you have some time you should definitely check out his recipes on ActiveState’s Python Cookbook and his How-to Guide for Descriptors.
  4. Abstraction as Leverage. A talk by one of my favorite Python authors, Alex Martelli (who wrote the best book on Python on the market, Python in a Nutshell), this talk isn’t so much about Python as it is about software engineering overall. But it’s thought-provoking as his talks usually are.
  5. Class Decorators: Radically Simple. The presenter is the author of the Class Decorators PEP, Jack Diederich. If you like decorators and you are curious about metaclasses, you’ll love class decorators.

Feel free to share your favorites!

Nat’s Pendulum

Sunday, March 18th, 2007

Metacity (the window manager for GNOME) has this annoying and ugly minimize animation that looks like a bunch of cascading rectangles flying at your taskbar. I’ve always hated it, but dealt with it for awhile.

Today, I did some digging on the Metacity bugzilla to see if it was fixed, and found this bug.

Over the course of 3.5 years, this bug has sat on the bugzilla, and still isn’t satisfactorily resolved. There is now a reduced_resources flag in gconf, but this flag only disables the minimize animation at the expense of forcing you to use an ugly wireframe window dragging animation. (Complete, utter insanity.)

Read the rest of this entry »

HOWTO: Get microphone, headphone, automute and sound properly working on an HP DV2000 laptop in Linux

Sunday, March 18th, 2007

Note: This entry is now wildly out of date.  Try these instructions at your own risk.  If I get a few moments, I will revise these instructions in the future. 

I’ve been in contact with an ALSA hacker, Tobin Davis, over a series of patches that provide support for the sound chipset (intel-hda) that is part of the HP DV2000 laptop.

His patches over ALSA 1.0.14rc3 enable the following new features:

  • The headphone port now works, and the speakers automute when the headphones are plugged in.
  • The microphone port now works, with great sound quality.
  • The built-in mic on the monitor now works, though obviously with worse sound quality due to ambient noise.

The new patches aren’t perfect. I’m noticing some sound quality issues at high volumes, and in order to get it to work Tobin had to essentially enable two PCM channels (PCM and PCM-2), which have a very strange behavior. The first one controls the volume directly from the sound system. The second one controls the volume only between the sound system and the speakers (and thus, will have no effect on the sound when the headphones are plugged in). The master volume control effectively modulates both of these. Tobin has told me that the chipset produced by Conexant is particularly weird, which is why he had to this. I find that it’s not so bad, as long as I keep a launcher to gnome-volume-control set up so that I can control it, knowing these rules.

That said, it’s a huge improvement over out of the box sound support for Ubuntu (which is ALSA 1.0.11). Inside this post you’ll find further instructions, which are adapted from a text document Tobin sent his tester group via e-mail. These are step by step instructions to set up 1.0.14rc3 ALSA drivers plus Tobin’s latest patch.

Read the rest of this entry »

“This isn’t elitist, this is egalitarian.”

Sunday, March 18th, 2007

A surprisingly articulate post on OSNews about Free Software:

Asking me to get off my a$$ and code drivers for this baby is what I consider elitist and a very unreasonable demand on the end user. It’s one thing that gives GNU/Linux zealots a very bad name in the real world.

I have sneaking suspicion that you get this response from the Linux community because we feel you’re placing unreasonable demands on us. Your points are valid, but your energy is misdirected. Unfortunately for those who don’t like to code, that’s how software is created and improved. We invite you to participate in our projects in a variety of capacities including but not limited to programming, but of course participation is not required.

I think that Linux “zealots” get a bad name because much of the “real world” believes in a culture of entitlement. Look at everybody living life with a chip on their shoulder, blaming everyone else for their problems and scoffing at the notion that they take responsibility for their own situation. Somewhere along the line we stopped believing in opportunity as a means of realizing our dreams and began to foster the idea that we’re entitled to our expectations. In “Linux land,” we believe that the opportunity to participate in our information society is fundamental to our inherent desire as human beings to better our situation and control our own destiny.

Of course, money can make just about any dream come true. Mark Shuttleworth, for [example], invested $10 million to help make the Ubuntu project a reality. But years ago my great-grandmother told me the story of how my family came to America with nothing but the promise that here they would find a land of opportunity. This is the same promise we make with free software. This isn’t elitist, this is egalitarian.

I have to say, this is part of what makes me love Free Software.  It’s this idea of widespread opportunity.  Sure, F/OSS has power structures and means of coercion/control built into certain parts of it, but for the most part, it’s based upon a very simple, powerful, and egalitarian idea.  “Anyone can improve this, anyone can make it better.”  It’s that kernel of an idea that makes any process — whether software production, book editing, encyclopedia editing, or even beer brewing, more enjoyable to those involved, and, as a side effect, better for the general public.

Hilarious posts on Linux vs. Windows: satire or real thing?

Friday, March 16th, 2007

Take a look at these two posts from a ZDNet debate:

A poster under the name “jerryleecooper” says,

Vista is far more powerful than windows XP, and runs twice as fast. It is also much harder to pirate, and this point more than anything else has the Linux crowd in a panic.

and, in a follow-up post,

Are you saying that this linux can run on a computer without windows underneath it, at all? As in, without a boot disk, without any drivers, and without any services?  That sounds preposterous to me.

Is this serious, or satire?  If it’s serious, it’s absurd.  If it’s satire, it’s genius.