Home Assistent über Docker compose aktualisieren

Home Assistent über Docker installieren ist recht einfach, wenn man sich etwas mit Docker und den zugehörigen Befehlen auskennt. Auch das Aktualisieren von Home Assistent über Docker mit Hilfe vom docker compose Befehl geht recht einfach.

Hinweis: Im folgenden Artikel habe ich beschreiben, wie man die Ladeleistung über die easee Wallbox in Verbindung mit SolarEdge Wechselrichter über Home Assistant steuern kann.

Installation von Home Assistent über Docker compose

Damit das Aktualisieren reibungslos funktioniert und die vorhandenen Daten und Erweiterungen bleiben, sollte die Installationen bzw. die docker-compose.yml Datei entsprechend erstellt werden. Weiterhin möchte ich Erweiterungen wie die easee Home Assistent Erweiterung über git installieren und aktualisieren. Dafür muss der /config Ordner aus dem Docker Image auf dem lokalen System abgelegt werden. Meine Konfiguration sieht wie folgt aus:

# cat docker-compose.yml
version: '3'
services:
  homeassistant:
    container_name: homeassistant
    image: "ghcr.io/home-assistant/home-assistant:stable"
    volumes:
      - /opt/home-assistant/config:/config
      - /etc/localtime:/etc/localtime:ro
    restart: unless-stopped
    privileged: true
    network_mode: host

Im nächsten Schritt wird mit Hilfe von docker compose pull das Image runtergerladen werden:

# docker compose pull
[+] Pulling 30/1
 ✔ homeassistant 29 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled

Danach muss das Docker Image gestartet werden:

# docker compose up -d
[+] Running 1/1
 ✔ Container homeassistant  Started

Danach sollte das installierte Home Assistent installiert und gestartet sein. Die Aktualisierung läuft faktisch identisch ab.

Aktualisiere von Home Assistent über Docker compose

Im ersten Schritt muss das aktuelle Docker Home Assistent Image runtergeladen werden. Das geht wie folgt mit dem docker compose Befehl:

# docker compose pull
[+] Pulling 30/1
 ✔ homeassistant 29 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled

Nach dem Runterladen der aktuellen Version, muss das System durch Neustarten des Docker Containers aktiviert werden:

# docker compose up -d
[+] Running 1/1
 ✔ Container homeassistant  Started

Jetzt sollte die aktuelle Version von Home Assistent laufen.

Nach dem Neustarten sollte man wenigstens kurz in die Protokolle schauen, ob dort irgendwelche Fehlermeldungen stehen, die den Betrieb oder Funktionen von Home Assistent einschränken. In meinem Fall sieht es gut aus:

# docker compose logs
homeassistant  | s6-rc: info: service s6rc-oneshot-runner: starting
homeassistant  | s6-rc: info: service s6rc-oneshot-runner successfully started
homeassistant  | s6-rc: info: service fix-attrs: starting
homeassistant  | s6-rc: info: service fix-attrs successfully started
homeassistant  | s6-rc: info: service legacy-cont-init: starting
homeassistant  | s6-rc: info: service legacy-cont-init successfully started
homeassistant  | s6-rc: info: service legacy-services: starting
homeassistant  | services-up: info: copying legacy longrun home-assistant (no readiness notification)
homeassistant  | s6-rc: info: service legacy-services successfully started
homeassistant  | 2024-01-19 11:39:22.048 WARNING (SyncWorker_0) [homeassistant.loader] We found a custom integration easee which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant
homeassistant  | 2024-01-19 11:39:35.356 WARNING (Recorder) [homeassistant.components.recorder.migration] Database is about to upgrade from schema version: 41 to: 42
homeassistant  | 2024-01-19 11:39:35.365 WARNING (Recorder) [homeassistant.components.recorder.migration] Upgrade to version 42 done

Wie aus dem Protokoll zu erkennen ist, Hat Home Assistent beim Start automatisch das Datenbankschema von Version 41 auf 42 aktualisiert:

homeassistant  | 2024-01-19 11:39:35.356 WARNING (Recorder) [homeassistant.components.recorder.migration] Database is about to upgrade from schema version: 41 to: 42
homeassistant  | 2024-01-19 11:39:35.365 WARNING (Recorder) [homeassistant.components.recorder.migration] Upgrade to version 42 done

Aktualisieren von über Git(hub) installierte Erweiterungen

Bedingt durch meine Konfiguration und die Installation der easee Home Assistent Erweiterung über Git(hub), muss auch diese ab und zu aktualisiert werden. Die Erweiterung ist in dem Ordner config/custom_components/easee abgelegt. Die Aktualisierung erfolgt über ein git pull Befehl und einem Neustart von Home Assistent:

# cd config/custom_components/easee
# git pull
Already up to date.

Jetzt fehlt nur noch ein Neustart von Home Assistent:

# docker compuse up -d

Damit sollte die Aktualisierung erledigt sein.

Fazit

Das Aktualisieren von Home Aassistent mit Hilfe von docker compose ist komfortabel und in der Regel in wenigen Minuten erledigt. Das längste dauert in meinem Fall das Herunterladen des aktuellen Docker Images von Home Assistent.

Über Home Assitent kann man auch recht einfach Sachen steuern wie z.B. eine Wallbox. In dem folgenden Artikel habe ich beschreiben, wie man die Ladeleistung über die easee Wallbox in Verbindung mit SolarEdge Wechselrichter über Home Assistant steuern kann.

Das passende Bild für Business und soziale Netzwerke

