Mail-Verschlüsselung bequem und kostenlos mit S/MIME

Ein nicht zu unterschätzender Vorteil von verschlüsselter E-Mail-Kommunikation mit S/MIME ist die relative simple Einrichtung. Man muss nicht einmal Geld ausgeben und Zertifikate von anerkannten Zertifizierungsstellen zu erhalten. Unter https://www.startssl.com/ kann man kostenlos S/MIME Client-Zertifikate erstellen lassen.

Die meisten E-Mail-Clients unterstützen von Haus aus S/MIME, was die Nutzung von S/MIME noch einmal deutlich vereinfacht. Wenn man nun mit den entsprechenden S/MIME Zertifikaten seine E-Mails signiert ist jeder Empfänger fortan in der Lage anhand des zur Signierung genutzten öffentlichen Schlüssels alle Nachrichten an ihre E-Mail-Adresse zu verschlüsseln. In Apple Mail passiert dies z.B. automatisch.

Eine gute Anleitung für die Einrichtung von S/MIME in Apple Mail und Thunderbird hat die t3n bereitgestellt:

http://t3n.de/news/mails-verschlusseln-eigentlich-482381/

 

Google+

Webentwicklung bequem mit Chrome und dem Netbeans-Connector

Klassisches Webdevelopment bedeutete früher ständiges wechseln zwischen IDE/Editor. Änderungen im Code schreiben, in den Browser wechseln, Seite neu laden und Änderungen prüfen.

Später kam dann die Möglichkeit hinzu mit Firebug im Firefox oder dann später auch in Chrome mit den Chrome Developer Tools den DOM direkt zu manipulieren und wenn die Änderungen gut waren, diese heraus zu kopieren und händisch in das ursprüngliche Dokument einzupflegen und dann persistent zu speichern.

Mit den Netbeans Connector wurde nun die Möglichkeit geschaffen Änderungen in den Chrome Developer Tools von Netbeans übernehmen zu lassen und direkt nach Änderung persistent über Netbeans als IDE zu speichern. Eine sehr große Erleichterung, welche sehr viel Zeit in der Frontend-Entwicklung einsparen kann.

Bildschirmfoto 2015-01-16 um 16.06.25

Nach der Installation der Chrome-Extension Netbeans Connector kann dieser über Netbeans gestartet werden, in dem man die entsprechende Browser-Einstellung in Netbeans wählt

Bildschirmfoto 2015-01-16 um 16.16.47

und das Projekt startet. In diesem Fall habe ich ein leeres HTML5-Projekt angelegt und dieses dann gestartet.

Bildschirmfoto 2015-01-16 um 16.22.41

Neben der Möglichkeit die Änderungen in Netbeans die Änderungen vorzunehmen und beim speichern die Änderungen direkt durch ein von Netbeans ausgelöstes Neuladen der Seite zu begutachten gibt es noch die Möglichkeit nun die Chrome Developer Tools zu starten, dort die Änderungen vorzunehmen und Netbeans wird die Änderungen registrieren und für uns wegschreiben.

Bildschirmfoto 2015-01-16 um 16.28.22

Google+

Title und Meta-Description in Extbase setzen

Gerade kürzlich stand ich vor dem Problem, dass ich in einem Extbase-Plugin, welches non-cacheable sein musste, den Title-Tag und die Meta-Description dynanisch aus der Extension setzen musste.
Der häufig genutzter Ansatz den Title und die Description im GLOBALS-Array zu überschreiben

$GLOBALS['TSFE']->page['title'] = $newTitle;
$GLOBALS['TSFE']->indexedDocTitle = $newTitle;
$GLOBALS['TSFE']->page['description'] = $newDescription;

was in dem Fall eines nicht-cachebaren Plugins leider nicht funktioniert. Daher habe ich dann einen eher einfachen aber effektiven Ansatz verfolgt. In den Projekt wird die seo_basics-Extension genutzt, also deaktivieren wir alle Head-Tags der seo_basics-Extensin im Typoscript-Template der entsprechenden Seite:

plugin.tx_seobasics >

Nun werden kein Title und keine Meta-Description mehr in den Head gerendert und wir können diese in unserer Extension „händisch“ mittels der addAddtionalHeaderData-Methode in unserem Controller neu setzen:

