Das Ziel sind Screenshots von Webseiten, mit einem Batch Script automatisiert und kontrolliert. Keep it simple & stupid.

Die Wichtigste ist natürlich das Anfertigen der Screenshots. Das ließe sich vermutlich auch mit pure Batch erledigen, ich fand allerdings folgende Utilities besonders einfach und optimal für diesen Zweck: CutyCapt und IECapt. Beide Tools bestehen nur aus einer kleinen .exe Datei und sind kommandozeilenbasiert, optimal für eine Batch Benutzung.
CutyCapt fertigt Website Screenshots mit der WebKit Engine (Chrome und Opera nutzen diese Engine) an, IECapt nutzt die Engine des Internet Explorers.

Die Anwendung ist relativ einfach, über die CMD. Ein Beispiel:

CutyCapt.exe --url=http://www.spiegel.de/ --out=spiegel.png --min-width=1100 --min-height=800 --delay=1000

Wenn die Webseite besonders lang ist so wird sie komplett aufgenommen. Die Parameter steuern das Verhalten der Engine, beim IE gibt es nicht ganz so viele Möglichkeiten.

Das kann man jetzt in einem netten Script verpacken und schon lassen sich beliebige Webseiten mit einem Doppelklick fotografieren. Versehen mit Logging, Mailer und ein paar Kleinigkeiten, fertig.

Hier mein Script, welches 2 Screenshots der Fritz Box aufnimmt, in einem Unterordner speichert, eine Mail schickt und alles loggt, so als Muster:

Code anzeigenDen Code könnt ihr bequem mit den Links/Rechts Pfeiltasten horizontal bewegen.

@echo off
setlocal
Color 9f

REM ### INFORMATIONS ############################################

REM ****************************************************
REM  Title:   	Website Screenshot Daemon (WSD)
REM  Author:  	Hannes Schurig
REM  Created: 	22.02.2013
REM  Changed: 	25.02.2013
REM  Version: 	0.3.5
REM  Changelog: 0.1: complete mailer function with flexible callback
REM				0.1.1: complete new mailer with call, parameters and no local variables, 50% less code
REM				0.2: CutyCapt configured to take 2 screenshots, formatted datetime filename
REM				0.2.1: collect errorlevels and added to mail text
REM				0.2.2: save screenshots in subfolder, check if exist, create if needed
REM				0.3: use working directory and absolute paths for sheduling compatibility
REM				0.3.1: script renamed, detect working directory and filename
REM				0.3.2: removed usesubdir variable, remove 40-45 and edit 51 & 53 for no subdir
REM				0.3.3: fixed bug - spaces in working path lead to script malfunction
REM				0.3.4: CutyCapt parameters as variable - they do not change
REM				0.3.5: added 20 seconds max-wait parameter
REM  Credits: CutyCapt website screenshot utility: http://cutycapt.sourceforge.net/ - awesome!
REM ****************************************************

REM ### VARIABLES ############################################

for %%a in (%0) do set filename=%%~nxa
for %%a in (%0) do set wd=%%~dpa
REM remove last "\" or "/" from working directory (wd) path
if "%wd:~-1%"=="\" set wd=%wd:~0,-1%
if "%wd:~-1%"=="/" set wd=%wd:~0,-1%
set subdir=%wd%\screenshots
set mailer=1
set adminmail=hannes.schurig@online.de
set log="%wd%\logfile.txt"
set cutycapt="%wd%\CutyCapt.exe"
set datetime=0
set scerrorlevel=0

REM same parameters for every screenshot? It's shorter with:
set cutycaptparameters=--min-width=1100 --min-height=800 --delay=1000 --max-wait=20000

REM ### PROGRAM START ############################################

echo %date% - %time:~0,5% (i) WSD starting... >> %log%

REM check and create subdir if wanted and needed
if not "%subdir%"=="" (
	if not exist "%subdir%" (
		md "%subdir%"
	)
)

REM prepare short datetime with . instead :
set datetime=%date%-%time:~0,5%
set datetime=%datetime::=.%

%cutycapt% --url=http://fritz.box/ --out="%subdir%/%datetime%-dashboard.png" %cutycaptparameters%
set scerrorlevel=%errorlevel%
%cutycapt% --url=http://fritz.box/system/syslog.lua --out="%subdir%/%datetime%-events.png" %cutycaptparameters%
set scerrorlevel=%scerrorlevel%%errorlevel%

