moeffju.net

QUOTE.fm

Soeben ging QUOTE.fm online, mit einer “So you’ve got a code?“-Seite. Ich schäme mich nicht, öffentlich zuzugeben, dass ich bisher keinen QUOTE.fm-Code bekommen habe. Aber ich habe mir den QUOTE.fm-Code angesehen! Und da fallen zwei Dinge auf:

  1. Man sollte unbedingt mal TIGERBLOOD auf der Seite eingeben (einfach so, nicht notwendigerweise in die Eingabefelder).

  2. Ach, seht selbst. Am besten in Firebug oder so.

Auf jeden Fall sind die Jungs (UARRR, @_martinwolf und @Knuspermagier) aber sehr gut in Design (shiny!) und Marketing (woot). Und auch alles andere an QUOTE.fm sieht ziemlich verdammt gut aus, was man so am Rande mitbekommt.

Also, noch etwas Geduld, bald wird’s awesome.

There's a .̸̸̸̸̸̸̸̸̸̸̸̸̸̸̸̸̸̸̸̸̸̸̸̸̨̨̨̨̨̨̨̨̨̨̨̨.̸̸̨̨ crack in your Twitter

Vor zwei Tagen begann auf Twitter ein Mem:

Dylann (dailydylann) on Twitter.jpg
2011-04-27 von @dailydylann

Ich wurde gebeten, dieses lustige Symbol kurz zu erklären, und da das nicht auf Twitter passt, hier der Blogpost.

Schauen wir uns den interessanten Teil des Tweets mal genau an:

00000000  2e cc b8 cc b8 cc a8 cc  b8 cc b8 cc a8 cc b8 cc  |................|
00000010  b8 cc b8 cc a8 cc b8 cc  b8 cc a8 cc b8 cc b8 cc  |................|
00000020  a8 cc b8 cc a8 cc b8 cc  b8 cc a8 cc b8 cc b8 cc  |................|
*
00000040  a8 cc b8 cc a8 cc b8 cc  b8 2e cc a8 cc b8 cc b8  |................|

Das 2e am Anfang ist ein ganz normaler Punkt – “.”. Danach wird’s spannend: Es folgen Kombinationen aus zwei UTF-8-Zeichen: Hexadezimal 0xCCB8: Unicode-Zeichen U+0338 “COMBINING LONG SOLIDUS OVERLAY” (Solidus = Schrägstrich); und hexadezimal 0xCCA8: Unicode-Zeichen U+0328 “COMBINING OGONEK” (Ogonek = Schwänzchen). Dann folgt nochmal ein Punkt und nochmal ein paar dieser “COMBINING”-Zeichen. Das “COMBINING” bedeutet, dass die Zeichen nicht für sich allein stehen, sondern zu dem Zeichen gehören, das vor ihnen steht, und sich mit diesem, nun ja, kombinieren.

Ich habe diese beiden Zeichen hier nochmal “allein” dargestellt, also über ein Leerzeichen gelegt:

U+0338  ̸ COMBINING LONG SOLIDUS OVERLAY
U+0328  ̨ COMBINING OGONEK

Und hier nochmal als Beispiel für die “Kombination” über den Buchstaben “a” gelegt:

a̸ = a +  ̸
ą = a +  ̨
a̸̸̸̸ = a +  ̸ +  ̸
ą̸̸̸ = a +  ̸ +  ̸ +  ̨ +  ̸

Und mit der Kombination aus dem Original-Tweet:

ą̸̸̸̸̸̸̸̸̸̸̸̸̸̸̸̸̸̸̸̸̸̸̸̸̨̨̨̨̨̨̨̨̨̨̨ = a +  ̸ ̸ ̨ ̸ ̸ ̨ ̸ ̸ ̸ ̨ ̸ ̸ ̨ ̸ ̸ ̨ ̸ ̨ ̸ ̸ ̨ ̸ ̸ ̨ ̸ ̨ ̸ ̸ ̨ ̸ ̸ ̨ ̸ ̨ ̸ ̸

