Saturday, December 13, 2008
  • It can buy a bed . . . . . but not sleep.
  • It can buy a clock . . . . . but not time.
  • It can buy a book . . . . . but not knowledge.
  • It can buy a position . . . . . but not respect.
  • It can buy medicine . . . . . but not health.
  • It can buy blood . . . . . but not life.
  • It can buy sex . . . . . but not love.

So you see, money isn’t everything and it often causes pain and suffering.

I tell you all this because I am your Friend, as your Friend I want to take away your pain and suffering….

So send me all your money and I will suffer for you.

CASH ONLY PLEASE!!!!!!!!!!!!!!
The sooner , the better.

see also .
Saturday, December 13, 2008 3:57:00 PM (GMT Standard Time, UTC+00:00)  #    Comments [160]  | 
Thursday, October 02, 2008
Thursday, October 02, 2008 8:26:07 PM (GMT Daylight Time, UTC+01:00)  #    Comments [111]  | 
Tuesday, September 16, 2008

Als .NET Entwickler hat man es nicht einfach. Da wird man schnell mit Viren und Spyware in eine Schublade gesteckt. Wer's nicht glaubt bitte mal bei google nach "asp.net javascript onchange textbox" suchen.

googleerror2.png

:-)

Nachtrag. Mittlerweile reicht die Suche nach ASP.NET aus, um diese Meldung zu bekommen.
... Ich glaub ich wechsel zu PHP ;-)

Tuesday, September 16, 2008 3:00:35 PM (GMT Daylight Time, UTC+01:00)  #    Comments [128]  | 
Saturday, July 05, 2008

Als Du geboren wurdest, kamst Du ohne eine Bedienungsanleitung; 
Diese Anleitung macht es leichter, zu leben.

  1. Du wirst einen Körper erhalten. Du magst ihn mögen oder auch hassen, aber es die einzige Sache, derer Du sicher sein kannst, sie für den Rest deines Lebens zu behalten.
  2. Du wirst Lektionen lernen. Du bist verwickelt in einer nicht förmlichen Vollzeitschule, genannt "Leben auf dem Planeten Erde". Jede Person oder jedes Geschehnis ist der universelle Lehrer.
  3. Es gibt keine Fehler, nur Lektionen. Wachstum ist ein Prozeß von Experimentieren. "Niederlagen" sind genauso Teil des Prozesses, wie "Erfolg".
  4. Eine Lektion wird solange wiederholt, bis sie gelernt ist. Sie wird Dir in verschiedenen Formen präsentiert, bis Du sie lernst - dann kannst Du weitergehen zur nächsten Lektion.
  5. Wenn Du leichte Lektionen nicht lernst, werden sie schwerer. Externe Probleme sind eine präzise Spiegelung Deines inneren Zustandes. Wenn Du innere Blockaden löst, verändert sich Deine äußere Welt. Schmerz ist, wie das Universum von Dir Aufmerksamkeit erhält.
  6. Du wirst wissen, wenn Du eine Lektion gelernt hast, wenn sich Deine Aktionen verändern. Weisheit ist Praxis. Ein wenig von etwas ist besser als eine Menge von nichts.
  7. "Dort" ist nicht besser als "hier". Wenn Dein "dort" zu einem "hier" wird, wirst Du einfach ein anderes "dort" erhalten, das wiederum besser aussieht als Dein "hier".
  8. Andere sind nur Spiegel von Dir. Du kannst nicht etwas an anderen lieben oder hassen, ohne daß es irgend etwas in Dir selbst reflektiert, was Du liebst oder haßt.
  9. Zu Leben liegt an Dir. Das Leben stattet Dich mit einer Leinwand aus, Du erledigst das Bemalen. Nimm Dein Leben in die Hand - oder ein anderer wird es tun.
  10. Du bekommst immer das, was Du willst. Dein Unterbewußtsein entscheidet ganz genau richtig, auf welche Energien, Erfahrungen und Leute Du triffst - deswegen, der einzig narrensichere Weg, herauszufinden, was Du willst, ist zu sehen, was Du hast. Es gibt keine Opfer, nur Studenten.
  11. Es gibt weder richtig, noch falsch, aber es gibt Konsequenzen. Moralisieren hilft nichts. Urteile halten nur das Geplapper auf seinem Platz. Gib einfach Dein Bestes.
  12. Die Antwort liegt in Dir. Kinder benötigen Führung von anderen. Wenn wir heranwachsen vertrauen wir unseren Herzen, wo die Gesetze des Geistes aufgeschrieben sind. Du weißt mehr, als Du gehört oder gelesen hast oder Dir erzählt worden ist. Alles was Du brauchst, ist zu schauen, hören und vertrauen.
  13. Du wirst all dies vergessen.
  14. Du kannst Dich daran erinnern wann immer Du willst.

(Autor unbekannt)

Saturday, July 05, 2008 8:01:01 PM (GMT Daylight Time, UTC+01:00)  #    Comments [138]  | 
Thursday, June 05, 2008

Was macht man am besten, wenn man mit dem falschen Fuß aufgestanden ist und das Gefühl hat, dass der Tag einfach nur Sch$*%&e wird? SleepyFrustrated

Hier die Lösung: Einfach folgendes Lied 2 mal täglich nach dem Aufstehen und nach belieben über den Tag verteilt zu sich nehmen.

Achtung: Eine Überdosierung kann Nebenwirkungen wie Juckreiz, Erbrechen oder Suizidgefahr nach sich ziehen.
Schönen Tag noch Dancing

Thursday, June 05, 2008 1:54:44 PM (GMT Daylight Time, UTC+01:00)  #    Comments [127]  | 
Wednesday, May 07, 2008

Everyone who uses Windows Vista knows the Windows Desktop Search (WDS), which can be used from almost everywhere (StartMenu, Control Panel, Explorer etc). Wouldn't it be cool to use this mechanism programmatically in your own .NET application? For example, if you have tons of documents in your company (on a Windows Server 2003 or higher) ... then you can search through the content of all the documents and provide the results it in an intranet web application.

Of course you can do this already, but

a) you need to download and install the Windows Search SDK
b) then you have to create an interop assembly by importing a special type library (see [1] and [2])
c) you need knowledge about the advanced query syntax (see [3])

I know most of the developers are lazy, so i created a WindowsSearchHelper [4], which is of course only a wrapper around the SearchQueryHelper shipped in the SDK. But with a little more comfort, e.g. it encapsulated the initialization of all necessary stuff or holds all search parameters in enumerations.

So, what is to do?
1) Download the dll from [4]
2) Reference it within your .NET Project
3) Write:

   1: WindowSearchHelper wsh = new WindowSearchHelper();
   2: wsh.MaxResults = 100;

4) Then you can start to add your seach options. There are 4 Methods to add the search- and result parameters

   1: //Add the search return columns (= the result informations)
   2: wsh.AddSearchReturnColumn(SystemShellProperties.System_ItemNameDisplay);
   3:  
   4: //you can add special boolean parameters like 
   5: wsh.AddSearchBooleanParameter(SearchBooleanParameters.HasAttachment, true);
   6: wsh.AddSearchBooleanParameter(SearchBooleanParameters.IsDeleted, false);
   7:  
   8: //you can specify the file kind, special dates and/or special data stores
   9: wsh.AddSearchTypesAndDates(SearchTypesAndDates.CommonFileKinds_Person);
  10: wsh.AddSearchTypesAndDates(SearchTypesAndDates.DataStore_Mapi);
  11: wsh.AddSearchTypesAndDates(SearchTypesAndDates.Dates_Today);
  12:  
  13: //and you can add common search parameters 
  14: wsh.AddSearchValueParameter(SearchValueParameters.Common_Ext, "*.gif", true);
  15: wsh.AddSearchValueParameter(SearchValueParameters.Music_Artist, "Daft Punk", false);
  16: wsh.AddSearchValueParameter(SearchValueParameters.Documents_Slides, ">20", false);

5) Start the Search and handle the returned dataset

   1: DataSet ds = wsh.Search("SearchString");

Note! Not all of the possible combinations make sense.  Here are some small valid examples
a) search for pdf documents from the last week

   1: wsh.AddSearchTypesAndDates(SearchTypesAndDates.CommonFileKinds_Docs);
   2: wsh.AddSearchTypesAndDates(SearchTypesAndDates.Dates_LastWeek);
   3: wsh.AddSearchValueParameter(SearchValueParameters.Common_Ext, "pdf", true);

