codemix.de First mix it; Then fix it;

19Mrz/120

Logitech G930 Knacksen, Klicken, Ploppen mit nachhall

Bei meinem neuen G930 habe ich ein Knacken so ca 10 - 30 sekunden Takt, manchmal auch nach Minuten, festgestellt. Also kein Piepen oder Rauschen, in Absoluter Stille hört sich das wie ein Klicken oder komische ploppen an, laut und deutlich aber die Ursache unauffindbar.

ES IST DAS FUCK MORPHING!!!

1) Geht in die Software Steuerung
2) Klickt auf das Mikrofon,
3) Nehmt das Häkchen bei Stimmenvorschau raus

veröffentlicht unter: Hardware, Informationen keine Kommentare
19Mrz/120

TeamPass PDF funktioniert nicht

Prüft ob Ihr bei der Installation von Teampass den Tabllen Prefix weggelassen habt. Wenn Ihr das gemacht habt so funktioniert neben dem PDF auch alles andere nicht wirklich. So verschwinden z.B. Elemente nach dem Erstellen (bis zum nächsten Reload sichtbar, danach nicht mehr). Ebenso lädt die Seite bis in die Unendlichkeit und Zeigt die Items nicht an, in der Suche sind die Items jedoch Sichtbar.

Lösung ist einfach, neu installieren mit einem Tabellen Prefix z.B. "tp_".

Auch hierzu habe ich ein Issue erstellt:
https://github.com/nilsteampassnet/TeamPass/issues/68

19Mrz/120

TeamPass, keine Ameldung nach installation moeglich, cant login after install

Wenn Ihr euch nach der Installation von Tampass mit admin/admin nicht anmelden könnt so solltet Ihr euren SALT, den Ihr bei den Installation angegeben habt, überprüfen. Kurz gesagt ihr müsst Teampass neu installieren und dabei einfach alle Sonderzeichen weglassen, nutzt nur die Zeichen a-zA-Z0-9 dann sollte es klappen.

Habe ein Issue dazu erstellt:
https://github.com/nilsteampassnet/TeamPass/issues/66

10Feb/126

PHP Logging Frameworks

Davon gibt es bekanntlich viele. Aber wie schnell und Komfortabel sind diese? Meine Persönliche Einschätzung sieht so aus:

1) Simples fopen und selber loggen.
Das ist sicherlich die schnellste Variante, jedoch hat man hier keinerlei Standardisierung wenn man z.B. mit mehreren Leuten an einem Projekt arbeitet. Dazu kommt noch dass man für Email, HTML und andere Ausgabeformate selbst Hand anlegen muss. Dabei wollen uns jedoch die folgenden Frameworks helfen.

2) KLogger
Ist quasi fopen nur ein wenig abstrahiert und mit severity ergänzt, ist somit auch vom Output bereits standardisiert. Andere Ausgabe-Formate wie Email und Co. gibt es nicht.

3) Log PEAR
Sehr umfangreiches Framework mit reichhaltigen Ausgabemöglichkeiten (Mail, DB, /dev/null ). Das einzige was fehlt ist die MaxFileSize und die RollingFile Implementierung. Dennoch sehr übersichtliches und schnelles Framework. Mein Favorit, werde intensiv testen.

4) Log4php
Der Mercedes unter den Logging Framworks, hat sogar die Implementierung für MaxFileSize und die RollingFile. Was mir absolut nicht gefällt ist das die Konfiguration außerhalb des Scriptes stattfinden muss. Man kann die Konfiguration in allen erdenklichen Art und Weisen hinterlegen (XML, INI, PHP ...) aber es muss eine separates File sein das man dem Logger zum initialisieren gibt. Zum Kotzen!!! Mehrere Logger mit separaten ConfigFiles in einem Script sorgen für einen Konflikt und es logt nur der erste Logger mit. Legt man die ConfigFiles zusammen so werden alle logfiles beim Start geleert auch wenn man den Logger nicht benutzt... beim init quasi. Das sorgt für CHAOS! Ich glaube hier muss noch nach-gebessert werden und ich will die Config im PHP haben!!! Oder ich habe das Ding einfach nur noch nicht ganz gerafft... in jedem Fall ein dickes Minus entweder weil es dass nicht kann oder weil es zu kompliziert ist und es dazu keine Beispiele gibt!:twisted:

