Bildzeitung verweigert Erkenntnis

Bildzeitung - Nicht Essen Das die Bildzeitung nur aus Angst, Gewalt, Sex und Fußball besteht sollte mitlerweile jedem klar sein. In ihrer neuen Werbekampagne spielt die Bild zur Abwechslung den großen Aufklärer, warnt vor allerlei Gefahren und weist darauf hin, dass – hätte es sie früher gegeben – die Gefahr nicht eingetroffen wäre.

Es ist gefährlich, dass nackte Menschen Äpfel essen. Zumindest warnt die Bild davor.

Hätten Adam und Eva sich nicht an den Äpfeln vom Baum der Erkenntnis vergriffen, die Menschheit wäre immer noch im Paradies. Und blöd wie Brot. Es war immerhin das pure Wissen, was die beiden Früchtchen sich eingefahren haben.

Was will die Blödzeitung also? Uns die Erkenntnis/Mündigkeit/Intelligenz absprechen? Wäre nichts neues.

Unsere dreckige Küche in HDR

Küche in HDR

Wer noch nicht von High Dynamic Range Images gehört hat: Das Bild hier drüber ist eins. Die tolle Sache an HDR-Bildern ist, dass man selbst in dunklen Schatten oder hellen Lichtern noch Strukturen erkennen kann. Wirkt ein wenig surreal, wie man sieht.

Zu einem HDR-Bild kommt man mit extrem teuren Kameras oder einem Billigmodell, das einen die Belichtungszeit regeln lässt. Mit dem günstigeren Modell muss man von exakt der gleichen Szene mehrere Bilder mit unterschiedlichen Belichtungszeiten machen. Diese Bilder übergibt man einem Programm wie qtpfsgui, spielt ein wenig mit den Optionen und Einstellungen herum und kommt zu guter letzt zu einem extrem detailreichen Bild.

Ich gebe zu, ein wenig in Gimp habe ich auch noch herum gespielt.

Zisch & Klack & Weg

Bei mir auf der Arbeit trinken wir relativ viel Mineralwasser einer aus gutem Grund bekannten Bielefelder Marke. An unserem Schreibtisch wird die „grüne Flasche“ – also die mit etwas weniger Kohlensäure – bevorzugt, damit man nicht den ganzen Tag am röpsen rülpsen ist. Da der Lieferant schon länger nicht mehr vorbeigeschaut hat, sind wir in letzter Zeit allerdings dazu gezwungen, uns die „blaue Flasche“ zurecht zu schütteln, bis sie genießbar ist.

Acki – mein Schreibtischhomie – kam vorhin mit seiner frischen „Blauflasche“ an und schlug grinsend vor, dass wir einen Schütteltanz machen sollten: Albern, wie ich nunmal bin, antwortete ich nur mit „Yeah“, riss meine Flasche hoch und wir fingen an, über den Köpfen mit unseren neuen PET-Kastagnetten einen bezaubernden Rhythmus zu erschaffen dämlich herumzuwedeln. Der Spaß dauerte allerdings nur ungefähr 2 Sekunden, bis ich bemerkte: „Oh, die ist ja offen!“ – Ich war so damit beschäftigt, Wasser von Ausdrucken und Klaviatur zu entfernen, dass das Verlangen der zweite Hälfte unseres Duettes nach Taschentüchern vollkommen an mir vorbei ging.

Erst, als wir beide auf der Toilette standen und eilig jeweils einen Haufen Papierhandtücher an uns rissen, kam langsam die Erkenntnis:
Wir sind beides Trottel.

Feedreparatur

we must feed. you.
Wer unseren kleinen Blog über den angebotenen Feed liest, darf endlich aufatmen: Endlich gibt es dort auch wieder ümlaute anstelle von Schei�?zeichen. Ein WordPress-Update hatte sich nicht ganz mit der bestehenden Datenbank vertragen.

Viele ältere Beiträge auf der Seite kämpfen noch mit falschem Encoding, was wir aber erstmal ignoriert haben.

(Quelle: Teile d. Bildes von hier)

Blender Renderfarm unter Linux aufsetzen

RenderbeispielBeim rumexperimentieren mit Blender habe ich nach einer Möglichkeit gesucht, um den Rendervorgang ein wenig auszulagern. Ich wurde auch schnell fündig, leider ist das gefundene Script von ideasman nur für einzelne Frames zu gebrauchen. Also habe ich ein wenig Hand angelegt und die fehlende Funktionalität, ganze Animationen zu berechnen, mit ein paar Zeilen eingebaut.

Beim Testen sind mir keine Fehler aufgefallen. Falls doch jemand etwas hat: Ab in die Kommentare!