Ihr kennt bestimmt das Problem – das Bild im Sozial Media Netzwerk ist schwer veraltet oder gefällt euch bzw. euren Nutzern nicht mehr. Mich haben sogar Leute auf meine Bilder angesprochen und gebeten, Sie zu bitte zu ersetzen. Jetzt kommen aber Fragen, welche bestimmt jeder kennt:

  • Woher bekomme ich ein passendes Bild?
  • Wie soll ein Bild für das jeweilige Netzwerk aussehen?
  • Soll ich ein Bild für ein Ausweis, Bewerbung, Urlaub, … dafür verwenden?

Einige dieser Fragen sind schnell beantwortet (kein Bild von der Hochzeit oder Party Urlaub für LinkedIn). Andere Fragen benötigen eine

Verschiedene Netzwerke – verschieden Bilder

Der Punkt ist oft, dass jedes dieser Netzwerke je nach Art der Verwendung auch verschiedene Bilder benötigt z.B.:

  • WhatsApp: Bild für Freunde und Bekannte – leicht zu erkennen
  • Facebook: Muss was her machen
  • Instagram: Bin hier Influencer und benötige ein themenspezifisches Bild
  • Twitter: Meine Meinung, nicht unbedingt ein Bild, auf dem ich leicht zu erkennen bin?
  • LinkedIn: Causal oder doch im Anzug mit Firmenlogo in Hintergrund?
  • Xing: Eher mit Anzug und Kravate?

Jeder hat da eigene Vorlieben, aber allein schon der Denkanstoß, wie viele verschiedene Bilder benötigt werden, stellt einen vor ordentliche Herausforderungen. Zudem ist es je nach Netzwerk auch mehr als sinnvoll die Bilder immer wieder auszutauschen, um Aufmerksamkeit zu wecken oder der Jahreszeit, Thema oder zum Gemüt passende Bilder zu bekommen.

Vorbereitung für die Bilder

Bevor es zum Fotografen oder generell vor die Kamera geht, stehen so ein paar Themen an:

  • Haare schneiden
  • Rasieren bzw. Bart stutzen?
  • Schminken
  • Erst ins Sonnenstudio und die Bleiche im Gesicht reduzieren?
  • Welche Klamotten für welches Bild?

Will man zum Fotografen, dann stehen weitere Themen an:

  • Welcher Fotograf?
  • Termin machen
  • Sich dafür Zeit nehmen und gut vorbereiten
  • Ideen und Wünsche aufstellen
  • Die richtige Einstellung mitbringen

Wie du sehen kannst, ist das mehr als eine Menge Arbeit und vor allem erfordert es, dass man nicht nur von seinem bequemen Stuhl aufsteht und sogar das Haus verlässt? Und da kommen so Gedanken auf, wie z.B. kann ich die Bilder nicht einfach im Internet bestellen?

Genau das ist seit ein paar Monaten möglich. Stellt dir vor, du gibst einem Dienst 5 bis 10 aktuelle Bilder von dir, welche absolut nicht top sein müssen und auch aus Urlaub, Hochzeit, Selfies, etc. bestehen können. Der Dienst liefert dir über 100 verschiedene thematische Bilder für dich und deine Netzwerke, die du je nach Lust und Laune verwenden kannst.

Bild Generierung mit der Künstlichen Intelligenz (KI)

Bilder generieren mit Hilfe der Künstlichen Intelligenz (KI) ist schon länger möglich – dabei müssen die Systeme nicht mal den Standards der Künstlichen Intelligenz vollständig entsprechen. Allerdings erlauben aktuelle Systeme der künstlichen Intelligenz Bilder von Personen, (Haus-)Tieren oder Gegenständen anzulernen und daraus personalisierte Bilder zu erstellen.

Genau solche Dienste kannst du jetzt verwenden, um für wirklich kleines Geld Bilder in verschiedenen Stilen und für diverse Einsatzzwecke zu generieren:

  • Für soziale Netzwerke
  • Für Business Netzwerke
  • Gleich aussehende Bilder für Firmenausweise
  • Gleich aussehende Bilder für die Unternehmenswebseite

Den Vorstellungen und Möglichkeiten sind hier seit kurzem wenige Grenzen gesetzt. Der jeweilige Dienst muss es nur entsprechend unterstützen und diese Möglichkeiten bieten.

Mal sehen, was daraus spannendes entstehen wird …

Warum sind alternative Suchmaschinen wichtig?

Alternativen sind im Allgemeinen wichtig, weil sie Innovation, Fortschitt und Diversifikation fördern. Trotzdem hat sich Google als „die Suchmaschine“ für viele etabliert und daran sind wir ITler nicht selten für verantwortlich.

Wir richten Computer ein, machen Voreinstellungen für Kollegen, Bekannte und Verwandte und setzen somit Standards für nicht selten viele Jahre oder sogar Generationen von Nutzern. Damit haben wir es geschafft den leidgen Internet Explorer fast vollständig vom Markt zu verdrängen und damit Browser wie Google Chrome und Mozilla Firefox zu etablieren, welche Standards zusammen entwickeln, diese beachten und damit einbesseres Internet fördern.

Alternative Ansätze

