Hello World in Android

Seit kurzem befasse ich mich mit der Programmierung von „Apps“ für Android-Handys. Hier möchte ich nun meine „ersten Schritte“ festhalten:

Zuerst habe ich das Android-SDK von der offiziellen Google-Seite (http://developer.android.com/sdk/index.html) runtergeladen. Dann ist noch Eclipse (http://www.eclipse.org/downloads/) und ein JavaJDK (http://www.oracle.com/technetwork/java/javase/downloads/index.html) nötig. Nachdem alles herunter geladen ist, muss erst das JavaJDK und dann das Android-SDK installiert werden. Jetzt kann Eclipse gestartet werden.

In Eclipse erstellt ihr dann unter New > Project > Android > Android Project ein neues Adroid Projekt. Beim ersten ausführen wird sich Eclipse mit einer Fehlermeldung melden, dass R.java nicht vorhanden sei. Einfach Eclipse neu starten und dies sollte behoben sein. Bei dem nächsten Start-Versuch, wird Eclipse melden, dass keine AVD (Virtuelles Android-Gerät) vorhanden ist, allerdings kann man dann direkt eins anlegen. Nun startet in der AVD stundenlang Android und dann eure Anwendung die in etwa „Hello World, Hello World“ ausgibt.

Das war’s für’s erste, weitere Informationen findet ihr natürlich auf der offiziellen Android SDK Seite, sowie weitere Code-Snippets und Startup-Codes.

 

How-To: Automatisches MySQL Dump FTP-Backup

Hallo,
da bei vielen Anwendungen nicht nur Dateien sondern auch Datenbanken wichtig sind, ist es auch enorm wichtig diese mitzusichern. Eine einfache Möglichkeit um MySQL Datenbanken in der Shell zu sichern ist es, einen MySQL Dump anzulegen. Das geht schnell und einfach – mit diesem Tool kann man einzelne Datenbanken und ganze Server sichern und wiederherstellen.
Das per Hand zu machen wäre eine Heidenarbeit, ein Cronjob ist deshalb eine enorme Entlastung.
Gerne hat man aber mehrere Datenbanksicherungen zur Verfügung, falls ein Fehler in dem Dump vorliegt und dieser irreperabel ist. Es ist also intelligent mehrere Dumps hochzuladen und sie nach dem aktuellen Datum + evtl. dem DB-Namen. Für das Datum gibt es in der Shell ‚date‘. Mit date kann das Datum in verschiedenen Formaten ausgegeben und bspw. in einer Variable abgespeichert werden. Um das dann schließlich auf einen FTP-Server hochzuladen, benötigen wir zum Autoeinloggen einen Eintrag in der ~/.netrc. Dann können wir einfach mit wput den Dump hochladen. Auf meinem Ubuntu System ist wput standardmäßig nicht installiert, wir können es aber ganz einfach mit ’sudo apt-get install wput‘ nachinstallieren.

Um uns das ganze zu vereinfachen und nicht jedes Mal die ganzen Befehle einzugeben, erstellen wir ein einfaches Shell-Script.
Da wir per wput im Script hochladen und während des Vorgangs nichts eingeben können, immerhin ist es automatisiert, benötigen wir die erwähnte ~/.netrc. In ihre konfigurieren wir die Login Dateien.
~ steht immer für das Homeverzeichnis des angemeldeten Users. In meinem Fall ist das /home/dominic/. Heißt also die File ist in Wirklichkeit /home/dominic/.netrc
Im Normalfall ist diese leer. Hier schreiben wir den Host-, Loginnamen und das Passwort rein:

machine: ftp.domain.com
login: LOGIN
password: PASSWORD

Die richtigen Rechte sind 600. Die setzen wir mit “ chmod 600 ~/.netrc“.
Danach ist es uns möglich, ohne Password oder Login auf dem FTP Server, hier ftp.domain.com, einzuloggen.

Da wäre nur noch das eigentliche Script. Hier ist es einfach mal schnell runtergeschrieben, die Erklärung erübrigt sich dank der Kommentare.
Vorweg: Bei mysqldump ist es enorm wichtig, dass Passwort direkt und ohne Leerzeichen hinter -p zu schreiben, sonst kommt ein Syntax Error.

#!/bin/sh
#MySQL-Dump Backupscript

#Schreiben des aktuellen Datums im Format DD.MM.YYYY in eine Variable
today=$(date +%d.%m.%Y)

#Erstellen eines MySQL Dump einer einzelnen Datenbank
mysqldump –database DBNAME -u USER -pPASSWORD

#Falls nicht vorhanden wird wput installiert
apt-get install wput

#Hochladen des Dumps
wput $today ftp://ftp.domain.com

Zum Schluß kommt noch der Cronjob.
Dazu editieren wir die Crontabelle mit „crontab -e“

55 23 * * * sh /PFAD/ZUM/SCRIPT.sh

Wenn ihr alles richtig gemacht habt, dann startet jeden Tag um 23:55 Uhr ein Cronjob, der einen MySQL-Dump der von euch ausgewählten Datenbank macht.

Fehler oder Anmerkungen bitte in die Kommentare schreiben!

Nachtrag:

Wenn ihr euren Dump nicht nur nach dem aktuellen Datum benennen wollt, sondern z.B. auch nach der Datenbank, so könnt ihr den Namen einfach an „date +%d.%m.%Y“ hängen. Beispiel: „date +%d.%m.%Y-bthost.sql“ gibt 12.08.2010-bthost.sql aus. Außerdem könnt ihr die Darstellung des Datums auch variieren, schaut dazu am besten in die Man-Page von date.

 

DSLan v1.4

Liebe Leser,

gerade eben haben wir die DSLan v1.4 veröffentlicht. Die DSLan ermöglicht es einen Local-Area-Netzwerk Server mit maximal 10 Spielern des Spiels Die-Stämme zu erstellen.

Download und weitere Info’s: http://dslan.gfx-dose.de

Liebe Grüße,
Agrafix

 

Eigene XOR Funktion

Liebe Leser,

ein kleines Code-Snippet für alle, die die XOR-Funktion verstehen wollen 😉

#cs
Coding by www.agrafix.net

---------------------
The functions
---------------------
#ce
; Nand Function
Func nand($a, $b)
	Return BitNOT(BitAnd($a, $b))
EndFunc

; XOR Function
Func xor($a, $b)
	Return  nand(nand($a, nand($a, $b)), nand($b, nand($a,$b)))
EndFunc

#cs
---------------------
Proof of Concept: my xor function returns the same stuff as the Built-in XOR function
---------------------
#ce
If xor(0xAB, 0xBC) == BitXor(0xAB, 0xBC) Then ; horray, it works!
	ConsoleWrite("Congratz Bro, you coded a XOR function :D" & @CRLF)
Else ; this will never happen
	ConsoleWrite("Sorry, but you suck!" & @CRLF)
EndIf

Viel Vergnügen damit,
Agrafix

 

Agrafix.net in neuem Design

Lange hat sich www.agrafix.net in gleichem Design präsentiert, deshalb war jetzt Zeit für etwas neues. Im Grunde habe ich ein neues Design für die Seite erstellt, die Referenz-Icons vereinheitlicht und auf der Startseite werden nun die letzten 3 Blogbeiträge angezeigt. Wie gefällt euch das neue Design?

Besuche www.agrafix.net

Wärend der „Umstellung“ bin ich natürlich auf ein paar interessante Dinge gestroßen:

1) Die SQL, die es ermöglicht die letzten Blogbeiträge aus einem WordPress auszulesen:

