[Quicktip] mehrere PDF Dateien durchsuchen

Ihr steht vor dem Problem, dass ihr nach Wörtern bzw. Sätzen in mehreren PDF Dokumenten suchen möchtet? Unter Mac OSX ist das mit Spotlight kein Problem, und auch Windows 7 kennt mittlerweile einen Indexdienst. Wollt ihr diesen nicht verwenden oder seid ihr noch mit Windows XP unterwegs, dann probiert folgendes:

1. Acrobat Reader (natürlich die aktuelle Version – Acrobat Reader 9) starten
2. auf den kleinen Pfeil neben dem Suchfeld klicken und “Erweiterte Suche in Adobe Reader öffnen” auswählen

3. den Punkt “Alle PDF-Dokumente in” anklicken und den Ordner mit euren PDFs auswählen

4. Suchbegriff eingeben und auf “Suchen” klicken

Linux direkt in einem Browser booten

Es gibt immer wieder diese Momente, die mich einfach nur staunen lassen. Wie jetzt z.B., wenn ich einen kompletten PC Simulator auf Basis von Javascript sehe, der direkt in einem Browser läuft und Linux bootet. Was ist das für ein krasser Scheiss?

Wenn man sich ein bisschen mit PC Technik auskennt, dann kann man erahnen wie komplex es sein kann, so etwas zu simulieren. Und dabei wird nicht irgendeine “simple” CPU simuliert – es handelt sich um eine 32 Bit x86 kompatible Implementierung. Da wird also ein Prozessor simuliert (hier natürlich trotzdem in stark eingeschränkter Form), wie er heute noch in sehr großen Teilen zum Einsatz kommt. Theoretisch könnte man darauf auch Windows laufen lassen.

Was erstmal wie ne Spielerrei aussieht, kann durchaus einen Nutzen haben. So ist das System in erster Linie sehr gut für Javascript-Engine-Benchmarks geeignet, aber auch, um etwa x86 Librarys direkt auf dem Clientrechner laufen zu lassen und mit ihnen per API zu kommunizieren. Konkret könnte eine Webseite das System einbinden, und dann per API auf Verschlüsselungsfunktionen von z.B. Linux zurückgreifen. Das ermöglicht eine sichere Verschlüsselung direkt auf dem Clientrechner, bevor die Daten zum Server gesendet werden…

Live ausprobieren könnt ihr das System hier – natürlich mit einem relativ aktuellen Browser…:
bellard.org/jslinux

Technische Details zum System findet ihr hier:
bellard.org/jslinux/tech.html

[App] Wordshot – Übersetzung per Augmented Reality

Eine sehr geile App, die ich zufällig im App-Store entdeckt habe: Wordshot. App starten, den zu übersetzenden Text mit der Kamera einfangen und schon wird die Übersetzung direkt im Kamerabild darübergelegt.

Natürlich funktioniert das nicht immer gleich perfekt, aber von der Geschwindigkeit her ist es schon ganz gut. Wenn die Schrift zu klein ist, dann werden auch die Ergebnisse schlechter – ähnliche Einflüsse hat natürlich auch das verfügbare Licht.

Mögliche Anwendungsgebiete werden in folgendem Spot sehr schön gezeigt:

Die relativ schlechten Bewertungen im Appstore kommen daher, dass die App angeblich Abzocke sei – im kostenlosen Umfang ist bisher nur die Übersetzung zwischen Deutsch und Englisch enthalten. Möchte man mehr sprachen haben, so kostet dies pro Sprache 1,59€. Ich denke, dass das ein fairer Preis ist und man mit der englischen Variante ausreichend testen kann.

Artikel wurde nicht gefunden

[Quicktip] Touchpad Gesten / Rotation unter Photoshop CS4 deaktivieren

Adobe baut ja gerne Innovationen in seine Produktpalette ein – aber schießt auch gerne mal übers Ziel hinaus. So auch bei Photoshop CS4 auf dem Mac: hier wurden Gesten über das Macbook Trackpad ermöglicht, mittels derer man Pinchen/zoomen, aber auch das komplette Dokument rotieren kann. Kann ich pinch&zoom noch nachvollziehen, so fehlt mir ein wirklicher Anwendungsgrund für die Rotation. All das wäre ja kein Problem, wenn man diese Features an- und ausschalten könnte. Aber das wollte Adobe dann wohl doch nicht.

