Kurz-Tipp: Bildschirmfotos unter Mac OS X erstellen

Eigentlich ist es ganz einfach Bildschirmfotos unter OS X zu erstellen. Aber da es keine extra beschriftete Taste gibt steht man dann doch immer wieder vor der Frage wie die entsprechende Tastenkombination lautet.

 

Ganzer Bildschirm

Um den ganzen Bildschirm zu Fotografieren genügt es die Tasten Cmd + Shift + 3 zu drücken:

Ganzer Bildschirm

 

Bildschirmbereich

Soll hingegen nur ein Bereich des Bildschirms fotografiert werden lautet die Tastenkombination
Cmd + Shift + 4:

Bildschirmbereich

 

Einzelnes Fenster oder in die Zwischenablage

Ein einzelnes Fenster kann man fotografieren indem man nach der Tastenkombination Cmd + Shift + 4 noch die Leertaste drückt:

Einzelnes Fenster

All diese Befehle speichern das Bildschirmfoto als Datei ab. Wenn das Bild allerdings in die Zwischenablage gespeichert werden soll genügt es zusätzlich die Taste Ctrl zu drücken:

Zwischenablage ganzer BildschirmZwischenablage BereichZwischenablage Einzelnes Fenster

Werbeanzeigen

SyncToy: Ein kleiner Backup-Helfer

An Backups denkt man in der Regel erst wenn es zu spät ist. Vorher ist es immer zu aufwändig und man glaubt eh keine wichtigen Dateien zu haben die nicht noch irgendwo anders gespeichert sind. Um nicht eines besseren belehrt zu werden würde es genügen die Daten nur regelmässig auf ein externes Laufwerk zu sichern.
Mit SyncToy gibt es ein kleines Programm das genau für diesen Zweck gemacht wurde.

 

Download und Installation

SyncToy kann bei Microsoft als 32 oder 64bit Version heruntergeladen werden. Welche Version man wählt spielt keine Rolle. Bisher konnte ich keine Unterschiede feststellen die über das Installationsverzeichnis hinausgehen (Programme oder Programme (x86)).

Der Installationsdialog ist erstaunlich umfangreich und will sehr viele Bestätigungen. Wiederholtes klicken auf „Next“ genügt zur Installation allerdings vollkommen.

 

Konfigurieren

Nach dem ersten Start begrüsst einem dieser einfache Dialog mit der Aufforderung ein Verzeichnispaar zu erstellen:

SyncToy

Der Dialog zum Erzeugen des Verzeichnispaares unterscheidet zwischen linkem (Left) und rechtem (Right) Ordner. Um meinen persönlichen Ordner zu sichern wähle ich diesen als linken Ordner aus und als rechten Ordner das Verzeichnis „Z:\Air\User.JGR“:

SyncToy 1. Schritt

Rechter und linker Ordner sind wenig gebräuchliche Begriffe. „Quelle“ und „Ziel“ dürfte einem bekannter sein. Allerdings kommt es sehr darauf an was man mit diesen beiden Ordnern machen will. Dies legt man auf dem 2. Schritt fest:

SyncToy 2. Schritt

Zur Auswahl stehen einem diese Optionen:

  • Synchronize: Neue, veränderte und gelöschte Dateien werden in beide Richtungen synchronisiert.
  • Echo: Veränderungen (hinzufügen, löschen, verändern) im linken Ordner werden auf den rechten appliziert.
  • Contribute: Nur neue und veränderte Dateien aus dem linken Ordner werden in den rechten Ordner übertragen. Im linken Ordner gelöschte Dateien bleiben im rechten Ordner erhalten.

Welche Option man auswählen soll hängt ganz vom Einsatzweck ab. Echo und Synchronize unterscheiden sich dadurch ob auch mit dem rechten Ordner gearbeitet wird. Ist dies der Fall sollte man Synchronize verwenden. Will man die Ordner nur 1:1 sichern genügt Echo.
Contribute kann einem dabei helfen auch gelöschte Dateien zurück zu holen. Da keine Dateien gelöscht werden muss man sich selber ums aufräumen kümmern.

 
Zum Abschluss benötige dieses Ordnerpaar noch einen Namen, unter dem man später die beiden Verzeichnisse identifizieren kann:

SyncToy 3. Schritt

 

Ordner synchronisieren