SELECT post_title, post_content, guid, post_author FROM [PREFIX]_posts WHERE post_status = 'publish' AND post_type = 'post' ORDER BY post_date DESC LIMIT 3

2) Außerdem noch ein Tipp für alle xHTML+CSS-Designer: Um ein komplettes DIV zu verlinken habe ich folgenden Code genutzt:

CSS:

div.nelement {
	float:left;
	margin-left:10px;
}

div.nelement a {
	display:block;
	width:100%;
	height:100%;
}

div.nelement a:hover {
	text-decoration:none;	
}

xHTML:

Das war’s auch schon 😉

 

Zwei einfache Algorithmen: kgV und ggT

Heute präsentiere ich endlich mal wieder einen Beitrag der sich in die Richtung Mathe/Informatik bewegt. Eigentlich nichts weltbewegendes, nur zwei einfache Algorithmen, die einem beispielsweise beim Bruchrechnen das Leben einfacher machen können: Das kleinste gemeinsame Vielfache und der größte gemeinsame Teiler.


Die Ausgabe sollte wie folgt aussehen:

ggT(114, 24) = 6
kgV(45, 35) = 315

Wer den ggT bzw den kgV von mehreren Zahlen braucht, kann sich an folgende Regel halten:

kgV(a, b, c, d) = kgV(kgV(a, b), kgV(c, d))
 

PHP und register_globals

Ich versteh‘ es einfach nicht. Warum gibt es immer noch Webhoster die die php.ini-Setting register_globals aktiviert haben? Ich war gestern abend mindestens eine halbe Stunde auf Bug-Suche, bis ich bemerkt hatte das unser liebes register_globals Variablen definiert hatte – die eigentlich leer bleiben hätte sollen. Ja, man darf mir jetzt unsauberes Coden vorwerfen – ich hätte jeder Variable vor der Verwendung ja einen Initialwert geben können. Allerdings kommt PHP doch eigentlich auch gut ohne aus – und wenn man mal was quick’n’dirty machen will scheitert PHP an seinen eigenen Einstellungen…

register_globals wird endlich mit PHP6 abgeschafft – seit PHP5.3 gillt es als „veraltet“. Und warum gibt’s dann immer noch Webhoster die sowas standardmäßig aktivieren?!

 

in_array() für Javascript

Da in_array() eine nützliche Funktion in PHP ist, habe ich sie für JavaScript umgeschrieben:

Array.prototype.in_array = function(search) {
	for(var i=0; i < this.length; i++) {
		if (this[ i] === search) {
			return true;
		}
	}

	return false;
}

Die Funktion wird wie folgt angewendet:

var arr = new Array("rock", "and", "roll");
alert(arr.in_array("rock")); // -> true
alert(arr.in_array("pop")); // -> false
alert(arr.in_array("nd")); // -> false

Viel Vergnügen damit 😉

 

Quadratische Gleichung Lösen

Um das wp-syntax plugin zu testen habe ich ein kleines PHP Script zum Lösen von quadratischen Gleichungen veröffentlicht:

 ax² + bx + c = 0
$a = 1;
$b = 3;
$c = 1;

// calc
print "Eq: ".$a."x² + ".$b."x + ".$c." = 0n";

$d = pow($b, 2) - 4*$a*$c;
print "D = $dn";

if ($d