Kotau
Freitag, 28. Januar 2011
Wieso werfen sich diesen Monat so viele auf die Erde?
Wochenblatt: Mit diesem würdelosen Kotau vor der lokalen Brauerlobby...
Kurier: Sein Nachfolger machte vor dem ÖGB den Kotau und die Tür wieder auf.
Welt: ... vielmehr macht unsere Kirche einen immer tieferen Kotau vor der säkularen...
Neues Volksblatt: Mit ihrem Kotau vor dem Boulevard hat die SPÖ...
Zeit: ... jemals zu einem derartigen Kotau hinreißen lassen.
MAZ: ... Hu mit einem Kotau gnädig zu stimmen.
usw.
Wenn es so weiter geht, erreicht es den gleichen Nervfaktor, wie Chapeau oder Masel tov.
Wochenblatt: Mit diesem würdelosen Kotau vor der lokalen Brauerlobby...
Kurier: Sein Nachfolger machte vor dem ÖGB den Kotau und die Tür wieder auf.
Welt: ... vielmehr macht unsere Kirche einen immer tieferen Kotau vor der säkularen...
Neues Volksblatt: Mit ihrem Kotau vor dem Boulevard hat die SPÖ...
Zeit: ... jemals zu einem derartigen Kotau hinreißen lassen.
MAZ: ... Hu mit einem Kotau gnädig zu stimmen.
usw.
Wenn es so weiter geht, erreicht es den gleichen Nervfaktor, wie Chapeau oder Masel tov.
Gentoo: rlwrap
Freitag, 21. Januar 2011
Wer Software wie Ocaml verwendet, bei der readline aus lizenztechnischen Gründen nicht rangebastelt werden darf, weicht notgedrungen auf ledit oder rlwrap aus. Leider ist die Version in Gentoos Portage ziemlich alt (stable 0.30, maskiert 0.32). Für 0.37 reicht es, das Ebuild der letzten Version in ein lokales Overlay zu kopieren, in ...-0.37 umzubenennen, das Manifest zu bauen und die neue Version zu installieren. Die letzten Schritte hatte ich vor Kurzem schon angerissen...
Matrox und mesa 7.9 unter Gentoo
Montag, 3. Januar 2011
xorg/mesa-Aktualisierungen sind immer etwas Feines. Das udev-Keyword flog vorher raus, man kennt ja das udev/hal-Debakel und die Treiber übersetzt man schon aus Reflex neu, man wurde ja schließlich nicht nur einmal von inaktiver Maus und Tastatur überrascht:
sudo emerge xf86-input-keyboard xf86-input-mouse xf86-video-mga
und trotzdem gab es etwas Neues: lahme und ruckelnde Videos. Die Ursache fand sich schnell:
(EE) AIGLX error: dlopen of /usr/lib/dri/mga_dri.so failed (/usr/lib/dri/mga_dri.so: cannot open shared object file: No such file or directory)
(EE) AIGLX: reverting to software rendering
(II) AIGLX: Loaded and initialized /usr/lib/dri/swrast_dri.so
(II) GLX: Initialized DRISWRAST GL provider for screen 0
die Lösung auch: Lokales Overlay verwenden bzw. anlegen, media-libs/mesa reinkopieren, im ebuild unter "classic"
driver_enable video_cards_mga mga
hinzufügen, Manifest basteln:
sudo ebuild mesa-7.9.ebuild manifest
mesa erneut kompilieren und fertig.
sudo emerge xf86-input-keyboard xf86-input-mouse xf86-video-mga
und trotzdem gab es etwas Neues: lahme und ruckelnde Videos. Die Ursache fand sich schnell:
(EE) AIGLX error: dlopen of /usr/lib/dri/mga_dri.so failed (/usr/lib/dri/mga_dri.so: cannot open shared object file: No such file or directory)
(EE) AIGLX: reverting to software rendering
(II) AIGLX: Loaded and initialized /usr/lib/dri/swrast_dri.so
(II) GLX: Initialized DRISWRAST GL provider for screen 0
die Lösung auch: Lokales Overlay verwenden bzw. anlegen, media-libs/mesa reinkopieren, im ebuild unter "classic"
driver_enable video_cards_mga mga
hinzufügen, Manifest basteln:
sudo ebuild mesa-7.9.ebuild manifest
mesa erneut kompilieren und fertig.
JMStV
Mittwoch, 1. Dezember 2010
Die Dummheit kennt länderweit mal wieder keine Grenzen, die Änderungen zum JMStV werden wohl durchgewunken und hoffentlich irgendwann auf anderer Ebene wieder einkassiert.
Bis dahin kann man sich vorübergehend tolle Bildchen für die eigene Netzseite kreieren lassen, um Kinder vor der bösen Welt zu schützen. ZB. bei jusprog, einem Kinderschutzprogramm der Erotikindustrie.
Nach Beantwortung der Fragen erhält man Zeichensalat zum Einbinden:

Mit "alternativer" Eingabe kann man die Ausgabe aufhübschen...

Ein-/Ausgabevalidierung lässt grüßen...
Bis dahin kann man sich vorübergehend tolle Bildchen für die eigene Netzseite kreieren lassen, um Kinder vor der bösen Welt zu schützen. ZB. bei jusprog, einem Kinderschutzprogramm der Erotikindustrie.
Nach Beantwortung der Fragen erhält man Zeichensalat zum Einbinden:

Mit "alternativer" Eingabe kann man die Ausgabe aufhübschen...