SyncToy lässt einem die Ordnerpaare einzeln oder gemeinsam ausführen. Letzteres ist vor eine Arbeitserleichterung da man sich nicht an alle gemachten Änderungen erinnern muss. Je nach Anzahl Änderungen, der Datenmenge oder der Geschwindigkeit des angehängten Laufwerkes muss man sich nach einem Klick auf „Run all“ ein wenig gedulden:

SyncToy Resultat

 

Fazit

Mit SyncToy gibt es ein kleines Tool mit dem man einfach seine Daten sichern kann. Nach einer einmaligen Konfiguration genügt dafür ein einziger Klick. Dennoch ist es flexibel genug um auch spezielleren Wünschen bei der Synchronisierung Rechnung zu tragen.

Empfehlung: Unbedingt ausprobieren!

Von Subversion zu Git migrieren

Der Wechsel von Subversion zu Git für die Versionsverwaltung ist an sich ein einfacher Vorgang. Da das Web aber voller veralteter Anleitungen ist steht man bald einmal in einer Sackgasse. Nachdem es mir auch so ergangen ist habe ich hier meine Lösungsansätze für Git 1.7.9.5 zusammengetragen.

 

History: Übernehmen oder verwerfen?

Die wohl wichtigste Frage bei der Migration dreht sich um die Änderungsgeschichte. Soll jeder einzelne je gemachter Commit übernommen werden? Oder will man nur einen bestimmten Stand migrieren? Bei beiden Ansätzen lassen sich Argumente dafür und dagegen finden. Wichtig ist das man diese Entscheidung überlegt trifft, da ein nachträgliche Änderung mit viel Arbeit verbunden ist.

 

Variante ohne History

Kann man auf die History verzichten ist die Migration sehr einfach. Es genügt den aktuellen Stand im SVN-Repository zu exportieren und damit ein Git-Repository zu initialisieren. Dies kann man sowohl mit grafischen Tools wie TortoiseSVN und GitHub for Windows machen wie auch direkt über die Kommandozeile.

svn export svn+ssh://user@localhost/svn/jgraber
cd jgraber
git init
git add .
git commit -m "init migrated repo"

 

Variante mit History

Wenn die History erhalten bleiben soll hilft git svn. Dies wird bei GitHub for Windows mitgeliefert und ist unter Linux über apt-get installierbar. Als Vorarbeit benötigen wir einen Checkout aus Subversion:

svn co svn+ssh://user@localhost/svn/jgraber
cd jgraber
svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > authors-transform.txt
cat authors-transform.txt
jgr = Johnny Graber <dev@JGraber.ch>

Zeile 3 erstellt eine Liste mit allen Personen die jemals in dieses Subversion Repository eingecheckt haben. Diese Liste benötigt man um die Usernamen von Subversion in die von Git her bekannten Autoren (im Format Vorname Nachname ) umzuwandeln. Sobald die Datei authors-transform.txt korrekt ausgefüllt ist geht es weiter mit der Migration:

git svn clone svn+ssh://user@localhost/svn/jgraber --no-metadata -A authors-transform.txt --stdlayout ../git_jgraber
cd ../git_jgraber

Dieser Befehl funktioniert nur wenn das Repository dem Standard mit den Verzeichnissen /trunk, /branches und /tags folgt. Hat man einen anderen Aufbau gewählt beendet sich git svn ohne Fehlermeldung. Die Lösung für dieses Problem ist das Weglassen der Option „--stdlayout„.

Branches übernehmen
Durch die bisherigen Aktionen wurde nur der Trunk von SVN in den Master bei Git überführt. Falls man unter SVN Branches verwendete müssen diese nun explizit übernommen werden. Dazu holt man sich erst eine Übersicht über alle Branches und übernimmt diese dann einzeln:

$ git branch -av
  1.0              2ef18cb Release 1.0 bugfixes
* master           e64eda5 litte changes on trunk
  remotes/1.0      2ef18cb Release 1.0 bugfixes
  remotes/tags/1.0 8604640 Release 1.0
  remotes/tags/1.1 9059098 bugfixed version 1.1
  remotes/trunk    e64eda5 litte changes on trunk
git checkout -b <local_branch> remotes/<remote_branch>
git branch -d -r <remote_branch>

Der letzte Befehl entfernt den Verweis auf den ursprünglichen Branch in SVN. Will man nicht mehr zurücksynchronisieren hat der Remote-Branch seinen Zweck erfüllt und kann entfernt werden.