Genug Vorgeschichte. Wie bringt man Blender zum verteilten Rendern?

Benötigte Programme

1. Blender mit einem Pythonscript füttern

Das Script unterteilt jedes Bild in 256×256 Pixel große Quadrate, die einzeln berechnet und gespeichert werden. Bereits begonnene oder fertiggestellte Teile werden von den anderen Clients ignoriert.

Die Datei render.py im Projektverzeichnis ablegen:

import Blender
from Blender import sys, Scene, Noise
from Blender.Scene import Render
import string

NUM = '0123456789'
DEFAULT_TILE_SIZE=256 # px

# Clamp
def max(number):
   if number > 1.0:
      number = 1.0
   return number

def isfile(file):
   try:
      open(file)
      return 1
   except:
      return 0

def randList(list):
   randList = []
   lenList = len(list)
   while lenList != len(randList):
      randIndex = int( Noise.random() * len(list)  )
      randList.append( list[randIndex] )
      list.remove( list[randIndex] )

   return randList

# Strip all chars after a '.'
def stripExt(text):
   print 'filename ', text
   return text[:text.index('.')]

def getParts():

   name = Blender.Get('filename')
   name = stripExt(name)

   tileSize = DEFAULT_TILE_SIZE

   # OK either way we have a tile size.
   # Get the data
   scn = Scene.GetCurrent()
   context = scn.getRenderingContext()

   xPix = context.imageSizeX()
   yPix = context.imageSizeY()

   xParts = int(xPix / tileSize)
   yParts = int(yPix / tileSize)

   # Incase the tile size is larger then the render size.
   if xParts < 2:
      xParts = 2
   if yParts < 2:
      yParts = 2   

   return xParts, yParts

# Makes a list of rects that setBorder will pass.
def makeBorderList(xparts, yparts):

   borderRectList=[] #We store all the rects here and then return them.

   xlen = 1.0 / xparts
   ylen = 1.0 / yparts
   xPoint = 0.0 # This stores the current X value, and incriments xlen each iteration until its equel to 1.0
   yPoint = 0.0

   counter = 1 # Inde each border

   while xPoint < 0.999:
      while yPoint < 0.999:

         # Write the rect to the list
         borderRectList.append( (counter, max(xPoint), max(yPoint), max(xPoint+xlen), max(yPoint+ylen)) )
         counter += 1 # Keep a tag of which index this one is.

         yPoint += ylen
      # Reset yPoint for the next colum.
      yPoint = 0.0

      xPoint += xlen
   return borderRectList

# SETS UP DEFAULTS NEEDED FOR OUTPUTTING AN IMAGE THAT CAN BE COMPOSITED.
scn = Scene.GetCurrent()
context = scn.getRenderingContext()
context.enableBorderRender(1)
context.enableRGBAColor() # Save RGBA
context.setImageType(Render.PNG) # Save RGBA
context.enableExtensions(1)

# Make image name
imageName = Blender.Get('filename')

# Remove .blend
imageName = stripExt(imageName)
renderName = imageName + '_' # frameNum.png will be added.

# Set the start and end frame to the current frame.
staFrame = Blender.Get( 'staframe')
endFrame = Blender.Get( 'endframe')
# Keep track of frames rendered, only for a report.

Blender.Set( 'curframe', 1)
xParts, yParts = getParts()
randBorderList = randList( makeBorderList(xParts,yParts) )

print '= staframe: ', staFrame
print '= endframe: ', endFrame
print '=== frames: ', endFrame-staFrame+1
for curFrame in range(staFrame,endFrame):
	context.startFrame(curFrame)
	context.endFrame(curFrame)
	for border in randBorderList:

	   # Set the new file name WITH X/Y parts
	   # blendfilename_partnum_framenum.ext
	   # eg. render_01_0001.png
	   partNum = str(border[0])
	   while len(partNum) < 4:
	      partNum = '0' + partNum

	   # CREATE THE REAL NAME OF THE OUTPUT FILE
	   frameNum = str(curFrame)
	   while len(frameNum) < 4:
	      frameNum = '0' + frameNum

	   uniqueRenderName = renderName + partNum + '_'
	   fileToRender = uniqueRenderName + frameNum + '.png'

	   print '= frame: ', curFrame
	   print '== part: ', partNum

	   # Check that the file isnt alredy there
	   if isfile(fileToRender) == 0:

	      # TOUCH FILE SO NOBODY OVERWRITES IT.
	      # Create a dummy file so no other nodes try to render the image.
	      file = open(fileToRender,"w")
	      file.close()

	      # SET RENDER NAME AND PATH.
	      context.setRenderPath('//' + uniqueRenderName) # // is the currentdir

	      # Set border
	      context.setBorder(border[1], border[2], border[3], border[4] ) 

	      # RENDER THE IMAGE
	      context.renderAnim() # This saves the pics.
	   else:
	      print '= was already rendered'

