Androidgerät mittels adb löschen

Falls man mal in die Verlegenheit kommt ein Androidgerät löschen zu müssen, aber das Gerät keinen funktionierenden Bildschirm mehr besitzt, so hilft „adb“ aus dem Android SDK welches unter http://developer.android.com/sdk/index.html bezogen werden kann.

Nach dem Download wird man feststellen das „adb“ nicht mehr im „tools“ Ordner des SDKs liegt. Stattdessen erwartet uns dort eine Datei mit dem Namen „adb_has_moved.txt“. Dort wird man darüber informiert das „adb“ nun in dem Ordner „plattform tools“ zu finden ist. Um diesen Ordner zu bekommen führt man unter Linux die Applikation „android“ aus dem „tools“ Ordner aus und installiert das entsprechende Paket.

Sollte anschließend beim Start von „adb“ die Meldung:

./adb Datei oder Verzeichnis nicht gefunden

erscheinen so hilft hier ein:

sudo apt-get install ia32-libs

Nun schließt man das aktive Gerät an und gibt im Terminal folgendes ein:

./adb remount
./adb shell

In der Shell geben wir dann die entscheidenden Befehle ein:

wipe all
exit

Damit ist das Telefon von privaten Nutzdaten befreit.

Speichertyp unter Linux ermitteln

Der Mensch als solcher ist ja faul und wenn man dann doch herausfinden möchte, ob man DDR2 oder DDR3 Speicher im Rechner hat, so könnte man diesen natürlich aufschrauben und nachschauen. Da das mit Arbeit verbunden ist, kommt also die zweite Möglichkeit zum Zuge das ganze per Software zu ermitteln.

Unter Linux bieten sich hierbei die Tools „dmidecode“ oder „lshw“ an. Beide sollte man mit root Rechten ausführen, da sie sonst nicht sonderlich viel mit dem System anfangen können. Für „lshw“ könnte das dann z.B. so aussehen:

sudo lshw -short -C memory

Die Ausgabe könnte dann exemplarisch diese sein:

H/W path           Device      Class       Description
======================================================
/0/0                           memory      64KiB BIOS
/0/4/5                         memory      256KiB L1 cache
/0/4/6                         memory      1MiB L2 cache
/0/4/7                         memory      8MiB L3 cache
/0/2b                          memory      4GiB System Memory
/0/2b/0                        memory      2GiB DIMM DDR2 Synchronous
/0/2b/1                        memory      2GiB DIMM DDR2 Synchronous

Manchmal kann man allerdings anhand der ausgegebenden Beschreibung nicht erkennen um welche Art von Speicher es sich handelt, hier bleibt dann aber immer noch die Möglichkeit den Rechner zu öffnen ;)

WordPress ohne FTP Zugang aktualisieren

Wenn man unter WordPress ein Plugin aktualisieren oder auch WordPress selbst auf die neuste Version bringen möchte, so wird man aufgefordert Verbindungsinformationen für den entsprechenden FTP Server einzugeben.

Die Aufforderung Verbindungsinformationen einzugeben

Dankenswerter Weise geht es aber auch einfacher. So legt man im Verzeichnis „wp-content“ einfach einen Ordner „upgrade“ an. Diesem Ordner sowie den Ordnern „plugins“ und „themes“ gibt man anschließend per FTP Schreibrechte. Nun muss nur noch die „wp-config.php“ bearbeitet werden. In diese fügt man folgende Zeilen hinzu:

/* Ermöglicht das Update ohne FTP */
define('FS_METHOD', 'direct');

Damit wird es ermöglicht Updates ohne FTP durchzuführen.

MooTools und benutzerdefinierte Events

Bei MooTools handelt es sich um ein Framework mit welchem man sehr schön Klassen basierte Strukturen in JavaScript abbilden kann. Bei der Definition von benutzerdefinierten Events ist die Dokumentation leider etwas dünn, so das ich dort etwas probieren musste, bis ich zum richtigen Ergebnis gekommen bin.

Gegeben sei dabei ein Projekt mit einer „index.html“ Datei sowie der JavaScript Datei „explosive.js“ welche die Klasse „Explosive“ enthält. Die Klasse sieht dabei im Quelltext so aus:

var Explosive = new Class({
       Implements: [Events],

       tntequivalent: 0,

       //Constructor
       initialize: function(equivalent) {
         this.tntequivalent = equivalent;
       },

       //Methods
       detonate: function(){
         this.fireEvent('explode');
       },

       detonateWithInfo: function(){
         this.fireEvent('explode', this.tntequivalent);
       }
});

