node.js + express + pdfkit = leere PDF?

Kleine Notiz:
Wer mit express ein frisch erzeugtes PDF-Dokument an den Browser schicken möchte, der wähle folgenden Ansatz:

  app.get '/my/pdf', (req, res) ->
    doc = new Pdf
    doc.text "Hello World", 50, 50

    doc.output (pdf) ->
      res.type 'application/pdf'
      res.end pdf, 'binary'

Der Trick ist das res.end pdf, ‘binary’. Wenn man es nur mit .send() oder .end() schickt, wird eine leere PDF ausgegeben/angezeigt, da express pdf automatisch als String behandelt.

OS X: DYLD_ environment variables

Unter OS X Mountain Lion hat mir die Bash immer folgendes vorgeworfen:
dyld: DYLD_ environment variables being ignored because main executable (/usr/bin/sudo) is setuid or setgid
Das scheint auch von den Menschen in der Apple Support Communities als Problem angesehen zu werden: Link.

Diese Variable habe ich mal gesetzt, um SQL*Plus ans Laufen zu bekommen, ich hatte sie in meine ~/.profile eingetragen.

Das ganze kann folgendermaßen gelöst werden:
#sqlplus - old
#export DYLD_LIBRARY_PATH="/Users/sjanzen/Documents/dev/software/sqlplus"
#sqlplus - mountain lion
DYLD_LIBRARY_PATH="/Users/sjanzen/Documents/dev/software/sqlplus"
alias sqlplus='DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH /Users/sjanzen/Documents/dev/software/bin/sqlplus'

Fiktion: Apple-TV supported by Astra?

Ich möchte mal etwas herumspinnen und hier meine Idee zum besten geben: Vor einigen Tagen las ich im Heise-Ticker, dass es seitens Astra eine initiative gibt, nicht mehr wie bisher bei einer Sat-Verteilanlage alles über Koaxialkabel bis zu den Empfangsstellen zu leiten. Stattdessen soll Sat-to-IP dafür sorgen, dass letztenendes sogar schon im LNB ein Datenstrom erzeugt wird, der im lokalen Netzwerk einfach und flexibel verteilt werden kann. Sehr schön!

Nun gibt es noch das Interview von Steve Jobs, der auf die Frage, ob es einen Apple-TV geben wird antwortet, dass so ein Produkt sehr komplex ist, da TV in jedem Land über so unterschiedliche Empfangswege und Normen (PAL, NTSC, SECAM) empfangen wird. Ein Apple-Feeling zu erzeugen, dass alles aus einem Guss ist und sich flüssig anfühlt (bezogen auf Umschaltzeiten und Wechsel zwischen 4:3, 16:9, HD, …) wäre somit sehr schwierig.
Außerdem gibt es bereits etablierte Geräte und Hersteller, die sich diesen Markt teilen. Auf diesem Sektor eine Inovation zu schaffen ist auch schwer.

Zählt man nun eins und eins zusammen, könnte das doch eine tolle Platform werden: Ein Apple-TV oder ein kompletter Fernseher mit integriertem Apple-TV und ein IP-LNB reichen für die Umrüstung. Ich hoffe nur, falls es soweit kommt, dass dann kein Smartcard-Krieg losbricht, weil jeder sein System verdongeln will. Denn Apple wird dann sehr genaue Zahlen über Einschaltquoten und Marktanteile haben. Das war den TV-Anstalten bisher immer in Dorn im Auge.

WSUS unter OS X

0

Es gibt zwar eine Anleitung, wie man das WSUS Offline Update unter OS X ans laufen bekommt, aber das hat bei mir nicht sauber funkttioniert. Daher hier meine Anleitung.

MacPorts, und damit XCode müssen installiert sein. Auf dem Terminal anschließend folgendes installieren:

port install xmlstarlet cabextract wget dos2unix cdrtools md5deep

Nun muss noch die DownloadUpdates.sh angepasst werden. Das diff habe ich bei PasteBin abgelegt.

Was habe ich getan? Der stat-Befehl hat eine andere Syntax, er wird verwendet, um festzustellen, ob sich in den Katalogen zwischen zwei Ausführungen von DownloadUpdates.sh etwas verändert hat. Außerdem ist das Programm hashdeep nicht zu gebrauchen. Wahrscheinlich ein x32/x64-Problem. Da wir aber md5deep installiert haben, wurde uns bereits ein frischen Kompilat im $PATH abgelegt. Und damit das Skript dieses verwendet, kann man entweder einen Symlink anlegen, oder das Skript verändern. Aufgrund der Herumprobiererei habe ich letztere Variante gewählt.

