seeseekey.net - Invictus Deus Ex Machina

Pro­gram­mier­spra­chen gibt es wie Sand am Meer. Aller­dings würde man bei dem Namen Haxe im ers­ten Moment höchst­wahr­schein­lich etwas ande­res ver­ste­hen. Bei „Haxe“ han­delt es sich um eine aus dem Pre­com­pi­ler „ActionS­cript­Me­taL­an­guage“ her­vor­ge­gan­gene Pro­gram­mier­spra­che wel­che von Motion Twin ent­wi­ckelt wird.

Eine Beson­der­heit von Haxe ist die Mög­lich­keit aus dem geschrie­ben­den Quell­text unter ande­rem Java­Script, PHP und auch C++ zu erzeu­gen. Dadurch bedingt wird Haxe bei der Ent­wick­lung von Web­an­wen­dun­gen bevor­zugt ein­ge­setzt. Ein Hello World würde in Haxe so aussehen:

class Test {
    static function main() {
        trace("Hello World !");
    }
}

Bei Haxe selbst han­delt es sich um freie Soft­ware, so steht der Com­pi­ler unter der GPLv2, die Biblio­the­ken selbst unter der BSD Lizenz. Die offi­zi­elle Seite ist unter http://haxe.org zu finden.

Wei­tere Infor­ma­tio­nen gibt es unter:
http://de.wikipedia.org/wiki/Haxe_(Programmiersprache)

Manch­mal ergibt es Sinn Quell­code der in Visual Basic vor­liegt nach C# zu kon­ver­tie­ren. Ein freies Tool, wel­ches auch große Men­gen kon­ver­tie­ren kann ist dabei „Econ Net­Vert“. Neben der Mög­lich­keit Visual Basic nach C# zu kon­ver­tie­ren, steht auch der umge­kehrte Weg offen.

NetVert in Aktion

Net­Vert in Aktion

Auch das Kon­ver­tie­ren von meh­re­ren Dateien ist kein Pro­blem, genauso wie die Umwand­lung gan­zer Pro­jekte. Bei „Econ Net­Vert“ han­delt es sich um freie Soft­ware wel­che unter der GPLv2 steht. Bezo­gen wer­den kann die Anwen­dung und der Quell­text unter http://econnetvert.codeplex.com .

Nach­dem die Remo­te­desk­top Soft­ware Ver­sion von Micro­soft bei neue­ren Mac OS X Ver­sio­nen gerne mal die Hufe hoch reißt wenn man sie been­det, wurde es Zeit sich nach etwas neuem umzu­schauen. Die Wahl fiel dabei auf CoRD. Dabei han­delt es sich um eine freie, GPLv2 lizen­zierte, Remote Desk­top Soft­ware wel­che mitt­ler­weile in der Ver­sion 0.5.7 ver­füg­bar ist.

Die Startoberfläche von CoRD

Die Star­to­ber­flä­che von CoRD

Etwas gewöh­nungs­be­dürf­tig ist das Anle­gen eines neuen Ser­vers (wenn es nicht über „Quick Con­nect“ erfolgt). Nach­dem man in dem Dia­log alle Ein­stel­lun­gen vor­ge­nom­men hat, muss man Cmd + S drü­cken um die Ein­stel­lun­gen in einer RDP Datei zu spei­chern. Schließt man den Dia­log ein­fach, so sind die Ein­stel­lun­gen ver­lo­ren. Anschlie­ßend kann man die RDP Datei öff­nen und wird mit dem ent­spre­chen­den Ser­ver ver­bun­den. Bezo­gen wer­den kann CoRD unter http://cord.sourceforge.net.

LucasArts wurde vor eini­gen Wochen von Dis­ney geschlos­sen. Mitt­ler­weile stellt sich raus, das das ganze auch gute Sei­ten hat. So wur­den die Quell­texte der Spiele „Jedi Knight 2 - Jedi Out­cast“ und „Jedi Knight - Jedi Aca­demy“ von Raven Soft­ware unter der GPLv2 ver­öf­fent­licht. Raven Soft­ware ent­wi­ckelte diese damals für Lucas Arts.

