Ruby & Sinatra unter 11.10
Sinatra unter 10.04 war kein Problem und lief sofort. Aber unter 11.10 kam nach der Installation über rubygems die folgende Fehlermeldung:
onli@Gecko:~$ ruby1.8 -rubygems server.rb Invalid gemspec in [/var/lib/gems/1.8/specifications/rack-protection-1.1.4.gemspec]: invalid date format in specification: "2011-10-04 00:00:00.000000000Z" Invalid gemspec in [/var/lib/gems/1.8/specifications/tilt-1.3.3.gemspec]: invalid date format in specification: "2011-08-25 00:00:00.000000000Z" Invalid gemspec in [/var/lib/gems/1.8/specifications/sinatra-1.3.1.gemspec]: invalid date format in specification: "2011-10-05 00:00:00.000000000Z" /usr/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require': no such file to load -- sinatra (LoadError) from /usr/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb:36:in `require' from server.rb:1
Die Lösung findet sich bei Stackoverflow:
In /var/lib/gems/1.8/specifications/ die *.gemspec-Dateien öffnen und dort die Zeilen
s.date = %q{2011-10-04 00:00:00.000000000Z}
in
s.date = %q{2011-10-04}
ändern.
Findmore - 2-Klick-Likebuttons
Versuche gerade, Heises 2-Klick-Buttons in das serendipity_event_findmore-Plugin einzubauen. Eigentlich ist das fertig, nun müssen nur noch die Buttons getestet werden. Das hier ist der Test.
Testergebnis 1: Kein URL-Encoding für die Google+-Button, dann geht er.
Testergebnis 2: Bei Facebook funktioniert der Link zurück zum Artikel nicht.
Arbeit
Ich probiere gerade einen Tipp aus, den ich in irgendeinem Artikel oder Kommentar auf Hackernews gelesen hatte: Arbeit mit eigenen Zielen verbinden. Der Gedanke ist einfach, aus einer gewöhnlichen Aufgabe, also aus einem normalen kleinen Programmier-Projekt, etwas besonderes zu machen, indem man dabei etwas neues ausprobiert. Bei diesem Projekt soll ich z.B. eine Webanwendung entwickeln, und statt das wie sonst mit Java oder PHP zu machen nutze ich diesmal Ruby mit Sinatra.
Davon profitieren alle: Mir macht die Arbeit mehr Spaß und ich lerne etwas neues dabei. Mein Arbeitgeber hat auch keinen Nachteil, denn obwohl man sich in eine neue Sprache immer erstmal einarbeiten muss, sorgt alleine mein Spaßfaktor dafür, dass die Arbeit eher schneller geht als sonst (Ich bin deutlich vor meinem Zeitplan). Und nebenbei sitzt das Projekt dann auf interessanter Technik.
Vielleicht macht es aber nicht einfach nur durch das Lernen einer neuen Sprache Spaß, sondern weil Sinatra ziemlich toll ist. Das Hallo-Welt:
require 'sinatra' get '/' do 'Hello world!' end
Genauso einfach, wie es sein soll, installiert mit zwei Konsolenbefehlen (kein Java-XML-Krampf). Dazu wirkt Ruby bisher ziemlich elegant (keine Semikolons, kein Klammerwald, assoziative Arrays ohne Import, klare Fehlermeldungen) und eine Template-Sprache ist auch direkt dabei, die ebenfalls einfach so funktioniert.
Zumindest zusammen mit diesen Werkzeugen war das scheinbar ein guter Tipp.
Upgradenachbesserungen Oneiric
Endlich mal wieder ein Upgrade, das bei mir eigentlich gut durchlief, ohne folgende Neuinstallation. Irritierend war die Fehlermeldung des Flashpakets, sonst war beim Upgrade selbst nichts besonderes.
Es fehlte danach die Akkuanzeige, das Paket indicator-power nachzuinstallieren half:
sudo apt-get install indicator-power
Unschön war, dass Dropbox nicht mehr startete, das löste ein:
dropbox autostart
Jetzt muss nur noch Eclipse wieder starten. Das Ladebalkenfenster wird einfach grau, Fehlermeldung gibt es keine.
HP Veer
WebOS wird freie Software (via). Ich nehme das mal als Anlass, mein Veer vorzustellen, das mit diesem Betriebssystem läuft und mich hier in Siegen über die internetlose Zeit gerettet hat.
HP hatte in ihrem Firesale ihre WebOS-Hardware für sehr wenig Geld verkauft, da war auch das Veer dabei. Ich hab es vor meinem Umzug nur durch Zufall geholt, ein Freund hatte es nach dem Sale bei Ebay für 100€ zum Testen gekauft und sich dann dagegen entschieden. Es gefiel ihm, hatte aber zuviele Macken und ist kein Android, woran er gewöhnt ist. So gab er es mir, denn mein Handy spann schon eine Weile.
Mir war es überhaupt nur aufgefallen und ich zog es einem Pre3 vor, weil es besonders klein sein sollte. Und klein ist es wirklich.
Nun bin ich wohl wirklich der Falsche, ein detailliertes und kenntnisreiches Review zu schreiben - mein Handy davor war von 2005 und weit von einem Smartphone entfernt. Aber das Veer hat mir alles in allem doch gefallen. Warum?
- Schrieb ich bereits oft genug, dass es klein ist? Dadurch ist es in der Hosentasche kaum fühlbar, für mich war das ein wichtiger Faktor, gerade im Vergleich zu den riesigen Alternativen, für die ich neue Hosen mit größeren Taschen gebraucht hätte.
- Es hat eine Tastatur mit echten Tasten, auf denen man trotz ihrer Winzigkeit ganz gut schreiben kann. Das war mir wichtig, nachdem ich ein paar Bildschirmtastaturen anderer Touchhandys ausprobiert habe und damit nicht zurechtkam. Die Tastatur ist viel angenehmer.
- Über die HP-WebOS-Geräte las man öfter, dass die Geräte nun besser verarbeitet seien als bei Palm. Ein Kollege hier hat ein Veer-Vorgänger, und das wirkt wirklich weniger stabil als die neue Version. Das Veer wirkt gut und bekommt keine Kratzer.
- Ich mag WebOS ganz gerne, unten mehr dazu.
Ich habe es jetzt eine ganze Weile als Haupt-Internetgerät benutzt. Durch das kleine Display ist man sicher mehr noch als bei größeren Handys auf angepasste Seiten angewiesen, sonst wird das Surfen zur Scrollorgie. Dann aber ist es ausreichend groß, morgens im Bus damit die mobile Version von Google Reader zu nutzen funktioniert einwandfrei. Und 2k11 sieht natürlich hervorragend darauf aus.
Sowieso: Großer Kritikpunkt ist die mangelnde Verfügbarkeit von Anwendungen. Völlig entkräften kann ich das nicht, installiert habe ich nur drei Stück (Bahnfahren, VoiceRecorder und Paketverfolgung Lite), die meiner Meinung nach alle sehr gut gemacht sind. Aber ich habe nicht das Gefühl, irgendeine App zu brauchen (außer vll WhatsApp), denn für alles andere ist entweder schon ein gutes Programm dabei (Mail, Kalender, verknüpfbar mit Google) oder das sind sowieso Dinge, für die eine Webanwendung viel besser ist (wie ein Feedreader). Vielleicht ist das eine generelle Verschiebung, das Internet inzwischen viel besser für mobile Geräte geeignet als früher, als die meisten Smartphoneanwender sich an ihre geliebten Apps gewöhnten, oder ich bin da nur eigen. Für mich sind Apps Lückenfüller, bis die zugehörige Webseite auf kleine Bildschirme angepasst ist.
Akkulaufzeit: Enttäuschend. Profitiert aber extrem davon, wenn die Displayhelligkeit heruntergeregelt wird, was außer bei extremen Sonnenschein ausreichend hell ist. Damit ist dann folgender Ablauf möglich: morgens aufladen, tagsüber gelegentlich nutzen, nachts in den Flugmodus. Wird es stark genutzt, z.B. um damit durchgängig zu surfen, hält der Akku ~4 Stunden. Im Vergleich zu meinem gewöhnlichen Handy, bei dem ich das Aufladen jede Woche schon schlecht fand (mein altes Nokia hielt 2 Wochen!), ist das eigentlich inakzeptabel. Aber das gilt wohl für alle Smartphones.
Großes Problem sind die Bugs. Ich finde das Veer wirklich toll, aber ich kann völlig nachvollziehen, wenn jemand angesichts der Bugs das Handy aus dem Fenster wirft, nen Röhrenmonitor hinterherschmeißt und dann einen LKW drüberfahren lässt. Mehrmals. Eine kleine Liste:
- Manchmal bricht mittendrin der Sound weg und bleibt weg.
- Manchmal toggelt der Browser den Zoommodus, jede Bewegung wird dann zum Zoomen benutzt oder zieht in die rechte untere Ecke, selbst wenn man eigentlich nur Scrollen wollte.
- Flash kann Sound, aber nicht immer, z.B. nicht bei Google Music.
- Gestern mal wieder weigerte es sich stundenlang, in verschiedenste Wlans zu connecten, bis ich es neustartete.
- Internetseiten, Html genauso wie reine Bilder, werden immer mal wieder einfach weiß, nachdem sie vollständig geladen und ganz kurz angezeigt wurden. Bevorzugt bei sehr langsamen Verbindungen, bei denen das ein minutenlanges Neuladen bedeutet. Das ist nicht sarkastisch gemeint, der Bug tritt wirklich fast nur dann auf.
- Ab und zu fängt es aus nicht ersichtlichen Gründen an zu ruckeln, egal ob im Menü oder im Browser.
- Der Helligkeitssensor regelt die Helligkeit völlig zufällig hoch und runter, ohne dass es irgendwas mit der Außenhelligkeit zu tun hätte.
- (In Telefongesprächen bleibt der Gesprächspartner manchmal 20-30s stummt, kann natürlich am Provider oder an sipgate liegen)
Und das waren sicher nicht alle Bugs, die inzwischen auftraten.
Warum ich das Veer noch habe, behalte und erstmal nicht ersetzen will liegt an dem ganzen Rest des Systems. Ich war begeistert, wie toll da alles ineinandergreift und wie schön die Oberfläche gemacht ist. Ein Wisch vom Gestenbereich nach oben fährt das Menü in einer schnellen und weichen Animation von unten nach oben. In der Kontaktanwendung ist bei jedem Kontakt ein Icon, um direkt eine SMS zu schreiben. In dieser SMS-Anwendung kann man problemlos auf (Google-)Jabber wechseln. Die Kontakte, die eigentlich nur auf der Simkarte gespeichert waren, wurden automatisch gesynct und waren auch mit der neuen Simkarte noch da. Ein Klick im Browser auf einen Youtube-Link öffnet das Video in der Youtube-App (die auf dem kleinen Bildschirm Youtube 100fach vorzuziehen ist), ein Klick auf ein Kartensuchergebnis die Kartenanwendung mit dem Ergebnis als Startpunkt (wobei das seit der Umstellung auf Bing-Maps nicht mehr immer funktioniert und diese App ruckelt). Fängt man im Startbildschirm an zu tippen, werden alle möglichen Bereiche des Handys nach diesem Begriff durchsucht und die Ergebnisse und weitere Suchoptionen (z.B. Internetsuchmaschinen) angeboten. Das wirkt alles durchdacht, unterstützt sehr viele Nutzungsszenarien so gut wie möglich, und eigentlich alles sieht dabei hübsch aus.
Deswegen ist das Veer dann sehr angenehm zu benutzen, wenn es gerade funktioniert. Nun, mit dem Betriebssystem als freie Software, besteht eine große Chance, dass das Veer immer angenehmer zu nutzen wird, da die Bugs gefixt werden dürften. Und dann war das ein guter Kauf.
Verschwundene Artikel
Hier sind übrigens in letzter Zeit Artikel verschwunden. Falls noch anderes nicht funktioniert, bitte bescheidgeben.
Update: Das war übrigens dieser Bug und ist jetzt gefixt, zumindest hier im Blog.
Fate of the World
Die Welt retten. Fate of the World ist ein Spiel aus der Kategorie Serious Gaming, ein Spiel mit ernsten Inhalten. Es geht um die Zukunft der Welt, wie diese auf die Erderwärmung reagieren kann und und welche Auswirkungen sie hat. Verpackt in ein rundenbasiertes Aufbau/Kartenspiel.
Der Trailer:
Es hat Macken. Im zweiten Szenario, in dem man bis 2080 durch Ölförderung bestehen soll, sinkt mir immer der HDI von Indien auf unter 0.7 wegen absurd hohen Sterblichkeitsraten. Warum die so hoch sind bleibt für mich unsichtbar. Das Spiel ist manchmal überraschend schlecht darin, Zusammenhänge zu zeigen. Aber mich hat das beschäftigt, das Szenario habe ich inzwischen bestimmt zehnmal gestartet und habe dadurch inzwischen eine Theorie - und sowieso weiß ich erst jetzt, was HDI überhaupt bedeutet.
Bei RPS steht mehr darüber, samt recht treffenden Screenshots. Das Review dort quillt über vor Begeisterung, nicht ganz zu unrecht.
Hoverbox mit CSS
Nein, es geht nicht um Werbepopups. Ich wollte einer Seite eine Erklärung hinzufügen, fand dafür keinen passenden Ort, und versteckte sie daher hinter einem Fragezeichen. Bei einem Klick auf dieses oder beim Hovern über es erscheint die Box mit der Erklärung, sanft eingeblendet. Umgesetzt mit reinem CSS, ohne Javascript.
So sieht das Ergebnis dann aus:
So der vollständige HTML-Code:
<div id="explanation"> <a id="explanation-button" href="#explanation-container">?</a> <div id="explanation-container"> <a href="" id="explanation-close">X</a> <h2>Erklärung</h2> </div> </div>
Und so das CSS:
#explanation { display: inline; left: -100%; width: 100%; position: fixed; } #explanation-button { position: fixed; right: 1em; opacity: 0.3; } #explanation-button:hover { cursor: pointer; } #explanation-close { float: right; display: none; text-decoration: none; } #explanation-container:target #explanation-close { display: block; } #explanation-container { opacity: 0; display: inline-block; position: relative; background-color: #fdfdfd; -moz-transition: all 1s ease-in-out; -webkit-transition: all 1s ease-in-out; -o-transition: all 1s ease-in-out; transition: all 1s ease-in-out; width: 60%; } #explanation:hover #explanation-container, #explanation-container:target { opacity: 1; left: 100%; }
Viel Code aus einmal. Ich will Schritt für Schritt die einzelnen Elemente erklären:
<div id="explanation">
Das umarmende div enthält alle weiteren Inhalte, um auf ein :hover-Event reagieren zu können und dann die ganze Box einzublenden. Sie wird anfang im CSS auf display:inline gesetzt, damit es die anderen Elemente nicht stört, dann mit position: fixed fixiert und schließlich mit left: -100% aus dem Sichtfeld geschoben.
<a id="explanation-button" href="#explanation-container">?</a>
Der Link ist das einzige Element, das immer zu sehen sein wird. Er wird durch das position:fixed aus der Box herausgelöst, dadurch nicht mit der Elternbox nach links verschoben. Gedacht ist: bei einem Klick (per :target) oder beim Darüberfahren (per :hover) wird das Elternelement sichtbar und dadurch die ganze Erklärung.
<div id="explanation-container">
Der Container mit der eigentlichen Erklärung. Im CSS davon kann man gut sehen, wie die Animationen in CSS auf diese Box gesetzt werden. Durch die transition-Eigenschaft wird gesteuert, wie ein Änderung von Werten wie opacity animiert werden. Opacity ist nebenbei auf 0, damit ist die Box erstmal unsichtbar. Man beachte auch die Eigenschaft display: inline-block.
CSS: #explanation:hover #explanation-container, #explanation-container:target
Das ist der Kern des ganzen Codes! Wird über die Box gefahren, deren einziges sichtbares Element das ? ist, oder wird #explanation-container Ziel eines Ankers, wird die Box nach rechts verschoben und sichtbar gemacht. Durch die transition-Eigenschaft der Box (siehe oben) wird diese Statusänderung animiert: Die Box wird hereingeschoben und eingeblendet, anstatt direkt zu erscheinen.
<a href="" id="explanation-close">X</a>
Nach einem Klick auf das ? wird die Box dauerhaft eingeblendet, da #explanation-container mithilfe von :target eingeblendet wird. Es wurde also ganz normal die Seite geladen, nur dass #explanation-container hinten stand, ein Anker. Um das wieder auszublenden, muss die Seite wieder ohne den Anker geladen werden, und genau das macht dieses X.
Man kann das ganze auf der Demoseite oder im Praxiseinsatz (das Fragezeichen ganz rechts) nochmal genau anschauen.