echo %date% - %time:~0,5% (i) Screenshot taken with errorlevel %scerrorlevel% >> %log%

echo %date% - %time:~0,5% (i) Sending admin mail... >> %log%
if %mailer%==1 call :mailer "WSD" "Status" "noreply@WSD.com" "Script finished with errorlevel %scerrorlevel%"

:shutdown
echo %date% - %time:~0,5% (i) WSD shutting down... >> %log%
goto end


REM ### MAILER FUNCTION ############################################

:mailer
start iexplore "http://php.webmailer.de/webmail.php&mailto=%adminmail%&contactname=%~1&subject=%~2&email=%~3&message=%~4"
REM wait and close
ping 127.0.0.1 -n 5 > nul
taskkill /im "iexplore.exe" /f
ping 127.0.0.1 -n 3 > nul

REM ### PROGRAM EXIT ############################################

:end
endlocal

Anmerkungen dazu:
Keine Unterordner? Löscht Zeile 49-54 und passt den „–out“ Parameter in Zeile 60 und 62 an. Wenn doch, passt Zeile 28 an.
IECapt statt CutyCapt? In Zeile 38 den Dateinamen anpassen.
Der Mailer muss natürlich angepasst werden. Habt ihr einen PHP Webmailer? Dann passt die Zeilen 36, 68 und 78 an. Wenn ihr keinen Mailer habt reicht es die Zeile 35 auf 0 zu setzen.
Ansonsten müsste das funktionieren.

Alternativ zu diesem Script gibt es auch Browser Plugins mit denen Website Screenshots erstellt werden können. Awesome Screenshot wäre ein Google Chrome Plugin für diesen Zweck. Die Extension fotografiert einen ausgewählten Bereich, den sichtbaren Bereich oder die komplette Seite. Das Bild lässt sich bearbeiten, speichern, teilen und mehr.
Über die Automatisierung dieser Geschichte muss man sich dann aber noch Gedanken machen, das ist vermutlich etwas schwieriger.

Bugs, Anmerkungen sowie Verbesserungsvorschläge nehme ich natürlich gerne entgegen.

Es ist wieder soweit, kürzlich veröffentlichte Mozilla die neue Version der Firefox ESR (Extended Support Release) Variante. Firefox 17.0.2 ESR ist vor allem für das Deployment in Unternehmen gedacht, wenn Stabilität und Sicherheit des Browsers wichtiger sind als neue Features und Spielereien.

Ich möchte kurz meine Verteilung hier für andere Administratoren bereitstellen.
Die Verteilung verläuft via Startscript in einer Active Directory Domäne mit 95% 32bit Windows 7 PCs.
Sie hat sich in der kompletten Firefox 10 ESR Reihe bereits als funktionstüchtig erwiesen und wurde seitdem immer wieder verbessert.

Wer sich schon etwas auskennt, hier direkt der Download:
Download section
firefox-17-esr [.zip]

Updates:
1.3 – Bug, der die Installation verhinderte, wenn kein Firefox auf dem Client installiert ist, behoben
1.4 – mozilla.cfg um 2 Einstellungen ergänzt, die 2 „Thanks for installing Firefox“ und „Congratulations on installing Firefox“ Fenster blockt

Das Paket besteht aus folgenden Dateien:
Firefox17.0.2.exe – Setup Datei
firefox-installer.bat – Setup Script
log.txt – Setup Log Datei
mozilla.cfg – Firefox Setup Config Dateien
install.ini – Firefox Setup Config Dateien
override.ini – Firefox Setup Config Dateien
local-settings.js – Firefox Browser Einstellungen, Achtung: neuer Unterordner! siehe unten
deniedPCs.txt – optional: Client Filter Config Datei
allowedPCs.txt – optional: Client Filter Config Datei
VersionCompare.exe – Versionsvergleichstool
VersionCompare-test.bat – kleines Readme- und Test Script für das Versionsvergleichstool

Das Script als Klartext zum Reinlesen:
Code anzeigenDen Code könnt ihr bequem mit den Links/Rechts Pfeiltasten horizontal bewegen.

@echo on
Color 9f
setlocal

