8 Lern Seiten für zukünftige Web Entwickler

Nie war es einfacher. Als ich zu meiner Zeit noch angefangen habe zu programmieren, da waren vor allem Bücher gefragt: Lesen und abtippen (copy & paste ging nicht) und wenn das Programm nicht lief, dann gabs auch kein stackoverflow sondern dann hatte man entweder einen Freund, den man fragen konnte oder aber man hat gegrübelt und probiert bis es klappt.

Hier eine Liste mit ausgezeichneten Ressourcen für alle zukünftigen Zen Coders ;) – Wahrscheinlich hätte ich noch eine Seite zum Englisch lernen hinzufügen sollen, da alle Seiten in Englisch sind… in der IT Welt ist das wohl einfach eine Grundvoraussetzung.

Falls du noch weitere gute Seiten kennst, bitte unbedingt in die Kommentare posten.

codeacademy logo

Codeacademy

Sprachen

  • Web Fundamentals
  • JavaScript/jQuery
  • Python
  • Ruby
  • PHP
  • Common APIs (e.g. YouTube, Twitter, Evernote…)

Randdaten

Zusammenfassung: Verschiedene Lehrgänge, welche auf Learning by Doing setzen. Es gibt einen Editor im Browser zum Programmieren. Übungen können direkt online durchgeführt werden. Sehr hübsch und einfach aufgebaut. Das ganze ist als Community aufgesetzt, sprich jeder kann Übungen online erstellen.

 

udacity logo

Udacity

Sprachen

  • Java
  • Javascript

Randdaten

Zusammenfassung: Technisch perfekt umgesetzte Kurse: Videos mit eingebauten Übungen, welche gleich direkt im Browser gelöst und überprüft werden können. Zu jedem Kurs gibt es auch ein Forum, wo die Übung diskutiert werden.

 

it-books

It-ebooks

Sprachen

  • Diverse

Randdaten

Zusammenfassung: Der eine oder andere bevorzugt vielleicht lieber ein bisschen traditionellere Methoden zum Lernen: Ein Buch. Es gibt Bücher zu allen möglichen Themen und Sprachen: Java, JQuery, PHP, Javascript, Canvas und und und. Die Bücher können als PDF heruntergeladen werden, online gelesen werden oder gekauft werden.

 

html5 doctor logo

HTML5 Doctor

Sprachen

  • HTML

Randdaten

Zusammenfassung: HTML5 ist die Grundlage für jeden Webentwickler. HTML 4 hat 14 Jahre auf dem Buckel und wird langsam durch HTML5 abgelöst. HTML5 Doctor beschäftigt sich mit dem Markup und erklärt die neuen Javascript APIs, welche dem Webentwickler zur Verfügung stehen, wie z.B. Web SQL, Native Drag & Drop oder Application Cache. Eine Vielzahl an Artikeln geben einen guten Überblick über HTML5.

 

code school logo

Codeschool

Sprachen

  • Javascript
  • Ruby
  • iOS
  • HTML/CSS/SASS

Randdaten

Zusammenfassung: Sehr ansprechende Seite. Einige Kurse sind frei zugänglich, andere müssen gekauft werden. Lektionen mit Video und eingebauten Übungen.

Treehouse Logo

Treehouse

Sprachen

  • Javascript
  • Ruby
  • iOS

Randdaten

Zusammenfassung: Gratis gibt es nicht sehr viel Inhalt. Die Jungs haben ein wöchentliches Videopodcast, wo sie während ca 20 Minuten über technische Themen sprechen. Sehr professionell. Mit den eigentlichen Videos habe ich keine Erfahrung.

 

dive into html5

Dive into HTML5

Sprachen

  • HTML5

Randdaten

Zusammenfassung: Wer gerne liest, kann sich auf dieser Webseite vertiefen. Mehr Text findet sich auf kaum einer Seite. Es mag ein bisschen altmodisch aussehen, der Inhalt ist jedoch top aktuell und sehr verständlich.

 

caniuseit screenshot

Can I Use

Beschreibung: caniuse.com ist ein Nachschlagewerk. Probleme in der Webentwicklung ist seit der Entstehung des Webs vor allem die Browserkompatibilität. Angefangen mit dem grossen Browserkrieg zwischen Microsoft und Netscap geht es mittlerweile zwischen Chrome, Microsoft, Firefox und co weiter, wobei die alle Fronten gleich verhärtet sind.

caniuse.com ist ein riesiges interaktives Nachschlagewerk, zum herausfinden, ob ein Browser eine bestimmte Funktion/bestimmtes Feature unterstützt oder nicht. Dabei werden HTML, CSS und Javascript abgedeckt (also alle gängigen HTML5 Elemente). Sehr empfehlenswert!

Url: http://caniuse.com

Fazit

Der Weg ist lang und steinig, aber alle haben irgendwann mal begonnen… auch die Grossen und falls du noch weitere gute Seiten kennst, bitte unbedingt in die Kommentare posten.

Simple PM – Einfaches MultiPM Tool

