Lesbarkeit von News-Seiten verbessern mit readability bookmarklets

Ich habe soeben etwas auf die Wunschliste für meinen Lieblings-Browser Opera geschrieben. Auch wenn sich der iPad-Zoom für Desktop-Browser nicht so schnell erfüllt, bin ich dabei auf das Thema readability bookmarklets gestoßen. Damit kann man die Lesbarkeit von Artikel auf News-Seiten deutlich verbessern.

Readability is a browser bookmarklet (sort of like a bookmark on steroids). You can install Readability by visiting the Readability setup page:

http://lab.arc90.com/experiments/readability/

Readability works with most major modern browsers and has been tested on many news sites and blogs. It isn’t 100% effective but works surprisingly well.

Die Idee der readability bookmarklets ist ziemlich simpel. Man erstellt ein Lesezeichen in der Persönliche Leiste (im Internet Explorer wäre das die Favoritenleiste) und wenn man auf einem Online-Artikel bei Portalen wie Spiegel.de oder taz.de unterwegs ist, genügt ein Klick auf den Bookmark und schon wird die Seite in eine leicht lesbare Version ohne seitliche Menüs und anderen Ablenkungen umgewandelt. Auf der Setup-Seite kann man dann auch einstellen, welches Look&Feel die Umwandlung haben soll.

Und so sieht das zum Beispiel mit meiner Seite aus, einmal mit normaler Ansicht und nach einem Klick auf das Readability-Lesezeichen (Einstellung Newspaper-Medium-Narrow)…

VORHER:

NACHHER:

Sharepoint Suche aus dem Browser Suchfeld

Auf der Suche nach einer bequemeren Art einen Sharepoint Server zu durchsuchen, bin ich auf die Möglichkeit der OpenSearch Erweiterung gestolpert. Sowohl Internet Explorer als auch Mozilla Firefox kann man mit neuen Suchanbietern ausstatten – warum nicht auch mit dem eigenen Sharepoint Server?

Im Microsoft MSDN Artikel Search Provider Extensibility in Internet Explorer unter  „Web Developer Search Features“ wird genau beschrieben, wie man ein OpenSearch Descriptor File anlegt. Ich habe für die Integration ein solches .xml-File und ein passendes .html-File in eine Dokumentenbibliothek auf den Sharepoint hochgeladen. Mit dem Link auf das install.html-File kann dann jeder die Suche selbst installieren. Freundlicherweise funktioniert dieser Vorgang auch prima mit Mozilla Firefox.

Beispieldateien:
sharepointsearch-install.html
sharepointsearch.xml

Screenshot auf dem iPad erstellen

Den Powerbutton an der Seite des Gerätes gedrückt halten und auf den Home-Button auf der Oberseite drücken. Ein kleiner Blitz und schon kann man den Screenshot unter „Fotos->Gesicherte Fotos“ finden. Von dort kann man das Bildschirmfoto dann auch per Mail weiterleiten.

OAuth und WP to Twitter: finde den Access Token!

Twitter hat eine seltsame Menüführung wenn es um die Anbindung von Applikationen für die neue OAuth-Schnittstelle geht. Ich nutze das WP to Twitter-Plugin und habe genau die Anleitung für die OAuth-Anbindung an twitter.com befolgt. Einziges Problem: der notwendige Access Token (und das Access Token Secret) waren einfach auf der Seite nicht zu finden.

Nach langem Suchen bin ich fündig geworden. Man kann die Anbindung von zwei Seiten aus aufmachen. Einmal über http://twitter.com/apps, „Register a new application“ und über http://dev.twitter.com/apps. Consumer key und Consumer secret werden bei beiden angezeigt – der Access Token aber nur bei dev.twitter.com über den Button „My Access Token“ auf der rechten Seite.

ESXi vom USB-Stick installieren

Ja, es gibt Server ohne CD/DVD-Laufwerk. Gut wenn man einen FAT32-formatierten USB-Stick bereit liegen hat mit dem man auch die Installation von VMware’s ESXi 4 machen kann.

Variante 1:

  1. Download Unetbootin  http://unetbootin.sourceforge.net/unetbootin-windows-latest.exe und ausführen
  2. VMware-VMvisor-Installer<version>.iso auswählen
  3. Laufwerk auswählen
  4. Los geht’s!

Variante 2:

  1. syslinux herunterladen, bei mir hat nur die 3.x Version funktioniert: http://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-3.86.zip
  2. Als Administrator ausführen (auf das richtige Laufwerk achten, hier Laufwerk F:): syslinux-3.86\win32> syslinux.exe F: -fma
  3. VMware-VMvisor-Installer<version>.iso in Laufwerk F: entpacken (z.B. mit 7-zip)
  4. Datei isolinux.cfg in SYSlinux.cfg umbenennen
  5. Los geht’s!

siehe auch http://vm-help.com/esx40i/ESXi_USB_install.php

Videos fürs iPad im Batch konvertieren

