Zoom-Tool für Bildschirm-Präsentationen und Screencasts

ZoomIt64Durch verschiedene Talks und Präsis auf Youtube bin ich auf dieses kleine aber feine Tool aufmerksam geworden: Es nennt sich ZoomIt, ist aus der Sysinternals-Reihe und versteckt sich nach dem Starten diskret in der Taskleiste. Von dort aus bietet zwei einfache Funktionen: Vergrössern eines Bildschirmbereichs und das Zeichnen darauf. Beides macht es sehr zuverlässig.

Experimente haben gezeigt, dass es sowohl für live-Präsentationen als auch für Screencasts wunderbar einsetzbar ist. Auf dem Surface arbeitet es problemlos mit dem Stift zusammen.

Beachte : CTRL-Mausrad verändert die Vergrösserung, rechte Maustaste erlaubt das Verändern des Ausschnitts.

Mehr Glück als Verstand: Der Linux-Magazin Wettbewerb ist ausgefochten

Dieser Beitrag ist Teil 3 von 3 in der Serie Linux-Magazin Wettbewerb

    Viele haben nicht mehr daran geglaubt, aber der Wettbewerb des Linuxmagazins ist durchgeführt worden: Im neusten Heft (01/11) sind die Gewinner abgedruckt. Siehe da, ich habs als einziger PHP-Frickler in die Top-20 geschafft:

    Das gute an Programmierwettbewerben ist, dass man mit einer solchen Rangierung für die Zukunft ausgesorgt hat: Reichtum, Jugend, Schönheit, Wein, willige Weiber und einen offiziellen Schutz vor Alterskurzsichtigkeit sind das Minimum das es zu gewinnen gab. Ähhm, nein, sorry, ich hab da was verwechselt.

    Auf jeden Fall: Heeeeeeeeeeerzliche Gratulation den Gewinnern! Gut gemacht! Die Turnierergebnisse und Bots sollen laut Heft alsbald downgeloaded werden können. Ganz im Sinne der Durchführung ist aber bis Dato noch nichts sichtbar. Ich werde sicher analysieren, warum der Frigidor nicht weheheit vor mir liegt. Unter uns gesagt, ist er nämlich viel der bessere Programmierer (der liebe Gott hat mir dafür eine grosse Klappe geschenkt).

    Weiterlesen

    Webanwendungen: Office 2007 Dateien werden als ZIP heruntergeladen

    zipper Ein Server von uns versuchte wiedereinmal besonders originell zu sein: Eine in WordPress hochgeladene „.docx“ Datei wurde im Internet Explorer als „.zip“ zum Download offeriert. So richtig böse kann man dem dem Server nicht sein, hat er doch recht: Die Office 2007 Dateien sind an sich Zips, und trotzdem möchte man sie mit Word öffnen, oder?

    Nach einigem Fluchen bin ich auf den korrekten Eintrag gestossen und konnte die Lösung ableiten. In der Datei /etc/mime.types folgendes am Ende hinzufügen und gut is:

    application/vnd.ms-word.document.macroEnabled.12 .docm
    application/vnd.openxmlformats-officedocument.wordprocessingml.document docx
    application/vnd.openxmlformats-officedocument.wordprocessingml.template dotx
    application/vnd.ms-powerpoint.template.macroEnabled.12 potm
    application/vnd.openxmlformats-officedocument.presentationml.template potx
    application/vnd.ms-powerpoint.addin.macroEnabled.12 ppam
    application/vnd.ms-powerpoint.slideshow.macroEnabled.12 ppsm
    application/vnd.openxmlformats-officedocument.presentationml.slideshow ppsx
    application/vnd.ms-powerpoint.presentation.macroEnabled.12 pptm
    application/vnd.openxmlformats-officedocument.presentationml.presentation pptx
    application/vnd.ms-excel.addin.macroEnabled.12 xlam
    application/vnd.ms-excel.sheet.binary.macroEnabled.12 xlsb
    application/vnd.ms-excel.sheet.macroEnabled.12 xlsm
    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx
    application/vnd.ms-excel.template.macroEnabled.12 xltm
    application/vnd.openxmlformats-officedocument.spreadsheetml.template xltx 
    

    Kubuntu update und GRUB Wiederherstellung

    facepalmEntropie in Reinkultur: Alles tendiert zum grösstmöglichen Chaos und guter Wille pflastert den Weg ins Grab. Auf meinem Lieblingsrechner wurde vor langer Zeit Kubuntu installiert. Mit dem Update auf Version 9.10 hat sich gerade eine schon lange fällige Neuinstallation von Windows gekreuzt. (Neuinstallation weil: Vista Basic Home Premium – entgegen der Meinung des MS Update-Assistant – nicht auf Windows 7 Professional upgedatet werden kann. Warum? Das weiss wohl nur ein Microsoft Certified Client System Upgrade Engineer, der wohl ein Live Upgrade über Windows Vista Home Half Master Business Game Edition oder so empfehlen würde *gna*.)

    Windows startet nun wunderbar, hat aber natürlich meinen Bootloader (GRUB) überschrieben und ich kann nimmer in mein geliebtes, frisch upgedatetes Kubuntu booten. Das kennen wir von früher und mit Hilfe einer Boot-CD hat das schon bei Lilo wunderbar geklappt. Nicht jedoch dieses mal: Fehlermeldungen von nicht gefundenen Partitionen ("Could not find device for /boot: Not found or not a block device.") lachten Hohn über ganz verschiedene Anleitungen.

    Ein paar ausgerissene Haarbüschel später und nach einer sehr formal geordneten Analyse (*lach*) hab ich dann das Problem erfasst. Beim Update wird der alte Grub 0.97 weiterverwendet, eine Neuinstallation (und auf der 9.10 Life-CD) ist der neue Grub 1.97.

    Nach ein paar weiteren Tritten gegen die Maschine war die Lösung dann einfach: Eine alte Knoppix mit altem Grub rausgekramt, gebootet:

    $> sudo grub
    grub> find /boot/grub/stage1
     (hd0,5)
    grub> root (hd0,5)
    grub> setup (hd0)
    grub> quit
    

    Und alle sind wieder glücklich, die Haare wachsen nach, die Falten werden sich wieder glätten und die neuen Dellen im PC werden nicht weiter auffallen (is ja ein Dell *höhö_und_schenkelklopf*).

    Unicode Textverzwurbler

    hieroEs sind Ferien, darum ein paar entspannte Links, die etwas Würze in Twitter und Foren (auch explizit nichtgenannte) bringen. UTF-8 und Unicode echt mal sinnvoll angewendet *evil_grin*.

    Als Erstes: TextFlip: ¡ɯn ʇxǝʇ uǝp ʇɥǝɹp sǝ.

    Ebenfalls nett: BubbleText: Ⓓⓐ ⓦⓔⓡⓓⓔⓝ Ⓑⓤⓑⓑⓛⓔⓢ ⓔⓡⓩⓔⓤⓖⓣ…

    Für die Kürzesten Kurzurls: Tinyarro.ws: Für dieses Blog kommt dann etwas heraus wie http://➽.ws/. Kürzer gehts nimmer 🙂 …

    Zum Schluss noch was für C-64 Veteranen: Die Blockgrafik lebt:
    ▄▄█▀▀ ▀█▀ █▀█ █▀ █▄█▄█ █▀█ █▀ ▄▄█▀▀

    Nachtrag 07.2009: 2keystrokes hat ein virtuelles Unicode-Keyboard. Nette Idee!

    Sortierung eines Dropdownwidgets in Symfony ändern (Doctrine)

    Frameworks sind toll. Man kann in vielen tausend Zeilen das tun, wozu man früher nur ein paar Statements gebraucht hat… Oder war es umgekehrt? Hier etwas Symfony spezifisches, das mir ein paar gefärbte Haare gekostet hat, weil ich sie mir ausreissen musste.

    Das Problem

    Es sei gegeben eine dreistufige Hierarchie: Kategorien → Fächer → Kurse. Es sind ganz saubere 1:n-Beziehungen: Jedes Fach gehört zu einer Kategorie und ein Kurs ist genau ein durchgeführtes Fach.

    Folgt man dem (wirklich guten) Symfony-Tutorial, so wird an Tag 3 ganz unten gezeigt, wie aus der Tabellendefinition automatisch ein Formular generiert wird. Clevererweise werden für 1:n-Beziehungen Dropdowns generiert.

    Wenn ein neuer Kurs generiert wird, so soll man angeben können, was für ein Fach er unterrichtet. Standardmässig werden Fächer wie folgt angezeigt:

    1. Ein Kategorienkürzel („I“ für Informatik, „A“ für Ausdruckstanz (haha), …)
    2. Einer „Nummer“ (normalerweise „01“ bis „15“ oder so)
    3. Dem Namen des Fachs

    Das Fach braucht für seine Darstellung also das Kürzel aus dem Kategorien-Model (bin ich der Einzige der bei Models immer grinsen muss?).

    Das generierte Dropdown zeigt die Namen der Fächer falsch und alles Kreuz und Rüben durcheinander an. Ha, nun ist guter Rat teuer.

    dropdownstart

    Lösung

    Namen der Fächer

    Das geht noch relativ einfach: Jedes Model besitzt eine __toString() Methode, die überschrieben werden kann:

    # File: lib/model/doctrine/modelnamefach.class.php
    [...]
      public function __toString() {
            return sprintf('%s %s %s', $this->FreifachNgKategorie->getKuerzel(), $this->getNummer(), $this->getName());
      }
    [...]

    Und tatsächlich:

    dropdownbefore

    Sortierung

    Ich hätte mir eigentlich gewünscht, für jedes Model eine Defaultsortierung angeben zu können. Aber da nicht Weihnachten ist, werden meine Wünsche nicht erfüllt. Da hilft nur Quellcodestudium und glückliches Zusammenpuzzeln der Doctrine Anleitung, dem Symfony-Doctrine Buch und der API-Dokumentation (scrollen bis Doctrine): Beispiele gibts leider fast keine.

    Nungut: Das Formular wird automatisch generiert (lib/form/doctrine/base/), darum sollte hier nur wer was ändern, der per Stunde bezahlt wird und das nach jeder Generierung wieder neu tun kann :). Für uns Andere müssen wir das Choice in der Kinderklasse hacken und eine table_method reinbringen, die die Einträge nach unserem Gusto liefert:

    # File: lib/form/doctrine/modelnamekurs.class.php
    [...]
      public function configure()  {
          $this->setWidget('freifach_id', new sfWidgetFormDoctrineChoice(array('model' => 'FreifachNgFreifach', 'table_method' => 'retrieveFreifachOrderedByCategory')));
      }
    [...]

    Diese table_method muss auch noch codiert werden. Und das in der Tabellenklasse der Fächer (dochdoch, wenn man sich das überlegt ist es ganz logisch *irres_grinsen*).

    # File: lib/model/freifachmodelnameTable.class.php
    [...]
        function retrieveFreifachOrderedByCategory() {
            $q=Doctrine_Query::create()->from('FreifachNgFreifach f')->innerJoin('f.FreifachNgKategorie k')->orderby('k.kuerzel, f.nummer, f.name');
            //echo $q->getSql();
            return $q;
        }
    [...]

    Toll, und dann klappts auch mit dem Dropdown:

    dropdownordered

    Synergy: Ein Tool, das die Arbeitsweise am Computer verändern kann

    synergyDie Arbeitsweise von Synergy ist einfach und bestechend: Die Tastatur und Maus eines Computers (genannt „Server“) kann benutzt werden um den Cursor und die Eingaben auf anderen Compies zu steuern. So weit so gut, aber Synergy macht das über das Netzwerk und (fast) betriebsystemunabhängig!

    Was kann es nun?

    Folgendes Szenario: Meine Grosse ist der Server und mein Arbeitsgerät. Rechts davon steht mein Laptop mit dem Mailclient und links davon mein Nettop mit Doku und Cheatsheets. Fahre ich mit der Maus links oder rechts aus dem Bildschirm der Grossen, erscheint der Cursor auf dem entsprechenden Kleincomputer. Die eine Tastatur kann benutzt werden um auf allen Compies Eingaben zu machen. Der Clou: Sogar die Zwischenablage wird synchronisiert. Ich kann also auf der Einen was kopieren und auf der Anderen wieder einfügen.

    (Zwischenbemerkung: Ja, Computer sind weiblich).

    Da das Ganze betriebssystemunabhängig (im Sinne von: Läuft auf Linux, Mac und Windows) funktioniert, eignet sich das hervorragend für Tests, Dokumentieraufgaben etc.

    Bis auf die Spitze hat es Sembetu getrieben:

    Weiterlesen

    Firefox-Extension für das Bee5 affiliate System

    flying-bee5Über Bee5 habe ich ja früher schon geschrieben. Sie haben jetzt eine Tools-Offensive gestartet: alle Tools, die ihr API verwenden, werden an den Verkäufen die mit dem Tool getätigt werden beteiligt. Aus meiner Sicht eine gute Offerte und eine Win-Win-Situation: Anwender können das System einfacher nutzen, die Programmierer werden für die Arbeit entschädigt, Bee5 wird bekannter und alle sind glücklich.

    Das war eine ideale Gelegenheit zu lernen, wie eine Firefox-Extension geschrieben wird. Bemerkenswerterweise ist sie sogar fertig geworden. Sie befindet sich im Tools-Verzeichnis auf der Bee5 Seite (Login wird benötigt. Klar, sonst macht die ganze Toolbar keinen Sinn!).

    Das Bee5 Affiliate-System

    Kurzrepetition: Bee5 handelt mit Shops und anderen Sites Verträge aus, um für die Beschaffung von Kunden und Verkäufen entlöhnt zu werden (Provisionen). Der Grossteil dieser Beträge wird an jene weitergegeben, die die Kunden beschaffen (Links weitergeben, selber in den Partnershps einkaufen, …). Damit identifiziert werden kann, wer was eingekauft hat, hat Bee5 einen Kurzurl-Dienst ins Leben gerufen. Wird ein Partner-Shop über eine solche URL angesurft, weiss Bee5 wem der Provisionsanteil zusteht. Dieser Kurzurldienst kann aber auch für beliebige URLs benutzt werden, nicht nur für die „Partner“.
    Einfach gesagt läuft es folgendermassen ab:

    1. Man Surft zu einem Partnershop.
    2. Aus der URL wird über die Bee5-Seite eine Kurzurl gemacht.
    3. Man klickt auf diesen Link oder gibt ihn weiter.
    4. Es wird eingekauft.
    5. Der Provisionsanteil wird ausbezahlt.

    Die Firefox Extension sollte folgende Features haben, um den Prozess zu erleichtern:

    • Anzeigen, wenn man sich auf einer Partnerseite von Bee5 befindet.
    • Per Knopfdruck diese Seite über einen Bee5 Link aufsuchen.
    • Die aktuelle Seite im Browser in einen Bee5 Link umwandeln.
    • Beliebige Links in Bee5 Links umwandeln.
    • Über das Guthaben bei Bee5 informieren.

    Herausgekommen ist eine Extension, die sich hauptsächlich als Toolbar zeigt:

    Die Bee5 Extension in Aktion

    Die Bee5 Extension in Aktion

    Anatomie einer Firefox Extension

    Das ganze Prinzip, das hinter einer Firefox Extension steht ist ziemlich interessant. Grundsätzlich werden die GUI-Elemente in XML, genauer in XUL definiert. Für den Browser wird ein Overlay kreiert, in dem man seine Dinge in die Toolbar, das Menü und/oder in die Statusbar einhängt. Alle Ereignisse werden mittels Javascript implementiert. Ein Ausschnitt aus dem Overlay:

    <overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="Bee5TB-Overlay">
        <stringbundleset id="stringbundleset">
            <stringbundle id="Bee5TB-stringBundle" src="chrome://bee5bar/locale/bee5bar.properties"></stringbundle>
        </stringbundleset>
        <script type="application/x-javascript" src="chrome://bee5bar/content/bee5bar.js"></script>
        <toolbox id="navigator-toolbox">
            <toolbar id="Bee5TB-Toolbar" toolbarname="&bee5bar.toolbarname;" accesskey="&bee5bar.toolbarname.key;" class="chromeclass-toolbar" context="toolbar-context-menu" hidden="false" persist="hidden">
                <toolbaritem flex="0" id="Bee5TB-MainMenuTBItem">
                    <toolbarbutton id="Bee5TB-MainMenu" type="menu" tooltiptext="&bee5bar.menu.tooltiptext;" label="&bee5bar.menu;" accesskey="&bee5bar.menu.key;">
                        <menupopup>
                            <menuitem label="&bee5bar.menu.website;" accesskey="&bee5bar.menu.website.key;" tooltiptext="&bee5bar.menu.website.tooltiptext;" oncommand="Bee5Bar.loadURL('http://bee5.de/beeoNu53a88')"></menuitem>
                            <menuitem label="&bee5bar.menu.mybee5;" accesskey="&bee5bar.menu.mybee5.key;" tooltiptext="&bee5bar.menu.mybee5.tooltiptext;" oncommand="Bee5Bar.loadURL('http://bee5.de/my/')"></menuitem>
                            <menuitem label="&bee5bar.menu.statistics;" accesskey="&bee5bar.menu.statistics.key;" tooltiptext="&bee5bar.menu.statistics.tooltiptext;" oncommand="Bee5Bar.loadURL('http://bee5.de/my/statistic-abstract.html')"></menuitem>

    Weiterlesen

    Flickr: Private Photos posten

    flickrFlickr macht Spass! Mittels digikam und dfo hat man ihn auch unter Linux ganz gut im Griff. So ein Onlinealbum erfreut Familie und Freunde und dient zusätzlich als Backup.

    Hier ein kleiner Trick, wie man (eigene!) private Photos publizieren kann. Zuerst: Warum sollte man das wollen? Ganz einfach: Man hat Photos, die man nicht allen zugänglich machen will. Was interessiert die Familie die Fastnacktfotos des letzten Betriebsfestes oder das lustige Chaos zu Hause? Wenn man die Sichtbarkeit auf „öffentlich“ stellt, dann werden sie auf der Benutzerseite angezeigt und sind auch über die Suche findbar. Vielleicht möchte man aber genau diese Fotos einem eingeschränkten Benutzerkreis (im Firmenintranet beispielsweise) trotzdem zeigen.

    Mit folgendem Vorgehen ist dies möglich:

    1. Die gewünschten Fotos auf „Nur Sie (privat)“ stellen.
    2. Auf das Foto klicken, um die Detailansicht zu sehen.
    3. Über dem Foto auf die Lupe („Alle Grössen“) klicken.
    4. Den Link „Diese Grösse herunterladen“ kopieren. Er ist so in der Form http://farm2.static.flickr.com/3170/3414365629_d1ed214a27_b_d.jpg
    5. Den Link pasten, wohin man auch immer will.

    Ist das eine Sicherheitslücke? Vielleicht. Ein Feature? Ganz sicher :)…