Das eigentlich ärgerliche daran ist aber, dass man die Rotation sehr oft unbeabsichtigt betätigt. Und das kann ziemlich nervig sein. Abhilfe gab es lange Zeit nicht, aber Adobe scheint nun endlich Einsicht gehabt zu haben und hat folgendes Plugin zur Verfügung gestellt:

disable_trackpad_gestures.dmg

Einfach herunterladen und öffnen, anschließend das Plugin nach

/Applications/Adobe Photoshop CS 4/Plugins/

(bzw. im Plugin-Ordner innerhalb des Pfades, wo ihr Photoshop installiert habt) kopieren und Photoshop neu starten. Fertig.

Mit dem Plugin werden sämtliche Touchpadgesten in Photoshop ignoriert.

[App] One Track – Pakettracking für das iPhone

Seit langem haben wir mal wieder eine App Empfehlung: One Track von der EURO-LOG AG – einem Dienstleister für Pakettracking. Da alle größeren Versender wie DHL, DPD, FedEx, GLS, Hermes, TNT und UPS ihr Tracking über die Firma lösen, kann man so praktischerweise mit einer App so ziemlich jedes Paket nachverfolgen. Besonders cool dabei ist: man muss nicht wissen, welcher Versender tätig ist – einfach Trackingnummer eintragen und fertig.

Um ein neues Paket zu erfassen, gibt man einfach die Sendungsnummer in das Suchfeld ein – oder scannt den Barcode mit der Kamera ab. Letzteres geht natürlich nur, wenn ich das Paket selbst versende.

Anschließend kann man die Sendung als eingehend oder ausgehend markieren und evtl. Push-Benachrichtungen aktivieren, wenn das Paket da ist oder sich sein Status geändert hat. Als Bonus kann man sich auf Google Maps den aktuellen Standort anzeigen lassen. Sehr coole Geschichte, die ich euch nicht vorenthalten wollte 😉

Ein kleiner Hinweis noch: manchmal kann es sein, dass man eine Tracking-Nummer zugeschickt bekommt und die App dann sagt, dass unter dieser Nummer keine Sendung hinterlegt sei. Das passiert, wenn der Absender selbst Sendungsnummern erzeugen kann – diese wird dann erst im System erfasst, wenn das Paket abgeholt wurde. In diesem Fall versucht einfach nochmal später, das Paket zu tracken.

One Track Sendungsverfolgung (AppStore Link) One Track Sendungsverfolgung
Hersteller: EURO-LOG AG
Freigabe: 4+
Preis: Gratis Download

Streams aus den ZDF, ARD und Arte Mediatheken speichern

Ich bin ja ein ausgesprochen großer Fan der Mediatheken der öffentlich Rechtlichen – nur leider haben die das blöde Problem, dass der Content nur für begrenzte Zeit verfügbar ist und danach auf Ewigkeiten verschwindet. Das ist besonders traurig, da wir Bürger diesen Content finanziert haben.

Hinzu kommt, dass die Inhalte relativ gut gegen Downloads geschützt sind und es somit nicht ausreicht, den Link zur flv- oder mp4 Datei im Quelltext der Seite zu suchen. Abhilfe schafft das Tool MediathekView. Es scannt die Inhalte der Mediatheken von ARD, ZDF, Arte, 3Sat usw. und listet diese auf. Der Clou ist nun, dass gleich die entsprechenden URLs herausgesucht werden und der Stream mittels VLC Player angesehen werden kann. Alternativ kann man mittels flvStreamer die Flash-Streams von z.B. Arte speichern (RTMP).

Bisher habe ich beide Systeme nur unter Mac getestet, es sollte aber so auch unter Windows und Linux laufen.

Wenn man MediathekView startet und den Button “alle Filme neu laden” betätigt, dann wird die Datenbank der verfügbaren Streams geupdated. Anschließend kann man sich die gewünschten Streams heraussuchen.

Arte z.B. verwendet Flash-Streams, die so nicht direkt mit einem Videoplayer angesehen werden können. Leider hat MediathekView bei mir den VLC Player und flvstream nicht erkannt, also musste ich mir manuell weiterhelfen. Klickt man in Mediathekview mittels Rechtsklick auf einen Film und dann auf “URL kopieren”, dann kann man mittels

flvstreamer [kopierte url] -o zieldatei.flv

den Stream sichern. Leider kam bei mir das Problem auf, dass nach immer ca. 3% der Download abbrach. Man kann dann zwar den Ladevorgang mittels

