Monday, 28 February 2005

After many hours of search for a possibility to change the name and bitmap of my custom user controls in the Visual Studio Toolbox, here is the solution.

1) Set the ToolboxItem Attribute to the UserControl

[ToolboxItem(typeof(MyToolboxItem))]
public class MyUserControl : System.Windows.Forms.UserControl {...}

2) create a class, derived from ToolboxItem class

using System.Runtime.Serialization;
using
System.Drawing.Design;

[Serializable]
public class MyToolboxItem : ToolboxItem{
   public MyToolboxItem() : base(){
       DoMagic();
   }

   public
MyToolboxItem (Type type) : base(type){
       DoMagic();
   }

   void
DoMagic(){
       //set the desired text
       base.DisplayName = "MyText";
       //load the embedded resource bitmap
       base.Bitmap = new System.Drawing.Bitmap(GetType().Module.Assembly.GetManifestResourceStream("MyBitmap.bmp"));
    }

   //a very special constructor
   private
MyToolboxItem (SerializationInfo info, StreamingContext context) {
       base.Deserialize(info, context);
   }
}

some notes:
At First, if you try to "override" the DisplayName and Bitmap properties, it won't work. It will only work, if these base properties are set in the constructor ... very strange.

Second, the private deserialize constructor must be set, else the ToolboxItem will throw an exception if you try to insert it in the form  ...  many thanks to reflector for solving this problem *g*

coden | dddwik | faq
Monday, 28 February 2005 23:27:58 (GMT Standard Time, UTC+00:00)  #    Comments [78]  | 
Tuesday, 22 February 2005

Question
How to install a .NET usercontrol library in Visual Studio, so that it appears in the reference list and in the customize toolbox list without explicit add the dll manually?

 

Answer
Just add the path of the dll into the following registry key: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\AssemblyFolders

coden | faq
Tuesday, 22 February 2005 23:19:45 (GMT Standard Time, UTC+00:00)  #    Comments [38]  | 
Thursday, 17 February 2005

3 einfache Regeln: Die Abstoßung, die Anziehung und die Anpassung/Angleichung. Diese drei Grundregeln sind es, die das Verhalten eines Schwarmes im kleinen, einer Gesellschaft im Großen, bestimmen. Ob nun Fische im Aquarium, Möwen am Strand oder Menschen beim Shopping. Man kann quasi jede Art von Intelligentem Verhalten auf wenige, einfache Regeln zurückführen.

Wie auch immer, ich habe das mal computertechnisch umgesetzt und heraus kam folgender Schwarmsimulator.

Features

  1. Jedes einzelne Individuum in dem Schwarm kann manipuliert werden, d.h. Sichtweite, Mindestabstand, Geschwindigkeit, Farbe und Gesinnung (klassische Gut-Neutral-Böse Trinität) kann einstellt werden.
  2. (Zufalls-)Einstellungen können für den ganzen Schwarm übernommen werden.
  3. Die Basisregeln können einzeln aktiviert/deaktiviert werden.
  4. Die Bewegungsrichtung kann einem Individuum "aufgedrückt" werden (mit gedrückter linker Maustaste über den Screen schieben und loslassen)
  5. Nichts machen und einfach nur zuschauen ;-)

Wer ihn mal testen möchte, sollte über ausreichend Ressourcen Verfügen. Da die Simulation sehr rechenintensiv ist und ich auch nicht sooo sehr Wert auf Performante Programmierung gelegt habe, sollten mind. 1.5GHz zur Verfügung stehen. Achso, und das .NET Framework natürlich. Die benötigten DirectX dlls' sind im zip enthalten.


Mehr Infos zu diesem Thema gibt es auf den Seiten von Craig Reynold's, der die Schwarm-Regeln das erste mal bereits 1986 beschrieb. Anregungen zur technischen Umsetzung fand ich in dem Buch AI for Game Developers (O'Reilly)

... So, und wieder ein Teil meines Lebensinhaltes erfüllt ...

Keywords: Flocksimulator flock simulator boid boids herd

Thursday, 17 February 2005 00:28:48 (GMT Standard Time, UTC+00:00)  #    Comments [76]  | 
Saturday, 05 February 2005

