TextMate 2 als Download

Seit knapp zwei Tagen ist die Version 2.0 (bzw. deren Alpha) des Mac OS X Texteditors TextMate nun Open Source. Das ganze steht dabei unter der GPLv3. Der passende Quelltext dazu ist unter https://github.com/textmate/textmate zu finden. Wer diese Version ausprobieren möchte, aber nicht wirklich Lust darauf hat das ganze zu kompilieren, der kann sich an meinem vorgefertigten Paket bedienen, welches hier herunterladen werden kann.

Weitere Informationen gibt es unter:
http://de.wikipedia.org/wiki/Textmate

Testen mit NUnit

Testbasierte Entwicklung ist schon eine schöne Sache, vor allem bei größeren Projekten. Mit Hilfe sogenannter Unit-Tests kann man dabei automatisiert überprüfen ob der zu testende Softwareteil noch immer die Ergebnisse liefert, die erwartet werden. Meist ist es so, dass man in größeren Softwareprojekten etwas ändert und damit implizit an anderen Stellen Fehler einbaut, welche ohne Unit-Tests gar nicht bzw. erst später auffallen.

Für die Entwicklung unter .NET/Mono mit Hilfe des Visual Studios habe ich mich dabei für NUnit entschieden, da man dieses im Gegensatz zu MsTest auch unter Linux und Mac OS X nutzen kann. Damit sich das ganze bequem in das Visual Studio integriert nutze ich TestDriven.NET welches unter http://www.testdriven.net/ bezogen werden kann. Der persönliche Gebrauch ist dabei kostenlos.

Nach der Installation von TestDriven.NET kann man sein Visual Studio starten und mit der testbasierten Entwicklung beginnen. Dabei hat man zwei Möglichkeiten dies zu lösen. Die erste Möglichkeit ist es die Tests in ein extra Projekt zu verlagern so das diese nicht in der zu testenden Software vorkommen. Bei der zweiten Möglichkeit werden die Tests direkt im zu testenden Projekt geschrieben (z.B. in einen Namespace „Tests“).

Als Beispiel sei folgende Klasse gegeben:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Project
{
	public class FooBar
	{
		public int A { get; private set; }
		public int B { get; private set; }
		public int C { get; private set; }

		public FooBar(int a, int b, int c)
		{
			A=a;
			B=b;
			C=c;
		}
	}
}

Die Klasse „FooBar“ nimmt dabei im Konstruktor die drei Variablen a, b und c entgegen und weist sie den jeweiligen Eigenschaften der Klasse zu. Um nun zu testen ob diese Zuweisung funktioniert schreiben wir eine entsprechende Test-Unit. Dazu erstellen wir eine Klasse namens: „FooBarTest.cs“:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;

namespace Project
{
	[TestFixture]
	public class FooBarTests
	{
		[Test]
		public void TestNewFooBar()
		{
			FooBar fooBar=new FooBar(13, 24, 47);

			Assert.AreEqual(13, fooBar.A);
			Assert.AreEqual(24, fooBar.B);
			Assert.AreEqual(47, fooBar.C);
		}
	}
}

Diese Testklasse testet nun ob die Werte die im Konstruktor angegeben werden auch wirklich in den entsprechenden Eigenschaften landen. Dazu wird zuerst das NUnit Framework mittels:

using NUnit.Framework;

eingebunden. Mittels des Attributes „[TestFixture]“ sagen wir dem NUnit Framework das sich in dieser Klasse Unit-Tests befinden. Bei diesem Attribut gibt es einige Einschränkungen, so darf die Klasse z.B. nicht abstrakt sein, näheres dazu erfährt man auch in der Dokumentation.

Das Attribut „[Test]“ über der Funktion „TestNewFooBar“ teilt dem Framework mit das es sich bei dieser Funktion um einen Unit-Test handelt, welcher überprüft werden soll. Dazu legen wir in der Funktion eine Instanz von „FooBar“ an und übergeben die entsprechenden Werte an den Konstruktor.

Mittels der „Assert.AreEqual“ Funktion (weitere „Assert“ Funktionen findet man in der Dokumentation) überprüfen wir ob die Werte auch bei den Eigenschaften A, B und C angekommen sind. Wäre dies nicht der Fall so würde der Tests fehlschlagen.

Nachdem ein Test für die entsprechende Klasse geschrieben wurde, klickt man im Visual Studio mit der rechten Maustaste auf die Testklasse und wählt dort „Run Test(s)“ aus. Möchte man mehrere Tests laufen lassen so muss einen übergeordneten Ordner auswählen. Wenn alles richtig gemacht wurde, sollte man folgende Ausgabe sehen:

------ Test started: Assembly: Project.exe ------

1 passed, 0 failed, 0 skipped, took 3,07 seconds (NUnit 2.6.0).

Falls ein Fehler aufgetreten ist so sieht das ganze so aus:

------ Test started: Assembly: Project.exe ------

Test 'Project.FooBarTests.TestNewFooBar' failed: 
  Expected: 47
  But was:  0
	FooBarTests.cs(19,0): bei Project.FooBarTests.TestNewFooBar()

0 passed, 1 failed, 0 skipped, took 1,66 seconds (NUnit 2.6.0).

Findet man einen Fehler bei einem Test sollte man schauen wodurch dieser verursacht wird und ihn beheben. Wenn man nun bei der späteren Entwicklung Fehler findet (und beseitigt), welche durch keinen Tests abgedeckt sind, so sollte man gleich einen entsprechenden Test dafür schreiben, damit dieser Fehler nicht ein weiteres Mal auftreten kann.