In dieser Klasse gibt es die Eigenschaft „tntequivalent“ welche die Sprengkraft unser Bombe definiert und im Konstruktor gesetzt wird. Die Funktionen „detonate“ und „detonateWithInfo“ zünden die Bombe und senden das Event „explode“ wahlweise mit der Informationen über die Sprengkraft.

Die dazu passende „index.html“ sieht dabei so aus:

<!DOCTYPE html>
<html>
  <head>
    <title>Mootools Event Test</title>
    <meta charset="utf-8" />
    <script type="text/javascript" src="mootools-core-1.4.5-full-nocompat.js"></script>
    <script type="text/javascript" src="explosive.js"></script>
  </head>
  <body>
    <script type="text/javascript">
      function onExplode(object)
      {
        if(object==null)
        {
          alert("Bomb is exploded.");
        }
        else
        {
          alert("Bomb is exploded, with " + object + " tons of TNT equivalent.");
        }
      }

      var bomb = new Explosive(100);
      bomb.addEvent('explode', onExplode);
    </script>

    <form>
      <input type="button" value="Detonate bomb" onClick="bomb.detonate();">
      <input type="button" value="Detonate bomb with info" onClick="bomb.detonateWithInfo();">
    </form>
  </body>
</html>

Hier wird im JavaScript-Bereich der Klasse eine Funktion „onExplode“ angelegt, welche das Event am Ende entgegennehmen soll. Darunter wird eine Instanz der Klasse „Explosive“ mit dem Namen „bomb“ angelegt. Dieser Instanz sagen wir das dass Event „explode“ an die Funktion „onExplode“ weitergereicht werden soll.

Nun werden noch zwei Buttons definiert, welche die auslösenden Funktionen aufrufen. Einmal wird die Funktion „onExplode“ mit einem Parameter und einmal ohne aufgerufen. In diesem Parameter steckt in diesem Fall die Sprengkraft der Bombe, so das diese mit ausgegeben werden kann. Und schon ist man mit seinem ersten Event fertig.

Weitere Informationen gibt es unter:
http://de.wikipedia.org/wiki/MooTools

Das Invertika Update im August

Heute ist es wieder soweit, der letzte Sonntag im Monat ist angebrochen und so steht das Invertika Update für den August an. Bei Invertika handelt es sich um ein freies 2D-MMORPG für Linux und Windows. Das ganze steht dabei unter der GPL.

Im Spiel würden wieder einige obligatorische Kollisionsfehler und ähnliches behoben. Effendi Residenz wurde weiter ausgebaut und einige Wege wurden verschönert. Auch Burg Cedric wurde an einigen Stellen weiter begrünt. Im Banker-Skript wurden kleinere Fehler behoben, so das dieses nun runder laufen sollte. Auch sonst wurde bei den Skripten einiges verändert und verbessert, was sich in der Anzahl der Änderungen niederschlägt.

Bei den Tilesets gab es einige Erweiterungen aus dem Liberated Pixel Cup und es werden sicherlich im nächsten Monat noch weitere folgen. Im aktuellen Update betrifft dies neue Häuser, Zäune und ähnliches. Auch neue Musik aus dem LPC wurde in diesem Zug hinzugefügt.

Beim neuen Client wurde an der Websocket Verbindung zwischen dem Client und dem Accountserver gearbeitet. Gleichzeitig wurde damit begonnen Unit Tests für den Server zu schreiben um eine stabilere Entwicklung zu ermöglichen. Der Loginvorgang zum Accountserver wurde dabei implementiert, so das als nächstes der erfolgreiche Login am Gameserver und dem Chatserver ansteht.

Der neue Server wurde um Websocketunterstützung erweitert, welche für den Webclient benötigt wird. Auch wurden viele Funktionen in der „Storage“-Abstraktion implementiert, so das Dinge wie das Anlegen von Accounts und ähnliches nun funktionieren. Auch hier wurde ein Testframework (NUnit) hinzugefügt, damit auch beim Server mit testbasierter Entwicklung gearbeitet werden kann.

Auf der Toolseite gibt es nun, für die Webapplikation welche für die Weltkarte benutzt wird, ein SQL Skript um die benötigten Tabellen anzulegen. Vom „ivktool“ gab es ein Wartungsrelease welches hauptsächlich wegen einiger Anpassungen in den zugrunde liegenden Bibliotheken nötig war. Wer jetzt neugierig geworden ist, der kann das Invertika Projekt unter http://invertika.org besuchen.