# Quit
Blender.Quit()

2. Projektordner freigeben

Man muss dafür sorgen, dass auf allen Rechnern die mithelfen sollen das Projektverzeichnis eingebunden ist. Hierzu bieten sich Samba und nfs an. Das folgende Beispiel nutzt nfs.

Auf dem Hauptsystem kann man die nfs-Freigabe in der Datei /etc/exports einstellen:

/home/eisfrei/blender/projekt 192.168.0.1/24(rw,anonuid=1000,anongid=100,all_squash,sync)

Sämtliche Renderknechte binden nun die Freigabe ein:

mount.nfs 192.168.0.23:/home/eisfrei/blender/projekt /mnt/

3. Rendern

Auf allen Systemen die mitwerkeln sollen wechselt man in das Projektverzeichnis und startet das Rendern mit:
blender -b projekt.blend -P render.py -a

Jetzt erst mal eine Runde hinlegen und abwarten, während eine Unmenge von Pngs erzeugt wird.

4. Einzelteile zusammenkitten

Zum verkleben der Bildbestandteile benutze ich eine Kombination aus Perl und ImageMagick. Das Perlscript sucht die Bestandteile zusammen und übergibt diese an ImageMagick, welches diese dann alle schön zusammenleimt.

merge.pl

#!/usr/bin/perl
use strict;
my $fps=25;
my $project=shift;
my @files;
print $project,"\n";
opendir(DIR, ".");
@files = grep(/$project[_][0-9]+_[0-9]+\.png$/,readdir(DIR));
closedir(DIR);

my %frames;
my %parts;

foreach my $file (@files)
{
	print "pruefe ",$file,"\n";
	if ($file=~/$project[_]([0-9]+)_([0-9]+)\.png$/)
	{
		$frames{$2}=1;
		$parts{$1}=1;
	}
}

foreach my $fr (sort(keys(%frames)))
{
	my $cmd='convert ';
	foreach my $pa (keys(%parts))
	{
		$cmd.=$project.'_'.$pa.'_'.$fr.'.png ';
	}
	$cmd.=' -flatten '.$project.'_fr_'.$fr.'.jpg';
	print $cmd,"\n";
	`$cmd`;
}

Das Perlscript ruft man mit dem angehängten Projektnamen auf:

./merge.pl projekt

5. Aus den Frames ein Video erstellen

Um den einzelnen Frames zu Bewegung zu verhelfen benutze ich mencoder. Es gibt aber hunderte von Möglichkeiten, dies zu realisieren.

mencoder "mf://projekt_fr_*.jpg" -mf fps=25 -o output.avi -ovc lavc -lavcopts vcodec=mpeg4

Für die Ungeduldigen …

habe ich alles in einer Datei zusammengefasst und auch noch eine Szene zum ausprobieren beigelegt: renderfarm.tgz

Die Datei muss nur noch entpackt werden und dann dies ausgeführt werden:

blender -b projekt.blend -P render.py -a
./merge.pl projekt
mencoder "mf://projekt_fr_*.jpg" -mf fps=25 -o output.avi -ovc lavc -lavcopts vcodec=mpeg4

Einschränkungen

Max. 9999 Frames – Diese Einschränkung lässt sich aber relativ einfach beseitigen, indem man

while len(frameNum) < 4:

auf einen höheren Wert setzt. Dies führt allerdings zu leeren Lockfiles.

Monatskarte

Seit ein paar Monaten überlege ich regelmäßig, ob sich für meine doch fast tägliche ÖPNV-Nutzung eventuell die Anschaffung von Monatstickets lohnt.

Monatelang habe ich meine wachsende Stempelfetzensammlung gehortet, gezählt und verglichen, wie Enten ihre Goldtaler. Nur ohne darin zu baden, denn das wäre albern. Gelohnt hätte sich das rohstoffschonende Konzept der 1-Zettel-Pro-Monat-Karte für meinen Geldbeutel allerdings nicht, war ich doch mit meiner handvoll Stempelmarken immer gut gefahren und dabei weniger als die monatlichen 43 Euro losgeworden.

Doch Ende letzter Woche hat sich diese Bilanz schlagartig geändert:

