Markdown in Scrivener

Für größere Texte nutze ich Scrivener und den iA Writer. Dieser unterstützt die Syntax für Markdown bzw. MultiMarkdown. Das wollte ich in Scrivener auch nutzen. Wenn man sich die Dokumentation von Scrivener anschaut, scheint es auch als ob Scrivener das ganze unterstützt. Allerdings findet man auf den ersten Blick nur ein Multimarkdown Im- und Export.

Also wurde der Support in Beschlag genommen und nachgefragt. Und es stellte sich heraus das Markdown doch nur im- und exportiert werden kann:

You’ll need to compile to MultiMarkdown format from Scrivener, then have MMD post-process the resulting file. To Scrivener, the MMD markup is just text. It has no way of knowing that you want to interpret it as formatting commands.

Schade, aber vielleicht klappt es ja in Zukunft mit der Markdown bzw. MultiMarkDown Unterstützung.

Robocode

Sich einen Roboter bauen und diese gegen andere Roboter kämpfen zu lassen, kann relativ schnell ins Geld und Material gehen. Einfacher wird es dabei mit Robocode, wobei es sich um eine Softwareumgebung handelt, in welcher Roboter programmiert werden können. Anschließend treten diese in einer virtuellen Arena gegeneinander an.

Die Bots im Kampf gegeneinander

Die Bots im Kampf gegeneinander

Geschrieben werden die Roboter in Java. Dabei finden sich eine Menge Beispiele in der Robocode Installation. Bei Robocode selbst handelt es sich um Open Source Software welche unter der Eclipse Public License steht. Die offizielle Webseite ist unter http://robocode.sourceforge.net/ zu finden. Lauffähig ist das ganze unter Linux, Mac OS X und Windows.

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

AddIn für den Reflector

Möchte man sich den IL-Code eines .NET Assemblies anschauen, so nutzt man dafür Tools wie NET.Reflector oder ILSpy. Für den Reflector gibt es dabei ein nettes AddIn welches auf den Namen „Reflector.FileDisassembler“ hört. Mit diesem ist es möglich ganze Assemblies in Visual Studio Projekt zu übersetzen. Zu finden ist das AddIn dabei unter http://www.denisbauer.com/NETTools/FileDisassembler.aspx.

Named Pipes zur Interprozesskommunikation

Interprozesskommunikation unter .NET ist so eine Sache. Da gibt es unter anderem das relativ mächtige Remoting Framework. Leider schlägt sich die Mächtigkeit auch in der Komplexität nieder. Wesentlich einfach wird das ganze mittels Named Pipes welche sich auch zur Interprozesskommunikation eignen. Dazu benötigt man einen Server und einen Client. Der Server könnte dabei unter .NET so aussehen:

Task.Factory.StartNew(() =>
{
	NamedPipeServerStream server=new NamedPipeServerStream("halfPipe");
	server.WaitForConnection();
	StreamReader reader=new StreamReader(server);
	StreamWriter writer=new StreamWriter(server);

	while(true)
	{
		string line=reader.ReadLine();
		
		if(line=="HELLO")
		{
			writer.WriteLine("Hi");
			writer.Flush();
		}
		else
		{
			writer.WriteLine("Unknown command.");
			writer.Flush();
		}
	}
});

Auf der Clientseite sieht die Kommunikation fast genauso aus:

NamedPipeClientStream pipeStream=new NamedPipeClientStream("halfPipe");
pipeStream.Connect();
StreamReader reader=new StreamReader(pipeStream);
StreamWriterwriter=new StreamWriter(pipeStream);

writer.WriteLine("HELLO");
writer.Flush();

string ret=reader.ReadLine();

Damit ist die Kommunikation zwischen den Prozessen eingerichtet. Natürlich kann man nicht nur Strings sondern auch andere Datentypen über die „Named Pipes“ verschicken.

Public Key Token eines Assemblies ermitteln

Wenn man ein .NET Assembly mit einem Strong Name versehen hat, möchte man manchmal den „PublicKeyToken“ dieses Assemblies aus einem anderen Assembly ermitteln. Im ersten Schritt wird dazu das Assembly benötigt. Wenn es bereits eingebunden ist, kann mittels:

Assembly[] assemblies=AppDomain.CurrentDomain.GetAssemblies();

das richtige Assembly gesucht werden. Alternativ ist es auch möglich ein Assembly mittels:

Assembly assembly=Assembly.LoadFile(path);

von der Festplatte zu laden. Danach geht es an die Ermittlung des Public Key Tokens:

string[] parts=assembly.FullName.Split(new char[]{','}, StringSplitOptions.RemoveEmptyEntries);
string publicKeyToken=parts[parts.Length-1].Trim().Replace("PublicKeyToken=", "");

Dieses könnte dann in der Applikation mit einem bestehenden Schlüssel verglichen werden um die Integrität des geladenen Assemblies zu verifizieren.