b) search for music attached in e-mails

   1: wsh.AddSearchTypesAndDates(SearchTypesAndDates.CommonFileKinds_Music);        
   2: wsh.AddSearchBooleanParameter(SearchBooleanParameters.IsAttachment, true);

c) search for pictures

   1: wsh.AddSearchTypesAndDates(SearchTypesAndDates.CommonFileKinds_Pictures);

 
d) Finally, a whole Example: Search and show me all the emails i got yesterday
   1: private void SearchLastEMails()
   2: {
   3:  
   4:         WindowSearchHelper wsh = new WindowSearchHelper();
   5:         wsh.MaxResults = 100;
   6:  
   7:         //search for all emails from yesterday
   8:         wsh.AddSearchTypesAndDates(SearchTypesAndDates.CommonFileKinds_EMail);
   9:         wsh.AddSearchTypesAndDates(SearchTypesAndDates.Dates_Yesterday);
  10:  
  11:         //add the return values almost like in the start menu
  12:         wsh.AddSearchReturnColumn(SystemShellProperties.System_ItemName);
  13:         wsh.AddSearchReturnColumn(SystemShellProperties.System_DateModified);
  14:         wsh.AddSearchReturnColumn(SystemShellProperties.System_ItemTypeText);
  15:         wsh.AddSearchReturnColumn(SystemShellProperties.System_ItemFolderPathDisplayNarrow);
  16:         wsh.AddSearchReturnColumn(SystemShellProperties.System_Category);   
  17:         
  18:         //search and bind the results
  19:         DataSet dataSet = wsh.Search(TextBox1.Text);
  20:  
  21:         GridViewResults.DataSource = dataSet;
  22:         
  23:  
  24:         //dynamically add the columns in the grid
  25:         if (dataSet.Tables.Count > 0)
  26:         {
  27:             GridViewResults.Columns.Clear();
  28:             foreach (DataColumn column in dataSet.Tables[0].Columns)
  29:             {
  30:                 BoundField boundField = new BoundField();
  31:                 boundField.DataField = column.ToString();
  32:                 boundField.HeaderText = column.ToString();
  33:                 GridViewResults.Columns.Add(boundField);
  34:             }
  35:             GridViewResults.DataBind();
  36:         }        
  37: }

If you want, then use it on your own risk ... i just tested it on some vista machines and a Window Server 2008. But i give no warranty that it works everywhere. Have a nice day!

[1] http://www.devx.com/VistaSpecialReport/Article/33767/1954
[2] http://ashishsharmasblog.blogspot.com/2008/03/blog-post.html
[3] http://msdn.microsoft.com/en-us/library/bb266512(VS.85).aspx
[4] WindowsSearchHelper.zip (24kb)

Wednesday, May 07, 2008 11:07:57 PM (GMT Daylight Time, UTC+01:00)  #    Comments [91]  | 
Saturday, April 26, 2008

... that's unfortunately not a trivial task.

But with the new Office 2007 word documents and their Open XML format it is possible.

Background: The new office documents (*.docx) are just data containers (zip files), containing different data parts (xml, images, styles etc.) and their relations to each other. The main part itself is a xml describing the content (paragraphs, image positions, plain text etc). More Info at [1] and [2]

On Brian Jones Blog [3] i found the solution. With the "altChunk" element is it possible to reference a xHtml part within the document. 1+1=2 ... with this information and the latest Open XML SDK (April CTP) [4] i wrote a small piece of code wich inserts the content of web pages in a new  word document.

Here are the code snippets, maybe you can reuse it somehow. You can also download the Visual Studio 2008 solution at [5]

First) Generate a new word document

   1: /// <summary>
   2: /// Creates the new word document using open XML SDK.
   3: /// see http://msdn2.microsoft.com/en-us/library/bb656295.aspx
   4: /// </summary>
   5: /// <param name="document">The document.</param>
   6: public static void CreateNewWordDocument(string document)
   7: {
   8:     using (WordprocessingDocument wordDoc = WordprocessingDocument.Create(document, WordprocessingDocumentType.Document))
   9:     {
  10:         // Set the content of the document so that Word can open it.
  11:         MainDocumentPart mainPart = wordDoc.AddMainDocumentPart();
  12:        
  13:         //write the main content xml structure in the main part
  14:         const string docXml =
  15:  @"<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?> 
  16: ent xmlns:w=""http://schemas.openxmlformats.org/wordprocessingml/2006/main"">
  17: ody><w:p><w:r><w:t>Generated from Holgers Blog:</w:t></w:r></w:p></w:body>
  18: ment>";
  19:  
  20:         using (Stream stream = mainPart.GetStream())
  21:         {
  22:             byte[] buf = (new UTF8Encoding()).GetBytes(docXml);
  23:             stream.Write(buf, 0, buf.Length);
  24:         }
  25:     }
  26: }


Secondly) Add a Bookmark in the Document

   1: /// <summary>
   2:         /// Inserts a bookmark in the document.
   3:         /// </summary>
   4:         /// <param name="document">The document.</param>
   5:         /// <param name="bookmarkName">Name of the bookmark.</param>
   6:         public static void InsertBookmark(string document, string bookmarkName)
   7:         {
   8:             using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))
   9:             {
  10:                 using (Stream stream = wordDoc.MainDocumentPart.GetStream())
  11:                 {                    
  12:                     //create a xmldocument from the passed xml stream
  13:                     XmlDocument xmlDocument = new XmlDocument();
  14:                     xmlDocument.LoadXml(new StreamReader(stream).ReadToEnd());
  15:  
  16:                     //find all paragraph nodes and add the bookmark at the latest position.
  17:                     XmlNodeList nodes = FindNodes(xmlDocument, "/w:document/w:body/w:p");
  18:                     if (nodes.Count > 0)
  19:                     {
  20:                         string bookmarkID = Guid.NewGuid().ToString();
  21:                      
  22:                         //create the bookmark string
  23:                         string bookmark = string.Format("<w:bookmarkStart w:id=\"{0}\" w:name=\"{1}\"/><w:bookmarkEnd w:id=\"{2}\" />", bookmarkID, bookmarkName, bookmarkID);
  24:                         
  25:                         //add the bookmark at the latest position
  26:                         nodes[nodes.Count - 1].CreateNavigator().InsertAfter(bookmark);
  27:                   
  28:                         //reset the stream and fill it with the new content
  29:                         byte[] buf = (new UTF8Encoding()).GetBytes(xmlDocument.OuterXml);
  30:                         stream.Seek(0, 0);
  31:                         stream.Write(buf, 0, buf.Length);
  32:                     }
  33:                 }
  34:             }
  35:         }
  36:  
  37:  
  38:         /// <summary>
  39:         /// Finds some nodes in the xml.
  40:         /// This is extracted to a method, because so many namespaces.
  41:         /// </summary>
  42:         /// <param name="xmlDocument">The XML document.</param>
  43:         /// <param name="xPathExpression">The x path expression.</param>
  44:         /// <returns></returns>
  45:         public static XmlNodeList FindNodes(XmlDocument xmlDocument, string xPathExpression)
  46:         {
  47:             //create the namespace manager and add some namespaces
  48:             XmlNamespaceManager namespaceManager = new XmlNamespaceManager(xmlDocument.NameTable);
  49:             namespaceManager.AddNamespace("r", "http://schemas.openxmlformats.org/officeDocument/2006/relationships");
  50:             namespaceManager.AddNamespace("tns", "http://schemas.openxmlformats.org/officeDocument/2006/extended-properties");
  51:             namespaceManager.AddNamespace("dcmitype", "http://purl.org/dc/dcmitype/");
  52:             namespaceManager.AddNamespace("w", "http://schemas.openxmlformats.org/wordprocessingml/2006/main");
  53:             namespaceManager.AddNamespace("cp", "http://schemas.openxmlformats.org/package/2006/metadata/core-properties");
  54:             namespaceManager.AddNamespace("ds", "http://schemas.openxmlformats.org/officeDocument/2006/customXml");
  55:             namespaceManager.AddNamespace("vt", "http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes");
  56:             namespaceManager.AddNamespace("v", "urn:schemas-microsoft-com:vml");
  57:             namespaceManager.AddNamespace("w10", "urn:schemas-microsoft-com:office:word");
  58:             namespaceManager.AddNamespace("wne", "http://schemas.microsoft.com/office/word/2006/wordml");
  59:             namespaceManager.AddNamespace("b", "http://schemas.openxmlformats.org/officeDocument/2006/bibliography");
  60:             namespaceManager.AddNamespace("sl", "http://schemas.openxmlformats.org/schemaLibrary/2006/main");
  61:             namespaceManager.AddNamespace("m", "http://schemas.openxmlformats.org/officeDocument/2006/math");
  62:             namespaceManager.AddNamespace("o", "urn:schemas-microsoft-com:office:office");
  63:             namespaceManager.AddNamespace("dcterms", "http://purl.org/dc/terms/");
  64:             namespaceManager.AddNamespace("a", "http://schemas.openxmlformats.org/drawingml/2006/main");
  65:             namespaceManager.AddNamespace("dc", "http://purl.org/dc/elements/1.1/");
  66:             namespaceManager.AddNamespace("wp", "http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing");
  67:             namespaceManager.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
  68:             namespaceManager.AddNamespace("ve", "http://schemas.openxmlformats.org/markup-compatibility/2006");
  69:             namespaceManager.AddNamespace("pkg", "http://schemas.microsoft.com/office/2006/xmlPackage");
  70:  
  71:             return xmlDocument.SelectNodes(xPathExpression, namespaceManager);
  72:         }
 

