seeseekey.net - Invictus Deus Ex Machina

Wenn man unter Linux die Zeilenumbrüche einer Datei von DOS zu UNIX ändern möchte, kann man das Kommando dos2unix benutzen. Um das gleiche (ohne Zuhilfenahme von MacPorts) unter Mac OS X zu bewerkstelligen, muss man sich bei dem eingebauten Perl bedienen. Mittels der Kommandozeile:

perl -pe 's/\r\n|\n|\r/\n/g'   input > output

kann man eine Datei in das Unix-Format (LF bzw. \n) umwandeln.

Unter GNU grep gibt es den Parameter –r um rekursiv nach einer Zeichenkette im Verzeichnisbaum zu suchen. Da Mac OS X allerdings eine andere Variante von grep nutzt, funktioniert das ganze leider nicht so einfach. Stattdessen muss man folgende Befehlskette nutzen:

find . -name '*.txt' -print0 | xargs -0 grep -s -l 'Test'

Damit werden in diesem Fall alle Unterverzeichnisse nach Dateien mit der Endung .txt durchsucht. Alle gefundenen Dateien werden anschließend auf den Begriff Test durchsucht. Jede Datei in welcher der Suchbegriff vorkommt wird mit ihrem Pfad ausgeben.

Vor einigen Jahren brachte Microsoft das Framework XNA heraus, dessen Abkürzung für XNA’s Not Acronymed steht. Dabei handelt es sich um ein Framework welches die Spieleentwicklung vereinfacht. Mittlerweile wurde die Entwicklung seitens Microsoft allerdings eingestellt. Dazu trug sicherlich auch die Weigerung bei, das ursprüngliche XNA nicht für andere Systeme wie Android, iOS, Linux und Mac OS X anzubieten.

monogame.net

Da das Framework unter eine freien Lizenz veröffentlicht wurde, gibt es mittlerweile einige Forks, welche XNA weiterentwickeln. Einer dieser Forks ist dabei MonoGame. Neben der Unterstützung für weitere Plattformen, neben denen aus der Windows-Welt bekannten, wurden viele Verbesserungen des Frameworks im Lauf der Versionen eingepflegt. Lizenziert ist MonoGame unter der Microsoft Public License (Ms-PL) und damit freie Software. Die offizielle Projektwebseite ist unter monogame.net zu finden.

Beginnend mit dem Jahre 2003 wurde an der Universität Lausanne in der Schweiz eine Software für interaktive Whiteboards entwickelt und eingesetzt. Diese Software trug dabei den Namen Uniboard. Auf Betreiben der gemeinnützigen Interessenvereinigung für Digitale Bildung in Afrika wurden alle Rechte dieser Software von der französischen Regierung gekauft.

open-sankore.org

Seitdem wird die Software unter dem Namen Open-Sankoré weiterentwickelt. Es handelt sich dabei um die erste freie Software für interaktive Whiteboards. Technisch basiert die Software dabei auf C++, QT und HTML5 und ist unter der GPL in der Version 3 lizenziert. Open-Sankoré ist für Linux, Mac OS X und Windows verfügbar. Bezogen werden kann die Software auf der offiziellen Seite unter open-sankore.org.

Manche Anwender haben auf ihrem Mac immer mehr Fenster auf als ihnen lieb ist. Mit der kostenlosen App Hocus Focus können solche Anwender etwas Ordnung in das Chaos bringen. Die App befindet sich nach dem Start in der Status-Leiste von Mac OS X und sorgt dafür das Apps, welche einige Sekunden nicht benutzt werden, ausgeblendet werden.

Der Einstellungsdialog von Hocus Focus

Daneben gibt es noch einen sogenannten Focus Mode, welche alle inaktiven Apps sofort ausblendet, so das man nur die aktive App auf dem Bildschirm sieht. Bezogen werden kann Hocus Focus über die offizielle Webseite welche unter hocusfoc.us zu finden ist.

Unter Mac OS X lässt sich vieles mit den vorhandenen Standardanwendungen lösen, wo man z.B. bei Windows zusätzliche Tools benötigt. So auch bei der Aufgabe PDF-Dateien in ihrer Dateigröße zu optimieren.

Die Optionen im Speichern-Dialog

Dazu muss die entsprechende PDF in der Vorschau geöffnet werden. Anschließend wird die Datei über Ablage -> Exportieren exportiert. Bevor dort der Sichern–Button betätigt wird, muss der Quartz-Filter Reduce File Size aktiviert werden. Damit landet die PDF anschließend in reduzierter Dateigröße auf der Festplatte.

