« May 2004 | Main | July 2004 »

June 23, 2004

Build.Net Release 0.6.2.30848

There is a new Build.Net release which not only supports the building of VS.NET csproj files, but vbproj files also.

June 17, 2004 Release: Build.Net MSI Installer (0.6.2.30848)

Build.Net is run from the command line. It recursively searches a directory for VS.NET project files to build. This directory to be searched is passed in via the '-find' parameter. Any *.csproj OR *.vbproj that is found is parsed into an object model and added to the build list. Any *pattern* in the -findexclude parameter will NOT be built. Build.Net will attempt to build any dependcies that does not already exist in the output directory. The dependency is *hopefully* in the build list. Your project files should all have the same
output directory (OutputPath).

Posted by 0xFF3300 at 10:05 PM | Comments (0) | TrackBack

June 19, 2004

How to Encode Audio...

Think you know how to encode your favorite audio? Read this.

Posted by 0xFF3300 at 10:05 PM | Comments (0) | TrackBack

June 17, 2004

Logging? Think Twice...

This is an experiment in the somewhat obvious, but to see how big of problem it can be, let's take a much closer look at a very common and basic feature of most software, logging. When performing smaller functions or operations consider the verbosity and quantity when it comes to logging information. The example below performs some 10,000 Math operations and logs the each result to the log file. As you can see the amount of time between the start and finish is greater than 12 seconds.

06_08 11:53:12.6875 2152  INFO === Log Start ===
06_08 11:53:12.6875 2152  INFO     Test 2.71828182845905
06_08 11:53:12.7031 2152  INFO     Test INDEX=0
... Performing Work AND Logging ...
06_08 11:53:24.6250 2152  INFO     Test Infinity
06_08 11:53:24.6250 2152  INFO     Test INDEX=8750
06_08 11:53:24.6250 2152  INFO === Log End ===

When performing the exact same 10,000 Math operations and only writing the first result, to record a start time, the result of course is dramatically different. The time difference is slighly more than 250ms.

06_08 11:53:43.8437  376  INFO === Log Start ===
06_08 11:53:43.8437  376  INFO     Test 2.71828182845905
06_08 11:53:43.8437  376  INFO     Test INDEX=0
... Performing Work AND *NO* Logging ...
06_08 11:53:43.8750  376  INFO === Log End ===

The moral of the story is log only what you need to. Logging IO can actually be quite expensive. These tests were performed with .NET 1.1 Framework.


Posted by 0xFF3300 at 11:56 AM | Comments (3) | TrackBack

June 14, 2004

Reverse Engineering To Learn .NET Better

Read Brian Long's article here.

Posted by 0xFF3300 at 08:29 PM | TrackBack

June 08, 2004

Reflector.Graph Released

Jonathan de Halleux has made available a 1.0 release of his Reflector.Graph tool, a plugin for Lutz Roeder's Reflector utility, which (as its name implies) provides some graphical views of call flows and such within .NET assemblies.