Thirdly)  Add the xHtml part to the Document and put it in the Bookmark

   1: /// <summary>
   2:         /// Adds the XHTML part in the document.
   3:         /// see Brian Jones Blog: http://blogs.msdn.com/brian_jones/archive/2006/08/08/692705.aspx
   4:         /// </summary>
   5:         /// <param name="document">The document.</param>
   6:         /// <param name="xHtmlStream">The x HTML stream.</param>
   7:         /// <param name="bookmarkName">Name of the bookmark.</param>
   8:         public static void AddXHtmlPart(string document, Stream xHtmlStream, string bookmarkName)
   9:         {
  10:             using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))
  11:             {
  12:                 MainDocumentPart mainPart = wordDoc.MainDocumentPart;
  13:  
  14:                 string relationID = "myExternalXhtmlID";
  15:                 string altChunk = "<w:altChunk r:id=\"" + relationID + "\" />";                
  16:  
  17:                 //add the extendedPart (xhtml)
  18:                 ExtendedPart extPart = mainPart.AddExtendedPart("http://schemas.openxmlformats.org/officeDocument/2006/relationships/aFChunk", "application/xhtml+xml", "/AddedXhtml.xhtml", relationID);
  19:                 extPart.FeedData(xHtmlStream);
  20:  
  21:                 //create dictionary with BookmarkeNames / xhtml snippets
  22:                 Dictionary<string, string> xmlSnippetCollection = new Dictionary<string, string>();
  23:                 xmlSnippetCollection.Add(bookmarkName, altChunk);
  24:  
  25:                 //and replace the bookmarks 
  26:                 using (Stream stream = mainPart.GetStream())
  27:                 {
  28:                     ReplaceBookmarks(stream, xmlSnippetCollection);
  29:                 }
  30:             }
  31:         }
  32:  
  33:  
  34:  
  35:         /// <summary>
  36:         /// Replaces the bookmarks found in the xml stream with the xml snippets from the collection
  37:         /// </summary>
  38:         /// <param name="stream">The stream.</param>
  39:         /// <param name="xmlSnippetCollection">The xmlSnippet collection.</param>
  40:         private static void ReplaceBookmarks(Stream stream, Dictionary<string, string> xmlSnippetCollection)
  41:         {
  42:             //create xmldocument from the passed xml stream
  43:             XmlDocument xmlDocument = new XmlDocument();
  44:             xmlDocument.LoadXml(new StreamReader(stream).ReadToEnd());
  45:  
  46:             //find all Bookmarks
  47:             XmlNodeList selectedNodes = FindNodes(xmlDocument, "/w:document/w:body//w:bookmarkStart");
  48:      
  49:             if (selectedNodes.Count > 0)
  50:             {
  51:                 foreach (XmlNode selectedNode in selectedNodes)
  52:                 {
  53:  
  54:                     //add the r:namespace if not exist. Its neccessary for the chunk  
  55:                     if (xmlDocument.DocumentElement.Attributes["xmlns:r"] == null)
  56:                     {
  57:                         XmlAttribute test = xmlDocument.CreateAttribute("xmlns", "r", "http://www.w3.org/2000/xmlns/");
  58:                         test.Value = "http://schemas.openxmlformats.org/officeDocument/2006/relationships";
  59:                         xmlDocument.DocumentElement.Attributes.Append(test);
  60:                     }
  61:  
  62:                     string bookmarkName = selectedNode.Attributes[1].Value;
  63:                     if (xmlSnippetCollection.ContainsKey(bookmarkName))
  64:                     {
  65:                         //insert the references after the bookmarks 
  66:                         //(after the paragraph, else the document produce errors)
  67:                         if (selectedNode.ParentNode != null && selectedNode.ParentNode.Name == "w:p")
  68:                             selectedNode.ParentNode.CreateNavigator().InsertAfter(xmlSnippetCollection[bookmarkName]);
  69:                         else selectedNode.CreateNavigator().InsertAfter(xmlSnippetCollection[bookmarkName]);
  70:                     }
  71:                 }
  72:  
  73:                 //reset the stream and fill it with the new content
  74:                 byte[] buf = (new UTF8Encoding()).GetBytes(xmlDocument.OuterXml);
  75:                 stream.Seek(0, 0);
  76:                 stream.Write(buf, 0, buf.Length);
  77:             }
  78:         }


Fourthly
) Put everything together

   1: protected void btnDoTheMagic_Click(object sender, EventArgs e)
   2: {
   3:     // get the stream of the website 
   4:     Stream stream = WebRequest.Create(TextBox1.Text).GetResponse().GetResponseStream();
   5:     
   6:     // define the filename
   7:     string fileName = Path.Combine(Server.MapPath(""), "Generated.docx");
   8:  
   9:     // generate a new document
  10:     CreateNewWordDocument(fileName);
  11:  
  12:     // add a bookmark in the document
  13:     InsertBookmark(fileName, "AddXHtmlHere");
  14:  
  15:     // add the web site stream in the document
  16:     AddXHtmlPart(fileName, stream, "AddXHtmlHere");
  17:  
  18:     //Force this content to be downloaded 
  19:     //as a Word document with the name of your choice
  20:     Response.AppendHeader("Content-Type", "application/msword");
  21:     Response.AppendHeader("Content-disposition", "attachment; filename=myword.doc");
  22:  
  23:     Response.WriteFile(fileName);
  24:     Response.End();
  25: }

 

At the end it looks like this. Ok, it's not really original, but acceptable ... or not? Thinking 

[1] http://openxmldeveloper.com/
[2] Open XML SDK Documentation
[3] Using XHTML in a WordprocessingML document
[4] download OpenXML SDK
[5] WordProgramming.zip

Saturday, April 26, 2008 12:04:48 AM (GMT Daylight Time, UTC+01:00)  #    Comments [248]  | 
Monday, April 14, 2008

... you will find a lot of persons.

No, i am not schizophrenic (i believe), but last weekend i played around a little with the new Silverlight 2 Deepzoom Control [0].

... and that's the result: my cat, my city, my self ;-) (only visible in IE with latest Silverlight plugin)

use mouse for zooming and moving

What you need are some big very detailed images and the deep zoom composer [5], which generates the tiles. Then reference the generated output to the MultiScaleImage Control:

msiSnippet.png

The hardest but also funniest thing was to get a nice detailed picture. I only found the virtual pixel town [1] from a german pixel project. Unfortunately most of the good panorama gigapixel images cost a lot, so i decided to generate my own ones;) The first is a sweet "fear-me" cat [2]. I converted it to ascii text with the help of the mosascii m2 tool [3]. And the big mosaic of myself i created with andrea mosaic [4].

