Methode nach Notwendigkeit unter .NET invoken

Manchmal ruft man eine Methode unter .NET aus einem anderen Thread heraus auf. Je nachdem wie die Methode aufgerufen wird, kann es notwendig sein die Methode über Invoke aufzurufen. Mit folgendem Pattern geschieht dies nach Notwendigkeit automatisch:

private void MakeSomeFoo()
{
	MethodInvoker method=delegate
	{
		//Do some foo
		DoSomeFoo();
	};

	if(InvokeRequired) BeginInvoke(method);
	else method.Invoke();
}

Im MethodInvoker-Delegate ist der eigentliche Quellcode der Funktion zu finden. Dieser wird je nach Notwendigkeit im korrekten Thread aufgerufen.

Arduboy – GameBoy im Mini-Format

Mit einem Arduino kann man viele Dinge ausprobieren, allerdings muss man meist noch zusätzliche Hardware wie LEDs und ähnliches beschaffen. Mit dem Arduboy hat man ein System, mit dem man viele Dinge ohne zusätzliche Anschaffungen ausprobieren kann. Dabei handelt es sich um einen GameBoy im Mini-Format. Der Arduboy besteht aus einem OLED-Display, sechs Buttons, einem Piezo-Lautsprecher und einer Batterie, welche bis zu 8 Stunden durchhalten soll.

Der ArduBoy auf Kickstarter

Der ArduBoy auf Kickstarter

Das besondere an dem Arduboy ist das auf einem Arduino basiert und vollständig programmierbar ist. Der Arduboy kann für $ 39 bezogen werden, mit dem Versand nach Deutschland sind allerdings $ 54 zu berappen. Neben der offiziellen Webseite, gibt es weitere Informationen auf der Kickstarter Webseite.

Freie Game Assets

Möchte man als Programmierer ein Spiel entwickeln hat man in den meisten Fällen ein Problem. Das Problem ist nicht der Quellcode, sondern die Assets für das Spiel – die wenigsten Programmierer sind gute Grafiker – so das die Assets im schlimmsten Fall dazugekauft werden müssen. Eine Alternative sind freie Assets, welche man unter anderem bei opengameart.org findet. Das Problem dabei ist, das solche Assets dann meist zusammengestückelt wirken, da sie von unterschiedlichen Künstlern erstellt wurden.

kenney.nl/assets

kenney.nl/assets

Mit den Kenney Game Assets, welche unter kenney.nl/assets zu finden sind, bekommt man eine zusammenhängende Sammlung von mittlerweile über 13.000 Assets (von Grafik bis zu Soundeffekten), welche gemeinfrei sind und damit nach Belieben verwendet werden dürfen. Neben der Webseite, auf welcher die Assets gegen eine kleine Spende erworben werden können, sind Sie auch auf opengameart.org zu finden. Durch die Spenden wird die Entwicklung der Assets weiter finanziert. Ende nächster Woche sollen die Kenney Game Assets auch über Steam zur Verfügung stehen, so das sie dann auch automatische Updates erfahren und man diese nicht manuell herunterladen muss.

Datum und Zeit in einem Property Grid bearbeiten

Wenn man in einem .NET Property Grid ein DateTime-Objekt bearbeitet, so klappt ein Kalender auf, in welchem das Datum eingestellt werden kann. Anschließend kann umständlich die Uhrzeit eingestellt werden. Möchte man dieses Prozedere etwas vereinfachen, kann man für das DateTime-Objekt einen neuen UITypeEditor schreiben:

public class DateTimePickerEditor : UITypeEditor
{
	IWindowsFormsEditorService windowsFormsEditorService;
	DateTimePicker dateTimePicker=new DateTimePicker();

	public DateTimePickerEditor()
	{
		dateTimePicker.Format=DateTimePickerFormat.Custom;
		dateTimePicker.CustomFormat=String.Format("{0} {1}",
                 Application.CurrentCulture.DateTimeFormat.ShortDatePattern,
                 Application.CurrentCulture.DateTimeFormat.ShortTimePattern);
	}

	public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
	{
		return UITypeEditorEditStyle.DropDown;
	}

	public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
	{
		if(provider!=null)
		{
			windowsFormsEditorService=provider.GetService(typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService;
		}

		if(this.windowsFormsEditorService!=null)
		{
			dateTimePicker.Value=(DateTime)value;
			windowsFormsEditorService.DropDownControl(dateTimePicker);
			value=dateTimePicker.Value;
		}

		return value;
	}
}

Nachdem der Editor fertiggestellt ist muss beim entsprechenden DateTime-Objekt noch der passende der Editor per Attribut definiert werden:

[EditorAttribute(typeof(DateTimePickerEditor), typeof(UITypeEditor))]
public DateTime DateAndTime;
{
	get
	{
		return dateAndTime;
	}
	set
	{
		dateAndTime=value;
	}
}

Damit verfügt man nun über einen Editor im Property Grid, welcher die Bearbeitung von Datum und Zeit komfortabel erlaubt.

Phabricator

Viele größere Firmen wie Apple, Google und auch Facebook sind in den letzten Jahren dazu übergegangen, Eigenentwicklungen zu veröffentlichen und unter eine freie Lizenz zu stellen. Eines dieser Projekt aus dem Hause Facebook ist dabei Phabricator. Dabei handelt es sich um ein auf PHP basierendes Werkzeug zur kollaborativen Softwareentwicklung.

Die Projektseite von Phabricator

Die Projektseite von Phabricator

Phabricator stellt dabei unter anderem Werkzeuge wie einen Repository Browser, ein Bug/Issue-Tracker, eine Wiki und Möglichkeiten zum Code Review zur Verfügung. Genutzt wird Phabricator nicht nur von Facebook, sondern auch andere Firmen und Projekte wie Blender, Bloomberg, Dropbox oder MediaWiki nutzen dieses Werkzeug für die Softwareentwicklung. Bezogen werden kann Phabricator über die offizielle Projektseite oder die entsprechende GitHub-Seite. Der Quelltext ist unter der Apache Lizenz lizenziert.