Update: Nach dem mich Christian vom Log4PHP Team aufgeklärt hat ist es sehr wohl möglich die Konfiguration mit dem einem Array in vollem Umfang zu machen und das sogar recht einfach. Siehe http://logging.apache.org/log4php/docs/appenders/file.html und dann auf PHP klicken wie Christian es in den Kommentaren beschrieben hat. ... Ich bin doch tatsächlich an der "nüchtern betrachtet" recht übersichtlichen und guten Doku gescheitert... *lol*! Danke für den Hinweis Christian, meine "hausgemachten" Probleme wären somit Geschichte!

5) Analog
Übersichtliches umfangreiches Framework, ähnlich dem Log PEAR nur langsamer :-) .

6) NmnLogger
Der OPFER - Logger schlecht hin. Funktioniert nicht auf Anhieb... Examples funktionieren nicht (direkter Aufruf ohne Apache - absolute Pfade Erforderlich - geht nicht). Nach einem QuckFix scheitert es an der mitgelieferten XML Konfig-Datei. Absolut unübersichtlich. Zwar scheint das Framework auch Email, SQL und noch ein Paar Ausgaben zu unterstützen... aber so lange es die Benutzerfreundlichkeit eines bereits gebrauchten Kondoms hat, werde ich das Zeug nicht anfassen und keine Sekunde daran verschwenden.

Benchmark
Die Bedingungen sind recht einfach, der logger soll 1000 Einträge in die Datei schreiben, dabei wird die Zeit gemessen und das war es auch schon. Der Benchmark wird von der CommandLine aufgerufen um möglichst direkt am PHP Kern zu sitzen.

Konfiguration
CPU: i5 2500K
RAM: 8GB DDR3
HDD: OCZ Vertex 3 SSD AHCI
OS: Win 7 Pro X64
PHP: 5.3.8.
Source: Download

Ergebnis

Simple_fopen: 0.022995948791504 Sek.
KLogger: 0.036224842071533 Sek.
Log_PEAR: 0.053684949874878 Sek.
Log4Php: 0.12046194076538 Sek.
Analog: 0.16966009140015 Sek.
NmnLogger: NOT WORKING! Sek.

Fazit:
Wer für alle Fälle gerüstet sein will und vermeiden möchte dass Log-Files mit der Zeit nicht überlaufen (MaxFileSize / RollingFile) der greift zu Log4PHP. Mit seinen Zahlreichen Appendern sollte für jeden was dabei sein. Wer es allerdings etwas schneller haben muss und auf ein wenig Komfort sowie MaxFileSize & RollingFile verzichten kann, der sollte sich Log (PEAR) anschauen.

In diesem Sinne: Happy Logging - und nicht vergessen "TLDR" - logt nur das was absolut notwendig ist!!!

11Nov/110

Firefox 7/8 Hacks

In der URL about:config aufrufen.

HTTP in der URL einblenden
browser.urlbar.trimURLs = false

Orion JS/CSS Editor aktivieren
devtools.editor.component = orion

veröffentlicht unter: Informationen keine Kommentare
10Nov/110

EA Support – Origin (Asozialer Verein!)

Dass nenne ich doch mal Kundensupport.

Nach dem Origin Spyware Skandal (Definition Wikipedia: wird üblicherweise Software bezeichnet, die Daten eines PC-User ohne dessen Wissen oder Zustimmung an den Hersteller der Software (Call Home) oder an Dritte sendet oder dazu genutzt wird, dem Benutzer direkt Produkte anzubieten) habe ich EA aufgefordert mir eine Auskunft nach §34 TMG über die von mir gespeicherten Daten zu geben sowie nach §13 Abs. 4. (1) die Löschung des Accounts. Ebenso forderte ich nach §13 Abs. 4. (2) die Löschung der angefallen Daten.