Wer kennt das nicht ... Termin vergessen, Besuch steht vor der Tür, Wohnung nicht aufgeräumt. Was nun? ... "dirty cleaning", d.h. alle Klamotten schnell in Schrank werfen, Geschirr unters Bett und hoffen, dass keiner rein/runterschaut.

Wie auch immer, so ähnlich geht es mir ab und zu beim Programmieren. Das Projekt wird immer komplexer, der Code unübersichtlicher und die Anzahl der DLL's immer größer. Ok, den Code kann man aufräumen und die Klahrheit in der Komplexität kommt mit der Zeit ... aber was ist mit den Dll's?

Auch hier gilt "dirty cleaning". Das Zaubertool dafür heisst ILMerge. Ein perfektes kleines Tool, mit dem man alle für die Applikation benötigten DLL's zu einer einzigen DLL zusammenfassen kann. Und wenn es sich um eine Windowsapplikation handelt, kann man die DLL's soagar mit der .EXE zusammenfügen. Der Aufruf sieht so aus:

ilmerge /target:winexe /out:AllInOne.exe Programm.exe ClassLibrary1.dll ClassLibrary2.dll
 bzw.
ilmerge /target:dll /out:AllInOne.dll ClassLibrary1.dll ClassLibrary2.dll

Optional kann mit dem /ver Parameter auch eine Version bestimmt werden. z.B. /ver:2.1.0.0

Also schneller kann man nicht aufräumen.

Saturday, 05 February 2005 02:02:40 (GMT Standard Time, UTC+00:00)  #    Comments [61]  | 
Tuesday, 01 February 2005

Was haben .NET und Golf gemeinsam? Richtig, beides kann ein lustiger Zeitvertreib sein.
So war auch die zweite Aufgabe von CodeFairway mit dem Ziel verbunden, die anagrammatischen (bzw. palindromischen) Zahlen und deren Quersummen in einem gegebenen Intervall mit so wenig Codebytes wie möglich zu berechnen.

Palindrome? Anagramme? Guckst du hier.

Wie bekommt man nun die Anzahl Palindrome in einem Intervall heraus? Ganz einfach, nach der Bruteforce Methode, d.h. man testet eine Zahl nach der anderen und summiert die Anagramme auf. Die Siegerin des Turniers wurde übrigens Claudia Krolopp mit folgendem Code:

public void Off(int a,int z,out int e,out int o)
{
  for(o=e=0;z>=a&z>99;z--)
  for(int r=0,t=z,s=t;t>0;s+=z==r?s%2>0?o++:e++:t/=10)r=r*10+t%10;
}


Lustig, nicht? Der Nachteil an solchen Methoden ist jedenfalls die Komplexität. Je größer das Intervall wird, desto länger dauert die Berechnung. Bei der heutigen Durchschnitts-Rechenleistung der Computer versagen diese Ansätze bei Zahlenintervallen > 10 Stellen.

Deswegen habe ich mir einen anderen Weg überlegt. Der macht sich zu Nutze, dass in jeder Zahl selbst die Anzahl der Anagramme für das aktuelle Intervall versteckt ist. Diese muss nur berechnet und mit der Anzahl der vohergehenenden Intervalle addiert werden. Wie ich das genau mache, kannst du hier nachlesen.

Diese Methode hat den Vorteil, dass er auf jede beliebig große Zahl angewendet werden kann. Bei meiner Implementation ist nur aus computertechnischen Gründen die Anzahl der Stellen auf 9223372036854775807 begrenzt, also bitte nicht übertreiben ;-)

Hier gehts zu eine Online Version
Und hier kannst du eine Offline Version downloaden. Voraussetzung ist nur das .NET Framework.

Screenshot Offline Version:



Info: Bei beiden Applikationen gehen die Palindrom-Zahlen erst ab 3 Stellen (also der 101) los.

btw, dass ich mit dieser Methode nur letzter im Turnier wurde (ca. 580 Byte), muss ich nicht extra erwähnen, oder? :-)

coden | dddwni | tddwnb
Tuesday, 01 February 2005 23:45:14 (GMT Standard Time, UTC+00:00)  #    Comments [40]  | 

Theme design by Jelle Druyts

Pick a theme: