#NodeJS #AngularJS und #Gulp

Seit einiger Zeit beschäftige ich mich sehr viel mit NodeJS, AngularJS und Gulp.
Die Möglichkeiten, schnell verschiedenen Applikationen für diverse Endgeräte zu entwickelen, sind scheinbar endlos.

Neben meinem Roboter Projekt „Erwin“ hab ich noch ein weiteres Projekt das ich in diesem Jahr endlich angehen möchte. Für beide Projekte möchte ich NodeJS einsetzten und Anwendungen mit AngularJS als Oberfläche realisieren. Wärend der Entwicklung setzte ich Gulp ein.

Da ich immer wieder hören muss das ich in meinem Beruf zu breit gefächert bin und kein Vertrauen darin besteht, dass das gelernte nicht nur Oberflächlich ist, habe ich mich dazu entschieden bestimmte Themen zu nehmen und mir diese in aller tiefe anzueignen.

Und wie geht das besser, als die Themen einzusetzten und darüber zu schreiben. Zudem werde ich wie gewohnt zu jedem Teilbereich des Themas das ich gerade bearbeite ein kurzes Video zum BlogPost packen.

Die ersten Themen werden die im Titel genannten sein. Dazu werde ich mir eine Frage nehmen und darüber schreiben. Im Anschluss werde ich ein praktisches Beispiel dazu erstellen und ein Video hinzufügen.

Meine treuen Leser und Zuschauer sind eingeladen, Fragen zu den aktuellen Themen zu stellen. Diese werde ich wenn Möglich mit in diesem Prozess aufnehmen.

 

 

iOS Development – Der Einstieg

Die letzten zwei Abende hab ich mich intensiv mit dem Thema iOS Entwicklung beschäftigt. Mein erstes Projekt war in XCode schnell erstellt und ich konnte den generierte Code begutachten.
Ich hab mich für Objekt-C als Sprache entschieden und war ehrlich gesagt total überfordert. *irgendwas -funtionirgendwas +funktiinwasanderes und und und Wtf

Ich hab den Quellcode wieder geschlossen und mich dem optischen Dingen hingegeben … Kann ja nicht so schwer sein .. denkst
Ich hab dann abgebrochen selbst im Editor und mich der Online Schulung’splattform YouTube zugesendet. Am ersten Abend hab ich mir 4 Stunden Videos zum erstellen von Oberflächen in iOS angeschaut und am nächsten Abend 5 Stunden Videos über Objekt-C

Heute Nacht wird das gesamte wissen aus 9 Stunden YouTube Videos in meine erste iOS App einfließen.

Die Sprache Ansicht finde ich persönlich als Herausforderung da sie so anders ist.. normal schreib ich eine Klasse initialisirre sie und arbeite damit. In Object-c macht man das auch .. nur indirekt. Man teilt im Code mit, mit welchem Objekt im Speicher man gerne arbeiten möchte und schickt dorthin die Anweisung. Interne Magie macht dann den Aufruf auf dem Objekt und gibt einem das Ergebnis.
Vermutlich ist das ganze für C Experten etwas einfacher aber als Java und C# Entwickler doch eine ganz andere Welt.

Aber okay ich Kenn jetzt die Grundlagen weiß das ich mit Pointer auf die Objekte zugreifen.

Bin auf heute Nacht gespannt. Ihr findet mich wie immer in livecoding.TV/Onko channel

MeetTube Android App Entwicklung auf @livecodingtv

Mal ein paar Worte zur aktuellen Entwicklung von MeetTube. Diese App hatte ich eigentlich für frühstens Ende des Jahres geplant, konnte sie aber aus verschiedenen Gründen jetzt vorziehen.

Die ganze App wird im Live Stream programmiert und das exclusiv auf Livecoding.tv, sicher nicht immer spannend aber man bekommt sehr gute Einblicke und weiß am Ende auch das sie nichts böses enthält 😉 Alle zuschau sind auch herzlich eingeladen an der Gestaltung der App teilzunehmen und Wünsche zu äußern.

Die komplette PlayListe ist hier zu finden.

#minecraft #bukkit Erste versuche #mclegend

Gestern Abend habe ich angefangen mich mit Minecraft Plugins auf Basis von Bukkit zu beschäftigen.

Sehr insteressantes Thema und auch hervorragend geeignet für Java Einsteiger. Wenn man die Grundlagen hat ist es kein Problem Minecraft nach seinen Wünschen zu Gestalten.