Reaktion von EA: keine! (Habe die Anfrage am 31.10 gestellt)
Am 31 versuchte ich auch mit dem Support zu telefonieren... "alle Leitungen sind voll... warten", habe nach einer Stunde aufgegeben!

Update: Habe heute erneut versucht mit EA zu telefonieren (Service Zeiten 10-23 Uhr).
Ansage des Automaten um Punkt 10 Uhr "Zur zeit gibt es sehr viele Anrufer... die geschätzte Wartezeit 1 Stunde!" ... ja ne ist klar!111! Aber nach 5 min ging tatsächlich ein Inder dran... ja ich konnte ihn kaum verstehen! Nach dem ich Ihn aufforderte mir die Info herauszugeben was den mit meinen Anfragen sei und Ihm erklärte worum es ging meinte da müsste ich in die Rechtsabteilung... als ich ihn bat mich durch-zustellen meinte er das gehe nicht weil die kein Telefon haben... ich lass diese Aussage jetzt mal unkommentiert... Als ich direkter wurde und sagte das ich da jetzt nicht hinschreiben werde sondern sofort jemanden sprechen will der mir die Auskunft geben kann und es sei ja ein Unding mich erst auszuspionieren und dann sich hinter solchen asozialen formellen Gebilden zu verstecken... da legt das ARSCHLOCH einfach auf!

Für mich ist es klar ICH ZAHLE EA KEINEN CENT MEHR!!! So was asoziales habe ICH nicht nötig! Und ich werde wegen hübscher Grafik und ein wenig herumballern niemals zustimmen das jemand auf meine Grundrechte scheißt!

veröffentlicht unter: Informationen keine Kommentare
25Sep/110

Coppermine direkten Zugriff auf Fotos unterbinden

Bei Coppermine ist es möglich die Bilder direkt aufzurufen ohne eingeloggt zu sein. Zwar muss man hierfür die Album ID (wird ab 10001 hochgezählt) und den Fotonamen kennen. Da die ID geraten werden kann /albums/userpics/"10001" und die meisten Kameras die Fotos mit den Dateinamen DSC.JPG speichern ist es eine leichtes Spiel einen Crawler zu bauen der einfach via Zähler alle Kombinationen durchprobiert. Sicherlich ist das unwahrscheinlich aber das Risiko ist halt da. Außerdem können die Fotos dann auch aus dem Browser Verlauf direkt aufgerufen werden. Um das zu vermeiden habe ich an coppermine eine kleine Modifikation vorgenommen.
Inspiriert durch den Beitrag: "Hier".

Zunächst erstellen Sie im Ordner "albums" eine ".htaccess" Datei mit folgendem Inhalt.

Order Allow,Deny
Deny from All

Anschließend öffnen Sie die Datei "include/functions.inc.php" und suchen die Funktion "get_pic_url". Am ende dieser Funktion ersetzen Sie bitte

return $pic_row['url'];

gegen

return "getimage.php?file=".base64_encode($pic_row['url']);

nun erstellen Sie die Datei "getimage.php" in dem Haupt-Verzeichnis von Coppermine mit folgendem Inhalt:

<?php
/* getimage.php - Restrict access to images to logged in users only */

define('IN_COPPERMINE', true);

require('include/init.inc.php');

if (USER_ID) {
    $path = null;
    if (isset($superCage->get->_source['file'])) {
        $path = base64_decode($superCage->get->_source['file']);
    } 

    if(!file_exists($path)) {
        noAccess();
    }

    if(startsWith($path, $CONFIG['fullpath'])) {
        $file = basename($path);
        $ext = substr($file, strrpos($file, ".") + 1);
        $allowed_filetypes = $CONFIG['allowed_doc_types'] . '/' . $CONFIG['allowed_img_types'] . '/' . $CONFIG['allowed_mov_types']  . '/' . $CONFIG['allowed_snd_types'];
        if(stristr($allowed_filetypes, $ext)) {
            $mime = getMime(strtolower($ext));
            header('Content-type: ' . $mime);
            readfile($path);
        }
    } else {
        noAccess();
    }  

} else {
    $login_uri = getLoginUrl($superCage->server->_source) . '&referer=getimage.php%3Ffile%3D'.$superCage->get->_source['file'];
    header('Location: ' . $login_uri);

}