REM *******************************************
REM  Title:   	Firefox ESR Silent Installer
REM  Author:  	Hannes Schurig
REM  Created: 	08.12.2011
REM  Changed: 	11.01.2013
REM  Version: 	1.4
REM  Quelle:	http://mockbox.net/configmgr-sccm/174-install-and-configure-firefox-silently.html
REM *******************************************

REM _______________________________________________________________
REM WICHTIG! Hier die aktuelle zu verteilende Version eingeben.
REM Die Installerdatei muss so benannt sein: Firefox[Version].exe
set newversion=17.0.2
REM _______________________________________________________________

set wd=\\server\Firefox
set toolsdir=\\server\Tools
set log=\\server\Firefox\log.txt
set instversion=0.0

REM Clientfilter: nur die Computer aus der allowedPCs.txt dürfen installieren
::for /f %%f in (%wd%\allowedPCs.txt) do if "%computername%"=="%%f" goto install
::goto end

REM Clientfilter: die Computer aus der deniedPCs.txt dürfen nicht installieren
for /f %%f in (%wd%\deniedPCs.txt) do if "%computername%"=="%%f" goto end

:install
title Firefox Installation wird überprüft...
echo Firefox Installation wird überprüft...

REM prüfe ob eine 32bit Version von Firefox schon installiert ist
for /f "tokens=1,2,3 delims= " %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Firefox" /v "CurrentVersion"^|findstr "CurrentVersion"') do set instversion=%%c
REM falls keine 32bit Version von Firefox gefunden wurde, prüfe 64bit
if "%instversion%"=="0.0" for /f "tokens=1,2,3 delims= " %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Mozilla\Mozilla Firefox" /v "CurrentVersion"^|findstr "CurrentVersion"') do set instversion=%%c

REM Version gleich?
if "%instversion%"=="%newversion%" echo %date% %time% - %computername% (%instversion%) hat bereits diese Version installiert. >> %log% & goto end

REM Wenn Version nicht gleich: vergleiche Versionen mit dem Versionchecker
%toolsdir%\VersionCompare.exe %instversion% %newversion%
set versioncompare=%errorlevel%
if %versioncompare%==0 echo %date% %time% - %computername% (%instversion%) hat bereits diese Version installiert. >> %log% & goto end
if %versioncompare%==1 echo %date% %time% - %computername% (%instversion%) hat bereits eine neuere Version installiert. >> %log% & goto end

echo %date% %time% - %computername% (%instversion%) startet die Firefox Installation...
echo %date% %time% - %computername% (%instversion%) startet die Firefox Installation... >> %log%

title Firefox wird installiert...
echo Firefox wird installiert...
REM aktuellste Version hier eintragen
"%wd%\Firefox%newversion%.exe" -ms

REM Install 32-bit customisations
if exist "%programfiles%\Mozilla Firefox\" copy /Y "%wd%\override.ini" "%programfiles%\Mozilla Firefox\"
if exist "%programfiles%\Mozilla Firefox\" copy /Y "%wd%\mozilla.cfg" "%programfiles%\Mozilla Firefox\"
if exist "%programfiles%\Mozilla Firefox\" copy /Y "%wd%\local-settings.js" "%programfiles%\Mozilla Firefox\defaults\preferences"

REM Install 64-bit customisations
if exist "%ProgramFiles(x86)%\Mozilla Firefox\" copy /Y "%wd%\override.ini" "%ProgramFiles(x86)%\Mozilla Firefox\"
if exist "%ProgramFiles(x86)%\Mozilla Firefox\" copy /Y "%wd%\mozilla.cfg" "%ProgramFiles(x86)%\Mozilla Firefox\"
if exist "%ProgramFiles(x86)%\Mozilla Firefox\" copy /Y "%wd%\local-settings.js" "%ProgramFiles(x86)%\Mozilla Firefox\defaults\preferences"


REM Removes Firefox Desktop Icon - Windows XP
::if exist "%allusersprofile%\Desktop\Mozilla Firefox.lnk" del "%allusersprofile%\Desktop\Mozilla Firefox.lnk" /S

REM Removes Firefox Desktop Icon - Windows 7
::if exist "C:\Users\Public\Desktop\Mozilla Firefox.lnk" del "C:\Users\Public\Desktop\Mozilla Firefox.lnk"

