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:
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:
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):
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:
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):
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.
elliotth's blog hat einige recht interessante Artikel und ich hab ein paar alte mal überflogen und stieß auf Humans pay for context switches too. In gewissem Sinne scheint es sinnvoll, Seiten rückwärts zu numerieren, auch wenn es für die meisten Menschen wohl etwas seltsam anmutet.
Ich fragte mich allerdings, ob man das in Word mit Bordmitteln hinbekommt. Seitenzahlen sind ja letztendlich nur Feldfunktionen und mit denen kann man allen möglichen lustigen Kram machen. Also schaute ich mich mal ein wenig um. Es gab nur ein Problem: Ich habe nicht gefunden, wo man eine Feldfunktion einfügt. Und das in dem tollen neuen Office 2007, wo alles wunderschön organisiert ist, ohne überfüllte Menüs und mehrfach verschachtelte Dialoge (nun ja, zumindest die Dialoge sind immer noch da, nur für die meiste Zeit eher versteckt). Das wäre nun das erste Mal, seit ich Office 2007 benutze (März 2007), daß ich etwas nicht auf Anhieb gefunden habe.
Mal schauen, warum: Das Ribbon hat einen Tab namens “Einfügen” (der im Grunde für alles da ist, was Einfügen bedarf, außer Zitate und ähnliches, die sich unter “Verweise” finden [was im Englischen wesentlich sinnvoller benannt ist]) mit folgenden Abschnitten:
Von diesen Abschnitten sind Seiten, Tabellen, Illustrationen und Symbole von vornherein Unfug zum Suchen, also habe ich sie gleich übersprungen. Kopf- und Fußzeile hätte was haben können, da Dokument- und Abschnittstitel (die man häufig in der Kopfzeile findet) sowie Seitenzahlen (die man häufig in der Fußzeile findet) ja Feldfunktionen sind, aber auch dort nichts. Hyperlinks: Auch Fehlanzeige. Was Text übrigläßt. Wo ich nicht auf die Idee kam, in die “Schnellbausteine” zu schauen, die nicht nur (wie erwartet) die Felder Dokumenttitel, Abschnittstitel, Autor, Datum, etc. enthält, sondern auch allgemein einfach Feldfunktionen:
Das fand ich etwa eine halbe Minute bevor ich diesen Eintrag schrieb … aber eine halbe Stunde nachdem ich es gesucht habe …
Lustigerweise fand ich es sofort in Word 2003:
Was Seitenzahlen rückwärts angeht, folgendes läßt sie abwärts zählen: {= {NumPages} – {Page} + 1}. Die geschweiften Klammern müssen allerdings mit Strg+F9 eingegeben werden, da es eine Feldfunktion ist.
Ich stieß heute auf eine recht interessante Reihe von Artikeln (über Linux Hater's Blog): Desktop Linux Suckage auf Elliot Hughes' Blog.
Ich bin nun etwa zur Hälfte durch und es liest sich angenehm. Nicht so beleidigend wie Linux hater (obwohl ich mich daran nicht so sehr störe, andere allerdings schon).
Ich bin aber immer noch Windows-Nutzer und das wird auch erstmal so bleiben, aber einige Dinge, die er anspricht sind nicht nur auf Linux und Software dort anwendbar.
Heute mal etwas, was so ziemlich gar nichts mit Computern zu tun hat. Ich bin ein begeisterter Leser von George R. R. Martins Bücherreihe A Song of Ice and Fire (Das Lied von Eis und Feuer, ich lese allerdings auf Englisch). Ich hatte die ersten drei Bücher schon vor einigen Jahren gelesen und bin gerade fertig, diese noch mal zu lesen sowie den vierten Band A Feast for Crows (der damals noch nicht erschienen war). Nun warte ich auf A Dance with Dragons, es kann sich ja nur noch um Jahre handeln.
In den vergangenen monaten habe ich auf Wikimedia Commons auch eine Vielzahl Vektorisierungen von Flaggen gemacht und kam auf diesem Wege zur Vexillogie und Heraldik und habe mir darüber ein wenig angelesen. Nicht viel, aber ausreichend um Wappenbeschreibungen zu verstehen und eventuell auch selbst eine korrekte Beschreibung von Wappen zu geben.
Wie auch immer, ich stellte mit A Feast for Crows eine leichte Veränderung in GRRMs Serie fest. Seine Beschreibungen von Wappen der diversen Häuser von Westeros waren immer recht einfach gehalten (bis hin zu A Storm of Swords), ihre Beschreibungen waren selten mehr als “gemeine Figur auf einem farbigen Feld” und üblicherweise auch ohne heraldische Begriffe für Tingierungen oder gemeine Figuren zu nutzen. Das hat sich mit A Feast for Crows ein wenig geändert. Es tauchten komplexere Wappen auf (komplexere Tingierungen, Beizeichen, etc.) sowie die Verwendung einiger heraldischer Begriffe wie barry, gyronny, countercharged, etc. Ich hätte mir die Beispiele im Buch vielleicht herausschreiben sollen, gerade kann ich keine konkreten Beispiele geben. Ich denke aber, GRRM hätte mit dem bisherigen Stil weitermachen sollen. Nicht, daß es mich im Besonderen stört, aber viele Leute verstehen nicht genug von Heraldik um aus den Beschreibungen etwas sinnvolles zu machen und da wären die einfacheren Beschreibungen vielleicht angebrachter.
Vielleicht bin ich auch der Einzige, dem das aufgefallen ist (zumindest wurde mir von anderen mitgeteilt, daß sie es nicht bemerkt hätten), aber für mich ist es ein stilistischer Bruch, der nicht notwendig war.
Nachdem ich gestern auf meinem anderen Rechner wieder ein System aufgesetzt habe, habe ich mich dazu entschieden, mal wieder Winamp als Audio-Player zu verwenden. Ich hatte ihn zu meinen Windows-2000-Zeiten benutzt, bin allerdings nach dem Umstieg auf Windows Vista zum Windows Media Player gewechselt. Ich mochte die Medienbibliothek mit den Albencovern und daß ich nicht länger alle Dateien im Dateisystem in Ordnung halten mußte. Aber WMP war etwas langsam auf meinem schon leicht angegrauten Pentium 4 mit 2.53 GHz.
Also Winamp. Auf einem Windows Vista. Der erste Start zeigt einen netten Dialog, der mit ermöglicht, ein Skin auszuwählen (Warum eigentlich? Ich habe keine Skins mitinstalliert), Dateiverknüpfungen zu ändern sowie die Entscheidung zu treffen, ob ich anonyme Nutzungsstatistiken verschicken möchte.
Das Lustige kam danach: Nachdem ich mich durch den Dialog gekämpft habe, wollte Winamp Administratorrechte (UAC und so). Zweimal! Und jedesmal, wenn man Winamp startet fragt er noch einmal nach (stört sich aber netterweise nicht daran, wenn man es ihm verwehrt). Ich frage mich allerdings, warum. Weder Dateiverknüpfungen noch irgendwas anderes, was ich in den Optionen gefunden hätte, erfordert Administratorrechte. Nichts. Dem Gebettel nachzugeben und es einfach zu erlauben, ändert auch nichts (anders als bei Eclipse 3.3, wo man Eclipse einmalig als Admin ausführen mußte, damit es lief). Winamp fragt dennoch fröhlich bei jedem Start weiter nach Adminrechten. seufz
Andere Sache: Da ich nur eine Tastatur, eine Maus und einen Monitor habe, muß ich entweder alle naselang Maus und Tastatur umstecken oder aber die Remotedesktopverbindung nutzen. Momentan mal wieder letzteres. Ich dachte mir, da ich auf dem anderen Rechner eh gerade nicht viel anderes mache als ein paar Widerlichkeiten auf der Kommandozeile und Musik hören, brauche ich nicht ganz so viele Farben und hab die RDP-Verbindung einfach mal auf 8 Bit runtergestellt.
Das mochte Winamp nicht so wirklich. Das war quasi gleich der Schocktod beim entsetzten Anblick von nur 256 Farben oder so. Ich frage mich zwar, ob die Musik so farbenfroh ist, daß ihm das nicht reicht, aber er starb sehr schön reproduzierbar gleich beim Starten. Ich ash den UAC-Dialog und im Hintergrund dann gleich das Windows Error Reporting. Unschön. Bei höheren Farbtiefen ging es dann wieder.
Randnotiz: Die Medienbibliothek von Winamp ist (zumindest für mich) deutlich verwirrender als die vom Windows Media Player und irgendwie auch nicht sonderlich viel schneller. Ich werd Winamp also möglicherweise wieder wegtun.
UPDATE (2008–09–04 18:24): Die Sache mit UAC ist behoben. Es gibt eine gut versteckte Option “Restore file associations at Winamp start-up”, die dafür verantwortlich war. Nimmt man das Häkchen weg, so verschwindet die Nachfrage beim Start. Trotzdem, Dateiverknüpfungen ändern ist etwas, was auch ohne Adminrechte geht.
Ein Kommilitone fand kürzlich folgende Signatur bei /.:
“Anyone else notice what x+k+c+d adds to? 42! :) [x=24,k=11,c=3,d=4]”
Interessante Entdeckung. Ich frage mich, ob das beabsichtigt ist. Und das geht sogar noch weiter: Wenn man die ASCII-Werte der Zeichen addiert, erhält man 120 + 107 + 99 + 100 = 426, was die 42 ebenfalls enthält.
Besagter Mitstudent entdeckte dann noch eine Verbindung zwischen diesen beiden Zahlen:
<sh> sebastian@madlax:~$ factor 426 <sh> 426: 2 3 71 <sh> sebastian@madlax:~$ factor 42 <sh> 42: 2 3 7 <sh> This is a *bit* creepy for a coincidence.
Beide Zahlen sind also sogar Sphenische Zahlen und die Primfaktoren von 42 sind in den Primfaktoren von 426 enthalten, zumindest auf die gleiche Weise wie 42 in 426 steckt..
Irgendwie beängstigend. Also hat xkcd eine Verbindung zu 42.
Hach ja, Rekursion, das Lieblingstierchen jedes Programmierers. Sicher ist sowas auch in Batchdateien möglich (Ich versuche übrigens immer noch Turingvollständigkeit nachzuweisen :-)).
Der erste zaghafte Test wäre erstmal eine unendliche Rekursion:
Und siehe da, sie funktioniert:
Genau das, was wir haben wollten. Etwas sinnvolleres als einen Stacküberlauf hatten wir uns ohnehin nicht erhofft. Also offensichtlich kann cmd Rekursion.
Dann sollten wir das auch mal mit einem zumindest ansatzweise praxisbezogenem Problem testen: Fakultäten. Ungeachtet dessen, daß man die besser iterativ berechnet. Wir wollen aber nur sicherstellen, daß die Rekursion vernünftig funktioniert:
Wir brauchen hier leider eine temporäre Variable, da cmd keine Berechnungen ohne SET /A erlaubt, aber ansonsten sieht es in etwa so aus, wie es sollte. Der Rekursionsabbruch wurde am Anfang des Unterprogramms durch ein IF abgefangen, leider gibt es keine funktionalen Nettigkeiten wie verschiedene Funktionsdefinitionen hier.
Und funktioniert das nun auch? Aber sicher:
Mein Taschenrechner sagt mir sogar, daß die Werte richtig sind. 12! ist leider die höchste Fakultät, die man damit berechnen kann, da wir auf 32-bittige vorzeichenbehaftete Ganzzahlen beschränkt sind. Ein kleiner Fehler ist noch vorhanden, wenn man negative Zahlen als Argument angibt (wieder eine unendliche Rekursion). Das ist allerdings in der angehängten Version behoben, ebenso bekommt man in selbiger eine hilfreiche Nachricht, wenn man die Batch ohne Parameter aufruft.
Und nur so nebenbei, eine nette Variante, Fakultäten zu berechnen, indem wir einfach den eingebauten “Taschenrechner” von cmd benutzen:
Wir basteln uns hier einfach die komplette Berechnung in einer Zeile zusammen und lassen die dann von SET /A auswerten. Nichts großartig aufregendes aber wahrscheinlich schneller als Rekursion.
schubidu was unexpected at this time.
Was ist hier passiert?
Nun, schauen wir den folgenden Code an:ECHO-Befehl aufhört? Richtig, gerade vor der schließenden Klammer. Umgeschrieben auf mehrere Zeilen:
IF-Block eine schließende Klammer ausgeben möchte (vielleicht als Teil eines Smileys)?Eine relativ naheliegende Idee wäre folgende:
ECHO sagt uns, dass es die ganze Zeile ausgibt, solange da nicht Kram wie & oder > dazwischenkommt. Und gebe ich auf der Kommandozeile ECHO :-) ein, funktioniert das auch problemlos. In diesem IF-Block gibt es allerdings einen Fehler:
*/ einen Kommentar in C beendet. Das Verhalten, was cmd hier an den Tag legt, ist sicherlich für einzeilige IFs sinnvoll, aber in meinen Augen eher nervig, wenn man das mehrzeilig macht.Nun, da wir wissen, wonach wir Ausschau halten müssen, wäre es nett zu wissen, wie man das in Zukunft vermeidet. Meine erste Idee wäre, das Innere des Blockes in ein Unterprogramm zu verlegen:
^, also sähe der Code folgendermaßen aus:
Wenn man hingegen eine Variable hat, die Klammern enthält (zum Beispiel das Programme-Verzeichnis für 32-bit-Anwendungen auf 64-bit-Systemen), dann muß man entweder verzögerte Variablenauswertung (delayed expansion) nutzen oder aber Unterprogramme.
Dinge, die man hieraus lernen kann: Das Escapezeichen funktioniert grundsätzlich überall in Batchdateien. Jedes Zeichen kann man damit an möglichen Syntaxfehlern vorbeikriegen.
Mir ist gerade etwas seltsames passiert. Bei mehreren Komposita mit gleichen Bestandteilen, kann man ja diese wiederverwenden und markiert das mit einem Divis: Webseite und -auftritt.
Soweit, so gut, nur gehört der Divis zum daranhängenden Wort und steht nicht allein. Der folgende Zeilenumbruch in Word wundert mich also ein wenig:
Ich habe keine Ahnung, warum der Bindestrich in die vorherige Zeile rutscht, er sollte eigentlich an “analyse” kleben. Wie zu sehen ist, ist auch kein Leerzeichen oder sonstiges Zeichen zwischen Wort und Bindestrich.
Mein armer Stundenplan, grausam entstellt :-(