Gestern wollte ich einige .avi-Dateien in ein iPad kompatibles Format konvertieren. iTunes scheint das leider nicht von Haus aus zu unterstützen. Nach einigem relativ erfolglosen Googlen habe ich ein paar iPhone-Anleitungen mit ein paar alten Batch-Dateien kombiniert, mit denen ich mal Flash-Videos in AVI konvertiert habe.

Zutaten:

Hier die convert_to_ipad.cmd. Es nimmt alle Avi-Dateien aus dem Verzeichnis G:\AVIs und konvertiert diese in das mp4-Format im selben Verzeichnis.

[sourcecode language=“shell“]
set MPLAYERPATH=D:\Downloads\MPlayer\MPlayer-p4-svn-31372
set VIDEOPATH=G:\AVIs
for %%F IN (%VIDEOPATH%\*.avi) do %MPLAYERPATH%\mencoder.exe "%VIDEOPATH%\%%~nF.avi" -of lavf -lavfopts format=mp4 -vf scale=1024:-3 -ovc x264 -x264encopts crf=28:vbv_maxrate=1500:vbv_bufsize=2000:nocabac:global_header:frameref=3:threads=2:bframes=0:subq=6:mixed-refs=0:weightb=0:8x8dct=1:me=umh:partitions=all:qp_step=4:qcomp=0.7:trellis=1:direct_pred=auto -oac faac -faacopts mpeg=4:object=2:br=160:raw -channels 2 -srate 48000 -o "%VIDEOPATH%\%%~nF.mp4"
[/sourcecode]

UPDATE 2010-08-01: Ich habe die Parameter noch mal angepasst nach den Tipps von Mike. Die Variante vorher hat bei mir bei einigen Videos extremes Bildflackern erzeugt. Außerdem ist Bildverhältnis jetzt abhängig vom Input-Video (Parameter „-vf scale =1024:-3“).

UPDATE 2010-09-19: Der Link der Datei libfaac-1.28.7z hat sich geändert. Danke an Sören!

Top 10 der Usernamen bei ssh Brute-Force-Attacken

Yuri hat einen hübschen awk-Befehl gebaut, um sich eine Statistik der fehlgeschlagenen Anmeldeversuche ausgeben zu lassen.

http://yurisk.info/2010/06/04/top-10-usernames-used-in-ssh-brute-force/

[sourcecode language=“shell“]
awk ‚/Failed password for/ ‚ /var/log/secure* | sed ’s/.* \([[:print:]]\+\) from .*/ \1 /g ‚ | sort | uniq -c | sort -n -k1
[/sourcecode]

Das könnte dann z.B. so aussehen:


189 tester
190 123456
205 www
218 testing
255 user
293 guest
354 oracle
603 test
723 admin
14321 root

phonotunes.php: phonostar-Player Aufnahmen in iTunes als Podcast verfügbar machen

Ich bin ein großer Fan des phonostar-Player. Mit diesem Programm kann man sehr bequem Radiosendungen aufnehmen. Da ich einen iPod nutze, musste ich die Aufnahmen bisher umständlich in eine Playliste im iTunes importieren. Dadurch habe ich aber keine Übersicht über schon gespielte Folgen und kann längere Hörspiele nicht mal eben in der Mitte unterbrechen und später an der Stelle fortsetzen. Wie schön läuft das dagegen bei einem Original Audio Podcast – z.B. dem des ARD Radio-Tatort. Automatisch lädt die neueste Folge und wird synchronisiert, bereits angehörte Folgen werden automatisch entfernt.

Ich habe daher ein wenig geschraubt und ein PHP-Script geschrieben mit dem ich meine phonostar-Player-Aufnahmen meinem iTunes in Form eines lokalen Audio-Podcasts unterschiebe. Ein Beitrag von digitaltoast hat mich da sehr schnell auf die richtige Spur gesetzt.

Voraussetzung: ein lokaler Webserver mit PHP Unterstützung. Ich habe dafür den IIS auf meinem Windows 7 konfiguriert.

Installation (IIS): Ich habe in meinem Webserver-Verzeichnis den Ordner phonotunes erstellt, die phonotunes.php dorthin kopiert und über den IIS Manager dort ein virtuelles Verzeichnis „Aufnahmen“ eingehängt, dass auf den Aufnahmenordner des phonostar-Player zeigt. Danach zeigt „http://localhost/phonotunes/Aufnahmen“ auf „D:\\Temp\\radiostreams\\phonostar\\Aufnahmen“.

Und schon kann man im iTunes den Link http://localhost/phonotunes/phonotunes.php hinzufügen und mit seinem iPod synchronisieren.

Verbesserungsvorschläge willkommen!

[sourcecode language=“php“]
<?php
/**
* phonotunes – generate iTunes compatible audio podcasts based on phonostar-Player recordings
*
* Copyright 2010 Tobias Harmes
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* @author Tobias Harmes, tobias@harmes.de
* @link https://harmes.de
* @version 2010-05-16
* @license Apache License, Version 2.0
*/

