seeseekey.net - Invictus Deus Ex Machina

Vor eini­ger Zeit spielte ich mit dem Gedan­ken einen Disas­sem­bler für Mac OS X zu pro­gram­mie­ren. Aller­dings wollte ich nicht alles neu erfin­den und schaute mich des­halb nach einem pas­sen­den Frame­work um. Gefun­den habe ich dabei Capstone.

capstone-engine.org

Dabei han­delt es sich um ein freies, unter einer BSD-Lizenz lizen­zier­tes, Frame­work zur Disas­sem­blie­rung. Über ver­schie­dene Bin­dings kann das Frame­work aus den unter­schied­lichs­ten Pro­gram­mier­spra­chen ange­spro­chen wer­den. So gibt es unter ande­rem Bin­dings für C#, Java, Ruby und Python. Das Frame­work selbst ist dabei in C geschrie­ben. Caps­tone unter­stützt dabei eine Reihe von Pro­zes­sor­ar­chi­tek­tu­ren wie X86, Sparc, MIPS und ARM. Bezo­gen wer­den kann Caps­tone unter capstone-engine.org.

Wenn man grö­ßere Anwen­dun­gen schreibt, so haben diese meist eine Undo & Redo­funk­tion. Damit man das Rad nicht neu erfin­den muss, gibt es soge­nannte Undo Frame­works. Ein schö­nes Frame­work für .NET ist das Undo Frame­work wel­ches unter http://undo.codeplex.com/ zu fin­den ist. Es basiert dabei auf dem Ent­würfs­mus­ter Kom­mando (http://de.wikipedia.org/wiki/Kommando_%28Entwurfsmuster%29) und ist rela­tiv ein­fach zu benutzen.

Wei­tere Infor­ma­tio­nen gibt es unter:
http://blogs.msdn.com/b/kirillosenkov/archive/2009/06/29/new-codeplex-project-a-simple-undo-redo-framework.aspx
http://blogs.msdn.com/b/kirillosenkov/archive/2009/07/02/samples-for-the-undo-framework.aspx

Gege­ben sei fol­gen­der Quelltext:

<div class="divbox">Wert: 42</div>

In die­sem Quell­text sollte der Wert je nach Posi­tion eines Sli­ders anpasst wer­den. Im ers­ten Moment ver­suchte ich es mit der jQuery Funk­tion repla­ce­With:

$(".divbox").replaceWith("Wert " + value);

Lei­der führt diese Methode dazu das der gesamte div Tag ersetzt wird was natür­lich nicht erwünscht ist. Zum Glück gibt es in jQuery eine Ent­spre­chung für das innerHTML, diese Funk­tion hört auf den Namen html:

$(".divbox").html("Wert " + value);

Damit wird nur der Text zwi­schen den div Tags geän­dert. Wich­tig ist es dabei dar­auf zu ach­ten das jQuery hier nur die innerHTML Eigen­schaft des Brow­sers durch­reicht und dies z.B. dazu füh­ren kann das beim Inter­net Explo­rer Attri­bute in Anfüh­rungs­zei­chen zurück­ge­ge­ben werden.

Wei­tere Infor­ma­tio­nen gibt es unter:
http://api.jquery.com/html/
http://api.jquery.com/replaceWith/

Ges­tern habe ich mich ein wenig mit jQuery beschäf­tigt. Dazu erst ein­mal ein klei­ne­res Beispiel:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <script src="jquery.js"></script>

    <script type="text/javascript">
    $(document).ready(function(){    
            $("a#hide").click(function(){
                $("#valuesInit").animate({ height: 'hide', opacity: 'hide' }, 'slow');
            })
    });
    </script>

  <title>jQuery Test</title>
</head>
<body>
  <div id="valuesInit" style="background-color:#ADADAD">
  <p><b>Initialwerte</b></p>
  Lorem Ipsum dolor sit amet...
  </div>

  <p><a href="#" id="hide">Verstecken</a></p>
</body>
</html>

In die­sem Bei­spiel wird eine div Box mit der ID value­s­Init und der Klasse div­box ange­legt. Oben wird für den Link mit der ID hide eine Klick­funk­tion defi­niert. Diese Klick­funk­tion sucht dabei das Ele­ment mit der ID value­s­Init und lässt es ver­schwin­den. Nun gibt es ver­schie­dene Mög­lich­kei­ten etwa zu selektieren:

  • nach Ele­ment
$("div").animate({ height: 'hide', opacity: 'hide' }, 'slow');
  • nach ID
$("#valuesInit").animate({ height: 'hide', opacity: 'hide' }, 'slow');
  • nach Klasse
$(".divbox").animate({ height: 'hide', opacity: 'hide' }, 'slow');

Wei­tere Infor­ma­tio­nen gibt es unter:
http://docs.jquery.com/Main_Page
http://www.very-clever.com/jquery-tutorial.php
http://www.andreas-schlapsi.at/2008/10/10/jquery-dom-elemente-auswahlen/

Wer auf der Suche nach einer High Level API für WebGL ist, der sollte sich ein­mal Phi­loGL anschauen. Die­ses Frame­work wel­ches Open Source (MIT Lizenz) ist kann dabei unter http://senchalabs.github.com/philogl/ bezo­gen wer­den. Ein kurze Ein­füh­rung in das Fram­work gibt der Ent­wick­ler in sei­nem Blog unter http://www.sencha.com/blog/introducing-philogl-a-webgl-javascript-library-from-sencha-labs/.

Wei­tere Infor­ma­tio­nen gibt es unter:
http://www.golem.de/1102/81627.html

Bei Map­ben­der (zu fin­den unter http://www.mapbender.org) han­delt es sich um ein Web-Framework für GIS Belange. Das ganze Frame­work kann man auch unter Ubuntu instal­lie­ren. Im ers­ten Schritt müs­sen dazu einige Pakete instal­liert wer­den. Dies geschieht mittels:

sudo apt-get install apache2 php5 post­gresql php5-pgsql 

Nach­dem alle Pakete instal­liert sind, sollte die aktu­elle Ver­sion von Map­ben­der her­un­ter­ge­la­den und ent­packt wer­den. Anschlie­ßend sollte für Map­ben­der ein eige­ner Nut­zer (mit­tels addu­ser map­ben­der) namens map­ben­der ange­legt wer­den. Bevor wir dann mit­tels su map­ben­der uns in den Kon­text des Nut­zers bege­ben, kopie­ren wir die ent­pack­ten Dateien in sein Homeverzeichnis.

Dem Nut­zer postgre muss nun noch ein Pass­wort zuge­wie­sen wer­den. Dies geschieht mittels:

sudo sudo –u post­gres psql 

Dar­auf­hin öff­net sich die Post­gres Kon­sole in wel­cher man mit­tels \pass­word post­gres das Pass­wort set­zen kann. Nun sollte die Daten im Home­ord­ner des Map­ben­der Ord­ners die pas­se­nen Rechte bekommen:

find /home/mapbender/ –type d –exec chmod 777 {} +
find /home/mapbender/ –type f –exec chmod 777 {} + 

Nun wird die Daten­bank instal­liert. Dazu wird das Skript install2.6.sh wel­ches unter /home/mapbender/resources/db/ zu fin­den ist aus­ge­führt. Das Skript stellt dabei einige Fra­gen wie zum Bei­spiel nach dem Namen der Daten­bank, Web­ser­ver­nenut­zer (www-data) etc.

Im nächs­ten Schritt wird die Datei /etc/apache2/httpd.conf mit einem Edi­tor geöff­net. Dort kommt dann fol­gen­des in die Datei:

Alias /mapbender /home/mapbender/http

 <Directory /home/mapbender/http>
 Options MultiViews
 DirectoryIndex index.php
 Order allow,deny
 Allow from all
 </Directory>

Nach­dem das geschafft ist muss die Kon­fi­gu­ra­ti­ons­da­tei von Map­ben­der ange­passt wer­den. Diese befin­det sich im Ord­ner /home/mapbender/conf und trägt den Namen mapbender.conf. Dort trägt man die Daten­bank­kon­fi­gu­ra­tion sowie die Login URL ein. Nun star­tet man noch den Apa­che mit­tels /etc/init.d/apache2 restart neu. Danach sollte Map­ben­der funk­tio­nie­ren. Wenn nicht hilft es das Error Log­ging in der php.ini zu akti­vie­ren um so den Feh­lern auf die Spur zu kommen.

Wei­tere Infor­ma­tio­nen gibt es unter:
http://de.wikipedia.org/wiki/Mapbender
http://www.mapbender.org/Installation

Auf der Such nach einer ordent­li­chen Java­script Biblio­thek bin ich auf jQuery gesto­ßen. Dabei bie­tet jQuery die übli­chen Funk­tio­nen wie DOM Mani­pu­la­tion, Brow­ser­abs­trak­tion sowie zahl­rei­che AJAX Funk­tio­na­li­tä­ten. Auch Doku­men­ta­tion ist reich­lich vor­han­den, wie man unter http://docs.jquery.com/Tutorials#Tutorials_auf_Deutsch sehen kann. Die offi­zi­elle Seite der Biblio­thek ist unter http://jquery.com/ zu finden.

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

Eigent­lich wollte ich nur mal nach­schauen wel­che Datei­for­mate Android von sich aus unter­stützt bin dann aber über das hüb­sche Archi­tek­tur Dia­gramm von Android gestolpert.

Da lag es nah nicht nur sich die Datei­for­mate anzu­schauen son­dern den Kreis etwas grö­ßer zu zie­hen. Also für Anwen­dungs­ent­wick­ler sehr inter­es­sant ist das durch­dachte und modu­lare Appli­ka­ti­ons­frame­work von Android.

So wer­den Biblio­the­ken für 2D und 3D (basie­rend auf OpenGL ES), Sqlite zum spei­chern von struk­tu­rier­ten Daten, Web­kit und noch einige andere Biblio­the­ken mit­ge­lie­fert. Die Ein­stiegs­hürde ist im Gegen­satz zu ande­ren Mobil­platt­for­men fast nicht vor­han­den. Man kann eigent­lich sofort los­le­gen. Alle Anwen­dun­gen die der Ent­wick­ler schreibt sind Java Anwen­dun­gen wel­che aller­dings nur auf der Android eige­nen Dal­vik VM laufen.

Bei der VM han­delt es sich um eine Regis­ter­ma­schine (im Gegen­satz zu einer Sta­pel­ma­schine). Das hat den Vor­teil das der Byte­code wesent­lich per­for­man­ter aus­ge­führt wird.

Doch nun zu den unter­stüt­zen Medi­en­ty­pen. Auf der Audio­seite unter­stützt Android ACC, AMR, MP3, MIDI, OTA, Ogg Vor­bis und PCM. Bei den Bild­for­ma­ten kommt Android mit GIF, PNG, JPEG und BMP klar wobei es JPEG auch schrei­ben kann. Da hätte man ruhig auch noch eine Schreib­un­ter­stüt­zung für PNG Bil­der mit ein­bauen können.

An Video­for­ma­ten gibt es H.263, H.264 und MPEG4 SP wobei die bei­den erst­ge­nannt vom Fram­work auch enco­diert wer­den können.

Eine Beson­der­heit in die­sem Zusam­men­hang ist das G1 von T-Mobile. Es unter­stützt neben den genann­ten For­mate noch die WMA und WMV For­mate aus dem Hause Microsoft.

Wei­tere Infor­ma­tio­nen gibt es unter:
http://developer.android.com/guide/basics/what-is-android.html
http://developer.android.com/guide/appendix/media-formats.html

Bevor ich es ver­gesse, vor einen Tagen ist der vierte Mei­len­stein des FSO Frame­works her­aus­ge­kom­men. So wur­den auch in die­sem Release wie­der viele Bugs beho­ben und all­ge­mein an der Sta­bi­li­tät des Frame­works gear­bei­tet. Die Tele­fon­buch API unter­stützt nun meh­rere Tele­fon­bü­cher, der SMS PDU Modus wurde ver­bes­sert (bes­sere Unter­stüt­zung der Zei­chen­sätze). Dane­ben gab es Ver­bes­se­run­gen im GPS Dae­mon sowie viele klei­nere und grö­ßere Opti­mie­run­gen. Der vierte Mei­len­stein kommt in den unter­schied­lichs­ten Images:

- openmoko-fso-console-image
– openmoko-fso-illume-image
– openmoko-fso-image

Bei dem console-image han­delt es sich um ein rei­nes Kon­so­len Image. Das illume-image ist ein FSO Image nur mit Ilumne wäh­rend das fso-image ein FSO Image mit Zhone und eini­ger Soft­ware ist.

Wei­tere Infor­ma­tio­nen und den Down­load gibt es unter:
http://downloads.openmoko.org/framework/milestone4/
http://wiki.openmoko.org/index.php?title=OpenmokoFramework/Status_Update_5

Vor eini­gen Tagen habe ich das Touch­less SDK von Micro­soft aus­pro­biert. Mit die­sem SDK kann eine Anwen­dung über die Web­cam bedie­nen. Dazu sucht das SDK Mar­ker im Bild (am bes­ten grelle Far­ben benut­zen) Und setzt diese dann in eine Posi­tion an. Das ganze funk­tio­nierte erstaun­lich gut nach­dem ich die Hel­lig­keits­kor­rek­tur abge­schal­tet habe. Von der Sache her ist es natür­lich eine schöne Sache, doch wozu könnte man so etwas ernst­haft einsetzen?

Wei­tere Infor­ma­tio­nen gibt es unter:
http://www.codeplex.com/touchless
http://communityclips.officelabs.com/Video.aspx?videoId=a89a217b-fc38-4a6c-87f8-ab59a2028391
http://www.heise.de/newsticker/Multitouch-beruehrungsfrei-gratis-und-von-Microsoft–/meldung/117131