function getMime($file_ext) {
    $mime = array(
        '3dm'    => 'x-world/x-3dmf',                 // 3DMF-Dateien
        '3dmf'   => 'x-world/x-3dmf',                 // 3DMF-Dateien
        'ai'     => 'application/postscript',         // Adobe PostScript-Dateien
        'aif'    => 'audio/x-aiff',                   // AIFF-Sound-Dateien
        'aifc'   => 'audio/x-aiff',                   // AIFF-Sound-Dateien
        'aiff'   => 'audio/x-aiff',                   // AIFF-Sound-Dateien
        'asd'    => 'application/astound',            // Astound-Dateien
        'asn'    => 'application/astound',            // Astound-Dateien
        'au'     => 'audio/basic',                    // Sound-Dateien
        'avi'    => 'video/x-msvideo',                // Microsoft AVI-Dateien
        'bcpio'  => 'application/x-bcpio',            // BCPIO-Dateien
        'bin'    => 'application/octet-stream',       // Ausführbare Dateien
        'bin'    => 'application/x-macbinary',        // Macintosh Binärdateien
        'cab'    => 'application/x-shockwave-flash',  // Flash Shockwave-Dateien
        'cdf'    => 'application/x-netcdf',           // Unidata CDF-Dateien
        'chm'    => 'application/mshelp',             // Microsoft Windows Hilfe Dateien
        'cht'    => 'audio/x-dspeeh',                 // Sprachdateien
        'class'  => 'application/octet-stream',       // Ausführbare Dateien
        'cod'    => 'image/cis-cod',                  // CIS-Cod-Dateien
        'com'    => 'application/octet-stream',       // Ausführbare Dateien
        'cpio'   => 'application/x-cpio',             // CPIO-Dateien
        'csh'    => 'application/x-csh',              // C-Shellscript-Dateien
        'css'    => 'text/css',                       // CSS Stylesheet-Dateien
        'csv'    => 'text/comma-separated-values',    // kommaseparierte Datendateien
        'dcr'    => 'application/x-director',         // Macromedia Director-Dateien
        'dir'    => 'application/x-director',         // Macromedia Director-Dateien
        'dll'    => 'application/octet-stream',       // Ausführbare Dateien
        'doc'    => 'application/msword',             // Microsoft Word Dateien
        'dot'    => 'application/msword',             // Microsoft Word Dateien
        'dus'    => 'audio/x-dspeeh',                 // Sprachdateien
        'dvi'    => 'application/x-dvi',              // DVI-Dateien
        'dwf'    => 'drawing/x-dwf',                  // Drawing-Dateien
        'dwg'    => 'application/acad',               // AutoCAD-Dateien (nach NCSA)
        'dxf'    => 'application/dxf',                // AutoCAD-Dateien (nach CERN)
        'dxr'    => 'application/x-director',         // Macromedia Director-Dateien
        'eps'    => 'application/postscript',         // Adobe PostScript-Dateien
        'es'     => 'audio/echospeech',               // Echospeed-Dateien
        'etx'    => 'text/x-setext',                  // SeText-Dateien
        'evy'    => 'application/x-envoy',            // Envoy-Dateien
        'exe'    => 'application/octet-stream',       // Ausführbare Dateien
        'fh4'    => 'image/x-freehand',               // Freehand-Dateien
        'fh5'    => 'image/x-freehand',               // Freehand-Dateien
        'fhc'    => 'image/x-freehand',               // Freehand-Dateien
        'fif'    => 'image/fif',                      // FIF-Dateien
        'gif'    => 'image/gif',                      // GIF-Dateien
        'gtar'   => 'application/x-gtar',             // GNU tar-Archivdateien
        'gz'     => 'application/gzip',               // GNU Zip-Dateien
        'hdf'    => 'application/x-hdf',              // HDF-Dateien
        'hlp'    => 'application/mshelp',             // Microsoft Windows Hilfe Dateien
        'hqx'    => 'application/mac-binhex40',       // Macintosh Binärdateien
        //'htm'    => 'application/xhtml+xml',          // XHTML-Dateien
        'htm'    => 'text/html',                      // HTML-Dateien
        //'html'   => 'application/xhtml+xml',          // XHTML-Dateien
        'html'   => 'text/html',                      // HTML-Dateien
        'ico'    => 'image/x-icon',                   //  Favoriten-Icons)
        'ief'    => 'image/ief',                      // IEF-Dateien
        'jpe'    => 'image/jpeg',                     // JPEG-Dateien
        'jpeg'   => 'image/jpeg',                     // JPEG-Dateien
        'jpg'    => 'image/jpeg',                     // JPEG-Dateien
        //'js'     => 'application/x-javascript',       // serverseitige JavaScript-Dateien
        'js'     => 'text/javascript',                // JavaScript-Dateien
        'latex'  => 'application/x-latex',            // LaTeX-Quelldateien
        'man'    => 'application/x-troff-man',        // TROFF-Dateien mit MAN-Makros (Unix)
        'mbd'    => 'application/mbedlet',            // Mbedlet-Dateien
        'mcf'    => 'image/vasa',                     // Vasa-Dateien
        'me'     => 'application/x-troff-me',         // TROFF-Dateien mit ME-Makros (Unix)
        'me'     => 'application/x-troff-ms',         // TROFF-Dateien mit MS-Makros (Unix)
        'mid'    => 'audio/x-midi',                   // MIDI-Dateien
        'midi'   => 'audio/x-midi',                   // MIDI-Dateien
        'mif'    => 'application/mif',                // FrameMaker Interchange Format Dateien
        'mif'    => 'application/x-mif',              // FrameMaker Interchange Format Dateien
        'mov'    => 'video/quicktime',                // Quicktime-Dateien
        'movie'  => 'video/x-sgi-movie',              // Movie-Dateien
        'mp2'    => 'audio/x-mpeg',                   // MPEG-Dateien
        'mpe'    => 'video/mpeg',                     // MPEG-Dateien
        'mpeg'   => 'video/mpeg',                     // MPEG-Dateien
        'mpg'    => 'video/mpeg',                     // MPEG-Dateien
        'nc'     => 'application/x-netcdf',           // Unidata CDF-Dateien
        'nsc'    => 'application/x-nschat',           // NS Chat-Dateien
        'oda'    => 'application/oda',                // Oda-Dateien
        'pbm'    => 'image/x-portable-bitmap',        // PBM Bitmap Dateien
        'pdf'    => 'application/pdf',                // Adobe PDF-Dateien
        'pgm'    => 'image/x-portable-graymap',       // PBM Graymap Dateien
        'php'    => 'application/x-httpd-php',        // PHP-Dateien
        'phtml'  => 'application/x-httpd-php',        // PHP-Dateien
        'png'    => 'image/png',                      // PNG-Dateien
        'pnm'    => 'image/x-portable-anymap',        // PBM Anymap Dateien
        'pot'    => 'application/mspowerpoint',       // Microsoft Powerpoint Dateien
        'ppm'    => 'image/x-portable-pixmap',        // PBM Pixmap Dateien
        'pps'    => 'application/mspowerpoint',       // Microsoft Powerpoint Dateien
        'ppt'    => 'application/mspowerpoint',       // Microsoft Powerpoint Dateien
        'ppz'    => 'application/mspowerpoint',       // Microsoft Powerpoint Dateien
        'ps'     => 'application/postscript',         // Adobe PostScript-Dateien
        'ptlk'   => 'application/listenup',           // Listenup-Dateien
        'qd3'    => 'x-world/x-3dmf',                 // 3DMF-Dateien
        'qd3d'   => 'x-world/x-3dmf',                 // 3DMF-Dateien
        'qt'     => 'video/quicktime',                // Quicktime-Dateien
        'ra'     => 'audio/x-pn-realaudio',           // RealAudio-Dateien
        'ram'    => 'audio/x-pn-realaudio',           // RealAudio-Dateien
        'ras'    => 'image/cmu-raster',               // CMU-Raster-Dateien
        'rgb'    => 'image/x-rgb',                    // RGB-Dateien
        'roff'   => 'application/x-troff',            // TROFF-Dateien (Unix)
        'rpm'    => 'audio/x-pn-realaudio-plugin',    // RealAudio-Plugin-Dateien
        'rtc'    => 'application/rtc',                // RTC-Dateien
        //'rtf'    => 'application/rtf',                // Microsoft RTF-Dateien
        'rtf'    => 'text/rtf',                       // Microsoft RTF-Dateien
        'rtx'    => 'text/richtext',                  // Richtext-Dateien
        'sca'    => 'application/x-supercard',        // Supercard-Dateien
        'sgm'    => 'text/x-sgml',                    // SGML-Dateien
        'sgml'   => 'text/x-sgml',                    // SGML-Dateien
        'sh'     => 'application/x-sh',               // Bourne Shellscript-Dateien
        'shar'   => 'application/x-shar',             // Shell-Archivdateien
        //'shtml'  => 'application/xhtml+xml',          // XHTML-Dateien
        'shtml'  => 'text/html',                      // HTML-Dateien
        'sit'    => 'application/x-stuffit',          // Stuffit-Dateien
        'smp'    => 'application/studiom',            // Studiom-Dateien
        'snd'    => 'audio/basic',                    // Sound-Dateien
        'spc'    => 'text/x-speech',                  // Speech-Dateien
        'spl'    => 'application/futuresplash',       // Flash Futuresplash-Dateien
        'spr'    => 'application/x-sprite',           // Sprite-Dateien
        'sprite' => 'application/x-sprite',           // Sprite-Dateien
        'src'    => 'application/x-wais-source',      // WAIS Quelldateien
        'stream' => 'audio/x-qt-stream',              // Quicktime-Streaming-Dateien
        'sv4cpio'=> 'application/x-sv4cpio',          // CPIO-Dateien
        'sv4crc' => 'application/x-sv4crc',           // CPIO-Dateien mit CRC
        'swf'    => 'application/x-shockwave-flash',  // Flash Shockwave-Dateien
        't'      => 'application/x-troff',            // TROFF-Dateien (Unix)
        'talk'   => 'text/x-speech',                  // Speech-Dateien
        'tar'    => 'application/x-tar',              // tar-Archivdateien
        'tbk'    => 'application/toolbook',           // Toolbook-Dateien
        'tcl'    => 'application/x-tcl',              // TCL Scriptdateien
        'tex'    => 'application/x-tex',              // TeX-Dateien
        'texi'   => 'application/x-texinfo',          // Texinfo-Dateien
        'texinfo'=> 'application/x-texinfo',          // Texinfo-Dateien
        'tif'    => 'image/tiff',                     // TIFF-Dateien
        'tiff'   => 'image/tiff',                     // TIFF-Dateien
        'tr'     => 'application/x-troff',            // TROFF-Dateien (Unix)
        'troff'  => 'application/x-troff-man',        // TROFF-Dateien mit MAN-Makros (Unix)
        //'troff'  => 'application/x-troff-me',         // TROFF-Dateien mit ME-Makros (Unix)
        //'troff'  => 'application/x-troff-ms',         // TROFF-Dateien mit MS-Makros (Unix)
        'tsi'    => 'audio/tsplayer',                 // TS-Player-Dateien
        'tsp'    => 'application/dsptype',            // TSP-Dateien
        'tsv'    => 'text/tab-separated-values',      // tabulator-separierte Datendateien
        'txt'    => 'text/plain',                     // reine Textdateien
        'ustar'  => 'application/x-ustar',            // tar-Archivdateien (Posix)
        'viv'    => 'vivo',                           // Vivo-Dateien
        'vivo'   => 'vivo',                           // Vivo-Dateien
        'vmd'    => 'application/vocaltec-media-desc',// Vocaltec Mediadesc-Dateien
        'vmf'    => 'application/vocaltec-media-file',// Vocaltec Media-Dateien
        'vox'    => 'audio/voxware',                  // Vox-Dateien
        'vts'    => 'workbook/formulaone',            // FormulaOne-Dateien
        'vtts'   => 'workbook/formulaone',            // FormulaOne-Dateien
        'wav'    => 'audio/x-wav',                    // WAV-Dateien
        'wbmp'   => 'wbmp',                           // Bitmap-Dateien (WAP)
        'wml'    => 'wml',                            // WML-Dateien (WAP)
        'wmlc'   => 'wmlc',                           // WMLC-Dateien (WAP)
        'wmls'   => 'wmlscript',                      // WML-Scriptdateien (WAP)
        'wmlsc'  => 'wmlscriptc',                     // WML-Script-C-dateien (WAP)
        'wrl'    => 'model/vrml',                     // Visualisierung virtueller Welten (VRML)
        //'wrl'    => 'x-world/x-vrml',                 // Visualisierung virtueller Welten (VRML) (veralteter MIME-Typ, aktuell ist model/vrml)
        'xbm'    => 'image/x-xbitmap',                // XBM-Dateien
        'xhtml'  => 'application/xhtml+xml',          // XHTML-Dateien
        'xla'    => 'application/msexcel',            // Microsoft Excel Dateien
        'xls'    => 'application/msexcel',            // Microsoft Excel Dateien
        //'xml'    => 'application/xml',                // XML-Dateien
        'xml'    => 'text/xml',                       // XML-Dateien
        'xpm'    => 'image/x-xpixmap',                // XPM-Dateien
        'xwd'    => 'image/x-windowdump',             // X-Windows Dump
        'z'      => 'application/x-compress',         // zlib-komprimierte Dateien
        'zip'    => 'application/zip',                // ZIP-Archivdateien
    );

    return $mime[$file_ext];
}

