seeseekey.net - Invictus Deus Ex Machina

Bei EncFS han­delt es sich um eine Imple­men­tie­rung eines Ver­schlüss­lungs­sys­tems für beste­hende Datei­sys­teme. Bei die­sem Sys­tem wird jede Datei für sich ver­schlüs­selt und das dar­un­ter lie­gende Datei­sys­tem genutzt. Neben der Ori­gi­nalim­ple­men­tie­rung von EncFS gibt es auch Por­tie­run­gen in andere Pro­gram­mier­spra­chen. Mit die­sen Por­tie­run­gen kön­nen EncFS ver­schlüs­selte Daten auch unter Java und .NET aus­ge­le­sen werden.

Die Java­va­ri­ante von EncFS trägt dabei den Namen „encfs-java“ und ist auf Git­Hub zu fin­den. Neben die­ser gibt es auch eine Vari­ante für .NET wel­che in C# geschrie­ben ist und auf Bit­Bu­cket zu fin­den ist. Ursprüng­lich han­delt es sich bei „encfs-dotnet“ um eine Por­tie­rung von „encfs-java“. Mitt­ler­weile wurde diese Imple­men­tie­rung aber kom­plett neu geschrie­ben. Wie bei der Ori­gi­nalim­ple­men­tie­rung, han­delt es sich auch bei den Por­tie­run­gen um freie Soft­ware. Die Java-Portierung steht dabei unter der GPL, wäh­rend die .NET Imple­men­tie­rung unter der LGPG steht, was deren Ver­wen­dung fle­xi­bler gestaltet.

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

Beim Spie­len von Star­craft 2 wird man irgend­wann den Begriff „Build Order“ oder Bau­rei­hen­folge gehört haben. Dabei han­delt es sich um eine je nach Spiel­rasse ver­wen­dete feste Rei­hen­folge für den initia­len Auf­bau der Basis. Für die Stan­dard­vor­ge­hens­wei­sen gibt es dabei durch­aus einige erprobte Strategien.

Inter­es­sant wird es wenn man eine eigene Build Order ent­wi­ckeln möchte. Das kann man natür­lich von Hand tun oder spe­zia­li­sierte Tools dafür benut­zen. Eine sol­che Build Order könnte dann z.B. so aussehen:

0:02,00: 50M 0G 3L 6/ 10S — Build Drone
0:13,63: 50M 0G 2L 7/ 10S — Build Drone
0:24,70: 50M 0G 2L 8/ 10S — Build Drone
0:29,75: 25M 0G 1L 9/ 10S — Build Extrac­tor
1:07,65: 200M 0G 3L 8/ 10S — Build Spa­w­ning Pool
1:07,65: 0M 0G 3L 7/ 10S — Move Three Dro­nes To Gas
1:25,56: 50M 26G 3L 7/ 10S — Build Drone
2:12,65: 160M 116G 3L 8/ 10S — Rese­arch Meta­bo­lic Boost
2:12,65: 60M 16G 3L 8/ 10S — Build Extrac­tor
2:12,65: 35M 16G 3L 7/ 10S — Build Extrac­tor
2:12,65: 10M 16G 3L 6/ 10S — Can­cel Extrac­tor
2:12,65: 29M 16G 3L 7/ 10S — Build Extrac­tor
2:12,65: 4M 16G 3L 6/ 10S — Can­cel Extrac­tor
2:12,65: 23M 16G 3L 7/ 10S — Can­cel Extrac­tor
2:12,65: 42M 16G 3L 8/ 10S — Build Extrac­tor
2:12,65: 17M 16G 3L 7/ 10S — Can­cel Extrac­tor
2:17,58: 50M 18G 3L 8/ 10S — Build Zer­g­ling
2:37,78: 100M 31G 3L 9/ 10S — Build Over­lord
2:47,88: 50M 37G 2L 9/ 10S — Build Zer­g­ling
3:02,78: 74M 46G 2L 10/ 18S — Build Zer­g­ling
3:08,08: 50M 50G 2L 11/ 18S — Build Zer­g­ling
3:18,18: 50M 56G 1L 12/ 18S — Build Zer­g­ling
3:28,28: 50M 63G 1L 13/ 18S — Build Zer­g­ling
3:38,38: 50M 69G 1L 14/ 18S — Build Zergling