flvstreamer [kopierte url] -o zieldatei.flv --resume

fortsetzen – aber beim nächsten Fehler bricht der Download wieder ab.

Um das Problem zu umgehen, habe ich ein Script bei forum.ubuntuusers.de gefunden. Ich habe es so modifiziert, damit es Parameter übernimmt und somit universell einsetzbar ist:

getflv.sh
#!/bin/sh
flvstreamer -r $1 -o $2 --resume
Checksum1="$(ls -s $2)"
flvstreamer -r $1 -o $2 --resume
Checksum2="$(ls -s $2)"
echo "$Checksum1"
echo "$Checksum2"
while [ "$Checksum1" != "$Checksum2" ]
do
flvstreamer -r $1 -o $2 --resume
Checksum1="$(ls -s $2)"
flvstreamer -r $1 -o $2 --resume
Checksum2="$(ls -s $2)"
echo "$Checksum1"
echo "$Checksum2"
done

Will man einen Stream laden, dann ruft man

getflv.sh [url (ohne -r)] zieldatei.flv

auf. Das Script startet den Download im Falle eines Abbruchs so lange neu, bis die Datei komplett geladen wurde. Das funktionierte bei mir bisher wunderbar – natürlich nur für Arte Streams.

Eye-Fi – Wlan Bildübertragung für jede Digitalkamera

Für den geneigten (Hobby-)Fotografen ist es immer ein Graus, nach einer Fotosession erstmal per Card-Reader oder per USB Kabel dafür zu sorgen, dass die geschossenen Bilder auch auf dem Rechner landen. Es dauert immer alles irgendwie zu lange und ab und zu vergisst man dann doch mal, die noch auf der Karte befindlichen Bilder, zu kopieren.

Die Abhilfe ist Eye-Fi – kurz gesagt eine SD Speicherkarte mit integriertem Wlan. In den verschiedenen Varianten kann die Eye-Fi Karte die Bilder direkt per Push an Laptop, iOS und Android übertragen, kann anhand “sichtbarer” Wlans in der Nähe seine Position grob bestimmen (z.B. in Städten) und auch (natürlich bei vorangegangener Konfiguration) die Bilder direkt zu Flickr, Piccasa und co. selbstständig hochladen.

Sehr interessant ist auch der endless Memory Modus, den alle Varianten (außer der günstigsten) der Eye-Fi beherschen: ist der aktiviert, werden neue Bilder automatisch auf das Zielgerät übertragen und anschließend von der Karte gelöscht – man hat somit also eine “unendliche” Speicherkapazität. Natürlich ist diese auf den Speicherplatz des Zielgerätes begrenzt.

Folgendes Video zeigt das Prinzip nochmal ganz cool:

Wie man sieht, dauert die erste Verbindung kurze Zeit, danach erscheinen die Bilder recht flott nach der Erstellung auch schon auf dem Zielgerät.

Das geniale an der Karte ist, dass sehr viele Kameras unterstützt werden. Um sicher zu gehen, ob die eigene Kamera darunter ist, kann man hier nachschauen: Eye-Fi Camera Check

Die einzelnen Varianten der Karte sehen so aus (die höherwertigen Karten haben immer die gleichen Features wie die darunterliegenden Varianten):


Eye-Fi Connect X2 – die einfachste und günstigste Variante. Die Karte mit 4GB Speicher kann die Bilder und Videos per Wlan übertragen oder auch direkt auf Portale wie Flickr, Piccasa hochladen.


Eye-Fi Geo X2 – Die Geo X2 kann die Bilder wie beschrieben mittels Wlan-Ortung mit Geo-Tags versehen und ist die kleinste Variante mit endless Memory Modus.


Eye-Fi Explore X2 – die Spezialfunktion der Explore Variante ist die Möglichkeit, dass die Kamera unterwegs über definierte Hot-Spots direkt ihre Bilder hochladen kann – dazu gehören HotSpots bei Starbucks, Mc Donalds, Hotelketten, usw. Außerdem ist sie die erste Variante mit 8GB Speicherkapazität.


Eye-Fi Pro X2 – Die Pro-Variante richtet sich, wie der Name schon sagt, an professionelle Anwender. Sie unterstützt den Ad-hoc Modus – also den Betrieb ohne extra Wlan Access-Point/Router. Außerdem kann man nur mit dieser Variante neben den Jpeg Bildern auch RAW Bilder automatisiert übertragen. Mittels Plugin ist sogar eine direkte Interaktion mit Lightroom möglich.

