home atom rss

EM-Briefwechsel II: Harald Martenstein schreibt an Eva Menasse

via DIE ZEIT: Homepage
May 12, 2008

Stylefeeder: one million Facebook installs

via Scott Hurff
May 12, 2008

Has Stylefeeder just proven that e-commerce can live inside Facebook?

Stylefeeder, a Boston-based social shopping site centered around a recommendation and rating algorithm dubbed the Maximum Margin Matrix Factorization, just passed the million-member mark with its Facebook app.

The gist of the app is this: it connects to your Stylefeeder account and syncs your "shopping finds" between the two properties.  Your picks then display on your profile box while incoming product recommendations stream to you from within the app.

In effect, it replicates the experience you'd find on the main property within Facebook. 

It appears that the application has had a positive effect on Stylefeeder's main property, as well, shooting up past ThisNext and 200,000 monthly uniques in February to ~1 million uniques in April, according to Compete.

Stylefeeder's also ahead of Mark Cuban's RadicalBuy (3,000 installs), Amazon's Giver (1,300 installs) and Grapevine (1,000 installs).

written by Scott Hurff -- scott.hurff at channeladvisor

Hilarious money doodles

via Cory Doctorow
May 12, 2008

Flickr's Joe D! has a laugh-out-loud set of 75 "refaced" US bank-notes, in which the various dead presidents are reinvented as a series of ever-funnier defacements. Link (Thanks to everyone who suggested these!)

11 Gründe für Disqus

via nico
May 12, 2008
Letztens hatte ich etwas über das Kommentarsystem Disqus gebloggt und danach waren irgendwie noch nicht alle Unklarheiten beseitigt, so dass ich mir vorgenommen hatte, das Thema noch einmal aufzugreifen. Dankenswerter Weise hat Fred Wilson heute dann noch Three Reasons To Use Disqus genannt sowie noch dazu auf ein Blog mit 25 Gründen für Disqus hingewiesen, so dass ich mir einfach nur die besten Gründe rauspicken muss.

Ein paar Sachen gleich vorneweg: ja, Disqus ist bislang noch nicht eingedeutscht, was mir herzlich egal ist. Ausserdem bindet man es per Javascript ein und verliert damit die Kommentare als festen Bestandteil der Seite und damit den Unique Content und sicherlich auch GoogleJuice. Da muß man mit leben können.

So, jetzt aber zu den Punkten, die sehr für Disqus sprechen:

1. einmal anmelden, auf x Blogs kommentieren
2. Kommentare laufen bei Friendfeed rein
3. man kann auf Kommentare per Email antworten, also auch locker von unterwegs
4. man kann Kommentare editieren.
5. ein Dashboard für alle meine Kommentare, Blogs, etc.
6. Spamschutz
7. Status-Infos über Kommentierer (Twitter, Flickr, etc.)
8. Super-einfaches Setup
9. Kommentare gehören mir, ich kann diese exportieren
10. es gibt eine API
11. mit dem gReader-Plugin für Firefox kann man in Google Reader mit Disqus kommentieren.

Ich bin recht angetan von Disqus, falls man das bis hierhin noch nicht gemerkt hat.

That's impossible! A simple mathematical paradox

via Hacker News
May 12, 2008

small backup script

via nospam@example.com (jochen)
May 12, 2008
Today i wrote a small python-script to collect data from my various machines and backup them with rdiff-backup. Just in case someone finds it useful, here's the source:
#!/usr/bin/python

import os
import rdiff_backup.Main
from rdiff_backup.Main import Main as backup

BACKUP_ROOT = "/mnt/backup/"

def get_jobs(config):
    src_prefix = ""
    target_prefix = "%s%s" % (BACKUP_ROOT,
                              config.get("target", "localhost"))
    if "remote" in config:
        src_prefix = "%s@%s::" % (config.get("user", "root"),
                                  config["remote"])
        target_prefix = "%s%s" % (BACKUP_ROOT, config["remote"])
    for item in config["entries"]:
        job = []
        for (option, value) in item["options"]:
            job.append(option)
            job.append(value)
        job.append("%s%s" % (src_prefix, item["path"]))
        target_dir = "%s%s" % (target_prefix, item["path"])
        if not os.path.exists(target_dir):
            os.makedirs(target_dir)
        job.append(target_dir)
        yield job

configs = [
    {"remote": "foobar.com",
     "user": "root",
     "entries": [
         {"options": [],
          "path": "/etc",
         },
         {"options": [
             ("--exclude", "**src"),
             ("--exclude", "**svn*"),
             ("--exclude", "**csv"),
          ],
          "path": "/home/user",
         },
     ],
    },
    {"entries": [
         {"options": [],
          "path": "/etc",
         },
         {"options": [
             ("--include", "**src/google_appengine"),
             ("--exclude", "**src"),
             ("--exclude", "**mp3"),
             ("--exclude", "**iso"),
          ],
          "path": "/home/user",
         },
     ],
    },
]

for config in configs:
    for job in get_jobs(config):
        print "rdiff-backup %s" % " ".join(job)
        reload(rdiff_backup.Main)
        backup(job)
Hmm, the config section is really messy, but the order of options is relevant - dunno how to make it simpler... To avoid getting asked for your ssh passphrase over and over again, you could use screen and ssh-agent:
screen -S backup ssh-agent bash
ssh-add
time ./backup.py

Setting vim up for python coding - PROPERLY.

via programming: what's new online
May 12, 2008

Powerset Launches!

via Matthew Hurst
May 12, 2008

Powerset, which provides a new relationship with web data via innovative interfaces and natural language processing, launched this evening. Take a look at this video:

I'll write more later, but for now, check out other posts I've made on Powerset and NLP. I'll try to keep abreast of the commentary as it comes in. Meanwhile, I'm waiting for Fernando to pounce.

Update: ok, some comments. A couple of things that people are going to get hung up on. Firstly, writers seem to be referring to the technology as context or contextual search - why not call it NLP. Not sure where that is coming from. Secondly (actually, this is more important) pundits are going to write about the wikipedia-only issue. They're not getting it. 90% of search results come from a tiny fraction of web pages due to the huge redundancy on the web and the differences between searcher needs and author/publisher intents. The task isn't to always search that huge set, but to get the answers to the user.

Dynamic Languages Strike Back

via Steve Yegge
May 12, 2008
Some guys at Stanford invited me to speak at their EE Computer Systems Colloquium last week. Pretty cool, eh? It was quite an honor. I wound up giving a talk on dynamic languages: the tools, the performance, the history, the religion, everything. It was a lot of fun, and it went over surprisingly well, all things considered.

They've uploaded the video of my talk, but since it's a full hour,

Announcing pydataportability 0.1 (technical) — mrtopf.de

via HotLinks - Level 1
May 10, 2008

factoryjoe : Announcing pydataportability 0.1 (technical) — mrtopf.de - "Right now the library is very barebone, supporting basic parsing of the hCard microformat, the XFN microformat and XRDS Simple. What comes out of the parser are then VCard, XFNRelationships or Service objects, depending on which parser

next 10 entries