Damian Brunold

2014-11-18 14:15 Programmieren, iOS

Über itunesconnect.apple.com kann ich verfolgen, wie oft meine ZenGong App heruntergeladen und installiert wird.

Bis jetzt wurden 26 Kopien installiert. Pro Tag zwischen zwei und fünf Stück.

Das sind natürlich extrem kleine Zahlen. Schliesslich gibt es Millionen von AppStore Benutzern. Trotzdem bin ich ganz zufrieden damit. Mir ging es nicht darum die Welt zu erobern, sondern Erfahrungen mit der App-Entwicklung zu sammeln. Dieses Ziel habe ich damit sicher erreicht.

2014-11-18 14:07 Programmieren, Web

In den letzten Tagen habe ich hin und wieder ein bisschen an dieser Website gearbeitet.

Das Layout ist nun ein bisschen kompakter und hoffentlich lesbarer. Ich habe irrelevante Seiten entfernt und die Übersichtsseiten aktualisiert.

Das Blog ist nun direkt auf der Einstiegsseite. Die einzelnen Einträge sind in <div> Elemente gekapselt und der Eintragstitel ist ein Link auf die Eintragseite. Damit sind Permalinks besser umgesetzt.

Ich habe auch eine Seite angefangen, auf der meine privaten Projekte beschrieben sind. Diese Seite werde ich wohl im Lauf der Zeit sukzessive ausbauen und ergänzen.

Ich bin noch nicht fertig mit den Verbesserungen. Geplant sind weitere Tweaks am Layout. Ausserdem möchte ich das Blog Paging überdenken. Mometan gibt es eine aktuelle Seite, eine Seite mit "älteren" Einträgen und dann die Übersicht über alle Einträge. Ich würde das gerne generalisieren, sodass es dynamisch viele Blog-Seiten gibt (index.html, page2.html, ..., pagen.html) die jeweils mit rel=next verlinkt sind. So könnte man die gesamte Blogchronologie durchlesen, ohne über die Übersichtsseite gehen zu müssen.

2014-11-10 10:41 ObjC, Programmieren, Zen, iOS

Seit vorgestern ist meine erste App im Apple AppStore verfügbar: ZenGong

Es ist ein simpler Meditationstimer mit einem hübschen Gongklang nach Ablauf der Zeit.

Für mich war das eine gute Übung und ein guter Einstieg in die App-Programmierung. Ich musste alle wesentlichen Probleme einer einfachen App lösen und lernte mich mit XCode, Objective-C, der Dokumentation und dem ganzen Approval-Prozess auseinanderzusetzen.

Mir hat das Programmieren der App Spass gemacht und ich freue mich darauf, weitere Apps zu erstellen. Mittelfristig möchte ich gerne JBead auf das iPad bringen. Aber kurzfristig werde ich wohl noch weitere einfache Apps machen, beispielsweise eine Memory-App für Kinder oder so.

2014-10-28 21:40 C++, Programmieren

Mittlerweile sind die Videos der Vorträge der http://cppcon.org/ auf Youtube hochgeladen:

https://www.youtube.com/user/CppCon

Ich habe mir schon einige davon angeschaut. Es gibt viele interessante Themen.

2014-10-28 21:36 Web

Hier der Link auf einen Artikel, der beschreibt, wie man Apache konfigurieren muss, damit automatisch von HTTP auf HTTPS umgeschaltet wird:

http://blog.edwards-research.com/2010/02/force-apache2-to-redirect-from-http-to-https/

2014-10-28 21:34

Eine coole Website, die die SSL Konfiguration eines Servers abklopft und einen detaillierten Report erstellt:

https://www.ssllabs.com/ssltest/index.html

2014-10-28 21:31 Cocoa, OSX, ObjC, Programmieren

Ich habe in letzter Zeit viel über Objective C und das Cocoa Framework gelesen und bin dann auch direkt in die Programmierung eingestiegen. Als erstes, einfaches Projekt habe ich mir den alten Wunsch des ZenTimers ausgewählt. Ziel ist es da eine App zu programmieren, die nach einer bestimmten Zeit, beispielsweise 20 Minuten, einen Gong ertönen lässt. Das muss auch bei gelocktem Gerät funktionieren und es sollte ein schönes animiertes GUI enthalten sein.

Ich bin noch nicht damit fertig, habe aber die wesentlichen Sachen mittlerweile im Griff. Fehlen tun noch grafischer Feinschliff, Icons, Localization und so weiter.

Das Projekt war sehr spannend, weil ich in diesem Gebiet völlig am Anfang stehe. Ich hatte diverse triviale Probleme, die mich einige Zeit kosteten. Aber so ist es halt am Anfang, bis man sich in einer Technologie heimisch gemacht hat: immer wieder steht man an und muss im Nebel stochern bis sich dieser lichtet.