Am Donnerstag abend fuhr ich – wie so häufig – mit der StadtBahn. Verstrahlt, wie ich nunmal bin, fand ich an der Starthaltestelle natürlich die eine Minute zuvor bereitgelegte Fahrkarte nicht, dafür aber in meiner Sammlung noch eine Karte mit freiem Stempelfeld, kurz bevor das Verkehrsmittel meiner Wahl in die Station einfuhr. Glück gehabt. Also wurden standesgemäß die viel zu großen Kopfhörer aufgesetzt und zufrieden im Takt nickend Bahn gefahren, bis sich kurz vor dem Rathaus eine Fahrscheinkontrolle ankündigte.

Etwas zu vertieft in meine kleine heile Welt aus Gute-Laune-Musik hielt ich den sich mir nahenden Sturmtruppen das entwertete Billett vor die grüne Brust, damit ich endlich in Ruhe weiterfahren konnte. Alles klar, murmelte der etwas verdrießliche Mensch in grün, und wollte mir den Wisch gerade zurückgeben, als er noch kurz seine Hand drehte und mit merklich besserer Stimmung seinen Kollegen als Unterstützung herbeirief.

Auf der Rückseite war der Rest eines Monate alten Stempels. Der entwertet die Karte, wie mir freundlich mitgeteilt wurde.
Egal wo, auch wenn die Karten speziell neon-orange eingefärbte „HIER STEMPELN!!“-Seiten haben und diese nunmal komplett woanders sind als der Stempel.

„Nun gut, Arschkarte gezogen, war eh‘ mal wieder Zeit“, dachte ich bei mir, während die Sicherheitsmenschen noch immer damit beschäftigt waren,
mir zu erklären, dass das Ticket doch ein Einzelticket ist, weshalb man es nur einmal entwerten kann. Im Gegensatz zu Vierertickets – bei denen geht das vier mal, verstehnse?
Oh, war mir überhaupt gar nicht aufgefallen! Ich dachte, es wäre ein Sonderangebot mit Druckfehler! Ja, verstehe. Hm, ja, was auch immer.

Mobiel + Prodiac machen’s möglich

Was bringt also einfache Mathematik, wenn man die resultierende Rechnung ohne Faktoren wie den ortsansässigen Sicherheitsdienst PRODIAC macht?
Ganz klar: Herzlich wenig.

Lohntsichnicht + 40€ = Lohntsichdoch.
Monatsticket, ich komme!

Linux Konsolenbefehle für Anfänger

Da ich gefragt wurde, ob ich nicht mal eine Liste der grundlegenden Konsolenbefehle zusammenstellen könne, mache ich das jetzt einfach mal:

Verzeichnis wechseln

cd /etc/	# in das absolute Verzeichnis /etc wechseln
cd etc		# in das relative Verzeichnis etc wechseln
cd 		# in das eigene Verzeichnis wechseln
cd ~/fotos/	# im eigenen Verzeichnis zu den Fotos wechseln

~ ist synonym zum eigenen Homeverzeichnis

. ist das aktuelle Verzeichnis

/ ist das Verzeichnis in dem man alles andere findet

Verzeichnis erstellen

mkdir /home/eisfrei/fotos	# das Verzeichnis fotos im Homeverzeichnis von eisfrei erstellen
mkdir fotos	# das Verzeichnis fotos im aktuellen Verzeichnis erstellen

Dateien in einem Verzeichnis listen

ls    		# zeigt einem das aktuelle Verzeichnis an
ls -l    	# zeigt das aktuelle Verzeichnis in einer Listenansicht
ls /etc    	# zeigt den Inhalt von /etc

Dateien kopieren

cp /etc/hosts /home/user/    # kopiert die Datei hosts in das Verzeichnis von user
cp -r /home/user1/ /home/user2/	# kopiert alle Dateien von user1 zu user2
cp -R /home/user1/ /home/user2/	# beachtet auch versteckte Dateien

Dateien verschieben/Umbenennen

mv datei1 datei2    # datei1 wird in datei2 umbenannt
mv dir1/ dir2/    # das Verzeichznis dir1 wird in dir2 umbenannt

Dateien löschen

rm datei    # eine einzelne Datei löschen
rm -r verzeichnis    # Verzeichnis inklusive Inhalt löschen
rm -rf verzeichnis    # Verzeichnis inklusive Inhalt löschen (ohne Nachfrage)

Verzeichnis löschen

rmdir verzeichnis    # ein leeres Verzeichnis löschen

Textdateien anzeigen

Wenn man nur kurz den Inhalt einer Datei sehen will:

cat datei.txt    # zeigt den Inhalt von datei.txt in der Konsole an
tail datei.txt    # zeigt das Ende von datei.txt an
head datei.txt    # zeigt den Anfang von datei.txt an
grep suchwort datei.txt    # zeigt nur Zeilen an, in denen das Suchwort vorkommt

Dateien suchen

find . -iname '*.jpg'	# alle JPGs in den Unterverzeichnissen auflisten
find / -iname '*suchwort*'	# alle Dateien in denen das Suchwort vorkommt auflisten

Textdateien bearbeiten

Es gibt Editoren wie Sand am Meer. Für Anfänger am geeignetsten und auf den meisten System vorinstalliert ist nano.

nano /etc/X11/xorg.conf	# die Grafikkonfiguration bearbeiten

Benutzer wechseln / Programme als Administrator ausführen

su	# als root im aktuellen Verzeichnis weiter arbeiten
su -	# als root in dessen Homeverzeichnis weiter arbeiten
su eisfrei	# als eisfrei im aktuellen Verzeichnis weiter arbeiten
su - eisfrei	# als eisfrei in dessen Homeverzeichnis weiter arbeiten
sudo nano /etc/X11/xorg.conf	# Grafikeinstellungen mit Adminrechten bearbeiten

Prozessorlastige Programme aufspüren und beseitigen

top    # ist in etwa der "Taskmanager" von Linux
kill prozessnummer    # das Programm was man mit top gefunden hat beenden
kill -9 prozessnummer    # das Programm zum beenden zwingen
killall prozessname	# sämtliche Programme mit dem Prozessnamen beenden
killall -9 prozessname	# beenden erzwingen, wenn es sonst nicht reagiert

Mir ist klar, dass ich einiges an Befehlen unterschlagen habe. Wenn mir noch wichtige Befehle einfallen, packe ich sie mit dazu.

Velsenfest vom viralen Marketing überzeugt

Velsenmeer c’t AnzeigeUnd es scheint ja auch zu funktionieren, mit dem viralen Marketing. Zumindest mache ich mit…

Aber worum gehts?

Nihil Fit Sine Causa – Nichts geschieht ohne Grund

Ziemlich zeitgleich mit dem Erscheinen der neuen c’t – in der die Van Velsenmeerstiftung eine recht eingebildete Anzeige geschaltet hat – haben diverse Blogger Holzkästchen mit Lochkarten gekriegt. Thomas, Nils [edit]doch kein Empfänger – macht aber nichts 😉 [/edit], Sebastian, Alexander, Mariusz und Robert gehören zu den Empfängern. Selbstverständlich ereifert sich das Internet besonders schnell, wenn es Rätsel zu knacken gilt und nichts anderes wurde hier präsentiert. Wenn man die Dechiffrierung der Lochkarten außer Acht lässt, ergibt sich folgendes Bild:

Auf den Lochkarten ist ein Stempelaufdruck von thefinalmill.com, welche laut Webseite im Jahre 2002 aufgelöst wurde und die auf vanvelsenmeer.org verweist. Ebenfalls zu den Seiten gehört in-a-rush.com, was wohl als Alibi-Blog gedacht war. Als Schmankerl wurden hier gleich fünf Lochkarten veröffentlicht. Alle drei Seiten liegen auf dem Rechner mit der IP 208.109.181.199, die ebenfalls über godaddy registriert wurde. Wunderbar anonym also. Und im gleichen Maße suspekt.

Auf der Stiftungsseite gibt es eine Bibliothek, die über ein wenig Javascript eher schlecht mit einem Passwort gesichert ist. nihilfit – falls es jemanden interessieren sollte. Nur ist die Bibliothek derzeit wohl noch nicht ganz eingerichtet – ob sie jemals kommt, ist eine andere Frage – und man kriegt nur folgenden Hinweis:

At the moment the library is under construction.

Please try again later.

Ich persönlich glaube nicht, dass sie fertig gebaut wird. Immerhin sollte es dort sonst Infos zu ewigem Leben, Gravitationswellen, nicht leitenden Metalle und was nicht allem geben. Wahrscheinlicher ist, dass dort zu gegebener Zeit Nelson laut HAHA ruft.

Das Video auf der Starseite ist übrigens auch nicht zu verachten. Man kauft dem Homscheid (Gepardenforelle?) seine Rolle nicht wirklich ab.

Virales Marketing also, oder SEOs gone wild?

P.S.: Ich habe absichtlich keine Links gesetzt, man will ja nicht an irgendwelche Spinner Linklove verschenken. Oh und ruft nicht die 0180 Nummer an 😉

Ich falle dann mal übermüdet ins Bett. Verzeiht die wirschen Gedankengänge…