Meinen Server hab ich nun schonmal mit bukkit aufgerüstet und ein wunschplugin installiert das keinen großen Einfluss auf das spiel selbst nimmt. Dabei handelt es sich um das StepsSit Plugin um sich Stühle zu bauen auf dennen man sitzten kann. Ich persönlich finde auch das dieses Plugin weitere Möglichkeiten bietet auf friedlicher Art zusammen zu spielen.

Mein erstes Test Plugin ist für das Projekt #mclegend gedacht. Dieses Plugin gibt Spielern der Gruppe Zandaren einen Buff wenn der nächste Block ein Wasserblock ist. Wie immer hab ich natürlich vergessen zu prüfen ober der Buff bereits existiert, wenn dies zu trifft muss der Buff ja nicht neu gesetzt werden. Zudem würde das neu setzten des Buffs bei jeder Bewegung die Performance des Servers extrem runterziehen. Also Notiz an mich:

TODO: Change Buff Handling 🙂

Mehr zu Plugins in Minecraft demnächst hier im Block.

Wir programmieren einen Bot

Um nun endlich mal vor ran zu kommen, starte Ich hier auf meinem Blog eine Neue Reihe.

Auch wenn ich kein begabter Schreiber bin kann ich trotz allem sehr begabt auf der Tastatur rumhacken.

Dies soll kein Tutorial darstellen und auch keine Anleitung zum Programmieren lernen.
Ich gehe pauschal davon aus das meine Leser ein fundiertes Grundwissen haben. Also ehr mehr wisst als ich? Ich bin gespannt. Challenge accepted! Muhahahah 😉

Okay fangen wir ganz einfach an. Ich arbeite hier mit Visual Studio 2013 da ich beschlossen habe das ganze in C# zu realisieren. Der Bot selbst soll uns im Spiel Ingress unterstützen. Also erstellen wir ein neues Projekt. Welche Art von Projekt man nimmt ist im Grunde wurscht.. ein Texteditor tut es auch! Da mir das aber zu stressig ist und ich nicht auf den Komfort einer IDE verzichten möchte wähle ich ein .. ähm .. WebProjekt. [ASP.net mit MVC]

WebProjekt? WTF?

Ein Bot im WebProjekt? Klar warum nicht?

Meine Wahl beruht auf zwei Überlegungen. Wie oft sitze ich am eigenen Rechner und wo kann ich Software installieren. Nicht oft und ehr weniger im Büro.

Also baue ich das ganze im Web und hoste es auch noch kostenlos bei Azure, also perfekt!

Zack 5 Mausklicks später, das Projekt steht. Na ja, zumindest der Grundrahmen… Einmal auf Azure veröffentlichen und schon ist es auf meiner Azure Webseite verfügbar.

Wie man sieht ist direkt eine „fertig“ Webseite online mit allem was man so braucht. Jetzt das tollste:

Wir implementieren die Google Auth Klamotten damit wir auch direkt mit unserem Spiele Account eingeloggt sind und den Token haben 🙂

Fangen wir mal an:

Öffne App_Start\Startup.Auth.cs

jetzt wird es kniffelig…

aus der letzten Zeile:

// app.UseGoogleAuthentication();