Seit einiger Zeit bin ich als Projektmanager für Web Projekte zuständig. Als App Geek habe ich bereits diverse Programme/Apps ausprobiert und war eigentlich bisher noch nie wirklich zufrieden (wer gleich direkt zu meiner Idee will):

MS Project

Sorry, aber einmal muss man es probiert haben. Für kleine/agile Web Projekte vollkommen unbrauchbar und von der Usability her eine Katastrophe. Vielleicht mag es an der veralteten Version liegen (Office 2003, huch ist bereits 10 Jahre alt), aber glücklich werde ich damit nicht. Nach 1-2 Stunden habe ich zwar einen schönen Plan mit allen Tasks und kann sogar noch Ressourcen verbuchen, aber nützen tut es mir herzlich wenig und der administrative Aufwand übersteigt bei weitem den Nutzen. Zudem ist der Plan spätestens nach 4 Wochen veraltet und stimmt hinten und vorne nicht.

Basecamp

Hurra. Ich bin ein Basecamp Fan. Geniales Tool und mit der neuen Version noch viel genialer geworden: Erfüllt. Nur leider: In jeder grösseren Firma will das Management alle paar Wochen einen Report vorliegen haben, wo über den Fortschritt und Risken rapportiert wird. Soll ich den CEO auf Basecamp schicken? Wohl eher nicht. Daher: Für die tägliche Arbeit sofort, fürs eigentlich Tracking des Projekts leider nicht… muss es auch nicht.

Diverse Todolists (Asana, rememberthemilk oder Google Keep)

Ich kann sie schon gar nicht mehr zählen, so viele Tools habe ich hier schon ausprobiert. Aktuell bin ich gerade bei Google Keep, einfach weil es so Simple ist und daher entsprechend flexibel. Andere wiederum sind super komplex und lassen keine Wünsche offen, sei es Kommentare, Tasks anderen Leuten zuordnen, Reminder und wiederkehrende Tasks. Alles ist möglich. Aber auch das will ich nicht: Ich will nicht jeden einzelnen Task tracken und ich will auch keine Kollaboration, sondern lediglich für mich den Fortschritt über wichtige Tasks haben und dazu noch über mehrere Projekte.

Projekt Management Suits (ApolloHQ, Zoho usw.)

Eigentlich könnte ich an dieser Stelle auf meinen Kommentar zu Basecamp verweisen. Irgendwie finde ich jedoch, dass sich Basecamp von den anderen abhebt. In den meisten Fällen können diese anderen all das, was Basecamp auch kann und dazu noch viel mehr und gerade da liegt der Haken. Sie können zu viel, wodurch das Arbeiten zu umständlich wird. Um schnell und einfach einen Überblick zu haben werden diese dann unbrauchbar, um als Team zu kollaborieren denkbar -> wobei ich doch Basecamp bevorzuge.

Excel

Ja, auch das habe ich gemacht und das in diversen Formen. Ich muss sagen, dass es für meine Anforderungen wohl am Besten geeignet ist, da die Einarbeitungszeit gleich Null ist und ich mir mit ein paar Formeln und Funktionen schnell das gewünschte Sheet zusammenklicken kann. Daraus ist dann auch die Idee entstanden, daraus eine Web App zu machen.

Simple PM

Mal die Screenshots hiere

Idee ist die folgende. Es gibt eine Overview, dort werden alle Projekte und ihre Milestone geliestet. Zusätzlich dazu den Projektfortschritt in %.

Dann gibt es die Projektdetailansicht. Hier werden die Milestone aufgelistet und zu jedem Milestone können Tasks hinzugefügt werden. Ein Task hat zusätzlich noch einen Prozentwert über den aktuellen Status (dieser wird manuell gesetzt) und er kann mit einer Farbe markiert werden (grün, gelb, rot). Der Milestone erhält zusätzlich einen Durchschnittswert über den aktuellen Fortschritt, sowie einen Soll Fortschritt, falls der Projektfortschritt linea verläuft (dies entspricht sicher nicht der Realität, aber gibt einen Anhaltspunkt).

Zusätzlich gibt es noch ein Feld, um Risiken und Issues zu notieren.

Wichtig: Editieren muss einfach und schnell funktionieren, analog zu Excel, will heissen keine umständlichen Buttons zu klicken, sondern lediglich anklicken und schon editierts.

Dein Feedback

Habe ich etwa eine App verpasst? Gibt es bereits genau das? Habe ich etwas wichtiges ausgelassen? Irgend eine Denklücke? Irgend etwas, was ich nicht vergessen darf? Danke für dein Feedback.

 

 

Anfängerwissen für Node.js

Da die ganze Node Welt noch sehr neu ist, hier eine kleine Sammlung, damit ich es nicht jedes Mal neu Googlen muss. Diese Liste wird wahrscheinlich stetig wachsen. Es lohnt sicher also sicher, hier immer mal wieder vorbeizuschauen.

Nützliche Module

NVM: Versions Manager für Node. Erlaubt es bestimmte Versionen von Node zu installieren und zu verwenden.