Die Kombination aus mehrfachen “COMBINING”-Zeichen akkumuliert also – an ein Zeichen mit Häkchen unten wird ein weiteres Häkchen angehängt. Damit wächst das Zeichen natürlich in der Höhe. Durch die Slashes wird die Fläche “ausgefüllt”, durch die Häkchen wird es nach unten erweitert.

Für mehr Spaß mit Unicode empfehle ich als Einstieg den Wikipedia-Artikel zu UTF-8. Viel Spaß beim Durchlesen sämtlicher Unicode-Planes – Unicode kodiert momentan ja nur 1.112.064 Zeichen.

PS: UTF-8 ist leider immer noch nicht perfekt umgesetzt. Schaut man sich z.B. den Original-Tweet über den obigen Link an, sieht man die einzelnen Zeichen statt der Kombination, weil Twitter offenbar eine Dekombination in ihrer Pipeline haben. In der User-Timeline und in Twitter-Clients sieht es aber richtig aus.

Using BIGINT columns in rails migrations

Sometimes, you need to use BIGINT columns in your databases, e.g. when working with Twitter whose IDs are over 32 bits long now, and will be 64 bits long soon.

After some googling which didn’t bring up any good results, a quick look into the adapter code helps us:

# activerecord-3.0.0/lib/active_record/connection_adapters/mysql_adapter.rb
# Maps logical Rails types to MySQL-specific data types.
def type_to_sql(type, limit = nil, precision = nil, scale = nil)
  return super unless type.to_s == 'integer'

  case limit
  when 1; 'tinyint'
  when 2; 'smallint'
  when 3; 'mediumint'
  when nil, 4, 11; 'int(11)'  # compatibility with MySQL default
  when 5..8; 'bigint'
  else raise(ActiveRecordError, "No integer type has byte size #{limit}")
  end
end

So, use integer with :limit => 8 to get a bigint column. If you need a primary key of type bigint, you need to pass :id => false to your create_table call, then define the id column manually:

class CreateDemo < ActiveRecord::Migration
  def self.up
    create_table :demo, :id => false do |t|
      t.integer :id, :limit => 8
    end
  end
end

Twitter-Status mit XING synchronisieren via Xwitter

Mit Xwitter kann man seinen Twitter-Status selektiv mit XING synchronisieren. Dazu muss man nur auf xwitter.de die Schritte durchlaufen und danach Tweets, die nach XING laufen sollen, mit ‘#xwitter’ taggen. Man benötigt dazu aber noch einen XING Premium-Account.

Interessant daran finde ich, dass sich bei XING endlich was zu bewegen scheint. Vor dem Hintergrund sinkender Neuanmeldungen und sinkender Premium-Mitgliedszahlen, außerdem dem sehr großen Momentum, das LinkedIn hat, ist XING nach Ansicht vieler meiner Bekannten jetzt im Zugzwang. Ein erster, zögerlicher Schritt war damals die Übernahme von SocialMedian durch XING und damit einhergehend die Öffnung für interne OpenSocial-Anwendungen. Den großen Schritt einer offenen API hat man sich aber noch nicht getraut, und mit SocialMedian/OpenSocial ist auch nicht all zu viel passiert - es geht schleppend langsam voran, gerade, wenn man das Innovationstempo im “umliegenden” Web sieht.

Um so erstaunlicher dann, dass Xwitter nur wenige Tage nach der Einführung eines ähnlichen Features beim großen Konkurrenten LinkedIn erscheint, noch viel erstaunlicher aber: bei Xwitter handelt es sich um ein halb-offizielles Projekt des VP Engineering Rails von XING, Andreas Gehret. Und er nutzt dazu eine inoffizielle API namens XWS, und bezeichnet es auf Xwitter öffentlich als ‘unfortunate’, dass diese inoffiziell sei.

Ich bin gespannt, was da noch kommt. Ich hoffe, dass XING nicht in einer knee-jerk reaction Xwitter offline nimmt und Andreas Gehret Ärger bekommt. Statt dessen sollte XING die Gelegenheit nutzen und die internen ‘Change Agents’ mal machen lassen: Einen Teil der API öffnen, OpenSocial für alle zulassen, und einige Features von Premium auf Basic-Mitgliedschaften übertragen. Ansonsten wird der mächtige Konkurrent LinkedIn (oder vielleicht sogar Facebook) in gar nicht allzuferner Zukunft XING verdrängen.