Leider hat Google damit eine gigantische Marktmacht erreicht und fast alle Suchmaschinen von Markt verdrängt hat. Somit fehlt vor allem Diversifikation im Markt, welche aber durch vor allem neuere Suchmaschinen und deren alternativen Grundsätze wieder gestärkt werden kann. Diese wären vor allem:

  • Datenschutz: Einige alternative Suchmaschinen legen Wert auf den Schutz der Privatsphäre und verfolgen oder sammeln keine Nutzerdaten.
  • Ökologisch Gedanken: Einige alternative Suchmaschinen tun was für die Umwelt und pflanten z.B. Bäume oder fördern nachhaltige Projekte.
  • Regionalisierung: Spezialisierung auf verschiedene Länder, Regionen und Sprachen.
  • Relevanz: Alternative Suchmaschinen können relevantere und vor allem alternative Suchergebnisse liefern, da sie andere Algorithmen und Rankingsysteme verwenden als herkömmliche Suchmaschinen.
  • Unterstützung für kleine Unternehmen: Die Verwendung alternativer Suchmaschinen kann zur Unterstützung kleinerer, unabhängiger Unternehmen beitragen, die vor allem bei Google nicht so gut platziert sind.

Wie du sehen kannst, haben Alternativen durchaus ihre Vorteile, sprechen spezielle Zielgruppen an und bringen somit neue Ideen außerhalb der reinen Suchergebnisse mit. Die aktuellen Diskussionen um Datenschutz und ökologischere Gedanken sprechen Nutzer an, die sich Gedanken machen.

Alternative Suchmaschinen

Hier eine Liste von alternativen Suchmaschinen samt kurzer Beschreibung:

  • Bing: Sumaschine von Microsoft, welche für viele alternative Suchmaschinen den Suchindex zur Verfügung stellt. Je nach Markt ist Bing durchaus eine Konkurrenz für Google.
  • DuckDuckGo: Eine datenschutzorientierte Suchmaschine, die keine Nutzerdaten verfolgt oder weitergibt. Die Suchergebnisse von DuckDuckGo basieren zum großen Teil auf Bing.
  • Ecosia: Eine Suchmaschine, die einen Teil ihrer Gewinne für das Pflanzen von Bäumen spendet und damit einen wertvollen Beitrag für die unseren Planeten leistet. Mehr dazu hier. Die Suchergebnisse von Ecosia basieren zur Zeit auf Bing.
  • Qwant: Eine auf Datenschutz ausgerichtete Suchmaschine mit Sitz in Europa. Die Suchergebnisse von Qwant basieren zur Zeit auf Bing.
  • StartPage: Eine Suchmaschine, die anonyme Suchergebnisse von Google liefert.
  • Swisscows: Eine Suchmaschine, die Wert auf den Schutz der Privatsphäre legt und die Nutzer nicht verfolgt. Die Suchergebnisse von Swisscows basieren auf Bing.

Wenn man sich diese Suchmaschinen anschaut, dann haben viele von Ihnen großen Wert auf Privatsphäre und versuchen mit neuen Herangehensweisen, sich im Suchmaschinenmarkt zu etablieren.

Da viele von ihnen den Suchindex von Bing (Microsoft) oder Google (nur Startpage) verwenden, sind die Ergebnisse der Suche je nach Ausrichtung qualitativ sehr ähnlich. So kann man beim Ausprobieren die anderen Aspekte der Suche betrachten.

Regional ausgerichtete Suchmaschinen

Es gibt aber auch regional ausgerichtete Suchmaschinen, wie z.B.:

  • Ask: Eine Suchmaschine, die in den Vereinigten Staaten und einigen anderen Ländern sehr beliebt ist.
  • Baidu: Eine Suchmaschine, die in China sehr beliebt ist und dort einen großen Marktanteil hat.
  • Naver: Eine südkoreanische Suchmaschine, die im Land am weitesten verbreitet ist.
  • Seznam: Ist nach Seznam die Nummer eins im Tschechischsprachigen Internet.
  • Yahoo! Japan: Eine in Japan beliebte Suchmaschine, die ein Joint Venture zwischen Yahoo! und SoftBank ist.

Diese sind für den deutschsprachigen Raum weniger interessant, zeigen aber auch, dass regional orientierte Unternehmen auf dem global aggierenden Markt sich spezialisieren und damit funktionieren können.

IndexNow Technologie

Viele dieser Suchmaschinen haben eins gemeinsam. Sie nutzen den Suchindex von Bing (Microsoft) für ihre Suchergebnisse oder die vor kurzem von Microsoft präsentierte Technk IndexNow, um aktuelle Inhalte besser indizieren zu können. Einige von diesen Suchmaschinen (z.B. Seznam) pflegen auch einen eingenen Suchindex, welcher durch IndexNow besser mit aktuellen Inhalten versorgt werden kann.

Diese Technologie ermöglicht es, alternative Suchmaschinen effizient mit neuen und aktualisierten Inhalten zu versorgen, was das Ziel von vielen Blogs und Seiten ist. Vor allem erlaubt es diese Technologie, neue Suchmaschinen mit aktuellen Inhalten aufzubauen, indem man wert auf neure Inhalte legt.

Die Qual der Wahl bei Suchmaschinen

Die Qual der Wahl ist leicht, wenn man sich an Google festhält. Aber es ist auf jeden Fall einen Ausflug wert, die eine oder andere Suchmaschine auszuprobieren und dadurch vielleicht einen anderen Blick auf Privatsphäre, Suchergebnisse oder ökologische Ziele zu bekommen.

Es dauert eine Weile, bis man sich an eine neue Suchmaschine gewöhnt hat und Google ist ja nicht „aus“. Wenn die Ergebnisse nicht passen, dann schaue ich auch ab und zu bei Google nach, was es da zu dem gesuchten Suchbegriff gibt.