Mir gefällt die Arbeit mit Objective C und Cocoa. Und auch Xcode ist ganz angenehm.

2014-10-28 21:25 Kryptographie, Web

Ich habe mich aufgerafft und alle meine Websites vollständig mit SSL ausgerüstet. Hilfreich war dabei https://raymii.org/s/tutorials/Strong_SSL_Security_On_Apache2.html.

Zusätzlich zur recht sicheren SSL Konfiguration habe ich ein Redirect von HTTP auf HTTPS gemacht, sodass nun jeder Nutzer automatisch HTTPS bekommt.

Zu guter Letzt sind die Zertifikate nigelnagelneu und mit SHA256withRSA statt dem anfälligen SHA1 signiert.

2014-10-11 16:39 C++, Programmieren

Ich muss sagen, die C++ Referenz cppreference.com ist fantastisch. Und die ganze Site kann heruntergeladen und lokal installiert werden, für den Fall, dass man mal offline ist und etwas nachschauen muss.

2014-10-11 16:37 C++, Programmieren

Ich musste ein Dateiformat parsen, bei dem Bool-Werte mit "true" und "false" gespeichert sind. Zu meiner freudigen Überraschung hat C++ dafür einen eingebauten Mechanismus:

bool value;
out << std::boolalpha << value;
in >> std::boolalpha >> value;

Nachdem ich zehn Jahre kein C++ sondern fast nur Java und Python gemacht habe, ist C++ eine spannende Mischung aus bekannt und neuartig. Insbesondere C++11 und C++14 machen sehr viel aus und steigern die Lust auf ernsthafte Beschäftigung mit C++.

2014-04-18 16:24 Web

Ich musste feststellen, dass Google Chrome die Ausrichtung von Bildern, wie sie in den EXIF-Daten festgeschrieben ist, berücksichtigt. Andere Browser machen das nicht. Darum kann man in meinem Websystem die Bilder drehen mittels ImageMagick.

Nun kam es zur blöden Situation, dass die grossen Bilder die EXIF-Daten enthielten, die Thumbnails hingegen nicht. Also drehte Chrome die grossen Bilder, die kleinen aber nicht. Und wenn ich über das Websystem die Bilder drehte, dann waren die grossen doppelt gedreht und damit auch wieder falsch.

Die Lösung ist: entfernen aller EXIF-Daten aus den Bildern, sodass kein Browser mehr eigenmächtig Bilder rotiert.

 $ find images thumbs -name "*.jpeg" -o -name "*.jpg" -print0|xargs -0 mogrify -strip

Und nach ein paar Minuten waren alle Bilder korrigiert.

2014-04-14 10:42 Programmieren, Windows

Ich habe die letzten Tage (oder eher Nächte) damit verbracht, den neuen Notebook von Rahel zu konfigurieren. Sie brauchte eine neue Maschine, weil die alte langsam altersschwach wurde und die Festplatte prallvoll war. Weiter wurde das Windows-XP-Problem höchst dringlich. So kamen wir zum Schluss, einen neuen Notebook anzuschaffen, state of the art, mit allem was es heute so gibt und mit Windows 8.1 und Office 2013.

Die Maschine ist gut, bis auf den Bildschirm, der als entspiegelt angepriesen war, aber so was von spiegelt! Windows 8.1 ist gewöhnungsbedürftig aber kann durchaus brauchbar eingerichtet werden.

Beim Transferieren und Umstellen der Mails kam es aus bestimmten Gründen zu einem erneuten Download von einigen Tausend Mails. Die Aufgabe war nun, diese doppelten Mails zu erkennen und zu löschen.

Ich hatte schon seit mehr als einer Dekade nichts mit VBA gemacht, aber die Doku dazu ist durchaus gut. Ich musste einiges experimentieren, und konnte am Schluss eine pragmatische, funktionierende Lösung finden:

Sub mail_duplikate_eliminieren()

    Dim ns As Outlook.NameSpace
    Dim folder As Outlook.folder
    Dim items As Outlook.items
    Dim item As Object
    Dim dest As Outlook.folder
    Dim buf(1 To 300) As MailItem
    Dim first As Integer
    Dim last As Integer
    Dim cur As Integer
    Dim moved As String

    Set ns = Session.Application.GetNamespace("MAPI")
    Set folder = ns.GetDefaultFolder(olFolderInbox)
    Set dest = folder.Folders("Duplikate")
    Set items = folder.items

    items.Sort "SentOn"
 
    first = 1
    last = 300
    cur = 1

    For Each item In items
        DoEvents
        If TypeOf item Is MailItem Then
            moved = "no"
            For i = first To last
                Dim other As MailItem
                Set other = buf(i)
                If TypeName(other) <> "Nothing" Then
                    If (item.SenderEmailAddress = other.SenderEmailAddress)
