Hier braucht wohl jemand etwas Nachhilfe in Geschichte…
Denn ich kann die Frage mit JA beantworten.
Gefunden bei Fefe.
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.
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.
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.
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)
Es ist schon merkwürdig, wenn man sich genüsslich an einem Wandbecken entleert, und aus heiterem Himmel aus der Porzellanthronkabine rechts neben einem ein lautes „Grüß schön!!!11“ erschallt, wie eben im Bunker passiert.
Beim 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.
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.
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!
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.
Und 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…