Fazit
Obwohl ich die Karte selbst noch nicht ausprobieren konnte, haben mich die Daten und die Videos bereits überzeugt, dass das Teil echt rockt. Die nächste Investition wird auf jeden Fall die Pro-Variante sein, da ich ausschließlich auf RAW setze und die reine Jpeg-Übertragung eher als Spiellerei betrachte. Für normale Digitalkameras sind die einfachen Karten natürlich völlig ausreichend.

Links
Eye-Fi Produktseite

Was macht einen guten Programmierer aus?

Quelle: Geek&Poke

Nach nun knapp 6 Jahren in der Programmierung und mehreren kleinen und großen Projekten, habe auch ich mir ein Bild von der Welt der Softwareentwicklung machen können. Ich konnte einige Charaktäre kennenlernen und für mich haben sich bestimmte Punkte herauskristalisiert, welche meiner Meinung nach einen guten Entwickler ausmachen.

Beginnen wir erstmal mit dem handwerklichem Teil, den wohl jeder Entwickler drauf haben sollte. Neben Syntax und Semantik gehören auch Kenntnisse der Wirkungsweise von Programmiersprachen, Netzwerktechnik, Computertechnik im Allgemeinen, Design Patterns, Datenbanken, Betriebssystemeigenheiten usw. zum Erfahrungsschatz. Erst wenn man das komplexe Zusammenspiel dieser Komponenten versteht, so kann man auch alle Probleme, die da so kommen mögen, lösen.

Ein anderer Punkt, und den finde ich besonders wichtig, ist die Erfahrung. Entwickler, die eine Programmiersprache beherschen, können zwar schnell neue Sprachen erlernen, weil sie sich fast alle ähneln oder zumindest die gleichen Prinzipien verfolgen (hier gibt es natürlich Ausnahmen). Aber auch wenn der Entwickler die neue Sprache erlernt hat, so kennt er bestimmte Eigenheiten eben erst, wenn er auch eine gewisse Praxis hat (min. 0,5 – 1 Jahr). Das hat Auswirkungen auf die Geschwindigkeit des entwickelten Codes und natürlich auch auf die Produktivität des Entwicklers. Meiner Meinung nach ein häufig nicht bedachtes Problem.

Ein wichtiges Kriterium für einen guten Entwickler ist seine Arbeitsweise. Man kann streng nach Lehrbuch programmieren, man kann aber auch lösungsorientiert an ein Problem herangehen. Obwohl ich mich möglichst an die Konventionen halte, so bin ich doch auch öfter mal der lösungsorientierte Typ. Ich denke einfach, das man immer eine gute Balance zwischen Lesbarkeit des Codes und aber auch dessen Performance halten sollte. Natürlich macht es Sinn, streng objektorientiert zu entwickeln, an manchen Stellen kann dies aber sowohl in der Lesbarkeit als auch in der Geschwindigkeit des Codes negative Auswirkungen haben. Es ist aber von Fall zu Fall unterschiedlich – und die Grenze zum Gefrickel ist hauchdünn.

Quelle: Geek&Poke

Neben der Art und Weise, wie man seinen Code strickt, hat natürlich auch die Verwendung von Kommentaren und geeigneten Funktions/Variablennamen einen sehr großen Einfluss auf die Lesbarkeit. Meine Devise: lieber eine Funktion “getLoggedInUserData()” nennen als “getData()” – sagt beides das gleiche aus, jedoch gibt erste Funktion deutlich mehr Randinformationen und beschleunigt so sehr schnell das Verständnis für den Code. Wie lang eine Funktionsbezeichnung oder ein Variablenname ist, hat keinerlei Auswirkung auf die Ausführungsgeschwindigkeit – denn beim Kompilieren werden die Namen sowieso verworfen. Also warum geizen, wenn man diese Fähigkeit gut ausreizen kann. Natürlich sollte man es auch nicht übertreiben und zum Schluss Funktionen wie “todayIsAGoodDaySoGiveMeTheUserData()” nehmen 😉