Aller­dings ist der Quell­text nicht mehr an der ursprüng­li­chen Quelle auf Sourcef­orge (Jedi Out­cast, Jedi Aca­demy) zu fin­den. Der Grund dafür ist, das es noch einige pro­prie­täre Bestand­teile im Quell­text gibt, wel­che noch ent­fernt wer­den müs­sen, bevor das ganze wie­der auf Sourcef­orge ver­öf­fent­licht wird.

Aller­dings ist der Quell­text mitt­ler­weile gespie­gelt auf Git­hub zu fin­den. So ist Jedi Out­cast unter https://github.com/dpiers/Jedi-Outcast und Jedi Aca­demy unter https://github.com/dpiers/Jedi-Academy zu finden.

Beson­ders wit­zig sind auch die Kom­men­tare in den Quelltexten:

void NPC_CheckPlayerAim( void )
{
    //FIXME: need appropriate dialogue
    /*
    gentity_t *player = &g_entities[0];

    if ( player && player->client && player->client->ps.weapon > (int)(WP_NONE) && player->client->ps.weapon < (int)(WP_TRICORDER) )
    {//player has a weapon ready
        if ( g_crosshairEntNum == NPC->s.number && level.time - g_crosshairEntTime < 200 
            && g_crosshairSameEntTime >= 3000 && g_crosshairEntDist < 256 )
        {//if the player holds the crosshair on you for a few seconds
            //ask them what the fuck they're doing
            G_AddVoiceEvent( NPC, Q_irand( EV_FF_1A, EV_FF_1C ), 0 );
        }
    }
    */
}

Mitt­ler­weile wird auch an einer Linu­xum­set­zung von Jedi Out­cast gear­bei­tet, wel­che sich eben­falls auf Git­hub befin­det.

Wei­tere Infor­ma­tio­nen gibt es unter:
http://www.reddit.com/r/programming/comments/1bnezw/jedi_outcastjedi_academy_source_code_released/
http://news.softpedia.com/news/Raven-Software-Asked-SourceForge-to-Remove-Jedi-Academy-and-Jedi-Outcast-344896.shtml
http://news.softpedia.com/news/Jedi-Academy-and-Jedi-Outcast-Projects-Mysteriously-Disappear-from-SourceForge-344571.shtml

Da der Google Rea­der ja bald ein­ge­stellt wird, sollte man sich lang­sam dar­über Gedan­ken machen, wie es wei­ter­geht. Natür­lich kann man auf fremde Dienste wie Feedly wech­seln. Aller­dings behagt die­ser Gedanke nicht jedem, da man wie­der an einen bestimm­ten Anbie­ter gebun­den ist. Eine Abhilfe schafft hier die Soft­ware „Tiny Tiny RSS“ wel­cher auf PHP und MySQL (wahl­weise auch Post­greSQL auf­setzt). Die Soft­ware selbst steht dabei unter der GPLv2.

Probleme bei der Installation

Pro­bleme bei der Installation

Nach­dem man die Soft­ware her­un­ter­ge­la­den hat und auf sei­nen Webs­pace kopiert hat, kann es auf eini­gen Sys­te­men beim Test der Kon­fi­gu­ra­tion zu Pro­ble­men mit der Ein­stel­lung „open_basedir“ kom­men. Hat man hier keine Mög­lich­keit dies umzu­stel­len oder möchte dies nicht, so muss man einige klei­nere Anpas­sun­gen am Quell­text von „Tiny Tiny RSS“ vor­neh­men. Dazu wird in den Dateien „include/sanity_check.php“ und „install/index.php“ der Absatz:

if (ini_get("open_basedir")) {
  array_push($errors, "PHP configuration option open_basedir is not supported. Please disable this in PHP settings file (php.ini).");
}