Smog: Ein einfacher GUI client für MongoDB in Node.js geschrieben.

nodemon: Startet den Nodeserver jedes mal neu auf, sobald eine Datei geändert hat. Macht das Entwickeln ein bisschen weniger aufwendig.

Express: Ein einfaches Web Framework. Bisher habe ich noch nicht sehr viel davon gebraucht, aber für den Anfänger ist vor allem die Middleware und das Routing sehr nützlich.

Node Unit: Ein einfach Unit testing Framework.

Gute Tutorials

Blog rolling with mongoDB, Express and Node.js. Erklärt simpel und einfach wie Node.js, express und mongodb zusammenspielen, ohne dabei andere Module/Bibliotheken zu verwenden. (Scheint viel einfacher zu sein: Node.js and MongoDB – Getting started with Mongojs)

Code School: Real-time Web with Node.js. Muss ich zuerst noch durchführen, sieht aber sehr unterhaltsam und informativ aus.

Authentication, Middleware, Express. Ein sehr einfaches Beispiel, wie sich eine Authentifizierung mit Node.js und Express umsetzen lässt.

nginx und Node.js. Stackoverflow Diskussion mit ein paar nützlichen Links, wie nginx konfiguriert werden muss, damit es gut mit Node.js zustammen spielt.

Mini Wissen

call/apply

function.apply(object, arguments);
e.g. peter.agePlusOne.apply(fritz, ['Hurra']);

peter wäre in dem Fall ein Objekt mit einer Methode agePlusOne. Ich brauche die Methode agePlusOne von peter, setze jedoch den Scope von “this” auf fritz. Das stellt sicher, dass sich this nicht auf peter bezieht und dadurch sein Alter um 1 erhöht wird. Zusätzlich kann ich noch ein Array von Parametern der Methode agePlusOne übergeben.

Nützliche Funktionen

Anzahl an Funktionsparameter

var invokee1 = function(err, callback) {
// cant change this function
callback();
};
console.log(invokee1.length);
//Resultat = 2 -> length = die Anzahl an Funktionsparameter

 

Sind PHP, Java und .Net am Sterben?

 

Mal wieder ein bisschen mit Google Trends gespielt. Scheint als wären die grossen Programmiersprachen am Sterben… oder aber die Leute wissen bereits alles dazu und müssen daher nicht mehr danach googeln.

Neue Trends aktuell sind sicher Node.js (und wahrscheinlich noch andere):

Im Vergleich zu den Grossen noch verschwindend klein, aber doch mal ein guter Start. Auf jeden Fall spannend zu sehen, wie das in 2 Jahren ausschaut… der neue Überflieger oder es gibt bereits den nächsten grossen Star.

Ich habe aktuell viel mit Javascript gearbeitet und finde mich so langsam aber sicher ein bisschen damit zurecht. Noch fühlen sich die Konzepte für Objekte komisch an (wahrscheinlich bin ich hier einfach Java gebrandmarkt), aber so langsam aber sicher nähere ich mich da an. Es stellt sich jetzt die Frage PHP den Rücken zu kehren und serverseitig auch mit Javascript zu arbeiten oder weiter auf PHP zu setzen? Die Benchmarks für Node.js sind seeehr vielversprechend…

Stellt sich halt die Frage, ob das lediglich ein Trend ist, der bald wieder verschwindet, oder ob Node.js eine ernst zu nehmende Plattform wird? Dann wiederum ist gut zu wissen, dass Javascript so schnell nicht verschwinden wird bzw. vermehrt Verbreitung (Firefox OS z.B.)

Apple IOS Developer Zertifikate SOS

Das mit diesen Apple Zertifikaten kann ganz schön verwirrend sein. Es gibt super Doku, aber die ist mir viel zu lang. Daher hier die Kurzversion für mich persönlich, wenn ich das nächste Mal wieder etwas am Basteln bin.

Development Zertifikat

Muss via xCode erstellt werden. Wenn es noch nicht vorhanden ist, dann wird es automatisch erzeugt. Falls bereits ein Zertifikat vorhanden ist, dann kann dieses in den Keychain Access importiert werden:

  1. Export des Zertifikates von dem Mac aus, wo das Zertifikat ursprünglich erstellt wurde.
  2. Doppelklick und schwups ist es im eigenen Schlüsselbund drin. ACHTUNG: Passwort ist hier notwendig.

-> Wahrscheinlich das Zertifikat am Besten irgendwo speichern, damit es jederzeit auf einem anderen Mac eingesetzt werden kann.

Provisioning Profiles

Dann gibt es noch die Provisioning Profiles. Dieses ist notwendig, um die App auf einem iPhone ausserhalb des App Stores zu installieren. Pro App braucht es ein Provisioning Profile. Eine gute Anleitung ist hier.

Das ist hauptsächlich für mich, aber vielleicht nützt es ja sonst noch jemandem.

Jede HTML5 App ist Open Source

Um es gerade vorweg zu nehmen. Der Titel stimmt juristisch natürlich so nicht, technisch hingegen schon.