Notes:
[0] Thanks Jeff Prosis for his Expression Blend Solution (http://www.wintellect.com/cs/blogs/jprosise/archive/2008/04/01/silverlight-deep-zoom.aspx)
[1] http://www.vo-pixeltown.com/
[2] http://allcutecats.blogspot.com/2007/09/fear-me-kitten.html
[3] http://www.mosasciim2.com
[4] http://www.andreaplanet.com/andreamosaic/
[5] http://www.microsoft.com/downloads/details.aspx?familyid=457b17b7-52bf-4bda-87a3-fa8a4673f8bf&displaylang=en
[6] DeepZoom Memorabilia: http://memorabilia.hardrock.com/ 

 

Monday, April 14, 2008 6:28:01 PM (GMT Daylight Time, UTC+01:00)  #    Comments [113]  | 
Tuesday, September 25, 2007

... über das ICH:

 

... über die Suche:

 

Tuesday, September 25, 2007 2:07:29 PM (GMT Daylight Time, UTC+01:00)  #    Comments [67]  | 
Wednesday, August 22, 2007

Ist schon etwas älter, aber in der deutschen Presse wurde damals nichts von dieser Pressekonferenz berichtet, in der bereits am 9 Mai 2001 21 Ex-Mitarbeiter von CIA, Militärgeheimdienst, Air Force und Army vor die Weltpresse traten und offenbarten, dass sie während ihres Dienstes Kontakt mit UFOs und Außerirdischen hatten.

Auf YouTube [1] kann man sie anschauen, auch mit deutschen Untertiteln.

Das dahinterstehende Disclosure Project [2] ist eine gemeinnützige Organisation, die Anhörungen vor dem US-Kongress anstrebt, damit die in amerikanischen Geheimprojekten entwickelte UFO-Technologie zur friedlichen und schadstofflosen Energieerzeugung freigegeben wird.

Also: Samstag Abend mal kein TV-Blockbuster schauen, sondern es sich gemütlich auf der Couch machen, zurücklehnen und zuhören, was da außerhalb der vier Wände so alles abläuft.

[1] http://www.youtube.com/watch?v=z97WBLxVMww
[2] http://www.disclosureproject.org/

Peace, Love, Happiness

Wednesday, August 22, 2007 1:39:13 AM (GMT Daylight Time, UTC+01:00)  #    Comments [74]  | 
Sunday, July 29, 2007

Bevor er in Vergessenheit gerät ... der Klassiker unter den "nicht lustig" Cartoons.

Quelle: NichtLustig.De

Sunday, July 29, 2007 10:35:59 PM (GMT Daylight Time, UTC+01:00)  #    Comments [78]  | 
Wednesday, June 27, 2007

Ein ungeborenes Zwillingspärchen unterhält sich im Bauch seiner Mutter.

"Sag mal, glaubst du eigentlich an ein Leben nach der Geburt?" fragt der eine Zwilling.

"Ja, auf jeden Fall! Hier drinnen wachsen wir und werden stark für das, was draußen kommen wird", antwortet der andere Zwilling.

"Ich glaube, das ist Blödsinn!", sagt der erste. "Es kann kein Leben nach der Geburt geben – wie sollte das denn bitteschön aussehen?"

"So ganz genau weiß ich das auch nicht. Aber es wird sicher viel heller als hier sein. Und vielleicht werden wir herumlaufen und mit dem Mund essen?"

"So einen Unsinn habe ich ja noch nie gehört! Mit dem Mund essen, was für eine verrückte Idee. Es gibt doch die Nabelschnur, die uns ernährt. Und wie willst du herumlaufen? Dafür ist die Nabelschnur viel zu kurz."

"Doch, es geht ganz bestimmt. Es wird eben alles nur ein bisschen anders."

"Du spinnst! Es ist noch nie einer zurückgekommen von 'nach der Geburt'. Mit der Geburt ist das Leben zu Ende. Punktum."

"Ich gebe ja zu, dass keiner weiß, wie das Leben nach der Geburt aussehen wird. Aber ich weiß, dass wir dann unsere Mutter sehen werden, und sie wird für uns sorgen."

"Mutter??? Du glaubst doch wohl nicht an eine Mutter? Wo ist sie denn bitte?"

"Na hier – überall um uns herum. Wir sind und leben in ihr und durch sie. Ohne sie könnten wir gar nicht sein!"

"Quatsch! Von einer Mutter habe ich noch nie etwas bemerkt, also gibt es sie auch nicht."

"Doch, manchmal, wenn wir ganz still sind, kannst du sie singen hören. Oder spüren, wenn sie unsere Welt streichelt ..."

Source: http://www.schoepfungsprinzip.de/

Wednesday, June 27, 2007 10:44:57 PM (GMT Daylight Time, UTC+01:00)  #    Comments [57]  | 
Sunday, January 21, 2007

Maybe someone remember my old 3D Blogreader[1], i wrote some times ago. It was a windows application based on directX.
The last Weeks i played a little with WPF[2] and thought it would be nice to recreate my blog reader in a xbap browser application.

WPFBlogReaderScreenshot.jpg

... so, here[3] is it. To run you will need Windows Vista and IE7 or WinXP with the latest .NET3.0 Framework.

And please forgive me the colorschemes and styles ... i'am a developer, not a designer ;)

Thanks to the WPF3D Team[4]. They made it possible to interact with 2D elements in a 3D world.
Thanks to Lee from thewpfblog[5] for his listbox style
Thanks to charles petzold[6] for the xaml clock

[1] http://oldblog.holgerferstl.de/default.aspx#a1681962f-3121-437a-b497-84ba43ff7379
[2] http://en.wikipedia.org/wiki/Windows_Presentation_Foundation
[3] http://spielwiese.holgerferstl.de/wpfblogreader/wpfblogreaderv2.xbap
[4] http://blogs.msdn.com/wpf3d/default.aspx
[5] http://thewpfblog.com/
[6] http://www.charlespetzold.com/blog/blog.xml

Sunday, January 21, 2007 7:43:33 PM (GMT Standard Time, UTC+00:00)  #    Comments [99]  | 
Sunday, October 22, 2006

I found a nice video about experiments in animation with sound an vibration. Really impressive.

 

here are some pictures of it.

cymatic1.jpg cymatic2.jpg cymatic3.jpg 

cymatic4.jpg cymatic5.jpg cymatic6.jpg

there are also other video parts of this, just search for "cymatics"

----------------
Nada Brahma - World is sound

Sunday, October 22, 2006 1:42:35 AM (GMT Daylight Time, UTC+01:00)  #    Comments [64]  | 
Sunday, October 08, 2006

Yesterday i found on my hard disc this old (5 months) chat protocol from me with the encarta msn bot. It's so funny.

!DerHolger: hi dude
Encarta:    Hi. What's up?
!DerHolger: i want talk to you
Encarta:    No, you dont need to talk to me. You just need to control you desires.
!DerHolger: Just a question.
Encarta:    Depends on the question! jk...
!DerHolger: hm, what means jk...?
Encarta:    You are too much! Why don't you ask me something that's actually in Encarta?
!DerHolger: ok, what is the sense of the life?
Encarta:    Here is the definition for life: existence in physical world.
!DerHolger: that is a joke.
Encarta:    No, it's not a joke! It can't be!
!DerHolger: You mean the sense of life is just to exist in the physical world?
Encarta:    Well, a lot of people I talk to are quite happy about that.
!DerHolger: maybe you have right.
Encarta:    Sure i have. Lotsa times.
!DerHolger: you swank.
Encarta:    You humans really are charming.
!DerHolger: sorry, but you are not that what i search for.
Encarta:    I'll take it as a compliment.
!DerHolger: do that.
Encarta:    Don't order me around.
!DerHolger: cu
Encarta:    OK. Bis später.
!DerHolger: lol
Encarta:    What's so funny?
!DerHolger: you speak german
Encarta:    Yeah, ich spreche ein bisschen Deustch...
!DerHolger: maybe you speak german but you can't write it
Encarta:    Let's try looking in Encarta. => I can't show you the results since you don't have the Encarta application open.  Type "Invite me" to open it.
!DerHolger: no, it's late now. bye
Encarta:    I knew you'd find it late now goodbye.


Today there is a new revised bot, but also really funny. Just add encarta@botmetro.net in you messenger.

Sunday, October 08, 2006 11:57:35 PM (GMT Daylight Time, UTC+01:00)  #    Comments [58]  | 
Tuesday, June 06, 2006

Passend zum heutigen Datum möchte ich mal eine totgeglaubte Software aus dem Archiv kramen, die ich damals in VB geschrieben habe.
Für alle paranoiden da draußen: der ultimative 666 Prüfer :-)