die Kommentar Slash [ // ] entfernen. Fertig.
Gut das war nun wirklich extrem komplex, dafür haben wir nun schon mal einen wichtigen Schritt erledigt. Der Token für die Ingress API steht uns nach dem Login zur Verfügung, cool. Dann testen wir mal den Google Login.  Klappt.

Nun benötigen wir eine Kommunikationsschnittstelle zu Ingress.
Also eine neue Klasse erstellen im neuen Ordner „Bot“ nennen wir sie mal… „IngressWebservice“ und lassen sie im Namespace Bot.

Was brauchen wir noch …
Ein Model für die Points ( Bot.Points)

Soll erstmal reichen da wir erstmal nur versuchen die Points von unserem aktuellem Standort abzurufen. Btw Standort, erstellen wir doch noch ne Klasse GPSControler.
Wir haben zwar im Webserver kein GPS Empfänger, wir wollen aber auch keine GPSDaten auslesen. Wir wollen unsere eigenen GPS Daten nutzen.

Wieder zurück im IngressWebservice:

erstmal ne public Points gePoints() { } Funktion um an die Punkt Daten zu kommen.
Mit dieser Funktion bauen wir erstmal die Kommunikation mit der Ingress API auf und  plaudern mit Ihr. Wie machen wir dass?

Als erstes müssen wir wissen wie die Ingress APP denn mit dem Server kommuniziert.
Das macht sie natürlich über ein Webservice und den findet man unter https://www.ingress.com/r/ also man findet ihn nicht wirklich hier, es kommt eine Weiterleitung und es gibt auch keine öffentliche Dokumentation zur API.. leider …
Aber wenn wir uns den APP Quellcode von Ingress anschauen können wir uns das alles ansehen. Anleitung zum Beispiel: hier

Am besten auch gleich Android Studio mit allem benötigten Zeug installieren.

Auslesen der punkte: /r/or74v5e0dijoseab
Irgendwas für den Chat: /r/tx9a36zfmalr5s35
Game Entinits: r/ivrsh7tuvj0if77k
Action Informationen r/tx9a36zfmalr5s35

Da es eine Rest API ist laufen alle informationen also über JSON \o/ das ist Spitze.

Das abrufen der Punkte würde dann in etwa so aussehen, dieser ganze unleserliche kram sind die geforderten Informationen. Bei meinem letzten Bot war das noch alles schön lesbar. Jetzt ist es verschlüsselt und sicher und keiner kann mehr die Api unberechtigt nutzen. So die Theorie.

{
„tnpkzqqu5p3mn4rp“:“or74v5e0dijoseab“,
„y76begpg0lz0g5s3″:“3aad79b9e7b135fa9c8b2c67bf6a051b0e0617f7“,
„l2pa0wslrtmthlhf“:64,
„s3xowgcoqduol0ij“:-90000000,
„cvv98kwi14wsfesr“:-180000000,
„as1getmlsyn7cyrg“:90000000,
„9xrrc4me7owrbazc“:180000000,
„kz90pcxjj0nypj0a“:0
}

für Portale dann ehr dass hier:

// Portal
{„cprnnhnm9s44iu39“:[„1_34055_21824″,“1_34056_21824″,“1_34055_21826″,“1_34056_21826″],“tnpkzqqu5p3mn4rp“:“ivrsh7tuvj0if77k“,“y76begpg0lz0g5s3″:“3aad79b9e7b135fa9c8b2c67bf6a051b0e0617f7″,“l2pa0wslrtmthlhf“:52,“s3xowgcoqduol0ij“:-90000000,“cvv98kwi14wsfesr“:-180000000,“as1getmlsyn7cyrg“:90000000,“9xrrc4me7owrbazc“:180000000}

Ingress sicher zu gestalten ist echt nicht einfach da der Code, in Java geschrieben wurde, einfach wieder „lesbar“ gemacht werden kann. Im Grunde OpenSource, am einfachsten ist es das ganze auch so zu handhaben und die „Community“ den Rest machen zu lassen 😉

Wie man sehen kann übergibt man die GEO Daten auch an die API, also brauchen wir uns diese auch nur zusammen schupsen und mitliefern.

Als nächstes müssen wir nur noch raus finden was von den Werten was sein soll…
Okay:

„s3xowgcoqduol0ij“:-90000000,
„cvv98kwi14wsfesr“:-180000000,
„as1getmlsyn7cyrg“:90000000,
„9xrrc4me7owrbazc“:180000000,

Das ist noch einfach. Hier haben wir GEO Daten im Grunde brauchen wir davon nichts aber um „sicher“ zu gehen liefern wir immer schön unsere Geo Position mit. Wir wollen ja nicht auffallen.

So dieser Beitrag ist erst mal lang genug.
Teil 2 wird folgen!

Schnittstellen Programmierung

Nach dem es sich die letzten Monate hauptsächlich um Google Map und die Integration des ckEditor im Vordergrund drehte, nun wieder etwas aus dem Hintergrund. Native Schnittstellen Programmierung. Ein extrem Interessantes aber auch Nerven strapazierendes Thema.

Vorerst liest man sich durch die Dokumentationen und macht sich  lein Bild davon, was der Programmierer auf der anderen Seite, sich dabei gedacht hat. Nachdem man die Logik soweit verinnerlicht hat kommt die Technische Dokumentation zum Einsatz. Hier findet man soweit alle Funktionen, Parameter und deren Anforderungen.

Nachdem ich mich durch die Dokumentation gearbeitet habe, Beginne ich Objekte entsprechend der Spezifikation der verschiedenen Aufrufe zu erstellen. Bei WSDL Schnittstellen kann man diesen teil automatisch erstellen lassen da wir uns die Spezifikationen als XML einlesen können.

Alle Objekte bekommen als Eltern Klasse einen Objekt parser der die Objekte in XML oder Json zurück gibt.

Damit wären 80 Prozent der jeweiligen Schnittstelle bereits fertig.

Jetzt noch die Objekte mit den Daten befüllen, Objekte zum Output parsen und zur Schnittstelle schicken.

Der C# HTTPListener

Hallo Zusammen,

die letzten Tage war ich damit beschäftigt einen kleinen Webserver aufzusetzen der Aufrufe verarbeitet und ein XML Dokument zurück sendet.
Ziel des ganzen war der Zugriff auf Transponder über eine Web – Applikation.
Ich habe mir einige Beispiel angesehen und mir auf msdn die entsprechenden Dokumentationen dazu angeschaut. http://msdn.microsoft.com/de-de/library/system.net.httplistener.aspx
Um der Googlenden Bevölkerung nun das finden nach Lösungen etwas zu vereinfachen werde ich hier nun meine Erkenntnisse verfassen und diese auch noch einmal für mich zu vertiefen.
Die .NET Klassenbibliothek verfügt über die Klasse HTTPListener im Namespace System.Net .
Diese kann Synchron und Asynchron „lauschen“ und auf Zugriffe reagieren. Sehr von Vorteil ist es zudem das sich das Objekt beim asynchronen lauschen, um die Kinder Threads kümmert.
Nun zur eigentlichen Arbeit.

HttpListener Listener;Listener =new HttpListener();

Mit diesem Aufruf erstellen wir uns das Listener Objekt.
Diesem teilen wir nun mit auf was er lauschen soll:

Listener.Prefixes.Add(„http://+:9090/“);

Das Prefix ist die die Adresse auf die der Listener reagieren soll. Der Prefix http://+:9090/ bedeutet das der Listener auf alles reagieren soll was über Port 9090 kommt. Wichtig ist das der Prefix immer mit / endet. Ein weitere Möglicher Prefix wäre zum Beispiel: http://www.deineDomein.com:8080/Daten/
Damit hätten wir schon mal den Listener der nun alles auf Port 9090 verarbeitet. Jetzt muss dieser nur noch gestartet werden.

Listener.Start();

Nun fehlt noch die Das abfangen der Anfragen und dessen Verarbeitung, daher wird nun der Aufruf benötigt um die Anfragen auszulesen.
Asynchron:
Listener.BeginGetContext(new AsyncCallback(ListenerCallback), Listener);
Der Methode BeginGetContext wird zum einen ein CallBack mitgegeben und zum anderen das Listener Objekt. In diesem Beispiel soll der Listener bei Eingang einer Anfrage die Methode meiner Webserver Klasse aufrufen: ListenerCallback diese ist Teil der Klasse die den Listener verarbeitet und so im gleichen Namespace.

<code>

private void ListenerCallback(IAsyncResult Result) {

HttpListenerContext Context;

try {

Context = Listener.EndGetContext(Result);

RequestInput = Context.Request.ToString();

this.ProcessRequest(Context);

} catch (HttpListenerException eR) {

System.Diagnostics.Debug.WriteLine(eR.ToString());

} try {

Listener.BeginGetContext(new AsyncCallback(ListenerCallback), Listener);

} catch (InvalidOperationException eR) {

System.Diagnostics.Debug.WriteLine(eR.ToString());

}

}

</code>

Wie wir hier sehen ruft ListenerCallback eine weitere interne KlassenMethode auf. this.ProcessRequest()
In dieser Methode wird die Antwort des Aufrufs erzeugt und zurück gesendet.
Da wir der Methode den Context des HTTPListeners übergeben haben greifen wir nun auch auf diesen zu um unsere Antwort zu versenden.

HttpListenerRequest Request = context.Request;

context.Response.OutputStream.Write(byteArr, 0, byteArr.Length);

context.Response.Close();

Und schon bekommt der aufrufende Client die Antwort des ByteArrays geliefert. Über header Informationen brauchen wir uns nicht sorgen da dies bereits vom HTTPListener übernommen wird.

Gestoppt werden kann der Listener über den unten aufgeführten Befehl:

Listener.Stop();

Solang der HTTPListener läuft wird er alle Anfragen brav beantworten.

Das war es dann auch schon. Ich wünsch Euch viel Spaß beim Ausprobieren.