It consists (at the moment) of three parts:

  • An IL grapher, showing in graphical form the flow of the code within a given method
  • An Assembly grapher, showing the dependency tree between assemblies loaded in Reflector
  • A Method Rank tool, an attempt to utilize the Google PageRank algorithm ("important pages are reference by other important pages") to find the important methods ("important methods are called by other important methods") in assemblies.

    Download it here.

    Posted by 0xFF3300 at 08:26 PM | Comments (0) | TrackBack

    June 04, 2004

    Reflector for .NET

    One of the nicer Assembly class browsers, Reflector for .NET.

    "Reflector is a class browser for .NET components. It supports assembly and namespace views, type and member search, C# XML documentation viewer, call and callee graphs, IL, VB and C# disassembler, dependency trees, base type and derived type hierarchies and resource viewers. C#, Visual Basic and Delphi language syntax is supported."

    Posted by 0xFF3300 at 08:38 PM | Comments (2) | TrackBack

    June 03, 2004

    Mono on FreeBSD, not for the Faint Hearted

    Well, folks we have come a long way, Mono is becoming more stable as it approaches the final release. Beta 2 has been released, but due to the recent resignation of the FreeBSD Mono port maintainer, I'm not really sure when I will get ahold of it. I can honestly say I understand his frustration and could see where he is coming from. If we take a look at the log entries for the FreeBSD Mono port it, I think it shares it's own diary of 'progress'. Let's face this it a huge piece of software that will have problems and still need a lot of help. It's challenging, and sometimes rewarding when you have the time. Otherwise I may just have to wait. Marcus, thank you for all your work and dedication, it wasn't easy!
    Resign maintainership to ports@.  gnome@ hasn't been that active in maintaining
    this, and there are some non-trivial GC problems to overcome.  Hopefully
    someone will step up with a passion for .NET.
    

    Chase the glib20 update, and bump all affected ports' PORTREVISIONs.
    

    Whoa there, boy, that's a mighty big commit y'all have there...
    
    Begin autotools sanitization sequence by requiring ports to explicitly
    specify which version of {libtool,autoconf,automake} they need, erasing
    the concept of a "system default".
    
    For ports-in-waiting:
    
    	USE_LIBTOOL=YES		->	USE_LIBTOOL_VER=13
    	USE_AUTOCONF=YES	->	USE_AUTOCONF_VER=213
    	USE_AUTOMAKE=YES	->	USE_AUTOMAKE_VER=14
    
    Ports attempting to use the old style system after June 1st 2004 will be
    sorely disappointed.
    

    Posted by 0xFF3300 at 09:06 PM | Comments (0) | TrackBack

    June 02, 2004

    Software Factories

    First off my response to Microsoft's 'Software Factories':

    That's a good idea. The concept of giving someone patterns, frameworks, models and tools to create software is nothing new, Sun was very successful at it in the late 90s. Now Microsoft is selling the GoF spin-off patterns to it's own developer community; I must congratulate them because it's about time. Now I can communicate with other fellow .NET developers without them looking so puzzled when I mention basic software development patterns. They just go "yeah, Microsoft just came out with that this year".

    The original article is here.

    Read more here:
    http://www.softwarefactories.com/

    Posted by 0xFF3300 at 07:29 PM | Comments (1) | TrackBack

    June 01, 2004

    AsyncDelegate VS ThreadPool

    There has been some debate about which Threading methodolgy to use when it comes to multi-threaded asynchronous applications. You could use the .NET ThreadPool or maybe use Delegates. It is really a matter of keeping track of threads and coding style.


    One thing to keep in mind is wether you use Asynchronous Delegates or the System.Threading.ThreadPool class you are still:


    1. Relying on the internal .NET Thread Pool.
    2. Using the BeginInvoke and EndInvoke methods, here the WaitCallback object of QueueUserWorkItem has it's own calls:

      1. public virtual IAsyncResult BeginInvoke(object state, AsyncCallback callback, object object);
      2. public virtual void EndInvoke(IAsyncResult result);

    3. Using Delegates.

    The advantage I see with ThreadPool is basically less coding required. The disadvantage becomes apparent when your application begins to take on some load, also less flexibilty when it comes to the size of the ThreadPool. I am not completely sure about this, but I believe the System.Threading.ThreadPool is capped off at 25 threads. Changing this from the .NET runtime is nearly impossible. Of note, Stephen Toub of Microsoft has created ManagedThreadPool to mainly combat the TheadPool size limit and other limitations ThreadPool. It's rumored that ManagedThreadPool will [0] be included in the .NET Framework 1.2.30506.

    QueueUserWorkItem Source: public static bool QueueUserWorkItem(WaitCallback callBack, object state) { StackCrawlMark mark1 = StackCrawlMark.LookForMyCaller; return ThreadPool.QueueUserWorkItem(callBack, state, ref mark1, true); } public static bool QueueUserWorkItem(WaitCallback callBack) { StackCrawlMark mark1 = StackCrawlMark.LookForMyCaller; return ThreadPool.QueueUserWorkItem(callBack, null, ref mark1, true); }

    References:

    TO BE CONTINUED...

    Posted by 0xFF3300 at 09:17 PM | Comments (0) | TrackBack

    Mono 0.30.1.1 on FreeBSD

    I am currently testing the Mono 0.31.1 port on FreeBSD 4.61. So far no installation problems; we'll see if I can get the XSP server up and running.

    Posted by 0xFF3300 at 07:16 AM | Comments (0) | TrackBack