Die fertige DownloadUpdates.sh kann man sich auch direkt herunterladen.

Was mache ich nun damit?

Ich habe mir ein Skript gemacht, das regelmäßig die Downloads vornimmt. Wenn ich sie dann brauche (und daran denke) brenne ich das client-Verzeichnis entweder auf eine DVD-RW oder auf einen Stick. Das Skript könnte so aussehen:


#!/bin/bash

UPDATER=./DownloadUpdates.sh
LANG=deu
FLAGS="/dotnet /msse /wddefs"

# Win 7 32 Bit
$UPDATER w61 $LANG $FLAGS

# Win 7 64 Bit
$UPDATER w61-x64 $LANG $FLAGS

# Server 2008 / Vista 32 Bit
$UPDATER w60 $LANG $FLAGS

# Server 2008 / Vista 64 Bit
$UPDATER w60-x64 $LANG $FLAGS

# XP 32 Bit
$UPDATER wxp $LANG $FLAGS

VirtualBox HDD-Image vergrößern

0

Ich musste die Tage eine Windows-Server VM aufsetzen, um etwas zu testen. Da ich meine SSD nicht zu stark füllen wollte, habe ich dem Festplattenimage “nur” 20 GB dynamischen Speicher gegönnt.

Nach der Installation und ca. 220 Patches später sollte dann das eigentliche Tool installier werden. Aber dann waren die 20 GB auch schon voll. Nun dachte ich, es stünden mir viele Wege offen, den Platz zu erhöhen, aber denkste.

  1. VM runterfahren, Plattenimage vergrößern. Geht nicht. VirtualBox bietet diese Möglichkeit nicht, oder zumindest nicht unter OS X an.
  2. Zweites Image dranhängen und Windows sagen, dass es als Dynamischer Datenträger verwendet werden soll, womit das vorhandene Image bzw. die Platte C erweitert werden soll.
    Das Konvertieren in einen Dynamischen Datenträger hat prima mit C: und dem neuen D: geklappt, aber leider können Systempartitionen, also die, wo Windows selbst drauf ist, nicht erweitert werden.

Meine sehr umständliche Lösung:

  1. C: als 20GB-Image drin lassen, neues 40GB-Image als D: hinzufügen. Dabei auf die Reigenfolge der SATA-Ports der VM achten.
  2. In der VM: D: in einen Dynamischen Datenträger verwandeln, 20GB Partition anlegen.
  3. D: als Spiegelung von C: einrichten, syncen lassen.
  4. VM runterfahren, das erste Image, also C:, aus der VM entfernen.
  5. Mit Windows-DVD/Image die VM starten
  6. Reparaturkonsole ausführen, dort diskpart starten, mit select 0 und extend die Partition auf ihr Maximum erweitern, also 40GB.
  7. Mit exit und  exit diskpart und die Reparaturkonsole beenden.
  8. Neustarten und hoffentlich freuen.

IBM ServeRAID macht (keine) Probleme

0

Da hat man mal eine IBM xSeries 346 in den Fingern und ist enttäuscht, dass es die Platten nicht tun – denkt man! Wie kommt man da drauf? Man schaltet den Server ein und nur eine LED an den Bays bzw. den HDD-Rahmen gehen an. Nimmt man eine Platte raus und schiebt sie vorsichtig rein (vorsichtig = im Submilimeterbereich langsam) bleibt die LED an. Dreck im Bay? Wackler im SCSI-Stecker? Das BIOS verrät auch nix.

All das traf nicht zu. Das Tiny-RAID-Utility, das man als BIOS des RAID-Controllers bezeichnen kann, bietet so gut wie keine Infos und es lässt sich auch nichts konfigurieren. Man muss sich die ServeRAID Tool CD bei IBM runterladen.

Nach dem booten des Standard-Linux wird bei Ankunft in rc3 natürlich erstmal das wichtigste gemacht: Eine andere Konsolenschriftart geladen, welche Comic Sans nicht ganz unähnlich sieht. Und auch wichtig: Maus anschließen! Anderenfalls kotzt irgendein Maus-Programm die Konsole voll und man landet in einem Dialog, der sich via Tastatur nicht bedienen lässt. Tipp: USB-Mäuse funktionieren. In meinem Fall sollte ich erstmal den RAID-Controller updaten. Entgegen anderer Informationen im Internet _muss_ man nicht die exakte Version für seinen Controller laden.

