OS X installieren ohne optisches Laufwerk und ohne Medium und dann? => Liondiskmaker

Ich hatte mir schon seit Ewigkeiten keine Gedanken mehr über eine Neuinstallation gemacht. Seit Mac OS X 10.x wird von dem einen Rechner auf den anderen migriert bzw. ein Time Machine Backup verwendet.

Nach diversen Rechnern bei denen Apple so nach und nach das optische Laufwerk weg gelassen hat, und auch durch die Tatsache dass neuere OS X Versionen nur noch über den App Store geladen werden können, kann es unter Umständen schwierig werden seinen Rechner neu aufzusetzen.

So sitze ich nun da mit einem Mac mini ohne optisches Laufwerk und die letzte OS X Version, wie soll es auch anders sein, existiert nur noch als Download. Wie sollte man in so einem Fall den Mac neu installieren? Ganz ehrlich gesagt mein Mac mini schnurrt wie eine Katze, aber was ist wenn doch mal die SSD ihren Geist aufgeben sollte? Verwöhnte Zeiten sage ich nur…

Um es kurz zu machen, hierfür gibt das geniale Tool Liondiskmaker dass den OS X Installer auf ein bootbares Medium kopiert. Wahlweise kann das eine DVD sein, eine externe Festplatte, ein USB Stick oder sogar eine SD Karte!

Einfach nur Top! Kann ich nur weiter empfehlen.

OS X: Seiten mit wget als offline Version herunter laden

Am besten den Packagemanager Homebrew installieren. Mit installiertem Homebrew wget installieren:

brew install wget

Und im Anschluss mit wget die Seiten herunterladen:

wget -r http://www.foo.bar

oder

wget -cmkE -np http://www.foo.bar

Genauere Optionen den manpages entnehmen.

Alternativ gibt er hier noch ein interessantes Tutorial: Install and Configure wget on OS X Mavericks 10.9 and fix SSL GNUTLS error.

Cangaja: Support für Spine 2D Animationen in Cangaja

spine 2d in cangajaMit den 2D Animtionstools Spine oder Spriter habe ich schon lange geliebäugelt. Als ich mir das Spine Runtime Repository auf github angeschaut habe und dort das JavaScript Beispiel für die Turbulenz HTML5 Game Engine gesehen habe, dachte ich mir dass die Spine Runtime eigentlich gar nicht so schwer zu integrieren ist. Außerdem ist hier eine sehr gute Runtime Dokumentation zu finden.

Also habe ich eine erste einfache Spine Klasse in Cangaja integriert, siehe Demo. Die meisten Features funktionieren schon.

Bei Skalierung und Transparenz von Elementen muss ich noch genauer schauen ob das in der spine-js runtime schon nicht unterstützt wird bzw. noch nicht richtig von mir implementiert wurde.

Auch bei Texturen die z.B. auf der X- oder Y-Achse gespiegelt sind gibt es noch einen kleines Positionierungsproblem.

Im nächsten Schritt wäre natürlich eine Kollisionsabfrage interessant oder sogar eine Verbindung mit Box2D Bodies wären ein sehr cooles Feature.

Auch die Spine Animation Events bieten interessante Einsatzmöglichkeiten. Abgesehen davon besitze ich im Moment nur die eingeschränkte Demoversion von Spine in der das Exportieren von Animationen deaktivert ist. Mal sehen was Zeit und Motivation in Zukunft bringt ;-)

 

JavaScript: Destructable Terrain in JavaScript mit Cangaja (Box2D, poly2tri, Clipper)

Destructible terrain in JavaScript

Auf dieses Feature bin ich ein klein wenig stolz ;-) Ich habe in Cangaja ein destructible Terrain implementiert! Mehr oder weniger angespornt von einem Kollegen, der dieses Feature immer wieder erwähnt hat und haben wollte, hat mich dieses Thema irgendwie nie richtig los gelassen…

Infos im Web sind rar, aber dennoch sehr inspirierend gewesen. „Digging into Box2D destructible terrain“ von Emanuele Feronato und das folgende Tutorial wurden mit Spannung erwartet. Die Tutorials werden aber in nicht abwartbaren Abständen veröffentlicht ;-)