$title = '<title>' . $myNewTitle . '</title>';
$metaDescription = '<meta name="description" content="' .  $myNewMetaDescription . '">';
$this->response->addAdditionalHeaderData($title . PHP_EOL . $metaDescription);
Google+

TYPO3-Planer (scheduler) – crontab installieren

Um den Planer in TYPO3 nutzen zu können, müssen zwei Voraussetzungen erfüllt sein:

  • Es muss im TYPO3-Backend ein User mit dem Namen _cli_scheduler angelegt werden. Passwort ist dabei völlig egal, darf nur nicht leer sein.

Screenshot 2014-10-09 13.56.05

  • Es muss ein cronjob auf eurem Server angelegt werden, dies erfolgt bei Shell-Zugriff am einfachsten über
    root@server:~# crontab -u www-data -e

    diese solltet ihr für Benutzer des Webservers (in der Regel www-data) anlegen wie im Beispiel um Rechte-Problemen vorzubeugen.
    Dann kann der cronjob eingetragen werden:

    * * * * * /usr/bin/php /pfad_zur_typo3_installation/typo3/cli_dispatch.phpsh scheduler > /dev/null 2>&1

Nun speichern  und fortan wird jede Minute nach auszuführenden Tasks im Planer geschaut und diese bei Fälligkeit ausgeführt.

Google+

TYPO3 6.2 – Environment Variable TYPO3_CONTEXT nutzen

Seit der Version 6.2 gibt es in TYPO3 die Möglichkeit eine vordefinierte Environment-Variable TYPO3_CONTEXT zur Unterscheidung zwischen der Development-, Testing- und Production-Umgebung zu nutzen. Diese kann für eigene Zwecke in PHP aufgefangen werden, z.B. für Unterscheidungen in der Konfiguration, oder kann auch im Typoscript genutzt werden um Einstellungen festzulegen.

[applicationContext = Development*]
config.no_cache=1
[global]

Im TYPO3-Backend gibt es in der Development-Umgebung über den wohlbekannten Blitz zusätzlich die System-Caches zu leeren.
System-Caches über den "Blitz" leeren
Gesetzt wird Environment-Variable im Apache in der VirtualHost-Section mit

SetEnv TYPO3_CONTEXT "Development"

und in einer NGINX-PHP5-FPM-Umgebung am Besten über die fastcgi_params in location-Section für die PHP-Verarbeitung mit

        
location ~ \.php$ {
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param TYPO3_CONTEXT Development;
}
Google+

Thinkpad + Ubuntu = tlp

Ubuntu läuft inzwischen auf so ziemlich allen Thinkpads out-of-the-box, egal ob auf meinem alten Z61m, das letzte von IBM entwickelte Modell, oder meinem aktuell genutzten T510i. Bis auf die Qualcomm Gobi UMTS-Karte und das zugehörige GPS-Modul hat alles direkt funktioniert.

Aber nur das alles direkt funktioniert heißt natürlich nicht, dass man dies nicht noch optimieren kann. Dank linrunner können einige Funktionen die wir unter Windows kennen auch unter Linux/Ubuntu abgebildet werden. Dazu hat linrunner die Erweiterung tlp ins Leben gerufen, ein tolles Tool zu dem es auch einen ausgiebigen Artikel im Thinkpad-Wiki gibt.

Installiert wird tlp unter Ubuntu am Besten über das PPA, für andere Distributionen gibt es Anleitungen im Thinkpad-Wiki:

sudo add-apt-repository -y ppa:linrunner/tlp
sudo apt-get update
sudo apt-get install tlp tlp-rdw tp-smapi-dkms

Um die Ladeschwellen für den Akku einstellen zu können muss bei den neueren Modellen (Modellnummer dreistellig >= 20 am Ende) noch folgendes Paket installiert werden:

sudo apt-get install acpi-call-tools