function getLoginUrl($server) {
    $http = ($server['SERVER_PORT'] == '443') ? 'https://' :  'http://';
    $http .= $server['HTTP_HOST'] . $server['SCRIPT_NAME'];
    return dirname($http) . '/login.php?force_login=1';
}

function noAccess() {
    header('Content-type: image/png');
    readfile('images/no_access.png');
    exit();
}

function startsWith($haystack, $needle) {
    if(substr($haystack, 0, strlen($needle)) == $needle) {
        return true;
    }
    return false;
}

Nun wir jeder Versuch anonym ein Bild abzurufen mit einer Login Aufforderung unterbunden. Ist man registriert und die gewünschte Datei existiert nicht so bekommt man das Bild 'images/no_access.png' zu sehen. Es ist eich überlassen hierfür das richtige Bild zu finden :-) .

PS: Ich empfehle unnötige Mime-Types auszukommentieren um Performance zu erhöhen und Speicherbedarf zu reduzieren. Sicherlich ist der Performance-Gewinn nicht die Welt aber Kleinvieh macht ja auch Mist ;-) !

veröffentlicht unter: Informationen keine Kommentare
15Jul/110

CodeIgniter 2.0.x & Smarty 3.0.x

Es hat sich ja einiges getan bei diesen beiden tollen Libs!
Damit Ihr auch unter CodeIgniter 2.0.2 Smarty nutzen könnt habe ich für Euch Smarty in CI eingebunden. Dieses mal sind die Konfigurationen von Smarty (durch CI) sehr minimalistisch ausgefallen, wer Smarty exklusiver konfigurieren möchte kann jedoch die Konfiguration in der "Smarty.class.php" direkt vornehmen. Das ganze gibt es hier natürlich als vollständiges Package zum Download.

