CLR Profiler

Mit der Installation einer Version des Visual Studios landen eine Menge Tools auf dem Rechner des Benutzers. Eines der Tools welche dabei leider nicht auf der Platte landet, ist der CLR Profiler, welcher auch aus dem Hause Microsoft stammt.

Eine Auswertung des CLR Profilers

Eine Auswertung des CLR Profilers

Mit diesem Tool kann die Innereien seiner .NET Software, wie die Speicherbrauch im Heap, die Handleanforderungen und ähnliches analysieren und auswerten. Heruntergeladen werden kann der CLR Profiler unter http://www.microsoft.com/en-us/download/details.aspx?id=16273.

Cocoa Controls

Wenn man in Xcode eine iOS oder Mac OS X App schreibt, so ist manchmal auf bestimmte Controls angewiesen, welche nicht in den Standard BIbliotheken zu finden sind. Abhilfe schaffen hier sogenannte „Custom Controls“, welche überall im Netz zu finden sind.

cocoacontrols.com

cocoacontrols.com

Eine zentrale Anlaufstelle für solche Controls bietet dabei die Seite cocoacontrols.com. Dort sind die Controls nach Lizenzen, Betriebsystem und einigen anderen Kategorieren sortiert, so das man meist relativ schnell das passende Control findet.

Design Pattern für JavaScript

In JavaScript kann man vernünftig programmieren, wenn man die schlechten Teile weglässt. Nicht umsonst gibt es das Buch JavaScript: The Good Parts. Dabei haben sich im Laufe der Zeit einige „Best Practices“ entwickelt, welche unter anderem in Form von Design Patterns vorliegen. Auf der Webseite http://shichuan.github.com/javascript-patterns/ kann man sich diese anschauen und so sehen, was man in Zukunft besser machen kann. Das entsprechende GitHub Projekt ist dabei unter https://github.com/shichuan/javascript-patterns/ zu finden. Leider scheint es keine definierte Lizenz für das Projekt zu geben, so das der Lizenzstatus im Moment augenscheinlich noch ungeklärt ist.

Script#

Bei der Entwicklung wundert man sich ab und an, was für interessante Projekte in den Weiten des Netzes so umherschwirren. So unter anderem das Projekt Script#. Dabei handelt es sich um eine Erweiterung für das Visual Studio 2012 mit welcher es möglich ist C# Quelltext (so er gewissen Kriterien genügt) in JavaScript umzuwandeln, bzw. zu compilieren.

Die Erweiterung welche im Quelltext unter https://github.com/nikhilk/scriptsharp zu finden ist, steht dabei unter der Apache Lizenz und ist somit freie Software. Nach der Installation fügt sie dem Visual Studio neue Projekttypen hinzu, mit welchen man anschließend arbeiten kann. Leider gibt es von Script# keine MonoDevelop Variante, so das man im Moment zwingend an das Visual Studio gebunden ist. Allerdings findet sich in der Roadmap folgender Satz:

In terms of code contribution, it would be especially interesting to see the development of import libraries for common libraries, so they are easily usable right out of the box. It would also be interesting to see the development of complementary tools/addins, adding support to other IDEs (esp. MonoDevelop) and other such complementary projects. Or you might be interested in the very core, i.e. the compiler itself.

Also wenn sich jemand bemüßigt fühlt, das ganze für MonoDevelop in Angriff zu nehmen, der muss nun nicht mehr auf die Einladung warten. Die offizielle Projektseite von Script# ist unter http://scriptsharp.com/ zu finden.

Threadsichere Event unter C#

Events unter C# sind so eine Sache. Im Normalfall funktionieren sie ohne Probleme. Spannend wird das ganze wenn man Events in einer Anwendung zwischen verschiedenen Threads verschicken möchte. Dabei kann es nämlich passieren das Events verloren gehen weil sie nicht empfangen werden. Abhilfe schafft hier die Klasse „ThreadSafeEvent“:

public class ThreadSafeEvent
{
  EventHandler internalEventHandler;
  readonly object internalEventHandlerLock=new object();

  public event EventHandler Event
  {
    add
    {
      lock(internalEventHandlerLock)
      {
        internalEventHandler+=value;
      }
    }
    remove
    {
      lock(internalEventHandlerLock)
      {
        internalEventHandler-=value;
      }
    }
  }

  public virtual void Fire(object sender, EventArgs e)
  {
    EventHandler handler;

    lock(internalEventHandlerLock)
    {
      handler=internalEventHandler;
    }

    if(handler!=null)
    {
      handler(sender, e);
    }
  }
}

Möchte man nun z.B. der Klasse „Entries“ eine solches Event hinzufügen, so sieht das ganze wie folgt aus:

public ThreadSafeEvent EntrySelected=new ThreadSafeEvent();

Nun kann das Event gefeuert werden, das ganze wird mittels der „Fire“ Methode bewerkstelligt. Dieser übergibt man den Sender und zusätzliche Argumente in Form eines „EventArgs“ bzw. einer davon abgeleiteten Klasse.

EntrySelected.Fire(this, new EntryEventArgs(entry));

Jede Klasse welche das Event nun empfangen möchte hängt sich an das entsprechende Event.

Entries entries=new Entries();
Entries.EntrySelected.Event+=OnEntrySelected;

...

private void OnEntrySelected(object sender, EventArgs e)
{
  EntryEventArgs args=(EntryEventArgs)e;
  Console.WriteLine(args.Entry);
}

Und schon haben wir in unserer Anwendung ein sauberes und threadsicheres Eventsystem.