Nun können die Einstellung für unsere Bedürfnisse anpassen. Die Konfigurationsdatei ist sehr gut dokumentiert, so dass eigentlich keine Fragen offen bleiben sollten. Ich nutze tlp z.B. um den Akku erst ab 80% Ladung laden zu lassen und im Akku-Betrieb wird mit tlp die CPU auf max. 1,6MHz gedrosselt von möglichen 2,27Mhz um die Akku-Lebensdauer zu erhöhen.

Vielen Dank an linrunner an dieser Stelle für dieses großartige Tool. 🙂

Google+

Redis als Cache-Backend in TYPO3

Das Caching-Framework bietet seit TYPO3 4.5 viele Möglichkeiten das Caching zu optimieren.

Eine, wie ich finde, sehr gute Möglichkeit, gerade wenn man mehrere TYPO3-Installationen auf einem Server versammelt sind, ist die Möglichkeit Teile des Cache in Redis abzulegen.

Durch die Möglichkeit in Redis viele verschiedene Datenbanken anzulegen werden die Caches sauber voneinander getrennt und man kann die Vorteile einer RAM-basierten Datenbank zu nutzen. Dies ist für mich ein entscheidender Vorteil gegenüber Memcache und lässt sich für die verschiedenen Cache-Backends nutzen.

Für TYPO3 < 6.2

$TYPO3_CONF_VARS[‚SYS‘][‚caching‘][‚cacheConfigurations‘][‚cache_pages‘] = array(
    ‚backend‘ => ‚t3lib_cache_backend_RedisBackend‘,
    ‚options‘ => array(
        ‚defaultLifetime‘ => 86400,
        ‚database‘ => 0
        )
    );
$TYPO3_CONF_VARS[‚SYS‘][‚caching‘][‚cacheConfigurations‘][‚cache_pagesection‘] = array(
    ‚backend‘ => ‚t3lib_cache_backend_RedisBackend‘,
    ‚options‘ => array(
        ‚defaultLifetime‘ => 86400,
        ‚database‘ => 1
        )
    );
$TYPO3_CONF_VARS[‚SYS‘][‚caching‘][‚cacheConfigurations‘][‚cache_hash‘] = array(
    ‚backend‘ => ‚t3lib_cache_backend_RedisBackend‘,
    ‚options‘ => array(
        ‚defaultLifetime‘ => 86400,
        ‚database‘ => 2
        )
    );
$TYPO3_CONF_VARS[‚SYS‘][‚caching‘][‚cacheConfigurations‘][‚extbase_object‘] = array(
    ‚backend‘ => ‚t3lib_cache_backend_RedisBackend‘,
    ‚options‘ => array(
        ‚defaultLifetime‘ => 86400,
        ‚database‘ => 3
        )
    );
$TYPO3_CONF_VARS[‚SYS‘][‚caching‘][‚cacheConfigurations‘][‚extbase_reflection‘] = array(
    ‚backend‘ => ‚t3lib_cache_backend_RedisBackend‘,
    ‚options‘ => array(
        ‚defaultLifetime‘ => 86400,
        ‚database‘ => 4
        )
    );

Für TYPO3 >= 6.2 sieht das dann folgendermaßen aus:

$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_pages']['backend'] = 'TYPO3\\CMS\\Core\\Cache\\Backend\\RedisBackend',
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_pages']['options'] = array(
        'defaultLifetime' => 86400,
        'database' => 0
        );
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_pagesection']['backend'] = 'TYPO3\\CMS\\Core\\Cache\\Backend\\RedisBackend',
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_pagesection']['options'] = array(
        'defaultLifetime' => 86400,
        'database' => 1
        );
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_hash']['backend'] = 'TYPO3\\CMS\\Core\\Cache\\Backend\\RedisBackend',
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_hash']['options'] = array(
        'defaultLifetime' => 86400,
        'database' => 2
        );
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['extbase_object']['backend'] = 'TYPO3\\CMS\\Core\\Cache\\Backend\\RedisBackend',
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['extbase_object']['options'] = array(
        'defaultLifetime' => 86400,
        'database' => 3
        );
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['extbase_reflection']['backend'] = 'TYPO3\\CMS\\Core\\Cache\\Backend\\RedisBackend',
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['extbase_reflection']['options'] = array(
        'defaultLifetime' => 86400,
        'database' => 4
        );

