Wenn schon kein ganzer Jahresrückblick kommt, dann doch wenigstens die Amazon-Einkaufsstatistik. Man sollte sich ja wenigstens ein paar Blog-Traditionen erhalten. Hier also der aktuelle Graph:
2013 war also allem Anschein nach nur eine kurze Delle. Ich hoffe, Amazon.de ist froh, dass ich mich als Kunde erholt habe!
Hier noch die Top 5 der Produkte, die ich erwarb:
Canon EOS 6D + EF 16-35mm/2.8L - Nach acht Jahren mit der 400D konnte ich mich endlich dazu überreden nochmal einen größeren Batzen Geld in die Hand zu nehmen und mich damit für die nächsten 8-10 Jahre kameratechnisch abzusichern. Bisher bin ich sehr zufrieden und sie erfüllt, glaube ich, alle Anforderungen, die ich als ambitionierter HobbyDSLR-Besitzer stelle. Natürlich hab ich bisher immer vergessen, die GPS-Funktion überhaupt zu aktivieren.
Makita Akku-Schlagbohrschrauber 18V, BHP453RYJ - Der Akku von meinem alten Schrauber hatte absolut keine Kraft mehr, also musste ein neuer her. Dieser hier haut ordentlich rein und ich hoffe, dass er mich einige Jahre begleiten wird.
Staedtler 308 SB6P Pigment Liner - Seit ein paar Monaten mache ich wieder mehr Notizen bei der Arbeit und diese Stifte sind sehr gut dafür geeignet.
WD My Passport Ultra externe Festplatte 2TB (2,5 Zoll, USB 3.0) - Ganz frisch noch vor Weihnachten gekauft, weil ich eine neue TimeMachine-Backupplatte brauchte. Zwei Terabyte, USB 3.0, 2.5", d.h. kein Netzteil und nur ein kleines Kabel. Ich war total überwältigt, dass wir mittlerweile so weit sind.
Dieser Blogpost erzählt die Geschichte, wie ich mir eine per iPhone-App bedienbare Bluetooth-Lichterkette bastelte. Ich war mir im Vorfeld nicht ganz sicher, ob ich das als knuspermagierTV Classic HD-Video oder in Form eines 12-teiligen Softwareentwicklungstutorials machen soll — entschied mich jetzt aber einfach für die Form “Geschichtenerzählblogpost”, weil ich es sonst wahrscheinlich nie machen würde.
Vor ein paar Wochen, so zum Beginn der Weihnachtszeit, fragte ich mich mal wieder, warum es eigentlich keine Lichterketten gibt, die man irgendwie per Bluetooth cool programmieren kann.
Kurz darauf viel mir dann ein, dass ich ja genau vor einem Jahr in ein Kickstarter-Ding investierte… Espruino. Ein Microcontroller, der mit Javascript programmierbar ist.
Damals klickte ich das einfach aus Interesse an und entschied mich sogar für das 70 Pfund-Paket, das neben der Hauptplatine einigen Kram, wie zum Beispiel einen WS2811 LED-Strip enthielt. Das lief alles gut und wurde auch Anfang des Jahres geliefert — wie das so ist mit Spielzeug, lag es dann aber erstmal rum, weil ich keine Idee hatte, was ich damit nun machen sollte.
Doch jetzt! Ich kombinierte in meinem Kopf. Microcontroller… check! Individuell adressierbare LEDs… check! Fehlt nur noch Bluetooth — nach etwas Recherche fand ich den passenden Chip, der per Bluetooth 4.0 LE auch mit dem iPhone kommunizieren kann und bestellte ihn direkt 2x bei irgendeinem Billoshop in Hong Kong.
Weil ich das ganze noch vor Weihnachten fertig haben wollte gab ich noch Unmengen für einen 3-5 Tage Expressversand aus, wartete 3-5 Tage und holte eines Abends den Lötkolben aus seinem Versteck. Meine Lötskills sind nicht wirklich ausgebildet, aber irgendwie schaffte ich alles korrekt zu verbinden und es funktionierte!
Hardware fertig, nun fehlte noch die Software. Durch geschicktes googeln und kopierensoftwareentwickeln schaffte ich es in kurzer Zeit eine App zu bauen, die sich per CoreBluetooth verbinden und Befehle senden konnte. Etwas Javascript-Gemurkse auf der anderen Seite sorgte dann auch dafür, dass die entsprechenden LEDs die richtige Farbe zeigten.
Dann war erstmal kurz Ruhe. Meine interne “Projekt beenden”-Hürde nahm wieder Überhand. Immerhin hatte ich bewiesen, dass es möglich ist, ich hatte ja sogar GELÖTET. Handwerkliche Arbeit ist ja immer schonmal ziemlich zufriedenstellend.
Am Ende sind die 25 LEDs, die ich habe eh viel zu wenig und eigentlich will man die Lichter am Baum auch gar nicht ständig verändern und das ganze “ordentlich” zu machen würde jetzt auch soviel Zeit kosten und eigentlich will ich auch lieber Factorio spielen.
Am Ende ließ es mir dann aber doch keine Ruhe und ich wollte das ganze Konstrukt doch irgendwie in eine “Form” bringen, die ich hier bloggen, oder nächstes Jahr an den Baum hängen kann (nachdem ich nochmal ein paar LEDs dazu gekauft habe). Also habe ich gestern nochmal ein paar Stunden investiert und sowohl die App, als auch den Espruino-Code etwas hübscher und benutzbarer gemacht.
Man kann nun, sobald man sich mit der Lichterkette verbunden hat, jede LED einzeln einfärben. Oder halt alle gleichzeitig! Außerdem sind insgesamt drei hochspannende Animationsmuster eingebaut, durch die man durchschalten kann! (Die ich alle aus dem Espruino-LED-Tutorial kopiert habe)
Damit gebe ich mich jetzt erstmal zufrieden, archiviere das Projekt im Kopf und freue mich, wieder was neues gelernt zu haben. CoreBluetooth, Löten, (wahrscheinlich total bescheuerte) Binär-Protokolle erfinden, Espruino programmieren.
Damit man sich das ganze besser vorstellen kann, hier noch ein unscharfes Video:
Für den unwarscheinlichen Fall, dass das jemand genau nachbauen will habe ich es mal in ein Github-Repository verfrachtet und dort auch kurz beschrieben, welche Teile und Tutorials man so braucht.
Nun noch ein inspirierender Abschluss-Satz:
Bestellt euch auch mal Espruino, Arduino oder vergleichbares und macht irgendein Quatschprojekt. Es macht ne Menge Spaß und ist mal was anderes!
Anhang 1 - Dinge, die ich noch einbauen könnte:
Die Lichterkette könnte ihren aktuellen Status speichern, damit sie korrekt weitermacht, nachdem der Strom weg war. Das sollte nicht so kompliziert sein.
Ich habe es nicht hinbekommen, einen vernünftigen Rückkanal zur Kommunikation aufzubauen. Die Lichterkette kann der App beim Verbinden also nicht sagen, welche Farben die LEDs aktuell haben. Das wäre natürlich cool.
Die App könnte eine Möglichkeit bieten irgendwie so Animationsmuster zu definieren, die dann übertragen werden können. Vielleicht einfach ein Textfeld für Javascript, der auf dem Espruino geevalt wird. Juchu, Scriptsprachen.
Bei einem Projekt letztens fiel mir mal wieder auf, dass ich immer noch keine vernünftige Lösung kenne, um Localizale.strings-Files aus dem iOS-Umfeld gemeinsam mit dem Kunden auf dem aktuellsten Stand zu halten.
Bisher regelte ich das immer über ein Google Spreadsheet, welches ich über den CSV-Export-Umweg in eine .strings-File umwandelte, aber das ist umständlich.
Daher setzte ich mich mal kurz hin und baute syncstrings, ein kleines NodeJS-Tool, welches .strings-Datei und Google Spreadsheet synchronisiert, alles nur mit einem Terminal-Befehl!
Es ist 2003, oder 2004. Ich komme aus der Schule, gehe an meinen Rechner und starte Diablo 2. Zweihundert Mephisto- und Cow-Runs später ist es auch schon wieder Nacht und ich gehe wieder schlafen, hoffe, dass die Schule nicht so lange dauert und freue mich am nächsten Tag darauf, weiter zu leveln und Items zu finden.
Natürlich war nicht jeder Tag so, aber über eine relativ lange Zeit, mindestens zwei Jahre, spielte ich sehr regelmäßig und mit großem Spaß Diablo 2. Seit dem hat es bei mir kein Spiel mehr geschafft, mich so zu fesseln.
Natürlich spielte ich auch zwischendurch etwas, aber hauptsächlich kurzen Kram, wie die 200 Call of Duty-Teile. Die längsten Zeitspannen waren wahrscheinlich Skyrim (70 Stunden, Main-Quest nicht durchgespielt) und Battlefield 3 (40 Stunden Xbox, 30 Stunden PC, dazu 4 Stunden BF4).
Kein Spiel hat es mehr geschafft mich so richtig zu fesseln und das finde ich… schade. Ich weiß gar nicht warum — statt zu spielen mache ich jetzt andere Sachen, die vielleicht sinnvoller sind, aber irgendwie vermisse ich die Diablo 2-Zeit.
Vor ein paar Tagen kaufte ich Factorio und fing an es einige Stunden zu spielen. Es macht mir echt Spaß da rumzubasteln und ich erwische mich dabei, wie ich mich tagsüber drauf freue, es Abends noch ein bisschen spielen zu können und denke darüber nach, wie ich meine Automationsabläufe da verbessern kann, oder was ich als nächstes ausprobieren will. Das hat schon ein paar Züge von der “guten alten Zeit”.
Gleichzeitig ist da aber auch eine Stimme in mir, die sagt, dass das es nur ein Spiel ist, das alles egal ist und ich nicht meine Denk- und Lebenszeit darauf verschwenden sollte.
Warum musste ich gerade in diesem Punkt erwachsen werden.
Weil ich iOS-Entwickler bin, muss ich natürlich jedes Jahr ein neues Gerät kaufen, auch wenn das Vorjahresmodell noch wunderbar funktioniert. So auch dieses mal. Diesmal stellte ich mich nicht vor den Apple Store, sondern bestellte vor -- und bekam es dann auch schon kurz vor 18 Uhr, so ziemlich nach jedem anderen. Dabei wurde es von DHL Express ausgeliefert!
Nicht mal vierundzwanzig Stunden später, habe ich es dann erst mal herunter geworfen. Im Gegensatz zu allen anderen iPhones, die ich bisher hatte, hat es den Sturz nicht unbeschadet überstanden.
Zum Glück hatte der Apple Store gestern noch keine Austausch-Displays und hat mir daher netterweise das ganze Gerät für die Displaywechsel-Pauschale von 110€ getauscht. Jetzt bin ich wieder komplett frei von Kratzern und bleibe es hoffentlich auch, dank Leder-Case.
Aber zum eigentlichen Punkt dieses Posts:
Es ist doch sehr viel größer als das 5S, und immer, wenn ich das 5S wieder in die Hand nehme, finde ich es angenehmer
Es ist wunderschön glatt und fässt sich sehr schön an
Es ist ziemlich glatt und rutscht einem leicht aus der Hand
Das Ledercase gibt mehr Grip, sieht ok aus und macht das Gerät nicht total hässlich
In a recent project I built a quick tutorial screen using a UIPageViewController. After creating all needed views and constraints I stumbled upon this awkward behaviour when changing the page:
Seems like the UIPageViewController does some strange this to the top layout guide of the contained view controllers. After trying every combination of switches in Interface Builder and some heavy stackoverflowing I fixed it using this code.
(self.topLayoutConstraint refers to the constraint defining the vertical space between the top view and the top guide)
Stay tuned for the next episode of "Philipp's Never Ending Search For Awkward Autolayout Behaviours".
Eine Funktion, die in DriveBetter noch fehlte, war die Aufzeichnung, welche Autos ich schon benutzte. Man will ja wissen, ob man irgendwann die ganze Flotte durch hat!
Also habe ich das mal eben eingebaut. Spannend, was? Hinzufügen kann man Autos entweder durch einen Tap auf die Detailansicht unten, oder über das Plus in der Auto-Übersicht. Letzteres eignet sich perfekt zum Nachtragen benutzter Autos, denn die Kennzeichen stehen ja immer in den Bestätigungsmails.