seeseekey.net - Invictus Deus Ex Machina

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

Libre­Of­fice. Das klingt nach Frei­heit. Doch noch­mal von Vorne. Sun wurde vor eini­ger Zeit von Ora­cle auf­ge­kauft. Mit Sun ver­leibte sich Ora­cle so einige Open Source Pro­jekte (Vir­tual­Box, Java, Sola­ris, etc.) ein. Unter die­sen Pro­jek­ten war auch OpenOffice.org ent­hal­ten. Und da Ora­cle keine ver­bind­li­chen Aus­sa­gen zur Zukunft des freien Office­pa­ket machte, wurde doch eini­gen Insti­tu­tio­nen mul­mig. Auch ist das OpenOffice.org Team bei Ora­cle im Moment mit ande­ren Din­gen beschäftigt.

So wurde end­lich die Idee umge­setzt OpenOffice.org unter der Agide einer Stif­tung zu betrei­ben in die Tat umge­setzt. Diese Stif­tung hört dabei auf den Namen Docu­ment Foun­da­tion und ist unter http://www.documentfoundation.org/ zu fin­den. Unter­stützt wird die Docu­ment Foun­da­tion unter ande­rem von Google, Red Hat und eini­gen ande­ren Instutitionen.

Da sich Ora­cle ent­schie­den hat sich nicht an der Arbeit der Foun­da­tion zu betei­li­gen (wel­che gerne die Namens­rechte bekom­men hätte), heißt der Fork nun Libre­Of­fice, mei­ner Mei­nung nach ein wun­der­schö­ner Name. Libre­Of­fice kann dabei unter http://www.documentfoundation.org/download/ bezo­gen wer­den. Mitt­ler­weile haben sich über 80000 Anwen­der die Beta­ver­sion von Libre­Offce gedown­loa­det. Auch Ubuntu möchte ab 11.04 Libre­Of­fice mitliefern.

Auf Twit­ter ist die Foun­da­tion unter http://twitter.com/docufoundation zu fin­den und im IRC ist Libre­Of­fice unter #libre­of­fice (im Freenode Netz­werk) zu fin­den. Einen deut­schen Chan­nel gibt es unter #libreoffice-de.

Wei­tere Infor­ma­tio­nen gibt es unter:
http://www.heise.de/open/artikel/Die-Woche-K-eine-Chance-fuer-OpenOffice-1099535.html
http://www.heise.de/newsticker/meldung/OpenOffice-wird-zu-LibreOffice-Die-OpenOffice-Community-loest-sich-von-Oracle-1097356.html
http://www.heise.de/open/meldung/Oracle-macht-bei-LibreOffice-nicht-mit-1102282.html
http://www.golem.de/1009/78259.html
http://www.golem.de/1010/78448.html
http://www.golem.de/1010/78468.html

In einem Pod­cast über Stau­for­scher wurde irgend­wann eine Web­seite erwähnt auf der man das auch mal plas­tisch aus­pro­bie­ren kann wie sich ein Stau bil­det. Diese Web­seite ist unter http://www.traffic-simulation.de/ zu fin­den. Dort gibt es ein Java App­let mit dem man ver­schie­dene Ver­kehrs­sze­na­rien aus­pro­bie­ren kann und diverse Para­me­ter vari­ie­ren kann. Sehr inter­es­sant mal zu sehen unter wel­chen Bedin­gun­gen ein Stau ent­steht und wie­der verschwindet.

Wer auf der Suche nach einer Open Source Ein­rich­tungs­soft­ware ist der sollte sich ein­mal Sweet Home 3D anschauen. Es han­delt sich dabei um eine in Java geschrie­bene Soft­ware mit wel­cher man seine Woh­nung und deren Ein­rich­tung in 3D visua­li­sie­ren kann. Die Soft­ware läuft dabei sowohl unter Win­dows als auch unter Linux. Zu fin­den ist die Soft­ware unter http://www.sweethome3d.eu.

Wei­tere Infor­ma­tio­nen gibt es unter:
http://wiki.ubuntuusers.de/Sweet_Home_3D