Tags übernehmen
Wie die Branches müssen auch die Tags übernommen werden. Da SVN einem nicht zwingt Tags nur für einzelne Markierungen zu nutzen sollte man erst prüfen ob nicht ein Tag als Branch verwendet wurde. Ist dies der Fall migriert man diesen Tag wie einen Branch.

Sobald man nur noch „richtige“ Tags hat kann man diese Befehle für eine Übernahme nutzen:

$ git branch -av
  1.0              2ef18cb Release 1.0 bugfixes
* master           e64eda5 litte changes on trunk
  remotes/tags/1.0 8604640 Release 1.0
  remotes/tags/1.1 9059098 bugfixed version 1.1
git tag <local_tag> remotes/tags/<remote_tag>
git branch -d -r <remote_tag>

$ git tag
t1.0
t1.1

 

Ab zu GitHub

Als letzten optionalen Schritt kann man das migrierte Repository zu GitHub oder Bitbucket hochladen. Dazu legt man über die Weboberfläche des jeweiligen Anbieters ein neues Repository an. Die URL zu diesem Repository kann man nun dem lokalen hinzufügen und die Daten hochladen:

git remote add origin ssh://git@bitbucket.org/jgraber/
git push -u origin master
git push --tags
git push origin <branch>

 

Fazit

Ein Repository von Subversion nach Git zu migrieren ist gar nicht so schwer. Alles was man dazu braucht ist eine aktuelle Anleitung und eine Arbeitskopie die man auch einmal löschen kann. Sollte jemand einen einfacheren Weg für die Migration kennen würde ich mich über einen Kommentar freuen.

Meine Werkzeugliste

Es sind ja meist die ganz kleinen Werkzeuge die einem die Arbeit erleichtern und die sind so simpel dass man sie kaum je erwähnt. Startet man in einer neuen Umgebung sind diese Werkzeuge aber meist das erste was man installiert um sich wieder „zu Hause“ zu fühlen.

Dies hier ist meine Liste mit diesen kleinen Tools und Anwendungen die ich für meine tägliche Arbeit einsetze. Die Idee dazu habe ich von Scott Hanselman und Piotr Kwapin. Wer seine Tools beisteuern möchte kann diese gerne via Kommentar tun.

 

Windows

IrfanView ist ein leichtgewichtiger und schneller Bildbetrachter. Mit den eingebauten Funktionen kann man aber auch direkt einen Scanner ansprechen oder eine Batchverarbeitung starten.

7-Zip ist eine Open Source Alternative zu WinZip. Neben *.zip können auch *.tar und *.rar Dateien entpackt werden. Das Tool ist sehr praktisch wenn man betriebssystemübergreifend arbeiten muss.

Notepad++ ist der Texteditor den ich jeweils als erstes Programm auf einem neuen Gerät installiere. Neben Syntaxhervorhebung für fast alle Sprachen unterstützt Notepad++ auch allerlei Zeilenumbrüche und Kodierungen.

ZoomIt ist ein Miniprogramm für Präsentationen. Will man etwas auf dem Monitor zeigen erlaubt ZoomIt das heranzoomen und markieren.

Microsoft Security Essentials ist ein für den Privatgebrauch kostenloser Virenschutz. Läuft bei mir ohne Probleme und ohne Geschwindigkeitseinbussen.

Foxit Reader ist eine schlanke Alternative zum Adobe Reader fürs Anzeigen von PDF-Dateien.

Greenshot liefert alles was man für Screenshots und deren Bearbeitung (wie Hervorhebungen und Pfeile) benötigt.

 

Visual Studio und .Net

ReSharper ist eine äusserst hilfreiche Erweiterung für Visual Studio die viele kleine Unschönheiten behebt und eine sehr praktische Codeanalyse liefert.

NuGet ist ein Paketmanager für Visual Studio der es erlaubt sehr einfach Bibliotheken in sein Programm aufzunehmen. Mit NuGet entfällt zudem das eigenhändige Auflösen der Abhängigkeiten. (Kurzanleitung)

VisualSVN ist meine Wahl um mit SVN-Projekten in Visual Studio zu arbeiten. Die Integration ist sehr gut und man behält die Kontrolle über die einzelnen Aktionen. Dieser Luxus ist mit $49 nicht gratis aber sein Geld wert.