Way­po­int 1 satis­fied:
4:02,65: 120M 84G 1L 15/ 18S
Income: 297M 38G
Buil­dings: 1 Hat­chery 1 Extrac­tor 1 Spa­w­ning Pool
Units: 8 Drone 2 Over­lord 14 Zer­g­ling
Rese­arch: Meta­bo­lic Boost

Bei jedem die­sen Tools gibt man das Ziel an (z.B. 12 Zer­g­linge) und diese pro­bie­ren das ganze so lange durch bis eine mög­lichst opti­male Lösung gefun­den wurde. Spe­zi­ell für Zerg gibt es dabei das auf Java basie­rende Tool „Evo­lu­tion Cham­ber“ wel­ches unter http://code.google.com/p/evolutionchamber/ zu fin­den ist.

Star­craft Fusion beim Erstel­len einer Build Order

Für Win­dows gibt es das Tool „Star­craft Fusion“. Im Gegen­satz zu „Evo­lu­tion Cham­ber“ kön­nen mit „Star­craft Fusion“ auch Build Order für die Ter­ra­ner und die Pro­tos ange­legt wer­den. Bei der Benut­zung sollte man immer beach­ten, das jede Bedin­gung die man defi­niert sich auf die Rechen­zeit aus­wirkt. Bei kom­ple­xen Zusam­men­stel­lun­gen kann eine sol­che Berech­nung schon mal einige Wochen dau­ern, wäh­rend es sich bei ein paar Zer­g­lin­gen nur um einige Minu­ten handelt.

Das schöne an zen­tra­len Samm­lun­gen ist das man sie rela­tiv ein­fach aus­wer­ten kann. In die­sem Fall geht es um die Aus­wer­tung der Git­Hub Repo­si­to­ries. Wie der Name „Popu­lar Con­ven­tion“ andeu­tet geht es darum aus den Quell­tex­ten bestimmte Infor­ma­tio­nen über bevor­zugte Kon­ven­tio­nen wie z.B. Leer­zei­chen vs. Tabs zu extrahieren.

Popu­lar Con­ven­tion und Scala

Das Ergeb­nis kann man sich auf der Web­seite http://sideeffect.kr/popularconvention/ für die Spra­chen Java­script, Java, Python und Scala anschauen. Die Soft­ware zur Aus­wer­tung ist dabei freie Soft­ware und steht unter der MIT Lizenz und kann unter https://github.com/outsideris/popularconvention bezo­gen werden.

Sich einen Robo­ter bauen und diese gegen andere Robo­ter kämp­fen zu las­sen, kann rela­tiv schnell ins Geld und Mate­rial gehen. Ein­fa­cher wird es dabei mit Robo­code, wobei es sich um eine Soft­ware­um­ge­bung han­delt, in wel­cher Robo­ter pro­gram­miert wer­den kön­nen. Anschlie­ßend tre­ten diese in einer vir­tu­el­len Arena gegen­ein­an­der an.

Die Bots im Kampf gegeneinander

Geschrie­ben wer­den die Robo­ter in Java. Dabei fin­den sich eine Menge Bei­spiele in der Robo­code Instal­la­tion. Bei Robo­code selbst han­delt es sich um Open Source Soft­ware wel­che unter der Eclipse Public License steht. Die offi­zi­elle Web­seite ist unter http://robocode.sourceforge.net/ zu fin­den. Lauf­fä­hig ist das ganze unter Linux, Mac OS X und Windows.

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

Da möchte man nichts­ah­nend Mine­craft star­ten und bekommt nur fol­gende Feh­ler­mel­dung an den Kopf geworfen:

Exception in thread "main" java.awt.HeadlessException
        at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:173)
        at java.awt.Window.(Window.java:546)
        at java.awt.Frame.(Frame.java:419)
        at net.minecraft.LauncherFrame.(LauncherFrame.java:20)
        at net.minecraft.LauncherFrame.main(LauncherFrame.java:167)
        at net.minecraft.MinecraftLauncher.main(MinecraftLauncher.java:13)

In die­sem Fall hilft ein beherztes:

apt-get install openjdk-6-jdk