Verbesserungsvorschläge habe ich auch schon: 1. Scheint Xwitter momentan regelmäßig zu pollen, also alle registrierten Nutzer abzuklopfen. Das bedeutet, dass es immer eine Weile dauert, bis der Status übernommen wird, und dass man irgendwann in die Twitter-Limits reinläuft. Ich würde daher auf die Twitter Realtime-API umstellen, und nur bei Protected Accounts pollen; 2. würde ich den Hashtag kürzer machen; und 3. würde ich den Hashtag auf XING-Seite dann aus dem Tweet entfernen.

Update: Xwitter ist jetzt Teil der neuen XING Labs, womit die Datenschutzbedenken ausgeräumt sein sollten. Außerdem ist der Hashtag auf #xng verkürzt worden.

Aufgeräumt: #amazonfail

Bei Amazon haben über Ostern eine ganze Menge an Produkten ihren Verkaufsrang verloren und sind in der Suche nicht mehr auffindbar. Da das Problem vornehmlich Literatur betrifft, das von der heterosexuellen, monogamen Norm abweicht - Gay/Lesbian/Bi/Transgender, Queer, Polyamory, etc. - lag für viele der Schluss nahe, dass Amazon hier absichtlich ihnen ungenehmen Inhalte zensiert, vielleicht gar absichtlich zu Ostern.

Sinnvolle offizielle Statements von Amazon gibt es nicht. Die Support-Dronen, stets bemüht, aber unbedarft gegenüber dem #amazonfail Shitstorm, der sich draußen zusammenbraute, haben es nicht zu mehr als zu “diese Bücher wurden als ‘Adult Product’ eingestuft, und ‘Adult Products’ werden aus dem Verkaufsrank und der Suche genommen”. Das ist allerdings keine neue Policy von Amazon, die nur bisher wenig Wellen geschlagen hat, weil die meisten ‘Adult’-Produkte nie als ‘Adult’ markiert wurden.

Sehen wir uns doch mal Amazon, die Firma, an: Sie sitzen in Seattle, einem Staat, der bisher nicht für religiösen Fanatismus bekannt ist. Das Team ist ein Haufen liberaler Kommunisten-Hippies, und die Firma hat eine mustergültige Gleichstellungspolitik, die sich nicht nur auf biologisches Geschlecht, sondern auch auf sexuelle Orientierung usw. erstreckt. Klingt nicht nach der Art Organisation, die im Handstreich mal schnell eine Menge Bücher verbrenntzensiert.

Betrachten wir Amazon, die Webseite bzw. den Dienst: Amazon ist längst nicht mehr nur der Online-Buchhandel. Man verwaltet bei Amazon eine gigantische Datenbank von Produkten. Diesen Bestand zu pflegen, würde einen unglaublichen Aufwand bedeuten - und deshalb pflegt Amazon ihren Bestand kaum mehr als z.B. Google ihren Index von Hand durchkämmen. Wenn Fehler und Inkonsistenzen gemeldet werden, schaut man sich die Sache mal an, ansonsten legt man die ganze Arbeit in die Hände von Algorithmen. Und so werden auch die Listen von ‘Adult Products’ höchstwahrscheinlich erzeugt: Wenn sich genug Leute beschweren, wird das Produkt erst mal geflaggt, und dann auf Anfrage - manuell, und damit langsam - wieder freigeschaltet.

Normalerweise ist das kein Problem - dank der guten Suche und der Empfehlungs-Engine bekommt man bei Amazon nur selten Dinge zu sehen, die man nicht sehen möchte. Noch seltener Dinge, über die man sich auch noch beschweren möchte. Das heißt aber eben auch, dass der Schwellwert für eine Aktion relativ gering ist. Alles, was es also braucht, um unerwünschte Inhalte aus Amazon rauszubekommen, ist eine konzertierte Aktion, wie sie entweder (religiöse o.ä.) Interessensgruppen starten können, oder eben Internet-Trolle.