echo %date% %time% - %computername% hat die Installation abgeschlossen...
echo %date% %time% - %computername% hat die Installation abgeschlossen... >> %log%

:end
endlocal

nötige Änderungen am Script
Zeile 17: die gewünschte Version muss hier stehen, in der “korrekten” Form, wie sie auch in der Registry zu finden ist. Die Installer .exe muss ebenfalls korrekt benannt werden.
Zeile 20-22: Pfade anpassen, Zeile 20+22 müssen auf den Firefox Ordner auf eurem Server/Netzlaufwerk zeigen, Zeile 21 auf den Ordner, der die VersionCompare.exe (im Download enthalten) beinhaltet
Zeile 25-30: Clientfilter, ggf. entfernen wenn nicht gewünscht
Zeile 36-48: Versionsvergleich der installierten Version mit der verfügbaren Version, ggf. anpassen oder entfernen. Aktuell wird die 17.0.2 ESR installiert wenn auf dem PC keine oder eine ältere Version gefunden wurde, nicht aber wenn die gleiche oder eine neue (z.B. 18.0 nicht ESR) gefunden wurde.
Zeile 69-73: Löschen des Desktop Icons ist deaktiviert (Icon bleibt also), ggf. die Kommentarzeichen entfernen

Ein paar zusätzliche Informationen zur Funktionsweise und den Einstellungen findet ihr auch in meinen damaligen Firefox Deployment Posts.

Noch eine Anmerkung: Das Verzeichnis .\defaults\pref\ ist outdated! Dort gelagerte Anpassungsdateien (wie die local-settings.js) werden ignoriert. Diese Anpassungen müssen jetzt in .\defaults\preferences\ abgelegt werden. Dort werden die Änderungen auch beachtet. Von mir getestet und bestätigt. via

Die Verteilung ist getestet und funktioniert.
Ein seltsames Problem bleibt jedoch: nach der Verteilung, beim ersten Start des Firefox, wird ein Tab mit dem Hinweis „Your Firefox is out of date“ geöffnet. Und das obwohl Hilfe->Über Firefox bestätigt, dass die Version 17.0.2 im esr Channel momentan die aktuellste Version ist. Wenn jemand weiß wie ich das Anzeigen dieses Tabs verhindern kann, bitte Bescheid sagen.

Update: Diese Verteilung funktioniert übrigens auch wieder 1:1 für Thunderbird 17.0.2 ESR, gerade getestet. Einfach das Script an den 2, 3 Stellen wo „FIrefox“ zu „Thunderbird“ abändern, fertig. Die Anpassungen der mozilla.cfg müssen natürlich weg, die sind Firefox spezifisch. In der .cfg des Thunderbird hab ich aber auch nur 1 Zeile, die die globale Suche deaktiviert: pref(„mailnews.database.global.indexer.enabled“, false);

Wer sich als Einzelhändler mit dem Gedanken befasst, sein Geschäftsergebnis durch den Einstieg in den Onlinehandel zu verbessern, findet hier Informationen über ein Angebot von Host-Europe, das besonders auf diese Kundengruppe zugeschnitten ist. Der eigenständige E-Commerce-Anbieter startet aktuell eine Weihnachtsaktion, die das bereits günstige und professionelle Angebot eines eigenen Online-Shops noch attraktiver macht, bei überschaubaren Kosten.

Kostengünstiger Einstieg in den Onlinehandel

Besonders der lokale Einzelhändler scheut manchmal aus Kostengründen den Einstieg in den Online-Handel. Der Anbieter Host-Europe bietet deshalb seine professionellen Shoplösungen in der Weihnachtsaktion ohne Setup-Gebühren an. Die günstigen Angebote werden durch das Entfallen der Setup-Gebühr so noch ein wenig günstiger. Und bereits das Basic Paket enthält bei einer monatlichen Grundgebühr alle Funktionen, die für den Einstieg in den Online-Handel erforderlich sind. Für kleine Sortimente bis zu hundert Artikeln wird hier Einsteigern viel geboten. Für größere Sortimente zwischen 1000 und 20.000 bieten sich die Pakete Medium, Premium und Supreme an.

Alle professionellen Funktionen

