Android-Emulator beschleunigen

Bei der Softwareentwicklung für Android bremst oft der behäbige Emulator. Intel bietet ein Softwarepaket, um den Android-Emulator auf Prozessoren mit Hyper-V deutlich zu beschleunigen: der Intel® Hardware Accelerated Execution Manager (HAXM).

Bei meiner App „Wellenlabor“ ist mit „HAXM“ eine flüssige Animation im Emulator zu sehen, vorher brauchte der Emulator für einen einzelnen Bildschirmaufbau eine knappe Sekunde.

Risiko, Sicherheit und menschliche Entscheidungsfindungen.

Warum ist der Mensch oft das schwächste Glied beim Absichern von IT? Der Forscher Ryan West hat einen Artikel veröffentlicht, in dem Muster in der menschlichen Entscheidungsfindung untersucht werden. Diese Muster führen oft dazu, das Menschen sich entweder unbewusst oder sogar gegen besseres Wissen für unsichere Lösungen entscheiden. Seine Erkenntnisse habe ich zu einem Vortrag verdichtet, den ich am 12.2.2014 bei der Hamburger Ruby Usergroup gehalten habe.

Der Originalartikel ist unter dem Titel „The Psychology of Security“ in den Communications of the ACM erschienen.Zunächst werden fünf psychologische Beobachtungen der menschlichen Entscheidungsfindung vorgestellt:

  1. Nutzer glauben persönlich kein Risiko zu tragen.
  2. Nutzer sind nicht dumm, sondern oft nur unmotiviert
  3. Sicherheit ist nur abstrakt. Konkretes haftet besser im Gehirn.
  4. Lernen funktioniert gut mit Rückkopplung.
  5. Risikobewusstsein ist asymmetrisch. Wenn Menschen etwas weggenommen wird, nehmen Sie oft ein höheres Risiko in Kauf, um es wieder zu bekommen.

Folgende Prinzipien können helfen, um Menschen zum sicheren Umgang mit IT-Systemen zu bewegen:

  1.  Unmittelbare Rückmeldungen und sicheres Verhalten belohnen.
  2.  Bewusstsein für Risiko erhöhen.
  3.  Riskantes Verhalten ächten
  4.  Kosten für sicheres Verhalten reduzieren.
  5.  Sozial Komponente nutzen.

 

OpenMRS

Letzten Samstag habe ich am OpenMRS-CodeJam teilgenommen. OpenMRS ist ein webbasiertes System zur Eingabe, Verwaltung und Auswertung von medizinischen Patientenakten. Das System ist Open-Source, der Kern ist in Java geschrieben und nutzt Spring und Hibernate .

Beim CodeJam haben wir zunächst eine Einführung in das System bekommen, und dann im Pair-Programming uns einzelne Aufgaben aus dem Bugtracker vorgenommen.

Vielen Dank an das Team von ThoughtWorks für die Organisation des CodeJams.

Ushahidi

Bei ACM gibt es einen Artikel über Ushahidi, ein bemerkenswertes System, das ursprünglich für Wahlbeobachtung in Kenia eingesetzt wurde.

Das System dient zum sammeln, bewerten und visualisieren und kartographieren von Reports bzw. Augenzeugenberichten. Zentrales Element ist ein Webserver. Es gibt Apps für verschiedene Geräte, zusätzlich können Informationen auch per SMS gesammelt werden.

Das System wird inzwischen in der Katastrophenhilfe eingesetzt, sowie in „Community“-Projekten (im Sinne von regionalen Gemeinschaften).

Eine Übersicht gibt es in dieser Präsentation von Heather Leson.

[link_format link=“https://wiki.ushahidi.com/“ target=“blank“ title=“Wiki des Systems“]Ushahidi-Wiki[/link_format]

Rotierende Reklametafel mit CSS-Animationen

Billboard with changing picturesIm Jahre 1998 habe ich “Meiers Billboard” vorgestellt: Eine virtuelle Anzeigentafel, die Bilder durch Rollen austauscht. Damals war es als Java-Applet realisiert. Im Jahr 2009 habe ich dann diese Anwendung mit JavaScript und jQuery nachgebaut (Zum Artikel). Inzwischen kann man mit CSS3 auch einfache Animationen in Stildefinitionen definieren. Damit können wir eine rotierende Reklametafel ganz ohne JavaScript bauen. Wie das geht, zeige ich im Folgenden.

Grundgerüst

Das Grundgerüst setzen wir wie bei der Lösung mit JavaScript auf:Funktionsweise: Eine Liste von Bildern wird unter einem Fenster hindurchgeschoben.Es gibt einen Rahmen und eine Liste von Bildern. Wir manipulieren die “top”-Koordinate der Liste, um die Bewegung zu erzeugen. Die Clipping-Eigenschaft bewirkt, dass wir nur das Innere des Rahmens sehen.

Animation

Die Definition einer CSS3-Animation besteht aus zwei Teilen.Der erste Teil ist die Definition der „Keyframes“, also der Schlüsselszenen. Im einfachsten Fall ist das eine Anfangsszene und eine Endszene. Soll sich ein Bild 200 Punkte nach oben bewegen, so definieren wir das folgendermaßen:

@keyframes slideup {    
  from {    top: 0px;  }    
  to {    top: -200px;  }
}

Als nächstes müssen wir ein Element bestimmen, auf welches die eben definierte Animation angewendet wird. Zusätzlich können wir Parameter für diese Animation bestimmen: Wann startet die Animation und wie oft sie wiederholt wird. Das Feld „animation-name“ muss dabei der Name des @keyframes-Elementes sein.

#billboard ul li{   
  animation-delay: 1s;   
  animation-duration: 3s;   
  animation-iteration-count: infinite;   
  animation-name: slideup;   
... }

