Category Archives: asm

LINKLISTE #00000110

David Bauer hat den Selbstversuch gewagt und Programmieren innerhalb eines Jahres überwiegend mit Code Academy gelernt. Er schreibt in diesem Artikel über seine Erfolge, Misserfolge und was ihn dann doch wieder motivieren konnte. Er sieht erfreulicherweise auch davon ab, am Ende seiner Entwicklung sich selbst als Superprogrammierer zu sehen. Er betont stattdessen, was er auf dem Weg zu einem programmierenden Journalisten, der für “Programmierer-Maßstäbe” nichts kann, alles gelernt hat. Er war auf jeden Fall sehr viel fleißiger als ich und hat auch schon kleine Webanwendungen gebaut und auf github gestellt.

Moeffju war so nett, meine Sexwürfel auf Github zu forken (haha wie das klingt!) und dem Code ein bisschen mehr Stil zu verleihen. Es gibt bestimmte Konventionen, die im oben verlinkten Style Guide nachgelesen werden können und an welche man sich der Lesbarkeit halber halten sollte.

Das erste Smartphone!
Danke Leitmedium.

We are all DOOOOOOOMED!
Danke Jakob.

Das Forum InformatikerInnen für Frieden und gesellschaftliche Verantwortung vergibt einen Preis für Abschlussarbeiten, welche sich mit Informatik und Gesellschaft auseinandersetzen. Einreichungen bis zum 31. Mai.

Eine lange, traurige Geschichte über Encryption Standards und das Erklären von Encryption Standards. Mit Strichmännchen. Aber es hat irgendwie auch ein Happy End.

Hätte ich das gewusst. Hier wird sehr knapp, aber dennoch überraschend verständlich die Architektur eines x86-Prozessors in einer Übersicht erklärt.

Netzpolitik.org ist ein wichtiges Blog, wo zentrale Diskussionen der Netzpolitik aufgegriffen, analysiert und wiedergegeben werden. Bzw. was noch viel wichtiger ist: Teilweise werden sie dort erstmal zu zentralen Diskussionen gemacht. Damit das so bleibt, braucht Netzpolitik.org GELDGELDGELD. Ihr könnt und solltet ein paar Euro spenden, ich werd auch mal schauen, was sich tun lässt. Besser ist natürlich ein Dauerauftrag. Von den 30 000 LeserInnen (ich habe aus dramaturgischen Gründen deren Statistik übernommen) könnten ja wenigstens 50% einen Euro jeden Monat spenden und damit unabhängige Berichterstattung über die Politik im Internet, dem wichtigsten Medium der jetzigen und zukünftigen Zeit, finanzieren.
Tut es besser jetzt und rühmt euch mit euren heldenhaften Motiven, bevor wir es alle nur noch tun, um die nervigen Banner loszuwerden. Aber die Fotos sind echt gut! (Disclaimer: Die Fotos sind von m..ach lassen wir das)

Linkliste #00000110

Getaggt mit , , ,

Mein Computorbit

Ich hab ein schlechtes Gewissen. Vor zwei Monaten fragte “Gast”:

Hallo,
danke erstmal für dein Blog! Interessant wäre noch zu wissen, wann du zum ersten Mal Kontakt zu Computern hattest (und mit welchem Modell) und in welchem Alter du jetzt zum ersten Mal anfängst zu programmieren. Bei Frauen scheint dies nämlich oft erst wesentlich später als bei Männern zu passieren (warum auch immer).

Und dann schrieb er/sie zwei Tage später

Möchtest du nicht darauf antworten oder hast du nur gerade keine Zeit? Würde mich nämlich wirklich interessieren…
 

Und wiederum zwei Tage später dann las ich in der Zeitung von einem Menschen, namens Gast der erst versuchte sich umzubringen, überlebte und dann einem Circus beitrat, wieder ausstieg und dann ein paar Menschen umlegte. Als Gründe nannte er, dass er Montage nicht mag, einen bescheuerten Vornamen hat und dass Fiona ihm nie antwortete. Seufz.

