Bananas Development Blog: Archives

Debian Package cleanup

Mit diesen Befehlen kann man schnell und sicher seine Packages aufräumen.
Mit der Zeit sammelt sich so manches Packet an, dass nicht mehr benötigt wird oder auch nie verwendet wurde.

Löschen der Pakete die nicht vollständig heruntergeladen worden sind:
apt-get autoclean


Entfernen von unnötigen Sprach Files:
(beim erstmaliegen Installieren wird schon nach den Sprach Files gefragt)
localepurge


Verweiste Paket finden und löschen:
deborphan | xargs apt-get -y remove --purge


Damit sollten schon an paar Pakete weniger auf dem System sein.

Multmediatasten unter Linux

So hatte gerade das Problem, dass ich meine Sondertasten nicht benutzen konnte.
Unter Gnome ist, das ja kein Problem. Einfach die Shortcuts mit dem Tool von Gnome bearbeiten und dann die Taste drücken. Fertig.

Nun gibt es leider so was nicht unter Xfce4 ( doch es gibt es !! ).
ABER dort wurde meine Sondertaste nicht erkannt. Ich konnte zwar den Befehl angeben aber die Sondertaste wurde nicht übernommen.
Dazu kam noch das Problem, dass es keine fertige Einstellung für die Lautstärke wie bei Gnome gibt.

Da habe ich mich mal auf die Suche gemacht und ein Programm gefunden, mit dem man unabhängig vom Display Manager die Tasten belegen kann.

xbindkeys

Also einfach mit xbindkeys -mk die Belegung der Taste auslesen, in seine ~/.xbindkeysrc rein und dann den Befehl dazu schreiben.

Will man damit nun den Sound steuern baucht man noch ein Tool: amixer.
Hier der Artikel dazu:

amixer and XFCE4

Damit war es mir möglich meine Sondertasten der Tastatur zu nutzen.

Hier mal noch meine ~/.xbindkeysrc
 1 "amixer set Master 5+"
m:0x10 + c:176
Mod2 + NoSymbol

"amixer set Master 5-"
m:0x10 + c:174
Mod2 + NoSymbol

"amixer set Master toggle"
m:0x10 + c:160
Mod2 + NoSymbol


Javascript sortieren (liste,div etc.)

UPDATE:
Hier gibt es einen aktuelleren Arktiel wie das auch mit mootools funktioniert.





So hier mal kurz eine Zusammenfassung wie man eine Liste von Dingen per Drag and drop im Browser sortieren kann.

Als erstes braucht man die Scriptaculous JS Bibilothek:
script.aculo.us

Nun erstellt man ein Verteichnis in das man die js Dateien aus dem src Ordern aus dem entpackten
script.aculo.us Archiv kopiert. Dazu kommt noch die prototype.js aus dem lib Ordern (ebenfalls aus dem entpackten script.aculo.us Archiv)

Das Folgende kommt in den Kopf Bereich der HTML Seite:
<script language="JavaScript" src="/javascript/prototype.js"></script>
<script language="JavaScript" src="/javascript/scriptaculous.js"></script>

Ihr müsst nur noch den Pfad anpassen.

Jetzt braucht ihr noch eine Liste oder Divs die Sortiert werden sollen:
<div id="sortContainer">
  <div name="1">Inhalt</div> 
  <div name="2">Inhalt2</div>
  <div name="3">Inhalt3</div>
  <div name="4">Inhalt4</div>
</div>

Das Ganze kann man natürlich auch noch mit classen und styles versehen. Also keine Angst, dass irgendwas dabei kaputt gehen könnte.

Jetzt kommt nun NACH DER SORTIER LISTE !! folgendes:
<script language="JavaScript">
Sortable.create("sortContainer",{tag:'div'});
</script>

Da wir ja keine Liste haben, sondern div muss man nun angeben welche Tags innerhalb des Elementes mit der ID sortContainer sortiert werden können.

Folgendes macht das selbe aber macht nur div Element mit der id moveAble moveAble2 sortierbar
<script language="JavaScript">
Sortable.create("sortContainer",{tag:'div',only:['moveAble','moveAble2']});
</script>


Nun sollte man in der Lage sein die Elemente nach belieben sortieren zu können.

So nun kann man ja das alles schon sortieren aber mann muss sich das ja auch merken.
Also kommt noch eine kleine Javascript Funktion die die Sortierung ausliest:
function getOrder() {
  var orderList = '';
  divs = document.getElementById("sortContainer").getElementsByTagName("div");
  for (var i=0;i < divs.length;i++) {
    orderList += divs[i].getAttribute('name') + ', ';
    }
  alert(orderList);
}

Nun kommen die divs in der Reihenfolge wie sie in dem DOM angezeigt werden und auch hinterlegt sind.
Damit diese Funktion auch aufgefuren wird, muss die Sortable.create Funktion von oben erweitert werden.
Sortable.create("sortContainer",{tag:'div',only:['moveAble','moveAble2'], onUpdate: getOrder});

Bei onUpdate gibt man die Funktion an die nach einer verschieben Aktion ausgeführt werden soll an.
Mehr Informationen zu den Optionen gibt es hier:
Sortable.create

Anhand von name="" kann man nun festlegen welcher Eintrag nun an welcher Position ist.
So sollte der String aussehen:
1=2;2=3;3=0;4=4;