aus­kom­men­tiert. Danach sollte die Instal­la­tion gelin­gen. Nach der Instal­la­tion kann man sich mit den Stan­dard­nut­zer­da­ten „admin“ und „pass­word“ anmel­den. Das Pass­wort sollte man anschlie­ßend sofort ändern. In den Ein­stel­lun­gen wird unter Benut­zer ein neuer Nut­zer ange­legt, damit man nicht mit einem admi­nis­tra­ti­ven Account arbei­ten muss.

Wenn man seine Daten mit­tels Google Takeout expor­tiert hat, kann man die „subscriptions.xml“ aus dem Export in „Tiny Tiny RSS“ impor­tie­ren. Dazu geht man in den Ein­stel­lun­gen auf den Tab „Feed“ und dort auf „OPML“. Dann kann man die ent­spre­chende Datei importieren.

Tiny Tiny RSS in Aktion

Tiny Tiny RSS in Aktion

Danach kann man seine Feeds in der Ober­flä­che bewun­dern. Die erste (manu­elle) Aktua­li­sie­rung kann dabei durch­aus einige Zeit in Anspruch neh­men. Nun gilt es die auto­ma­ti­sche Aktua­li­sie­rung der Feeds mit­tels eines Cron­jobs in Angriff zu neh­men. Dazu wird ein Cron­job erstellt wel­cher alle 15 Minu­ten die URL:

http://example.org/ttrss/backend.php?op=globalUpdateFeeds&daemon=1

auf­ruft, wobei der Teil „http://example.org/tsrss/“ natür­lich durch die eigene URL ersetzt wer­den muss. Die Webap­pli­ka­tion stellt auf Wunsch (in den Ein­stel­lun­gen kon­fi­gu­rier­bar), eine API zur Ver­fü­gung, so das man auch Apps mit ihr betrei­ben kann. So gibt es für Android einen Cli­ent mit dem sel­ben Namen.

Tiny Tiny RSS
Tiny Tiny RSS
Down­load @
Google Play
Tiny Tiny RSS
Ent­wick­ler: And­rew Dol­gov
Preis: Kos­ten­los

Für iOS scheint es da noch keine adäquate Lösung zu geben wobei ich mir wün­schen würde, das Mr.Reader das ganze in eine neue Ver­sion inte­grie­ren würde.

Die Mobilansicht von Tiny Tiny RSS

Die Mobilan­sicht von Tiny Tiny RSS

Die Mobilan­sicht auf ent­spre­chen­den Gerä­ten ist lei­der etwas fum­me­lig, wobei es sich nicht um die rich­tige Mobilan­sicht han­delt, son­dern um die nor­male Ansicht. Die mobile Ansicht kann über das Sys­tem Plu­gin „mobile“ akti­viert wer­den. Aller­dings wird sie nicht mehr gewar­tet und ist wohl auch nicht der Weis­heit letz­ter Schluss.

Abhilfe schafft hier ttrss-mobile wel­ches über die API mit dem Haupt­sys­tem kom­mu­ni­ziert. Nach­dem man die Soft­ware auf sei­nen Webs­pace hoch­ge­la­den hat, muss man noch die Pfade in der „conf.js“ anpas­sen. Anschlie­ßend kann man sich mit sei­nen Zugangs­da­ten einloggen.

In den Ein­stel­lun­gen gibt es auch einige inter­es­sante Nut­zer­plugins wie z.B. „mail“ mit wel­chem man Arti­kel per Mail ver­sen­den kann. Alles in allem ist „Tiny Tiny RSS“ ein robus­tes Stück Soft­ware, wel­ches nach der Instal­la­tion genau das macht was es soll. Die offi­zi­elle Seite der Soft­ware ist dabei unter http://tt-rss.org zu finden.

