Mittwoch, 14. März 2012

Titelzeile eines Windows-Fensters ausserhalb der Bildschirmansicht

Wer wie ich gezwungen ist, auf der Arbeit mit Microsoft Windows zu arbeiten, hat im wechselnden Zweimonitorbetrieb vielleicht auch schon einmal das Problem gehabt, dass die Titelzeile eines Fensters ausserhalb der Bildschirmansicht zu liegen kam, wenn man ein maximiertes Fenster verkleinerte.

Es gibt aber tatsächlich eine Möglichkeit, um die Titelzeile wieder innerhalb den angezeigten Bildschirmbereich zu bringen:

  1. Alt + Space (Leertaste)
  2. M
  3. Das Fenster mit den Cursor-Taste verschieben
  4. Enter

Quelle: Move a window when its title bar is off the screen

Tags: , ,
Labels: IT

2 Kommentare | neuen Kommentar verfassen

Montag, 12. März 2012

Coop und MIGROS sind noch nicht bei Web 2.0 angekommen

Was fällt dem geneigten Web-Entwickler an nachfolgenden URLs auf, die auf Produkte in Web-Shops von Coop (Coop@home) respektive MIGROS (LeShop) verweisen?

Mein Deutschlehrer aus dem Gymnasium würde sowohl die Detailhändler als auch die Entwickler deren Web-Shops fragen: „Sind Sie eigentlich bescheuert?!“ Es scheint, als wären die technische Entwicklung der letzten 10 Jahre spurlos an diesen beiden Buden vorbeigegangen.

Zum einen wäre der Nutzen kurzer, einfacher deklarativer URLs für die Endkunden deutlich komfortabler – und würde wohl auch sozusagen kostenlos SEO mit sich bringen. Wie wäre es bspw. mit:

  • http://www.coopathome.ch/product/coop-mango-lassi-2.5dl/1234567890
  • http://www.leshop.ch/product/selection-lassi-mango/1234567890

Zum andere Frage ich mich über die Überlegungen der Web-Entwickler hinter den beiden Web-Shops, insbesondere desjenigen von coop@home: Was zum Teufel sollen all diese Variablen, die per GET übergeben werden?

  • xcm=coop_dev
  • cpgsize=24
  • layout=7.0-1_0_3_7_8_9_10_11_14_13_51_18_15_21_46_47_52_6_26
  • uiarea=16
  • cpgnum=1

Und was sagt mir diese ellenlange URL b2c_coop/catalog/updateItems/ eigentlich aus?

Wir sehen, es bleibt bei Coop & Co. noch viel zu tun.

Tags: , , , , ,
Labels: Web

1 Kommentar | neuen Kommentar verfassen

Donnerstag, 8. März 2012

Fragwürdige Bauzonen

Heute verbaut man in der Schweiz entweder ausgezeichnetes landwirtschaftliches Kulturland (Stichwort: Kanton Aargau) oder aber man baut die Häuser in Gefahrenzonen. Diese erkennt man oftmals aber nicht als solche, weil sich die Erinnerungen an weit zurückliegende Ereignisse und Katastrophen aus dem sogenannten „kollektiven Gedächtnis“ verflüchtigt haben:

Die Besiedelungsdichte hat besonders in Zonen zugenommen, die wegen den ungünstigen geologischen Eigenschaften früher gemieden wurden.

Quelle: SEISMO 12: Abstract – Erdbeben, Ursachen und Risiken in der Schweiz

Tags:
Labels: Schweiz

Keine Kommentare | neuen Kommentar verfassen

Donnerstag, 8. März 2012

Bedingte Formatierung in Microsoft Access mit mehr als drei Prüfwerten

Von Microsoft ist man Benutzerunfreundlichkeit gewohnt, und so verhält es sich auch mit der bedingten Formatierung (Conditional Formatting) von Reporten in Microsoft Access: Der Wert eines Feldes kann mit den GUI-Tools nur auf drei Stati gleichzeitig geprüft werden.

