Captchas für anonyme Mantis Benutzer

Ich habe ja für meine Projekte einen Bugtracker, der mit MantisBT läuft. Den benutze ich vor allem als Notizzettel für Featureideen (aber ich freue mich auch über Bugreports). Damit dort jeder einen Fehler melden kann, habe ich den anonymen Zugriff aktiviert. Dummerweise hat das wohl ein Spambot mitgekriegt und hat im 30min Takt immer längere Kommentare hinterlassen. Nachdem ich das dann (am nächsten Morgen) auf meinem iPod gesehen hatte (WAS? 20 Emails???) habe ich erst mal die anonymen Kommentare deaktiviert, doch auf längere Sich musste eine andere Lösung her: Capchas.

Leider hat Mantis das ganze nicht eingebaut, so dass ich selber aktiv werden musste. Natürlich hat auch Mantis einen Bugtracker, und dort hat auch schon jemand einen Featurewunsch geäußert. Jemand anderes hat dann festgestellt, das Mantis doch schon Captchas unterstützt: Wenn man einen neues Account erstellt muss man Buchstaben erraten.

Weiterlesen

E-Münzbrett.NET

Nachdem Nico ein virtuelles Münzbrett für Mac OS geschrieben hat, habe ich leichtsinnigerweise behauptet, ich würde eine .NET Variante mit MonoDevelop unter Ubuntu machen. Was soll ich sagen schreiben? Ich bin froh, das ich mein Visual Studio habe 😉

MonoDevelop ist ansich ein tolle Software, die sogar VisualStudio 2008 kompatible Solution-Dateien schreibt. Leider wird unter Linux normalerweise das GTK# Toolkit verwendet, was sowas wie WinForms ist. Das funktioniert aber nur, wenn unter Windows die passende DLL vorhanden ist. Ich hatte mir aber vorgenommen, ein Programm zu schreiben, das unter Linux und Windows läuft, und dass ohne neu kompilieren oder zusätzliche Binaries.

Also musste ich WinForms verwenden, was in Mono auch relativ implementiert ist. Nur leider fehlt MonoDevelop der Designer dafür, sodass ich alles per Hand schreiben muss. Mit einem Designer würde man z.B. die Textboxen einfach ausrichten, ohne muss man das mit einem TableLayoutPanel machen. Und bis man das so konfiguriert hat, wie man sich das vorstellt wünscht man sich den Designer mehr als einmal zurück, glaubt mir. (Ich habe überings nicht bis jetzt daran gearbeitet, ich habe nur vergessen, darüber zu bloggen. Aber etwas mehr als die 20min hat es schon gedauert…)

Weiterlesen

XNA 4.0 in Deutsch & Performance Tools

Gleich zwei super Neuigkeiten heute:

  1. XNA gibt es jetzt auch auf Deutsch! Das betrifft auch die komplette Dokumentation, also auch die IntelliSense Tipps. Eine super Sachen, finde ich, nicht weil ich Probleme mit der englischen Version hatte, sondern, weil es immer gestört hat, wenn im deutschen VisualStudio an und an englische Tooltipps erschienen
  2. Es gibt von Microsoft ein „Performance Utility„. Das ist eine Overlaykomponente, mit der die Update und Draw Zeit angezeigt wird, eine FPS Anzeige, ein Overlay, dass einfach beliebige Werte anzeigt, und eine Ingame-Console.

Besonders freut mich die Console (wenn sie gut ist ;)), denn nachdem meine „alte“ Console, nicht mehr für XNA 4.0 geupdatet wurde, musste ich mir was neues suchen. Für gewöhnlich sind die Sachen von Microsoft ja ziemlich gut (weil sie sie selber brauchen :D), evtl. bleibt mir da noch Arbeit erspart. (Know when to be lazy)

Weiterlesen

Hürden für das Upgrade auf XNA 4.0 und wie man sie umgeht

Nachdem am 16. September ja nun endlich XNA 4.0 erschienen ist, habe ich natürlich auch meine Projekt auf die neue Version aktualisiert. Das ganze hat erstaunlich wenig Probleme gemacht, und nur eine Sachen bereit mir ernsthafte Probleme.

Alte XACT Dateien können nicht gelesen werden. Das Problem lässt sich sehr einfach beheben: Mit dem neuen Game Studio kommt auch ein neues XACT (auch Version 3.0, aber vom Februar 2010). Die alte Datei damit öffnen, Hinweis abnicken und wieder speichern, Problem behoben.