oder zum direkten Einfügen in das caching-Array in der LocalConfiguration.php:

'cacheConfigurations' => array(
    'cache_pages' => array(
        'backend' => 'TYPO3\\CMS\\Core\\Cache\\Backend\\RedisBackend',
        'options' => array(
            'defaultLifetime' => 86400,
            'database' => 0
        )
    ),
    'cache_pagesection' => array(
        'backend' => 'TYPO3\\CMS\\Core\\Cache\\Backend\\RedisBackend',
        'options' => array(
            'defaultLifetime' => 86400,
            'database' => 1
        )
    ),        
    'cache_hash' => array(
        'backend' => 'TYPO3\\CMS\\Core\\Cache\\Backend\\RedisBackend',
        'options' => array(
            'defaultLifetime' => 86400,
            'database' => 2
        )
    ),        
    'extbase_object' => array(
        'backend' => 'TYPO3\\CMS\\Core\\Cache\\Backend\\RedisBackend',
        'options' => array(
            'defaultLifetime' => 86400,
            'database' => 3
        )
    ),        
    'extbase_reflection' => array(
        'backend' => 'TYPO3\\CMS\\Core\\Cache\\Backend\\RedisBackend',
        'options' => array(
            'defaultLifetime' => 86400,
            'database' => 4
        )                                                                                                                             
    )
)

In dieser Beispielkonfiguration wurde die Lebensdauer für alle Caches exemplarisch auf 24h gestellt, das kann man natürlich für die eigenen Bedürfnisse noch optimieren.

Das Redis Backend hat in meinem Fall die Auslierung der gecachten Seiten noch einmal um über 100ms beschleunigt. Klingt nach nicht sehr viel, bedeutet aber in meinem Fall einen Performanceschub um über 30%.

http://redis.io
http://docs.typo3.org/typo3cms/CoreApiReference/CachingFramework/Configuration/Index.html

Google+

Caches deaktivieren in der Entwicklung TYPO3

Um die Caches bei der Entwicklung von TYPO3-Extensions zu deaktivieren reicht ein einfaches

config.no_cache = 1

im Typoscript-Template zumeist nicht aus. Es empfiehlt sich zusätzlich noch das Caching für die inkludierten Typoscript-Templates in der User-TS-Config des eingeloggten Backend-Users zu deaktivieren:

admPanel.override.tsdebug.forceTemplateParsing = 1 

als auch die Cache-Backend des Caching-Framework auf das NullBackend zu setzen:

$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_pages'] = array(
    'frontend' => 't3lib_cache_frontend_VariableFrontend',
    'backend' => 't3lib_cache_backend_NullBackend',
    'options' => array(
        )
    );
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_pagesection'] = array(
    'frontend' => 't3lib_cache_frontend_VariableFrontend',
    'backend' => 't3lib_cache_backend_NullBackend',
    'options' => array(
        )
    );
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_hash'] = array(
    'frontend' => 't3lib_cache_frontend_StringFrontend',
    'backend' => 't3lib_cache_backend_NullBackend',
    'options' => array(
        )
    );
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['extbase_object'] = array(
    'frontend' => 't3lib_cache_frontend_VariableFrontend',
    'backend' => 't3lib_cache_backend_NullBackend',
    'options' => array(
        )
    );
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['extbase_reflection'] = array(
    'frontend' => 't3lib_cache_frontend_VariableFrontend',
    'backend' => 't3lib_cache_backend_NullBackend',
    'options' => array(
        )
    );

Ergänzung:

Seit TYPO3 6.2 wird die Namespace-Notation verwendet:

$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_pages']['backend'] = 'TYPO3\\CMS\\Core\\Cache\\Backend\\NullBackend';
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_pagesection']['backend'] = 'TYPO3\\CMS\\Core\\Cache\\Backend\\NullBackend';
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_hash']['backend'] = 'TYPO3\\CMS\\Core\\Cache\\Backend\\NullBackend';
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['extbase_object']['backend'] = 'TYPO3\\CMS\\Core\\Cache\\Backend\\NullBackend';
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['extbase_reflection']['backend'] = 'TYPO3\\CMS\\Core\\Cache\\Backend\\NullBackend';
Google+