Zum Glück kann man auf VBA ausweichen. Hierzu öffnet man die Design View des Reports, wählt die Sektion „Detail“ mit Klick auf dessen Balken aus, wechselt im Eigenschaftsfeld auf Events und erstellt dort für das Ereignis „On Format“ eine VBA-Prozedur mit dem Code Builder.

Dort kann man als geübter Entwickler dann mit dem Select Case-Konstrukt arbeiten:

Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer)
    Dim sStatus As Variant 'To account for null values
    sWert = Me!Wert
    
    Select Case sWert
    Case "Yes"
        ' Grün
        cColor = RGB(0, 255, 0)
    Case "In most cases"
        ' Gelb
        cColor = RGB(255, 255, 0)
    Case "In almost half the cases"
        ' Orange
        cColor = RGB(255, 215, 0)
    Case "In a few cases"
        ' Fuchsia
        cColor = RGB(255, 0, 255)
    Case "No"
        ' Rot
        cColor = RGB(255, 0, 0)
    Case "Not applicable", "N/A"
        cColor = RGB(192, 192, 192)
    Case Else
        cColor = RGB(255, 255, 255)
    End Select
    
    Debug.Print "Setting Color to " & cColor & " based on " & sWert
    Me!Wert.BackColor = cColor
End Sub

Ein Nachteil hat das ganze aber: Die Hintergrundfarbe wird nur in der Druckvorschau angezeigt. Auch das wieder: Typisch Microsoft. Unbrauchbare Software aus dem letzten Jahrhundert.

Tags: , , , ,
Labels: Programmierung

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 4. März 2012

Geburtstage von Apple AddressBook nach iCal übertragen

Damit man die gesammelten Geburtstage seiner Mitmenschen immer im Kopf behält, empfehle ich jedem Mac-Anwender die nützliche Apple Automator-Action iCalBirthdays.

Mit dieser Action ist es möglich, für alle im Apple Adressbuch enthaltenen Kontakte mit Geburtsdatum einen Alarm in iCal zu erstellen. Führt man die Automator-Action quartalsweise (oder häufiger) durch — je nachdem, wie oft neue Geburtsdaten ins Adressbuch aufgenommen werden — hat man so immer einen aktuellen Kalender und somit auch eine Erinnerungsmeldung, damit man Bekannten pünktlich gratulieren kann.

Nachdem die Action heruntergeladen und installiert ist, öffnet man Apple Automator und erstellt einen Workflow mit der iCalBirthday-Komponente in der Calendar-Library. Den Workflow speichert man anschliessend am Besten als eigenständige Applikation, die man unter /Applications ablegt.

Meine Einstellungen für den Workflow schauen folgendermassen aus:

Screen Shot 2012-03-04 at 21.55.18

Tags: , , ,
Labels: Apple

3 Kommentare | neuen Kommentar verfassen

Sonntag, 4. März 2012

Aktuell geöffnetes Fenster unter Mac OS X minütlich aufzeichnen

Seit mehreren Jahren zeichne ich jede Minute auf, welches Fenster auf meinem Mac OS X-Desktop aktiv ist. Ich nutze diese Aufzeichnungen nicht zuletzt dazu, um bei ungefähr zu wissen, wie lange ich für Kundenaufträge gearbeitet habe — und dementsprechend Rechnung zu stellen.

Das AppleScript lautet folgendermassen:

tell application "System Events"
	set app_name to name of item 1 of (every process whose frontmost is true)
end tell

tell application app_name
	try
		if (count of windows) > 0 then
			set mouseToolsPath to "usr:local:bin:MouseTools"
			set {mouseX, mouseY} to paragraphs of (do shell script quoted form of POSIX path of mouseToolsPath & " -location")
			
			set title to (app_name & "&title=" & name of window 1 & "&x=" & mouseX & "&y=" & mouseY)
		end if
	on error
		set title to app_name
	end try
end tell

Damit das Script auch gleichzeitig die Position des Mauszeigers erfasst, müssen noch die MouseTools heruntergeladen und — in meinem Fall — unter /usr/local/bin/ abgelegt werden.

Um dieses Script regelmässig auszuführen, habe ich mit der kostenpflichtigen Applikation Lingon einen launchd-Job erstellt (in der Steinzeit hat man noch auf Cron-Jobs zurückgegriffen), der jede Minute ausgeführt wird. Hierzu verwende ich ein bash-Script als Wrapper, um die Informationen an ein PHP-Script auf einem im Intranet stehenden Linux-Server weiterzuleiten:

#!/bin/sh

LOGGEDIN=`who | grep "^mario" | grep console | wc -l`
WGET="/opt/local/bin/wget"
#WGET=`which wget`

if [ $LOGGEDIN -lt 1 ];
then
        echo "User mario not logged in. Exiting."
        exit 0
fi

if [ ! -x "$WGET" ];
then
	echo "wget executable '$WGET' not found. Exiting."
	exit 1
fi

APP=`/usr/bin/osascript /usr/local/bin/FrontMostApplication.scpt`
#echo $APP

URL="http://tld/save.php?app=$APP"

#echo "Accessing URL '$URL' using $WGET"

$WGET -q -O /dev/null "$URL"

exit 0

Tags: , , , ,
Labels: Apple, Linux

Keine Kommentare | neuen Kommentar verfassen

Samstag, 3. März 2012

Bye bye, Virgin Megastore Paris — hello Apple Store!

Das waren noch Zeiten, als ich um die Jahrtausendwende zusammen mit Gymerkollegen mehrere Male in Paris weilte. Ein Besuch im Virgin Megastore an der Champs Elysées gehörte bei diesen Trips jedesmal zu einem Muss.

Wir Schweizer ergötzten uns am Verkaufstempel von CDs und Vinyls in unsereins ungewohnten Dimensionen, und auch, dass man mit Barcode-Lesern die EANs der CDs einlesen und dann über Kopfhörer probehören konnte.

Mehrere Male kehrte ich mit einigen raren, internationalen Tonträgern von damals zeitgenössischen Künstlern nach Hause, unter anderem Brian Transeau oder kurz: BT.

Wie sich die Welt mehr als 10 Jahre später geändert hat: Damals hatte ich mir gerade mein erstes Mobiltelefon geleistet, ein Nokia 8210, mit welchem man für teures Geld telefonieren und — ganz neu — auch zwischen den verschiedenen Mobilfunknetzen SMS austauschen konnte. Auf den Reisen dabei hatte ich eine Sony DSC-P1, die zwar bereits 3 Megapixel aufwies, auf den 64MB fassenden MemoryStick aber kaum genügend Bilder aufnehmen konnte. Als frischverdienender Vollzeitangestellter steckte ich zudem viel Geld in den Aufbau einer CD-Sammlung elektronischer Musik.

Heute besitze ich zwei iPhones, ein iPad, ein MacBook Air … und kann mich nicht erinnern, wann ich das letzte Mal einen physischen Tonträger erstanden habe. Die Zeit der CD-Läden ist vorbei, die digitale Distribution von Musik (und bald auch Filmen) hat die altgedienten Distributionskanäle — und damit auch Virgin — gekillt.

Deshalb ist es die grösste Ironie an der ganzen Geschichte, dass Gerüchten zu Folge nach dem Auszug von Virgin aus dem Lokal an der Champs Elysée das Gebäude an den Musikdistributionsplatzhirschen Apple abtritt:

Business Insider points to a report [Google translation] from French newspaper Le Figaro noting that Virgin will be vacating its landmark retail store on Champs-Élysées in Paris and that Apple is one of the primary candidates rumored to be interested in taking the spot.

Quelle: Rumors of Massive Apple Retail Store for Paris as Virgin Vacates Prime Location

Tags: , , ,
Labels: Apple, Wirtschaft

Keine Kommentare | neuen Kommentar verfassen

Samstag, 25. Februar 2012

youtube-dl meldet „no fmt_url_map or conn information found in video info“

Wer Youtube-Videos auf seinen Rechner herunterladen möchte, um sie später ohne Internetverbindung anschauen zu können, wird das Python-Script youtube-dl längst kennen.

Wenn das Ding aber den Fehler

$ ~/youtube-dl.sh http://www.youtube.com/watch?v=QhhFQ-3w5tE
[youtube] Setting language
[youtube] QhhFQ-3w5tE: Downloading video webpage
[youtube] QhhFQ-3w5tE: Downloading video info webpage
[youtube] QhhFQ-3w5tE: Extracting video information
ERROR: no fmt_url_map or conn information found in video info

meldet, sollte man sich den Fork von Philipp Hagemeister herunterladen, welcher den Bug behebt:

youtube-dl (Philipp Hagemeisters Fork)

Youtube-Video als MP3 herunterladen

Wenn wir gerade dabei sind: Wer obiges Tool einsetzt, sollte auch zwingend nachfolgende Web-Site kennen, welche Youtube-Videos in MP3-Dateien umwandelt:

www.youtube-mp3.org

Tags: , , , , ,
Labels: Linux

2 Kommentare | neuen Kommentar verfassen

Sonntag, 19. Februar 2012

MacPorts unter Lion

Xcode 4.3 kann nur noch über den Mac App Store bezogen werden. Applikationen, die über diesen Kanal vertrieben werden, müssen verschiedene Einschränkungen in Kauf nehmen — unter anderem können sie nicht mehr Dateien irgendwo auf der Macintosh HD ablegen.

Die ausführbaren Dateien liegen unter /Applications/Xcode.app/Contents/Developer, und dies muss man auf der Kommandozeile auch dementsprechend kundtun:

sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer

Quelle: Untitled

Damit ist es aber noch nicht getan. In Xcode muss man nun noch die Command Line Tools installieren, die den gcc-Compiler zur Verfügung stellen:

  1. Xcode installieren
  2. Xcode starten
  3. Xcode
  4. Preferences
  5. Downloads
  6. Install Command Line Tools

Unklare Wirkung

Bei der Fehlersuche habe ich auch noch folgende Anpassung an /opt/local/etc/macports/macports.conf vorgenommen, weiss aber nicht, ob sie nötig ist oder nicht:

...
# Directory containing Xcode Tools (default is to ask xcode-select)
#developer_dir       /Developer
developer_dir        /
...

Tags: , , , , , ,
Labels: Apple

Keine Kommentare | neuen Kommentar verfassen

Freitag, 17. Februar 2012

Iteration über alle in eine Word-Datei eingebette OLE-Objekte

In einem Word-Dokument befinden sich ein Dutzend OLE-Objekte, sprich in die Word-Datei eingebettete Dateien wie PDFs, TXTs und XLSs.

Folgendes Visual Basic-Script iteriert über die Shapes und InlineShapes in einem Dokument und gibt den Dateinamen aus:

Sub emeidiListEmbeddedFiles()
    Debug.Print "Shapes in ActiveDocument.Shapes.Count: " & ActiveDocument.Shapes.Count
    Debug.Print ""
    
    For Each Shape In ActiveDocument.Shapes
        With Shape
            With .OLEFormat
                'Debug.Print "    .IconLabel: " & .IconLabel
                Debug.Print .IconLabel
            End With
        End With
    Next
    
    Debug.Print "Shapes in ActiveDocument.InlineShapes.Count: " & ActiveDocument.InlineShapes.Count
    Debug.Print ""
    
    For Each Shape In ActiveDocument.InlineShapes
        With Shape
            With .OLEFormat
                'Debug.Print "    .IconLabel: " & .IconLabel
                Debug.Print .IconLabel
            End With
        End With
    Next
    
    
End Sub

Das Script kann problemlos angepasst und erweitert werden, um die Eigenschaften der entsprechenden Objekte zu verändern.

Tags: , , ,
Labels: Programmierung

Keine Kommentare | neuen Kommentar verfassen