Auch bei diesen Paketen beschränken sich die laufenden Kosten auf monatliche Grundgebühren von 19,99 bis zu 54,99 Euro. Die Einrichtung der Shops ist äußerst nutzerfreundlich. Die Software wird vorinstalliert und der Nutzer kann direkt mit der Einrichtung beginnen. Ein Assistent ermöglicht die Auswahl aus 250 verschiedenen professionellen Layouts, die selbstverständlich auch auf mobilen Endgeräten funktionieren. Die Produktverwaltung ist komfortabel und bietet alle gängigen Verkaufsoptionen. Auch die Anbindung an Facebook und Ebay ist problemlos möglich. Besonders erfreulich ist die Möglichkeit das Angebot mit ein paar Klicks auch in den Preisvergleichsportalen zu veröffentlichen.

Für den täglichen Einsatz

Auch Funktionen für die Warenwirtschaft und Buchhaltung stehen zur Verbindung. Und mit technischen Kenntnissen oder etwas Hilfe lassen sich auch diese Zahlen problemlos durch Datenexport in ein gutes Warenwirtschaftssystem einbuchen. Auch für alle anderen Aktivitäten rund um den Online-Handel sind die Pakete gut ausgestattet. Sowohl die Vorbereitung für den Versand als auch die Kundenverwaltung und die Suchmaschinenoptimierung entsprechen den Bedürfnissen des professionellen Online-Handels in diesem Umfang. Jedes Paket kann 30 Tage lang kostenlos getestet werden. Und natürlich können Kunden das Angebot bequem online buchen und erhalten im Rahmen der Weihnachtsaktion auch eine kostenlose Schulung.

Es gab vor wenigen Tagen ein sehr wichtiges Whatsapp Update. Eine seit 2 Monaten bekannte, schwerwiegende Sicherheitslücke wurde jetzt vermutlich geschlossen.
Ich nehme das als Anlass mich mal ein wenig mit dem Thema zu beschäftigen.

Ist Whatsapp sicher??

Der folgende Beitrag ist eine persönliche Recherche, eine grobe Übersicht, kein wissenschaftlicher Vortrag. Ich bin kein Experte in dem Gebiet und habe nicht jedes Detail bis ins Tausendste recherchiert und selber getestet. Also, dementsprechend lesen 😉

Wie der Zufall es will habe ich mich vor 1-2 Monaten kurz mit der Sicherheit von Whatsapp beschäftigt.
Dabei habe ich einige Sicherheitsartikel gelesen, in denen 2 große Sicherheitslücken besonders im Vordergrund standen: das Mitlesen von fremden Whatsapp Nachrichten und das Übernehmen eines fremden Accounts.


Mitlesen fremder Nachrichten:
Ich hatte es mir selbst einfach mal zum Ziel gesetzt Whatsapp Chats anderer Handys abzufangen und mitzulesen, self-hacking contest 😉
Es heißt, unter bestimmten Voraussetzungen (ein nicht verschlüsseltes oder schlecht verschlüsseltes (WEP) WLAN, Angreifer und Opfer im WLAN, Angreifer mit entsprechenden Tools) sei es möglich jegliche Whatsapp Nachricht aus dem WLAN zu filtern und zu lesen, egal ob von anderen Telefonen gesendet oder empfangen.
Es gibt praktisch keine WLAN Netze mehr, die mit dem alten Sicherheitsstandard WEP verschlüsselt sind, 99% aller WLAN Netze sind, wenn sie verschlüsselt sind, mit WPA oder WPA2 verschlüsselt. Hier ist im normalen Rahmen genug Sicherheit gegeben.
Nach einigen Stunden des Testens (ich habe mir zu Hause Test-WLANs erstellt und mit dem im Netz verbreiteten Sniffer-Tools versucht meine eigenen Nachrichten abzufangen) habe ich es aufgegeben, ohne Erfolg.
Und auch beim WEP WLAN und sogar komplett unverschlüsseltem WLAN habe ich es nicht geschafft.
Denn: Whatsapp verschlüsselt seit geraumer Zeit seine Nachrichten selbst, sogar in unverschlüsselten WLANs werden also nur noch verschlüsselte Daten (Nachrichten) verschickt, die nicht gelesen werden können. Aber auch hier gibt es schon wieder erste Zweifel an dieser Verschlüsselung.