Wei­tere Infor­ma­tio­nen gibt es unter:
http://michaelsonntag.net/tiny-tiny-rss-tutorial-1-installation-konfiguration/
http://michaelsonntag.net/tiny-tiny-rss-tutorial-2-optische-anpassungen-und-plugins/
http://michaelsonntag.net/tiny-tiny-rss-tutorial-3-artikel-feiner-strukturieren/
http://michaelsonntag.net/tiny-tiny-rss-tutorial-4-noch-ein-paar-kleinigkeiten/
http://www.linux.com/learn/tutorials/322446-weekend-project-replacing-google-reader-with-tiny-tiny-rss

Wis­sen in struk­tu­rier­ter Form hat im Gegen­satz zu unstruk­tu­rier­tem Wis­sen, einige ent­schei­dende Vor­teile. Der wich­tigste ist wahr­schein­lich die auto­ma­ti­sierte Anwen­dung und Aus­wer­tung durch Com­pu­ter­sys­teme. Natür­lich muss hierzu erst ein­mal das ent­spre­chende Wis­sen in eine struk­tu­rierte Form gebracht wer­den. Genau dies wird beim DBPe­dia Pro­jekt gemacht. Im Falle die­ses von der Uni­ver­si­tät Leip­zig betrie­be­nen Pro­jek­tes wer­den dabei die struk­tu­rier­ten Daten der Wiki­pe­dia aus­ge­wer­tet und der All­ge­mein­heit unter der GPL bzw. der CC-BY-SA Lizenz zur Ver­fü­gung gestellt. Zu fin­den ist das Pro­jekt dabei unter http://de.dbpedia.org/.

Wei­tere Infor­ma­tio­nen gibt es unter:
http://de.wikipedia.org/wiki/DBpedia

1w6

Wer gerne „echte“ Rol­len­spiele spielt, der sollte sich ein­mal „1w6“ anschauen, wel­ches unter http://1w6.org zu fin­den ist. Dabei han­delt es sich nach der Selbst­be­schrei­bung um ein schlan­kes und uni­ver­sel­les Rol­len­spiel­werk, wel­ches unter einer freien Lizenz, in die­sem Fall der GPL steht. Die ent­spre­chen­den Repo­si­to­ries sind dabei unter http://1w6.org/deutsch/regeln/quellen#hg-repos zu fin­den. In dem Sys­tem gibt es ver­schie­dene Wel­ten, wie zum Bei­spiel die Frei­händ­ler Welt, wel­che in einem Sci­ence Fic­tion Set­ting ange­sie­delt ist. Das Mate­rial kann in PDF Form her­un­ter­ge­la­den wer­den, oder auch gegen ein klei­nes Ent­gelt bestellt werden.

Wenn man mal auf der Suche nach einem klei­nen Zeit­ver­treib ist, kann man natür­lich so eini­ges aus­den­ken, so z.B. eine eigene CPU Archi­tek­tur. Dabei muss man diese nicht in Hard­ware gie­ßen, son­dern es reicht wenn man diese emu­liert. Und so ent­stand in eini­ger Zeit eine CPU wel­che auf den Namen „Struc­tura“ hört. Ein Design­ziel war es dabei, die CPU nur mit den nötigs­ten Maschi­nen­be­feh­len aus­zu­stat­ten. Das führte bei der „Struc­tura“ zu fol­gen­den Befeh­len (hier als Assem­bler Mne­mo­nics dargestellt):

  • [0] - JUMP
  • [1] - ADD
  • [2] - COPY

Das bedeu­tet das es unter ande­rem keine Nichtope­ra­tion wie z.B. NOOP bzw. NOP im Befehls­satz der CPU gibt. Der Grund dafür ist ganz ein­fach. Eine Nichtope­ra­tion lässt sich durch einen JUMP um null Byte emu­lie­ren, was im End­ef­fekt nur eine Erhö­hung des „Instruc­tion Coun­ters“ kurz „IC“ zur Folge hat. Da JUMP auf den Opcode 0 gelegt wurde führt, dies zu einer inter­es­san­ten Reak­tion der CPU wenn sie das Ende des Pro­gramms erreicht und ver­sucht den rest­li­chen Spei­cher zu inter­pre­tie­ren. Die CPU inter­pre­tiert das als Sprung an die Adresse 0 und beginnt mit dem Pro­gramm von vorne.