DisplayMode.RefreshRate fehlt. Eines der Probleme, die ich nicht wirklich beheben konnte. Um das Ruckeln von Animationen zu beheben hatte ich die FPS Rate an die Wiederhohlrate des Monitors angepasst. Da die entsprechende Eigenschaft jetzt einfach fehlt, kann ich das so einfach nicht mehr machen.

Weiterlesen

WordPress: Eigenes Menü für bestimmte Seiten

Ich bin ja immer noch dabei, mein „Portfolio“ ein bisschen aufzuarbeiten, und dabei soll WordPress auch als CMS benutzt werden. Jetzt hätte ich gerne auf den Seiten, die ein bestimmtes Projekt beschreiben ein Menü, dass sich auf die Unterseiten dieser Seite beschränkt, und nur einen generelle Link zurück zu Blog hat. Auf dem Blog soll natürlich weiterhin das normale Menü angezeigt werden.

Die Lösung war eine Kombination aus der WP 3.0 Menü Funktion und einem kleinen PHP Hack. Zuerst ein Mal zu der Menü Funktion: Diese Funktion ist mit WordPress 3.0 verfügbar und ermöglicht es, unter Design/Menüs eigene Menüs zu erstellen. (Wenn das Theme das unterstützt) Nur was macht man damit? Zum einem kann das Menü einer Position im Theme zuweisen. Das ist praktisch, wenn man die automatische Menüanordnung nicht mag. Doch mit einem kleinem Eingriff wird das ganz noch mächtiger!

Alles was man machen muss, ist diese Zeilen in die funktions.php des Theme zu kopieren:

Weiterlesen

Es will einfach nicht!

Seit ein paar Tagen quält mich ein Problem: Jetzt gebe ich es auf. Worum es geht..? Gut also der Reihe nach: Nico hat mich in den Kommentaren auf die Idee gebracht, ein Plugin zu schreiben, das für bestimmte Seiten ein anderes Theme anzeigt, als für den Rest des Blogs. Gesagt getan, relativ schnell hatte ich folgendes Gerüst:

<?php
$nr_pt_themed_PP = array('page2' => 'Default', 'post5' => 'Constructor');

function nr_pt_get_theme_for($page_or_post)
{
	global $nr_pt_themed_PP;

	if(array_key_exists($page_or_post, $nr_pt_themed_PP))
		return $nr_pt_themed_PP[$page_or_post];
	else
		return '';
}

//Helper. Returns the option from the selected theme, or the default value, if no theme selected
function nr_pt_GetOptionOrDefault($default, $option)
{
	if(is_page() || is_single())
		{
			global $post;
			$theme = nr_pt_get_theme_for($post->post_type . $post->ID);

			if(empty($theme))
				return $default; //no filtering
			else
			{
				$all_themes = get_themes();
				return $all_themes[$theme][$option];
			}
		}
		else
			return $default;
}

function nr_pt_filter_template($template)
{
	return nr_pt_GetOptionORDefault($template, 'Template');
}

function nr_pt_filter_stylesheet($stylesheet)
{
	return nr_pt_GetOptionORDefault($stylesheet, 'Stylesheet');
}

function nr_pt_filter_template_dir($template_dir)
{
	return nr_pt_GetOptionORDefault($template_dir, 'Template Dir');
}

function nr_pt_filter_stylesheet_dir($stylesheet_dir)
{
	return nr_pt_GetOptionORDefault($stylesheet_dir, 'Stylesheet Dir');
}
//Filters
add_filter('template', 'nr_pt_filter_template', 1); //1 is the priority, so this filter is the first!
add_filter('stylesheet', 'nr_pt_filter_stylesheet', 1);
add_filter('stylesheet_directory ', 'nr_pt_filter_stylesheet_dir', 1);
add_filter('template_directory ', 'nr_pt_filter_template_dir', 1);
?>

Weiterlesen

SimpleScreenshot 0.9.3.2