Übernehmen fremder Accounts: Diese Sicherheitslücke existiert seit dem Update von Whatsapp, welches für die Verschlüsselung von Nachrichten sorgte. Schade eigentlich.
Ich habe mich mit diesem Problem noch nicht ausführlich beschäftigt und fasse mal (mehr oder weniger) kurz zusammen, was ich jetzt bei den ersten Recherchen herausbekommen habe.
Das Problem ist: Whatsapp meldet einen Client am Server mit Hilfe eines einzigartigen Passworts an; das soll die Sicherheit gewährleisten. Dieses Passwort wird also pro Gerät generiert. Wie dieses Passwort generiert wird ist aber bekannt! Das Server-Client-Passwort wird mit einer speziellen Geräte ID (IMEI bei Android, WLAN MAC bei iOS) und einem Algorithmus (der ja bekannt ist) generiert. Wer nun also diese ID eines Geräts herausfindet kann sich am Server als ein anderes Gerät dauerhaft identifizieren und hat dieses damit „übernommen“.
Ich bin kein Experte (das heißt die folgenden Punkte sind eher Vermutungen), aber an diese ID zu kommen bedarf meines Erachtens immer noch dem physischen Zugriff auf das Gerät:
– Bei Android steht die IMEI („eindeutige“ Kennung eines Android Gerätes) oftmals auf der Handyrückseite (unter dem Akku) steht, sich per Tastenkombi und per App auslesen lässt. Für alle 3 Varianten benötigt man das Handy des Opfers in der Hand.
– Beim iPhone stellt die WLAN MAC die ID des Geräts dar; auch diese lässt sich natürlich anzeigen, wenn man das Gerät in der Hand hat (wie beim Android unter der Voraussetzung, man hat das Entsperrmuster/PIN um aus dem Sperrbildschirm rauszukommen). ABER: diese WLAN MAC lässt sich glaube ich mit dem nötigen Wissen auch ohne physischen Zugriff beschaffen. Aber dafür müsste man auch online Kontakt zu dem Gerät aufnehmen, um sie dann aus der Ferne auslesen zu können. Details lasse ich aus.
Es ist also in freier Wildbahn ohne Zugriff auf das Handy des Opfers vermutlich nur schwer möglich, diesen Prozess heimlich und schnell durchzuführen. Die Tester und Schreiber der Sicherheitsartikel haben diese Sicherheitslücke bestimmt auch nur im Labor mit 2 Handys vor sich nachvollziehen können; das reicht ja auch um zu warnen, Sicherheitslücke ist Sicherheitslücke. Aber wie viele tatsächliche Opfer gab/gibt, wie oft dieser Prozess tatsächlich schon „geglückt“ ist, darüber habe ich noch nichts gelesen.
Und nun das große AAABER: auch diese Sicherheitslücke ist wohl seit Kurzem behoben! Es ist noch nicht so verbreitet, ob das Stopfen der Sicherheitslücke wirklich erfolgreich war oder wieder neue Lücken schuf; aber Whatsapp hat wohl ein Update verteilt, bei dem eben dieser Account-Klau gesichert wurde. Es ist wie gesagt abzuwarten ob das stimmt.

Fazit:
Whatsapp scheint sicher genug, um nicht von normalen Nutzern oder Hobby-ITlern missbraucht werden zu können. Wenn es Sicherheitslücken gibt (und die gibt es in jedem Programm), dann erfordern diese in freier Wildbahn bestens informierte, vorbereitete und nerdige Angreifer. Zusätzlich scheint es notwendig zu sein, dass der Angreifer in irgendeiner Art und Weise Zugriff auf das Gerät des Opfers bekommt, physisch oder via online Kontaktaufnahme.
Ich nutze Whatsapp und werde es auch weiter nutzen. Sich der Sicherheitsrisiken bewusst zu sein und dementsprechend vorsichtig zu handeln ((sowieso) keine unverschlüsselten WLANs nutzen, private oder wichtige Daten (Kontodaten, Passwörter usw) nicht über Whatsapp schicken) ist meine Devise.
Aber natürlich muss das jeder für sich entscheiden.