In der Vergangenheit, sprich vor 15 Jahren, war JavaScript eine Sprache für Hacker und Spieler. Javascript aus Sicherheitsgründen zu deaktivieren war normal. Die Business Logik einer Webseite fand ausschliesslich auf dem Server statt. In den vergangenen Jahren hat sich hier einiges geändert: Kaum eine Webseite, welche nicht irgend einen Schnipsel Javascript benötigt und mit HTML5 hat sie auch noch ein hübsches Logo bekommen. Javascript ist erwachsen und salonfähig geworden.

Flickr (http://www.flickr.com/photos/epstudios)

Krieg der Mobilen Technologien

In der Appszene herrscht eine wahre Technologie Schlacht. Da gibt es auf einen Seite die iOS vs Android Schlacht und damit die Java vs Objective-C und auf der anderen Seite die Native vs HTML5 Schlacht. Ich möchte hier weniger auf die Sprachschlacht eingehen sondern mir das HTML5 Camp ein bisschen genauer anschauen.

Was ist HTML5

Viele Laien denken immer noch, HTML5 sei eine Programmiersprache: “Wir möchten die App gerne in HTML5 geschrieben.” Falsch. HTML5 ist ein Konzept oder Framework, welches basierend auf HTML, Javascript und CSS ist. Jede dieser drei “Säulen” übernimmt einen Teil: HTML ist für die Struktur einer App zuständig, CSS für das Look and Feel und Javascript für die Logik.

In den meisten Fällen kommt auch noch irgend eine Serversprache hinzu: PHP, Ruby, Python oder Node.js für die coolen Kids (Randbemerkung: PHP und Python sind Dinosauriere und das sieht man den Seiten auch an. Die bräuchten mal einen Designer). Via REST Interface werden so Daten vom Server geholt, verarbeitet und verteilt. Diese klassische Client Server Architektur ist wohl bekannt und daher auch sehr einfach. Interessant wäre hier eine verteilte Peer-to-Peer Architektur für eine App, doch in den meisten Fällen würde das wenig Sinn machen, bzw. würde die Komplexität massiv erhöhen.

Entwicklung von HTML5

HTML5 entwickelt sich rasant weiter. Chrome ist der Treiber der Szene. Wenn irgendwelche neuen Spezifikationen hinzukommen, dann sind sie sehr oft die ersten, welche sie umsetzen.

Features, welche bereits gegeben sind, sind diverse Möglichkeiten für Offline speicher, Zugriff auf lokale Daten, GPU Unterstützung für Rendering, verschiedene Optionen, Form Element zu rendern und und und. Das Feld ist relativ unübersichtlich. Auf der Seite HTML5 Test, kannst du schauen, wie gut dein Browser HTML5 unterstützt.

Wenn die Entwicklung so weitergeht, dann sind die APIs bald schon sehr mächtig und werden von den meisten aktuellen Browsern auch unterstützt. HTML5 Apps steht dann also nichts mehr im Weg.

Was ist der Vorteil von HTML5

Ich gehe hier davon aus, dass alle Geräte die benötigten HTML5 Spezifikationen unterstützen. HTML5 hat dann den riesigen Vorteil, dass es wirklich Cross Plattform Kompatibel ist. Das heisst: Ich schreibe eine App und kann diese dann sowohl auf einem Blackberry, einem Notebook und einem iPad benützen, ohne grosse Modifikationen. Wahrscheinlich wird es noch die eine oder andere Anpassung brauchen, wie wir das seit jeher kennen.

HTML5 Apps sind also Native Browser Apps, welche halt einfach anstatt in einer VM in einem Browser laufen. Die Entwicklung geht jedoch weiter: Firefox OS Apps sind HTML5 Apps. Es ist also kein Browser notwendig, sondern die Apps laufen als solches Native im OS. Daher: Eine HTML5 App, welche ich geschrieben habe, kann ich problemlos auch gleich für Firefox OS verwenden.

via Flickr @doctorserone

Titanium, PhoneGap und Co.

Dann gibt es die Hybride: Appcelerator Titanium und PhoneGap, sind die, welche ich kenne. Ohne im Detail darauf einzugehen: Die eigentlich Logik der App wird in Javascript geschrieben (ja, es sind zwei komplett unterschiedliche Technologien, aber dazu vielleicht ein anderer Post).

Meine Vermutung hier ist, dass besonders Appcelerator Titanium eher eine mittelfristige Lösung ist. Ich kann mir gut Vorstellen, dass die in 5 Jahren nicht mehr in der aktuellen Form existieren (aber bis dahin baue ich noch darauf auf).

HTML5 = OpenSource

Nach dieser langen Einleitung und Ausschweifung komme ich endlich zum Punkt: HTML5 ist Open Source. Nicht Open Source als Lizenz sondern Open Source im buchstäblichen Sinn.

Wenn ich meine App im Browser Öffne, kann ich den Source Code und mir Schnipsel oder auch den ganzen Code herauskopieren. Mit PhoneGap und Titanium sieht das ein kleines bisschen anders aus: Zuerst muss ich an die App Datei herankommen, welche im Grunde genommen lediglich ein Zip File ist. Darin versteckt sich der ganze Code, welcher komplett offen ist. Um an die App Datei zu kommen brauche ich lediglich ein “gejailbraktes” Gerät.

Also meine streng geheime vielleicht patentierte Software kann von jedermann gelesen und kopiert werden (vergl. den riesigen Streit zwischen Google und Oracle, wegen neun Zeilen Java Code).

Möglichkeiten zum Schutz

Es gibt sogenannte Obfuscator. Diese verschleiern Javascript u.a. so dass es unlesbar wird. Beispiel dafür sind z.B. YUI Compressor. Hier ein kleines Beispiel, basierend auf jsobfuscate.com:

self._isNetworkConnectionAvailable = function() {
if (Titanium.Network.networkType === Titanium.Network.NETWORK_NONE) {
return false;
}
return true;
}

Und was der Obfuscator daraus macht sieht dann wie folgt aus:

eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('6.4=3(){5(1.0.7===1.0.8){2 a}2 9}',11,11,'Network|Titanium|return|function|_isNetworkConnectionAvailable|if|self|networkType|NETWORK_NONE|true|false'.split('|'),0,{}))

