All articles (page 7 of 8):

Hübsche Daten mit PHP

On in “Devstuff” by Tblue2 comments
Tags: , ,

Falls jemand einmal in der Lage sein sollte, Daten in PHP “hübsch” (“Heute”, “Gestern”, “am 03.09.2006 um 13:30:42”) darzustellen zu müssen/wollen, habe ich für denjenigen den passenden PHP-Code.

<?php
// Für alle Fälle:
date_default_timezone_set('Europe/Berlin');

// Für deutsche Wochentagsabkürzungen, bei Bedarf entspr. abändern:
setlocale(LC_TIME, 'de_DE');

function nicedate($timestamp = NULL)
{
    if ($timestamp === NULL) {
        $timestamp = time();
    }

    if ($timestamp >= mktime(0, 0, 0) &&
        $timestamp <= mktime(23, 59, 59))
    {
        // Bei Bedarf Datumsformat abändern, siehe auch die anderen
        // zwei strftime()-Aufrufe.
        return strftime('Heute um %H:%M:%S', $timestamp);
    } elseif (
        $timestamp >= mktime(0, 0, 0, date('n'), date('j')-1) &&
        $timestamp <= mktime(23, 59, 59, date('n'), date('j')-1))
    {
        return strftime('Gestern um %H:%M:%S', $timestamp);
    } else {
        return strftime('%a, %d.%m.%y, %H:%M:%S', $timestamp);
    }
}

// Aktuelles Datum:
echo nicedate()."\n";

// Gestern:
echo nicedate(mktime(13, 30, 00, date('n'), date('j')-1))."\n";

// Damals...
echo nicedate(mktime(10, 45, 23, 3, 1, 1999))."\n";

// Beispiel der Konvertierung eines Strings in einen Timestamp,
// siehe auch: http://www.php.net/manual/en/function.strtotime.php
echo nicedate(strtotime('Fri, 18 Jul 2008 14:12:06 GMT'));
?>

Die Ausgabe sieht dann so aus:

Heute um 14:22:32
Gestern um 13:30:00
Mo, 01.03.99, 10:45:23
Gestern um 16:12:06

Firefox 3: Keine Warnung beim Schließen eines Fensters mit mehreren Tabs

On in “Software” by Tblue
Tags: , ,

Was tun, wenn Firefox 3 beim Schließen eines Fensters mit mehreren Tabs nicht mehr warnt, obwohl die Option Warnen, wenn ein Fenster mit mehreren Tabs geschlossen werden soll aktiviert ist?

Laut My Digital Life tritt dieses Problem nur auf, wenn Firefox so konfiguriert ist, dass beim Starten alle Fenster und Tabs wiederhergestellt werden sollen (Einstellungen » Allgemein » Start » Wenn Firefox gestartet wird: [Fenster und Tabs der letzten Sitzung anzeigen]).

Was aber, wenn etwas anderes eingestellt ist und es noch immer nicht funktioniert?

Falls Tab Mix Plus installiert ist, liegt die Ursache möglicherweise dort. Tab Mix Plus kann den Sitzungsmanager von Firefox ersetzen. Um den Sitzungsmanager von Firefox wieder zu aktivieren, geht man wie folgt vor:

Extras » Tab Mix Plus - Einstellungen » Sitzung » Haken bei Integrierte Sitzungs-Wiederherstellung von Firefox benutzen setzen; Beim Starten des Browsers auf [Startseite anzeigen] oder [Leere Seite anzeigen] setzen » Auf OK klicken.

Nun sollte beim Schließen eines Fensters mit mehreren offenen Tabs dieser Hinweis erscheinen:

Firefox-Dialog: "Sollen die offenen Tabs für den nächsten Start gespeichert werden?"

Ist Nicht wieder fragen aktiviert, wird beim Klicken auf Beenden automatisch die Option Warnen, wenn ein Fenster mit mehreren Tabs geschlossen werden soll deaktiviert, während ein Klick auf Speichern und Beenden den Startmodus auf Fenster und Tabs der letzten Sitzung anzeigen setzt. Will man die Warnung also auch beim nächsten Mal sehen, sollte Nicht wieder fragen nicht angekreuzt werden.

Linux Segmentation fault Fehlercodes

On in “Linux” by Tblue
Tags: ,

Nach einem Mainboard-Wechsel habe ich des öfteren Segfaults und Kernel panics auf meinem Linux-Rechner (wie ja schon im Blog erwähnt). In der Ausgabe von dmesg sieht das dann so aus:

X[2672]: segfault at 1a4 ip 0819288a sp bf9bec60 error 4 in Xorg[8048000+196000]

Hm, toll, der größte Teil davon werden wohl Speicheradressen sein, aber was ist Fehler 4? Nach kurzem Suchen fand ich heraus, dass das (für einen x86-Prozessor) in der Quelltext-Datei arch/x86/mm/fault.c steht:

/*
 * Page fault error code bits
 *    bit 0 == 0 means no page found, 1 means protection fault
 *    bit 1 == 0 means read, 1 means write
 *    bit 2 == 0 means kernel, 1 means user-mode
 *    bit 3 == 1 means use of reserved bit detected
 *    bit 4 == 1 means fault was an instruction fetch
 */
#define PF_PROT     (1<<0)
#define PF_WRITE    (1<<1)
#define PF_USER     (1<<2)
#define PF_RSVD     (1<<3)
#define PF_INSTR    (1<<4)

Wir haben also die Zahl 1, bzw. 00000001 (wenn man annimmt, dass ein Byte acht Bits sind). Mittels des Operators << werden alle Bits in dem Byte um eine Stelle nach links verschoben (“geshiftet”). Das heißt:

PF_PROT  = 00000001
PF_WRITE = 00000010
PF_USER  = 00000100
PF_RSVD  = 00001000
PF_INSTR = 00010000

So, 4 entspricht im Dualsystem 100 bzw. 00000100, also PF_USER. Also ein “page fault” beim Lesen im user mode. Oder so. Jedenfalls ist (mir) die Bedeutung von Fehler 4 nun etwas klarer.

Nachtrag:

Natürlich können auch Kombinationen der obigen Werte auftreten, z. B. würde Fehler 6 im Dualsystem 110 bzw. 00000110 entsprechen, was das Ergebnis einer logischen ODER-Verknüpfung von PF_WRITE und PF_USER ist:

     00000010
ODER 00000100
-------------
     00000110

Das wäre ein page fault beim Schreiben im user mode.

Wine 1.0 und Firefox 3 veröffentlicht

On in “News” by Tblue1 comment
Tags: , ,

Jetzt heißt es für mich warten, bis der zuständige Arch Linux-Paketmaintainer seinen Firefox-Build fertiggestellt hat. ;) Warum selber downloaden/bauen, wenn das doch der Maintainer macht. :)

Gerade bei heise.de gelesen: Wine hat nach 15 Jahren Entwicklungszeit endlich Version 1.0 erreicht! Auch hier heißt es wieder warten, meine Wine-Builds brauchten immer etwas (mit einem P4 3GHz und 512MB RAM auch kein Wunder). Bei einer stabilen Version warte ich aber lieber auf die Paketmanagement-Version.

Schöner Tag heute, irgendwie.

Firefox 3 kommt

On in “News” by Tblue
Tags: , ,

Noch ca. 30 Minuten bis zur Freigabe von Firefox 3. Mal sehen, was es neues gibt, laut Presse soll Firefox ja u. a. weniger RAM verbrauchen, was mir bei 512MB RAM gelegen kommt. Der relativ hohe RAM-Verbrauch von Firefox 2 hat mich zu Opera wechseln lassen, aber wenn der neue Firefox wirklich schneller sein sollte, werde ich wohl wieder (halb ;)) zurückwechseln. Opera ist wirklich schnell und hat Features, für die man bei Firefox Erweiterungen benötigen würde. Von Opera gabs ja vor einigen Tagen auch Version 9.5 (und mit Opera Dragonfly gibt es nun auch ein Firebug-Äquivalent).

So, und nun höre ich weiter Nine Inch Nails und Korn. :)