Ladeleistung über die easee Wallbox in Verbindung mit SolarEdge Wechselrichter über Home Assistant steuern

Wir haben uns eine easee Wallbox zugelegt, weil das E-Auto recht schnell da war und wir für die Abrechnung des verbrauchten Stroms eine Wallbox mit Zähler gebraucht haben. Erst danach kamm die Photovoltaik Anlage mit SolarEdge Wechselrichter.

Da es keine Schnittstellen zwischen den beiden Anbietern und fertige Lösungen gab, musste ich mir eine Lösung selbst bauen. Der erste Versuche über openHab (gefunden im Support Forum von easee) war leider ein längerer K(r)ampf, den ich aufgegeben habe, weil es ständig irgendwelchse Inkompatibilitäten zwischen Versionen und verwendeten Bibliotheken gab.

Danach habe ich Home Assistant gefunden. Es war von der iOS App ansprechender, es fühlte sich von der Bedienung viel besser. Die Installation über Docker Compose war einfach und schnell erledigt. Die easee Integration für Home Assistant habe ich von GitHub installiert. Danach bin ich recht gut zu einem momentan ausreichendem Ergebnis gekommen.

Die Idee

Sobald genug Strom über die PhotoVoltaik Anlage (unabhängig vom Verbrauch) rein kommt, möchte ich der Wallbox sagen, wie viel sie Strom (Ampere) auf alle 3 Leitungen gleichmäßig schalten soll. Es soll erst ab 5 KW (5000 Watt) los gehen, da das Auto erst ab 5A pro Leitung (3 * 5 * 230 = 3450 Watt) lädt und etwas Reserve für andere Verbraucher bleiben soll. Sinkt die Ladeleistung unterhalb von 5KW (weniger als 4999 Watt), dann soll er mit dem Laden aufhören (alle Leitungen auf 0 Ampere schalten).

Hierbei handelt es sich um eine vereinfachte Implementierung, welche weitere Dauerverbracher wie Wärmepumpe oder Klimaanlagen nicht beachtet.

Umsetzung