Der Befehls­auf­bau der Maschi­nen­be­fehle stellt sich dabei so da:

JUMP (Breite: 40 Byte)
  [Int64|Befehlswort - 0]
  [Int64|Adressinterpretation - 0/ANCTAAV 1/ACTAAV 2/RNCTAAV 3/RCTAAV]
      ANCTAAV - Adress not contains target adress as value
      ACTAAV - Adress contains target adress as value
      RNCTAAV - Register not contains target adress as value
      RCTAAV - Register contains target adress as value
  [Int64|Sprungbedingung - 0/NONE 1/ZERO 2/POS 3/NEG 4/OVF]
  [Int64|Sprungadressierung - 0/ABS 1/REL] 
  [Int64|Adresse oder Wert]

ADD (Breite: 32 Byte)
  [Int64|Befehlswort - 1]
  [Int64|Modus - 0/RAR 1/RANR 2/RAV] 
      RAR - Register and register
      RANR - Register and negative register
      RAV - Register and value
  [Int64|Register] 
  [Int64|Register oder Wert]

COPY (Breite: 40 Byte)
  [Int64|Befehlswort - 2] 
  [Int64|Modus - 0/NACTAAV 1/FACTAAV 2/SACTAAV 3/BACTAAV]
    NACTAAV - No adress contains target adress as value
    FACTAAV - First adress contains target adress as value
    SACTAAV - Second adress contains target adress as value
    BACTAAV - Both adress contains target adress as value
  [Int64|Menge an kopierenden Daten in Byte]
  [Int64|Register, Speicheradresse oder ZERO] 
  [Int64|Register oder Speicheradresse]

Jeder Opcode auf der CPU ist 8 Byte lang und wird als Int64 inter­pre­tiert. Die „Struc­tura“ ist mit den Regis­tern A bis Z aus­ge­stat­tet, was 26 All­zweck­re­gis­ter mit einer Breite von 8 Byte sind. Neben die­sen All­zweck­re­gis­tern besitzt es das Spe­zi­al­re­gis­ter IC bei wel­chem es sich um den „Instruc­tion Coun­ter“ han­delt und einige Flags mit den Namen „Zero“, „Posi­tive“, „Nega­tive“ und „Over­flow“. Beim Start beginnt die CPU mit der Aus­füh­rung des Pro­gramms ab der Adresse 0. Eine Beson­der­heit ist, das die CPU kei­nen Stack und keine Inter­rupts unterstützt.

Damit Peri­phe­rie ange­spro­chen wer­den kann, gibt es bestimmte Berei­che im Spei­cher in wel­che sich diese Geräte ein­blen­den. Der Bereich für Ein­blen­dun­gen ist dabei ab der Adresse 9.000.000.000.000.000.000 (7CE66C50E2840000) bis 9.223.372.036.854.775.807 (7FFFFFFFFFFFFFFF) zu finden.

Die Gra­fik­karte wird dabei ab der Adresse 9.000.000.000.000.000.000 bis ein­schließ­lich 9.099.999.999.999.999.999 ein­ge­blen­det. In den ers­ten 4096 Byte befin­det sich dabei der Kon­fi­gu­ra­ti­ons­block der Gra­fik­karte, wel­cher Infor­ma­tio­nen über die Auf­lö­sung und andere Ein­stel­lun­gen enthält.