auf der Kon­sole. Nach der Instal­la­tion sollte Mine­craft ohne wei­tere Pro­bleme starten.

Wer ver­sucht hat nach dem Update auf „Moun­tian Lion“ eine neue Java Appli­ka­tion zu instal­lie­ren, wird wahr­schein­lich auf eine Feh­ler­mel­dung nach dem Schema

Appli­ka­tion XYZ“ ist beschä­digt und kann nicht geöff­net wer­den. Es emp­fiehlt sich, das Image auszuwerfen.

Ursa­che für die­ses Pro­blem ist Gate­kee­per. Wäh­rend man andere Appli­ka­tio­nen pro­blem­los per Kon­text­menü im Fin­der öff­nen kann, so das diese nach einer Sicher­heits­ab­frage zuge­las­sen sind, funk­tio­niert dies bei Java Appli­ka­tio­nen nicht mehr.

OS X mel­det das das Paket defekt ist

Um die Java Appli­ka­tio­nen trotz­dem zur Aus­füh­rung zu bewe­gen, muss für den ers­ten Start Gate­kee­per auf „Keine Ein­schrän­kung“ gestellt wer­den. Anschlie­ßend kann die Ein­stel­lung wie­der auf den ursprüng­li­chen Wert zurück­ge­stellt wer­den. Besagte Java Appli­ka­tion läuft nun auch mit akti­vier­ten Gatekeeper.

Wer ein Spiel für ein Mobil­ge­rät schrei­ben möchte hat das Pro­blem das es eine ganze Menge die­ser Sys­teme gibt. Die bekann­te­ren sind sicher­lich Android und iOS. Möchte man für diese Sys­teme ein Spiel schrei­ben, so wäre eine Abs­trak­ti­ons­schicht eine feine Sache. Eine sol­che bie­tet Google mit „PlayN“ unter der Apa­che Lizenz an. Mit die­sem Frame­work wurde unter ande­rem die Google Chrome Ver­sion von Angry Birds geschrie­ben. Aktu­ell wer­den fol­gende Platt­for­men unterstützt:

  • Java
  • HTML5
  • Android
  • iOS

Auch Flash wird unter­stützt, wobei das Backend dafür im Moment einen Main­tai­ner sucht und des­halb in die­ser Liste nicht auf­taucht. Her­un­ter­la­den kann man sich PlayN unter http://code.google.com/p/playn/.

Wei­tere Infor­ma­tio­nen gibt es unter:
http://code.google.com/p/playn/wiki/PlatformStatus
http://www.schockwellenreiter.de/blog/2012/03/12/playn/

Manch­mal ist es doch sehr prak­tisch eine APK Datei zu dekom­pi­lie­ren, z.B. um ein wenig Reverse Engi­nee­ring zu betrei­ben. Nach­dem wir die gewünschte APK auf der Fest­platte haben laden wir uns dex2jar unter http://code.google.com/p/dex2jar her­un­ter. Mit die­sem Tool wan­deln wir den Dal­vik Inter­me­diate Code in eine JAR (sprich Java) Datei um. Wir wen­den dex2jar mit­tels

dex2jar.sh test.apk

auf unsere APK an. Her­aus kommt eine JAR Datei wel­che wir mit der JD-GUI (zu fin­den unter http://java.decompiler.free.fr/?q=jdgui) öff­nen und uns so anschauen können.

Wei­tere Infor­ma­tio­nen gibt es unter:
http://stackoverflow.com/questions/3122635/android-decompile-apk
http://stackoverflow.com/questions/1249973/decompiling-dex-into-java-sourcecode

Bei AndEn­gine han­delt es sich um eine Game­en­gine für Andro­id­ge­räte. Die Apps für diese Platt­form wer­den ja bekannt­lich in Java geschrie­ben. Und darum soll es hier auch gehen. Im ers­ten Schritt wird Eclipse auf­ge­setzt und anschlie­ßend neh­men wir die AndEn­gine in Betrieb. Im ers­ten Schritt muss also das Paket eclipse instal­liert wer­den. Danach sollte das Android SDK für Linux unter http://developer.android.com/sdk/index.html her­un­ter­ge­la­den wer­den und auf der Fest­platte ent­packt wer­den. Dann geht es in den Ord­ner tools des SDKs und dort wird dann

./android update sdk 

aus­ge­führt. Nun bestä­tigt man die Lizenz und instal­liert die ver­schie­de­nen SDK Ver­sio­nen. Dies kann dabei einige Minu­ten dauern.

Nun kann man Eclipse star­ten. Beim ers­ten Start erscheint ein Begrü­ßungs­bild­schirm den man schlie­ßen kann. Danach sollte man unter Help -> Install new Soft­ware die Android Deve­lop­ment Tools instal­lie­ren. Dazu wird in dem sich öff­nen­den Dia­log die URL http://dl-ssl.google.com/android/eclipse/ ein­ge­ge­ben und durch einen Druck auf den Add… But­ton hin­zu­ge­fügt. Dann kli­cken wir die Check­box Deve­l­oper Tools an und betä­ti­gen die Instal­la­tion mit dem Next… But­ton. Mit­tels eines Assis­ten­ten wird man nun durch die Instal­la­tion gelei­tet. Nach­dem die Instal­la­tion been­det ist emp­fiehlt Eclipse einen Neu­start der Umge­bung. Die­sem sollte Wunsch sollte man Folge leisten.

Nun benö­tigt Eclipse die Infor­ma­tion wo das Android SDK sich auf der Fest­platte befin­det. Dazu geht man auf Win­dow -> Pre­fe­ren­ces -> Android. Dort wählt man den Pfad des Android SDKs aus und bestä­tigt den Dia­log mit OK.

Die grund­le­gende Kon­fi­gu­ra­ti­ons­ar­beit ist damit geleis­tet. Nun kann mit dem ers­ten Pro­jekt begon­nen wer­den. Dazu gehen wir auf File -> New -> Pro­ject und wäh­len dort Android Pro­ject aus und kli­cken dann auf Next. In dem dar­auf fol­gen­den Dia­log geben wir dem Pro­jekt einen Namen z.B. Hello World. Im Feld Package Name geben wir den Namen des Package an z.B. net.seeseekey.hello_world und bei Activity name z.B. Form­Main und bei App­li­ca­tion name z.B. Hello World und bestä­ti­gen das ganze mit dem Finish Button.

Danach wird auto­ma­tisch das Grund­ge­rüst für eine Android Appli­ka­tion erzeugt. Sollte es beim Erzeu­gen der Anwen­dung der Fehler

Pro­ject ‚Run­ti­me­An­droid‘ is mis­sing requi­red source fol­der ‚gen’
The pro­ject can­not be built until build errors are resolved 

auf­tre­ten so hilft es die R.java Datei zu löschen. Sie wird danach auto­ma­tisch neu erzeugt. Wenn wir nun auf den grü­nen Play Knopf (Run) in der Sym­bolleiste kli­cken so star­tet Eclipse das Pro­gramm im Android Emu­la­tor. Beim ers­ten Start sollte aller­dings ein Dia­log erschei­nen wel­cher einem anbie­tet ein vir­tu­el­les Gerät für den Emu­la­tor anzu­le­gen. Nach­dem dies gesche­hen ist, wird das Hello World Pro­gramm im Emu­la­tor gela­den und aus­ge­führt. Und schon ist das erste Hello World Pro­gramm geschrie­ben und die Funk­ti­ons­fä­hig­keit der IDE getestet.

Nun geht es an die AndEn­gine. Erst ein­mal holen wir uns den Source­codes mit­tels hg (Mer­cu­rial) auf die Festplatte:

hg clone https://andengine.googlecode.com/hg/ anden­gine
hg clone https://andengineexamples.googlecode.com/hg/ andengineexamples 

Anschlie­ßend impor­tie­ren wir das anden­gi­neexam­ples Pro­jekt (File -> Import…) in den Works­pace. In dem Pro­jekt AndEn­gi­neExam­ples sind dabei viele Bei­spiele zur Anwen­dung der Engine zu finden.

Nun neh­men wir unser bereits ange­leg­tes Hello World Pro­jekt und erzeu­gen in die­sem (mit­tels New -> Fol­der) einen Ord­ner namens lib. In die­sen kopie­ren wir die andengine.jar aus dem AndEn­gine Exam­ples Pro­jekt. Nun kli­cken wir mit der rech­ten Maus­taste auf die andengine.jar und wäh­len dort Build Path -> Add To Build Path… aus. Damit ist die Biblio­thek refe­ren­ziert. Nun gehen wir in unsere Activity, in die­sem Fall Form­Main und löschen dort alles bis auf die packa­ges Zeile. Nun fügen wir dort fol­gen­den Quell­text ein:

public class FormMain extends BaseGameActivity {
	// Konstanten
	private static final int CAMERA_WIDTH = 720;
	private static final int CAMERA_HEIGHT = 480;

	// Variablen
	private Camera mCamera;

	@Override
	public Engine onLoadEngine() {
		this.mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
		return new Engine(new EngineOptions(true, ScreenOrientation.LANDSCAPE, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), this.mCamera));
	}

	@Override
	public void onLoadResources() {
	}

	@Override
	public Scene onLoadScene() {
		this.mEngine.registerUpdateHandler(new FPSLogger());

		final Scene scene = new Scene(1);
		scene.setBackground(new ColorBackground(0, 0, 0.8784f));

		return scene;
	}

	@Override
	public void onLoadComplete() {

	}
}