Musik per Algorithmus zu erzeugen klingt im ersten Moment abwegig, allerdings gibt es einige Personen und Projekte welche sich genau damit beschäftigen. Eines dieser Projekte ist dabei SoundHelix. Bei dieser in Java geschriebenen Anwendung handelt es sich um ein System mit welchem Musik algorithmisch erzeugt werden kann. Die erzeugte Musikstücke klingen dabei durchaus angenehm. Konfiguriert wird das System und deren Musik über eine XML-Datei.

soundhelix.com

Lizenziert ist SoundHelix unter der GPL und damit freie Software. Der Quelltext kann auf SourceForge bezogen werden. Zu finden ist das Projekt auf der offiziellen Seite unter soundhelix.com. Es ist dabei unter Linux, Mac OS X und Windows lauffähig.

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

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.

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.

Bei Mac OS X befindet sich oben am Bildschirmrand die Menü– und Statusbar. In diesem Artikel soll es darum gehen, eine solche Statusbar-App in Mono mittels des Xamarin Studios zu erstellen. Im ersten Schritt wird dazu ein neues MonoMac-Projekt im Xamarin-Studio angelegt. Wenn man dieses Projekt startet, findet man ein leeres Mac OS X-Fenster vor.

Ein neues MonoMac Projekt wird angelegt

In dem neu angelegten Projekt wird eine neue Klasse mit dem Namen AppController angelegt. Diese wird mit folgendem Inhalt gefüllt:

using System;
using MonoMac.Foundation;
using MonoMac.AppKit;

namespace StatusBarApp
{
    [Register("AppController")]
    public partial class AppController : NSObject
    {
        public AppController()
        {
        }

        public override void AwakeFromNib()
        {
            var statusItem = NSStatusBar.SystemStatusBar.CreateStatusItem(30);
            statusItem.Menu = statusMenu;
            statusItem.Image = NSImage.ImageNamed("status");
            statusItem.HighlightMode = true;

            mcQuit.Activated+=(object sender, EventArgs e) =>
            {
                NSApplication.SharedApplication.Terminate(this);
            };
        }
    }
}

Damit die Anwendung kein Menü und kein Dock-Icon mehr besitzt, müssen wir die Info.plist bearbeiten. In dieser Datei muss ein neuer Schlüssel mit dem Namen Application is agent (UIElement) und dem Typ Boolean angelegt werden. Der Wert des neuen Schlüssels wird dabei auf YES gesetzt.

Der neue Schlüssel wird mit dem PList-Editor des Xamarin Studios hinzugefügt

Nun öffnen wir die Datei MainMenu.xib, welche von Xamarin Studio in Xcode geöffnet wird. Hier ziehen wir ein neues Objekt vom Typ Menu in den Designer und entfernen alle Einträge bis auf einen. Dem verbliebenen Eintrag geben wir die Beschriftung Quit. Anschließend fügen wir ein Object hinzu und begeben uns in den Identity Inspector. Dort tragen wir bei Custom Class unter Class den Namen AppController ein. Das vorhandene Hauptmenü kann anschließend entfernt werden.

Das Design unter Xcode

Nun muss das Menü mit dem Quellcode verbunden werden, dazu wird der Assistance Editor in Xcode geöffnet. Als Quelltext wird auf der rechten Seite des Editors die Datei AppController.h ausgewählt. Nun wird das Menü mittels gedrückter Steuerungstaste (Strg/Ctrl) in die Headerdatei gezogen. Damit legen wir ein Outlet an. Dieses bekommt den Namen statusMenu. Das gleiche wird anschließend mit dem Menüeintrag Quit gemacht. In diesem Fall wird dabei eine Action definiert, welche den Namen mcQuit bekommt. Nun kann Xcode wieder geschlossen werden.

Dem Projekt muss nun noch eine 29×22 Pixel große Grafik hinzugefügt werden. Die Grafik (in diesem Fall status.png) wird beim Laden als Icon für die Statusleiste genutzt. Als letzten Schritt können die Dateien MainWindow.cs, MainWindow.xib und MainWindowController.cs entfernt werden. Nachdem diese Objekte auch im AppDelegate entfernt wurden, ist die Anwendung fertig. Der Quelltext des Projektes kann sich auch heruntergeladen werden. Er kann dabei von jedermann frei verwendet (Public Domain) werden.