Kategorien
PHP Spass

Relay, ein Verzeichnis-Manager

Online im Verzeichnis rumbrowsen wollte ich schon immer. Nun bin ich beim Lesen über Dependency Injection irgendwie auf relay gestossen. Nunja, leider scheitert das an einer Eigenart von MySQL:

CREATE TABLE IF NOT EXISTS `relay_clients` (
`id` int( 11 ) NOT NULL AUTO_INCREMENT ,
`name` text NOT NULL ,
`display` text,
`path` text NOT NULL ,
PRIMARY KEY ( `id` ) ,
UNIQUE KEY `pn` ( `path` ( 250 ) , `name` ( 250 ) )
);

scheitert mit der Fehlermeldung:

Specified key was too long; max key length is 1000 bytes.
Could not create the table relay_clients

Nun, warum? 250+250 sollten doch weniger als 1000 sein? Jein 🙂

Kategorien
PHP

empty vs. isset vs. array_key_exists

Ich zitier hier einfach mal. Hab ich nämlich nicht gewusst.

The problem is that there are situations where isset() and empty() are
not appropriate checks. For instance, try this:

$test = array('foo' => null);
echo ((isset($test['foo'])) ? 'true' : 'false'); // echoes 'false'!

What about empty()?

$test = array('foo' => null);
echo ((empty($test['foo'])) ? 'true' : 'false'); // echoes 'true'
echo ((empty($test['bar'])) ? 'true' : 'false'); // also echoes 'true'!

What does that mean? It means that if you want to test for the presence
of a key, you can’t rely on isset() *or* empty()! array_key_exists() is
the only way to reliably verify that the key is present in the array.

$test = array('foo' => null);
echo (array_key_exists('foo', $test) ? 'true' : 'false'); // echoes 'true'
echo (array_key_exists('bar', $test) ? 'true' : 'false'); // echoes 'false'

Quote von Matthew Weier O’Phinney, Zend Framework Developer

Kategorien
Java PC & Accessoires Praxissemester Studium

Java Collection Interface

Java hat ein paar nette Klassen. Und weil ich mir nie merken kann was jetzt der Unterschied zwischen ‚Set‘ und ‚List‘ ist, hier die Erklaerung. Deutsch/Englisch gemischt, zumindest was die Benennung angeht.

  • Collection — Die Wurzel der Collection-Hierarchie. Eine Collection repraesentiert eine Gruppe von Objekten, auch bekannt als seine Elemente. Das Collection Interface ist die gemeinsame Basis aller Unterklassen und wird benutzt um die Collections untereinander kompatibel zu machen. Ausserdem ermoeglich es einen allgemeinen Zugang zu allen Collections. Manche Untertypen erlauben Duplikate, andere nicht. Manche sind sortiert, andere nicht.
  • Set — Eine Collection die keine doppelten Elemente erhalten kann. Am Besten erklaert ist das an einem Pokerblatt, bei dem keine Karte doppelt vorkommt. Ausser jemand schwindelt und betruegt, aber das gehoert hier nicht hin.
  • List — eine sortierte Collection (manchmal Sequenz genannt). Listen koennen Duplikate enthalten. Im Prinzip also eine Menge von Football-Star-Sammelkarten, von denen man auch welche doppelt haben kann. Wer Vector kennt, dem kommt das bekannt vor.
  • Queue — eine Collection die mehrere Elemente beinhalten kann. Uebersetzt ist das eine Warteschlange, was auch die Funktion erklaert. Meistens wird FIFO benutzt (aber nicht zwingenderweise), d.h. das was als erstes reinkommt, kommt auch als erstes wieder raus. Warteschlange am Metzger halt.
  • Map — ein Objekt das eine Schluessel-Wert-Beziehung repraesentiert. Hier sind wieder keine doppelten Eintraege erlaubt. Vergleichbar mit Schluessel-Schloss, jeder Schluessel passt nur in ein Schloss. Gut, mein VW-Schluessel passt auch in den Polo eines bekannten, aber wir sprechen hier nicht von Autos 🙂

Quelle: http://java.sun.com/docs/books/tutorial/collections/interfaces/index.html

UPDATE: Noch eine Entscheidungshilfe als Bild:

Java Collections Entscheidungshilfe
Java Collections Entscheidungshilfe
Kategorien
PHP Praxissemester Sonstiges

__FUNCTION__ in Java

Unter PHP gibt es sogenannte Magische Konstanten. Die sind prima, wenn man z.B. eine Debugfunktion schreiben will, die an bestimmten Stellen sagt wo sie aufgerufen wurde. In Java sieht das dann so aus:

class Debug
{
  public static void print(String msg)
  {
    java.lang.Exception e = new java.lang.Exception();
    StackTraceElement ste[] = e.getStackTrace();
    System.out.println(
        new Date().getTime() + " " +
        ste[1].getClassName() + " " +
        ste[1].getMethodName() + " " +
        msg);
  }
}

Wird aufgerufen mit:

import mein.tolles.package.Debug;
Debug.print("lalala");

Was hiermit nicht geht ist: getFileName() und getLineNumber(), da diese Information nicht zur Verfuegung steht.

Kategorien
PHP

SPL – die Standard PHP Library

Kevin Waterson hat einen laengeren Artikel ueber die SPL geschrieben, inkl. so schoener Sachen wie Iterator und ArrayObjects und (endlich) ein OOP-Zugriff aus Dateisystem via SplFileObject.

Link: http://www.phpro.org/tutorials/Introduction-to-SPL.html

Kategorien
PHP

GnuPG mit PHP

Also, ich mag RoundCube Webmail. Allerdings fehlt mir (wie eigentlich in jedem Webmailer) eine Moeglichkeit E-Mails zu verschluesseln. Kurz zur Erklaerung: GnuPG ist ein Programm zur Verschluesselung und/oder Signierung von Daten. Dies koennen prinzipiell E-Mails, Dateien oder sonst irgendwas sein, wir befassen uns aber mal nur mit den E-Mails. GnuPG nutzt ein sogenanntes ‚Asymmetrisches Kryptosystem‚, d.h. jeder Benutzer dieser Systeme hat eine privaten und einen oeffentlichen Schluessel. Asymmetrisch bedeutet hier also, das wir nicht denselben Schluessel verwenden um etwas zu verschluesseln und es danach wieder zu entschluesseln.

Kategorien
PHP

PHP

Nun, ich werde eine neue Kategorie einfuegen, diese heisst PHP. Gut, erstmal nix Besonderes, sowas gibts wie Sand am Meer, aber ich will auch dran teilhaben. Deshalb erstmal alle meine Links die mit PHP zu tun haben UND gleich noch was zum Lesen