Zugegeben, das wird definitiv unleserlich, doch stellen nicht wirklich ein Problem dar. Ein Copy & Paste auf jsbeautifier und schon ist der Code wieder schön. Ich habe mal den definitiv unleserlichen Code von Gmail reinkopiert, 2 Sekunden später habe ich leserlichen Javascript Code in der Hand.

Ist das der Weisheit letzter Schluss?

Ich kann mir nicht vorstellen, dass HTML5 Applikationen vor dem grossen Durchbruch stehen, solange hier nicht eine Lösung gefunden wird. Solange das nicht der Fall ist, ist die einzige Möglichkeit, Code zu schützen, die Logik auf den Server zu verlagern, wo er vor unbefugtem Zugriff geschützt ist. Das wiederum führt dazu, dass ich ständig eine Online Verbindung brauche. Mag sein, dass mit den heutigen WiFi und G3 bzw. LTE Netzen, das nicht mehr so eine Sache ist, aber spätestens wenn ich im Ausland bin, bin ich froh, wenn ich eine App auch Offline verwenden kann.

Es müsste daher eine Möglichkeit geben, Javascript Code als Bytecode abzuspeichern, welcher dann von der entsprechenden Javascript VM interpretiert werden kann. Ich bin überhaupt kein Experte auf diesem Gebiet, aber Axel von Javascript and more, ist der Meinung, dass es kaum realistisch ist, dass sich die verschiedenen Browserhersteller auf ein einheitliches Format einigen würden:

I don’t think we could get browser vendors to agree to a common bytecode for all JavaScript virtual machines, because there is no common ground.

Javascript zuerst in Bytecode zu kompilieren, wäre nicht mehr Javascript. Die Offenheit des Internets würde darunter leiden und es passt einfach nicht zu Javascript. Es wäre nicht mehr JavaSCRIPT, sondern JavaKOMPLIZIERT. Was würde die ganze Community rund um JSFiddle machen? Denn diese Dienste wären doch eher aufwändiger, wenn zuerst noch Bytecode erstellt werden muss.

Und die Lösung ist?

Mir noch unbekannt. Vielleicht kenne ich sie einfach noch nicht und sie liegt bereits da draussen irgendwo und vielleicht gibt es sie auch einfach noch nicht. Vielleicht ist es auch gar kein Problem und ich mache lediglich eines daraus?

Vielleicht wäre eine Möglichkeit, eine App mit einem Key zu packen und zu zertifizieren. Alle Browserhersteller kennen den Key und können den somit öffnen. Wahrscheinlich könnte man sich hier etwas von der Musik und Filmindustrie abschauen, welche mit relativ wenig Erfolg solche Digital Right Management (DRM) auf ihren Tonträgern einsetzen. Und vielleicht ist auch gerade das ein Beispiel dafür, dass ein DRM sowieso nichts bringt und man es daher auch gleich lassen soll.

Wahrscheinlich ist die Lösung ein Mix aus allen Faktoren:

  • Die Hürde so hoch wie möglich setzen, z.B. durch einen Obfuscator
  • Keine kritische Daten wie z.B. Passwörter in der App speichern
  • Hochgeheime Algorithmen auf den Server verlagern.

Ich bin der Meinung, dass dies für gewisse Firmen nicht akzeptabel ist und daher gewisse Programme auch nicht als HTML5 App veröffentlicht werden, aber was noch nicht ist kann noch werden.

Die Virtuelle Gadget Konsolidierung

Ein Tweet von Jurgen hat heute meine Aufmerksamkeit auf sich gezogen.