Dabei spricht einiges für die Bantown-Theorie von tehdely. Entsprechend versierte Trolle könnten bei Amazon recht schnell automatisiert eine ganze Gruppe von Produkten flaggen lassen. Dabei wählt man Produkte, die sich an eine Minderheit richten, die sich sowieso schon sehr unterdrückt vorkommt und daher schnell und laut zurückschlägt. Und, mit etwas Glück, kommt dann auch noch ein “Glitch” hinzu, z.B. falls Amazon aus vielen Beschwerden automatisch Schlüsse zieht und zum Beispiel vorsorglich auch alle ähnlichen Produkte entfernen würde.

Bonuspunkte gibt es für die Wahl des Zeitpunktes - über Ostern werden die Büros auch bei Amazon nicht voll besetzt sein, und diejenigen, von denen man sich Stellungnahmen erhoffen würde, sind ebenso schwerer erreichbar wie die Medien, in denen die Stellungnahmen auftauchen würden.

Ohne aber irgendein Feedback von Amazon zu haben, finde ich die aktuellen Reaktionen - so sehr mir auch die Causa Rede-, Meinungs- und Sexualitätsfreiheit am Herzen liegt - übertrieben.

Update (2009-04-13 23:17 CEST): Über zwei Ecken habe ich nun aus Amazon gehört, dass die Glitch-Theorie doch wahrscheinlicher ist. So sollen knapp 60.000 Bücher versehentlich falsch kategorisiert worden sein, und die Automatik hat dann den Rest erledigt und die Bücher aus Sales Rank und Suche entfernt. Man arbeitet wohl mit Hochdruck an der Behebung der Sache und ärgert sich über die schlechte Außenkommunikation.

Update (2009-04-14 10:57 CEST): Seattle PI scheint die Glitch-Theorie zu bestätigen.

Update (2009-04-14 16:30 CEST): Wieso behauptet jeder, der Kundenservice habe eine “neue Policy bestätigt”? Die Policy, Adult-Produkte zu filtern, gibt es schon lange, und mit keinem Wort wird vom Support eine “neue” Policy erwähnt! Anyway, hier gibt es dann einen Inside Look eines Amazon-Mitarbeiters. Und #SorryAmazon. Wie gesagt.

Update (2009-04-16 16:27 CEST): Clay Shirky zum Thema. Die Kommentare sind ebenfalls interessant.

SPIEGEL Online fällt auf Tech-Humour-Site rein

Schon die Überschrift ist reißerisch: “Twitter-Community fällt auf Ente rein” titelt der SPIEGEL Online. Und sicher hätte man mit etwas gutem Willen noch stärker herausstellen können, dass eine Ente ja irgendwie auch ein Vogel ist, und Twitter, haha. Na gut.

Jedenfalls behauptet SPON, “das amerikanische Technik-Blog BBspot” habe behauptet, Twitter wolle neue Premium-Modelle einführen: Für $5 bis $250 pro Monat solle man Zusatzfeatures, mehr Tweet-Länge, und diverse Goodies bekommen können.

“Das amerikanische Technik-Blog BBspot”? Moment mal. Wir tun mal völlig ahnungslos und machen zwei Klicks von Spiegel Online weg, einen auf “BBspot”, und einen auf “About”. Und dort lesen wir, oh Wunder:

Called “the world’s greatest tech humour site” by The Register, BBspot creates entertainment for the geekier side of the world.

So so, “tech humour” also. Lesen wir weiter (Hervorhebung von mir):

BBspot produces a variety of features like fake news stories satirizing the tech and political worlds, […]

Das erwähnt SPON dann ein paar Absätze später. Und nur, weil SPON nicht versteht, dass die meisten Twitter-User die Satire wohl verstanden haben, und einige das “ihresgleichen” (Zitat SPON) auch explizit mitgeteilt haben, herauszufinden nämlich mit der von SPON selbst verlinkten Twitter Search, musste das Internet jetzt mit so einem Artikel zugemüllt werden.