Anschlie­ßend wer­den mit­tels Strg + Shift + O alle benö­tig­ten Importe in die Datei ein­ge­fügt. Wich­tig ist es jetzt noch dem Mani­fest fol­gende Zeile hinzuzufügen:

<uses-permission android:name="android.permission.WAKE_LOCK"/>

Nun kann man das ganze im Emu­la­tor star­ten. Es dürfte ein blauer Bild­schirm ange­zeigt wer­den. Nun kann man sich damit begin­nen das ganze mit Leben zu erfül­len :)

Wei­tere Infor­ma­tio­nen gibt es unter:
http://www.andengine.org/
http://code.google.com/p/andengine/
http://code.google.com/p/andengineexamples/
http://developer.android.com/sdk/installing.html
http://www.andengine.org/forums/tutorials/getting-started-updated-t2198.html
http://www.andengine.org/forums/tutorials/andengine-core-terminology-t316.html
http://www.andengine.org/forums/tutorials/getting-started-with-andengine-t11.html
http://www.andengine.org/forums/tutorials/eclipse-andengine-and-helloworld-t380.html
http://www.andengine.org/forums/tutorials/mimminito-s-tutorial-list-t417.html

Erstaunt stellte ich ges­tern fest das der neue Stan­dard­fo­to­ma­na­ger unter Ubuntu (Shot­well) in Vala geschrie­ben ist. Bei Vala han­delt es sich um eine Pro­gram­mier­spra­che wel­che stark an C# und Java ange­lehnt ist. Dabei benö­tigt sie aber keine Lauf­zeit­um­ge­bung. Man hat dann also eine Spra­che wel­che eine moderne Syn­tax bie­tet und keine Lauf­zeit­um­ge­bung benö­tigt son­dern nativ auf dem Sys­tem läuft. Im Gegen­satz zu .NET/Mono hat die Spra­che kei­nen Gar­bage Collec­tor son­dern imple­men­tiert auto­ma­ti­sche Refe­renz­zäh­lung zur Speicherverwaltung.

Beim durch­schauen der Syn­tax (ver­gli­chen mit C#) sind mir einige Unschön­hei­ten auf­ge­fal­len wel­che einige Kon­strukte nicht sehr ele­gant aus­se­hen las­sen, aber das muss man sich wahr­schein­lich mal in einem klei­nen Pro­jekt anschauen. Es ist mög­lich mit Vala platt­for­mu­n­ab­hän­gige Anwen­dun­gen zu schrei­ben. Als Stan­dard­bi­blio­thek steht einem die glibc sowie die Geelib zur Ver­fü­gung. Der Vala Com­pi­ler wan­delt den Quell­code in C Code um und kom­pi­liert die­sen dann anschlie­ßend. Defi­ni­tiv eine Spra­che die man sich mal anschauen sollte :) Die offi­zi­elle Seite von Vala ist unter http://live.gnome.org/Vala zu finden.

Wei­tere Infor­ma­tio­nen gibt es unter:
http://de.wikipedia.org/wiki/Vala_%28Programmiersprache%29