Ein Einzelfall? Ein Geek? Letzteres sicher, erstes ich weiss nicht. Dann habe ich überlegt mit wievielen Gadgets ich aktuell auf Reisen bin. Erstaunlicherweise bin ich auch auf vier Gadgets gekommen: 2x Notebook, 1 Smartphone und ein Tablet. Ein Geek? Ja sicher. Und meine Frau, mit wie vielen Gadets reist sie? Nein nicht eins, nicht zwei und nicht keins, sondern drei. Ein Netbook, en Smartphone und ein Kindle. Ein Geek? Definitiv nicht.

Die grosse Gadget Konsolidierung

Das Smartphone hätte das sein sollen/sein wollen. Ich kann mich gut erinnern, wie begeistert ich war und was ich alles damit machen kann:

  • Surfen
  • Chatten
  • Telefonieren
  • Termine verwalten
  • Video schneiden
  • Fotos machen editieren
  • Navigieren
  • TV bedienen
  • You name it

Es geht noch weiter. Android verdrängt den klassischen klobigen Kasten. Einfach das Handy an den Monitor koppeln und schon gehts los. Die Rechenleistung nimmt ständig zu, von daher gut vorstellbar, dass in ein paar Jahren beim Normalouser das Handy die Aufgabe des Desktop PCs übernimmt

Walkman

Weiteres Beispiel der Walkman, Disc-Man, Mini-Disc, MP3 Player (iPod) Smartphone. Aus zwei Gadgets (Music und Telefon) ist eines geworden, das Smartphone. Daher müsste die Summe der Anzahl Gadgets sich um eines verringern.

Schauen wir uns weiter die Satelliten Navigation im Auto an. In den 90er Jahren kamen die ersten Geräte auf den Markt, welche die Autos im Sturm erobert haben. Nachts auf der Autobahn gibt es kaum ein Auto, welches nicht das typische LCD Licht vorne hat. Mittlerweile kämpfen die Hersteller jedoch mit massiven Problemen. Google Maps erfüllt Pflichtbewusst die Aufgabe: Die Summe reduziert sich um ein weiteres Gadget.

remote control

Dann wäre da noch der Smarttv. Vorbei sind die Zeiten wo eine einfach Fernbedienung mit on/off, Ziffern und Volumen Knöpfen reichen würde. Aber halt, eine Fernbedienung ist eigentlich auch alt: Dafür gibts ja diverse Apps. Eine Fernbedienung kommt selten allein, da ist ja eine für den TV, eine für den Blueray Player und eine für den Digital Receiver. Daher, aus 4 Gadgets (3 Fernbedienungen und 1 Telfon) wird ein Smartphone: Die Summe an Gadgets reduziert sich um 3 Geräte.

Also eigentlich müssten wir definitiv mit 2 Gadgets auskommen: Ein Portables z.B. das Smartphone zum Konsumieren und eines zum Arbeiten (z.B. Tablet oder Ultrabook)

Die Gadget Explosion

In der Vergangenheit haben wir immer danach gestrebt alles in ein Gadget zu verbannen, die eierlegende Wollmilchsau sozusagen. Und die aktuelle Entwicklung von Asus zeigt, dass es auch heute noch immer das Bestreben ist: das FonePad, eine 7 Zoll Smartphone. Ich warte schon darauf jemandem mit so einem Klotz am Ohr im Zug zu sehen. Geht die Rechnung von Asus auf, dann verschmilzt Smartphone und Tablet in ein Gadget, was ich mir ehrlich gesagt nicht vorstellen kann, was vielleicht an meiner beschränkten Imagination liegt.

Google hat hohe Bestrebungen noch im Jahr 2013 die Google Glasses auf den Markt zu bringen. Wird es Smartphone ersetzen? Vielleicht, wird es das Notebook verdrängen? Vielleicht? Aber das wird definitiv nicht in den kommenden 5 Jahren passieren. Das heisst, es kommt wieder ein Gadget mehr hinzu (ob man die Glasses auch durch den x-ray im Flughafen durchlassen muss?)

via Flickr http://www.flickr.com/photos/thomashawk/

Damit noch nicht genug. Aktuelle Bestrebungen nach Miniaturisierung schreiten rasch voran. Das Projekt Raspberry Pi ist ein Mini Computer in Kreditkartengrösse, welcher gerade mal 25$ kostet. Die Liste an selbst gebastelten Gadgets, welche irgendwelche Geeks bauen wird täglich länger. Ich bin noch auf der Suche nach der passenden Idee, um mir auch so einen zu besorgen.

Und schlussendlich ist immer noch das Thema Wearable Computing, bzw. Oral Computing. Die Computer (Gadgets) werden so klein, dass es überall Platz hat (und mit IPv6 gibt es auch für jedes Gadget eine IP). Ich kann mir gut vorstellen, einen Computer im Schuh zu haben, welcher mein Geschwindigkeit misst. Ein paar weitere sind an Lebenswichtigen Organen und messen ständig Puls, Blutdruck und Insulinspiegeln. Auf Knopfdruck erhalte ich ein aktuelles Gesundheitsbild von mir selbst. Weitere Computer sind in der Kleidung und regulieren den Wärmehaushalt dynamisch. Bei der Shopping Tour im Winter muss ich nicht mehr die Jack auf und zu machen, der Computer kümmert sich via der neuen Biofaser selbständig darum, dass stets die richtige Temperatur herrscht. Ich könnte die Liste noch beliebig verlängern.