Mit vielem Dank an Brian Briggs von BBspot und die Captains Obvious von SPON.

(Falls jemand bemerkt, dass meine Überschrift nicht weniger reißerisch ist, gratuliere ich schonmal: Ihr seid besser als der durchschnittliche Twitter-User in den Augen von SPON. Wer mag, darf sich aber die Überschrift “SPON versteht nicht, dass andere auch Satire verstehen können” denken, oder “SPON findet Twitter doof”. Das wären dann genau so wenig News, wie der Artikel bei SPON.)

Update: Etwas klarer formuliert.

Protecting your tweets is NOT meaningless

Chris Charabaruk writes in his blog:

Do you protect your updates on Twitter? Well, don’t bother. Thanks to the magic that is Twitter Search, the whole world can see what you tweet with little trouble, whether you protect your tweets or not.

Er, no.

When and while your account is unprotected, all tweets you post go out into the search index of Twitter Search, Google, and into FriendFeed at least. When you protect your account, these don’t get deleted - what’s out is out, there is no way to take it back.

Tweets sent while your account is protected will not be indexed in twitter search, they will not be visible to Google, and AFAIK they won’t be sent to FriendFeed either.

Keep in mind that if you unprotect your account later, all your tweets can potentially be indexed. Twitter Search does not currently do this, they only index new tweets. Google doesn’t normally crawl far back. But still, keep in mind it’s possible.

Unless you have a reproducible bug - which you should then report to Twitter, please - don’t make huge claims.

Codified, portable Twitter API

With Twitter’s, let’s say, not so great, uptime record lately, I think it is time the Twitter API gets codified and Twitter clients start supporting different API endpoints.

For example, today you can already use fanfou.com instead of Twitter, which supports most of the Twitter API with mostly the same results, except it’s way more stable. The problem is that you can’t use your favourite Twitter clients to access fanfou, because they’re hardcoded to the API endpoint https://twitter.com/.

Then there’s Twitter proxy services that just queue tweets until Twitter is reachable again. Those, too, can only be used via their web interface and not your Twitter client.

Now, imagine this: Imagine your Twitter client allowed you to define your own Twitter API endpoint. So, by default, it would point to https://twitter.com/. But you could also write your own API proxy that would, for example, send tweets to a queue service if posting them didn’t work, that would cache your replies and direct messages so all your clients could access them without counting towards the API limit, etc.

You’d just write a handler in your favourite language and point your Twitter client at it: if I set the endpoint to http://moeffju.net/twitter-proxy/, the client would fetch direct messages by polling http://moeffju.net/twitter-proxy/direct_messages.json. Or you could pass through everything, but merge Summize results into the /replies feed.

Or you could simply set the endpoint to http://fanfou.com/ and instantly turn your Twitter client into a Fanfou client.

I would further suggest to extend the Twitter API with a public function to query available methods, but as a basic first step, please, Twitter clients, allow me to define my own endpoint base URL.

Alternate Reality Zahnrasiererhandy

Hach ja, *gähn*, es geistert immer noch durch Twitter und die Blogs, wohl über 100 Leute haben jetzt je ein Handy, eine Zahnbürste und einen Nassrasierer mehr als noch vor einer Woche, und via @kosmar gibt’s jetzt auch Hinweise auf die Hintergründe: Es scheinen die VM-PEOPLE dahinterzustecken, und jemand hat @kosmar einen Spoiler geschickt. Alternativ steckt kosmar selbst mit drin und das ganze ist ein Alternate Alternate Reality Game, ein A-ARG, ein Meta-ARG, vielleicht gar ein ARG 2.0. Gar arg ARG, sowas.

Hintergründe zu @mopo

Und hier jetzt die Hintergründe zur @mopo:

Selbst darüber berichten darf die MOPO übrigens nicht - jedenfalls nicht offiziell.

Nachtrag: Ich möchte ja nicht der letzte sein, der nicht behauptet, zu wissen, wer dahinter steckt. Also: Ich weiß, wer hinter @mopo steckt - werde es aber für mich behalten.