Die richtige Idee kam aber erst beim betrachten von „Destructible terrain using SFML + Box2D + Clipper + Poly2Tri“ . Das war der Moment in dem ich dachte, dass ist doch gar nicht so schwer zu implementieren! Mit Clipper und Poly2tri die es als JavaScript Version gibt, wird der Hauptteil der Arbeit erledigt.

Die Terrain Funktion hat noch ein zwei kleine Bugs, die wie ich hoffe noch ausgemerzt werden können. Die Demo dazu läuft aber schon sehr gut!

PHP: OS X und PHP 5.3, 5.4, 5.5

Was für ein Traum! Diese Seite ist wirklich Gold wert, denn dort sind binary packages zur Installation von diversen PHP Versionen (5.3, 5.4, 5.5) für Mac OS X vorhanden. Die Installation ist Mega einfach.

Diverse goodies sind mit installiert, x-debug usw. Die Dokumentation beantwortet die wichtigsten Fragen wie z.B.

# wo befindet sich die php.ini
/usr/local/php5/php.d/99-liip-developer.ini

# wo wird xdebug konfiguriert
/usr/local/php5/php.d/50-extension-xdebug.ini

 

 

 

JavaScript: Emscripten unter OS X installieren

Der letze Beitrag hat es schön gezeigt, wie schnell man in die Tiefen der Technik abdriften kann ;-) Um an diesen anzuknüpfen geht es nun darum Emscripten auf Mac OS X zu installieren.

In der Tutorial Sektion ist ein Gist enthalten mit dem es wirklich sehr einfach ist Emscripten zu installieren.

# Based on https://github.com/kripken/emscripten/wiki/Tutorial

# prerequisites
cd ~/
brew install node
sudo ln -s /usr/bin/python2.7 /usr/bin/python2
curl http://llvm.org/releases/3.2/clang+llvm-3.2-x86_64-apple-darwin11.tar.gz > llvm.tgz
tar xzvf llvm.tgz
ln -s clang+llvm-3.2-x86_64-apple-darwin11 llvm

# emscripten
git clone git://github.com/kripken/emscripten.git
cd emscripten
LLVM=~/llvm/bin ./emcc
LLVM=~/llvm/bin ./emcc tests/hello_world.cpp -o hello.html
open hello.html

Ein kleiner Blocker ist auch hier enthalten, da git nicht auf OS X vorhanden ist. Also bevor der Gist funktioniert vorher noch schnell den git-osx-installer herunterladen und installieren.

Wird das Gistfile über die Konsole mit sh gistfile1.sh aufgerufen ist dann ungefähr folgendes zu sehen. Am Schluß wird dann noch eine hello.html Seite geöffnet.

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 67.8M  100 67.8M    0     0   632k      0  0:01:49  0:01:49 --:--:--  639k
x clang+llvm-3.2-x86_64-apple-darwin11/
x clang+llvm-3.2-x86_64-apple-darwin11/bin/
...
...
...
...
...
x clang+llvm-3.2-x86_64-apple-darwin11/share/man/man1/
x clang+llvm-3.2-x86_64-apple-darwin11/share/man/man1/clang.1
Cloning into 'emscripten'...
remote: Finding bitmap roots...
remote: Counting objects: 46622, done.
remote: Compressing objects: 100% (15932/15932), done.
remote: Total 46622 (delta 30419), reused 46395 (delta 30205)
Receiving objects: 100% (46622/46622), 87.13 MiB | 641.00 KiB/s, done.
Resolving deltas: 100% (30419/30419), done.
Checking connectivity... done

==============================================================================
Welcome to Emscripten!

This is the first time any of the Emscripten tools has been run.

A settings file has been copied to ~/.emscripten, at absolute path: /Users/csg/.emscripten

It contains our best guesses for the important paths, which are:

  LLVM_ROOT       = /usr/bin
  PYTHON          = /usr/bin/python2
  NODE_JS         = /usr/local/bin/node
  EMSCRIPTEN_ROOT = /Users/csg/emscripten

Please edit the file if any of those are incorrect.

This command will now exit. When you are done editing those paths, re-run it.
==============================================================================