Diesen String kann man nun in ein hidden filed schreiben und danach via POST an PHP übergeben.
PHP baut sich den String auseinander und speichert dann die Positionierung ab. Und kann anhand des Wertes aus name="" sagen, dass Element 1 hat die Position 2.


Sollte man mal verschachtelte Sortierungen haben, dann muss man beachten, dass der Sortable.create Befehl von innen nac aussen Aufgerufen werden muss. Also erster das innere Soriertfeld und dann das äussere.


Hier ein Blogeintrag der mit geholfen hat dies alles zu verstehen:
drag and drop with javascript

PHP,MySQL und UTF-8

Bei der Verwendung von UTF-8 muss man so einiges beachten, damit es auch richtig funktioniert.

Hier eine Seite die das alles zusammenfasst:

PHP,MySQL und UTF-8
( Mirror )

opensource Software

Hier mal eine schöne Liste von Windows / Kommerziell Software und das Linux / OpenSource Gegenstück dazu.

Kommerziell <-> OpenSource

PHP inlcude und Cache

PHP erstellt einen Cache von einer Include Datei.
Dies ist kein Bug, sondern soll anscheinend auch so sein.

Nun hatte ich aber den Fall, dass sich diese include Datei geändert hat, aber ein alter Wert nach dem include ausgegeben worden ist, obwohl ein neuer in der inlcude Datei gesetzt war.

Wenn der Inhalt so einer include Datei dynamisch geändert werden kann, zb. über ein Frontend mit dem man die Variablen bestimmen kann die in so einer inlcude Datei stehen, und diese Datei später eingebunden wird, kann es nun vorkommen, dass alte Werte angezeigt und verwendet werden.

Lässt man das Ganze durch einen Debugger (Zend Debugger) laufen, dann wird dieses Problem nicht auftreten. Auch das Leeren des Browsercaches wird nichts bringen.

Ein Weg um das zu umgehen ist wie folgt:
// HTTP/1.1
header("Cache-Control: no-cache, must-revalidate"); 
// Datum in der Vergangenheit
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");


Damit wird gesagt, dass der Cache in der Vergangenheit abläuft, und somit immer wieder neu geladen wird.


Sammlung von Code Snippets für Web Entwickler

Hier ist ein schöner blog eintrag mit einer tollen Sammlung von Code der sich nützlich macht für jeden web Admin und Designer.

25-code-snippets-for-web-designers-part5

Bildergalerie erstellen

Hier mal eine tolle Sammlung von Scripten und CSS, mit denen man Bildergallerien erstellen kann.

30 Scripts for Gallaries

Simply Google

Alles was Google so zu bieten hat auf einer Seite.

Simply Google

XpFramework laden

Hier der Code wie man das XP Framework in seine PHP Applikation einbindet.
( Es wird PHP 5.2 benötigt )

// xp framework
// paths
define('ABSOLUTE_PATH',dirname(_FILE_)."/");
define('LIB_DIR','lib/');

$include = ini_get('include_path');
if(!ini_set('include_path',$include.':'.ABSOLUTE_PATH.LIBS_DIR.'xp')) {
	die('Failed to set the include path. Check you php configuration.');
}
require('lang.base.php'); // load the xp framework

Google command Line Befehle

Hat man einen Firefox, dann kann man rechts oben in die Suchbox folgende "Commands" verwenden.

Google search box firefox

shfs

shfs ist ein tolle Möglichkeit ein Verzeichnis via ssh zu mounten.
Verhält sich wie der normale mount Syntax.
Nur halt über ssh.

Sinnvoll wenn ftp oder nfs nicht möglich sind.

Hier eine Anleitung wie man es unter Debian installiert:
Debian shfs
( Mirror )

Damit man das auch als nicht root Benutzer machen kann, muss man das suid bit setzten:
chmod +s /usr/bin/shfsmount
chmod +s /usr/bin/shfsumount


Gib mir ein Beep

Damit ich nicht immer vergesse, dass ich Emails bekomme, habe ich nun die Fähigkeit des PC Speakers zur Hilfe genommen und mein Emial-Programm dazu veranlasst einen Beep von sich zu geben wenn neue Emails angekommen sind.
Dazu muss man natürlich einstellen, dass die Emails automatisch abgeholt werden.

Bei Debian geht das mit den Befehl beep ( dazu einfach das Packet beep installieren )

hier mal ein Beispiel
beep -r 2

Das veranlasst den PC-Speaker dazu 2 mal kurz zu piepen.

Mahr dazu einfach mit man beep nachschlagen.

PHP raw Data

Hier mal eine Methode mit der man auf die "Raw" daten von einer Form ( mit method="post" zugreifen kann.
$test = file_get_contents('php://input');
var_dump($test);

Dabei kommt folgendes raus:
name=test&str=strasse


Wie also würde man method="get" machen.

PHP dot-to-underscore conversion

Argh,

warum mach PHP das ?

<form>
<input name="test.1" value="1" />
<input type="submit" value="test" />
</form>


nach dem submit und nach einem var_dump($_POST) sollte das rauskommen oder ?

array(1){"test.1" => "1"}


nein es kommt aber folgendes raus

array(1){"test_1" => "1"}


TOLL ODER ???

und ich suche mir den Wolf verdammt !!!

Hier noch ein Linkt, der das Ganze belegt.
dot to underscore conversion
( Mirror )