//change this to your needs
define (‚RECORDINGS‘, ‚D:\\Temp\\radiostreams\\phonostar\\Aufnahmen‘);
define(‚URLBASE‘,’http://localhost/phonotunes/Aufnahmen‘);

/**
* traverse sub-dirs and build up xml object
*
* @param $start directory to start at
* @param $xml_generator XML document object <by ref>
* @param $win32 determines slash, defaults to true
*/
function directoryList($start,&$xml_generator,$win32=true){
if($win32){
$slash="\\";
}else{
$slash="/";
}
$basename = pathinfo($start);
$basename = $basename[‚basename‘];
$ls=array();
$dir = dir($start);
while($item = $dir->read()){
if(is_dir($start.$slash.$item)&& $item!="." && $item!=".."){
$ls[$basename][]=directoryList($start.$slash.$item,&$xml_generator,$win32);
}else{
if($item!="."&&$item!=".."){
$ls[$basename][]=$item;
$itempath = $start.$slash.$item;
//remove default path
$itemurl = str_replace(RECORDINGS, "", $itempath);
//encode all funny characters and spaces
$itemurl = rawurlencode($itemurl);
//restore the slashes
$itemurl = str_replace(rawurlencode($slash),"/",$itemurl);
$itemurl = URLBASE.$itemurl;

$itempathinfo = pathinfo($itempath);
$recording = $xml_generator->addChild(‚item‘);
$title = str_replace("_"," ",$itempathinfo[‚filename‘]);
//remove the leading date if any
if (preg_match(‚/^\d{4}-\d{2}-\d{2}.*/‘,$title))
{
$title = substr($title, strlen("yyyy-mm-dd")+1);
}
$recording->addChild(‚title‘, $title);
$recording->addChild(‚pubDate‘, date(DATE_RFC822, filemtime($itempath)));
//if this is a regular recording use the folder name
$description = substr($start, strlen(RECORDINGS)+1);
$description = str_replace("_"," -",$description);
$recording->addChild(‚description‘, $description);
$recording->addChild(‚link‘, $itemurl);
$enclosure = $recording->addChild(‚enclosure‘);
$enclosure->addAttribute(‚url‘, $itemurl);
$enclosure->addAttribute(‚length‘, filesize($itempath));
$enclosure->addAttribute(‚type‘, ‚audio/mpeg‘);
}
}
}
return $ls;
}//directoryList

$xml_string ='<?xml version="1.0" encoding="UTF-8"?>‘."\r\n"."<channel>"."\r\n"."</channel>";
$xml_generator = new SimpleXMLElement($xml_string);
$xml_generator->addChild(‚title‘, ‚phonotunes radio podcast‘);
$xml_generator->addChild(‚category‘, ‚Audio Podcasts‘);

$dirlist = directoryList(RECORDINGS,$xml_generator, true);

header("Content-Type: text/xml");
$xml_result = $xml_generator->asXML();
$xml_LeftHandSide = ‚<?xml version="1.0" encoding="UTF-8"?>‘."\r\n".'<rss xmlns:itunes="http://www.itunes.com/DTDs/podcast-1.0.dtd" version="2.0">‘;
$xml_RightHandSide = substr($xml_result, 39);
echo $xml_LeftHandSide . $xml_RightHandSide . "</rss>";
?>
[/sourcecode]

UNMOUNTABLE_BOOT_VOLUME

Was gibt es schöneres an einem Sonntag als ein Rechner der nicht funktioniert? Jedenfalls war meine Schwester nicht sehr begeistert über die Endlos-Neustarts ihres Windows XP Home. Nachdem ich den automatischen Neustart über F8 deaktiviert hatte, konnte ich dem Bluescreen (oder stop error) ein UNMOUNTABLE_BOOT_VOLUME entnehmen. Google brachte einen KB-Artikel von Microsoft an den Tag. Ah ja, also etwas mit der Festplatte. Schnell die Daten gesichert und an einem anderen Rechner scandisk mit automatischer Reparatur laufen lassen. Neuinstallation knapp vermieden 🙂

It’s not the network

Ich habe gerade eine halbe Stunde herumprobiert, warum ich keine zip-Dateien mehr herunterladen konnte. Der Netzwerker in mir denkt natürlich gleich an das große Ganze: eine Internetprovider/Proxy/Virenscanner/Download-Verschwörung durch fehlerhafte Signatur-Updates oder Amoklaufende Webfilter. Aber selbst der proxy-ssh-Tunnel auf einen externen root-Server mit ausgeschalteten Virenscanner („mich bekommt ihr nicht klein“) hat keine Abhilfe gebracht. Jetzt frage ich mich: seit wann unterscheiden Browser-Programme nicht mehr zwischen einem Übertragungsproblem und dem Problem, dass man auf eine volle Festplatte einfach nichts mehr speichern kann – egal wie oft man es versucht? Na ja, irgendwo müssen Internet Explorer, Firefox und Opera ja anfangen, sich auf Standards zu einigen.