Bilder automatisiert mit Gimp 2.6 im Batch-Mode zuschneiden
Habe heute nach einer Möglichkeit gesucht, 50 Bilder identisch zuzuschneiden. Da ich das nicht von Hand machen wollte habe ich ein wenig gegoogelt und herausgefunden, dass das Grafikprogramm Gimp einen Batch Mode besitzt, mit dem man aus der Konsole Skripte aufrufen kann.
Unter Linux macht man dazu folgendes:
Man erstellt eine Skriptdatei mit dem Pfad und Namen: ~/.gimp-2.6/scripts/batch-crop.scm
Die Datei bekommt folgende Anweisungen:
(define (batch-crop pattern width height xoffset yoffset)
(let* ((filelist (cadr (file-glob pattern 1))))
(while (not (null? filelist))
(let* ( (filename (car filelist))
(image (car (gimp-file-load RUN-NONINTERACTIVE filename filename)))
(drawable (car (gimp-image-get-active-layer image)))
)
(gimp-image-crop image width height xoffset yoffset)
(gimp-file-save RUN-NONINTERACTIVE image drawable filename filename)
(gimp-image-delete image)
)
(set! filelist (cdr filelist))
)
)
)
Nun geht man einfach in den Ordner, in dem die zu bearbeitenden Bilder liegen und führt gimp im Batch Mode aus.
gimp -i -b '(batch-crop "*.png" 1185 667 5 672)' -b '(gimp-quit 0)'
In diesem Beispiel müssen die Bilder das Format png haben und werden auf eine Grösse von 1185, 667 zugeschnitten, wobei die beiden hinteren Parameter den x- und y-offset angeben.
Achtung: Es werden beim bearbeiten keine Kopieen der Dateien angelegt, sondern die Dateien werden verändert und mit dem gleichen Namen gespeichert.
Openvpn auf Android 2.1 Custom ROM Kagudroid
Um Openvpn auf der Custom ROM Kagudroid von lox zum Laufen zu bekommen, braucht man das passende Kernelmodul tun.ko. In der Version 1.2.1 von Kagudroid ist der Kernel 2.6.29-877eaf14 (htc-kernel@and18-2 #568) “verbaut”.
Als GUI benutze ich Tunneldroid. Zur Einrichtung des ganzen Systems habe ich folgende Anleitung benutzt. Aber anstatt die tun.ko Datei aus dem get-a-robot-vpnc Projekt zu nehmen, habe ich sie aus dieser Quelle geholt.
Ich habe nochmal nur die tun.ko Datei zum direkten Download verlinkt, da diese für Openvpn ausreicht.
Handytasche für das HTC Hero mit Strahlenschutz
Habe mich nun nach langem Hin und Her für eine Handytasche entschieden. Es ist eine von den Trendy selbstgenähten Taschen von fitBAG geworden. Soweit so gewöhnlich. Eine Besonderheit an meiner Tasche ist der eingenähte Strahlenschutz auf der Unterseite der Tasche. Er soll genauso viel Strahlung abhalten, wie eine 2 Meter dicke Betonwand, also fast 100%. Ob das nun wirklich notwenig ist, oder nicht bleibt zu diesem Zeitpunkt einmal dahin gestellt. Bisher gibt es meines Wissens noch keine wirklichen Langzeitstudien, die Aussagen über die Auswirkung von Handystrahlen auf den menschlichen Körper machen. Auf jedenfall denke ich, dass ich so das eventuell bestehende Risiko für meine Familienplanung minimiere.
Server Status mit Handy prüfen
Die App URL Monitor bietet die Möglichkeit, den Status des eigenen Servers zu Überprüfen. Dazu gibt es zum einen Die Möglichkeit per SSH einen Ping an den Server zu senden oder zum Anderen einfach per HTML HEAD Request zu testen, ob der Server noch online ist. Zusätzlich bietet die App die Möglichkeit, den aktuellen Status direkt über ein Widget auf dem Homescreen darzustellen. Das Prüfintervall kann man natürlich beliebig einstellen.
In meinen Augen eine kleine, simple App, die sich für VServer Besitzer aber sicher bezahlt machen dürfte, zumal sie eh kostenlos zu haben ist.
HTC Hero Upgrade auf Android 2.0
HTC hat laut golem.de offenbar angekuendigt, direkt ein Upgrade auf das eben frisch erschienene Android 2.0 durchzufuehren und die Version 1.6 auszulassen. Wann das Upgrade fertig ist steht noch nicht fest, es wird aber erwartet, dass es noch vor Ende des Jahres soweit sein wird.
Vereinfachter OnClickListener für Buttons in Android 1.6
In Android 1.6 ist es jetzt möglich sich ein wenig Tipparbeit beim Erstellen von Buttons zu sparen. Bisher sah das Anhängen einer OnClickListeners an einen Button so aus:
findViewById(R.id.myButton).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Irgendwas machen
}
});
In Android 1.6 ist es nun möglich einfach eine Methode zu definieren, die lediglich eine View als Argument beinhalten muss.
public void myClickHandler(View target) {
// Irgendwas machen
}
Diese wird dann im XML File einfach eingebunden und fertig ist der Button.
Somit spart man sich etwas Tipparbeit sowohl in der Java- als auch in der XML-Datei.
Quelle:
Hier gehts zum originalen Post der Android Entwickler
Mit Android Sensoren auslesen
Android bietet Unterstützung für eine große Menge an Sensoren, die allerdings nicht immer alle in einem Gerät verbaut sein müssen. Um die Beschleunigungssensoren zu testen haben ich ein kleines Programm geschrieben, dass einen Listener an den Sensor hängt und bei Änderungen ausliest und vierTextViews aktualisiert. Nach diesem Prinzip funktionieren auch die anderen Sensortypen in Android.
Um Zugriff auf den Sensor zu bekommen, muss man sich zunächst mit dem SensorManager Zugriff darauf verschaffen. Da es sich um Hardware handelt, geht man hier über die System Services und erhält den Manager mit dem Aufruf getSystemService(Context.SENSOR_SERVICE). Um Daten vom Sensor zu erhalten, machte man einen SensorListener beim Manager bekannt. Hierbei legt man den Sensortyp, der abgefragt werden soll, sowie die Aktualisierungsgeschwindigtkeit (Hier im Beispiel mit SensorManager.SENSOR_DELAY_NORMAL).
// mit dem SensorManager auf die Sensoren zugreifen mgr = (SensorManager) getSystemService(Context.SENSOR_SERVICE); // Den SensorListener bekannt machen. mgr.registerListener(listener, mgr .getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
Im Listener überschreibt man die beiden Methoden onSensorChanged und onAccuracyChanged. Die Daten des Sensors erhält man dann aus dem float Array event.values, in dem je nach Sensortyp die Werte enhalten sind. Welche Werte man erhalten kann zeigt die Android API hier.
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
float x, y, z;
x = event.values[0];
y = event.values[1];
z = event.values[2];
Anzumerken bleibt noch, dass es unbedingt notwendig ist, den Listener wieder beim Manager abzumelden, da die Anwendung sonst nie komplett beendet wird, sondern weiterhin Daten vom Sensor empfängt.
@Override
public void onDestroy() {
super.onDestroy();
mgr.unregisterListener(listener);
}
Hier der gesamte Code des Beispiels.
package de.beanova.tripmeter;
import android.app.Activity;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.TextView;
public class StartScreen extends Activity {
/** Called when the activity is first created. */
SensorManager mgr;
TextView tx, ty, tz, maxx;
float max;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tx = (TextView)findViewById(R.id.tvx);
ty = (TextView)findViewById(R.id.tvy);
tz = (TextView)findViewById(R.id.tvz);
maxx = (TextView)findViewById(R.id.tvmaxx);
max = 0;
mgr = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
mgr.registerListener(listener,
mgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
public void onDestroy(){
super.onDestroy();
mgr.unregisterListener(listener);
}
private SensorEventListener listener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){
float x, y, z;
x = event.values[0];
y = event.values[1];
z = event.values[2];
if(x > max){
max = x;
}
// update textviews
tx.setText(""+x);
ty.setText(""+y);
tz.setText(""+z);
maxx.setText(""+max);
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// unused
}
};
}
HTC Hero mit Windows 7 64-bit synchronisieren
Habe heute versucht, mein neues HTC Hero mit dem Windows 7 Adressbuch zu synchronisieren. Allerdings hatte ich Probleme, weil offenbar in der Installations CD kein USB Treiber für die 64-bit Version von Windows 7 mitgeliefert wird. Ich bin glücklicherweise in einem Forum fündig geworden, dort gab es das folgende ZIP zum Download um das ADB Gerät zu installieren. Ich habe die Datei mal auf meinen Server geladen. Nach der Installation einfach Windows neu starten, und schon geht das synchronisieren.
Android auf dem Mac installieren.
Als erstes lädt man sich wieder das Android SDK von android.com runter und wenn man möchte auch Eclipse. Ich habe bei mir das SDK direkt unter der Macintosh HD abgelegt. Eclipse liegt ganz normal bei den Programmen.
Nun muss man die Datei .bash_profile im Homeverzeichnis anpassen. Sollte es sie nicht geben, dann kann man sie einfach erstellen und den folgenden eintrag hinzufügen:
export PATH=${PATH}:<pfad_zu_deinem_sdk>/tools
Soll Eclipse nicht verwendet werden, ist man an dieser Stelle mit der Installation fertig. Ansonsten öffnet man Eclpilse und bindet das Android Plugin für Eclipse ein. Dies geschieht über die Pluginverwaltung von Eclipse.
Man wechselt über das Menü mit Help -> Install New Software zum Installationsdialg. Hier muss man nun mit einem Klick auf Add die Android Pluginseite hinzufügen und die URL http://dl-ssl.google.com/android/eclipse/ angeben. Nun erscheinen die Android Developer Tools zur Installation. Nachdem man dann Eclipse einmal neugestartet hat, muss man in den Eclipse Einstellungen unter dem Punkt Android noch den Pfad zum SDK eingeben und dann ist man schon bereit mit Android loszulegen. Tipps hierzu findet man in dem Beitrag Android Programmierung – Erste Schritte.
Android Programmierung – Erste Schritte
Habe mich nun nach langem Nachdenken entschlossen, meine erste geplante Handyanwendung doch nicht mit Java ME, sondern für das Android zu entwickeln. Wie es mir dabei so ergeht, vielleicht auch einige Tipps und Hinweise werde ich hier im Blog posten.
Der Anfang
Die Installation des Android SDK’s geht relativ problemlos, wenn man nach dem Download der Installationsanleitung auf der Seite folgt. Ich habe mich hier für die Installation des Eclipse Plugins entschieden, da ich ohne hin schon mit Eclipse arbeite.
Als erste Anlaufstellen ist dann ebenfalls die Seite android.com zu empfehlen, auf der es eine Hello World Einführung. sowie ein umfangreicheres Tutorial, sowie die Android API Reference zu finden gibt. Eine weitere gute Einführung bietet sich im Blog von Erich Holzbauer, der auch ein Tutorial für eine kleine Map Anwendung parat hat.
Bald folgen mehr Hinweise, je nachdem wie gut ich vorankomme und vielleicht auch ein kleines Tutorial.
Postfix "Bad recipient delimiter" oder "ungültiges adresstrennzeichen"
Wer Probleme mit der postfix Installation auf einem Vserver bei ispOne business GmbH aus dem Weg gehen möchte, der muss nur in der Datei /etc/mailname die Leerzeile entfernen. Anderenfalls bleibt die postfix Installation unter Debian Lenny in einer Schleife hängen und bringt die SSH-Verbindung zum Einfrieren. Das liegt offenber daran, dass die Installation mit der zusätzlichen Leerzeile, die in der Datei eingefüt ist nicht klar kommt.
Hat man die Zeile geändert, läuft die Installation wunderbar. Dies ist mir bisher nur bei diesem Provider passiert. Ansonsten ist ispOne business aber bisher zu empfehlen. Die Preise können sich auch sehen lassen und der Service war bislang immer schnell und super kulant.
Samsung CLP-315w WLAN Problem
Habe mir vor kurzem einen neuen Farblaserdrucker zugelegt. Beim Versuch den Drucker mit meiner Fritzbox per Wlan zu verbinden schlug zunächst fehl. Nach einigem Probieren stellte ich fest, dass es an der Verschlüsselungsmethode lag. Ich hatte WPA+WPA2 eingestellt. Nach umstellen auf WPA2(CCMP), das bedeutet WPA2 mit PSK, funktionierte es dann.
Google Chrome für Mac und Linux
Seit einiger Zeit gibt es Googles Browser Chrome nun auch für Linux und Mac OS X. Allerdings liegen die Versionen bisher noch im Alpha Stadium vor und Google weist ausdrücklich darauf hin, den Browser “nicht” herunterzuladen, es sei denn man sei Entwickler. Ich habe die Mac Version trotzdem schonmal heruntergeladen und werde damit mal ein bisschen rumspielen. Mal sehen, wie oft ich den Browser zum abstürzen bringe…
Hier geht es zur Mac Version
Hier geht es zur 32-bit Linux Version (als .deb Paket)
Hier geht es zu 64-bit Linux Version (als .deb Paket)
Hier geht es zur Chrome Übersichtsseite
Apple Keyboard und Kubuntu 9.04
Habe mir ein schickes Apple Alu Keyboard zugelegt und versucht es mit Kubuntu 9.04 ans laufen zu bekommen.
Zunächst habe ich dazu das Tastaturlayout auf das typische Mac Layout umgestellt. Bei Kubuntu muss man dazu in Systemeinstellungen -> Land/Region & Sprache -> Tastaturlayout gehen. Hier dann unter dem Reiter Layout die Tastaturlayouts aktivieren, als Tastatur-Modell “Apple” und als Layout-Variante “Macintosh” einstellen.
Leider habe ich das Problem, dass die <> und die ^° Taste vertauscht sind. Habe gelesen, dass es sich dabei offenbar um einen Fehler im Ubuntu Kernel handelt. Außerdem sind die Funktionalität der ctrl und der cmd Tasten wie bei einer Windows Tastatur und nicht wie auf dem Mac. Beides kann man mit dem Systemprogramm xmodmap lösen. Dies dient zum Einstellen des Tastaturlayouts auf Systemebene.
Folgende Schritte sind zu machen:
Erstmal eine Datei anlegen, z.B. mit dem Namen .Xmodmap. In diese trägt man dann folgendes ein:
% Eintrag für den Circumflex und das Gradzeichen
keycode 94 = dead_circumflex degree
% Eintrag für die spitzen Klammern
keycode 49 = less greater
Dann legt man sich am besten eine Datei an, die das ganze als Skript ausführt. Zum Beispiel so:
#!/bin/sh
xmodmap /home/path/to/.Xmodmap
exit
Diese kann man dann automatisch beim Systemstart ausführen lassen.
Hier findet man dann
Ubuntu Hilfeseite zum Thema
Dual Screen unter Kubuntu 9.04 mit ATI Karte
Da ich leider meinen Rechner neu installieren musste stand ich wiedereinmal vor dem Problem meine beiden Monitore zum Laufen zu bringen. Mein Ziel dabei war ein Dual Screen, auf dem man auf beiden Bildschirmen die Fenster maximieren kann, man also quasi zwei Desktops und nicht den über zwei Monitore gestreckten Desktop hat.
Zunächst habe ich die proprietären ATI Treiber installiert. Leider ließ sich in den Systemeinstellungen unter Kubuntu nichts einstellen. Habe mich dann erinnert, dass automatisch ein Programm von ATI mit installiert wird, das ATI Catalyst Control Center. Habe also das als Administrator mit sudo amdcccle aufgerufen und versucht da irgendwas einzustellen. Offenbar muss man das erstmal freischalten. Habe also ein bisschen gegoogelt und auch etwas gefunden:
Man muss die ATI erstmal in der xorg.conf initialisieren. Dafür gibt man in die Bash folgendes ein:
sudo aticonfig --initial -f
Danach muss man das Programm randr in der xorg.conf deaktivieren. Der Eintrag bei Device sollte dann so aussehen:
Section "Device"
Identifier "aticonfig-Device[0]-0"
Driver "fglrx"
Option "EnableRandR12" "false"
BusID "PCI:1:0:0"
EndSection
Nun kann man das oben erwähnte ATI Catalyst Control Center benutzen und die gewünschten Einstellungen vornehmen.
Weiter Informationen hierzu gibt es im Ubuntu Forum, wo ich auch auf diesen Tipp gestoßen bin.
http://ubuntuforums.org/showthread.php?t=1171926