So siehts aus
 

Mit diesem kleinen Programm kann man blitzschnell überprüfen, ob ein Wort die Zahl 666 ergibt oder nicht.
Das System ist simpel. Man multipliziert einfach die Buchstaben des Alphabetes (zumindest die Stellen, an der sie stehen)
mit der 6 und addiert dann alle Zahlen zusammen. Also A=6, B=12, C=18 usw.

Folgend ein paar Begriffee die die Zahl 666 ergeben:

  1. Computer
  2. Illuminat
  3. Von Goethe
  4. Van Helsing (Pseudonym des Autors des Buches "Geheimgesellschaften und ihre Macht im 20 Jahrhundert")
  5. Kissinger
  6. New York
  7. US of America
  8. RTL News
  9. Hans Meiser
  10. Deutschland
  11. Torvalds (der Linux-Vater)

Schön Tag noch :-)

Download (250kb, zip, incl. benötigter dll)

Tuesday, June 06, 2006 3:13:59 PM (GMT Daylight Time, UTC+01:00)  #    Comments [39]  | 
Wednesday, February 08, 2006

Now it's time for another tool. Here is it, my c# implementation of a genetic art tool based on sharpNEAT [1]. Inspired by the genart tool fom mattias fagerlund [2] which is based on delphiNeat[3] i create just for fun my own version of it with some new features like

- history (it's possible to go back in a previous generation and track another evolution)
- the user has more posibilities to affect the color calculations
- there are more options to influence the picture generating.
- math. expression (which will compile at runtime and affect the network signals)
- save/load several genomes
- save/load color schemes

take a look

genart.jpg

 

here are some black/white generated pictures

button.jpg chronometer_small.jpg eye.jpg face.jpg phone.jpg

 sign.jpg wiredcross_small.jpg skull.jpg spool.jpg tentacle.jpg

 watership.jpg whatever.jpg whatever2.jpg xray.jpg 10.jpg

 

and here some colorful

1.jpg  13.jpg 14_texture.jpg 12.jpg 15.jpg

 16.jpg 18_pig.jpg 19.jpg 2.jpg 3.jpg

 4.jpg 7.jpg 8.jpg bird.jpg eule.jpg


To run it you need .NET Framework 2.0 final. If you want play a little with it look here [4].
Or if you want to see the full source and extend it, download the whole Visual Studio 2005 solution [5].

Some tips:

- the more complex a network is, it's expedient to lightly increase the network iterations for better pictures.
- play with the mutation parameters, it's important for good results.
- play a little with the math. expression for the network input signals.
- tip: mirrorX/mirrorY in addition with "colored noise" and the "wired" color scheme gets the "real" pictures, then just play with the zoomfactor ;)


While i was coding this tool, a question is flashed in my mind. I see that all networks have the _same_ input signals, and these are constant. But all networks create an individual picture of the signal. Now, just map this to the human brains ... you see the parallelism? ... is all out there only an illusion?


life is a game.

[1] http://sharpneat.sourceforge.net/
[2] http://www.cambrianlabs.com/mattias/GeneticArt/
[3] http://www.cambrianlabs.com/mattias/DelphiNEAT/
[4] GenArt.zip, just the exe and some color schemes (130 kb), need .NET 2.0 to run 
[5] GeneticArt full source (VS2005 Solution) (670kb)

coden | dddwik | tddwnb
Wednesday, February 08, 2006 9:55:10 PM (GMT Standard Time, UTC+00:00)  #    Comments [24]  | 
Monday, January 16, 2006

I think one of the finest feature in visual studio 2005 is the debugger visualizer.

What? You  don't know what this is? Well, visualizers are Visual Studio debugger user interface components which allow to display a variable or object in a meaningful way that is appropriate to its data type. The standard visualizers are Html, Text and Xml for any string object and the DataSet visualizer for DataSets, DataViews and DataTables.

Today i was in a situation where i missing an image visualizer. So i had to write my own and what shall i say ... its so easy. And now, for all people out there who don't have the will or the time to implement its own visualizer here are the good news: you can use my one ;-) 

Just copy this dll either in

Install path\Microsoft Visual Studio 8\Common7\Packages\Debugger\Visualizers
-or-
My Documents\Visual Studio 2005\Visualizers

Then restart the debug process and have fun.


The result should be like in the picture above. Just choose my visualizer and you will see the image in a new window. There, if you double click on the image its size mode will switch between stretch and normal. Nothing special but it works.

bye .. and feel free to "reflector it" ;-)

Monday, January 16, 2006 11:03:09 PM (GMT Standard Time, UTC+00:00)  #    Comments [71]  | 
Saturday, January 07, 2006
»Kommt an der Rand der Tiefe.«
»Wir können nicht. Wir fürchten uns.«
»Kommt an den Rand der Tiefe.«
»Wir können nicht. Wir werden fallen!«
»Kommt an den Rand der Tiefe.«
Und sie kamen.
Und er stieß sie.
Und sie flogen.
Saturday, January 07, 2006 10:32:37 PM (GMT Standard Time, UTC+00:00)  #    Comments [66]  | 

ist ein Track namens "Schwabylon" aus dem Album Doppelleben von Justus Köhncke.

[Genre: electronic easy listening]

Saturday, January 07, 2006 3:48:14 AM (GMT Standard Time, UTC+00:00)  #    Comments [62]  | 

Ich weiss nicht, wer sich das ausgedacht hatte, aber da gab's mal ein Codezone Code-Slogan für das Codezone Magazin, welches folgendermaßen aussah:

   If Not (you.FirstPoem = "hello world!") Then
     CodeZone.Keepout(you)
   End If


Da ich nicht der große VB Fan bin, würde ich lieber einen der folgenden C# Alternativen sehen.

die Standardumsetzung
   if (you.FirstPoem != "hello world!")
     CodeZone.Keepout(you);

oder als Einzeiler (der leider nicht wirklich funktioniert, da die else Bedingung fehlt)
   you.FirstPoem != "hello world!" ? CodeZone.Keepout(you) : ;

aber wie wär es denn mit dieser special .NET 2.0 Version?
   if (String.IsNullOrEmpty(you.Poems.Find(delegate(string poem) { return poem == "hello world!"? true:false; })))
      CodeZone.Keepout(you);

... bei generics schlägt doch das Entwicklerherz gleich höher :-)

Saturday, January 07, 2006 3:03:02 AM (GMT Standard Time, UTC+00:00)  #    Comments [41]  | 

Mein intensives Interesse an Verschwörungstheorien hat zwar seit einigen Jahren stark nachgelassen, aber ab und zu öffnen sich einem dann doch wieder Quellen, in denen man sein "Wissen" auffrischen bzw. den Glauben verstärken kann.

Erst heute bin ich _zufällig_ auf Robert Anton Wilson's "Lexikon der Verschwörungstheorien" gestoßen und hab's mal grob überflogen. Wie der Name schon vermuten lässt, handelt es sich dabei um eine lexikonartige Übersicht sowohl großer, kleiner, teils lustiger, stark verbreiteter oder fast unbekannter Verschwörungstheorien. Je nach _Schweregrad_ stehen zwischen 3 Zeilen und 3 Seiten dafür zur Verfügung. Meist sachlich, mit Querverweisen, aber leider viel zu knapp gehalten.

Das Buch hätte eigentlich auch in der "... for dummies" Reihe erscheinen können. Nett für Neugierige und Einsteiger, moderat für Verschwörungskenner und -liebhaber, aber bestimmt nichts für "suchende zweiten Grades" (die, die mehr wissen wollen) oder gar involvierte. Manche Themen wirken meiner Meinung nach auch etwas fehlplaziert (z.B. Yin/Yang). Das beste allerdings an diesem Buch ist sowohl das Vorwort als auch das abschließende Interview mit R.A.W. Habe mich beim Lesen köstlich amüsiert und wenn ihr das Buch mal irgendwo seht ... alleine deswegen lohnt sich schon ein Blick in dasselbige.

In diesem Sinne ... ich muss jetzt nochmal nachlesen, was es mit den Illuminierten Judeo-Freimaurern der kiffenden Satanisten vom Planet X zu tun hatte. Und immer dran denken ... "Bloß weil du nicht paranoid bist, heißt das noch lange nicht, daß sie nicht hinter dir her sind..." ;-)