Ab der Adresse 9.100.000.000.000.000.000 bis ein­schließ­lich 9100000000000008191 wird die Tas­ta­tur bzw. deren Ein­ga­be­puf­fer ein­ge­blen­det. Die ers­ten zwei Byte im Spei­cher der CPU sind dabei ein UInt16 wel­cher den aktu­el­len Zei­chen­in­dex der Tas­ta­tur in ihrem Tas­ta­tur­puf­fer angibt. Jede Ein­gabe auf der wird dabei vom Tas­ta­tur­ge­rät in Form eines Bytear­rays mit der Größe von fünf Byte über­tra­gen. Das erste Byte gibt dabei den Modi­fier an, die rest­li­chen 4 Bytes ent­hal­ten das erzeugte Zei­chen in Form eines UTF-32 Zeichens.

Der schematische Aufbau der CPU und deren Peripherie

Der sche­ma­ti­sche Auf­bau der CPU und deren Peripherie

Der Assem­bler für die CPU unter­stützt eine Reihe von Mne­mo­nics, wel­che anschlie­ßend in die Maschi­nen­spra­che über­setzt wer­den. Diese sind:

ABS [Register]
ADD [Register] [Register oder Wert]
CLR [Register oder ALL]
COPY [Int64|Menge an kopierenden Daten in Byte] [Register oder Speicheradresse] [Register oder Speicheradresse]
DIV [Register] [Register oder Wert]
LOAD [Speicheradresse] [Register]
DEC [Register]
INC [Register]
JUMP [Sprungbedingung|NONE|ZERO|POS|NEG|OVL] [Sprungadressierung|ABS|REL] [Adresse oder Wert]
MOD [Register] [Register oder Wert]
MUL [Register] [Register oder Wert]
NEG [Register]
NOOP
SHIFTL [Register] [Register oder Wert]
SHIFTR [Register] [Register oder Wert]
WRITE [Register] [Speicheradresse]

Beim Assem­bler han­delt es sich genau­ge­nom­men nicht um einen Assem­bler der rei­nen Lehre, son­dern um eine Kreu­zung aus Assem­bler, Macroas­sem­bler und Hoch­spra­che. Für die kom­ple­xe­ren Kom­man­dos wie „MUL“ oder „SHIFTL“ wer­den bestimmte Regis­ter wäh­rend der Berech­nung belegt (im Fall von „MUL“ z.B. das W, X, Y und Z Regis­ter). Die vom Kom­mando beleg­ten Regis­ter sind dabei in der Doku­men­ta­tion auf­ge­führt. Das führt natür­lich dazu das eine sol­che Mul­ti­pli­ka­tion nach der Auf­lö­sung aus sehr vie­len Befeh­len besteht:

COPY 8 Y A;
COPY 8 Z ZERO;
ADD Z 3;
COPY 8 X ZERO;
ADD Y 0;
JUMP POS REL 72;
JUMP ZERO REL 32;
ADD X 1;
ADD Z 0;
JUMP POS REL 72;
JUMP ZERO REL 32;
ADD X 1;
COPY 8 A ZERO;
ADD Y 0;
JUMP POS REL 184;
JUMP ZERO REL 144;
COPY 8 W Y;
ADD Y -W;
ADD Y -W;
COPY 8 W ZERO;
ADD Z 0;
JUMP POS REL 184;
JUMP ZERO REL 144;
COPY 8 W Z;
ADD Z -W;
ADD Z -W;
COPY 8 W ZERO;
ADD A Y;
ADD Z -1;
JUMP POS REL -104;
COPY 8 W X;
ADD W -2;
JUMP ZERO REL 368;
COPY 8 W X;
ADD W -1;
JUMP ZERO REL 112;
COPY 8 W X;
ADD W 0;
JUMP ZERO REL 144;
COPY 8 W A;
ADD A -W;
ADD A -W;
COPY 8 W ZERO;
COPY 8 X ZERO;
COPY 8 Y ZERO;
COPY 8 Z ZERO;

Wäh­rend der Ent­wick­lung gab es dabei einige inter­es­sante Ideen wie man bestimmte Sachen im Assem­bler lösen könnte. So zum Bei­spiel fol­gen­des Problem:

ADD A 555;  //Fülle den Register A mit dem Wert 555
COPY 8 B A; //Kopiere Register A zu B
DEC B; //Reduziere B um 1
COPY 8 *A B; //kopiere der Wert von B an die Adresse welche im A Register A definiert ist (555)
COPY 8 D *A; //Kopiere das was ab 555 steht in den Register D

Im D Regis­ter sollte nun der Wert 554 ste­hen. Mög­lich wird dies dadurch, das die CPU weiß das sie nicht den Wert nach A kopie­ren soll, son­dern den Wert wel­cher in A ent­hal­ten ist, als Ziel­adresse benutzt. Theo­re­tisch wäre dies auch anders lös­bar gewe­sen. So hätte der Assem­bler das * in selbst­mo­di­fiz­tie­ren­den Quell­code auf­lö­sen kön­nen. Aus einem „COPY 8 *A D“ wäre dann in etwa fol­gen­der Quell­text erzeugt worden:

COPY 8 (IC+32) A;
COPY B [IC+32];

Das Pro­blem an die­ser Geschichte ist das der Assem­bler bei die­ser Vari­ante sehr viel über die Inne­reien der CPU wis­sen muss. So muss z.B. genau defi­niert sein wann der IC erhöht wird, da die­ser für den selbst­mo­di­fi­zier­ten Code benö­tigt wird. Zur Erkä­rung: Die erste Zeile kopiert die Adresse wel­che in A liegt in die nächste Zeile und modi­fi­ziert somit den COPY Befehl wäh­rend der Lauf­zeit. Dadurch wird die Adres­sie­rung über den Regis­ter­wert möglich.

Inter­es­sant ist auch die Berech­nung eines Sprung­zie­les. Möchte man z.B. fol­gen­des Pro­gramm ausführen:

ADD A 7;
JUMP NONE REL -104

stellt sich die Frage wie man die rela­tive Sprung­weite aus­rech­net. Hier­bei kommt es auf die Breite der Befehle an. Bei den Grund­be­feh­len (ADD, COPY und JUMP) ent­spricht diese den in der Maschi­nen­co­de­be­schrei­bung ange­ge­be­nen Breite. Andere Befehle wie „MUL“ oder „SHIFTL“ zäh­len zu den kom­ple­xen Befeh­len, da diese im Maschi­nen­code aus meh­re­ren Anwei­sun­gen bestehen.

Hier besteht die ein­fachste Mög­lich­keit darin, den JUMP Befehl im ers­ten Moment mit Fan­ta­sie­wer­ten zu fül­len. Anschlie­ßend wird der Emu­la­tor mittels:

Structura.exe program.asm -disassemble -withIC

auf­ge­ru­fen. Bei der Dar­stel­lung mit­tels „withIC“ wird der Wert des ICs am Anfang des Befehls und am Ende des Befehls angezeigt.

(256/296)            JUMP ZERO REL 32;
(296/328)            ADD X 1;
(328/360)            ADD Z 0;

Möchte man nun also zum Befehl „ADD Z 0;“ sprin­gen so rech­net man 328-296 und hat so das rich­tige Sprung­ziel errechnet.

Und natür­lich fehlt auch noch eine Umset­zung in Hard­ware, aber bis das soweit ist, kann es natur­ge­mäß dau­ern. Bei der Struc­tura han­delt es sich natür­lich nicht um eine effi­zi­ente CPU, son­dern um eine bei wel­cher ver­sucht wurde, die CPU inter­nen Befehle auf ein Mini­mum zu begren­zen und das Design als sol­ches ein­fach zu hal­ten. Dies schlägt sich unter ande­rem darin nie­der, das jedes Befehls­wort 8 Byte lang ist, und somit für 3 Befehle über­di­men­sio­niert, aber dafür die Ein­fach­heit der Maschine intern gege­ben ist.

Und natür­lich erkauft man sich dies mit eini­gen Nach­tei­len, so sind die Bit­ver­schie­bungs­ope­ra­tion eigent­lich eine der schnells­ten in einer CPU. Durch die Emu­la­tion über zusätz­li­chen Assem­bler­code wird es eine der lang­sams­ten Ope­ra­tion. Aber eine CPU mit einem gro­ßen Befehls­satz zu emu­lie­ren, ist schließ­lich ein­fach und das war nicht der Sinn der Übung.

Anschauen kann man sich das unter der GPLv3 ste­hende Pro­jekt unter https://github.com/seeseekey/Structura/. Eine vor­kom­pi­lierte Ver­sion zum tes­ten gibt es hier zum Down­load. In der Imple­men­ta­tion befin­den sich sicher­lich noch einige Feh­ler auf wel­che mich gerne hin­ge­wie­sen wer­den darf. Jetzt müsste nur noch jemand Linux auf das Sys­tem por­tie­ren, wobei dies ohne wei­te­res nicht funk­tio­nie­ren sollte, das die CPU Dinge wie Inter­rupts nicht unter­stützt. Aller­dings wäre es natür­lich durch­aus mög­lich ein eige­nes mini­ma­les Betriebs­sys­tem für das emu­lierte Sys­tem zu schreiben.

Fest­plat­ten, egal wel­cher Größe haben eine unan­ge­nehme Eigen­schaft. Irgend­wann sind sie voll und man fragt sie wo der ganze Platz hin ist. Um sich das ganze über­sicht­lich anzu­schauen gibt es für Win­dows „Win­DirStat“, für Linux „KDirStat“ und für Mac OS X gibt es „Grand­Per­spec­tive“ wel­ches unter http://grandperspectiv.sourceforge.net/ zu fin­den ist.

Eine GrandPerspective Analyse

Eine Grand­Per­spec­tive Analyse

Nach dem Start von „Grand­Per­spec­tive“ wählt man einen Ord­ner aus und bekommt anschlie­ßend eine Ana­lyse aus wel­cher sich optisch erschließt wel­ches die größ­ten Bro­cken auf der Fest­platte sind. Die Soft­ware wird aktiv wei­ter ent­wi­ckelt und steht dabei unter der GPL. Es exis­tie­ren auch loka­li­sierte Ver­sio­nen, aller­dings werde diese augen­schein­lich nicht mehr gepflegt, so das man mit der eng­li­schen Ver­sion Vor­lieb neh­men sollte.

Wei­tere Infor­ma­tio­nen gibt es unter:
http://en.wikipedia.org/wiki/GrandPerspective
http://de.wikipedia.org/wiki/WinDirStat
http://de.wikipedia.org/wiki/KDirStat

Wer auf der Suche nach einer quell­of­fe­nen Ban­king­soft­ware für Mac OS X ist, der sollte ein­mal einen Blick auf Pecu­nia wer­fen. Pecu­nia steht dabei unter der GPLv2 und ist mitt­ler­weile in der Ver­sion 1.0 erhält­lich, auch wenn es sich bei die­ser noch um eine Beta­ver­sion han­delt. Benutzt man bereits eine ältere Ver­sion von Pecu­nia, so sollte man einige Dinge bei der Migra­tion beach­ten. Ent­wi­ckelt wurde Pecu­nia in gro­ßen Tei­len von Mike Lischke.

Pecunia in der Überweisungsansicht

Pecu­nia in der Überweisungsansicht

Neben iTAN unter­stützt die Soft­ware auch mobi­le­TAN, chip­TAN in der nor­ma­len als auch in der opti­schen Fas­sung. Auch Über­wei­sun­gen, Dau­er­auf­träge und ähn­li­ches sind kein Pro­blem. Wei­tere Fea­tures wer­den auf der Web­seite des Pro­jek­tes beschrie­ben, wel­che unter http://www.pecuniabanking.de zu fin­den ist.