Categories
coding Deutsch Software

Muss man programmieren können?

Seit meiner Schulzeit in den Siebziger Jahren höre ich Leute darüber diskutieren, ob jeder programmieren können sollte weil es ja nun Computer gäbe. Das ist nun immerhin mehr als 40 Jahre her. Damals hielten Grossrechner in Firmen Einzug. Personal Computer waren noch nicht erfunden. Taschenrechner, Quartzuhren mit Digitalanzeige und Funkgeräte waren der „heisseste Scheiss“, den man kaufen konnte. Ich hatte keinen Taschenrechner (zu teuer), aber eine Quartzuhr mit roter LED Anzeige. Die Ziffern leuchteten auf, wenn ich auf einen der kleinen Knöpfe an der Seite drückte. Wenn man auf die Uhr schaute, sah man keine Zeit, sondern musste erst drücken. Zu oft durfte man aber nicht drücken, weil ansonsten die Batterie schnell alle war. Als ich 13 war (1977), kaufte mein Vater einen TRS80 Computer für sich. Damit auf dem Bildschirm etwas angezeigt wurde, musste man etwas programmieren. Die Programmiersprache war Basic. 

Categories
Art begehbare Datenbank coding Deutsch moulage

Hello, art und die begehbare Datenbank

Letzte Woche war ich bei einem Stage de Moulage.
Nachdem ich verstanden hatte, was eine Moulage überhaupt ist, stellte sich die Frage:

Hm, was baue ich denn nur?

und ich musste unwillkürlich an meine Erlebnisse im Kunstunterricht Ende der siebziger Jahre denken.
Damals arbeitete ich oft an irgendeiner fixen Idee stundenlang herum und kaum einer meiner Mitschüler (und schon gar nicht mein Lehrer) verstand so recht, was ich da tue.
Ich habe dann meist in der letzten Stunde noch schnell das gemalt, was ich sollte und alles war gut.
Das Verhalten sehe ich auch heute noch sehr oft bei Programmierern :)

Was soll ich bauen?

Wenn ich etwas anfange, soll hinterher irgendwas herauskommen. Es fällt mir schwer, einfach zu “probieren”. Ich fange meist mit etwas Einfachem an und verfeinere es dann. Mittlerweile scheint das auch total in und akzeptiert zu sein :)

Nun baut man ja heute keine einfachen Produkte mehr, sondern User Experiences, und so sass ich ein wenig planlos vor meinem Klumpen Lehm und hatte exakt zwei Stunden Zeit etwas daraus zu basteln.

Ich überlege schon lange, so etwas wie eine begehbare Datenbank zu bauen. Ich stelle mir dabei oft etwas wie im Foto oben vor, aber mit mehr Mustern, Mengen, Relationen und Farben. Wie ich so gedanklich durch meine wüstenhafte Datenbank streifte, erinnerte ich mich an mein kleines Assembler Beipiel und dachte

Ok, ich schreibe Hello, art mit dem Lehm

Wenn man die Buchstaben anders repräsentiert, kann man auch mit Lehm etwas machen. Ha, nun packte es mich :)

Wenn man Hello, art in Buchstaben schreibt, dann benutzt man natürlich einen Zahlencode. Hinter jeder Taste auf einer Tastatur steckt eine Zahl, die an den Computer übermittelt wird. Der zeichnet dann etwas auf den Bildschirm. Der ASCII-Code ist eine Variante, Text darzustellen. Das grosse H hat den Dezimalwert 72, das kleine e den Dezimalwert 101, usw.
Leider versteht der Computer keine dezimalen Werte mit denen die Menschen ganz gut klarkommen.
Der Computer benötigt binäre– (2), oktale- (8) oder hexadezimale- (16) Werte um rechnen zu können.

  • ASCII Text: Hello, art
  • Dezimale Repräsentation: 72 101 108 108 111 44 32 97 114 116
  • Binäre Repräsentation: 1001000 1100101 1101100 1101100 1101111 101100 100000 1100001 1110010 1110100
  • Hexadezimale Repräsentation: 48 65 6c 6c 6f 2c 20 61 72 74
  • Oktale Repräsentation: 110 145 154 154 157 54 40 141 162 164

In Farben

