Goodbye Manager’s Life

Vor über 5 Jahren habe ich Manager’s Life ins Leben gerufen, einerseits um ein cooles Browserspiel zu bauen, andererseits um (damals) neue Techniken/Technologie wie HTML5 2D Canavas auszuprobieren. Aus dieser Zeit sind auch einige Blog-Beiträge entstanden (zB: Sprechblasen mit HTML5 Canvas). Das Spiel war/ist technisch ziemlich cool, allerdings habe ich zu wenig Zeit in ein gutes Konzept und eine gute Spielmechanik gesteckt. Dadurch ist das Spiel nie richtig ins Rollen gekommen. Zwar habe ich es im Hintergrund immer weiter laufen lassen, aber heute ist Zeit das Spiel offline zu nehmen. Danke an alle Spieler und an alle die mitgeholfen haben Manager’s Life zu entwickeln.

Der Quellcode des Spiels ist auf Github verfügbar: agrafix/managerslife.

 

NodeJS und NPM einfach aktualisieren

NodeJS und NPM kann man ganz einfach mit Hilfe von NPM aktualisieren:

Danach kann man die Version prüfen:

 

JavaScript: Bildschirmauflösung

Das window.screen-Objekt in JavaScript enthält einige nützliche Informationen über Bildschirmkonfiguration und -auflösung des Besuchers. Diese kann man zum Beispiel nutzen um eine Designweiche zu implementieren, oder Statistiken zu sammeln.

Folgende Informationen kann man abrufen:

 

Dockerimage für GHC7.8 und GHC7.6

Ich habe heute ein Dockerfile für GHC7.8 bzw. GHC7.6 mit Cabal 1.20.0.1 auf Ubuntu 14.04 (LTS) geschrieben. Die Dockerfiles selbst liegen auf Github und die Images werden per „trusted builds“ automatisch ins Docker Index hochgeladen (GHC7.8, GHC7.6).

Aufbauend auf diesem Image kann man nun zum Beispiel Dockerfiles für seine eigenen Haskell-Projekte schreiben. Ich zeige das kurz an einem Beispiel, dem funblog.

Das Image kann man dann mit

bauen, wobei man eine Datei blogConfiguration.cfg im gleichen Verzeichnis benötigt. (Vorlage dafür ist auf github) Danach kann man den Blog mit

starten und unter

aufrufen.

 

Linux: Einfaches Backup-Script

Heute möchte ich mein einfaches „Backup-Script“ für Linux-Rechner vorstellen. In meinem Szenario muss ich eine MySQL-Datenbank und ein paar Verzeichnisse sichern. Die Sicherungskopie möchte ich dann verschlüsseln und auf einen anderen Rechner laden.

Zunächst logge ich mich auf dem Rechner ein, auf dem ich Daten sichern will. Wenn ich noch keinen öffentlichen SSH-Schlüssel habe, lege ich einen neuen an (kein Passwort für den Schlüssel vergeben!):
ssh-keygen -t rsa

Diesen kopiere ich dann auf den Rechner, der die Sicherungskopien speichern soll:
ssh-copy-id benutzer@backup.agrafix.net

Nun lege ich eine neue Datei an, die den Verschlüsselungsschlüssel enthält:
openssl rand -base64 512 > key.txt

Jetzt zum eigentlichen Script:

Um ein Backup wieder einzuspielen, muss die entsprechende .tar.gz Datei zurück kopiert werden, und kann dann mit

openssl enc -in $1 -kfile key.txt -aes-256-cbc -d | tar -zxvf -

entpackt werden.

 

GHC 7.6.3 auf Ubuntu 12.04 installieren

Eine Kurzanleitung für’s installieren von GHC-7.6.3, cabal und darcs auf Ubuntu 12.04 (64-Bit):

Zunächst der GHC:

Dann cabal:

Dann in der .cabal/config die Zeile „jobs“ auskommentieren.

Dann noch darcs:

 

Ubuntu: Apache2 nicht bei Systemstart starten

Wer kennt das nicht: apache2 ist auf einer Ubuntu Kiste installiert, man möchte es aber nicht ständig laufen haben (weil man zB einen anderen WebServer verwendet). Folgende Befehle helfen weiter:

Apache2 stoppen:

Apache2 Autostart deaktivieren:

 

Delta Debugging Minimierung mit Haskell

Hier eine Implementierung eines Minimierungsalgorythmus für Delta Debugging in Haskell:

 

RC4 Haskell und JavaScript

RC4 in JavaScript: (Quelle)

RC4 in Haskell:

 

GHC 7.6 auf Mac OSX Lion installieren

Heute musste ich mal wieder GHC 7.6 und cabal-install auf eine Mac installieren. Ich möchte hier nur kurz meine Vorgehensweise dokumentieren:

GHC installieren

Folgende Befehle laden und installieren GHC:

Hinweis: Möchte man ein eigenes Ziel-Directory für die GHC-Binaries wählen, geht das per ./configure --prefix=(hier der pfad)

cabal-install installieren

Folgende Befehle laden und installieren cabal-install (1.16.0)