INFO     root: (Emscripten: Running sanity checks)

Emscript sollte nun erfolgreich installiert sein. Der nächste Beitrag erscheint Asap.

JavaScript: Emscripten erste Versuche unter OS X

Wahnsinn! Was man nicht alles ausprobieren muss ;-) Als ich mal wieder Lust hatte an meinem Cangaja Framework weiter zu arbeiten, kam mir die Idee eine neuere Box2D Version einzubinden.

Aktuell ist Box2DWeb, ein Port der Box2dFlash Version 2.1a in Cangaja in Verwendung. Die Version der original C++ Version von Box2D ist aber mittlerweile schon bei Version 2.2.1 2.3.0. Eine der nennenswerten Neuerungen seit der Version 2.2 (Version ohne Gewähr ;-) sind Chain Shapes mit denen man viele Eckpunkte verbinden kann um statische Objekte zu erzeugen.

Auf der Suche nach einer aktuelleren Box2D Version für Javascript bin ich auf ‚Port of Box2D to JavaScript using Emscripten‚ gestoßen. Dieses nutzt Emscripten um C/C++ Code über LLVM nach JavaScript zu kompilieren. Eine genauere Erklärung und die Vorteile davon werden hier erläutert -> Asm.js: The JavaScript Compile Target.

Gesagt getan wurde von mir die Emscripten Version von Box2D herunter geladen. Wie sich aber heraus stellte war diese nicht so einfach zu implementieren wie naiverweise Gedacht ;-) Nach einigen Recherchieren bin ich auf diesen Blogeintrag „Playing with the Emscripten port of Box2D“ gestoßen, der die Eigenheiten vom Emscripten kompilierten Box2D JavaScript Code genauer unter die Lupe nimmt.

Nachdem diese Hürden umschifft waren ging es weiter bei der Implementierung. Nach den ersten kleinen Erfolgen mit Circle Shape und Polygon Shape tauchten die nächsten Schwierigkeiten auf, die nicht genauer eroiert werden konnten da in der Konsole keine Fehlermeldung ausgegeben wurde.

Um besser nachvollziehen zu können was dort eigentlich passiert, wollte ich DebugDraw einbauen, aber das sollte auch nicht so leicht von statten gehen. Zumindest wird hier aber der Fehler ‚Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.‘ ausgegeben.

Nach etwas stöbern über Google in der Issues List von kripken’s / box2d.js kam heraus dass es eventuell nötig ist box2d.js neu zu kompilieren, schock schwere Not ;-)

Dazu muss aber zuerst Emscripten unter OS X installiert sein. Wie es weiter geht ist im nächsten Beitrag nach zu lesen

JavaScript: Private statische Elemente mit Closure in JavaScript

var ExampleClass = (function(){

	//privates statisches Attribut
	var staticVar = 0;

	//private statische Methode
	function staticMethod(){
	}

	return function(fooValue,barValue){
		//private Attribute
		var foo, bar;

		//private Methode
		function fooPrivate(){

		}

		//foo Setter
		this.setFoo = function(value){
			foo = value;
		}
		//foo Getter
		this.getFoo = function(){
			return foo;
		}
		//bar Setter
		this.setBar = function(value){
			bar = value;
		}
		//bar Getter
		this.getBar = function(){
			return bar;
		}

		//Konstruktorcode
		staticVar++;
		if (staticVar > 5) throw new Error('Es können nur maximal 5 Instanzen erzeugt werden.');

		this.setFoo(fooValue);
		this.setBar(barValue);
	}
})();

 

JavaScript: Private Elemente mit Closure in JavaScript

var ExampleClass = function(fooValue, barValue){
	//private Attribute
	var foo, bar

	//private Methode
	function fooPrivate(){

	}

	//foo Setter
	this.setFoo = function(value){
		foo = value;
	}
	//foo Getter
	this.getFoo = function(){
		return foo;
	}
	//bar Setter
	this.setBar = function(value){
		bar = value;
	}
	//bar Getter
	this.getBar = function(){
		return bar;
	}

	//Konstruktorcode
	this.setFoo(fooValue);
	this.setBar(barValue);
}