Wir werden mit dutzenden von Gadgets umherlaufen und nur noch darüber Schmunzeln, wenn Jürgen seine 5 Gadgets an der Sicherheitskontrolle im Flughafen auspackt.

Kommunikation ist gefragt

Die grosse Herausforderung wird sein, diese Gadgets und Informationen miteinander zu verknüpfen und die Daten schlau aufzubereiten. Apple wird wahrscheinlich wieder sein eigenes Süppchen kochen, aber die anderen Hersteller werden sich hoffentlich auf Standards einigen.

Insofern ist auch das eine Konsolidierung aber halt eine Virtuelle. Es wird nicht mehr versucht ein Physikalische Gerät zu bauen, welches alles kann, sondern ein Verbund an Gadgets, welche als ein Gadget agiert und dem Endbenutzer als eine Einheit gegenübersteht. Virtuelle Konsolidierung klingt eigentlich noch ganz gut.

Das Internet ist ein Beispiel für ein solch funktionierendes Ökosystem. Ein verbunden von Millionen von Rechner, welcher jedoch dem Endbenutzer gegenüber als eine geschlossene Einheit erscheint. Das Internet als Virtuelle Konsolidierung von Computer.

Weniger ist mehr

Anstatt also zu versuchen Gadgets mit noch mehr Features vollzustopfen, sollte mehr Zeit investiert werden, wie die Gadgets sicherer untereinander kommunizieren und effizienter voneinander Gebrauch machen können, da es sowieso nicht gelingen wird, die Eierlegende Wollmilchsau zu kreieren.

Linux besteht aus zig kleinen Programmächen, welche sehr oft aneinandergekettet werden können und dann Hand in Hand arbeiten. So ähnlich stelle ich mir diese Zusammenarbeit vor. Ich bin Total happy, wenn ich eine Fernbedienung für den TV habe und ein Smartphone. Was jedoch super wäre: Das Handy klingelt, was dann der Fernbedienung ein Signal sendet, worauf diese den TV leiser stellt.

Das Beispiel mag einfach klingen, aber da es so unglaublich viele Kombinationen und Möglichkeiten gibt, ist es wohl nicht das einfachste Problem zu lösen. Aber dafür gibt es ja genügend schlaue Leute.

Wahrscheinlich müssen wir uns von der Vorstellung wie ein Computer aussieht trennen. Die Wandlung ist auch extrem, wenn wir die vergangenen 20 Jahre anschauen: Von der grauen Kiste, zum sexy weissen Kistchen, zum flachen Tablet. In Zukunft wird es einfach viele headless (sprich ohne Display) Gadgets geben, was kein Problem darstellt, da die Kommunikation unter den Gadgets reibungslos abläuft und lediglich noch ein Gadgets die Visualisierung übernimmt, während die anderen Gadgets ihre anderen Aufgaben erledigen. Diese Aufgabentrennung würde auch signifikante Kosteneinsparungen bringen, da eben gerade ein Display nur 1x vorhanden sein muss.

Hast du andere Vorstellungen? Mit wievielen Gadgets bist du unterewgs?

Die heutigen Coders sind die Zauberer von morgen

Für jeden Entwickler ein “must see”, obwohl es eigentlich für die Nicht-Coders gedacht ist. Scheint, als würde es im Silicon Valley massiv an guten Leuten mangeln und ich muss zugeben, die Büros sehen schon verlockend aus, wenn ich da so mit meinem Büro vergleiche, dann könnte ich glatt neidisch werden.

Interessant zu sehen, dass auch die ganz grossen der Branche ganz klein angefangen haben. Mein erstes Programm war ein Rechentrainer in Basic (nein nicht Visual Basic, sondern plain Basic). Dieser hat Rechnungen gefragt und dann auf einen Input gewartet. Addition, Substraktion und Multiplikation sind gut gegangen, bei der Division bin ich nicht mehr weitergekommen, da das Ergebnis in den meisten Fällen eine Dezimalzahl war… Und das sind jetzt wohl ziemlich genau 20 Jahre her! Ja, da gab es bereits Computer: Wenn ich mich recht erinnere, einen Intel 386er, mit 40 MHz und einem Turbo Knopf

Was war dein erstes Programm?

PS: Bill Gates habe ich kaum erkannt. Der ist alt geworden.

Der Appcelerator/Titanium Turbo Boost

Apps zu entwickeln funktioniert eigentlich sehr gut, hat jedoch einen Haken: Geschwindigkeit. Mit Geschwindigkeit meine ich nicht Entwicklungsgeschwindigkeit sondern, die Zeit um eine App auf dem Emulator zu starten. Mag sein, dass ich eine alte Kiste habe und dass es an Android liegt, aber auf einem MacBook Pro mit iOS Apps sieht es genau gleich: eigentlich noch viel langsamer.