And (item.Subject = other.Subject) And (item.SentOn = other.SentOn) And
(item.Body = other.Body) Then
                        item.Move dest
                        moved = "yes"
                        Exit For
                    End If
                End If
            Next i

            If moved = "no" Then
                Set buf(cur) = item
                cur = cur + 1
                If cur > last Then
                    cur = first
                End If
            End If
        End If
    Next
End Sub

Ich bitte darüber hinwegzusehen, dass ich Booleans mit Strings emuliere. Es funktioniert, auch wenn es unschön ist und in drei Sekunden geändert werden könnte.

Mehr Probleme hatte ich damit, dass die Ordnung der Mails nicht zuverlässig war. Am Bildschirm wurden die Duplikate zwar direkt bei den Originalen angezeigt, aber eine naive Prozedur, die das aktuelle MailItem mit dem eins davor vergleicht, fand nur einen kleinen Teil der Duplikate.

Darum speichere ich jetzt die letzten 300 Mails und vergleiche damit. So ist die Chance, dass das Duplikat resp. Original dabei ist, sehr gross.

Im konkreten Fall lief die Prozedur eine lange Zeit und fand dabei alle Duplikate. Operation erfolgreich.

2014-04-03 09:14 Web

Nachdem ich nun das Websystem, das diese Site erzeugt und verwaltet, einige Zeit nicht mehr angerührt habe, kommen langsam neue Wünsche auf. Vor allem möchte ich, dass die Site besser auf mobilen Geräten dargestellt werden kann. Dazu muss ich wohl das CSS anpassen.

2014-04-03 09:01 OSX

Nachdem ich nun schon einige Tag im Besitz meines neuen MacBooks bin, ist es Zeit ein kleines Zwischenfazit zu ziehen: ich bin sehr zufrieden und froh den Wechsel gemacht zu haben.

Natürlich gibt es immer wieder kleine Sachen, bei denen ich mich umgewöhnen muss. Aber alles in allem hat sich bei mir der Mac so verhalten wie sein Ruf ist: es funktioniert einfach.

Das Retina-Display ist eine Wucht und damit macht das Arbeiten gleich doppelt soviel Spass. Ist vielleicht seltsam, aber es ist wirklich so. Und bei klassischen Bildschirmen, wie zum Beispiel Windows im Büro, kommt mir alles unscharf und kantig vor.

2014-03-29 14:47 Linux, OSX

Ich verwende ein Synology NAS für Backup und Datenaustausch. Auf meine Linuxkisten habe ich mit /etc/fstab die SMB shares gemountet und alles lief rund. Wie macht man das auf Mac OS X?

Nach einigen Versuchen und Recherchen fand ich:

http://useyourloaf.com/blog/2011/01/24/using-the-mac-os-x-automounter.html

Das hat bei mir tadellos geklappt und ist noch besser, weil die shares nun nur bei Bedarf gemountet werden.

2014-03-28 15:35

Gestern wurde mein neuer Computer geliefert: ein 13-Zoll MacBook Pro mit Retina-Display. Es hat 8G RAM und 512G SSD.

Mein Ziel ist es meine Systeme auf diesen einen Notebook zu konsolidieren. Das heisst, ich werde hauptsächlich mit OS X arbeiten aber auch Linux und Windows virtuell betreiben.

Damit kann ich nicht nur die Anzahl Geräte reduzieren sondern bin auch technisch wieder einigermassen up-to-date. Vor allem aber kann ich so für alle aktuellen Plattformen entwickeln: Linux, Windows, OS X, Android und iOS.

Ich habe Freude am Gerät. Es fühlt sich sehr solide an und ist schön anzusehen. Natürlich wird es eine Weile dauern, bis ich alles eingerichtet habe und mich mit OS X angefreundet habe.

2014-03-26 14:58

Leider hat mich ein grippaler Infekt erwischt und ein paar Tage lahmgelegt. Mittlerweile geht es etwas besser, aber ich bin immer noch sehr müde. Ich hoffe, dass sich das alles bald normalisiert.

2014-03-21 10:18 Android, C++, Java, Programmieren

Mein Versuch mit openframeworks Apps zu entwickeln klappt gut für Windows und Linux. Bisher gescheitert bin ich aber bei Android. Es sind einfach zu viele neue Technologien auf einmal: openframeworks, NDK, ADT, Android Eclipse Plugin, ...

Nun habe ich angefangen, direkt mit dem ADT und dem Android Eclipse Plugin Apps für Android zu entwickeln. Das wollte ich eh schon lange. So bin ich momentan wieder eher mit Java beschäftigt. Sobald ich aber da einen guten Überblick habe, werde ich zurück zu openframeworks und C++ gehen.

Alle Einträge