.NET

gc – ein Kommandozeilen-Interface für (Teile von) Google calculator

Kürzlich stellte ich fest, daß die Suchvorschläge von Google, die in der Suchleiste von Internet Explorer oder Firefox erscheinen, den Google calculator mit benutzen:

Das Ergebnis einer Berechnung durch Googles Suchvorschläge

Also habe ich Fiddler angeworfen, um zu schauen, wo die Anfragen für solche Vorschläge hingehen und fand folgende URL (für die Anfrage 1+1):

http://suggestqueries.google.com/complete/search?output=firefox&client=IE8&hl=en&qu=1%2B1

Die Antwort auf diese Anfrage war ein wenig JSON:

[“1+1”,
 [“= 2”,
  “1+1 канал”,
  “1+1 0”,“1+1 tv”,
  “1+1 internet”,
  “1+1 hosting”,
  “1+1.ua”,
  “1+1 ukraine”,
  “1+1.com”,
  “1+1 webmail”,
  “1+1 2 proof”
  ]
 ]

Ich habe das hier mal ein wenig aufgehübscht, eigentlich kommt es in einer langen Zeile. Wie man sehen kann, sind das im Wesentlichen zwei geschachtelte Arrays. Das erste Element des äußeren ist die Suchanfrage und das innere enthält die Vorschläge. Wenn die Vorschläge ein Ergebnis einer Berechnung durch Google Calculator enthalten, dann ist dies der erste Vorschlag, der zurückkommt.

Das wissend habe ich ein kleines Programm zusammengehackt, was seine Argumente an Google schickt und den ersten Vorschlag ausgibt (was hoffentlich ein Rechenergebnis ist):

X:\>gc 1+1
= 2

X:\>gc the speed of light in dozen fathoms per quarter fortnight
= 4.13099844e12 (dozen fathoms) per (quarter fortnight)

X:\>gc mass of earth in lbs
= 1.31708565e25 pounds

X:\>gc 7 liters / 1 kilometer=
= 7.0e-6 m2

Am liebsten mag ich die Möglichkeit zur Einheitenkonvertierung. Leider funktioniert nicht alles. An Naturkonstanten (Lichtgeschwindigkeit, Elementarladung, …) und sonstige hübsche Zahlen (e, π, …) kommt man leider nicht direkt heran. Bei Naturkonstanten schafft man es manchmal mit einer expliziten Konvertierung in deren Einheit (c in kilometers per second), aber das wäre noch ein Punkt, wo man verbessern könnte.

Das Programm wurde in C# 2.0 geschrieben und benutzt LitJSON zum Parsen von JSON. Es läuft auch auf Mono, ich habe dort allerdings noch nicht versucht, es zu kompilieren. Aber da alles .NET 2.0 ist, sollte das eigentlich problemlos funktionieren.

Das Programm sowie der Quelltext hängen an.

UPDATE (2008–10–26 00:34): Ich habe Quelltext und ausführbare Datei wie folgt aktualisiert:

  1. Die Ausgabe erfolgt nun in Unicode (endlich weiß ich, wie das geht)
  2. Falls kein Rechenergebnis vorliegt (also das erste Ergebnis kein = am Anfang hat), werden alle Resultate zurückgeliefert. Das dient hauptsächlich der Nutzung der Suchvorschläge, wie sie vorgesehen waren, aber es hat einige spaßige Seiten:
X:\>gc mankind is
mankind is obsolete
mankind is obsolete lyrics
mankind is obsolete myspace
mankind is doomed
Das Google-rakel:
X:\>gc the future will be
the future will be better tomorrow

Man muß das Internet einfach lieben

Irgendwie witzig … ich suche nach einem recht bestimmten Problem in .NET, nämlich, wie ich auf der Konsole Unicode ausgeben kann. Suche ich danach, kriege ich in etwa folgendes (in absteigender Reihenfolge der Häufigkeit):

  • Kopien von genau einem Hilferuf, allerdings in etwa einem Dutzend verschiedenen Foren (Ok, vielleicht nur bei einigen wenigen davon eingetragen und der Rest hat das automatisch kopiert. Oft sah ich darunter sowas in der Art von “Anmelden, um die Antwort zu sehen”, was mein Vertrauen in die Seite nicht gerade stärkt.)
  • Fragen die von Anfängern gestellt, beantwortet und diskutiert werden. Hier kam wenig mehr heraus als daß man die System-Codepage ändern kann, um andere Zeichen auf der Konsole zu kriegen
  • Hilfreicher Rat von Leuten, die Ahnung haben, wie beispielsweise Michael Kaplan, der im Grunde schrieb, daß die .NET-Konsole kein Unicode kann

Das Ergebnis freut mich nicht so richtig (da ich Unicode mag und keinen wirklichen Grund sehe, warum es immer noch Anwendungen gibt, die so tun, als lebten wir noch in den 60ern), aber was mich mehr stört, ist daß es so verdammt wenig hilfreiches Zeug im Web gibt.

Gut, nun, da ich mich darüber beschwere, muß ich zugeben, daß ich Joel Spolskys Blog sowie das von Jeff Atwood lese. Beide erwähnen stackoverflow.com (was sie auch gegründet haben). Der Grund, warum sie es gründeten, war genau der gleiche, vor dem ich gerade auch stand. Nun muß ich mich nur noch daran erinnern, daß es die Seite gibt und statt zu Google dorthin gehen. Könnte eine Weile brauchen, bis ich meine Gewohnheiten dahingehend ändere.

UPDATE (2008–10–26 00:48): Ich habe nun herausgefunden, wie man der .NET-Konsole Unicode beibringen kann: Einfach UTF-8 benutzen. Ich war naiv genug, zu denken, da Win32 UTF-16 benutzt und .NET-Strings ebenfalls UTF-16 sind, sollte Console.OutputEncoding ebenfalls UTF-16 sein. Naja, da lag ich falsch, hatte aber UTF-8 nicht mal ausprobiert.

Syndicate content