Unter Mac OS X mittels der Vorschau ein Bild beschneiden

Die Vorschau unter Mac OS X verfügt neben den Funktionen zur Anzeige der Inhalte auch über einfache Bearbeitungsfunktionen.

Der gewünschte Ausschnitt wird in der Vorschau markiert

Der gewünschte Ausschnitt wird in der Vorschau markiert

So ist es unter anderem möglich, Bilder zu beschneiden. Dazu muss der gewünschte Bereich markiert werden und anschließen Cmd + K gedrückt werden. Danach kann das entsprechend beschnittene Bild exportiert werden. Alternativ kann die Funktionalität auch über das Menü Werkzeuge ausgelöst werden.

NSOutlineView zeigt nur „Table View Cell“ an

Gestern versuchte ich ein NSOutlineView mit einer Datenstruktur zu befüllen. Nachdem dies gelungen war, gab es allerdings ein Problem. Das NSOutlineView zeigte für jeden Eintrag immer nur Table View Cell als Beschriftung an.

Der Objektinspektor unter Xcode

Der Objektinspektor unter Xcode

Die Lösung für das Problem ist dabei relativ simpel, wenn man weiß an welcher Stelle man suchen muss. So muss der Content Mode des NSOutlineView von View based auf Cell based umgestellt werden. Anschließend werden die Einträge, welche durch die von NSOutlineViewDataSource abgeleitet Klasse bereitgestellt werden, korrekt dargestellt.

Pattern für asynchronen Timer

In den letzten Tagen habe ich nach einem Pattern für C#/.NET gesucht welches elegant einen Timer zur Verfügung stellt. Gestoßen bin ich dabei auf ein Pattern, welches sich die neuen Keywörter async und await aus den aktuellen C#-Versionen zu Nutze macht. Mit Hilfe dieser Schlüsselwörter lassen sich nebenläufige Funktionen ohne größeren Overhead entwickeln. Die Timer-Funktion sieht dabei so aus:

async void StartPollingTimer()
{
    while(true)
    {
        await Task.Delay(2000);

        //Do something
    }
}

Aufgerufen wird das ganze dabei einfach mittels:

StartPollingTimer();

Der Entwickler muss sich dabei nicht mehr um die Thread-/Task-Verwaltung kümmern und kann damit auf die Schnelle einen Timer implementieren, welcher asynchron läuft.

NSSpeechSynthesizer und NSSpeechRecognizer unter Mono nutzen

Unter Mac OS X gibt es in der API die Klassen NSSpeechSynthesizer und NSSpeechRecognizer. Während die eine Klasse dazu dient Text auszugeben, kann die andere Klasse dazu genutzt werden Sprache zu erkennen. Der NSSpeechSynthesizer kann unter Mono einfach genutzt werden:

var synthesizer=new NSSpeechSynthesizer();
synthesizer.StartSpeakingString("Hallo Welt.");

Schwieriger wird das ganze bei der Klasse NSSpeechRecognizer. Mit Hilfe dieser Klasse ist es möglich auf bestimmte Kommandos zu reagieren. Im ersten Moment muss die Klasse angelegt werden und einige Optionen gesetzt werden:

var recognizer=new NSSpeechRecognizer();

string[] cmds=new string[] {"Computer"};

recognizer.Commands=cmds;
recognizer.BlocksOtherRecognizers=false;
recognizer.DisplayedCommandsTitle="RecognizerTest";
recognizer.Delegate=new RecognizerDelegate();

recognizer.ListensInForegroundOnly=false;
recognizer.StartListening();

Wenn nun das Kommando Computer erkannt wird, wird die Instanz vom RecognizerDelegate angerufen. Das Delegate sieht dabei wie folgt aus:

public class RecognizerDelegate : NSSpeechRecognizerDelegate
{
    public override void DidRecognizeCommand(NSSpeechRecognizer sender, string command)
    {
        //Do something
    }
}

Im Delegate selbst gibt es die Methode DidRecognizeCommand welche als Parameter das erkannte Kommando enthält.