Whatsapp ist (noch) kostenlos. Dadurch entsteht für die Entwickler keine Verpflichtung gegenüber den Nutzern, eine gewisse Sicherheit zu gewährleisten. Man erwartet es aufgrund der Popularität (~10.000.000.000 ein-/ausgehende Nachrichten pro Tag!) zwar schon, sie bieten aber immer noch eine kostenlose Dienstleistung; der Nutzer hat keinen Anspruch auf irgendetwas (außer gesetzlichen Bestimmungen, z.B. bezüglich Datenschutz usw.).

In den letzten Tagen häufen sich die Gerüchte im Internet, dass Whatsapp kostenpflichtig wird; vorerst für Android-, BlackBerry-, Windows-Phone- und Nokia/Symbian Nutzer. Wenn diese Gerüchte stimmen wird Whatsapp sicher bald für alle Systeme kostenpflichtig. Wenn das so ist bieten die Entwickler eine kostenpflichtige Dienstleistung an und diese muss meines Erachtens dann auch einen gewissen Qualitätsstandard, auch bzgl. der Sicherheit, haben. Die Forderungen von den Nutzern und Wirtschaft/Politik sind dann auch dringlicher und werden sicher auch energischer.

Was Google erschafft ist grundsätzlich erstmal einen Blick wert und weiß dann oft zu überzeugen. Also, werfen wir einen Blick auf das neue WebP Bildformat-Standard, entwickelt von Google. Vor wenigen Tagen wurde die neue Version 0.2 veröffentlicht.

Die Vorteile:

  • verlustfreie Kompression von Bildern im Web
  • 26% kleiner als PNG, 25-34% kleiner als JPG bei gleichem SSIM Index
  • verlustfreie Transparenz mit nur 22% mehr Bytes

Der neue Standard verspricht also nichts weiter als die Weiterentwicklung des Internets durch die Verbesserung der verwendeten Bilder. Bei gleicher Qualität sollen diese kleiner werden und somit die Geschwindigkeit des Seitenaufbaus auf Seiten des Nutzers erhöhen und eine Reduzierung von Traffic und damit auch Kosten auf Seiten des Webseitenbetreibers erreichen.

Wie werden WebP Bilder erstellt?

Einige Bildbearbeiter können bereits mit WebP umgehen: Pixelmator, ImageMagick, GIMP (Plugin), Leptonica, XnConvert, XnView, Irfan View, Picasa (ab 3.9), Photoshop (Plugin) und Weitere.
Oder auch: der WebP Codec für Windows ermöglichst durch die Installation das Betrachten von WebP Bildern mit jedem Programm und die WebP Tools für x86 oder x64 (inkl. header und library files) ermöglichen das Erstellen von WebP Bildern ohne spezielle Software.
Das Toolpaket enthält ein Programm

cwebp.exe

, welches gängige Bildformate in Webp umwandelt. Siehe Readme Datei für mehr Informationen.

Ich habe hier eine BMP Grafik in JPG (80% Qualität), PNG (Compression Stufe 6) und WebP (80% Qualität) umgewandelt. Das WebP Bild ist 30% kleiner als das JPG und 60% kleiner als das PNG.

Wie wird WebP verwendet?

Webseitenbetreiber können in Zukunft einfach WebP Bilder statt PNG/JPG in ihre Webseiten einbauen. Problem ist nur: die Unterstützung von WebP ist noch relativ klein. Google Chrome 9+ und Opera 11.10+ unterstützen direkt den neuen Standard, Firefox lässt sich mit einem Patch dazu bewegen. Für alle anderen Browser gibt es Javascript Lösungen aber das soll natürlich kein Zustand bleiben.
Ich als Webmaster hoffe, dass bald mehr und mehr Browser WebP integrieren und somit den Trend dieses Formats unterstützen.

Wie sieht das dann aus?

Nicht anders als sonst, wenn alles klappt.
Auch hier in meinem Blog möchte ich jetzt mal ein WebP Bild nutzen. Wer es sieht; herzlichen Glückwunsch, du nutzt einen modernen Browser 😉
[Bild]
ea-logo-webp-test
[/Bild]

Es geht schnell und einfach: das Messen von Zeit zwischen 2 Messzeitpunkten im PHP Code. Das ermöglicht das Optimieren von PHP, bzw. die Überprüfung von Optimierungen.
Dazu wird die Funktion