Im Klartext will das heissen: Um eine Änderung im Code auf dem Emulator zu testen dauert das mind. 30 Sekunden. Nicht sehr spassig.

Appcelerator (ja ich entwickle die Apps mit Titanium) hat eine Lösung dafür: Fastdev. Es dauert noch genau 5 Sekunden, um den Code auf dem Emulator zu aktualisieren. Da macht es auch wieder viel mehr Spass. Die Anleitung scheint für eine ältere Version zu sein, aber es hat alles bestens funktioniert.

Fastdev wie folgt starten:

# Run in the background and continue printing in this terminal
$ titanium.py fastdev start &

Wichtig

 $ titanium.py fastdev restart-app
Zuerst habe ich gemeint, dass dadurch die App aktualisiert und gestartet wird. Falsch!! Hier wird lediglich die App neu gestartet. Code Änderungen werden nicht übernommen! Um Code Änderung zu übernehmen:
$ titanium.py run --platform=android --android=/home/rapsli/Programme/android-sdk-linux/
(Natürlich den android Pfad entsprechend anpassen) Und damit werden jetzt auch die Änderung im Code übernommen.

Update: Und hier noch der Link zur aktuellen Dokumentation.

Kleiner Gratistipp – Localhost

Um auf den Localhost zugreifen zu können (z.B. weil dort der Entwicklungs Rest Server läuft), ist folgende IP zu gebraucht:

10.0.2.2 Special alias to your host loopback interface (i.e., 127.0.0.1 on your development machine)

Un wen es noch mehr interessiert: Ausführliche Dokumentation.

Symfony2 – Mini Review

Es ist mal wieder Zeit für etwas neues. Mittlerweile kann ich doch schon auf ein paar Frameworks/CMS zurückblicken:

Neuestes Mitglied in der Familie ist Symfony2. Übungsprojekt ist ein kleiner Rest Server, sowie ein passender Rest Client. Hier meine bescheidene Einschätzung:

Gefällt mir sehr gut

  • Dokumentation. Die einzelnen Teile sind sehr gut Dokumentiert und vor allem auch immer mit vielen praktischen Beispielen illustriert. Dazu gibt es entweder die Hauptdokumentation auf symfony.com oder dann jeweils noch detaillierte Dokumentationen auf den Webseiten der einzelnen Komponenten.
  • Filestruktur. Obwohl es mit der Zeit ziemlich verschachtelt wird und eine beachtliche Anzahl an Files zusammenkommt, finde ich doch eine gewisse Logik dahinter.
  • Kommandozeilen Tools. Noch habe ich hier relativ wenig ausprobiert, aber mit wenigen Zeilen im Terminal lassen sich Getter und Setter erzeugen, die Datenbank entsprechend der Klasse anpassen (falls ein ORM verwendet wird), Cache leeren usw.
  • Abstraktion in hält sich in Grenzen. Das Zend Framework schien mir viel komplexer mit unzähligen Vererbungen und abstrakten Klassen. Vielleicht ist das bei Symfony lediglich der Schein, aber es scheint alles eine Stufe einfacher zu sein.
  • Developer Toolbar. Herrlich. Wichtige Informationen sind jederzeit zur Hand.
  • Composer. Anfänglich war ich doch noch ein bisschen skeptisch. Mittlerweile bin ich begeistert, wenn ich auch noch nicht vollumfänglich dahinterblicke. In a Box: Composer ist apt-get upgrade für PHP.
  • Sehr einfaches Deployment. Das liegt weniger an Symfony als vielmehr an PHP.

Gefällt mir weniger gut

  • Fehlendes Admin Backend. Das Admin Backend von Django ist eine wahre Freude. Ohne etwas zu machen, hat man ein erweiterbares funktionales Backend, um Daten zu bearbeiten. Das fehlt leider bei Django.
  • Syntax. Ist eher ein PHP “Problem”, aber mein kurzer Ausflug in die Python Welt hat mir gezeigt, dass es auch eine Welt ohne geschweifte Klammern gibt und dass dadurch der Code doch um einiges leserlicher wird.

Alles in allem bin ich sehr zufrieden mit Symfony. Es erinnert stark an Django und scheint wie Django für PHP (Logger, ORM, Security…). Leider ist es in einigen Stellen nicht ganz so elegant wie Django. Der geneigte Leser kann sich jetzt natürlich fragen: “Also, warum dann nicht Django”. Die Antwort ist ganz einfach. Infrastrukturmässig kenne ich mich viel besser in der LAMP (Linux Apache MySQL PHP) aus. Ich hatte keine Lust mich mit dem ganzen CGI geraffel, welches nötig ist um Python zu deployen herumzuschlagen. Zudem hat Symfony doch auch noch ein bisschen was gemeinsam mit Drupal ;) … kommt fast ein bisschen Nostalgie auf.

Meine Empfehlung

Mit Symfony ist man relativ schnell produktiv. Natürlich: Die Lernkurve ist überall vorhanden, aber dennoch ist es dank der guten Dokumentation machbar.