Was Ihr wissen müsst: Das ganze funktioniert out of the Box. Als "templates_c" Ordner ist der "application/cache" von CI angegeben. Als "templates" Ordner ist "application/views" voreingestellt. Smarty könnt ihr jederzeit durch das setzen von $config['smarty'] = FALSE; in der "application/config/config.php" abschalten. Wie CI oder Smarty im einzelnen funktioniert, solltet Ihr wissen ;-) !

Usage :

//Beispiel aus application/controllers/welcome.php
        $newdata = array(
            'username'  => 'John Doe',
            'email'     => 'johndoe@some-site.com',
            'logged_in' => TRUE
        );

        $this->smarty->assign('data', $newdata);
        $this->smarty->display('welcome_message.tpl');

Download: codeigniter_2.0.2_und_Smarty_3.0.8.zip

Easy as can be! Have Phun!
PS: Wer mehr zu der Implementierung wissen will kann mir gerne eine PN schicken.

veröffentlicht unter: PHP keine Kommentare
9Mrz/110

Windows Auto Shutdown / Herunterfahren (PowerSave)

Dieses Tool ist speziell für Home Server ausgelegt und erweist mir einen Bären-Dienst beim Strom sparen. Die "normalen" Tools da draußen achten auf die User Idle Time und auf die CPU Load aber keines davon berücksichtigt die Netzwerkübertragung bzw. laufende Programme.