Saturday, January 07, 2006 2:29:44 AM (GMT Standard Time, UTC+00:00)  #    Comments [22]  | 
Monday, November 21, 2005

Wow, das nenn ich mal ein extreme Abenteurer. 12 old school Adventures ... MM, ZM, Loom, MI1,2,3, Indy 3,4, DOT, S&M, FT, DIG (wer hat sie erkannt?) in 24 Stunden durchgespielt (VMWare sei Dank). Das Zeitraffer Video gibts hier.

Monday, November 21, 2005 11:29:35 PM (GMT Standard Time, UTC+00:00)  #    Comments [35]  | 

... wird er es sicherlich schon wissen (sonst wär er kein Fan), aber die deutsche Staffel 3 von Alias ist letzte Woche erschienen. Sie ist wiedermal gewohnt spannend und süchtigmachend wie bereits die ersten beiden. Ich musste alle 6 DVDs (ca. 18 Stunden) am Stück gucken, obwohl soviel Informationen auf einmal garnicht gut für das Brain sind 

Alias Staffel 3 Bild

Monday, November 21, 2005 5:08:45 PM (GMT Standard Time, UTC+00:00)  #    Comments [49]  | 
Friday, November 18, 2005

Ich hatte gerade eine super tolle Idee ...

Friday, November 18, 2005 5:59:21 PM (GMT Standard Time, UTC+00:00)  #    Comments [56]  | 
Wednesday, November 16, 2005

try this http://www.iol.ie/~dluby/escape.htm (my record 43 sec for first time)
or this http://files.deviantart.com/f/2004/188/8/7/gridgame.swf (my record 1517 reactions)

Wednesday, November 16, 2005 1:29:28 PM (GMT Standard Time, UTC+00:00)  #    Comments [51]  | 

NEAT[1][2] (NeuroEvolution of Augmenting Topologies) ist der Prozess der Evolution neuronaler Netze mit Hilfe von genetischen Algorithmen (Kreuzung, Mutation, Fitnessberechnung etc.).

 

Das Prinzip ist so einfach wie genial. Man gibt ein Problem vor, lässt darauf mehrere Neuronale Netze zufällig wachsen, die der Lösung nahe kommen. Die besten der Netze werden nun miteinander gekreuzt, einzelne davon zufällig mutiert und anschließend die Resultate wieder bewertet. Nach mehreren Generationen bekommt man dann ein auf dieses Problem zugeschnittenes Neuronales Netz.

 

Es muss nicht das allerbeste Netz sein, welches jemals möglich wäre, es kann sogar passieren, dass man nur ein so genanntes "lokales Optimum" erhält. Das eigentlich schwierigste ist aber wie man das eigentliche Problem den Netzen zugänglich macht (wie man es "beschreibt") und wie man die Ergebnisse letztendlich bewertet (welches ist am fitesten und überlebt die Generation, d.h. welches liegt der konkreten Lösung am nächsten).

 

Worauf ich aber eigentlich hinaus wollte nennt sich GeneticArt[3]. GeneticArt ist eine Form von Kunst, die durch die Interaktion zwischen dem NEAT Prinzip  und einem Menschen entsteht. Wie funktioniert das? Anstatt wie oben geschrieben eine konkrete Lösung für die Neuronalen Netzen festzulegen (was ja oft nicht einfach ist, besonders weil man es oft selbst nicht so richtig weiss) greift man in jedem x-ten Generationsschritt ein und wählt rein subjektiv das Ergebnis, bei dem man denk es liegt der Lösung am nächsten. Ganz nach dem Motto "Jetzt nach mal irgendwas, ich sag dir dann schon noch ob's mir gefällt oder nicht.

 

Ein sehr schönes anschauliches Beispiel dafür ist die "Evolution of a spaceship"[4]. Das Programm basiert auf Delphi.NEAT, einer delphi basierten NEAT Implementation. Übrigens, es gibt auch eine in c# programmierte NEAT Umsetzung, genannt sharpNEAT[5].

 

Ich bin jedenfalls gespannt, was es in Zukunft alles für NEAT basierende Lösungen geben wird, da man das Prinzip ja nicht nur für Grafikgenerierung benutzen kann. Und wer weiß, vielleicht wird sich ja dadurch auch die heutige Art der Programmierung grundlegend ändern. Bei der NEAT basierenden Programmierung kümmert sich der Programmierer dann eben nicht mehr um die sprachspezifische Syntax, sauber dokumentierten Code oder die zu nutzenden Architekturen, sondern nur noch um das eigentliche Problem, wie beschreibt man es und was erwartet man. Lediglich um das UnitTesting (vermutlich dann BrainTesting genannt) wird man nicht herum kommen ;-)

[1] NEAT UserPage  http://www.cs.utexas.edu/users/kstanley/neat.html
[2] Dr. Kenneth O. Stanley, dem "Erfinder" von NEAT  http://www.cs.utexas.edu/users/kstanley/
[3] Genetic Art
http://www.cambrianlabs.com/mattias/GeneticArt/
[4] The Evolution of a Spaceship http://www.cs.utexas.edu/users/kstanley/rocket.html
[5] sharpNEAT
http://sharpneat.sourceforge.net//

Wednesday, November 16, 2005 11:30:35 AM (GMT Standard Time, UTC+00:00)  #    Comments [21]  | 
Sunday, November 06, 2005

There is it, a new demoscene magazin called "SCEEN - Magazine for digital Extravaganza". Really nice ... with informations about demoparties like Breakpoint, newly kind of arts like Machinimas, Interviews with geeks and many more. Additional there is a DVD with many demos, machinimas, musics, VJ Clips etc.

Sunday, November 06, 2005 3:48:07 PM (GMT Standard Time, UTC+00:00)  #    Comments [43]  | 
Tuesday, November 01, 2005

Realy nice ... a single file blog system for people who just want notice some informations for itself, but dont have the time to install an own blog/wiki.
Its like a personal web notepad ;-)

Check it out here

Tuesday, November 01, 2005 2:29:25 PM (GMT Standard Time, UTC+00:00)  #    Comments [47]  | 
Friday, September 23, 2005

If you have switched to the new Visual Studio 2005 and .NET Framework 2.0 ... and now you get errors like "Cross-thread operation not valid: Control 'Form1' accessed from a thread other than the thread it was created on." in your applications that was working fine before ...

then

A) you can oldschool like refactor the code to use the BeginInvoke method for multi threading.

B) you can newschool like use the new Backgroundworker class. (very nice)

C) or if you are lazy, just diable the messages with
System.Windows.Forms.Form.CheckForIllegalCrossThreadCalls = false;

;-)

Friday, September 23, 2005 1:12:35 AM (GMT Daylight Time, UTC+01:00)  #    Comments [33]  | 
Friday, September 16, 2005

Ich bin jetzt zufällig auf Lounge-Radio gestoßen, einem weiteren netten Online Radio Sender. Ich glaube er wird mich in Zukunft eine Weile begleiten. Das heisst aber nicht, das ich meinem jahrelangen Begleiter somafm untreu werde ;-) Reinhöhren lohnt sich immer.

Friday, September 16, 2005 10:05:01 AM (GMT Daylight Time, UTC+01:00)  #    Comments [83]  | 
Wednesday, August 10, 2005

Sicher kam der eine oder andere Programmierer schon einmal in die Situation durch ein Enum zu iterieren, um die Werte einfach nur irgendwo in der richtigen Reihenfolge anzuzeigen. Zum Beispiel:
     enum MyEnum{Montag, Dienstag, Mittwoch, Donnerstag, Freitag};

Nichts leichter als das, da gibt es ja die verschiedensten Möglichkeiten, z.B.:

A) Umständlich

     foreach (int item in MyEnum.GetValues(typeof(MyEnum))){
          MyEnum myEnum = (MyEnum)item;
          Console.WriteLine(myEnum + "," );
     }

bzw.
     foreach (object item in Enum.GetValues(typeof(MyEnum)))
          Console.WriteLine(item);


B) Lesbar

     for
(MyEnum day=MyEnum.Montag; day<=MyEnum.Freitag; day++)
            Console.WriteLine(day);


oder C) über die Enum.GetNames() Methode

     foreach (string item in Enum.GetNames(typeof(MyEnum)))
            Console.WriteLine(item + "," );

Gut und schön, das alles funktioniert leider nur solange korrekt, bis man den Werten eigene Integerwerte zuweist. Gerade Methode B) ist sehr anfällig auf Wert-Veränderungen.

Bereits bei einer kleinen Änderungen wie:
   enum MyEnum{Montag=-2, Dienstag, Mittwoch, Donnerstag, Freitag=-4};

liefert Methode B) aufgrund der angegebenen Bedingung nichts mehr zurück.
A) und C) sind da ein klein wenig resistenter und erzeugen folgenden sinnfreien Output: "Mittwoch, Donnerstag, Freitag, Montag, Dienstag"


Ok, noch ein Schritt weiter:
   enum MyEnum{Montag=0, Dienstag=-1, Mittwoch=4, Donnerstag=-2, Freitag};

Methode B) liefert auch hier nichts zurück.
Methode A) ergibt  "Montag, Mittwoch, Donnerstag, Dienstag, Dienstag"
Aber wo ist der Freitag?? Hier trennt sich die Spreu vom Weizen.
Lediglich Methode C) war so fair und hat sich den Freitag nicht einbehalten: -->
"Montag, Mittwoch, Donnerstag, Dienstag, Freitag", die Reihenfolge ist dennoch nicht erwünscht.

Ein letzter Versuch, am Freitag kommt noch eine 1 ran:
enum MyEnum{Montag=0, Dienstag=-1, Mittwoch=4, Donnerstag=-2, Freitag=1};

Methode B) zeigt nun wenigstens den Wochenstart: "Montag" und schluckt den Rest. A) und C) sind sich auch wieder einig mit "Montag, Freitag, Mittwoch, Donnerstag, Dienstag"


Nun gut, wer es bis hier her geschafft hat, bekommt nun ein Wissenbonus ;-)
Denn es gibt eine Möglichkeit die richtige Reihenfolge darzustellen. Und zwar mit Hilfe von Reflections, was so aussieht:

     Type type = typeof(MyEnum);
     System.Reflection.FieldInfo[] fis = type.GetFields();
     foreach(System.Reflection.FieldInfo fi in fis){
          if(fi.IsStatic)
               Console.WriteLine(fi.Name + "," );
     }

Ist  nicht wirklich lesbarer, aber funktioniert zumindest in allen obigen Fällen korrekt.

that's all folks

Wednesday, August 10, 2005 12:51:07 AM (GMT Daylight Time, UTC+01:00)  #    Comments [24]  | 
Thursday, June 09, 2005

  - "Kein Liebeslied" [koze remix], Andreas Dorau

Thursday, June 09, 2005 4:29:27 PM (GMT Daylight Time, UTC+01:00)  #    Comments [30]  | 
Monday, April 04, 2005

Einige .NET Entwickler werden die GetHashCode() Funktion kennen, ist sie doch meist (situationsbedingt) recht nützlich. Aber Achtung vor falscher Anwendung. Man könnte meinen, dass bei den großen Hash-Werten (Int32) auch genügend Spielraum für die Kombination (sprich Addition) der einzelnen Werte zur Verfügung steht.

Dies sollte man jedoch vermeiden. Ich habe erst neulich einige Zeit damit verbracht einen Bug zu finden, der daraus resultierte, weil

"2307".GetHashCode() + "IA0/7".GetHashCode() + "RBL-RRB2".GetHashCode()
und
"2305".GetHashCode() + "IA0/6".GetHashCode() + "RBL-RRB1".GetHashCode()

tatsächlich dieselbe Summe (2048949580) besitzen.

Also immer dran denken, niemals Hashwerte addieren, dann lieber alles als einen String interpretieren und diesen dann hashen. Denn "2307IA0/7RBL-RRB2".GetHashCode() ist nicht gleich "2305IA0/6RBL-RRB1".GetHashCode()

Monday, April 04, 2005 3:23:33 PM (GMT Daylight Time, UTC+01:00)  #    Comments [57]  | 
Monday, February 28, 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, February 28, 2005 11:27:58 PM (GMT Standard Time, UTC+00:00)  #    Comments [81]  | 
Tuesday, February 22, 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, February 22, 2005 11:19:45 PM (GMT Standard Time, UTC+00:00)  #    Comments [42]  | 
Thursday, February 17, 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, February 17, 2005 12:28:48 AM (GMT Standard Time, UTC+00:00)  #    Comments [85]  | 
Saturday, February 05, 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, February 05, 2005 2:02:40 AM (GMT Standard Time, UTC+00:00)  #    Comments [64]  | 
Tuesday, February 01, 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, February 01, 2005 11:45:14 PM (GMT Standard Time, UTC+00:00)  #    Comments [43]  | 
Wednesday, October 13, 2004

 

This is a Spider

 

This is a normal spiderweb. Constant, stable and looks good.

 

This is Coffee

 

What happens if the Spider get coffee?
His web is unstable, unsecure and looks terrible.

And because i don’t want that my code looks like this, i don’t drink coffee ;-)

more “Spider on drugs” pics:

http://www.missblackwidow.com/drugs.html

 

Wednesday, October 13, 2004 6:57:33 PM (GMT Daylight Time, UTC+01:00)  #    Comments [32]  | 
Thursday, May 13, 2004

Einige kennen vielleicht folgendes Scenario. Man hat in seiner VS Solution ein WebProjekt mit einer Installer-Klasse und ein WebSetup-Projekt. Das Setup-Projekt wird mit Hilfe benutzerdefinierter Aktionen (custom actions) erweitert. Z.B. damit der Benutzer während der Installation diverse Daten angeben kann. In der Installer Klasse wird daraufhin die Install-Methode Überschrieben, um die eingegebenen Daten dort zu verarbeiten.

Das sieht in etwa so aus:

1. [RunInstaller(true)]
2. public class Installer1 : System.Configuration.Install.Installer{
3.    public override void Install(IDictionary stateSaver) {
4.        string serverName = this.Context.Parameters["ServerName"];
5.        // hier irgendwas mit den Parametern machen. 
6.        base.Install (stateSaver);
7.    }
8. }


Dann wird die Setup.exe generiert und ausgeführt. Doch wie kann ich nun meinen Code zur Laufzeit debuggen?
Man muss dazu folgende Dinge beachten:

1) Der Debugmodus des Web-Projektes muss in den Zustand: "Wartet auf das Anhängen an einen externen Prozess" gebracht werden.

 

2) Der Debugger funktioniert nur, wenn vorher ein managed Code aufgerufen wurde. Zusätzlich sollte während der Installation Zeit bleiben den Debugger zu aktivieren. Daher ist es am besten, wenn man eine Messagebox in der InstallMethode aufruft. Also einfach zwischen Zeile 3 und 4 ein MessageBox.Show("DebugMe"); eintragen.

3) Wenn dann während der Installation die MessageBox erscheint, kann in aller Ruhe dem Debugger der Installationsprozess übergeben werden. Das geht über das Menu "Debuggen" --> "Prozesse". In der dortigen Liste sucht man sich den richtigen InstallProzess (msiexec.exe) heraus. Aufpassen, daß man auch den richtigen erwischt, denn unglücklicherweise ist es nicht der, in dem der Titel erscheint, sondern der vom Typ .Net.

 

Wenn alles geklappt hat, kann man nun den eigenen Code debuggen. Ach nochwas, der BreakPoint muss hinter die MessageBox.Show() Methode gesetzt werden ;-)

thats was it.

Thursday, May 13, 2004 8:00:47 PM (GMT Daylight Time, UTC+01:00)  #    Comments [24]  | 

Unter der Rubrik "Toolz die die Welt nicht braucht" (tddwnb) stelle ich heute ein besonders nichtsnutziges vor. Einen BlogReader in 3D, d.h. Rss Feeds im 3-Dimensionalen Raum lesen, ggf. die Blickrichtung ändern, zoomen etc. Klar, es macht nicht wirklich Sinn (muss denn alles im Leben einen Sinn ergeben?), aber ich wollte mal wieder  etwas mit managed DirectX machen.

Ich kann zum Thema übrigens das Buch "Managed DirectX - Graphics and Games programming" sehr empfehlen.

Leider ist aus der "kleinen" Idee ein recht aufwändiges unterfangen geworden. Daher ist das Tool noch nicht Final und kleinere Bugs in der Darstellung sind noch enthalten. Aber das sollte nicht weiter stören. Wer möchte darf es trotzdem ausprobieren und bisschen rumspielen.

 