Ein-/Ausgabevalidierung lässt grüßen...
Pressefreiheit
Dienstag, 23. November 2010
Union stellt wegen Terrorgefahr Pressefreiheit auf den Prüfstand
Wer hat Angst vor Terroristen? Ich habe Angst vor der CDU - die ist weitaus gefährlicher.
Der Vorsitzende des Rechtausschusses des Bundestages, Siegfried Kauder (CDU), sagte der Saarbrücker Zeitung: „Wenn die Presse darüber berichtet, welche Orte besonders gefährdet sind, dann kann das unter Umständen ein Anreiz für Terroristen sein.“ [...] „Die Presse muss dazu verpflichtet werden, sich zurückzuhalten, wenn die Gefährdungslage wie jetzt hoch ist“, so Kauder weiter. [...] Vorstellbar seien gesetzliche Regelungen oder aber die Einführung eine Selbstverpflichtung der Medien, dass über bestimmte Erkenntnis nicht berichtet werde.
Wer hat Angst vor Terroristen? Ich habe Angst vor der CDU - die ist weitaus gefährlicher.
Hex Editor unter Linux
Freitag, 19. November 2010
Ich dachte nicht, dass das so ein Problem sein kann. Anzeigen via hexdump, xxd... kann jeder, dafür braucht man keinen Editor. Aber einfach mal bequem ein paar Bytes einfügen, ohne zu überschreiben ist schon zu kompliziert. Wtf?! Für derart triviale Sachen benötigen manche Exemplare Mono (bless), Gnome (ghex) oder gar Qt (lfhex):
Wirklich minimal - nur 160MB allein an Qt-Kram. Für biew muss man TERM erst auf vt100 setzen, damit es überhaupt startet. Kurz darauf würgt man schon ob der Steuerung und ruft ganz schnell emerge --unmerge auf. Bei wxhexeditor reichte schon der Screenshot auf der Netzseite als Ausschlusskriterium. Ein kleines bescheidenes bvi funktionierte dann tadellos - so kann's gehen.
Minimal dependencies (just Qt)
Wirklich minimal - nur 160MB allein an Qt-Kram. Für biew muss man TERM erst auf vt100 setzen, damit es überhaupt startet. Kurz darauf würgt man schon ob der Steuerung und ruft ganz schnell emerge --unmerge auf. Bei wxhexeditor reichte schon der Screenshot auf der Netzseite als Ausschlusskriterium. Ein kleines bescheidenes bvi funktionierte dann tadellos - so kann's gehen.
pdfnup --trim
Montag, 26. Juli 2010
Parameterreihenfolge ist: "left bottom right top", Eselsbrücke: css rückwärts.
Kriminalbeamte fordern Reset-Knopf fürs Internet
Sonntag, 18. Juli 2010
Kriminalbeamte fordern Ausweispflicht für das Internet und verdeckte Ermittlungen in sozialen Netzwerken
Lachen, Heulen, Mitleid? Ich weiß es nicht... In einem Punkt hat er aber recht:
BDK-Vorsitzender Klaus Jansen[...]: „Was wir brauchen, ist ein verlässlicher Identitätsnachweis im Netz. Wer das Internet für Käufe, Online-Überweisungen, andere Rechtsgeschäfte oder Behördengänge nutzen will, sollte sich zuvor bei einer staatlichen Stelle registrieren lassen müssen.“
Zudem solle die Polizei das Recht bekommen, „Trojaner, Viren und Schadprogramme von privaten Rechnern entfernen zu dürfen“, die zuvor von Kriminellen unbemerkt gekapert worden seien.
„Attacken auf die digitale Infrastruktur des Landes können sich ähnlich verheerend auswirken wie atomare Angriffe.“ Deshalb bedürfe es eines „Reset-Knopfs für das Internet“, mit dem das Kanzleramt Deutschland im Ernstfall sofort vom Netz nehmen könne.
Lachen, Heulen, Mitleid? Ich weiß es nicht... In einem Punkt hat er aber recht:
„Kompetenzgerangel, Unvermögen und Blauäugigkeit führen zu unfassbarem Politik-Versagen.“
Junge Union Berlin fordert Pornographieverbot
Donnerstag, 15. Juli 2010
Junge Union Berlin fordert Pornographieverbot
Flachpfeifen... Ebenso durchdachter Vorschlag vor einigen Tagen:
Es ist völlig unverständlich wie viele Politikerinnen und Politiker (auch der CDU/CSU) tatenlos bleiben. Anstatt mit aller Macht nach technischen Lösungen für die Eindämmung der Pornografie zu suchen, wird über die Meinungsfreiheit und Zensurfragen philosophiert. Dazu passt, dass eine interne BKA-Studie, die der Zeitung „Die Welt“ vorliegt, aufzeigt wie überfordert das BKA mit den derzeitigen Regelungen ist. Die Löschungsbemühungen bei Kinderpornografie-Inhalten bleiben völlig wirkungslos. Die Maxime „Löschen statt Sperren“ scheint nicht zu wirken. Wir haben als Junge Union auch lange gesagt, dass Sperrungen nutzlos, kontraproduktiv und zudem relativ leicht zu umgehen sind. Aber das Gleiche scheint für die Löschungsversuche zu gelten. Ein Umdenken muss her. Wir brauchen die Sperrung von kinderpornografischen Inhalten, wir fordern die Einrichtung wirksamer Altersbeschränkungen gegen die Porno-Welle aus dem Internet, wir fordern Aufklärungsprogramme für Eltern und Kinder. Ziel muss ein effektives Pornografieverbot für Jugendliche im Internet sein.
Flachpfeifen... Ebenso durchdachter Vorschlag vor einigen Tagen:
Bei Krawallen wie am Samstag in Neukölln sollten Freibäder zukünftig eine Woche lang geschlossen bleiben!
Scharfe Kritik an Mitgliedern der Vertriebenen-Stiftung
Donnerstag, 8. Juli 2010
Scharfe Kritik an Mitgliedern der Vertriebenen-Stiftung
Im besagten Artikel findet man:
Der lückenhaften und wirren Argumentation von Schultze-Rhonhof zu folgen ist ziemlich peinlich und merklich oberflächlich (Bsp. Siebentagekrieg vs. "Einmarsch in das Teschener Land"), im Kern allerdings nicht vollkommen falsch:
Dann kommt es aber ziemlich dicke:
Einen Hinweis auf Becks und Piłsudskis feuchte Träume anno '32/'33 im Zusammenspiel mit Frankreich hätte ich eher erwartet, als eine verständliche Reaktion auf die "Zerschlagung der Resttschechei".
Und nun? Mehr Geschichtswissen ist bei den Grünen auch nicht vorhanden. Wäre es nicht besser, sich an solchen Diskussionen zu reiben und einen gemeinsamen Konsens zu finden, als alles in polnischer Manier unter den Teppich zu kehren oder mit deutscher Alleinschuld auch für Nachkriegsverbrechen zu erklären?
Die Grünen-Spitze kritisierte in einer Erklärung die Benennung der BdV-Mitglieder Arnold Tölg und Hartmut Saenger als Stellvertreter für den Stiftungsrat. Beide seien mit Äußerungen aufgefallen, die dem Stiftungszweck der "Versöhnung mit unseren Nachbarn diametral entgegenlaufen" erklärten Renate Künast, Jürgen Trittin, Volker Beck, Katrin Göring-Eckardt und Claudia Roth.
Beck kritisierte in seiner Bundestagsrede besonders einen Artikel Saengers in der Preußischen Allgemeinen Zeitung vom September 2009, in dem er die Kriegsschuld Hitlers relativierte. In dem Artikel hatte Saenger unter anderem behauptet, Polen habe sich in den Jahren vor 1939 "besonders kriegerisch aufgeführt". Weiter schrieb Saenger in dem Artikel: "Im März 1939 machte Polen sogar gegen Deutschland mobil und gab damit Hitler die Möglichkeit der Aufkündigung des deutschpolnischen Nichtangriffspaktes von 1934."
Im besagten Artikel findet man:
Schlägt man beispielsweise das Buch von Gerd Schultze-Rhonhof auf („1939 – Der Krieg, der viele Väter hatte“ Untertitel: „Der lange Anlauf zum Zweiten Weltkrieg“), dann zeigt sich das ganze Ausmaß ständiger Großmachtskämpfe, militärischer Aktionen und neuer Bündnisbemühungen in der Zwischenkriegszeit.
Der lückenhaften und wirren Argumentation von Schultze-Rhonhof zu folgen ist ziemlich peinlich und merklich oberflächlich (Bsp. Siebentagekrieg vs. "Einmarsch in das Teschener Land"), im Kern allerdings nicht vollkommen falsch:
Besonders kriegerisch führte sich Polen auf. Der 1918 wieder erstandene Staat schaffte es in der kurzen Zeit bis 1921 gleich mit vier Nachbarn durch militärische Besetzungen und Kriege in dauerhaftem Streit zu liegen. Im Deutschen Reich wurden Posen und Westpreußen besetzt, in Oberschlesien drei Aufstände angezettelt, um Volksabstimmungen zu beeinflussen. Gegenüber der Sowjetunion wurde die vom Völkerbund vorgeschlagene und ethnisch begründete Curzonlinie abgelehnt und Krieg um weißrussische und ukrainische Gebiete geführt. Mit der Annexion dieser Gebiete schaffte sich der polnische Staat neben der Feindschaft des sowjetischen Russlands auch noch ein großes Minderheitenproblem. Neben diesen Konflikten mit seinen großen Nachbarn im Westen wie im Osten leistete sich Polen noch die Besetzung des Wilnaer Gebietes in Litauen und war mit dem Einmarsch in das Teschener Land auch bei der Zerschlagung der Tschechoslowakei dabei.
Dann kommt es aber ziemlich dicke:
Im März 1939 machte Polen sogar gegen Deutschland mobil und gab damit Hitler die Möglichkeit der Aufkündigung des deutsch-polnischen Nichtangriffspaktes von 1934.
Einen Hinweis auf Becks und Piłsudskis feuchte Träume anno '32/'33 im Zusammenspiel mit Frankreich hätte ich eher erwartet, als eine verständliche Reaktion auf die "Zerschlagung der Resttschechei".
Und nun? Mehr Geschichtswissen ist bei den Grünen auch nicht vorhanden. Wäre es nicht besser, sich an solchen Diskussionen zu reiben und einen gemeinsamen Konsens zu finden, als alles in polnischer Manier unter den Teppich zu kehren oder mit deutscher Alleinschuld auch für Nachkriegsverbrechen zu erklären?
Schulbuchzensur
Donnerstag, 1. Juli 2010
Gottes Werk und Bayerns Beitrag
Und wohin führt es? Fundichristen empören sich über religionskritische Texte:
und Cornelsen gibt nach:
Weiterhin:
- Zensur in der Schule: Bayern lässt anti-evangelikale Passagen in Schulbüchern streichen
- Sektenspinner
Aber so steht es in Artikel 131 der Freistaats-Verfassung, Absatz 2:
"Oberste Bildungsziele sind Ehrfurcht vor Gott, Achtung vor religiöser Überzeugung [...]"
Und wohin führt es? Fundichristen empören sich über religionskritische Texte:
"Idea" möchte erreichen, dass Medien der "christlichen Botschaft einen größeren Stellenwert einräumen". Das Portal gehört zur Evangelischen Allianz, einer Dachorganisation von Freikirchen und pietistischen Gruppierungen. Dort sammeln sich größtenteils protestantische Christen, die die Bibel oftmals wörtlich nehmen.
und Cornelsen gibt nach:
Wenig später, am Samstag, meldeten die christlichen Journalisten von "Idea" Vollzug: "Cornelsen-Verlag muss anti-evangelikale Passagen in Schulbuch streichen", lautete die Überschrift ihrer Meldung. Das Ministerium, so "Idea" weiter, dulde die Darstellung im Kapitel über Fundamentalismus in den USA nicht, und zwar mit Verweis auf Artikel 131 der bayerischen Verfassung ("Ehrfurcht vor Gott").
Weiterhin:
- Zensur in der Schule: Bayern lässt anti-evangelikale Passagen in Schulbüchern streichen
- Sektenspinner
Verweisaktualisierung
Mittwoch, 23. Juni 2010
Bücher
+Algorithmic Graph Theory
-CGI Programming Unleashed (2)
-Concepts, Techniques, and Models of Computer Programming :(
-Handbuch der Java-Programmierung
-Java ist auch eine Insel
-Online Bibliography of Haskell Research
-Practical Common Lisp
-Essential Skills for Agile Development
-Advanced Bash-Scripting Guide
-FreeBSD Assembly Language Programming
-Making Customized Bootable FreeBSD CD/Floppies
-Unix Text Processing
-Xlib Programming Manual
+Linkers and Loaders
-Mr Honey's Large Business Dictionary
+Mathematical Illustrations
-Praxisbuch Objektorientierung
-PVS Libraries
-A Byte of Python
-An Introduction to Python
-Dive into Python
-Text Processing in Python
-The Algorithm Design Manual
-Zum Selbstverständnis von Frauen im Konzentrationslager. Das Lager Ravensbrück. (Diss.)
-Bonner Kant-Korpus
-Kolbenschäden
-litCOLONY.de
-Kopp Verlag
-Michaelis Verlag
-Nation Europa Verlag GmbH
-Podzun-Pallas Verlag
+Zentrales Verzeichnis Digitalisierter Drucke
Geschichte
-Air Force Historical Research Agency (WWII) (Studies)
-Dampflokomotiven der Deutschen Reichsbahn
-Deutsches Historsiches Museum (Archiv,Erinnerungen)
-Die Welser in Venezuela
-IFDT - Zeitschrift für Innere Führung
-milit. Uniformen seit 1945
-Multimedia Learning Center (Wiesenthal) (Sammlungen)
-Nachrichtendienst für Historiker
-Schlacht- und Kampffeldforschung in Europa e.V.
-Siegfried Lauterwasser Collection
-Stasi-Landesbeauftragter Berlin
-Unterrichtsmaterial für den Geschichtsunterricht
-US Army - online bookshelves
-Verein für polit. Bildung und Information
-Verein zur Suche und Bergung vermisster Soldaten in Moldawien e.V.
-Worldwide Military Links
-Zeittafel der Menschheit
-Barbarossa (frz.)
-Fernsehen im Dritten Reich
-Finnish Military Page
-Griechenland im 2. Wk
-Pictures of War
-Photo Gallery of WWII: (3), (5 ru)
-Polenfeldzug
-SS-Frauen am Galgen
-The Aerial Reconnaissance Archives
-War History
-World War Two - Europe
-Posters of the 2nd WW
-The Holocaust
-Ziviler Strafvollzug für die Wehrmacht (Diss.)
-Zwangssterilisationen (Halle)
-4. GebDiv. - Enziandivision
-12. SS-PzDiv HJ
-62. Volksgrenadier-Division
-106. ID
-116. PzDiv. (Windhund)
-227. InfDiv
-Adolf Hitler Historical Archives
-B-Abt. 26 und 30
-Bildarchiv - Reichskommisariat
-Deutsches Afrikakorps
-Deutsche Marinegeschichte
-Die Dienstalterslisten der SS
-Die Luftwaffe im Kampf um die Luftherrschaft (Diss.)
-Dr. Max Merten (Diss.)
-Estonians in german army
-Fallschirmjäger 1936-1945
-Fallschirmjäger-Regiment 6
-Fallschirmpionierbataillon 5
-Generalleutnant Fritz H. Bayerlein
-German Persons
-Kampfgruppe Knittel
-KG 55
-Michael Wittmann (Akte)
-Sd.Kfz. 251
-Soldiers at War (ru)
-Before 1919...
-Die deutsche Kriegsmarine
-Die Geschichte der deutschen WKII U-Boote
-Feldgendarmerie
-G-Max Replica
+History-Shop
-Identifizierungskatalog für Kampfmittel des 1. & 2. Weltkrieges
+Identifizierungskatalog für Munition und Kampfmittel beider Weltkriege
-Dt. KFZe im Größenvergleich (pol)
-Luftwaffe Database
-Militariasammler.net
-Nordheide-Versand
-Panzerdiesel.com
-Propaganda Leaflets
-Rüstung und Rüstungserprobung in der deutschen Marinegeschichte (TVA) (Diss.)
-Subgunvideos
-Tables of Rank and Responsibility
-Tankomania
-Technical Panzer Archives
-The Desert Fox (ua. Tigerfibel)
-Tiger I Information Center
-Wehrpaß
-Zeugmeisterei
-Detlev Niemann
-Deutsche Ehrenzeichen
-Military Collectibles
-Ordensstatuten.de
-Ribbons of orders and decorations of the world
-wehrwolf.net (Orden etc.)
-Bunkerspecht
-Der Atlantikwall 1940 - 1945 (Diss.)
-Hölkewiese - Hinterpommern
-Kriegsgefangenenlager Bretzenheim
-Ostpreussen
-Ostpreussen.net
-Projekt zur Erforschung der NS-Lager
-Stalag VI A Hemer
-Stalingrad - Bilder einer Schlacht
-The Battle for Stalingrad
-Tunnel and Shelter Researching
+Heereskarten
-Die Linksammlung zum 1. Weltkrieg
-Die Reichstagsprotokolle 1867 - 1895
-Die Schlacht um Verdun
-Die Soldaten der dt. Fliegertruppe 1914-1918
-Erlebnisbericht aus dem Ersten Weltkrieg
-Karikaturen der Zeit des Imperialismus
-Regiments- & Divisionsgeschichten
-The Archaeology of the Western Front 1914-1918
-The Great War in a Different Light
-The Imperial German Army
-WW I - Link archive
-Das Militär in der DDR
-Der Schwarze Kanal
-Orden der DDR
-Ostalgie-Museum
-SU-22 in der NVA
KFZ
-AC
-Aston Martin
-MZ
-Royal Enfield (2)
-Triumph
+Gabors MZ Laden
-MZ-B
+ost2rad
+Powerdynamo
-wehrmachtsgespann.de
-Aston Martin Picture Gallery
-Brough Superior
-Classic Car Revue
-DDR-Moped
-Deutsche Uralgruppe
-DKW NZ
-Gnome & Rhone
-Lanz Bulldog
-Mit der MZ um die Welt
-MZ-Seite
-Oldie-Stammtisch
-Panzerfahrschule (2)
-Rolfs Adlerseite
-Sachsenharley
-Schwalbenfahrer
+Simantik
-The Bike Sheds
-Thomas' Motorradseiten
-Touren-AWO.de
-trabiCustomizer
-Verein zur Pflege historischer Technik
-Zündapp-Dienst
Software
-Geeqie
-ion
-Window Managers for X
Sonstiges
-AGAnauten
-Datenbank des nutzlosen Wissens
-del.icio.us
-Echte Namen
-Emil Steinberger
-Falling Sand Game
-Frau am Steuer
-German Top 20
-Juristen erklären das Netz
-Planarity
-Sodaconstructor
-Tatort (2)
-the box doodle project
-the CREATURES in my head
+Volksliederarchiv
+DLHs Commodore Archive
+PlayIT
-Alfredissimo
+Backecke
-Leipziger Allerlei
-Muffin.it
-Rezeptbibliothek
-Tuomo Valkonen
Verweissalat 1
Mittwoch, 23. Juni 2010
BugSpy
checkmycode
Panopticlick (browser tracking)
TinEye Reverse Image Search
wtfjs (JS)
A Twisty Maze of Linux Clocks, All Slightly Different
C Language Quirks
Command-Line Printing and Options (cups)
Data Compression Explained
How Not To Sort By Average Rating
List of Printers Which Do or Do Not Display Tracking Dots
List of software development philosophies
Online Emulation of Soviet Ternary Computer Setun
Tail Call Improvements in .NET Framework 4
Ten divisions to Easter
Zip Files All The Way Down
Charity
dompdf
GeSHI
phash (perceptual hash library)
pixlr (online graphics editor)
push (dataflow shell)
re2 (regular expressions)
SQL Buddy
stringencoders (string transformations)
The Disciplined Disciple Compiler (strict evaluated Haskell)
The Maxine Virtual Machine
The Transterpreter Project (vm)
tinypy
tmux
checkmycode
Panopticlick (browser tracking)
TinEye Reverse Image Search
wtfjs (JS)
A Twisty Maze of Linux Clocks, All Slightly Different
C Language Quirks
Command-Line Printing and Options (cups)
Data Compression Explained
How Not To Sort By Average Rating
List of Printers Which Do or Do Not Display Tracking Dots
List of software development philosophies
Online Emulation of Soviet Ternary Computer Setun
Tail Call Improvements in .NET Framework 4
Ten divisions to Easter
Zip Files All The Way Down
Charity
dompdf
GeSHI
phash (perceptual hash library)
pixlr (online graphics editor)
push (dataflow shell)
re2 (regular expressions)
SQL Buddy
stringencoders (string transformations)
The Disciplined Disciple Compiler (strict evaluated Haskell)
The Maxine Virtual Machine
The Transterpreter Project (vm)
tinypy
tmux
c++ productivity
Dienstag, 8. Juni 2010
Wieder ein schöner Beitrag von Linus Trovalds über C++:
Punktlandung.
So there are particular reasons why I think C is "as simple
as possible, but no simpler" for the particular case of an
OS kernel, or system programming in particular. That's why
I'm absolutely not saying that you should use C for all
projects.
But C++? I really don't think the "good features" of it
are very good at all. If you leave C behind, do it properly
and get some real features that matter. GC, some
concurrency support, dynamic code generation, whatever.
Punktlandung.
von dwm und mrxvt zu Xmonad und urxvt
Sonntag, 16. Mai 2010
Mit der Entwicklung von dwm war ich schon eine Weile unzufrieden, Xmonad hingegen hat sich seit meinem ersten Versuch vor drei Jahren inzwischen zu einem richtigen Metafenstermanager entwickelt. Nahezu jede Funktion ist anpassbar und bereits in mehreren Varianten verfügbar, ganz ohne C schreiben oder veraltete Patches anpassen zu müssen. Sehr, sehr nett.
Die erste .xmonad/xmonad.hs - weitestgehend zusammenkopiert aus der Doku:
import XMonad
import XMonad.Actions.CopyWindow
import XMonad.Actions.DwmPromote
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageDocks
import XMonad.Layout.Tabbed
import XMonad.Util.Run(spawnPipe)
import Data.Monoid
import System.Exit
import System.IO.UTF8
import qualified XMonad.StackSet as W
import qualified Data.Map as M
-- The preferred terminal program, which is used in a binding below and by
-- certain contrib modules.
--
myTerminal = "urxvtc"
-- Whether focus follows the mouse pointer.
myFocusFollowsMouse :: Bool
myFocusFollowsMouse = True
-- Width of the window border in pixels.
--
myBorderWidth = 1
-- modMask lets you specify which modkey you want to use. The default
-- is mod1Mask ("left alt"). You may also consider using mod3Mask
-- ("right alt"), which does not conflict with emacs keybindings. The
-- "windows key" is usually mod4Mask.
--
myModMask = mod4Mask
-- The mask for the numlock key. Numlock status is "masked" from the
-- current modifier status, so the keybindings will work with numlock on or
-- off. You may need to change this on some systems.
--
-- You can find the numlock modifier by running "xmodmap" and looking for a
-- modifier with Num_Lock bound to it:
--
-- > $ xmodmap | grep Num
-- > mod2 Num_Lock (0x4d)
--
-- Set numlockMask = 0 if you don't have a numlock key, or want to treat
-- numlock status separately.
--
myNumlockMask = mod2Mask
-- The default number of workspaces (virtual screens) and their names.
-- By default we use numeric strings, but any string may be used as a
-- workspace name. The number of workspaces is determined by the length
-- of this list.
--
-- A tagging example:
--
-- > workspaces = ["web", "irc", "code" ] ++ map show [4..9]
--
-- myWorkspaces = ["1","2","3","4","5","6","7","8","9"]
myWorkspaces = ["1","2","3","4","5:www","6:min"]
-- Border colors for unfocused and focused windows, respectively.
--
myNormalBorderColor = "#dddddd"
myFocusedBorderColor = "#ff0000"
------------------------------------------------------------------------
-- Key bindings. Add, modify or remove key bindings here.
--
myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
-- launch a terminal
[ ((modm .|. shiftMask, xK_Return), spawn $ XMonad.terminal conf)
-- launch dmenu
, ((modm, xK_p ), spawn "exe=`dmenu_path | dmenu` && eval \\"exec $exe\\"")
-- launch gmrun
-- , ((modm .|. shiftMask, xK_p ), spawn "gmrun")
-- close focused window
, ((modm .|. shiftMask, xK_c ), kill)
-- close focused window or just remove copy
, ((modm .|. shiftMask .|. controlMask, xK_c ), kill1)
-- Rotate through the available layout algorithms
, ((modm, xK_space ), sendMessage NextLayout)
-- Reset the layouts on the current workspace to default
, ((modm .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf)
-- Resize viewed windows to the correct size
, ((modm, xK_n ), refresh)
-- Move focus to the next window
, ((modm, xK_Tab ), windows W.focusDown)
-- Move focus to the next window
, ((modm, xK_j ), windows W.focusDown)
-- Move focus to the previous window
, ((modm, xK_k ), windows W.focusUp )
-- Move focus to the master window
, ((modm, xK_m ), windows W.focusMaster )
-- Swap the focused window and the master window
, ((modm, xK_Return), dwmpromote)
-- Swap the focused window with the next window
, ((modm .|. shiftMask, xK_j ), windows W.swapDown )
-- Swap the focused window with the previous window
, ((modm .|. shiftMask, xK_k ), windows W.swapUp )
-- Shrink the master area
, ((modm, xK_h ), sendMessage Shrink)
-- Expand the master area
, ((modm, xK_l ), sendMessage Expand)
-- Push window back into tiling
, ((modm, xK_t ), withFocused $ windows . W.sink)
-- Increment the number of windows in the master area
, ((modm , xK_comma ), sendMessage (IncMasterN 1))
-- Deincrement the number of windows in the master area
, ((modm , xK_period), sendMessage (IncMasterN (-1)))
-- Toggle the status bar gap
-- Use this binding with avoidStruts from Hooks.ManageDocks.
-- See also the statusBar function from Hooks.DynamicLog.
--
, ((modm , xK_b ), sendMessage ToggleStruts)
-- Quit xmonad
, ((modm .|. shiftMask, xK_q ), io (exitWith ExitSuccess))
-- Restart xmonad
, ((modm , xK_q ), spawn "xmonad --recompile; xmonad --restart")
]
++
-- mod-[1..9] @@ Switch to workspace N
-- mod-shift-[1..9] @@ Move client to workspace N
-- mod-control-shift-[1..9] @@ Copy client to workspace N
[((m .|. modm, k), windows $ f i)
| (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. ]
, (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask), (copy, shiftMask .|. controlMask)]]
--
-- mod-{w,e,r}, Switch to physical/Xinerama screens 1, 2, or 3
-- mod-shift-{w,e,r}, Move client to screen 1, 2, or 3
--
-- [((m .|. modm, key), screenWorkspace sc >>= flip whenJust (windows . f))
-- | (key, sc) <- zip [xK_w, xK_e, xK_r] [0..]
-- , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]]
++
[ ((modm, xK_o), spawn "opera -nomail -nolirc")
, ((modm, xK_e), spawn "claws-mail")
, ((modm, xK_f), spawn "firefox")
, ((modm, xK_g), spawn "gqview")
, ((modm .|. shiftMask, xK_g), spawn "geany")
, ((modm, xK_s), spawn "urxvt -pe tabbed,matcher")
, ((modm, xK_less), windows $ W.greedyView "5:www")
]
------------------------------------------------------------------------
-- Mouse bindings: default actions bound to mouse events
--
myMouseBindings (XConfig {XMonad.modMask = modm}) = M.fromList $
-- mod-button1, Set the window to floating mode and move by dragging
[ ((modm, button1), (\w -> focus w >> mouseMoveWindow w
>> windows W.shiftMaster))
-- mod-button2, Raise the window to the top of the stack
, ((modm, button2), (\w -> focus w >> windows W.shiftMaster))
-- mod-button3, Set the window to floating mode and resize by dragging
, ((modm, button3), (\w -> focus w >> mouseResizeWindow w
>> windows W.shiftMaster))
-- you may also bind events to the mouse scroll wheel (button4 and button5)
]
------------------------------------------------------------------------
-- Layouts:
-- You can specify and transform your layouts by modifying these values.
-- If you change layout bindings be sure to use 'mod-shift-space' after
-- restarting (with 'mod-q') to reset your layout state to the new
-- defaults, as xmonad preserves your old layout settings by default.
--
-- The available layouts. Note that each layout is separated by |||,
-- which denotes layout choice.
--
myLayout = avoidStruts(tiled ||| Mirror tiled ||| simpleTabbedAlways ||| Full)
where
-- default tiling algorithm partitions the screen into two panes
tiled = Tall nmaster delta ratio
-- The default number of windows in the master pane
nmaster = 1
-- Default proportion of screen occupied by master pane
-- ratio = 1/2
ratio = 7/10
-- Percent of screen to increment by when resizing panes
-- delta = 3/100
delta = 5/100
------------------------------------------------------------------------
-- Window rules:
-- Execute arbitrary actions and WindowSet manipulations when managing
-- a new window. You can use this to, for example, always float a
-- particular program, or have a client always appear on a particular
-- workspace.
--
-- To find the property name associated with a program, use
-- > xprop | grep WM_CLASS
-- and click on the client you're interested in.
--
-- To match on the WM_NAME, you can use 'title' in the same way that
-- 'className' and 'resource' are used below.
--
myManageHook = composeAll
[ className =? "Gimp" --> doFloat
, className =? "MPlayer" --> doFloat
, className =? "Opera" --> doShift "5:www"
,(className =? "Firefox" <&&> resource =? "Dialog") --> doFloat ]
------------------------------------------------------------------------
-- Event handling
-- * EwmhDesktops users should change this to ewmhDesktopsEventHook
--
-- Defines a custom handler function for X Events. The function should
-- return (All True) if the default handler is to be run afterwards. To
-- combine event hooks use mappend or mconcat from Data.Monoid.
--
myEventHook = mempty
------------------------------------------------------------------------
-- Status bars and logging
-- Perform an arbitrary action on each internal state change or X event.
-- See the 'XMonad.Hooks.DynamicLog' extension for examples.
--
-- myLogHook = return ()
myLogHook h = dynamicLogWithPP $ myPP h
myPP h = defaultPP
{ ppCurrent = wrap "^bg(#e5f9ff)^fg(#105468)" "^bg()^fg()"
, ppVisible = wrap "^fg(#a00000)" "^fg()"
, ppHidden = wrap "^fg(#ffffff)" "^fg()"
, ppHiddenNoWindows = wrap "^fg(#7eacb9)" "^fg()"
, ppSep = " | "
, ppWsSep = " "
, ppTitle = shorten 80
, ppOrder = workspaceTag
, ppOutput = System.IO.UTF8.hPutStrLn h
}
where workspaceTag (x:xs) = ("[ " ++ x ++ " ]") : xs
------------------------------------------------------------------------
-- Startup hook
-- Perform an arbitrary action each time xmonad starts or is restarted
-- with mod-q. Used by, e.g., XMonad.Layout.PerWorkspace to initialize
-- per-workspace layout choices.
--
-- By default, do nothing.
myStartupHook = return ()
------------------------------------------------------------------------
-- Now run xmonad with all the defaults we set up.
-- Run xmonad with the settings you specify. No need to modify this.
--
-- main = xmonad defaults
main = do dzenh <- spawnPipe "dzen2 -p -w 1280 -ta l"
xmonad $ defaults dzenh
-- A structure containing your configuration settings, overriding
-- fields in the default config. Any you don't override, will
-- use the defaults defined in xmonad/XMonad/Config.hs
--
-- No need to modify this.
--
defaults dzenh = defaultConfig {
-- simple stuff
terminal = myTerminal,
focusFollowsMouse = myFocusFollowsMouse,
borderWidth = myBorderWidth,
modMask = myModMask,
numlockMask = myNumlockMask,
workspaces = myWorkspaces,
normalBorderColor = myNormalBorderColor,
focusedBorderColor = myFocusedBorderColor,
-- key bindings
keys = myKeys,
mouseBindings = myMouseBindings,
-- hooks, layouts
layoutHook = myLayout,
manageHook = myManageHook,
handleEventHook = myEventHook,
logHook = myLogHook dzenh,
startupHook = myStartupHook
}
Die .xinitrc:
xsetroot -cursor_name left_ptr
urxvtd -f -o -q
exec xmonad
Der Ressourcenverbrauch ist höher, aber wenn ich dadurch schneller arbeiten kann, ist es mir egal.
PR NI VIRT RES SHR S %CPU %MEM TIME+
40 0 6916 3628 2496 S 0.0 0.7 0:00.05 xmonad
40 0 3020 1144 940 S 0.0 0.2 0:00.01 dzen2
40 0 3132 932 808 S 0.0 0.2 0:00.11 dwm
Gleiches gilt für mrxvt. Ein paar Bugs nervten auf Dauer (zB. Zeichenverlust beim Ändern der Fenstergröße) und die Dämonvariante urxvtd wird dem Tiling-Konzept meiner Meinung nach besser gerecht.
Die erste .xmonad/xmonad.hs - weitestgehend zusammenkopiert aus der Doku:
import XMonad
import XMonad.Actions.CopyWindow
import XMonad.Actions.DwmPromote
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageDocks
import XMonad.Layout.Tabbed
import XMonad.Util.Run(spawnPipe)
import Data.Monoid
import System.Exit
import System.IO.UTF8
import qualified XMonad.StackSet as W
import qualified Data.Map as M
-- The preferred terminal program, which is used in a binding below and by
-- certain contrib modules.
--
myTerminal = "urxvtc"
-- Whether focus follows the mouse pointer.
myFocusFollowsMouse :: Bool
myFocusFollowsMouse = True
-- Width of the window border in pixels.
--
myBorderWidth = 1
-- modMask lets you specify which modkey you want to use. The default
-- is mod1Mask ("left alt"). You may also consider using mod3Mask
-- ("right alt"), which does not conflict with emacs keybindings. The
-- "windows key" is usually mod4Mask.
--
myModMask = mod4Mask
-- The mask for the numlock key. Numlock status is "masked" from the
-- current modifier status, so the keybindings will work with numlock on or
-- off. You may need to change this on some systems.
--
-- You can find the numlock modifier by running "xmodmap" and looking for a
-- modifier with Num_Lock bound to it:
--
-- > $ xmodmap | grep Num
-- > mod2 Num_Lock (0x4d)
--
-- Set numlockMask = 0 if you don't have a numlock key, or want to treat
-- numlock status separately.
--
myNumlockMask = mod2Mask
-- The default number of workspaces (virtual screens) and their names.
-- By default we use numeric strings, but any string may be used as a
-- workspace name. The number of workspaces is determined by the length
-- of this list.
--
-- A tagging example:
--
-- > workspaces = ["web", "irc", "code" ] ++ map show [4..9]
--
-- myWorkspaces = ["1","2","3","4","5","6","7","8","9"]
myWorkspaces = ["1","2","3","4","5:www","6:min"]
-- Border colors for unfocused and focused windows, respectively.
--
myNormalBorderColor = "#dddddd"
myFocusedBorderColor = "#ff0000"
------------------------------------------------------------------------
-- Key bindings. Add, modify or remove key bindings here.
--
myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $
-- launch a terminal
[ ((modm .|. shiftMask, xK_Return), spawn $ XMonad.terminal conf)
-- launch dmenu
, ((modm, xK_p ), spawn "exe=`dmenu_path | dmenu` && eval \\"exec $exe\\"")
-- launch gmrun
-- , ((modm .|. shiftMask, xK_p ), spawn "gmrun")
-- close focused window
, ((modm .|. shiftMask, xK_c ), kill)
-- close focused window or just remove copy
, ((modm .|. shiftMask .|. controlMask, xK_c ), kill1)
-- Rotate through the available layout algorithms
, ((modm, xK_space ), sendMessage NextLayout)
-- Reset the layouts on the current workspace to default
, ((modm .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf)
-- Resize viewed windows to the correct size
, ((modm, xK_n ), refresh)
-- Move focus to the next window
, ((modm, xK_Tab ), windows W.focusDown)
-- Move focus to the next window
, ((modm, xK_j ), windows W.focusDown)
-- Move focus to the previous window
, ((modm, xK_k ), windows W.focusUp )
-- Move focus to the master window
, ((modm, xK_m ), windows W.focusMaster )
-- Swap the focused window and the master window
, ((modm, xK_Return), dwmpromote)
-- Swap the focused window with the next window
, ((modm .|. shiftMask, xK_j ), windows W.swapDown )
-- Swap the focused window with the previous window
, ((modm .|. shiftMask, xK_k ), windows W.swapUp )
-- Shrink the master area
, ((modm, xK_h ), sendMessage Shrink)
-- Expand the master area
, ((modm, xK_l ), sendMessage Expand)
-- Push window back into tiling
, ((modm, xK_t ), withFocused $ windows . W.sink)
-- Increment the number of windows in the master area
, ((modm , xK_comma ), sendMessage (IncMasterN 1))
-- Deincrement the number of windows in the master area
, ((modm , xK_period), sendMessage (IncMasterN (-1)))
-- Toggle the status bar gap
-- Use this binding with avoidStruts from Hooks.ManageDocks.
-- See also the statusBar function from Hooks.DynamicLog.
--
, ((modm , xK_b ), sendMessage ToggleStruts)
-- Quit xmonad
, ((modm .|. shiftMask, xK_q ), io (exitWith ExitSuccess))
-- Restart xmonad
, ((modm , xK_q ), spawn "xmonad --recompile; xmonad --restart")
]
++
-- mod-[1..9] @@ Switch to workspace N
-- mod-shift-[1..9] @@ Move client to workspace N
-- mod-control-shift-[1..9] @@ Copy client to workspace N
[((m .|. modm, k), windows $ f i)
| (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. ]
, (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask), (copy, shiftMask .|. controlMask)]]
--
-- mod-{w,e,r}, Switch to physical/Xinerama screens 1, 2, or 3
-- mod-shift-{w,e,r}, Move client to screen 1, 2, or 3
--
-- [((m .|. modm, key), screenWorkspace sc >>= flip whenJust (windows . f))
-- | (key, sc) <- zip [xK_w, xK_e, xK_r] [0..]
-- , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]]
++
[ ((modm, xK_o), spawn "opera -nomail -nolirc")
, ((modm, xK_e), spawn "claws-mail")
, ((modm, xK_f), spawn "firefox")
, ((modm, xK_g), spawn "gqview")
, ((modm .|. shiftMask, xK_g), spawn "geany")
, ((modm, xK_s), spawn "urxvt -pe tabbed,matcher")
, ((modm, xK_less), windows $ W.greedyView "5:www")
]
------------------------------------------------------------------------
-- Mouse bindings: default actions bound to mouse events
--
myMouseBindings (XConfig {XMonad.modMask = modm}) = M.fromList $
-- mod-button1, Set the window to floating mode and move by dragging
[ ((modm, button1), (\w -> focus w >> mouseMoveWindow w
>> windows W.shiftMaster))
-- mod-button2, Raise the window to the top of the stack
, ((modm, button2), (\w -> focus w >> windows W.shiftMaster))
-- mod-button3, Set the window to floating mode and resize by dragging
, ((modm, button3), (\w -> focus w >> mouseResizeWindow w
>> windows W.shiftMaster))
-- you may also bind events to the mouse scroll wheel (button4 and button5)
]
------------------------------------------------------------------------
-- Layouts:
-- You can specify and transform your layouts by modifying these values.
-- If you change layout bindings be sure to use 'mod-shift-space' after
-- restarting (with 'mod-q') to reset your layout state to the new
-- defaults, as xmonad preserves your old layout settings by default.
--
-- The available layouts. Note that each layout is separated by |||,
-- which denotes layout choice.
--
myLayout = avoidStruts(tiled ||| Mirror tiled ||| simpleTabbedAlways ||| Full)
where
-- default tiling algorithm partitions the screen into two panes
tiled = Tall nmaster delta ratio
-- The default number of windows in the master pane
nmaster = 1
-- Default proportion of screen occupied by master pane
-- ratio = 1/2
ratio = 7/10
-- Percent of screen to increment by when resizing panes
-- delta = 3/100
delta = 5/100
------------------------------------------------------------------------
-- Window rules:
-- Execute arbitrary actions and WindowSet manipulations when managing
-- a new window. You can use this to, for example, always float a
-- particular program, or have a client always appear on a particular
-- workspace.
--
-- To find the property name associated with a program, use
-- > xprop | grep WM_CLASS
-- and click on the client you're interested in.
--
-- To match on the WM_NAME, you can use 'title' in the same way that
-- 'className' and 'resource' are used below.
--
myManageHook = composeAll
[ className =? "Gimp" --> doFloat
, className =? "MPlayer" --> doFloat
, className =? "Opera" --> doShift "5:www"
,(className =? "Firefox" <&&> resource =? "Dialog") --> doFloat ]
------------------------------------------------------------------------
-- Event handling
-- * EwmhDesktops users should change this to ewmhDesktopsEventHook
--
-- Defines a custom handler function for X Events. The function should
-- return (All True) if the default handler is to be run afterwards. To
-- combine event hooks use mappend or mconcat from Data.Monoid.
--
myEventHook = mempty
------------------------------------------------------------------------
-- Status bars and logging
-- Perform an arbitrary action on each internal state change or X event.
-- See the 'XMonad.Hooks.DynamicLog' extension for examples.
--
-- myLogHook = return ()
myLogHook h = dynamicLogWithPP $ myPP h
myPP h = defaultPP
{ ppCurrent = wrap "^bg(#e5f9ff)^fg(#105468)" "^bg()^fg()"
, ppVisible = wrap "^fg(#a00000)" "^fg()"
, ppHidden = wrap "^fg(#ffffff)" "^fg()"
, ppHiddenNoWindows = wrap "^fg(#7eacb9)" "^fg()"
, ppSep = " | "
, ppWsSep = " "
, ppTitle = shorten 80
, ppOrder = workspaceTag
, ppOutput = System.IO.UTF8.hPutStrLn h
}
where workspaceTag (x:xs) = ("[ " ++ x ++ " ]") : xs
------------------------------------------------------------------------
-- Startup hook
-- Perform an arbitrary action each time xmonad starts or is restarted
-- with mod-q. Used by, e.g., XMonad.Layout.PerWorkspace to initialize
-- per-workspace layout choices.
--
-- By default, do nothing.
myStartupHook = return ()
------------------------------------------------------------------------
-- Now run xmonad with all the defaults we set up.
-- Run xmonad with the settings you specify. No need to modify this.
--
-- main = xmonad defaults
main = do dzenh <- spawnPipe "dzen2 -p -w 1280 -ta l"
xmonad $ defaults dzenh
-- A structure containing your configuration settings, overriding
-- fields in the default config. Any you don't override, will
-- use the defaults defined in xmonad/XMonad/Config.hs
--
-- No need to modify this.
--
defaults dzenh = defaultConfig {
-- simple stuff
terminal = myTerminal,
focusFollowsMouse = myFocusFollowsMouse,
borderWidth = myBorderWidth,
modMask = myModMask,
numlockMask = myNumlockMask,
workspaces = myWorkspaces,
normalBorderColor = myNormalBorderColor,
focusedBorderColor = myFocusedBorderColor,
-- key bindings
keys = myKeys,
mouseBindings = myMouseBindings,
-- hooks, layouts
layoutHook = myLayout,
manageHook = myManageHook,
handleEventHook = myEventHook,
logHook = myLogHook dzenh,
startupHook = myStartupHook
}
Die .xinitrc:
xsetroot -cursor_name left_ptr
urxvtd -f -o -q
exec xmonad
Der Ressourcenverbrauch ist höher, aber wenn ich dadurch schneller arbeiten kann, ist es mir egal.
PR NI VIRT RES SHR S %CPU %MEM TIME+
40 0 6916 3628 2496 S 0.0 0.7 0:00.05 xmonad
40 0 3020 1144 940 S 0.0 0.2 0:00.01 dzen2
40 0 3132 932 808 S 0.0 0.2 0:00.11 dwm
Gleiches gilt für mrxvt. Ein paar Bugs nervten auf Dauer (zB. Zeichenverlust beim Ändern der Fenstergröße) und die Dämonvariante urxvtd wird dem Tiling-Konzept meiner Meinung nach besser gerecht.