Szenario 1: Sie müsse eine DVD Uploaden, bei 80KB/s ist sowohl die CPU Auslastung bei 0 und bei Homeserver ist die User Idle Time fast immer erreicht da es wie der Name schon sagt, ein Server ist. Das Resultat, keine Last auf der CPU also wird die Action (wie z.B. Standby, Herunterfahren oder sonst was) ausgeführt, obwohl der Upload noch läuft.

Szenario 2: Jeden Abend läuft ein Sicherungs-Job. Sie haben das Bios so eingestellt dass der Home Server Automatisch hochfährt und die Sicherung startet. Nun soll er nach dem verrichteten Dienst wieder herunterfahren. Aber wie stellen Sie das fest ob der Job fertig ist oder ob dieser auf irgendetwas wartet oder gar fehlgeschlagen ist. An der CPU Auslastung oder am Netzwerk-Traffic?

Genau hier setzt das Tool an. Hier kann der Schwellenwert für Die CPU Auslastung, Netzwerkauslastung, User Idle Time und laufende Prozesse definiert werden die in der Kombination ein Event auslösen wodurch der PC z.B. in den Standby Modus versetzt werden kann.


Bugs, konstruktive Kritik und Anregungen sind gewünscht :-) .
Enjoy!

Download: PowerSave.zip

9Mrz/110

Parent View Ganerator for DB2 iSeries (AS/400)

Wer auf der System i viel mit SQL und vor allem mit SQL Views zu tun hat, wird eines festgestellt haben. Sobald man eine View löscht, werden alle abhängige Views ebenfalls gelöscht. Das führt unter Anderem dazu das wenn mehrere Entwickler an einem System arbeiten, der eine dem Anderen, die Views ständig weg löscht und dass ohne es zu merken. Nun was auf dem Entwicklungssystem ärgerlich ist, nimmt im Produktivsystem ganz andere Ausmaße an.

Um dieser Situation Herr zu werden habe ich ein kleines Tool geschrieben was die Abhängigkeiten der Views analysiert und die entsprechenden CREATE Statements generiert unter Berücksichtigung des Systemnamens generiert.

Das Tool ist zurzeit noch im Beta-Stadium. Ich bitte euch daher umsichtig zu sein und es noch nicht im produktivem Betrieb einzusetzen!

@TODO
- MQT's werden noch nicht berücksichtigt
- Indexe

Bei Bugs bitte ich um Feedback.

Download: ParentViewGenerator.Beta.1.zip