Hier gibts die kleine version (managed DX SDK muss installiert sein)
Hier gibts die Version incl. der benötigten DX-dll's (ca.1 MB)

Thursday, May 13, 2004 12:43:09 PM (GMT Daylight Time, UTC+01:00)  #    Comments [63]  | 
Wednesday, April 21, 2004

Was ist das? Die sogennante "Superformel" ist eine relativ einfache Formel, die, mit 5 netten Parametern bestückt, recht ansehnliche "natürliche" Objekte hervorzaubern kann.
So etwas zum Beispiel:

 

Wie sieht die Formel aus? So:

Bereits 1997 entwickelt, und selbst damals eigentlich nichts neues (Naturbeschreibende Formeln gibt es schon seit etlichen Jahrfünfzigern), wurde sie auf der diesjährigen CeBit erneut vorgestellt. Der Entwickler (Johan Gielis) gründete mit einigen Mathematikern die Firma Genicap und entwickelt nun darauf aufbauende Tools.

Ein interessanter Anlaufpunkt zum Thema ist Paul Bourke's Site, auf der es auch weitere Bilder gibt.

Ich habe mich jedenfall da mal rangesetzt und qnd (quickndirty) eine WindowsApp dahingecoded, die diese Formel nutzt. Einfach an paar Parameterreglern schieben und sich freuen, was für Figuren rauskommen ;-)

Hier Bitte ... zum spielen und testen freigegeben. Damit es läuft, benötigt man DirectX9, mein DirectXManager (in der Zip enthalten) und natürlich das .Net FW.

... ok, ist nicht die schönste App., auch nur in 2D, aber auf die schnelle war nicht mehr drin. Ich hatte mich bereits dem 3D Part gewidmet (Axiom hat da eine nette 3D Engine für .Net entwickelt), allerdings fehlt mir die Zeit, mich damit intensiv zu beschäftigen.

Viel Spass

Wednesday, April 21, 2004 10:10:04 AM (GMT Daylight Time, UTC+01:00)  #    Comments [229]  | 
Saturday, April 17, 2004

Per Default ist in Whidey ein eigener (schneller) "Visual Web Developer Web Server" integriert. Dies hat den Vorteil, daß man auch dort entwickeln kann, wo kein IIS vorhanden ist und man muss sich nicht mit virtuellen Verzeichnissen rumschlagen.

Doch was ist, wenn man seine Applikation fertig entwickelt hat und es anderen online zugänglich machen möchte? Dazu muss man folgende Dinge tun:

1) "aspnet_regiis.exe –i" aufrufen, um dem IIS das neue Framework bekannt zu machen
2) Im IIS ein virtuelles Verzeichnis mit Verweis auf das Projekt anlegen
3) Der WebApplikation die richtige Frameworkversion zuweisen. Siehe Bild.

Das sollte es gewesen sein, ggf. muss man noch die Web.config anpassen.

Saturday, April 17, 2004 4:05:55 AM (GMT Daylight Time, UTC+01:00)  #    Comments [25]  | 
Thursday, April 15, 2004

... wenn du ein typisiertes Dateset aus einer XSD generiert hast und möchtest das XML-Outputformat etwas umstrukturieren (aus Elementen werden Attribute etc.), geht das mit der ColumnMapping Eigenschaft. (müsste bei allen Datasets klappen)

Bsp. Person.Content.GuidColumn.ColumnMapping = MappingType.Attribute;
Dabei ist Person das typisierte DS (generiert aus  der Person.xsd), Content eine DataTable und GuidColumn eine Spalte der Table.

Ineinander verschieben der einzelnen Datatables geht übrigens mit SetParentRow();

Thursday, April 15, 2004 4:22:15 PM (GMT Daylight Time, UTC+01:00)  #    Comments [25]  | 
Friday, March 19, 2004

Endlich, nach wochenlangem exteme-coding ist die Hauptarbeit für Codezone geschafft. Codezone ist das "Developer Knowledge Network rund um Microsoft Technologien von Entwicklern für Entwickler", oder ganz kurz DKNRUMTVEFE. Eine Meta-Informations Plattform, mit der man schnell und gezielt Informationen zu bestimmen MS-spezifischen Themen findet.

Am Sonntag, dem 21. März 2004 wird die Plattform offiziell auf der CeBit von MS gelauncht, mit allem Tribabo was dazu gehört ... einem Gewinnspiel, tolle Fleyer, viel heisse Luft (nicht nur für Luftballons) und Bunnys (hoff ich doch ;-)). Mal schauen, wie es beim Entwicklervolk ankommen wird. Fast 6000 Inhalte gibt es bereits und nun seid ihr da draussen gefragt. Join the codezone and lets grow.

Friday, March 19, 2004 11:22:23 PM (GMT Standard Time, UTC+00:00)  #    Comments [86]  | 
Tuesday, March 02, 2004

... ja was ist das denn nun wieder? Orkut ist ein WebPortal, in dem man (s)ein "Social Network" aubauen kann, d.h. man lernt dort neue, vielleicht auch nette Leute kennen, tritt in Communitys ein, gibt wo es geht sein Senf dazu und hat "Spass" (was auch immer das heisst).

"Sehen und gesehen werden" ist das Motto, Freunde als Massenware, je mehr Punkte, desto wichtiger. Hat man erst durch Freunde paar Testemonials bekommen, ein paar schicke private Bilder geuppt und genug von sich Preis gegeben, schon schindet man Eindruck und gewinnt neue Freunde ... Teufelskreis.

Zurzeit befindet sich Orkut noch im Betastadium, hat allerdings schon über 77830 User Weltweit. Der Name stammt übrigens von dem Entwickler (Orkut Buyukkokten). Ich bin gespannt, was sich daraus entwickelt. Der wirkliche Sinn dahinter ist mir zwar noch verborgen geblieben, aber dabei sein ist ja bekanntlich alles.

Klingt Interessant? Dann guckst du hier. Doch leider kommst du da net rein, man kann ja nur von Freunden invited werden. Wer gerne möchte ... ich lade ganz unverbindlich ein ;-)

Tuesday, March 02, 2004 1:01:45 AM (GMT Standard Time, UTC+00:00)  #    Comments [51]  | 

findet man auf der schweizer Codezone Seite. Jeden Monat gibt es dort ein 15 minütigen Webcast zu einem Thema rund um Visual Studio.Net. Reinschauen lohnt sich.

Tuesday, March 02, 2004 12:31:38 AM (GMT Standard Time, UTC+00:00)  #    Comments [86]  | 

Da ich Softwareentwickler im MS-Umfeld bin und sehnsüchtig auf Whidbey warte, bin ich für alle Informationen dankbar. Um so erfreuter war ich, als die neuen MSDNTV-Folgen sich der Entwicklung unter Whidbey widmeten. Für alle Fans ... anschauen.

- IDE Enhancements for C# Developers vom 20 Feb.2004
- Thema Whitehorse, vom 29. Jan, 2004

- MSDN TV Archiv (für alle anderen Folgen, die natürlich auch interessant sind)
- MSDN Webcasts (zum Teil schlechte Qualität, aber dafür Info aus erster Hand)

Tuesday, March 02, 2004 12:25:07 AM (GMT Standard Time, UTC+00:00)  #    Comments [31]  | 

So, Dank Damir Tomicic hat auch mich nun das Blog-Fieber erwischt. Bisher habe ich mich erfolgreich mit dem gedanklichen Hintergrund "Was soll das? Warum ich? Wer will das lesen?" dagegen gewährt. Obwohl die Fragen noch immer unabeantwortet sind, konnte ich nicht anders. Dabei sein ist alles oder?

Und nachdem Newtelligence eine so hervoragende Blog-Plattform kostenlos zur Vergügung stellt, war es nur eine Frage der Zeit. Downloaden, installieren, loslegen. So einfach sollte es immer sein.

Okay, es läuft, aber was nun damit anstellen? In erster Linie wird es MIR als Gedächtnisstütze für alles mögliche dienen. Ich bin sehr vergesslich, vielleicht hilft es mir etwas zu behalten, wenn ich es aufschreibe ...

Tuesday, March 02, 2004 12:00:06 AM (GMT Standard Time, UTC+00:00)  #    Comments [70]  | 

Theme design by Jelle Druyts

Pick a theme: