Fork me on GitHub Fork me on GitHub

uninformativ.de

GNU, Linux, Shell und Co.

Noch mehr ASCII-Spielzeug und ein PDF zur perspektivischen Projektion

Pingu-Avatar

2015-02-28, 13:00:45

Letzte Woche habe ich noch viel an asciiworld geschraubt. Dabei habe ich mich ein bisschen mit sphärischer Geometrie beschäftigt und auf einigen Seitengassen auch ISO-Surfaces als alte Bekannte wiedergetroffen. Ins eigentliche Programm ist dann aber doch wieder nur eine recht „plumpe“ kartesische Lösung zum Zeichnen des Footprints eines Satelliten gewandert (Zusatzskript „asciiworld-sat-track“):

[…]

asciiworld

Pingu-Avatar

2015-02-01, 16:08:47

Man hat mich auf blessed-contrib aufmerksam gemacht. Huch, was ist das? Eine Weltkarte im Terminal? Das trifft genau meinen Geschmack, das will ich auch haben!

Gesagt, getan: asciiworld auf GitHub und im AUR.

                    ._____,  ._____,                                            
            .__LJoooooJoooo"""` '""o"`    7oor`  '"`___,   _ooo__,    ___,      
o .__\______oooooooooooo__ 7_   ._or       ______._oo__ro""`    """"7r"""\______
"7oo| __,      '  |_7oooJo` \_J"` 'or    _".Jo,""""    '`                 .____o
  'oo""`""o,      '"\_J '"\_         .Jo,ooJJ"`                       Jo""7or'  
          '"o        '` Jooo|        '7o" .,  .__ ._                  _o` '`    
            L         .Jr"           |r7/7ooL_L"7`7o|             __J"\o`       
            '7_     __/`             .r"""LLJooo` .r              7|7or`        
              "o, r"`oo             J"         7L 'oo__,    ,    _J|            
    ""          |_oJor7oo,          |           oL _J` "|.J"7_ 7o`|,            
                   '7o_Jo__         7,           7o|    |J,  |o_| Jo,           
                      o    "7        """"",      ./      '`  7o,_rLoL           
                     .|     '""\,        'L     |`            7ooo7rroo"_o_,    
                      7,       J`         ||    |,.,            """7LL/or" "`,  
`                      "|     .|          |,   ."|7`             __"  "`\,  _| "
                        |   .r"            L  .r '"              L       "|     
                       .|  _r              'LJ"                  |_/""J, J`   _,
                       J J"`                                           "o`   _or
                       r|`_,                           L                     "  
                       """                                                      
                        ._J|                      .__,,   ______________,       
         _______.______JooL         __oJr""""""""""  ""L""`             """"7o, 
   |ooor"       `"    |ooo_._oL_oo""`                                      .o|  
r"""""""`                 '"                                                '"""

Das war natürlich nur der Anfang. Zuallererst habe ich auch einfach nur eine SVG-Datei gezeichnet (mithilfe eines recht hässlichen Konverters). Kurz darauf habe ich dann Natural Earth Data gefunden: Kartenmaterial in Kugelkoordinaten, Public Domain. Hervorragend! :-)

Im Laufe der letzten zwei Wochen kam immer mehr dazu. Es entwickelte sich zu einem schönen Bastelprojekt und gewissermaßen zu einem „Feature-Ping-Pong“ zwischen mir und trehns termtrack. Ich glaube, ich lasse einfach mal die Bilder sprechen:

inline thumbnail
inline thumbnail

Das Kernprogramm ist in C geschrieben. Die Verknüpfung mit weiteren kurzen Skripten – hauptsächlich Python, weil es dafür sehr viele mächtige Bibliotheken gibt – erlaubt dann das Tracken von Satelliten:

inline thumbnail

Oder die Darstellung der derzeit aktiven TCP/IP-Verbindungen via GeoIP-Datenbank:

inline thumbnail

Oder was einem sonst noch einfällt.

Man sieht auf den Bildern, dass sich der Darstellungsstil hin und wieder mal geringfügig ändert. Das liegt einfach daran, dass es ein herrliches Bastelprojekt ist, bei dem es einem schwer fällt, nicht doch hier oder da nochmal zu schrauben. ;-)

lariza goes WebKit2

Pingu-Avatar

2015-01-01, 11:55:34

Im August 2014 hat man sich von WebKit1 verabschiedet. Wenn man die Entwicklung vorher schon verfolgt hat, war das abzusehen. Für meinen Browser lariza hieß das, dass er nun auf einem wirklich wackeligen Fundament stand. Wie bereits bekannt, war WebKit1 ohnehin nicht die allerbeste Wahl aufgrund der vielen Bugs und Abstürze.

Nach WebKit1 kommt WebKit2.

Anfang November habe ich lariza auf WebKit2 portiert, genauer gesagt auf „GTK+ 3 und WebKit2GTK+“. Während sich WebKit2 vor einem halben Jahr, als ich mit lariza angefangen hatte, noch in einem ähnlichen Zustand wie WebKit1 befand (viele Abstürze) und Flash damals nicht ging, so hat sich die Situation bis heute deutlich verbessert. Es stürzt noch ab, ja, aber ziemlich selten. Durch das Modell mit den getrennten Prozessen reißt es auch nicht gleich die ganze lariza in Grund und Boden. Flash geht mittlerweile auch.

lariza v14.08 war also das letzte lariza-Release mit WebKit1. Seit lariza v15.01 hat lariza nun WebKit2 als Backend und damit wieder Hoffnung auf eine Zukunft. Sollte da draußen jemand upgraden wollen, so möge er den Hinweis in der README zum AdBlock-Modul beachten.

inline thumbnail

Mit der neuen lariza bin ich so zufrieden, wie man halt sein kann. Der Browser ist durchaus im Alltag benutzbar und gerade für mich in Sachen Konfiguration und Wartung um Welten angenehmer als Firefox. Und natürlich finde ich es aus Sicht des Minimalismus toll, dass das Ding – auch jetzt noch – nur 810 SLOC hat, plus 69 SLOC für das AdBlock-Modul. Trotzdem ist und bleibt WebKit ein Projekt, das im Vergleich zu den anderen Giganten einfach ein Zwerg ist. Google, die Mozilla-Foundation, Apple und Microsoft, die können einfach viel mehr Energie aufwenden, um dieses unfassbare Monster namens „Web“ bezwingen zu können. Viel besser als mit WebKit2 geht es vermutlich einfach nicht.

Zumindest nicht, solange man nicht hergeht, das ganze momentan existierende Web wegschmeißt und ein neues macht, für das jeder halbwegs fähige Programmierer innerhalb von einem Monat einen kompletten Browser schreiben kann.

Alternative Wecker-Strategie

Pingu-Avatar

2015-01-01, 09:50:11

Das mit dem Wecker zieht sich jetzt schon eine ganze Weile lang hin. Kurz zusammengefasst: Ich war mit keinem Wecker auf dem Markt zufrieden und wollte daher einen selbst bauen. Seit ich mit dem Bau angefangen habe, habe ich – trotzig wie ich bin – gar keinen Wecker mehr benutzt. „Bäh, dann halt nicht!“ Das war vor einem halben Jahr.

Der Witz ist jetzt natürlich, dass ich trotz „fehlenden“ Weckers immer noch pünktlich bin. Ich wache unter der Woche zwischen 5:30 und 6:30 Uhr auf, an freien Tagen schlafe ich auch mal bis 9 Uhr und die Umstellung von Sonntag auf Montag ist auch kein Problem. Im letzten halben Jahr kam ich nicht ein Mal zu spät.

Der zweite Witz ist, dass ich nach wie vor morgens hundemüde bin. Es fällt mir sehr schwer, aufzustehen. Es ist nicht so, dass ich einfach ein Frühaufsteher wäre. Ginge es nach mir, wäre Dienstbeginn um 15 Uhr, frühestens. Wenn ich keine Zwänge von außen habe, dann dauert es nur wenige Tage, bis ich regelmäßig zwischen 2 und 4 Uhr nachts erst schlafen gehe. Wenn ich das tue, fühle ich mich auch deutlich fitter und ausgeglichener. Ob mit oder ohne Wecker, früh aufstehen ist eine Qual. Ich gehe heute auch nicht deutlich früher ins Bett als noch zu Weckerzeiten. Ohne Club Mate oder Kaffee ist im Büro auch nicht allzu viel von mir zu erwarten. ;-)

Wie passt das zusammen? Ich glaube, hier sind zwei Mechanismen am Werk. Zum einen ist es mir schlichtweg wichtig, pünktlich zu sein. Ich empfinde es als ziemlich respektlos und unhöflich, wenn es einen festen Termin gibt und man mich warten lässt, folglich bemühe ich mich meinerseits eben, immer ein paar Minuten vor der ausgemachten Zeit da zu sein. Vermutlich kommt daher die „Motivation“ für den zweiten Mechanismus: Ich habe zwar einen Rollladen und hier scheint morgens nicht die Sonne rein, aber ich habe nach wie vor eine Uhr, die ich nachts leicht ablesen kann. In manchen Nächten fällt mir auf, dass ich nachts immer mal wieder aufwache und auf die Uhr schaue. Ich mutmaße einfach mal, dass das eigentlich immer so ist (und ich vergesse es nur – glaubt man dem Internet, wacht der Mensch ohnehin bis zu 30 Mal pro Nacht kurz auf und vergisst das wieder – keine Ahnung, bin kein Schlafwissenschaftler) und ich daher ein grobes Gefühl für die Zeit habe. Ein zusätzliches Experiment könnte also sein, die Uhr einfach mal ohne mein Wissen falsche Zeiten anzeigen zu lassen. Das traue ich mich dann allerdings doch nicht. ;-)

Wie auch immer das nun funktioniert, es ändert auf jeden Fall meine Anforderungen. Ich brauche keine „custom alarm clock“. Daher beerdige ich dieses Projekt hiermit.

Solange ich das zweite Experiment namens „keine Uhr“ nicht wage, brauche ich zwar nach wie vor immer noch eine Uhr. Die Liste der Anforderungen ist hier aber deutlich geschrumpft, da das Ding halt deutlich weniger können muss. Ob es da am Markt etwas passendes gibt, weiß ich nicht. Und so lange mein alter Radiowecker die Zeit noch anzeigt, spare ich mir die Such nach einem neuen Gerät auch.

So. Jetzt habe ich ’nen Haufen Arduino- und Elektro-Krimskrams zum Rumspielen. :D

Window Managing: „Mal eben ins Meeting“

Pingu-Avatar

2014-12-25, 16:41:53

Ich habe auf der Arbeit einen Laptop und zwei externe Bildschirme, also insgesamt drei Monitore. Die meiste Action findet zwar auf einem Monitor statt und die anderen beiden dienen nur als eine Art „Information Radiator“ (Lust auf Buzzword-Bingo?), aber nichtsdestotrotz sind es drei Monitore, auf denen sich Fenster verteilen. So.

Nun ist es ja so, dass Meetings leider recht häufig stattfinden. Was passiert dann mit all den Fenstern? Sobald ich meine zwei Monitore mit „xrandr“ deaktiviere, werden die Fenster „durcheinandergewürfelt“: Sie landen schlichtweg alle auf einem Monitor und wenn ich später die Bildschirme wieder anschließe, muss ich die Fenster manuell neu verteilen. Sehr lästig. Ich höre auch von anderen Usern – egal, ob Linux oder Mac – häufig, dass sie von diesem Verhalten sehr genervt sind und sich wünschen, dass sich der Computer doch bitte merken solle, wo welches Fenster war.

Ich habe das jetzt jedenfalls. Eigentlich gehört noch dieser Commit dazu, denn das ganze funktioniert so:

  • Der erste Schritt ist, dass dwm-intern alle Monitore immer anhand ihres Offsets auf der x-Achse sortiert werden. Da ich meine Bildschirme immer nur horizontal anordne und nicht vertikal, ergibt das Sinn. Somit ist „Monitor 0“ immer der Bildschirm ganz links, „Monitor 1“ dann der rechts daneben und so weiter. (Man kann sich hier leider nicht auf die Reihenfolge von Xinerama verlassen.)
  • Es gibt einen neuen Knopf für „save placement“. Diesen Knopf drücke ich einmal vor dem Abstöpseln der Monitore. dwm merkt sich dann, welcher Client wo war und welche Tags ich auf welchem Monitor gerade angezeigt habe.
  • Ich hocke dann im Meeting und will da eigentlich nicht wesentlich mehr tun, als ein Browserfenster am Beamer anzuzeigen. Oder eben Slides. Es ist mir also ziemlich egal, wo die ganzen existierenden Fenster durch das Abstöpseln der Monitore gelandet sind.
  • Wenn ich an meinen Platz zurückkomme, stecke ich die Bildschirme wieder an und drücke den Knopf für „restore placement“. Bam! Alles ist wieder wie vorher.

dwm ist dabei egal, welche Auflösungen die einzelnen Monitore haben, wichtig ist nur die Anordnung. Ich kann also auch meinen Rechner schnappen, in ein Rückzugsbüro gehen, dort zwei ganz andere Bildschirme anstöpseln und kann trotzdem die Fensterplatzierung wiederherstellen. Netter Bonus.

Ich hätte ja gerne eine Lösung, die nicht dwm-spezifisch ist. Man könnte da an ein einfaches Skript denken, das ein bisschen „wmctrl“ bedient. Leider ist das nicht sinnvoll machbar, weil sich einerseits das ganze Tagging-Konzept von dwm nicht mit EWMH oder so verträgt, andererseits will ich auch die Anordnung der Fenster pro Monitor wiederherstellen können – also ich will, dass das Terminal von rechts oben auch nach der Wiederherstellung wieder rechts oben ist. dwm-intern ist dafür die Position des Clients in einem Stack verantwortlich. Von diesem Stack hat die „Außenwelt“ keine Ahnung. Von außen könnte ich nur x- und y-Koordinaten setzen, was dwm aber herzlich wenig interessiert.

Wäre es sinnvoll, das Placement persistent zu speichern? Nein, denn dafür gibt es dwm-Regeln. Wäre es sinnvoll, das komplette Problem mit dwm-Regeln zu erschlagen? Nein, denn dann bräuchte ich für jedes Fenster eine Regel, was (für mich) nicht praktikabel ist.

Seit ich diese Funktion habe, machen Meetings jedenfalls deutlich mehr Spaß. ;-)