Mittwoch, 18. Januar 2012

Android Market und die unbarmherzigen Nutzer

Der Android-Market - eine tolle Sache. Anmelden, hochladen, veröffentlichen. Geht schnell, geht einfach, so muss das sein. Updates sind ebenso einfach. Zu anarchistisch wird Apple sagen.

Offensichtlich aber funktioniert die Selbstkontrolle der Androidianer recht gut. Da hatte ich es mit dem "publish early, update often" bei meiner ersten Versuchs-App etwas übertrieben und eine etwas fehlerhafte App (versehentlich) veröffentlicht - die Strafe folgt auf dem Fuß:
Ojemine... - naja, mittlerweile ist der Fehler behoben und noch ein, zwei andere Sachen verbessert, schau'n wir mal ob das Ding noch jemand will. Es handelt sich übrigens um ein kleines Programm zur Berechnung von Atemtypen (Infos zu Atemtypen gibt es hier oder hier).
Hier noch der Link zur App für Neugierige - Feedback ist stets willkommen (wenn auch diesmal vielleicht nicht gleich mit einer 1-Stern-Bewertung, die Version 0.3 weißt ja eh irgendwie auf nicht-fertig hin *g*). Viel Spaß damit.

Sonntag, 6. November 2011

CyanogenMod on Defy

Da es ja auch nach Googles Motorola-Kauf nicht absehbar ist, dass das Defy weitere Updates erhält, hab ich jetzt doch auf CyanogenMod gewechselt. Motoblur geht mir nicht wirklich ab, ansonsten läuft es deutlich flüssiger, Akkulaufzeit ist etwa gleich... - tendenziell etwas länger, aber mit herumspielen hab ich's auch schon nach einem knappen Tag geleert. War aber davor auch schon in der Größenordnung. Würde mal sagen das Update ist empfehlenswert - und wenn man sich mal über Defy2ndInit, ROMManager usw. orientiert hat, geht's auch recht flott.

In diesem Thread findet man so ziemlich alles was man braucht.

Math.Round() und seine Tücken

Ein nicht unübliches Thema: man rechnet ein wenig mit Fließkommazahlen (double, float, decimal) und da eine leichte Ungenauigkeit in deren Natur liegt, wird vor dem Vergleich gerundet. Schönerweise gibt es in C# dafür die Methode z.B. Math.Round(double). Die Überraschung folgt erst, wenn man etwa in einem Test dann etwas in der folgenden Art schreibt:

Assert.AreEqual(5, Math.Round(4.5, 0));

Also Runden auf ganze Zahlen. Nachdem das fehlgeschlagen hat, wundert sich der Entwickler natürlich. Und schlägt nach. Aha, es gibt also eine Überladung dieser Methode, bei der die Rundungsmethode festgelegt werden kann.

Assert.AreEqual(5, Math.Round(4.5), MidPointRounding.AwayFromZero);

Das funktioniert. Allerdings hätte ich erwartet, dass der Standard das kaufmännische Runden ist...

Dienstag, 21. Juni 2011

Wuala noch umsonster ;)

Wuala hat jetzt seine zuvor der Pro-Version (also ab einem gewissen zur Verfügung gestellten Speicherplatzkontingent oder aber gekaufter Speicherplatz) vorbehaltenen Funktionen (automatisches Backup, Synchronisation, Datei-Versionsverwaltung und Zeitreise) jetzt für alle verfügbar gemacht. Und ein bißchen am Design herumgespielt, schreiben sie. Zeit mal wieder einen Blick drauf zu werfen :)

Dienstag, 7. Juni 2011

Motorola Defy - Update

Endlich hat mein Defy auch sein Update erhalten - wenigstens auf Android 2.2. Erster Eindruck: läuft tatsächlich flüssiger. Und die Bildergalerie schaut auch netter aus. Die Daten sind alle noch da (bis auf ein paar Widgets), bin bis jetzt zufrieden.

Sonntag, 15. Mai 2011

Profil mit wenigen Programmen erstellen

Das Problem: man möchte ein Profil am PC, das nur einige wenige Funktionen anbietet - in diesem speziellen Fall ein Spiel. Dafür gibt es sogar ein Tool von Microsoft:

http://www.microsoft.com/austria/protect/products/family/steadystate.mspx

Mit SteadyState lässt sich für ein Profil steuern was im Startmenü angezeigt wird, Anwendungen können gezielt gesperrt/erlaubt werden und das ganze noch mit einer recht gut bedienbaren Oberfläche.

Freitag, 29. April 2011

Build-Datum im Dateinamen mit Windows Installer XML (WiX-Tools)

Für diejenigen die auch mal in die Verlegenheit kommen, mit WiX-Tools zu arbeiten (bei der Namensgebung hat wohl keiner an uns deutschsprachige gedacht... - andererseits hat das Mitsubishi bei seinem Pajero auch nicht ;) ) und dabei das Bedürfnis verspüren, ihre Dails/Weekly/Whatever-Builds mit einem Timestamp zu versehen:
<target name="AfterBuild">
<createproperty value="$([System.DateTime]::Now.ToString('yyyyMMdd_hhmm'))">
<output taskparameter="Value"
propertyname="DateString"></output>
</createproperty>

<copy skipunchangedfiles="true" sourcefiles="$(TargetPath)"
destinationfiles="\\zielserver\zieldatei\MyApp_Daily_$(DateString).msi">
</copy></target>

Das Target AfterBuild wird nach dem Build ausgeführt (oha!), zunächst wird die Systemfunktion DateTime aufgerufen mittels formatiertem ToString in eine Variable geschrieben. Diese wird schließlich verwendet um beim abschließenden Kopieren einen Datums-behafteten Dateinamen zu erstellen.

Funktioniert prinzipiell auch mit anderen Funktionen wenn sie vom verwendeten MSBuild zur Verfügung gestellt werden - einfach probieren.