Indent Guides ist eine Erweiterung für Visual Studio zum Visualisieren der Einrückungen. Bei Code mit sehr vielen Verschachtelungen ist diese Erweiterung äusserst Hilfreich.

LINQPad ist ein Editor mit dem man LINQ-Abfragen testen kann. Dadurch dass man nicht mehr für jede Änderung den Code neu kompilieren muss kann man sehr schnell arbeiten und Probleme finden. Ein meiner Meinung nach unverzichtbares Werkzeug auch fürs testen von OData-Abfragen oder zur Zertifizierungsvorbereitung. (Kurzanleitung)

SQL Complete ist ein kostenloses Plug-In um das SQL Server Management Studio mit IntelliSense zu erweitern. Schreibt man SQL-Abfragen von Hand ist dies eine enorme Erleichterung.

 

Web

Firefox ist ein schneller Webbrowser der sich mit Add-ons beliebig erweitern lässt. Wer mit dem Internet Explorer unzufrieden ist sollte sich Firefox anschauen.

FireBug ist eine Erweiterung zu Firefox für Webentwickler. Der ausgereifte JavaScript Debugger, ein verständlicher Profiler und die sehr einfache Anzeige der verschachtelten CSS-Formatierungen machen FireBug zu einem unverzichtbaren Werkzeug.

YSlow analysiert Webseiten hinsichtlich der Performance. Als Grundlage dienen 23 Empfehlungen des Performance-Teams von Yahoo die man unbedingt beachten sollte.

Internet Explorer Developer Toolbar ist eine Erweiterung die vergleichbar mit FireBug für Firefox ist. Obwohl noch nicht ganz so ausgereift wie FireBug ist es doch ein nützliches Tool zum abklären IE-spezifischer Probleme.

Chrome ist ein sehr schneller Webbrowser von Google. Das direkte absetzen von Suchabfragen in der Adressleiste und die mächtige JavaScript-Konsole sind sehr praktisch und nur zwei von vielen Funktionen.

WireShark kommt bei mir immer dann zum Einsatz wenn ich schauen muss was genau über das Kabel übertragen wird. Als letzter Zufluchtsort fürs Debuggen ist WireShark sehr hilfreich, es braucht aber einiges an Hintergrundwissen.

 

Webseiten und Services

Stack Overflow ist meine Anlaufstelle bei Programmierproblemen. Die Frage-und-Antwort Seite bietet eine zeitgemässe Variation der bekannten Web Foren und Newsgroups.

Gist ist eine sehr einfache Möglichkeit zum Veröffentlichen von Code-Schnipsel. Neben der sprachabhängigen Syntaxhervorhebung ist jedes Gist auch ein vollwertiges Git-Repository. (Kurzinfo)

DropBox bietet einen benutzerfreundlichen Weg zum Synchronisieren von Dateien zwischen verschiedenen Computern. Sensitive Daten sollte man vor dem hochladen aber mit geeigneten Mitteln selber verschlüsseln.

PortableApps.com liefert eine ganze Reihe von Programmen zum Ausführen direkt ab einem USB-Stick. Da eine Installation entfällt laufen diese Programme häufig auch dort wo man keine Schreibrechte fürs Programmverzeichnis hat.

Instapaper ermöglicht einem das markieren von Webseiten zum späteren Lesen. Durch das Entfernen der Werbung sind die Seiten auch problemlos auf kleineren Displays (wie einem Smartphone oder Kindle) darstellbar.

Eine bessere Konsole für Git

In letzter Zeit nutze ich auch unter Windows immer öfters Git. Dank dem Projekt Git for Windows braucht man nach dem Download nur den Installationsassistenten durchzuklicken und man kann los legen.

Die mitgelieferte Git-Konsole bietet leider nur wenige Verbesserungen gegenüber dem mit Windows ausgelieferten cmd.exe. Um einen Text zu kopieren und wieder einzufügen sind nach wie vor die gleichen Verrenkungen nötig.

 

Console2 als Alternative

Mit Console2 gibt es eine Alternative zu cmd.exe die sich mit einigen Anpassungen auch sehr gut als Umgebung für Git anbietet. Am einfachsten richtet man sich einen eigenen Tab für Git ein. Dazu kann man unter Edit / Settings den Einstellungsdialog starten und den Punkt Tabs öffnen:

 
Für meine Konsole habe ich diese Werte gesetzt:

Feld Wert
Title: GIT
Icon: C:\Program Files (x86)\Git\etc\git.ico
Shell: C:\Program Files (x86)\Git\bin\sh.exe --login -i

 