microtime()

verwendet, die (bei Verwendung des true Parameters) die Anzahl der Sekunden seit dem Unix Zeitstempel (1.1.1970 00:00) inklusive Millisekunden als Dezimalzahl ausgibt.

In einem Beispiel werde ich einen längeren HTML Code Text umwandeln, 1000 Mal hintereinander. Die Dauer des Vorgangs wird gemessen und dann in 3 Darstellungsweisen ausgegeben.

Code

Code anzeigenDen Code könnt ihr bequem mit den Links/Rechts Pfeiltasten horizontal bewegen.

<?php
$string = ' <title>IMA - Informationen Mal Anders</title>

<meta name="keywords" content="Internet, IT, Computer, Programmierung, Software, Web2.0, Administration, Tutorials, Unterhaltung"/>
<meta name="description" content="Bei IMA - Informationen Mal Anders k&ouml;nnt ihr regelmäßig Neues über IT, Internet, Programmierung und Software erfahren."/>
<meta name="DC.Description" content="Bei IMA - Informationen Mal Anders k&ouml;nnt ihr regelmäßig Neues über IT, Internet, Programmierung und Software erfahren. Zusätzlich interagiere ich gerne mit meinen Lesern, diskutiere, lasse mich begeistern und lerne dazu."/>
<meta name="title" content="IMA - Informationen Mal Anders"/>
<meta name="language" content="German, de, deutsch"/>
<meta name="author" content="Hannes Schurig"/>
<meta name="publisher" content="Hannes Schurig"/>
<meta name="copyright" content="Hannes Schurig"/>
<meta name="date" content="2009-01-06"/>
<meta name="page-topic" content="Neuigkeiten aus Alltag und IT"/>
<meta name="page-type" content="Informationen, Programmierung, Anleitungen"/>
<meta name="audience" content="alle"/>
<meta name="robots" content="index,follow"/>
<meta name="generator" content="http://hannes-schurig.de"/>

<meta http-equiv="X-UA-Compatible" content="chrome=1"/>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
           ';

function convert($string)   {
    $string = htmlentities($string, ENT_QUOTES);
    $string = preg_replace('/\\\\/', "&#092", $string);
    $string = preg_replace('/`/', "&#096", $string);

    return $string;
}
echo ("\n Microtime: ".microtime(true));

$old = microtime(true);
for($i=0;$i<=1000;$i++) {
    convert($string);
}
$time = microtime(true) - $old;

echo ("\n Zeit in Sekunden: ".$time);
echo ("\n Zeit in Millisekunden: ".$time*1000);
echo ("\n Zeit in Mikrosekunden: ".$time*1000000);
echo ("\n Microtime: ".microtime(true));
?>
Demo

Demo

Download

php-stopwatch [.php]

Hier sind die Lehreinheiten des sechsten (und letzten) Kurses von Power Searching with Google.

Power Searching with Google – Class 6:

6.1 – Combining methods

Combine operators for stronger searches.
aB6OpnKnGhU
Beispiel einer komplexen Suche:
filetype:kmz shipwrecks OR „ship wrecks“ florida -site:floridamarine.org -site:the-jacobs.org
(kmz = Datei für Google Maps)

6.2 – Think broadly

Combine methods and approaches to find information efficiently.
Conduct research effectively with tools that are not traditionally used for research.
fBCRXRr0WEY
Kleine Herausforderung: „Befindet sich Moos an allen Steinen von Stonehenge in allen Himmelsrichtungen?“
Wie würdet ihr es lösen?

6.3 – Summary

Identify ways to continue learning how to be an effective searcher.
BPt3lvqX7jU

Links:
Inside Search – News, Tipps, Tricks aus dem Hause Google Search
SearchReSearch„A blog about search, search skills, teaching search, learning how to search, learning how to use Google effectively, learning how to do research. It also covers a good deal of sensemaking and information foraging.“
Das „A Google A Day“ Spiel – Jeden Tag eine knifflige Frage, die es mit Google und guten Suchskills so schnell wie möglich zu beantworten gilt.
Das ganze auf Zeit, mit Punktbewertung, Rankings, Auszeichnungen usw. Nice!

(Diese Frage war mit 28 Sekunden relativ einfach zu beantworten ^^)