Aber das Tool an sich funktioniert sehr gut. Hot Swap geht, Arrays definieren geht, HDDs identifizieren geht, Arrays identifizieren geht. Also alles was man braucht. Und da merkt man dann: Die LEDs der Platten sind komplett Software-Steuerbar. Ist die LED aus, beutetet das nur, dass die Platte nicht aktiv ist. So einfach ist das.

 

Spring Roo default.jspx validiert nicht

0

Wer eine Google-Once-Lösung zum Problem mit Roo generierten Projekten sucht, bei denen Eclipse die default.jspx nicht validiert bekommt, dem sei hiermit geholfen.

Ersetze

<c:if test="${pageContext.request.userPrincipal != null}">

durch

<c:if test="${pageContext['request'].userPrincipal != null}">

Diese Lösung zerstört sich beim Release von Roo 1.1 automatisch.

https://fisheye.springsource.org/changelog/spring-roo?cs=24d165652520fc638303d69aa55400e43af9f19e

StarCraft 2 Mac Probleme

0

Juhuu! StarCraft 2 ist endlich da (“It’s all about time!”), Amazon hat überpünktlich geliefert und letzten Dienstag konnte man es dann auch endlich installieren. Das hat zwar manchen zu lange gedauert, aber ich war froh, es überhaupt anspielen zu können.

Nach dem starten der Kampagne und durchgelaufenem Fortschrittsbalken des Ladebildschirms kam jedoch die Ernüchterung:
Der Desktop begrüßte mich wieder mit der Meldung
EXC_BAD_ACCESS (0x00000001)
EXC_BAD_ACCESS KERN_PROTECTION_FAILURE 0x00000005

(Siehe auch: Battle.Net Forum)

Im Forum hat dann ein Blizzardmitarbeiter auf eine FAQ hingewiesen, die mich weiterbrachte. Die Kiddies im Forum meinten natürlich, dass das alles nix bringt und Blizzard stinkt. Mit etwas Geduld und geht es aber. Was habe ich getan?

  1. Rechte reparieren mit dem Festplatten-Dienstprogramm.
    Ich hatte zuvor eine neue Platte eingebaut und via Time Machine vollständig wiederhergestellt. Evtl. ist dabei, oder bei meinem System überhaupt (es war noch mein erstes OS X) etwas im argen gewesen. Vielleicht waren auch die MacPorts schuld, auf jeden Fall hat das Dienstprogramm einige 1000 Dateien neue Rechte verpasst.
  2. SC2 neu installieren.
    Danach klappe es immernoch nicht. Im Stack Trace las ich aber von einem Thread, der ein file_open durchführen wollte … wenn der Installer irgendwo etwas platziert hat, wo der Programm nich mehr ran kommt, ist klar, das es nicht funktioniert. Also nochmal drüberinstalliert und schon hat es geklappt.

Ich freue mich jedenfalls jetzt auf viele Stunden SC2.

Spring MVC Form TagLib: Disable checkbox

0

Notiz für mich und für alle, die bei einer Spring WebApp die Form-Tag Library nutzen.
Soll beispielsweise eine Checkbox für den Nutzer nicht veränderbar sein, so würde man in XHTML folgendes schreiben:
<input type="checkbox" name="zutat" value="salami" checked="checked" disabled="disabled" />
So wäre für immer Salami ausgewählt. Der Spring-Tag sieht dazu aber so aus:
<form:checkbox path="pizza['salami']" disabled="true" />
Schreibt man disabled=”disabled”, wird dies schlichtweg beim Rendern ignoriert.

Algorithmik

1

Ich hatte gerade eine Idee für den schlechtesten Sortieralgorithmus, den es zum Sortieren von Dateien glaube ich gibt:

Aufgabe: Sortiere Dateien nach Größe.

Lösung: Starte pro Datei einen Thread und kopiere die Dateien nach /tmp. Die Reihenfolge, in der die Threads enden ist die aufsteigende Folge Ihrer Größe. Voraussetzung ist ein fairer Scheduler und kein Caching. Das wird vor dem kopieren am besten abgestellt oder man kopiert direkt auf Blockebene der Festplatte.

Go to Top