Das funktioniert soweit schon ganz gut.

[button link=“/develop/jquery/billboard-cssani-step1.html“ color=“green“ target=“blank“]Demo[/button]

Mehrere Bilder

Wir wollen mehrere Bilder nacheinander zeigen. Nun ist css keine imperative Programmiersprache, wir können nicht wie mit Javascript die Animationen gesteuert zusammensetzen.Statt dessen können wir umgekehrt vorgehen, und eine große Animation kleine Zwischenschritte unterteilen. Die Zeitpunkte der Zwischenschritten werden in Prozent der Gesamtanimation angegeben:

@keyframes slideup {   
  from { top: 0px; }   
  16% { top: -200px; }   
  33% { top: -200px; }   
  50% { top: -400px; }   
  67% { top: -400px; }   
  84% { top: -600px; }   
  to { top: -600px; }
}

Damit ist die Reklametafel auch schon fast einsatzbereit: Die Animationsdauer von müssen wir gegenüber unser ursprünglichen Lösung noch erhöhen, weil ja die Dauer eines Durchganges aller Bilder anzugeben ist.Um einen sauberen Übergang zwischen letzten und ersten Bild zu erzielen, verwenden wir wieder den Trick, das erste Bild an das letzte Bild nochmal anzuhängen.

[button link=“/develop/jquery/billboard-cssani.html“ color=“green“ target=“blank“]Demo[/button]

Den Sourcecode finden Sie auch in meinen Repository auf Github.

JavaScript-Inkompatibilitäten in mobilen WebApps

Nachfolgend stelle ich Stolpersteine vor, die mir bei der Entwicklung einer mobilen, JavaScript-basierten WebApp begegnet sind. Zielplattformen waren iOS, Android und Windows Mobile. „JavaScript-Inkompatibilitäten in mobilen WebApps“ weiterlesen

Nokia Asha aus Entwicklersicht

Bei der Nokia Asha Touch Competition 2012 gehörte ich zu den Gewinnern. Ich habe Nokia Rückmeldungen zu ihren neuen Entwicklerwerkzeugen gegeben. Aus der Laudatio:

 „… for his very focused and relevant feedback around core app development. The issues raised showed a great understanding of the product and what areas most need improvement.“

Als Dank habe ich zwei neue Geräte erhalten, ein Asha 303 und ein Asha 311.

„Nokia Asha aus Entwicklersicht“ weiterlesen

Codename One – Gitterlayout spiegeln

Was ist Codename One?

Die Plattform „Codename One“ dient der betriebsystemübergreifenden Entwicklung von Apps für Smartphones. Wichtiger Bestandteil ist eine Bibliothek für Benutzerschnittstellen. Codename One ist ein Nachfolger von LWUIT, welches wiederum Konzepte der Java-Swing-Bibliothek nutzt.

Die verschiedenen Bedienelemente wie Labels, Buttons oder Eingabefelder platziert man in einem Container. Die Positionierung wird nun nicht von den Container selbst übernommen, sondern von von einem assoziierten Objekt der Klasse LayoutManager. Zum Beispiel plaziert das Gridlayout die Elemente in einer Tabelle. Dies ist oft sehr nützlich, weil sich die Platzierung automatisch verschiedenen Displaygrößen anpasst. „Codename One – Gitterlayout spiegeln“ weiterlesen

Präsentation zur Rails-Datenbankoptimierung

Bei der Ruby User Group Hamburg habe ich am 9. August 2012 einen Vortrag gehalten.

Hier sind die dazugehörigen Folien zur Optimierung von Datenbankaufrufen in Ruby-on-Rails

Den Vortrag gibt es jetzt auch bei Slideshare und Speakerdeck:

Ergänzende Links

ActiveRecord ist ein „Object Relational Mapper“ (ORM). Über das Für und Wider hat Martin Fowler einen interessanten Artikel verfasst: OrmHate