Was mit Buchstaben geht, geht natürlich auch mit Farben. Farben werden auf Bildschirmen als RGB Wert (Rot, Grün, Blau) dargestellt. 100 Teile Rot, 100 Teile Grün und 100 Teile Blau ergeben beispielsweise eine Art Grau mit dem Hexadezimalcode #646464

Wenn ich mir mein Hello, art in Farben ansehe, sieht es so aus:

                   
nur Rot
                    
nur Grün
                    
nur Blau
                    

QR-Code

So, sieht Hello, art als QR-Code aus
hello, art

Balkendiagramm

Das hier sind Balken, die den Dezimalwert eines jeden Buchstaben anzeigen

hello_art-diagram

Schrift

Hier sind die Buchstaben in der relativen Farbe (Grüntöne) und die Grösse der Buchstaben wie im Dezimalwert.

hello_art_green_characters

Audio

So hört sich das als Morse Code an.

und hier die Variante als Midi Töne, gespielt von einem Piano.

Oktave 5 – C
Oktave 7 – F
Oktave 8 – C
Oktave 8 – C
Oktave 8 – D#
Oktave 2 – G#
Oktave 1 – G#
Oktave 7 – C#
Oktave 8 – F#
Oktave 8 – G#

Hello, art in Lehm

Nunja, und so beschloss ich mit Lehm zu schreiben.

Hello, art – Version 0.9

And ... painted with primer

Die 1.0 Version wird noch gepinselt.

Categories
Art Assembly coding Software

Assembler – “hello, art”

Ich will herausfinden, was “meine” Kunst ist. Ich habe vor mehr als 30 Jahren mal Assembler gelernt und sogar ein paar Programme geschrieben (Was ist Assembler?).
Also los … stellen wir doch mal die Uhr ein wenig zurück.

Ich nutze heutzutage Mac OS X auf einem MacBookAir und möchte ein Assembler Programm erstellen.
Installation des Compilers
Erstmal benötige ich Homebrew als Paket Manager um mir den Assembler Compiler nasm zu installieren. Ich öffne das Terminalfenster und los:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install nasm
Danach erzeugt der Befehl nasm -v die folgende
Ausgabe
$ nasm -v
NASM version 2.11.08 compiled on Sep 22 2015
Der Compiler ist installiert!
Programm schreiben
Ich erzeuge mir eine Datei mit dem Editor nano und füge dort den Code für das hello, art Programm ein. Keine Bange, den Code habe ich auch nur kopiert – Link siehe unten.:
nano hello_art.asm

; hello_art.asm - a "hello, art" program using NASM

section .text

global mystart                ; make the main function externally visible

mystart:

; 1 print "hello, art"

    ; 1a prepare the arguments for the system call to write
    push dword mylen          ; message length                           
    push dword mymsg          ; message to write
    push dword 1              ; file descriptor value

    ; 1b make the system call to write
    mov eax, 0x4              ; system call number for write
    sub esp, 4                ; OS X (and BSD) system calls needs "extra space" on stack
    int 0x80                  ; make the actual system call

    ; 1c clean up the stack
    add esp, 16               ; 3 args * 4 bytes/arg + 4 bytes extra space = 16 bytes
    
; 2 exit the program

    ; 2a prepare the argument for the sys call to exit
    push dword 0              ; exit status returned to the operating system

    ; 2b make the call to sys call to exit
    mov eax, 0x1              ; system call number for exit
    sub esp, 4                ; OS X (and BSD) system calls needs "extra space" on stack
    int 0x80                  ; make the system call

    ; 2c no need to clean up the stack because no code here would executed: already exited
    
section .data

  mymsg db "hello, art", 0xa  ; string with a carriage-return
  mylen equ $-mymsg             ; string length in bytes

Nun muss die Datei compiliert, gelinkt und ausgeführt werden
Kompilierung
nasm -f macho -o hello_art.asm
Linken
ld -o hello_art -e mystart hello_art.o
Ausführen
$ ./hello_art
hello, art

tadaa :)

Und den Rest der Nacht werde ich damit verbringen zu verstehen, was der Code wirklich tut :)

Link:
http://peter.michaux.ca/articles/assembly-hello-world-for-os-x