Mit diesen Einstellungen kann man mit den gleichen Eingabemöglichkeiten wie von der Git-Konsole her gewöhnt arbeiten. Zusätzlich hat man aber all den Komfort der einem Console2 bietet, wie das einfache kopieren von Text durch markieren oder ein Einfügen über einen Klick aufs Mausrad.

 

svn export – oder wie man die .svn Verzeichnisse los wird

Wer mit Subversion arbeitet wir sich sicher schon gefragt haben wie man die .svn Verzeichnisse aus allen Unterordner loswerden kann. Dies ist vor allem bei Webseiten ein Thema, wo die ganze Seite mit all ihren Unterverzeichnissen möglichst 1:1 auf den Webserver soll.

In der Regel werden die meisten Leute eine dieser beiden Ansätze verfolgen:

  1. Alle .svn Ordner von Hand löschen
  2. Die .svn Ordner drin lassen und hoffen das es niemand bemerkt

Der erste Ansatz ist aufwendig und wird innert kürzester Zeit für den zweiten Ansatz fallen gelassen. Das sollte man aber nicht tun.

 
Wieso .svn Verzeichnisse nicht ins Web gehören
In den .svn Ordnern liegen sehr viele Daten die man nicht unbedingt über einen Webserver der Öffentlichkeit freigeben möchte. Subversion legt intern eine Kopie aller unter Versionsverwaltung stehenden Dateien an und legt diese im .svn Ordner ab. Kennt man sich ein bisschen mit der Ablagestruktur aus kann man recht einfach den Quellcode einer PHP oder ASP.Net Seite kommen. Vom abkupfern der Funktionalität zum stehlen DB-Passworts ist es dann oft nur ein kleiner Schritt. Die Metadaten von Subversion müssen also auf eine einfache Art entfernt werden.

 
svn export
Subversion hat für diese Aufgabe den Befehl export. Dieser funktioniert fast wie checkout, räumt aber all die .svn Verzeichnisse weg. Die so erhaltene Kopie beinhaltet nichts mehr was auf Subversion schliessen lässt – ein commit der Änderungen ist damit aber auch nicht mehr möglich!

So kann man den export Befehl aufrufen:

svn export https://svn.origo.ethz.ch/ataraxis/ ataraxisExport

Verfügt man bereits über eine lokale Arbeitskopie (mit allen .svn Verzeichnissen), kann man auch diese als Quelle nutzen:

svn export ataraxis ataraxisOhneSvnOrdner

 
Fazit
Mit dem simplen Befehl svn export kann man ohne grossen Aufwand die lästigen .svn Verzeichnisse vor der Veröffentlichung entfernen.

Abhängigkeiten auflösen mit NuGet

Wer kennt es nicht: Um mal schnell etwas in Visual Studio zu testen benötigt man erst die eine Library und dann noch eine und noch eine. Am Ende hat man die erste Stunde lang nur versucht die Abhängigkeiten so aufzulösen, das auch noch alle Versionen miteinander arbeiten. Wie schön wäre es doch wenn man einfach sagen könnte ich will Library XY und alle Abhängigkeiten werden einem automatisch aufgelöst?

Genau dies ist die Aufgabe von NuGet. Mit nicht einmal 500kb ist diese Visual Studio Erweiterung sehr klein und schnell heruntergeladen. Nach der Installation gibt es unter Tools einen Eintrag „Library Package Manager“, über den man NuGet verwalten oder die PowerShell-Konsole aufrufen kann. Falls weder der Eintrag unter Tools noch das Kontextmenü erscheint hilft ein Neustart von Visual Studio.

Ich persönlich bevorzuge für solche Tätigkeiten eine grafische Oberfläche. Um die aufzurufen genügt ein Rechtsklick auf den References-Ordner. Das dazugehörige Kontextmenü wurde durch NuGet um den Punkt „Add Library Package Reference…“ erweitert.

Die grafische Oberfläche bietet einem einen praktischen Suchdialog an. Hat man das gewünschte gefunden, kann man mit einem Klick auf den „Install“ Knopf die Library für das ausgewählte Projekt installieren. Allfällige Abhängigkeiten werden dabei im gleichen Durchgang aufgelöst und ebenfalls installiert.

Wer mehr zu NuGet erfahren will findet alles nötige auf http://nuget.codeplex.com/.