Also dann. Die Laufbahn meiner Computerisierung, der Orbit from the Ground Up:

Unser erster Computer. Hm. Das war glaube ich ein kleiner Lerncomputer, auf dem es 31 verschiedene Programm gab. Solche Dinge wie Worträtsel, aber wenn ich mich richtig erinnere konnte man darauf auch QBasic lernen. Aber dafür war ich noch viel zu jung, um mir das selber anzueignen. Vermutlich etwas zwischen 6-8 Jahre alt. In derselben Zeit hatten wir einen Amiga. Fick Ja. Einen Amiga. Ein Heimcomputer der -zumindest bei uns- nur für Spiele genutzt wurde. Ich muss immer noch ziemlich jung gewesen sein, auf jeden Fall war ich darauf angewiesen, dass meine zwei Brüder genügend Freunde hatten, mit denen sie die Disketten tauschen konnten. Allerdings verbrachte ich nicht allzu viel Zeit damit, viele Spiele verstand ich noch gar nicht. Ab und zu spielte ich mit einem meiner Brüder North and South oder Rick Dangerous, zu sehr viel mehr war ich gar nicht in der Lage. Und naja. Mit seinem großen Bruder Computer spielen ist irgendwie so erfreulich wie mit einem irren Drogenboss Aufzug zu fahren. Entweder bescheißt er und man verliert oder man verliert nicht und dann wird man gehauen. Oder so ähnlich war das.
Was dann mit dem Amiga passierte weiß ich gar nicht so recht. Ich trau mich auch nicht zu fragen. Vielleicht haben wir zuviel daran prokrastiniert, ihn kaputtgemacht oder uns zu oft gestritten deswegen. Bei insgesamt vier Geschwistern kann das schonmal passieren.

Der nächste Computer hatte ein Windows 95 drauf und den bekamen wir etwa um 98 rum.
Es war eine hässliche Zeit. Es war eine Zeit der kantigen Schrift, des langen Wartens und des lauten Lüfters. Und dann erlöste uns das Millenium mit einem lauten Knall und Zack! war das Internet da. Wir alle versammelten uns um den Computer herum, um dieses Internet auszuprobieren. Und natürlich fällt meinem ältesten Bruder nichts Besseres ein als diese Seite aufzurufen. Was meinen Vater relativ schnell dazu veranlasste, das Internet wieder “auszumachen”. Kostete ja schließlich Geld.

Die nächsten Jahre waren angeblich ziemlich ereignisreich. Terror und so. Ich weiß aber nix davon, ich war im Internet. Spätestens die Flatrate läutete die Epoche der Internet-Sozialisierung in meinem Leben ein.  Allerdings bin ich froh, dass ich so früh schon im Internet verloren ging. Ich habe mich so etwas wie ausgetobt und mittlerweile doch das Gefühl eine Souveränität gegenüber den Verlockungen des Internets entwickelt zu haben. Und nebenbei zogen wir noch auf einen Mac Mini um den meine Eltern immer noch benutzen.

Darauf folgte ein eigener Laptop den ich irgendwo in Deutschland verlor und jetzt habe ich ein IBM Thinkpad mit Linux. :)

Soweit zu meiner Computergenese.  Zwar waren Computer und das Internet schon lange ein essentieller Bestandteil meines Lebens. Aber natürlich ist das was ich jetzt tue ein Schritt in ein ganz anderes Nutzer/Maschinen-Verhältnis als es bisher war.
Computer waren für mich fertige Produkte mit einer Palette an angebotenen Möglichkeiten. Sie waren keine dynamischen Werkzeuge, die ich meinen Bedürfnissen anpasse .
Aber das Umdenken ist auch kein plötzlicher Einschnitt gewesen sondern bahnte sich langsam an.

Ich hatte in der Schule mal ITG aber auch nur ein Halbjahr und scheiterte ziemlich daran. Das muss 2002 gewesen sein, als ich 12 war. Ich fand den Unterricht unheimlich langweilig und musste mir tausend Mal die Anleitung anhören, wie ich jetzt ein gif zwischenspeichere und dann irgendwo reinkopiere bis ich es verstand und dann nie wieder brauchte.
Aber das änderte sich bald. Als wir den Mac bekamen war ich schon neugierig darauf, wie er funktionierte. Alleine dadurch, dass ich so furchtbar viel Zeit mit dem Computer verbrachte führte dazu, dass ich ihn nach und nach besser verstand.
Mit 16 hatte ich dann einen Freund, den ich (haha) im Internet kennenlernte. Er ist ein ziemlicher Technik-Freak und wenn ich ihn besuchte konnte ich immer ein bisschen auf seinem Laptop zuschauen. Er benutze Linux und ich bekam einen kleinen Einblick in flexible Nutzeroberflächen, Konsolen und Open Software.
Ich lernte meinen Mac immer besser kennen und als ich mal für ein halbes Jahr in Montana wohnte wurde ich sogar ab und zu dafür bezahlt, Leuten, die Probleme mit ihrem Mac haben etwas zu unterstützen. Allerdings war das Support auf einem…sagen wir niedrigen Level. In etwa so

- “Howdy! Ya know, I wanted t’write that text for mah grandchild and now it’s like jibbedigone ‘n I dunno where the redneckhell did ah put it?”
– “I see. Apparently you minimized the window. So um let’s maximize it again. Well. There you go.”
– “Awesome!”
– “Yeah u know, it’s peanuts. Nothing big really”
– “Here, take yer 20 bucks!”
– “Oh.”

Die nächste Station auf dieser Laufbahn tangierte meine Fotografinnendasein. Unser Unternehmen hatte eine Homepage und ich war gezwungen mir ein wenig davon anzueignen. Dafür lernte ich ein wenig html und php um Galerien anzulegen. Und es machte tatsächlich auch ein bisschen Spaß, auch wenn ich nicht wirklich kreativ dabei sein konnte, sondern Code immer nur umschrieb.
Zu der Zeit fiel mir auch auf, dass ich in vielen Freundeskreisen die Einzige war, die überhaupt wusste was ein Quelltext ist. Naja. Natürlich bis ich in die Glitzerwelt der Nerds eintrat und Plom 2010 kennenlernte. Genau genommen hab ich ihn schon ein Jahr vorher auf einer Party kennengelernt und angepöbelt. Auf einem Panel traf ich ihn wieder und seine ganzen verrückten Nerdfreund ebenfalls. Der Beginn einer Freundschaft mit einem IRC-Chatkollektiv!

Und ja, der Rest ist ja bekannt. Seit ich die Nerds (also das Umfeld um Plom herum) kenne erstreckt sich vor mir ein Universum, dessen Grenzen weit außerhalb meiner Sichtweite liegen. Jedesmal wenn sie über ein Thema -sei es aus der Netzpolitik oder über schlechte Internetseiten (z.B. meine alte Fotografinnenseite) oder über Prozessoren- reden wird mir bewusst, was ich alles noch nicht weiß. Und nicht nur das, ich kann auch den Bezug zu meiner Lebensrealität herstellen. Nicht nur weil die Schnittmengen zwischen meinen Interessengebieten und denen der Spezialexpertenprogrammierern sowieso immer größer werden sondern auch weil ich verstehe, dass es für (bisherige) Nichtprogrammierer ebenfalls an Bedeutung gewinnt. Themen wie Bundestrojaner, Möglichkeiten der Technik und Digitalisierung der Gesellschaft gehen eben alle an.

Und deswegen habe ich mit 21 Jahren angefangen Programmieren zu lernen :)

Getaggt mit

Counting like a Booliot

Die Sonne scheint, es ist Feiertag, ich bin zu Besuch bei meinen Eltern, sitze in ihrem Garten, bald gibt es Abendessen und ein großartiger Sommer kündigt sich an.
Menschen gehen raus zum Tanzen, umarmen sich, ob Freund ob Feind,  selbst Hund und Postbote, Lantzschi und Erlehmann, Julis und Anti-Deutsche, egal, alles lacht und singt!

Auch: (Bzw. Denn): Wir haben Assembler durch.

Das letzte Kapitel, das wir uns vornahmen handelte vom “Counting like a Computer”. Also von Binärcode, Hexadezimalcode und dem andern da.
Das Vergnügen, Binärcode nicht zu lernen hatte ich ja bereits am Anfang des Kurses. Nach den letzten zwei Programmiersessions verstehe ich alle drei Zählweisen nicht wirklich, aber immerhin besser als gar nicht zu wissen, was los ist, wenn zwei generische Hacker sich gegenübersitzen und hochkonzentriert mit ihren Fingern zählen.

Spannender (und damit meine ich lediglich eine Stufe über “ziemlich langweilig”)  war das mit der Booleschen Logik. Oder besser gesagt die Boolesche Algebra, die mit den Operationen And, Or, Not und Xor funktioniert. Dabei spielen nur zwei Aussagen eine Rolle, nämlich “1 und 0″ bzw. “wahr und falsch” oder  “An und Aus”.

Jetzt kann man z.B. mit zwei Bytes, die 8 Bits haben so eine Operation ausführen. Bit für Bit wird z.B. “Geandet”. Wenn z.B. die ersten Bits jeweils eine 1 sind, ist das Ergebnis 1. Wenn aber eines der beiden Bits eine 0 ist, ist das Ergebnis 0. Und wenn beide eine 0 sind ist das Ergebnis wiederum 1. Bei Not, Xor und Or sieht das dann natürlich anders aus.

Es gibt aber auch Operationen, die definitiv z.B. aus allen Bits eine Null machen. Wenn ich z.B. das Register %eax mit sich selber XORe, wird aus allen Bits eine Null, da bei XOR alle Bitpaare mit denselben Werten eine Null ausgeben. Und klar. Wenn ich die Bits von %eax mit den Bits von %eax XORe, treffen auf eine Null immer eine Null und auf eine Eins immer Einsen. Uns das Geniale ist, dass ich damit

xorl %eax

quasi das hier gemacht habe:

movl $0, %eax

Nur halt viel schneller :)
Und wenn hier jetzt alles falsch ist, weist mich bitte drauf hin, ich hatte nämlich erhebliche Schwierigkeiten damit, das zu verstehen.

Als nächstes sprachen wir über ein Anwendungsgebiet von Oktalcode. Wenn die erhabenen Linuxuser dieser Erde ein ls -l in ihre Konsole tippen kann man die Zugangsberechtigungen zu Dateien, Ordnern etc. sehen.
Ich erinnerte mich auch dunkel an den Open-Syscall zurück der ebenfalls so einen permission Code verlante. Diese Permission Codes sind in den Syscalls in Oktalcode geschrieben, in meiner Konsole sehe ich sie mit dieser Struktur:

-rwxr-xr-x

Die ersten drei Zeichen rwx bedeuten, dass der Owner (meistens root) alles darf. ALLES. Da kennt er nix. Er darf die Datei als Programm ausführen (x), er darf die Datei lesen (r) und er darf die Datei – Fuck Yeah’ – editieren (w).  Das dürfen die zwei anderen zwei Parteien (group & others) offensichtlich nicht. Da steht nämlich jeweils nur r-x und das w fehlt.

Das kann man aber auch anders ausdrücken!

Zum Beispiel mit einer Zahl. Sagen wir mit der 1337. Okok geht nicht. Dann mit der 0751.

0: Die Null ist ein Indikator dafür, dass jetzt ACHTUNG! eine Oktalzahl kommt.

7: Die 7 ist im Binärcode eine 00000111. Die letzten drei Ziffern sind entscheidend. Eine Eins bedeutet hier “Jajaja, ich stehe für den Buchstaben der hier hin soll!” Wir haben dreimal eine Eins, was bedeutet dass dreimal ein Buchstabe eingesetzt werden kann, nämlich  “rwx” . Also bedeutet die 7 am Anfang, dass der Owner alle Rechte hat.

5: Die 5 ist im Binärcode eine 00000101, also ein  astreines r-x, denn für das w fehlt die Eins. Und das bedeutet naaaaaa? Was bedeutet das für die zweite Gruppe?

1: Die 1 ist lediglich eine 00000001 im Binärcode, ein –x also nur. Kann man nix machen.

Und das war’s!
Wir schauten uns dann noch gemeinsam den Code für das Programm in dem Kapitel an, bzw. die gekürzte Version von Plom. Ich hab vergessen was das Programm tut und der Originalcode ist so schlecht, dass ich daraus nichts schließen kann. Aber das macht nix. Es konvertiert halt von einem Zahlensystem ins Andere.
Erst erklärte er mir das Programm und irgendwann übernahm ich und erklärte es mir selbst. Und das war toll. Auch wenn ich mich nie ernsthaft Assemblerprogrammiererin nennen würde (außer zu Trollierungszwecken) kann ich mittlerweile zumindest mit meinem Grundwissen den Zweck eines Programms erknobeln, wenn natürlich auch nur bis zu einem gewissen Punkt. Aber ich habe so etwas wie eine Schwelle überwunden ab der ich mit meinen Kenntnissen selbstständig Neues aneignen kann.
Ich bin schon froh, dass es vorbei ist, aber in einem Gespräch wurde ich letztens darauf aufmerksam gemacht, dass ich vermutlich erst im Laufe der nächsten Lerneinheit, in der wir C lernen, verstehen werde, warum es eine verflucht gute Idee war, mit Assembler anzufangen. Mit derselben Person unterhielt ich mich tatsächlich dann noch ein bisschen über Prozessorarchitektur und Assembler.Aber die Hälfte von dem Ganzen hab ich mit dem ausgenüchterten Alkohol wohl verabschiedet und vergessen. Hm. Hab ich mich überhaupt mit Jemandem darüber unterhalten? Egal. Ah, doch, es gibt Beweise :)

———————————————————————————————————————

 

Also dann. Ciao Assembler. Ich denke, die Distanz wird uns gut tun. Und mit meiner neuen, der C-Sprache, glaube ich, werde ich mich selbst und dich in einem neuen Licht sehen. Ich bin stolz darauf, dich zu kennen und bin sehr an unserer gemeinsamen Zeit gewachsen. Dafür danke ich dir.

With U2665

P.S. Aber das Assemblerlehrbuch muss ich zugeben, war ne ziemliche gequirlte Scheiße. Hoffentlich setzt Plom seinen Plan bald in die Tat um und schreibt ein Besseres. Basierend auf meinen Memoiren: “Assembler and I”

Getaggt mit

The Segmentation Cake is a Lie

Island! Land der atemberaubenden Landschaft, der monumentalen Fjorde, der schier unendlichen Gesteinswüsten, der Jahrtausende währenden Demokratie und des Esszimmers, wo wir alle vor unseren Laptops sitzen.

Um sich dem schlechten Einfluss Erlehmanns zu entziehen, sind wir kurzerhand mit 6 anderen Leuten 1000 km nach Dänemark gefahren und haben uns in eine Fähre gesetzt, die drei Tage lang weg, einfach nur weg schipperte. Wir hätten auch die Malediven genommen, aber Island tut es auch.

Aber natürlich haben wir uns nicht von der trivialen Natur hier, die sich so unverschämt anbietet, ablenken lassen. Wir hatten tatsächlich zwei Programmiersessions. Und zwar angenehm kurz und angenehm buchlos.
Diesmal ging es um Speichermanagement. Und Plom leitete die Session mit der Offenbarung ein, dass das Fledermausland von dem ich sprach eine Lüge ist. Kurze Erklärung wie ich mir das bisher vorgestellt hatte:
Wenn ich ein Programm bastle, wird dafür ein Stack angelegt, also ein Bereich auf meinem Arbeitsspeicher. Und der ist so aufgebaut:

—————————————————-
Programmanweisungen (mein Code, den ich schrub)

Programmdatendings, also zB mein Ascii-Code, mit dem was gemacht werden soll

Äh Ende

FLEDERMAUSLAND

Dings

Dingseaxscheißewashastdugesagt?
.section .achichsollimmernochichdachtewirhättenschonaufgehörtohok

————————————————

Naja mir fiel auf, dass ich noch nicht wirklich eine Ahnung habe, wie der Stack jetzt wirklich aufgebaut ist. Deswegen haben wir nochmal zusammen einen Stack gemalt. (haha fun-fact, grad nochmal Plom nach etwas gefragt und hab erfahren, dass das ja gar nicht der Stack ist, sondern der Arbeitsspeicher!) Und der sieht so aus:

————————————————————————————————————–

 Byte 0                    #Hier stehen so Dinge wie "kannst du  
.section .text             #bitte grad ne Einkaufsliste schreiben und                           #beweg doch noch eben den Müll nach
                           #draußen und das ganze ist hier z.B. 100                             #Bytes lang
  
 Byte 100                  #Und hier steht drin was auf die
.section .data             #Einkaufsliste soll

 Byte 300                  #Hab vergessen was da drin steht, irgend 
.section .bss              #etwas mit Buffer glaube ich
 
 Byte 400 
--------------------------- 
BREAK BREAK BREAK          #Den Speicherort des BREAKS kann ich 
---------------------------#adressieren und verschieben, um den 
                           #Buffer zu vergrößern 

.section .fledermausland   #Ja haha, fledermausland,von wegen, ficken
                           #das gibt es ja noch gar nicht  
---------------------------
 Byte 1337
STACK                      #Und hier fängt jetzt endlich mein Stack
                           #an, ihr wisst schon, den ich mit pushl
                           #und popl mit Dingen vollmachte.

———————————————————————————————————————-

Also wie gesagt, das ist gar nicht der Stack den ich grad beschrieben hab, sondern der Arbeitsspeicher. Na was auch immer das jetzt heißt.
Jedenfalls muss der Bereich in .fledermausland erst gemappt werden damit ich ihn überhaupt lesen und beschreiben kann. Vorher ist da nicht wirklich irgendwas. Der Bereich auf meinem Arbeitsspeicher der reserviert wird, ist nämlich nur virtuell und nicht physisch vorhanden.  Das ist so wie einen Tisch im Restaurant servieren. Vielleicht in so einem Dunkelrestaurant wo man nichts sieht. Und man denkt, man sitzt an einem Tisch für die ehrenwerte 40-köpfige Gesellschaft für Volkskunde aber in Wirklichkeit wird immer nur ein weiterer billiger Ikeatisch heimlich an unseren rangetragen sobald neue Gäste kommen.

Und was der Chef des Dunkelrestaurants tut, ist seine MitarbeiterInnen mit seinem Allokierer oder seinem Pager dazu aufzufordern, diese Tische möglichst lautlos und unbemerkt rumzutragen.
Die Chefin, das bin natürlich ich. Eine Funktion namens alloc ist der Pager, und damit pinge ich den Kernel an, also meinen Mitarbeiter, der dann die Bytes heranträgt.

So einfach ist das!

Und jetzt wo ich den langweiligen Teil und eigentlich Zweck dieses Blogs abgehakt habe, kann ich ja über die interessanteren Dinge sprechen.

Island ist so toll :)))
Ich habe plomlompom dazu überredet, mit mir Yoga zu machen und auf einen riesigen Berg zu klettern, fast bis in die Wolken rein. Im Gegenzug hat er mir den Fenstermanager I3 gezeigt. Und ich habe beschlossen, dass ich in Zukunft weniger grafisches Klimbim haben möchte, sondern versuche so viel wie möglich in der Konsole zu erledigen. Sogar meine Hausaufgaben.
Ich habe immerhin schon die Farbe meiner Konsole in der config-Datei geändert. Hust… in grün auf schwarzem Hintergrund natürlich.
So wie allgebrah, der uns ebenfalls auf unserer Reise begleitet. Und ziemlich viel Hackercontent mit einbringt. Einer dieser Menschen die auf den Faröerinseln durch ein pittoreskes Dorf laufen, vorbei an Jahrhunderte alten Gebäuden und sich wie ein Gargoylebernd auf einen Sockel setzen, den Laptop ausklappen und ein offenes W-Lan suchen. Und dabei immer filmreif grüne Schrift über ihren Bildschirm fließen lasen. Er ist also schon ein bisschen Erlehmann-Ersatzbernd. Aber natürlich kein würdiger Ersatz. Und das spricht eigentlich für ihn.

Als wir gestern in Reykjavik waren, haben Plom und ich eine Freundin besucht, und von ihrem Mitbewohner habe ich erfahren, dass hier in Island zum Einen deutsche ARRRRRBeitskraft sehr wertgeschätzt wird und unter Anderem gute ProgrammiererInnen gesucht werden. Wie durch Zufall erfuhr ich dann, dass COBOL-Programmierer um die 200€ pro Stunde verdienen. Erinnert mich daran, fionalerntcobol.wordpress.com zu reservieren…
Der Mitbewohner macht irgendwas mit 3D-Druckern und kann ein wenig “Processing”, was eine Programmiersprache ist. Beim Nachschlagen auf Wikipedia stießen wir auf diese interessante Website:

http://www.helloworldexample.net/

“Hello World” auf etlichen verschiedenen Programmiersprachen. Da gibt es so verrückte Sprachen wie Whitespace oder eine Hundeprogrammiersprache. Es lohnt sich, da mal reinzuschauen und herablassend über Pythoncode zu lachen (Ha, das ist ja lächerlich, so unkompliziert!)

Was ich aber viel interessanter fand, dass er uns erzählte, mal bei einer Freundin gewesen zu sein, die einen kleinen Vulkan im Garten hatte. Lässig.

Von Reykjavik aus ging es dann zurück ins Ferienhaus, mit einem ziemlich kleinen gelben Trabbi namens Ulf, mit dem wir unter Anderem an Björks schwarzen Haus vorbeifuhren! Und immer wenn ein Auto an uns vorbei fuhr spritzte das Regenwasser so stark, dass Ulf fast komplett überschwemmt wurde. Schön war das.

Jetzt geht es aber auch schon fast wieder Richtung Heimat, Richtung die Stadt, in der erlehmann lauert. Bis dahin schaffen wir womöglich sogar noch ein weiteres Kapitel, das vom “Counting like a Computer handelt”.
Ich finde, Island ist genau der richtige Ort, um sich mit Boole’scher Logik zu befassen. Warum auch immer.

Und hier wird übrigens über unseren Urlaub gebloggt.
http://isnodrama.wordpress.com/


Vorne: Plomlompom, Fotografiona
im Hintergrund: Erlehmann

Elektro

Mit den Nerds Musik machen ist in etwa genau das, was ich mir darunter vorgestellt hatte: Keine Instrumente, keine Melodie, kein Ton, kein Bullshit.
Stattdessen ein Terminal, lautes Rauschen und Knattern und Pieptöne die den schlimmsten Mono-Klingeltönen an Markerschütterung in nichts nachstehen. Welch ein Spaß!

Ich hatte ja schon im letzten Artikel erwähnt, dass bei Linux alles eine Datei ist, was es so schön hackbar macht. Nicht nur meine schlampig geschriebene To-Do-Listen und Uninotizen sind in Dateiform gespeichert, sondern sogar die Hardware ist als Datei darstellbar. So auch die Tastaturbelegung und meine Grafikkarte sind offene Gefäße in die ich etwas reinpacken kann.

Und was macht ein Nerd, wenn er einen offenen Topf bei sich in der Wohnung findet? Er bestellt etwas beim Asiaten nebenan!

Naja, unabhängig davon versuchten wir also verschiedene Dateien wiederum in die Hardwaredateien zu schreiben. Als erstes schickte ich eine mp3-Datei in den Frame Buffer. Heraus kam folgende Pixelkotze:

Was ich aber nicht wusste war, dass das wahre erbrochene Pixelchaos erst dann entsteht, wenn ich eine random-byte-Datei dafür verwende! Das sieht dann nämlich so aus:

Das yougrow-Lied war also tatsächlich als das Lied das es ist dargestellt und gewissermaßen nicht verfremdet. Interessant ist daran, dass ich also die yougrow-Datei wirklich sehen und ihr Muster erkennen konnte. Oder theoretisch könnte. Was interessante Gedanken zur Perzeption von Musik zulässt.

Der Haupteil des Abends war aber dem Schreiben eines eigenen Musikprogramms gewidmet. Hier, “Musik” heißt das Programm:

.globl _start
#.lcomm buffer, 100
buffer:
.byte 0,255,0,255,0,255,0,255,0,255
.byte 0,255,0,255,0,255,0,255,0,255
.byte 0,255,0,255,0,255,0,255,0,255
.byte 0,255,0,255,0,255,0,255,0,255
.byte 0,255,0,255,0,255,0,255,0,255
.byte 0,255,0,255,0,255,0,255,0,255
.byte 0,255,0,255,0,255,0,255,0,255
.byte 0,255,0,255,0,255,0,255,0,255
.byte 0,255,0,255,0,255,0,255,0,255
.byte 0,255,0,255,0,255,0,255,0,255
_start:
pushl $buffer
pushl $100
loop:
call play
 jmp loop
movl $1, %eax
movl $0, %ebx
int $128

Das Programm schreibt die Bytes in einen Speicherbereich und dessen Inhalt wird an das Soundkartendevice ( /dev/dsp ) geschickt. Die Funktion “play” die in der loop aufgerufen wird sieht so aus:

datei:
 .ascii "/dev/dsp"

.globl play
play:
movl $5, %eax
movl $datei, %ebx
movl $1, %ecx
int $0x80
pushl %eax
movl %eax, %ebx
movl $4, %eax
movl 12(%esp), %ecx
movl 8(%esp), %edx
int $0x80

Bei den Bytes gibt es drei Komponenten, die bestimmen, was für ein Geräusch (aka Musik) ausgegeben wird. Dafür ist wichtig zu verstehen, dass die Bytes in Wellen geordnet sind. Das heißt eine Welle geht in diesem Falle von 0 über 255 und dann wieder zur 0.

Der Abstand zwischen den einzelnen Wellen ist bestimmend für die Höhe des Tons. Die Menge der Bytes, die ich insgesamt hineinschreibe in den Framebuffer bestimmt die Länge.
Und die Lautstärke des Tons wird durch die Amplitude der Welle bestimmt. In diesem Falle 255 (von null bis 255). Das ist also lauter als 0-10-20-10-0…etc.

Nachdem wir über 9000 Bytes in den Buffer geschrieben haben konnten wir das Programm assemblern, mit der zugehörigen Funktion linken und dann ausführen. Es schreibt die Bytes nach /dev/dsp und zu hören ist der 0,5-Sekunden lange Ton von ein paar Bytes. Innerlich weinten wir alle ein bisschen, gerührt vom süßlichen, herzerwärmenden Klang wenn der Avatar in diese scheiß Falle mit den Spitzen fällt, stirbt und dann schlecht animiert aus dem Bild springt.

Nach dieser Deromantisierung von Allem was ich in 10 Jahren Geigenunterricht gelernt habe (als ob) ging ich mich betrinken und erzählte meinen mittlerweile sehr rar gewordenen Nicht-Nerd-Freunden davon, wie ich gerade Musik machte. Und stellte fest, dass der Ansatz, Wellen mit Bytes zu erzeugen und an den Speaker zu schicken ne verflucht spannende Geschichte ist. Oder sein kann. Also wenn ich erstmal das mit den Sys-Calls verstanden habe. Und eine vernünftige Funktionenbibliothek hab. Wenn ich wieder Zeit hab!

Also wenn ich erstmal wieder nüchtern bin und Assembler beherrsche, dann…!

Folgen

Erhalte jeden neuen Beitrag in deinen Posteingang.

Schließe dich 106 Followern an