Leider war auch die letzte Version von SimpleScreenshot nicht Bugfrei, und der verbliebene Bug war auch noch sehr gemein: Wenn SimpleScreenshot gestartet wurde, wurde manchmal das Fenster nicht ausgeblendet. Der Fehler beruhte auf einem Wettlauf: Wenn das Form geladen wird, wird zuerst die Sichtbarkeit von Windows auf true gesetzt (das Fenster ist also sichbar) und gleichzeitig dem Fenster mitgeteilt, das es geladen wurde. Wenn es so benachrichtigt wurde, wurde es wieder ausgeblendet. Wenn man Pech hatte, hat das Auslebenden das Sichtbarmachen überholt, und das Fenster blieb sichtbar… Das Problem ist jetzt aber behoben, zusammen mit einem Fehler, der manchmal den Sound nicht abgespielt hat. (Hintergrund: Wenn in einer aufrufenden Verknüpfung als Arbeitsverzeichnis nichts eingetragen wurde, konnte das Programm die Sounddatei nicht finden…). Zudem wurde eine fehlende Übersetzung hinzugefügt: Auch Nicht-Deutsche kommen jetzt in den Genuss einer Englische Fehlermeldung, wenn SimpleScreenshot mehr als ein Mal gestartet wird (was nicht geht).

Wie auch schon bei Version 0.9.3.1 habe ich auf der Downloadseite keinen neuen Eintrag erstellt, sondern einfach die Zipdatei ausgetauscht. Wer SimpleScreenshot schon hat, muss einfach nur auf das AutoUpdate warten, das bei nächsten Start aufgerufen wird.

Weiterlesen

Gedanken zu Dialogen

Ok, ich gebe zu, der Titel ist blöd. In Englisch klingt er besser: Thoughts on Dialogue Systems. Aber das ist halt ein deutscher (und in letzter Zeit ein wenig vernachlässigter) Blog, also gibst blöde, deutsche Titel 😉

Aber nun zum eigentlichen Thema dieses Post: Wie macht ein gutes Dialogsystem? Fangen wir mit den Anforderungen an:

  • Der Spieler muss verschiedene Optionen haben. Es gibt keinen festen Ablauf.
  • Der Dialog wird zwischen dem Spieler und einem oder mehr NPCs geführt. Technisch gesehen ist der Spieler aber auch ein NPC.
  • Zu bestimmten Zeitpunkten sollen Scripte ausgeführt werden können. Möglichst, wenn eine Dialogzeile zu Ende ist.
  • Es soll durch Scripte möglich sein, zu bestimmen, ob eine Dialogzeile angezeigt wird, bzw. den Verlauf des Dialogs zu bestimmen.
  • Es muss einen Editor geben, in dem man die Dialoge erstellt.
  • Die Dialoge sollen über die Content Pipeline geladen werden können.

Ich habe jetzt angefangen, ein eigenes System zu schreiben. Dieses funktioniert auch relativ gut, und es hatte auch eine Integration der Content Pipeline. Nun bin ich aber auf ein Problem gestoßen: Die Auswahl durch den Spieler.

Weiterlesen

Ein neues Tutorial!

Nach dem ganzen Ärger mit unaxus und der Freude über Visual Studio 2010 war ich mal wieder produktiv: Ich habe eine neues Tutorial geschrieben!

Nicht hier im Blog, sondern im xna.mag. Hier ist der Link:

http://www.xnamag.de/forum/viewtopic.php?p=27655

Dort wird erklärt, wie man in sein XNA Spiel einen Creditsscreen einbaut. Und jetzt ratet mal, was tKoD grade bekommen hat? Richtig einen Creditsscreen! Evtl. werde ich davon auch noch mal ein Video machen…

.NET Tipps Teil 3

Ich hab ja schon ewig keine Tipps mehr zu .NET gegeben, da wird es ja mal wieder Zeit für eine neue „Folge“ 😉

Diesmal ist es nicht direkt ein Tipp, sondern mehr ein Hinweis:

Bei Bitmap.Clone(Rectangle, PixelFormat) ist eine OutOfMemoryException nicht, was man denkt!

Diese Tatsache wird zwar auch in der Dokumentation erwähnt, aber es hat mich jetzt schon zweimal fast zur Verzweiflung getrieben. Bitmap.Clone() verursacht eine OutOfMemoryException, wenn das Rectangle außerhalb der Bitmap liegt. Dann ist das Rectangle zwar auch „außerhalb des Speichers“, aber trotzdem ist das sehr unglücklich gewählt. Zudem zeigt das VisualStudio dann auch noch „Nicht genügend Abeitsspeicher“ an. Das ist natürlich schlichtweg falsch!

Also nicht verzweifeln, sondern das Rectangle noch mal überprüfen 😀

Weiterlesen