Ich verwende 90 % des von meinem Solaredge-System erzeugten Photovoltaik Stroms, um das Auto aufzuladen. Das SolarEdge-System wird über die öffentliche Cloud-API gesteuert und wird daher nur alle 15 Minuten aktualisiert (siehe https://www.home-assistant.io/integrations/solaredge). Deswegen reicht es aus, die Easee Wallbox jede Minute zu aktualisieren.

Ich lege zwei unabhängige Automatisierungen an, um jede bei Bedarf ausschalten zu können. Eine Automatisierung im aktuellen Home Assistant System (Stand August 2022) geht wie folgt:

  1. Einstellungen
  2. Automatisierungen und Szenen
  3. Automatisierung erstellen
  4. Mit einer leeren Automatisierung starten
  5. Oben, rechts in der Ecke auf die drei vertikalen Punkte gehen
  6. „Als YAML bearbeiten“ auswählen
  7. Die Automatisierung in YAML (siehe weiter unten) einfügen
  8. charger_id (ID von der easee Wallbox ersetzen)
  9. Speichern

Laden starten und Strommenge steuern

Dies ist ein einfaches Implementierung in YAML für die Ladekontrolle. Diese wird ein Mal die Minute „/1“ ausgeführt. Wenn die aktuelle Leistung sensor.solaredge_current_power über 5 KW (5000 Watt) liegt (condition), dann wird die Ladeleistung gesetzt. Dafür nehme ich die aktuelle Leistung der Photovoltaik Anlage sensor.solaredge_current_power und berechne die produzierten Ampere (Watt / (230 Volt * 3 Leitungen)). Diese Amper-Zahl multipliziere ich mit 0,9 (90%), um 10% für andere Verbraucher zu lassen. Die daraus errechnete Zahl setzte ich auf alle drei Leitungen der easee Wallbox.

alias: Solar Charge Control
description: Calculate Solar Charging
mode: single
trigger:
  - platform: time_pattern
    minutes: /1
condition:
  - condition: numeric_state
    entity_id: sensor.solaredge_current_power
    above: "5000"
action:
  - service: easee.set_charger_circuit_dynamic_limit
    data:
      charger_id: EHK9LG72
      currentP1: >-
        {{ ((states('sensor.solaredge_current_power') | float) /(230*3) * 0.9) }}
      currentP2: >-
        {{ ((states('sensor.solaredge_current_power') | float) /(230*3) * 0.9) }}
      currentP3: >-
        {{ ((states('sensor.solaredge_current_power') | float) /(230*3) * 0.9) }}

Laden stoppen, sobald nicht genug Leistung von der Photovoltaik Anlage kommt

Wenn die Photovoltaik Anlage nicht genug Leistung abgibt, um das Auto mit mindesten 3x 5 Ampere zu laden, setze ich einfach alle 3 Leitungen auf Null (0). Deshalb habe ich eine zweite Automatisierung erstellt, die ich bei Bedarf separat deaktivieren kann. Wenn die Produktion in Watt unter 5KW (4999 Watt) fällt, wird die folgende Automatisierung ausgeführt. Folgen Sie den obigen Schritten, fügen Sie diesen YAML-Code ein und passen Sie die charger_id wieder an:

alias: Solar Charge Disable at low power
description: Disable Charging on Low Solar Power
mode: single
trigger:
  - platform: time_pattern
    minutes: "/1"
condition:
  - condition: numeric_state
    entity_id: sensor.solaredge_current_power
    below: "4999"
action:
  - service: easee.set_charger_circuit_dynamic_limit
    data:
      charger_id: 123456
      currentP1: 0
      currentP2: 0
      currentP3: 0

Zusammenfassung

Hierbei handelt es sich um eine ganz einfach Lösung, welche keine weiteren Vebraucher beachtet. Da wir noch keine solchen Verbraucher haben, recht es für uns im Moment.

Sobald bisschen mehr Zeit dafür da ist, werde ich die Automatisierungen etwas ausbauen, damit sie den wirklich unabhängig von der easee Wallbox übrigen Strom nur nutzt und damit weniger Strom aus dem öffentlichen Stormnetz zieht.

Englishe Version (Kurzfassung) von diesem Beitrag auf GitHub: https://github.com/fondberg/easee_hass/issues/181#issuecomment-1224112139

Racing Capybara, Puma and Chrome for Testing

Wie schreibe ich zuverläsigere Browser Tests – nicht nur in Ruby.

Ich habe beim Frankfurt Ruby Meetup eine Präsentation zu Browser basierten Tests aund deren Unterschied zu einfacheren Unit Tests oder Integrationstests gehalten. Du kannst die Präsentation unter dem folgenden Link einsehen:

https://fa11enangel.github.io/racing-capybara-puma-chrome-for-testing/

Das wichtigste Ziel war es, den großen Unterschied heraus zu arbeiten und das nötige Verständnis aufzuzeigen, wie man Probleme mit Browser Tests erkennt und diese beseitigt bzw. Wege findet, die Probleme überhaupt zu analyisieren, wenn sie auftreten.

Die Präsentation bzw. der Talk ist nicht nur für Ruby Entwickler in Verbindung mit Capybara, etc. interessant. Es ging vor allem um die besonderheiten der Browser Tests, der daraus resultierenden Nebenläuftigkeiten (Datenbank, Webserver, Browser, Testsuite) und das dafür notwendigen Verständnis.

Ich freue mich über Kommentare und Anregungen – gerne auch über Github: https://github.com/fa11enangel/racing-capybara-puma-chrome-for-testing

HOWTO: Android 2.2 Codename Froyo auf dem Google/HTC Nexus One installieren

An dieser Stelle berichte ich kurz, wie ich Android 2.2 Codename Froyo auf meinem Nexus One installiert haben. Das ist die manuelle Installation und nicht über den Google Update Dienst. Wer noch warten möchte, der kann gerne auf die bequemere Update-Möglichkeit von Google warten.

Das aktuelle Update kannst du hier bei Google runter laden:
http://android.clients.google.com/packages/passion/signed-passion-ota-42745.dc39ca1f.zip

Die Installation (HOWTO) sieht wie folgt aus:

  1. Das Update bei Google runterladen:
    http://android.clients.google.com/packages/passion/signed-passion-ota-42745.dc39ca1f.zip
  2. Die ZIP-Datei mit dem Update auf die SD-Karte kopieren und ihr den Namen update.zip geben. Das habe ich mit dem adb-Befehl gemacht: „adb push signed-passion-ota-42745.dc39ca1f.zip /sdcard/update.zip“
  3. Das Telefon ausschalten und warten, bis es ganz aus ist.
  4. Den Trackball (Kugel) festhalten und dann den Einschaltknopf drücken. Anstatt dem üblich Nexus One „X“ erscheint an dieser Stelle ein weißer Bildschirm mit 3 Androids auf Skateboards am unteren Bildschirmrand.
  5. An dieser Stelle einfach mit dem Einschaltknopf die Option Bootloader bestätigen. (Außerhalb der Touch-Welt musst du auf dem Android mit den Lautstärke-Tasten (Volume) nach oben und unten navigieren und mit dem Einschaltknopf bestätigen)
  6. Auf dem nächsten Bildschirm Recovery mit dem Lautstärke-Tasten auswählen und mit dem Einschaltknopf bestätigen. Das Telefon startet darauf neu und geht in den Recovery-Modus.
  7. Auf dem Bildschirm erscheint der Android-Robot und ein Ausrufezeichen. Um den Recovery-Modus freizuschalten, muss du an dieser Stelle den Einschaltknopf und Lautstärke lauter (nach oben) gleichzeitig drücken. Einfach so lange probieren, bis der nächste Bildschirm zu sehen ist.
  8. Mit den Lautstärke-Tasten den Punkt Apply sdcard:update.zip auswählen und mit dem Einschaltknopf bestätigen.
  9. Jetzt zurück lehnen und warten, bis das Update durchgelaufen ist. Das wird ein bisschen dauern.

So einfach war das und jetzt viel Spass mit dem neuen Android 2.2 Codename Froyo!

Apples Entscheidung über das Ausschließen von intermediate languages technisch-rational betrachtet

Als erstes weise ich ganz klar darauf hin, dass ich weder bei Apple arbeite, noch Apple mich bezahlt, ich „Apple verrückt“ bin oder mit Apple in Beziehung stehe. Ich versuche lediglich die Entscheidung von Apple bezüglich „intermediate languages“ aus der technisch-rationalen Sicht zu betrachten.  Alle meine Überlegungen könnten total falsch sein, aber ich finde die Betrachtung von der anderen Seite durchaus wichtig.  Vor allem finde ich es sehr schade, dass kaum jemand die Entscheidung von Apple aus der anderen Sicht beleuchtet, sondern sich alle sofort über die neuen Regeln beschweren.

Dieser Blogeintrag handelt von dem folgenden Absatz aus den AGBs von dem Apple SDK für Iphone OS 4.0:

3.3.1 — Applications may only use Documented APIs in the manner prescribed by Apple and must not use or call any private APIs. Applications must be originally written in Objective-C, C, C++, or JavaScript as executed by the iPhone OS WebKit engine, and only code written in C, C++, and Objective-C may compile and directly link against the Documented APIs (e.g., Applications that link to Documented APIs through an intermediary translation or compatibility layer or tool are prohibited).

Ich übersetze die wichtigsten Stellen frei ins Deutsche (keine Garantie für Richtigkeit): „Anwendungen dürfen nur  die dokumentierten APIs verwenden, wie es von Apple angedacht war und dürfen keine privaten APIs benutzen. Nur mit C, C++ und Objective-C  erstellte und gegen die dokumentierte APIs von Apple kompilierte Anwendungen sind zugelassen. Alle zwischenkompilierten Anwendungen, Kompatibilitätslayer oder Werkzeuge, die nicht direkt auf die dokumentierten APIs von Apple zugreifen, sind verboten und damit erstellte Programme werden nicht in den Apple Apps Store zugelassen“.

Diese Entscheidung hat erhebliche Auswirkungen für Entwickler, die nicht direkt für Apples Plattform gegen Apples dokumentierten APIs entwickeln. Vor allem wird diese Entscheidung auf  Adobes Flash CS5 zielen, das genau diese Möglichkeit für Flash Programme bietet. Mit der Adobe Flash CS5 soll es möglich sein, Flash-Anwendungen in Apples iPhone und iPad Anwendungen „umzuwandeln“. Ich möchte jetzt nicht auf Adobe, die Flash Technologie und den Krieg zwischen Adobe und Apple eingehen. Gründe für die Entscheidung gegen Flash habe ich bereits in einem älteren Artikel rational betrachtet: Fehlendes Multitasking und Flash sind ein missverstandenes Feature auf dem IPad!

Wir stellen uns jetzt mal vor, Apple würde die Entscheidung gegen „intermediate languages“ nicht treffen und Adobes Flash CS5 erscheint auf dem Markt. Das wird vermutlich dazu führen, dass viele Entwickler ihre in Flash erstellten Programme mit den neuen Werkzeugen von Adobe in iPhone, iPod und iPod Anwendungen „umwandeln“. Dadurch wären jetzt viele Flash Anwendungen für den Apple Apps Store verfügbar.

Jetzt stellen wir uns mal vor, das wären 3 Millionen Anwendungen, die von Flash auf Apples Plattform umgewandelt werden. Diese Zahl habe ich jetzt mal frei aus der Luft gegriffen und das ist eigentlich nicht so wichtig. Wir können davon ausgehen, dass es nicht wenige Anwendungen sein werden und vermutlich Millionen wären. Vor allem werden viele Flash Spiele auf das iPhone und das iPad auf diese Weise portiert. Das könnte von der einen Seite Apple ganz gut gefallen. Steve Jobs könnte dann sagen: „Hey Google, wir hatten gestern 180.000 Anwendungen in unserem Apps Store und Heute haben wir 3.180.000. Versucht das mal mit Android aufzuholen!“ Aber Apple hat sich anders entschieden und dafür habe ich versucht in den folgenden Absätzen rationale Gründe zu finden.

Ich möchte jetzt die 3 Millionen einfach auf andere Technologie „umgebogenen“ Anwendungen betrachten, wenn auch nicht alle Aussagen für alle Anwendungen stimmen müssen. Fast alle alten Flash-Anwendungen wurden für die Mausbedienung entwickelt. Das führt dazu, dass die Schaltflächen (Knöpfe, etc.) in den Anwendungen nicht für Fingerbedienung ausgelegt sind. Dadurch werden kleine Elemente in den Anwendungen mit dem Finger nur mühsam oder kaum bedienbar sein. Alle mit Tastatur gesteuerten Anwendungen (z.B. Spiele) müssten auf dem Bildschirm ein visuelles Steuerkreuz oder was Ähnliches erhalten, mit dem die Anwendungen gesteuert werden. Ich gehe eigentlich 100%ig davon aus, dass diese Anwendungen sehr schlecht per Finger zu bedienen sein werden und nicht den Erwartungen der Nutzer für per Finger bedienbaren Geräte entsprechen werden. Dadurch erhält zwar Apple 3 Millionen zusätzliche Anwendungen in dem Apple Apps Store, aber sie werden den Wünschen und den Konzepten dieser Geräte auf keinen Fall gerecht werden. Ich rede hier ganz klar von Anwendungen, die nicht an die Konzepte der neuen Technologie angepasst wurden und nicht von neu entwickelten Anwendungen in „intermediate languages“ für Apples Plattform. Eine Möglichkeit andere Programmiersprachen für neue Anwendungen zu nutzen sehe ich als sehr sinnvoll und benutze sie selber für die Java Virtual Machine (JVM).

Siehe auch das folgende Beispiel im Youtube Video (ein gutes Beispiel für Neukonzipierung): https://www.youtube.com/watch?v=H9NeRQjGwfs

oder Farmville direkt über Adobe Flash auf dem Nexus One (ich nenne es „Scrollmeisterschaft“): https://www.youtube.com/watch?v=z49OcPV86oA

Jetzt betrachten wir das Einreichen der 3 Millionen Anwendungen für die Anwendungsprüfer bei Apple. Auf ein Mal müssen zusätzliche Millionen von eingereichten Anwendungen untersucht werden. Das wird vermutlich dazu führen, dass Apple zusätzliche Kapazitäten für das Prüfen der Anwendungen aufbringen muss. Bei der Anzahl der Anwendungen inklusive der erneuten Einreichungen und Updates werden dafür Personal und Kosten notwendig sein. Das ganze wird notwendig sein, um die Flut meist ungeeigneter, von Flash umgewandelter Anwendungen abzuwehren. Von ungeeignet rede ich immer von Anwendungen, die nicht für die Bedienung über ein berührungsempfindlichen Bildschirm für das bestimmte Gerät entwickelt wurden.

Wer mir an dieser Stelle nicht glaubt, dass Anwendungen für spezielle Geräte angepasst oder neu entwickelt werden müssen, der möge die geschichtliche Entwicklung des Microsoft Tablet-PC anschauen. Der Hauptgrund für das Scheitern war der fehlende Wunsch die Software (in dem Fall MS Windows und MS Office) für die neuen Geräte und Bedienkonzepte anzupassen. Der Artikel bei Techcrunch beschreibt es sehr gut: Lost: If Microsofties Can’t Live Together, Microsoft May Die Alone.

Viele Entwickler schreiben ihre Anwendungen, die ehemals für das iPhone entwickelt wurden, für das Apple iPad neu. Das hat vor allem mit dem größeren Bildschirm und sich dadurch ergebenden neuen Möglichkeiten der Interaktion mit dem Benutzer zu tun. Natürlich werden auch die iPhone Programme auf dem iPad funktionieren, aber sie werden die Möglichkeiten des größeren Bildschirms, der höheren Auflösung und sich dadurch ergebenden Möglichkeiten der Interaktion nicht nutzen können. Das können wir auch aus der PC-Technologie ableiten. Wer schon mal einen Mac und einen PC benutzt hat, wird vermutlich erkennen, dass die Bedienkonzepte trotz der Tastatur, Maus und des fast gleichen Bildschirms sich deutlich zwischen Microsoft und Apple unterscheiden. Viele für den Apple Mac entwickelten Programme wurden an die Bedienkonzepte des Macs angepasst, was man leider von vielen Windows Anwendungen nicht behaupten kann. Auf der MS Windows Plattform herrscht ein buntes Durcheinander an Bedienkonzepten und Aussehen der Anwendungen. Im Endeffekt ärgern sich die Benutzer, dass sich die Software nicht „Windows gewohnt“ bedienen lässt. Dadurch sinkt der Gesamteindruck für die ganze MS Windows Plattform und das will Apple auf gar keinen Fall für ihre gelobten Geräte. Die Apps für das IPhone und IPad sind genau die Bereicherung für die Benutzer auf Basis sehr gut von Apple abgestimmter Technologie, API und Bedienung der iPods, iPhones und jetzt iPads.

Ich fasse das noch einmal zusammen. Die Überflutung des Apples Apps Store mit schlecht bedienbaren Anwendungen, wird den  Gesamteindruck Apples Plattform trüben. Der Aufwand für die Prüfung der Applikationen wird vermutlich immens steigen und die Benutzer werden sich ärgern, dass sie die Anwendungen schlecht bis gar nicht bedienen können. Das wird Einfluss auf die iPhone, iPod und iPad Plattformen und den bis jetzt sehr positiven Eindruck haben. Der negative Eindruck wird sich vermutlich auch auf die Verkaufszahlen auswirken. ENDE!

Ich gehe davon aus, dass ich durchaus viele negative Kommentare zu diesem Blogeintrag bekomme. Ich werde sie alle freischalten, so lange sie auf sachlichen Aussagen basieren. Mit diesem Artikel wollte ich einen Blick aus einer anderen Sicht auf das Thema zeigen und ich hoffe, dass es mir gelungen ist. Ich betrachte die Entscheidung von Apple, „intermediate languages“ auszuschließen, neutral und möchte mich weder Apples Entscheidung, noch den Gegnern anschließen. Meine Überlegungen könnten total falsch sein, aber sie könnten auch genau die Gründe für diese Entscheidung von Apple treffen. Nicht ohne Grund habe ich mich auf Adobe und die Flash Technologie bezogen, weil die Entscheidung von Apple aus rationalen oder politischen Gründen vermutlich auf das Erscheinen Adobes Flash CS5 und dessen Fähigkeiten Apple Apps zu erzeugen, bezog. Ich bin auch kein Gegner von Adobe, aber das Thema zielt ziemlich sicher auf Adobe ab.

Weitere konstruktive Berichte zu dem Thema:

Telefonwerbung richtig an die Verbraucherzentrale vermitteln

Vor 20 Minuten hat bei mir ein Computer mit dem Namen „Erich Frankenberg“ angerufen. Natürlich wurde keine Rufnummer übermittelt. Er hat mir ganz begeistert mitgeteilt, dass ich bei einem anonymen und kostenlosen Gewinnspiel gewonnen habe. Angeblich habe ich einen Mercedes Cabrio im Wert von über 45.000 Euro gewonnen. Auch Geldpreise wären für mich drin.

Um den Gewinn „abzustauben“ muss ich nur unter der Rufnummer „0900/5124610“ (nicht anrufen!) anrufen. Was für ein Glück, dass es sich dabei um eine sehr teure Nummer handelt und ich garantiert in einer unendlichen Warteschleife lande, wenn ich dort anrufen würde. Deswegen auf keinen Fall dort anrufen!

Damit die Herren von dieser illegalen Abzocker-Hotline auch was „gewinnen“, habe ich sie freundlicherweise bei der Verbraucherzentrale Niedersachsen gemeldet. Ich bitte jeden Leser das selbe zu tun, damit es für die Betrüger richtig teuer wird. Die Seite der Verbraucherzentrale für solche Anrufe ist hier zu finden: Beschwerdeformular: Belästigende Telefonwerbung

Eine andere Möglichkeit die lästigen Anrufer um etwas Geld zu erleichtern ist in Wikipedia auf der folgenden Seite beschrieben: Unerwünschte telefonische Werbung.

Ich empfehle jedem bei solchen Anrufen auf gar keinen Fall aufzulegen, sondern sich schnellst möglich einen Zettel und Stift zu schnappen, und alle Details zu notieren. Die Anrufer wird das richtig gut Geld kosten und die Verbraucherzentrale freut sich immer über etwas Geld. Ich bin schon lange dafür Belohnungen für solche Meldungen zu verteilen.

Dann noch schöne Ostern und natürlich auch für den Computer „Erich Frankenberg“. Er hat Heute gut Geld „verdient“.

Weitere Informationen:

Beim Aufruf von run-app unter OpenJDK 6 und OpenJDK 7 kommt es zu Problemen mit Grails

Beim Aufruf von run-app für Grails aus der SpringSource Tools Suite (STS) habe ich auf einmal die folgende Fehlermeldung erhalten:

Error executing script RunApp: the number of constructors during runtime and compile time for java.lang.ClassLoader do not match. Expected 2 but got 3

Das Problem tritt nur mit OpenJDK auf. Stellt man den JDK auf die Sun-Version, so verschwindet der Fehler wieder und Grails funktioniert wieder. Die STS war bei der letzten Installation so frei sich die openjdk-Variante als JRE unter „Preferences -> Installed JREs“ zu wählen und nicht die von Sun.

Fehler behoben und weiter geht es!

Mit aspell eigene Wörterbücher erstellen und automatisch nutzen

Wenn man über ein Fachthema schreiben will, so fehlen in Wörterbüchern der Programme die notwendigen Fachbegriffe. Diese Fachbegriffe wollte ich zentral sammeln und in allen Programmen benutzen, die auch aspell verwenden. Darunter zählt z.B. OpenOffice, Kile, Eclipse Latex Plugin Texlipse, Evolution und viele andere.

Das erstellen eigener Wörterbücher ist in der Zimbra Wiki gut beschrieben. Ich habe den Aufruf etwas angepasst, da ich die Wörterbücher bei mir im Home-Verzeichnis haben wollte und damit auf andere Systeme leicht übertragbar. Auch habe ich mir das Erstellen neuer Wörterbücher etwas vereinfacht, wie es im Folgenden erklärt wird.

Zuerst habe ich mir einen Ordner für die Wörterbücher angelegt:

mkdir ~/documents/dicitonaries

Dieser Ordner soll alle meine angepassten Wörterbücher enthalten und sehr einfach eingebunden werden können.

Um neue Wörterbücher ohne Administratorrechte hinzufügen zu können, habe ich eine multi-Datei ( eine Art include-Datei) „~/documents/dicitonaries/my-de.multi“ mit dem folgenden Inhalt angelegt:

# Dateiname: ~/documents/dicitonaries/my-de.multi
include /home/myuser/documents/dicitonaries/informatik.rws

Damit meine multi-Datei auch vom aspell ohne Parameter benutzt wird, musste ich sie im Systemordner in eine passende multi-Datei eintragen. Da mein Wörterbuch für Deutsch gedacht ist, habe ich den folgenden Eintrag in die Datei „/usr/lib/aspell/de.multi“ unter Linux und auf dem Mac (installiert mit MacPorts) „/opt/local/share/aspell/de.multi“ gemacht:

include /home/myuser/documents/dicitonaries/my-de.multi

Wenn „include“ nicht funktioniert, dann einfach „add“ probieren:

add /home/myuser/documents/dicitonaries/my-de.multi

Damit die Wörterbücher sehr einfach zu editieren sind, habe ich für jedes Wörterbuch eine Textdatei mit eigenem Namen angelegt im dictionaries-Ordner angelegt. Hier ist ein Beispiel für Informatik (Dateiname informatik.txt):

# ~/documents/dicitonaries/informatik.txt
Informationssicherheit
schützenswert

Der folgende Befehl macht aus der Textdatei ein Wörterbuch-Datei:

aspell --encoding=UTF-8 --lang=de create master ./masterarbeit.rws < masterarbeit.txt

Achtung: Es ist wichtig bei dem Aufruf einen Pfad für die rws-Datei anzugeben, sonst wird der Aufruf nicht funktionieren.

Hinweis: Wer wie ich UTF-8 benutzt, sollte das Encoding beim Aufruf setzen. Aspell verwendet nicht die Systemkodierung und deswegen kommt es zu Problemen mit Umlauten. Ohne das Encoding kommen folgende Fehler bei Verwendung von Umlauten in der Textdabei beim Aufruf der Umwandlung:

Warning: The word "schützenswert" is invalid. The character '¼' (U+BC) may not appear in the middle of a word. Skipping word.

PS: Danke an Matthias für den Tipp mit den eigenen Wörterbüchern

Hoffe damit auch jemanden geholfen zu habe und freue mich über Kommentare.