Jan's Stuff

RSS
Jan 7

Mir geht seit neustem bei jeder Google Play Benachrichtigungen über neue Updates der Blutdruck durch die Decke: Ich finde es zum kotzen, wenn man aus  Unverständnis heraus Berechtigungen fordert. Leute das ist Android - der Ort an dem Berechtigungen zu funktionieren - und nicht iOS!

  • Ihr wollt mir eine “Sharing-Funktion” aus der App heraus anbieten? Dann nehmt den Contact-Picker und nicht Zugriff auf das gesamte Adressbuch.
  • Ihr wollt eine Funktion anbieten, die Bilder anfügen lässt? Dafür gibt es von Google-Seite den Camera Intent.
    Es passt sich bei weitem nicht so schön in euer App-Design ein? Dann haltet euch an die Design Guidelines, dann sieht das auf den alten Gingerbread Systemen und auf allen neuen “nativ” aus.
  • Ihr wollt lieber 15 Cent über Werbung kassieren und mir die Erlaubnis abringen per Internet Werbung nachzuladen, obwohl eure App Updates über den Google Play gepusht bekommt und die App ansonsten nichts aus dem Internet braucht. Ich würde euch 2€ dafür zahlen, wenn ihr endlich die Werbung (und die Internet-Vollzugriffsberechtigung) entfernt.
  • Ihr habt eine App die keine Daten in ein Interoperabilitätsformat (CSV, XML, …) schreiben kann und wollt Zugriff auf die SD-Karte weil ihr unbedingt Thumbnails abladen wollt? Dafür ist eigentlich der Cache Speicher da (inkl. bequemer Möglichkeit aufzuräumen falls der Speicher knapp werden sollte)
  • Ihr wollt meine Geolocation? Per BackgroundService getrackt? Solches Vertrauen muss man sich verdienen.

Jenkins

Ich bin jetzt nach langem hin und her endlich einmal dazu gekommen einen Jenkins Server zu installieren und einzurichten. Yay!

Der Server ist headless, also hat keinen X-Server installiert. Wenn ich nun jUnit-Tests machen lasse und darin irgendwo Swing benutzt (technisch gesehen instanziiert) wird greift Java in den Konstruktoren der Swing-Klassen automatisch auf den X-Server zurück, um das ganze Zeug wie Auflösung, Fonts und DPI-Scaling auszulesen bzw. auszurechnen.

Xvfb Plugin

Abhilfe schafft das Xvfb-Plugin, dass vor jedem Build eine Xvfb-Instanz erzeugt und mit Hilfe der Umgebungsvariable $DISPLAY alles graphische dort hin leitet.

— Note to myself:

Wenn im Jenkins auf der Konfigurationsseite als Hilfestellung zur Einrichtung von Xvfb folgendes steht:

A typical option looks like “/path/to/vncserver :$DISPLAY_NUMBER -geometry 800x600”

Dann hat man gefälligst den vollen Pfad für Xvfb auszuschreiben, sonst schlagen die Builds mit folgender Meldung fehl:

vncserver: The HOME environment variable is not set.

Ich habe dieses Problem bisher nirgendwo gefunden, deshalb dieser Post. Und natürlich auch, um meinen Schmerz der Stunden dauernden Fehlersuche mit euch zu teilen.

Aber jetzt rennt die Kiste erst einmal wieder. *freude*

Dec 9

Android App

Ich habe gerade meine erste Android App im Market published. Sie heißt Decider (Market) und gibt aus n möglichen Antworten eine mit einer Wahrscheinlichkeit von 1/n aus.

Available in Android Market

Es ist gibt zwar schon zig dutzende die genau das selbe machen, aber die:

  • sehen aus wie von einem Kindergartenkind gemalt
  • wollen auf das Internet zugreifen
  • wollen meinen Standort wissen
  • wollen meinen Standort wissen und auf das Internet zugreifen!

Eigentlich sollte diese App nur ein benutzbarer Ersatz sein, um nicht ständig javascript:alert(Math.round(Math.random())); in das Browserfenster tippen zu müssen und sonst nichts.

Facebook und RSS

Ich bin ja schon vor Monaten dazu übergegangen Facebook nicht mehr zu besuchen und mir stattdessen stündlich Updates per RSS-Feed zu laden. So bekommt man viel weniger davon mit, was Facebook so nervig macht und kann die Informationen für die ich mich interessiere Filtern. Glaubt es ruhig, mir ist euer Happy Fish Aquarium wirklich so was von egal.

Naja, Facebook hat schon vor Ewigkeiten angekündigt die RSS Feeds nicht weiter zu betreiben. Die Feeds wurden nie abgeschalten, weshalb ich kurz mit den Schultern gezuckt und weiter gemacht habe.

Ich war dementsprechend geschockt, als dann heute Morgen folgendes im Google Reader aufgetaucht ist:

Facebook Syndication Error

This feed URL is no longer valid. Visit this page to find the new URL, if you have access: http://www.facebook.com/statusupdates/

Nach kurzer Suche bin ich auf den Blogpost von Better Off Jed gestoßen, der genau das selbe Problem zu haben scheint. Er wiederum tut das ganze dann als neu hinzugewonnenes Sicherheitsfeature ab. Mir tut es leid um eure PIs und eure Werbeeinnahmen, aber RSS hat ganz sicher nichts mit Sicherheit zu tun.

Ich weiß nicht genau wieso, aber mit diesen URLs ist es mir im Moment (16.06.2011) noch möglich an einen gültigen Feed zu kommen:

https://www.facebook.com/feeds/share_friends_posts.php?id=xxxxxxxxxx&key=xxxxxxxxxxxxxxxx&format=rss20
https://www.facebook.com/feeds/notifications.php?id=xxxxxxxxxx&viewer=xxxxxxxxxx&key=xxxxxxxxxxxxxxxx&format=rss20
https://www.facebook.com/feeds/friends_status.php?id=xxxxxxxxxx&key=xxxxxxxxxxxxxxxx&format=rss20

Diese unterscheiden sich nicht wirklich von denen die ich bisher benutzt habe. Und Google Reader erkennt den einen oder anderen direkt wieder und zeigt mir ungelesenen Beiträge an.

Eigentlich ist es nur eine Frage der Zeit, bis Facebook wieder zickt und den Zugang per RSS dicht macht.

Seven Languages in Seven Weeks: Io - Tag 5

Jetzt aber. Nachdem ich letzte Woche ein paar kleinere Probleme mit Io hatte, kommt jetzt die Fortsetzung.

fibonacci.io

divisionByZero.io

sum2d.io

myaverage.io

Erste Ansätze von Tests vorhanden. Mal schauen ob es ein Framework gibt. Ich muss mir einmal IoUnit anschauen.

List2D.io

Diese Klasse gefällt mir noch nicht ganz. Irgend etwas fehlt noch.

randomNumber.io

Kein Kommentar zur letzten Aufgabe. Ist einfach nur ein Versuch gewesen.

Seven Languages in Seven Weeks: Io - Zwischenstopp

Ich friere das 7Li7W-Projekt erstmal auf unbestimmte Zeit ein, da das AUR-Paket iolanguage leider ohne Addons daher kommt.

Ich schlage mich gerade mit dem manuellen kompilieren von Io herum. Und wenn das funktioniert schau ich mal über das AUR-Paket drüber ob man die Addons nicht mit ins Paket eingebacken bekommt - Ihr wisst ja Pfadfinder und so.

Update: Nach langem hin und her probieren und Rücksprache mit dem Autor des AUR-Pakets habe ich es nun endlich hinbekommen. Das Ergebnis gefällt mir noch nicht so ganz, da das Paket jetzt mit den addons eingebettet jetzt nach der Installation den fünffachen Speicherplatz benötigt. Aber naja, was soll man machen.

Habe dem Autor die verbesserte PKGBUILD zugesandt, wer nicht warten kann: hier.

Ich hatte nach gewisser Zeit keine Lust mehr den Fehler zu suchen und habe angefangen das Paket neu zu machen. Dacht ich mir, wenn du schon dabei bist kannst du den Source gleich vor dem Build frisch aus dem GitHub-Repository auschecken. Jedenfalls gabs bei mir einige Probleme die ich noch nicht beseitigen konnte:

  • Da Io aus dem gleichen Source auf möglichst viele Systeme kompilieren soll werden mit CMake Systemspezifische Makefiles erstellt. Beim linken von io_static tritt ein Fehler auf. Ich hab ihn noch nicht gefunden, bin ihn aber durch eine Stringersetzung nach dem generieren mit CMake umgangen.
  • Außerdem werden die Bibliotheken im Moment mit dem Build-Verzeichnis in das Binary eingelinkt. Ich finde die Ursache dafür einfach nicht.
  • Yajl compiliert nicht. Hier hab ich noch schlechtere Chancen den Fehler zu finden. Aber - wer hätts gedacht? - ich hab mit einer Stringersetzung nach dem CMake das Modul deaktiviert.

PKGBUILD (experimental)

Warnung: Dieses Paket ist als broken anzusehen und sollte nur benutzt werden, wenn du genau weißt was du tust.

Seven Languages in Seven Weeks: Io - Tag 4

Hab das Projekt jetzt leider ein paar Tage auf Eis gelegt. Aber jetzt geht es weiter.

Io ist eine interessante Sprache. Ungewohnt frei von allem Schnick-schnack. Nach all den Jahren mit C# und Java muss man sich erst an die neu gewonnene Freiheit gewöhnen.

Kommen wir zu den Aufgaben im Buch:

Finde

  • Ich machs mir hier jetzt einmal einfach und verlinke die Samplecode-Seite. Wobei ich mir nicht ganz sicher bin, ob es überhaupt viel mehr dazu gibt.
  • Die Frage nach der Community ist auch schnell beantwortet: Mailingliste, Twitter, IRC.
  • Der Style-Guide ist wie er zu erwarten gewesen ist - erstaunlich kompakt.

Beantworte

  • typetest.io
  • truefalse.io
  • Durch aufrufen von slotNames auf den Prototyp
  • = weißt zu, wirf einen Fehler falls der Slot noch nicht deklariert ist.
    := weißt zu und deklariert falls Slot noch nicht vorhanden.
    ::= weißt zu, deklariert Slot falls Slot noch nicht vorhanden, und erstellt eine getter-Methode für den Slot.

Tue

io beer.io

oder alternativ per Shebang:

chmod +x beer.io

./beer.io

Zur letzten Aufgabe: dynamicexec.io

BTW: Happy Towel Day