« 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:
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:
- Relying on the internal .NET Thread Pool.
- Using the BeginInvoke and EndInvoke methods, here the WaitCallback object of QueueUserWorkItem has it's own calls:
- public virtual IAsyncResult BeginInvoke(object state, AsyncCallback callback, object object);
- public virtual void EndInvoke(IAsyncResult result);
- public virtual IAsyncResult BeginInvoke(object state, AsyncCallback callback, object object);
- 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