Weitere Informationen gibt es unter:
http://de.wikipedia.org/wiki/NUnit
http://de.wikipedia.org/wiki/XUnit

Dropbox + EncFS + Spotlight unter OS X

Vor einiger Zeit schrieb ich einen Artikel darüber wie man ein verschlüsseltes Verzeichnis in der der Dropbox mittels „Fuse4X“ und „EncFS“ unter Mac OS X Lion mountet. Der Wehrmutstropfen an meiner Methode war allerdings das Spotlight nicht funktionierte. Das hängt wohl damit zusammen das Spotlight standardmäßig nicht auf die mit Fuse eingehängten Systeme zugreifen kann.

Dazu sind auch nur einige Änderungen nötig. So muss das alte Skript zum mounten:

echo ultrageheimespasswort | encfs --stdinpass ~/Dropbox/Private ~/DropboxEncrypted

durch dieses ausgetauscht werden:

#!/bin/bash
#Secure EncFS Dropbox mounter by Daniel Widerin
#Edited by seeseekey

SOURCE=~/Dropbox/Private
TARGET=/Volumes/DropboxEncrypted
VOLUME_TITLE=DropboxEncrypted
PASSWORD=ultrageheimespasswort
ENCFS=/usr/local/bin/encfs

mount | grep $TARGET >/dev/null
[[ "$?" -eq "0" ]] && /usr/sbin/diskutil unmount $TARGET

if [ ! -d $TARGET ]; then
 echo "Create new mountpoint $TARGET"
 mkdir $TARGET
 chmod 0700 $TARGET
fi

echo $PASSWORD | $ENCFS $SOURCE $TARGET --stdinpass -ovolname=$VOLUME_TITLE -omodules=iconv -ofrom_code=UTF-8 -oto_code=UTF-8-MAC -oallow_root -olocal -ohard_remove -oauto_xattr -o nolocalcaches

Das neue Skript basiert dabei auf einer Variation eines Skriptes von Daniel Widerin und wurde etwas vereinfacht sowie um Angaben für den Zeichensatz erweitert. Nun kann man sich das ganze noch etwas bequemer machen, indem man das entschlüsselte Verzeichnis gleich beim Login einbindet. Das Skript sollte dabei einen Namen nach dem Schema „encryptDropbox.command“ tragen.

Nachdem dies geschehen ist, findet man in den Einstellungen unter „Benutzer & Gruppen“ -> „Anmeldeobjekte“ den entsprechenden Punkt. Dort wird einfach das entsprechende Skript hinzugefügt und schon wird dieses in Zukunft beim Login geladen.

Weitere Informationen gibt es unter:
https://seeseekey.net/archive/9455
http://fuse4x.github.com/faq.html
http://widerin.org/blog/secure-your-dropbox

Probleme mit dem OS X Mountain Lion Up-to-Date

Für alle Mac Rechner welche zwischen dem 11. Juni 2012 und dem 25. Juli 2012 gekauft wurden, kann man kostenlos auf Mac OS X Mountain Lion updaten. Leider ist dies augenscheinlich mit einigen Problemen behaftet. Erst funktionierte das Formular nicht, anschließend konnte man das Macbook Air nicht auswählen, aber dafür kann man ja auch einfach Macbook auswählen.

Nach einiger Zeit bekommt man dann einen Code zugesendet, welchen man im Appstore einlösen soll. Leider endet dies nur mit der Fehlermeldung:

Dieser Code wurde bereits verwendet. Jeder Code darf nur einmal verwendet werden.

Im Appstore sieht das ganze dabei so aus:

Der Code wird nicht akzeptiert

Anschließend wurde der Support unter „“ kontaktiert und nun wird auf eine Antwort gewartet. In der Zwischenzeit häufen sich diese Fehler, so das in Foren teilweise geschrieben wird der Code sei falsch, bzw. schon vergeben.

Angeblich soll Apple innerhalb der nächsten 24 (bis 72) Stunden neue Codes verschicken. Sollte es danach immer noch nicht gehen, wird eine Neuregistrierung vom Support vorgeschlagen. Lassen wir uns überraschen.

Update:
Gegen 22 Uhr gab es dann endlich den lang ersehnten Code, der diesmal problemlos funktionierte.

Weitere Informationen gibt es unter:
http://www.macrumors.com/2012/07/25/apple-reissuing-os-x-mountain-lion-up-to-date-codes/
http://9to5mac.com/2012/07/25/apple-starts-re-issuing-os-x-mountain-lion-up-to-date-program-promo-codes/

Klammern und andere Zeichen unter Mac OS X

Wenn man sich ein Rechner mit Mac OS X angeschafft hat, hat man manchmal das Gefühl, dass man einen kompletten Tastaturumschulungskurs macht ;) So musste ich nachschauen als ich etwas programmieren wollte. Dort benötigt man nämlich Zeichen wie [ oder ]. Aber natürlich bekommt man auch diese Zeichen auf den Bildschirm gezaubert:

  • Command (Alt) + 5 – [
  • Command (Alt) + 6 – ]
  • Command (Alt) + 8 – {
  • Command (Alt) + 9 – }
  • Command (Alt) + Q – «
  • Command (Alt) + Shift + Q – »
  • Command (Alt) + n – ~
  • Command (Alt) + 7 – |