Dokumentation des Codes ist natürlich immer ein leidiges Thema. Ich persönlich bin eigentlich immer ganz froh, wenn wie oben beschrieben Variablen und Funktionen selbsterklärend sind und sich doch ab und zu eine Kommentarzeile im Code verläuft. Wenn ich dann noch eine zusätzliche Dokumentation erhalte, die mir grob einen Gesamtüberblick über das System verschafft, bin ich schon glücklich. Als Entwickler kann man sich, mit etwas Erfahrung, sehr schnell in Systeme “reindenken” – gibt es dann dazu eine automatisiert generierte 1000-Seiten Doku, wird zumindest bei mir der gegenteilige Effekt erziehlt.

Sätze wie “Kommentare schreibe ich dann später rein” kennen wir wohl zuhauf – und seien wir mal ehrlich: in diesem Fall wird es nie einen Kommentar geben. Ein guter Ansatz ist daher, zuerst den Klassen- oder Methodenrumpf zu bauen, grob zu dokumentieren und erst dann mit der Implementierung zu beginnen.
Optimalerweise kann man abschließend noch ein paar erläuternde Kommentarzeilen verpacken und schon hat man wieder deutlich zur Verständlichkeit beigetragen.

Fazit
Ein nettes Zitat, welches ich kürzlich gelesen hatte, sagt folgendes: “Entwickle immer so, als ob der Typ, der den Code später warten muss, ein Psychopat ist, der deine Adresse hat.”. Besser kann man es wohl nicht formulieren 😉

Links:
Geek&Poke (Bildquelle)

Kinect + 3D Drucker

Wow, es vergeht kaum eine Woche, in der nicht irgendjemand ne extrem coole Verwendung für Microsoft Kinect findet.

Die Jungs von blablabLAB (Künstlergruppe?) aus Spanien hat in Barcelona eine Installation aufgebaut, die kleine Plastikfiguren nach dem Vorbild von echten Menschen baut. Das “Vorbild” muss sich einfach auf eine Plattform stellen und wird mittels 3 Kinects in 3D erfasst. Anschließend “druckt” ein 3D Drucker die per Blender aufbereiteten Daten und heraus kommt eine kleine Figur.

Wirklich sehr beeindruckend, aber seht selbst:

via engadget

Verzögertes MouseOver/Hover mit jQuery

Da ich durch meinen Jobwechsel nun in der Frontend Entwicklung tätig bin, muss ich mich natürlich auch stärker mit Javascript – speziell mit jQuery – beschäftigen. Das System ist ziemlich genial gebaut und so kann man sehr schnell einsteigen.

Aber wie das so ist – man stößt auch mal auf Probleme. Und so hing ich an der Aufgabe, ein Hover-Event verzögert auszulösen. Zunächst ging ich davon aus, das jQuery diese Möglichkeit von Haus aus bietet – was aber nicht der Fall ist. Man kann zwar das Plugin HoverIntent verwenden, ich wollte aber eher eine Lösung mit Bordmitteln. Und die gibt es:

$("#cart-summary").mouseenter(function () {
    $("#cart-summary").addClass("hasFocus");
    setTimeout(function(){
        if ($("#cart-summary").hasClass("hasFocus")) {}
            $('.flycart').slideDown('fast');
        }
      }, 500 );
      });
$("#cart-summary").mouseleave(function () {
    $("#cart-summary").removeClass("hasFocus");
});

Das Prinzip ist eigentlich ziemlich genial: Per “Mousenter” wird erkannt, ob sich die Maus über dem Element (in diesem Beispiel “#cart-summary”)befindet. Sofort wird dem Element die Klasse “hasFocus” zugewiesen und der eigentliche Funktionsaufruf (z.B. “slideDown”) wird mittels der TimeOut Funktion verzögert (hier um 0,5 Sekunden) aufgerufen. Der Trick ist nun, dass innerhalb der Timeoutfunktion noch einmal geprüft wird, ob das Element noch die Klasse “hasFocus” hat. Nur wenn dies der Fall ist, wird die “slideDown” Funktion ausgeführt.

Der findige Entwickler wird nun bemerken, dass trotz dieser Raffinessen, das gleiche Ergebnis, wie bei einem einfachen Hover, erziehlt wird – denn auch mit Timeout wird die Funktion in jedem Fall aufgerufen. Und da kommt das zweite Event ins Spiel: bei einem “MouseLeave” wird dem aktuellen Element die Klasse “hasFocus” entfernt. Dadurch schlägt die Prüfung in der TimeOut Funktion fehl und die hinterlegte “slideDown” Funktion wird nicht ausgeführt.

Erst mittels der “MouseLeave” Funktion wird also das verzögerte MouseOver Event ermöglicht.

via stackoverflow.com