GNOME Zeitgeist is NOT a file manager

Disclaimer: Due to time constraints, I am not an active Zeitgeist developer right now. Seif Lotfy is the man.

Wikipedia has it wrong:

GNOME Zeitgeist is a file manager application for the GNOME desktop environment. Instead of providing direct access to the hierarchical file system like most file managers, GNOME Zeitgeist mainly classifies files according to metadata. This includes time and date of previous accesses, location of use (using GPS positioning), file type, tagging and more. In addition to local files, GNOME Zeitgeist also organizes web browsing history, email and other data sources.

What’s wrong? Zeitgeist is not a file manager. The GNOME Activity Journal can be used to replace a file manager and do file manager-like things, but Zeitgeist is more than that. Check the official Zeitgeist website for details.

If you are a Linux user, how do you use Zeitgeist?


Project management software, wikis, and other technical infrastructure for small startups

Crucial infrastructure for small projects

My latest project is a web application, which is currently in closed beta. I will blog about that more in the coming weeks, but today I’d like to discuss my project’s infrastructure. Infrastructure is one of those topics that you usually just learn about from the companies that you work with. I hope that the information here will be useful to individual developers and small startups. It is difficult to know what has to be done when you’ve never been part of a real-world development team before.

My project’s team is made up of three people. For a project of that size, there are three resources that I consider to be absolutely crucial:

  1. A project wiki – For storing project information like budgets, marketing plans, etc. The wiki should replace most emails between team members. The point of a wiki is to establish one place to look for the latest information, so that you don’t need to search through old email threads to find something.
  2. A project management site – For creating roadmaps, planning new features, reporting bugs, and assigning work to each team member. If you’re going to ignore everything else I write in this post then just setup a project management site. You wont be able to go back and live without it.
  3. A code repository (aka version control system) – For keeping track of changes to your codebase. Also useful for storing all of your source code in one central and backed-up location. (Yes, that explanation is slightly simplified, but using a version control system should be a given.)

Depending on the nature of your project, you may also need a build-bot or continuous integration server. I don’t have any experience in that area. However, I hear good things about  Jenkins (formerly Hudson)Chef, and Integrity. (Edit: As Tollef Fog Heen pointed out, Chef is a configuration management tool and not a CI server.)

… Continue Reading


Protect Your git Repository’s .htpasswd

Update 2: WebFaction fixed their installer. You still need to fix this yourself if the repository was created before Jan 13, 2011. (Details here.)

Update: Git repositories created with WebFaction’s git installer are insecure, even when they’re password protected. Some Apache installations are configured out-of-the-box to protect .htpasswd files. That is not the case with WebFaction.

If you’re running a .git repository on WebFaction that was created by following their documentation, then you must:

  1. Remove the file’s default world-readable permissions, by running chmod o-r .htpasswd
  2. OR: Prevent the file from being downloaded, by adding the following to .htaccess:
<files ~ "^\.ht">
 Order allow,deny
 Deny from all

Of course, the same applies to any .htpasswd file.


bad interpreter: No such file or directory


Earlier today I was trying to run a Python script that I downloaded from the internet. Bash (or the kernel, to be exact) refused to run the script, insisting that python didn’t exist:

$ mem.py
-bash: /home/natan/bin/mem.py: /usr/local/bin/python2.5^M: bad interpreter: No such file or directory

The script agreed to run indirectly with python ~/bin/mem.py
I googled and discovered that the file was encoded in DOS format with improper line endings.

To fix the problem, I copied the contents of the file and pasted them into a new file. Voilà. The shebang became magical again.

Then again, you can also fix the problem permanently. (Don’t.)

ln -s sh "sh$(printf "\r")"

photo credit: Sven & Lirion


Snowy Database Schema

Django - The Web framework for perfectionists with deadlines

For GCI (Google Code In) I’m working on Snowy, the Django-based application to view and synchronize Tomboy notes online. My task is to add support for multiple OpenID accounts.

To get started, I used django_extensions to generate a graph of the database schema.

… Continue Reading

Pages ... 1 2 3 4 5 6 7 8