<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5966491</id><updated>2011-04-21T20:35:02.294+02:00</updated><title type='text'>Ernst Kuschke</title><subtitle type='html'>Arbitrary thoughts and musings on life, the universe and everything outside of that</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ernstkuschke.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ernstkuschke.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Ernst</name><uri>http://www.blogger.com/profile/01181087493431018010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>30</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5966491.post-107581474699291001</id><published>2004-02-03T15:25:00.000+02:00</published><updated>2004-02-03T15:30:35.653+02:00</updated><title type='text'>meetup</title><content type='html'>&lt;P /&gt;&lt;iframe src="http://longhorn.meetup.com/frame/headline.jsp?css=/inc/frame.css&amp;break=1&amp;limit=5&amp;target=_blank" frameborder="1" scrolling="no" width="245" height = "100"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;find out more at &lt;a href="http://longhorn.meetup.com"&gt;longhorn.meetup.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5966491-107581474699291001?l=ernstkuschke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/107581474699291001'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/107581474699291001'/><link rel='alternate' type='text/html' href='http://ernstkuschke.blogspot.com/2004_02_01_archive.html#107581474699291001' title='meetup'/><author><name>Ernst</name><uri>http://www.blogger.com/profile/01181087493431018010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5966491.post-107486056460785682</id><published>2004-01-23T14:22:00.000+02:00</published><updated>2004-01-23T14:27:40.733+02:00</updated><title type='text'>new blog</title><content type='html'>I've started a newer, fresher, better blog - &lt;a target="_blank" href="http://dotnet.org.za/ernst"&gt;head over there&lt;/a&gt; now! Oh, it's also crispier and more fragrant.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5966491-107486056460785682?l=ernstkuschke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/107486056460785682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/107486056460785682'/><link rel='alternate' type='text/html' href='http://ernstkuschke.blogspot.com/2004_01_18_archive.html#107486056460785682' title='new blog'/><author><name>Ernst</name><uri>http://www.blogger.com/profile/01181087493431018010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5966491.post-107475476078807164</id><published>2004-01-22T08:59:00.000+02:00</published><updated>2004-01-22T10:23:02.856+02:00</updated><title type='text'>user authentication</title><content type='html'>Ever so often I get totally baffled, surprised, and even emotional when I see the way some developers authenticate users in their ASP sites.&lt;br /&gt;Last week I spoke to a guy who wrote static methods to encrypt and decrypt credentials, as well as classes to do the validation and authentication for the site. I guess this all carries over from days before .NET (can you imagine that?!) where this had to be done often enough. With the lovely .NET foundation beneath you, it's so easy to use the built-in methods provided. Here's how you authenticate using ASP.NET's "Forms Authentication Mode" and encrypted user credentials in a database.&lt;br /&gt;&lt;br /&gt;Authenticated users are issued with a cookie. Unauthenticated users are redirected via client-side HTTP to an authentication-form, where the cookie is issued. Authentication can happen in any way the developer finds fit. I find using the built-in .NET support for MD5 encryption suffices.&lt;br /&gt;&lt;br /&gt;Let's set it up. First, in your &lt;B&gt;web.config&lt;/B&gt; file, set your authentication-mode:&lt;br /&gt;&lt;br /&gt;&amp;lt;&lt;font color=#660000;&gt;authentication&lt;/font&gt; &lt;font color=#FF0000;&gt;mode&lt;/font&gt;="Forms"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;font color=#660000;&gt;forms&lt;/font&gt; &lt;font color=#FF0000;&gt;name&lt;/font&gt;=".ASPXAUTH" &lt;font color=#FF0000;&gt;protection&lt;/font&gt;="All" &lt;font color=#FF0000;&gt;timeout&lt;/font&gt;="60" &lt;font color=#FF0000;&gt;loginUrl&lt;/font&gt;="Login.aspx" /&amp;gt;&lt;br /&gt;&amp;lt;/&lt;font color=#660000;&gt;authentication&lt;/font&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;This would redirect the client to a page named Login.aspx if the user is not authenticated. Once authenticated, a cookie named .ASPXAUTH will be issued to the user, who will hence be authenticated on all other pages.&lt;br /&gt;&lt;br /&gt;Create a simple login-page named Login.aspx, and do the following in the click-event for your 'submit' button in code-behind:&lt;br /&gt;&lt;br /&gt;&lt;font color=#0000ff&gt;private&lt;/font&gt; &lt;font color=#0000ff&gt;void&lt;/font&gt; cmdSubmit_ServerClick(&lt;font color=#0000ff&gt;object&lt;/font&gt; sender, System.EventArgs e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataSet ds = &lt;font color=#0000ff&gt;new&lt;/font&gt; DataSet();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#008A24;&gt;//I'm leaving the exercise of building a dataset containing usernames &amp;amp; (encrypted) passwords&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#008A24&gt;//to the reader.&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String cmd = "username='" + txtUsername.Text + "'";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataTable users = ds.Tables[0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataRow[] matches = users.Select(cmd);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;if&lt;/font&gt; (matches != &lt;font color=#0000ff&gt;null&lt;/font&gt; &amp;amp;&amp;amp; matches.Length &amp;gt; 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataRow row = matches[0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;string&lt;/font&gt; hashedpwd = &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FormsAuthentication.HashPasswordForStoringInConfigFile(txtPassword.Text, "MD5");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String pass = (String)row["password"];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;if&lt;/font&gt;(0 != String.Compare(pass, hashedpwd, &lt;font color=#0000ff&gt;false&lt;/font&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result.InnerHtml = "Invalid Credentials: Please try again.";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;else&lt;/font&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FormsAuthentication.RedirectFromLoginPage(txtUsername.Text, &lt;font color=#0000ff&gt;true&lt;/font&gt;);                                  &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;else&lt;/font&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result.InnerHtml = "Invalid Credentials: Please try again.";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Notice the use of the &lt;B&gt;HashPasswordForStoringInConfigFile&lt;/B&gt;-method. I chose the MD5 encryption algorythm here, but the method also accepts "SHA1" as a parameter.  No need for customized encryption classes!&lt;br /&gt;&lt;br /&gt;To validate user-authentication on pages in your app, do the following in the Page_Load events:&lt;br /&gt;&lt;br /&gt;&lt;font color=#0000ff&gt;private void&lt;/font&gt; Page_Load(&lt;font color=#0000ff&gt;object&lt;/font&gt; sender, System.EventArgs e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;if&lt;/font&gt;(!User.Identity.IsAuthenticated)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Response.Redirect("login.aspx");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Once a client hits any page in your app, validation will fail, and redirection to your login-page will occur. After authentication, the user will be redirected to the originally requested page.&lt;br /&gt;&lt;br /&gt;More info on Forms Authentication methods is available &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconaspnetauthentication.asp" target="_blank"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5966491-107475476078807164?l=ernstkuschke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/107475476078807164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/107475476078807164'/><link rel='alternate' type='text/html' href='http://ernstkuschke.blogspot.com/2004_01_18_archive.html#107475476078807164' title='user authentication'/><author><name>Ernst</name><uri>http://www.blogger.com/profile/01181087493431018010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5966491.post-107363792572462751</id><published>2004-01-09T10:45:00.000+02:00</published><updated>2004-01-12T10:19:14.160+02:00</updated><title type='text'>back in the swing</title><content type='html'>The holidays were totally, unexpectedly wicked. None of my plans worked out, but the time off was excrutiatingly relaxing nonetheless :) There came a point where we could literally cut the relaxation with a knife. I decided that 2004 will ROCK. May it do the same for you guys reading this!&lt;br /&gt;&lt;br /&gt;&lt;img align="center" src="http://www.geocities.com/ehk7/g_e.jpg" border="0" width="500" height="375" alt="My bro &amp; me" align=center&gt;&lt;br /&gt;Pic taken of me (on the left) and my younger, but not smaller, brother during the holidays.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5966491-107363792572462751?l=ernstkuschke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/107363792572462751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/107363792572462751'/><link rel='alternate' type='text/html' href='http://ernstkuschke.blogspot.com/2004_01_04_archive.html#107363792572462751' title='back in the swing'/><author><name>Ernst</name><uri>http://www.blogger.com/profile/01181087493431018010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5966491.post-107123695258886687</id><published>2003-12-12T15:49:00.000+02:00</published><updated>2003-12-12T15:49:25.130+02:00</updated><title type='text'>last day in the office</title><content type='html'>A long awaited holiday starts as soon as I leave the office today!!!&lt;br /&gt;Getting away from the office would enable me to do some *serious* relaxation, but more importantly (possibly more exciting): I'll have more time for private venturing :) whatever the heck that might be...&lt;br /&gt;&lt;br /&gt;I'm developing my first large-scale ASP.NET based site, which should be live in January if all goes well. I'm using mySQL on the backend, and I'm quite worried about that part of it. I've heard many doomsday prophecies about it, but then I say there's only one way to find out. (Testing does not yield any problems so far).&lt;br /&gt;&lt;br /&gt;Yeehah. I'm outta here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5966491-107123695258886687?l=ernstkuschke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/107123695258886687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/107123695258886687'/><link rel='alternate' type='text/html' href='http://ernstkuschke.blogspot.com/2003_12_07_archive.html#107123695258886687' title='last day in the office'/><author><name>Ernst</name><uri>http://www.blogger.com/profile/01181087493431018010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5966491.post-107088160665952783</id><published>2003-12-08T13:06:00.000+02:00</published><updated>2003-12-08T16:22:30.353+02:00</updated><title type='text'>dynamic enums</title><content type='html'>Like most people in the software industry, I have these (amongst a gazillion others) few simple requirements:&lt;br /&gt;&lt;br /&gt;1)&amp;nbsp;&amp;nbsp;I want developers' code to be as readable as possible. (!)&lt;br /&gt;2)&amp;nbsp;&amp;nbsp;I want to simplify the task of writing code as much as possible&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(In this case, by using intellisense)&lt;br /&gt;3)&amp;nbsp;&amp;nbsp;I like the idea of increased control over what's available to developers, as this increases the degree to which code adheres to an internal standard.&lt;br /&gt;&lt;br /&gt;I came up with the far-fetched idea of having a table in a database where values can be set, specifying certain enums available to developers. &lt;br /&gt;&lt;br /&gt;Let me provide a simple example:&lt;br /&gt;Suppose a base class for users of an app (let's call this class 'User') has one public property called 'AuthorityLevel', which contains an integer-value to denote a user's level of authority. A user with level 3 will have access to admin-functions, whereas a user with level 2 will only be able to print certain reports, for instance. Don't look too much into this class - it's purpose is to merely serve as an example!&lt;br /&gt;&lt;br /&gt;The following enum will provide you with what you need:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public enum AuthorityLevel {Minion = 1, Worker, Manager}&lt;br /&gt;&lt;br /&gt;Once it's hard-coded, however, there's no easy way of changing it. It would be nice to be able to change the values or descriptions in this enum, knowing that developers will write code against whatever you specified. &lt;br /&gt;I thought of this solution last week: The enums you want your developers to use should reside in a seperate DLL, to be referenced at design-time. As soon as this DLL changes, new descriptions will be available and used in subsequent code.&lt;br /&gt;&lt;br /&gt;Let's take our example. If I create a table in a database as follows:&lt;br /&gt;&lt;br /&gt;table AuthorityLevel:&lt;br /&gt;VAL   DESCRIPTION&lt;br /&gt;1       Minion &lt;br /&gt;2       Worker&lt;br /&gt;3       Manager&lt;br /&gt;&lt;br /&gt;I can dynamically generate a DLL with the described enum. As soon as I change any of the DB-values, my DLL would need to be regenerated. It's easy to write a simple .exe (shown below) that gets called whenever any of these values change. This .exe will use Reflection.Emit to create and compile the DLL containing the needed enums.&lt;br /&gt;&lt;br /&gt;The C# source for the .exe would look something like this:&lt;br /&gt;&lt;br /&gt;&lt;font color=#0000ff&gt;using&lt;/font&gt; System;&lt;br /&gt;&lt;font color=#0000ff&gt;using&lt;/font&gt; System.Collections;&lt;br /&gt;&lt;font color=#0000ff&gt;using&lt;/font&gt; System.Threading;&lt;br /&gt;&lt;font color=#0000ff&gt;using&lt;/font&gt; System.Reflection;&lt;br /&gt;&lt;font color=#0000ff&gt;using&lt;/font&gt; System.Reflection.Emit;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color=#0000ff&gt;namespace&lt;/font&gt; Ernst.Test&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;public&lt;/font&gt; &lt;font color=#0000ff&gt;class&lt;/font&gt; EnumBuilder&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;static&lt;/font&gt; AssemblyBuilder myAssemblyBuilder;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;static&lt;/font&gt; ModuleBuilder myModuleBuilder;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;static&lt;/font&gt; EnumBuilder myEnumBuilder;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;public&lt;/font&gt; &lt;font color=#0000ff&gt;static&lt;/font&gt; &lt;font color=#0000ff&gt;void&lt;/font&gt; BuildEnum()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;try&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CreateEnums(Thread.GetDomain(), AssemblyBuilderAccess.Save);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Type[] myTypeArray = myModuleBuilder.GetTypes();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;foreach&lt;/font&gt;(Type myType &lt;font color=#0000ff&gt;in&lt;/font&gt; myTypeArray)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;font color=#000000&gt;"Enum Builder defined in the module builder is: "&lt;/font&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+ myType.Name);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;font color=#000000&gt;"Enum TypeToken is :"&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+ myEnumBuilder.TypeToken.ToString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;font color=#000000&gt;"Enum UnderLyingField is :"&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+ myEnumBuilder.UnderlyingField.ToString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;font color=#000000&gt;"Enum UnderLyingSystemType is :"&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+ myEnumBuilder.UnderlyingSystemType.ToString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;font color=#000000&gt;"Enum GUID is :"&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+ myEnumBuilder.GUID.ToString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myAssemblyBuilder.Save(&lt;font color=#000000&gt;"EmittedAssembly.dll"&lt;/font&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;catch&lt;/font&gt;(NotSupportedException ex)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;font color=#000000&gt;"The following is the exception is raised: "&lt;/font&gt; + ex.Message);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;catch&lt;/font&gt;(Exception e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;font color=#000000&gt;"The following is the exception raised: "&lt;/font&gt; + e.Message);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;private&lt;/font&gt; &lt;font color=#0000ff&gt;static&lt;/font&gt; &lt;font color=#0000ff&gt;void&lt;/font&gt; CreateEnums(AppDomain myAppDomain, AssemblyBuilderAccess access)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#008A24&gt;// Create a name for the assembly.&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AssemblyName myAssemblyName = &lt;font color=#0000ff&gt;new&lt;/font&gt; AssemblyName();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myAssemblyName.Name = &lt;font color=#000000&gt;"DBEnums"&lt;/font&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#008A24&gt;// Create the dynamic assembly.&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myAssemblyBuilder = myAppDomain.DefineDynamicAssembly(myAssemblyName, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AssemblyBuilderAccess.Save);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#008A24&gt;// Create a dynamic module.&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myModuleBuilder = myAssemblyBuilder.DefineDynamicModule(&lt;font color=#000000&gt;"DBEnums"&lt;/font&gt;, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#000000&gt;"DBEnums.mod"&lt;/font&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#008A24&gt;// Create a dynamic Enum.&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myEnumBuilder = myModuleBuilder.DefineEnum((&lt;font color=#0000ff&gt;string&lt;/font&gt;)GetNameSpace(),  &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TypeAttributes.Public, &lt;font color=#0000ff&gt;typeof&lt;/font&gt;(Int32));&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;string&lt;/font&gt;[] Fields = GetFields();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;int&lt;/font&gt; index = &lt;font color=#000000&gt;1&lt;/font&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;foreach&lt;/font&gt; (&lt;font color=#0000ff&gt;string&lt;/font&gt; field in Fields)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FieldBuilder myFieldBuilder = myEnumBuilder.DefineLiteral(field, index++);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myEnumBuilder.CreateType();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;private&lt;/font&gt; &lt;font color=#0000ff&gt;static&lt;/font&gt; &lt;font color=#0000ff&gt;string&lt;/font&gt; GetNameSpace()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#008A24&gt;//There's obviously a better way to name your enum,&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#008A24&gt;//for instance retrieving it from your DB&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;return&lt;/font&gt; &lt;font color=#000000&gt;"Ernst.Test.DBEnums"&lt;/font&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#0000ff&gt;private&lt;/font&gt; &lt;font color=#0000ff&gt;string&lt;/font&gt;[] GetFields()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=#008A24&gt;//Code to connect to DB and retrieve enum-values, return as string-array&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Note that the code above assumes that your enum will be of type Int32. This is easy to change by hard-coding, or even by specifying a type in your database-values. You can even decide on a type based on the datatype of the SQL column.&lt;br /&gt;&lt;br /&gt;I have tried to foresee compatibility issues regarding this process, and will keep you posted on my findings.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5966491-107088160665952783?l=ernstkuschke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/107088160665952783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/107088160665952783'/><link rel='alternate' type='text/html' href='http://ernstkuschke.blogspot.com/2003_12_07_archive.html#107088160665952783' title='dynamic enums'/><author><name>Ernst</name><uri>http://www.blogger.com/profile/01181087493431018010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5966491.post-107036045247842753</id><published>2003-12-02T12:20:00.000+02:00</published><updated>2003-12-08T15:59:34.620+02:00</updated><title type='text'>pirates</title><content type='html'>Avast, me hearties?!&lt;br /&gt;Unbelievable how quick it happens in the wild wild east. Pirated Longorn CD's &lt;a target=_blank href=http://news.bbc.co.uk/1/hi/technology/3255120.stm&gt;are for sale in Malaysia&lt;/a&gt;, for less than $2 a piece! Shiver me timbers!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5966491-107036045247842753?l=ernstkuschke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/107036045247842753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/107036045247842753'/><link rel='alternate' type='text/html' href='http://ernstkuschke.blogspot.com/2003_11_30_archive.html#107036045247842753' title='pirates'/><author><name>Ernst</name><uri>http://www.blogger.com/profile/01181087493431018010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5966491.post-107029024933222204</id><published>2003-12-01T16:50:00.000+02:00</published><updated>2003-12-08T16:00:22.480+02:00</updated><title type='text'>new frontiers</title><content type='html'>This is real cool - humankind have &lt;a target="_blank" href=http://www.cnn.com/2003/TECH/space/11/05/voyager.solar.boundary.ap/index.html&gt;reached out to the end of their solar system&lt;/a&gt;. (Or have we?!)&lt;br /&gt;&lt;br /&gt;Other new frontiers covered over the weekend: I studied C# Generics. I never really realised how powerful this is, especially since it's inherently supported by MSIL. A quick run of what it is:&lt;br /&gt;&lt;br /&gt;If you have ever written a class that accepts certain types as members, only later to realise that you need the exact same functionality for a different type of member? The following class is extremely simple, and possibly useless, but serves as a convenient example:&lt;br /&gt;&lt;br /&gt;class Math&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public Math { }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public int Sum(int FirstNumber, int SecondNumber)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return FirstNumber + SecondNumber;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Now this class could be usefull for other types, like float, single or double. Great, let's override the methods to accept and return different datatypes. Laborious, but it will work for our simple example. This would mean that you'd have to override the method for every different type you expect. A better approach: let's use generics to write a generic class, as follows:&lt;br /&gt;&lt;br /&gt;class Math&amp;lt;T&amp;gt;&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public Math&amp;lt;T&amp;gt; { }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public T Sum(T FirstNumber, T SecondNumber)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return FirstNumber + SecondNumber;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Note the use of the generic type T. To call this method on int types:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Math&amp;lt;int&amp;gt; math = new Math()&amp;lt;int&amp;gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int firstNumber = 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int SecondNumber = 3;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int sum = math.Sum(firstNumber , SecondNumber);&lt;br /&gt;&lt;br /&gt;The method will be called with T of type int, as specified by the calling method. To work with float types:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Math&amp;lt;float&amp;gt; math = new Math()&amp;lt;float&amp;gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;float firstNumber = 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;float SecondNumber = 3;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;float sum = math.Sum(firstNumber , SecondNumber);&lt;br /&gt;&lt;br /&gt;Never would you have the need to change your generic class. Neat, isn't it!!!!!&lt;br /&gt;&lt;br /&gt;There are some issues regarding type-safety. What will happen in the following case?&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Math&amp;lt;float&amp;gt; math = new Math()&amp;lt;float&amp;gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string s = "myString";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SqlConnection cn = new SqlConnection();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int madness = math.Sum(s, cn);&lt;br /&gt;&lt;br /&gt;Some crazy-ass returned value? Definately a runtime exception. Type safety just went to the moon here. There are generic constraints to build into your server-class to prevent this sort of abuse of your class. Constraints could tell the compiler what class T should inherit from, or which interfaces T should implement.&lt;br /&gt;&lt;br /&gt;Here's some &lt;a target=_blank href=http://msdn.microsoft.com/vcsharp/default.aspx?pull=/library/en-us/dv_vstechart/html/csharp_generics.asp&gt;interesting reading&lt;/a&gt; on Generics available on the web, which discusses generic constraints in more detail.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5966491-107029024933222204?l=ernstkuschke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/107029024933222204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/107029024933222204'/><link rel='alternate' type='text/html' href='http://ernstkuschke.blogspot.com/2003_11_30_archive.html#107029024933222204' title='new frontiers'/><author><name>Ernst</name><uri>http://www.blogger.com/profile/01181087493431018010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5966491.post-107002909431827049</id><published>2003-11-28T16:18:00.000+02:00</published><updated>2003-12-08T15:41:56.886+02:00</updated><title type='text'>MSDE woes</title><content type='html'>It took me almost a whole darned day to simply connect to a remote MSDE instance yesterday!!! &lt;br /&gt;After installation the services started up nicely enough, and the Service Manager blinked its familiar green arrow in the tray. However, trying to connect to it from my dev machine yielded problems. I got denied access using either SQL- or Windows Integrated authentication.&lt;br /&gt;&lt;br /&gt;I could successfully telnet into port 1433, and cliconfg showed me that both TCP/IP and Named Pipes were enabled protocols. The server was definately running, but I couldn't get in... After trying numerous suggestions from different folks, I finally found out that network protocols are disabled by default with MSDE2000 SP3. &lt;a target="_blank" href=http://sqljunkies.com/WebLog/brianr/&gt;Brian Randell&lt;/a&gt; suggested I read the readme file (does anyone actually read those?!), which would have told me this from the start!&lt;br /&gt;&lt;br /&gt;So, to install with network protocols *en*abled, the parameters are passed as:&lt;br /&gt;&lt;br /&gt;               setup.exe SAPWD="[strongPassword]" SECURITYMODE="SQL" DISABLENETWORKPROTOCOLS=0&lt;br /&gt;&lt;br /&gt;which, on an NT-based OS, would enable Mixed-mode authentication also. I felt pretty irate until being humbled by the simple answer: I didn't read the readme!!!&lt;br /&gt;I *do* find it peculiar, and potentially confusing to many others, that TCP/IP was enabled according to the cliconfg-utility, but "network protocols" were disabled nonetheless...(!)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5966491-107002909431827049?l=ernstkuschke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/107002909431827049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/107002909431827049'/><link rel='alternate' type='text/html' href='http://ernstkuschke.blogspot.com/2003_11_23_archive.html#107002909431827049' title='MSDE woes'/><author><name>Ernst</name><uri>http://www.blogger.com/profile/01181087493431018010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5966491.post-10697694439870663</id><published>2003-11-25T16:10:00.000+02:00</published><updated>2003-12-08T15:43:12.790+02:00</updated><title type='text'>LIVE, tonight!</title><content type='html'>Tonight Durban rocks - one of my favourite bands, LIVE!, &lt;a target="_blank" href=http://entertainment.iafrica.com/localbeat/recommendedgigs/271989.htm&gt;perform live tonight&lt;/a&gt;!!! They're supported by local rock band &lt;a target="_blank" href=http://www.sovent.co.za/primecircle.htm&gt;Prime Circle&lt;/a&gt;. I'm almost spilling over :))&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5966491-10697694439870663?l=ernstkuschke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/10697694439870663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/10697694439870663'/><link rel='alternate' type='text/html' href='http://ernstkuschke.blogspot.com/2003_11_23_archive.html#10697694439870663' title='LIVE, tonight!'/><author><name>Ernst</name><uri>http://www.blogger.com/profile/01181087493431018010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5966491.post-106976803224833868</id><published>2003-11-25T15:47:00.000+02:00</published><updated>2003-11-25T15:47:20.383+02:00</updated><title type='text'></title><content type='html'>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Duis sit amet lacus. Maecenas convallis, tortor in laoreet aliquam, tortor metus pulvinar diam, vel gravida purus diam eget pede. Aliquam mattis cursus est. Ut consequat. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nulla facilisi. Quisque fermentum rhoncus mauris. Nunc commodo dignissim purus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam interdum est. Aliquam erat volutpat. Maecenas purus. Proin posuere tincidunt mi. &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5966491-106976803224833868?l=ernstkuschke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106976803224833868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106976803224833868'/><link rel='alternate' type='text/html' href='http://ernstkuschke.blogspot.com/2003_11_23_archive.html#106976803224833868' title=''/><author><name>Ernst</name><uri>http://www.blogger.com/profile/01181087493431018010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5966491.post-106967727651422421</id><published>2003-11-24T14:34:00.000+02:00</published><updated>2003-12-08T15:55:02.890+02:00</updated><title type='text'>ANY GOOD IDEAS, ANYONE???</title><content type='html'>More often than not you'd find that those strange beings in the software world get slightly 'big-headed'. We do run the world, after all!! Right?! Most people don't realise that their washing machines, dvd players and satelite-tv decoders run on software.&lt;br /&gt;&lt;br /&gt;By the time I left high school in 1995, there was an increasingly high demand for programmers. When the 'dotcom-BOOM' shook stock markets and bank accounts all over the world not too long after that, the demand was impossible to satisfy. Software Developers were making good money, and their programmers were paid good money. It was a *very* lucrative industry. Folks all over the world were streaming to "Teach-Yourself-Blackbelt-C++-In-21-Days"-type courses. (By the way, *NO ONE* can program useful C++ after just 21 days' training!!!)&lt;br /&gt;&lt;br /&gt;The variables of this industry were tumbled and twisted until we have reached this era where persuing a career in programming offers you about just as many prospects as any other skilled profession.&lt;br /&gt;&lt;br /&gt;There is, however, one distinct, glaring difference that sets the software industry apart from others. The crappiest piece of software sometimes contains the most brilliant piece of code / algorithm, and the most ingenious software often consists of nothing spectacular behind the scenes. The *concept* of a piece of software is what makes it brilliant. Any *good idea* presented as software would most likely turn into a successful business these days, and there lies the challenge!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5966491-106967727651422421?l=ernstkuschke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106967727651422421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106967727651422421'/><link rel='alternate' type='text/html' href='http://ernstkuschke.blogspot.com/2003_11_23_archive.html#106967727651422421' title='ANY GOOD IDEAS, ANYONE???'/><author><name>Ernst</name><uri>http://www.blogger.com/profile/01181087493431018010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5966491.post-106933146660183810</id><published>2003-11-20T14:31:00.000+02:00</published><updated>2003-12-08T15:53:47.156+02:00</updated><title type='text'>WinFS revisited</title><content type='html'>The best resource on WinFS I've found to date is the &lt;a target="_blank" href=http://anopinion.net/&gt;blog of Mike Deem&lt;/a&gt;, Program Manager at Microsoft involved with the WinFS project. Definately worth checking up on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5966491-106933146660183810?l=ernstkuschke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106933146660183810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106933146660183810'/><link rel='alternate' type='text/html' href='http://ernstkuschke.blogspot.com/2003_11_16_archive.html#106933146660183810' title='WinFS revisited'/><author><name>Ernst</name><uri>http://www.blogger.com/profile/01181087493431018010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5966491.post-106880219781929900</id><published>2003-11-14T11:29:00.000+02:00</published><updated>2003-12-08T16:02:17.196+02:00</updated><title type='text'>effort</title><content type='html'>I’ve been in Durban for just over a year, now! The fact that I simply can’t believe this, has lead me to an interesting scientific discovery. &lt;br /&gt;Time flies. If you keep in mind that &lt;a target="_blank" href=http://www.ehappylife.com/custom/article22.html?pf=1&amp;&gt;Time = Money&lt;/a&gt;, you can conclude that you have a problem on your hands. Simple logic yields:&lt;br /&gt;&lt;br /&gt;Time = Money   (From &lt;a href="#lesson1"&gt;this&lt;/a&gt;, we can also conclude that too much pride costs money!)&lt;br /&gt;Time Flies&lt;br /&gt;Hence, Money Flies&lt;br /&gt;&lt;br /&gt;The problem you're presented with arises from the fact that flight usually has a direction. Money could fly either towards you, from you, or even just around you. I’m not going to venture into the depths of vector algebra here (mostly because I wouldn't remember how to!), but what is important is that you remember that it’s best for you to have it flying towards you. How do you accomplish this?&lt;br /&gt;&lt;br /&gt;Now, it has been suggested that &lt;a target="_blank" href=http://www.successfull-rewards.com/time_effort.html&gt;Time + Effort = Money&lt;/a&gt;, but from closer inspection, one can easily discover a flaw in this formula, which should actually be:&lt;br /&gt;&lt;br /&gt;Time + Effort = Money + MoreMoney&lt;br /&gt;Hence: Effort = MoreMoney&lt;br /&gt;&lt;br /&gt;From the close relationship between MoreMoney and Money, we can see that MoreMoney must also Fly. (Some scholars suggest that MoreMoney flies More than Money, but this parable falls beyond the scope of this document).&lt;br /&gt;&lt;br /&gt;Let’s regroup. We have the following:&lt;br /&gt;&lt;br /&gt;1.	Money Flies&lt;br /&gt;2.	Effort = MoreMoney&lt;br /&gt;&lt;br /&gt;We can’t do much about the constant rate (constant for everyone on this planet, at least!) at which Time, and thus Money, Flies. But we can do something about the &lt;strong&gt;Effort&lt;/strong&gt;-vector! According to Webster's Revised Unabridged Dictionary:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Effort&lt;/strong&gt;&lt;br /&gt;\Ef"fort\, n. &lt;strong&gt;[F. effort, OF. esfort, for esfors, esforz, fr. esforcier. See Efforce.]&lt;/strong&gt; &lt;em&gt;1. An exertion of strength or power, whether physical or mental, in performing an act or aiming at an object; more or less strenuous endeavor; struggle directed to the accomplishment of an object; as, an effort to scale a wall.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Do some critical thinking about it. Do some maths. Or, use your common sense. Either way, you’ll discover that in these equations, &lt;strong&gt;Effort&lt;/strong&gt; is the only vector which you have control over. You have control over its Magnitude, as well as its Direction. Since MoreMoney is related to Effort, its direction can surely be influenced by Effort.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5966491-106880219781929900?l=ernstkuschke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106880219781929900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106880219781929900'/><link rel='alternate' type='text/html' href='http://ernstkuschke.blogspot.com/2003_11_09_archive.html#106880219781929900' title='effort'/><author><name>Ernst</name><uri>http://www.blogger.com/profile/01181087493431018010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5966491.post-106856213426992850</id><published>2003-11-11T16:48:00.000+02:00</published><updated>2003-11-14T12:10:42.310+02:00</updated><title type='text'></title><content type='html'>&lt;strong&gt;A LITTLE LESS PRIDE!&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;...could have saved me countless hours debugging today.&lt;br /&gt;&lt;br /&gt;I recently had a call about a bug in a module I wrote. Now, and I suspect the same of most programmers, admitting to a bug in one's code puts a pretty big dent in one's ego. I wanted to fix this as quick as possible, and I wanted as few as possible people to have knowledge of its existence.&lt;br /&gt;&lt;br /&gt;The pseudo design was fine. I couldn't see any logic errors at a glance, or even after a decent scan. I finally fired up the debugger, stepped through routines line by line. Nothing.&lt;br /&gt;The error was impossible to reproduce where I debugged! I started losing precious time to this little annoying bug, and finally asked a co-worker to have a look.&lt;br /&gt;&lt;br /&gt;Because he has never seen my code, or knows the logic behind my reasoning, he first asked me to explain something else, which immediately pointed out the reason for the error!&lt;br /&gt;(By the way, my code *WAS* bug free!)&lt;br /&gt;&lt;br /&gt;Under certain conditions, another library would create an inconsistent state in the database, which caused a routine in my code to raise an exception.&lt;br /&gt;&lt;br /&gt;&lt;a id="lesson1" name="lesson1"&gt;What I learned today: aside from making one act and look silly, too much pride costs time :)&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5966491-106856213426992850?l=ernstkuschke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106856213426992850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106856213426992850'/><link rel='alternate' type='text/html' href='http://ernstkuschke.blogspot.com/2003_11_09_archive.html#106856213426992850' title=''/><author><name>Ernst</name><uri>http://www.blogger.com/profile/01181087493431018010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5966491.post-106845364357173521</id><published>2003-11-10T10:40:00.000+02:00</published><updated>2003-11-10T12:31:52.496+02:00</updated><title type='text'></title><content type='html'>&lt;strong&gt;End of the 2003-04 'Sugar Season'&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Sugarmills will stop crushing cane from now on, and the last mill will shut down around 23 December. This means that we're entering the dreaded 'off-crop' period. &lt;br /&gt;Mechanical maintenance on the mills take place now, but more importantly (well, for us softies): maintenance, upgrades, cleanups and the like take place on our software and databases out there.&lt;br /&gt;&lt;br /&gt;A newer version of our system will be rolled out to seven more sugarmills next year, and we have the first of December looming closer and closer. The 1st Dec. 2003 is the deadline for our 'code-complete' milestone. Development should seize and code is assumed to be tested. All tests are assumed to be passed. I know: assumption is the worst thing to do right here, but *unfortunately* this word describes it best this time!&lt;br /&gt;&lt;br /&gt;Boxes are placed on site next year, and tests will be run once again.&lt;br /&gt;Due to the nature of the software, it is almost impossible to test anywhere else but on site. &lt;br /&gt;&lt;br /&gt;Needless to say, these times are EXTREMELY busy for us!!! Amazing how it's still possible to find time for interesting discoveries, though :) &lt;a target="_blank" href="http://theshotgunrules.com/"&gt;This&lt;/a&gt; reminded me of those days back at &lt;a target="_blank" href="http://www.up.ac.za"&gt;varsity&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The next Sugar Season starts around April 2004.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5966491-106845364357173521?l=ernstkuschke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106845364357173521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106845364357173521'/><link rel='alternate' type='text/html' href='http://ernstkuschke.blogspot.com/2003_11_09_archive.html#106845364357173521' title=''/><author><name>Ernst</name><uri>http://www.blogger.com/profile/01181087493431018010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5966491.post-106821311269388709</id><published>2003-11-07T15:51:00.000+02:00</published><updated>2003-11-07T15:51:55.990+02:00</updated><title type='text'></title><content type='html'>&lt;strong&gt;TGIF&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;We got lovely weather forecasts for the rest of the weekend, so I'm going &lt;a href="http://www.vfs.co.za/"&gt;flying&lt;/a&gt; tomorrow. Have a lovely weekend!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5966491-106821311269388709?l=ernstkuschke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106821311269388709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106821311269388709'/><link rel='alternate' type='text/html' href='http://ernstkuschke.blogspot.com/2003_11_02_archive.html#106821311269388709' title=''/><author><name>Ernst</name><uri>http://www.blogger.com/profile/01181087493431018010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5966491.post-106810572796201030</id><published>2003-11-06T10:02:00.000+02:00</published><updated>2003-11-07T08:51:08.703+02:00</updated><title type='text'></title><content type='html'>&lt;strong&gt;Managed Code&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;This is the direction the programming world is heading in. Well, Windows programming, at least. .NET showed us the light, but it has its limitations. When writing .NET code, you can't really get down and dirty with the hardware, or even intimate with most OS functionality. I confess: I P/Invoke regularly! (Longhorn will change this, we're promised, and it will!).&lt;br /&gt;&lt;br /&gt;Writing managed code makes it *easier* for us, doesn't it! No more intricacies when you concatenate strings, for example. The GC is one of your best friends. But this has its dangers!!!&lt;br /&gt;I expect to be flamed for saying this, but just like the clunky code we've all seen from VB6-ers, we're starting to see clunky C#. This is because we don't know what happens *under the hood*.&lt;br /&gt;&lt;br /&gt;If you want to leverage your skills as a developer, and also crank out better software, become acquainted with csc, ildasm, and IL itself. If you can get to know the CLR JIT-ter, you're really going to be HOT :)&lt;br /&gt;&lt;br /&gt;Jan Gray from the Microsoft CLR Performance Team wrote &lt;a target="_blank" href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndotnet/html/fastmanagedcode.asp"&gt;this&lt;/a&gt; great article to get you started.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5966491-106810572796201030?l=ernstkuschke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106810572796201030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106810572796201030'/><link rel='alternate' type='text/html' href='http://ernstkuschke.blogspot.com/2003_11_02_archive.html#106810572796201030' title=''/><author><name>Ernst</name><uri>http://www.blogger.com/profile/01181087493431018010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5966491.post-106786872333841317</id><published>2003-11-03T16:12:00.000+02:00</published><updated>2003-11-03T16:41:16.220+02:00</updated><title type='text'></title><content type='html'>&lt;strong&gt;WinFS&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;First of all, WinFS is not completed yet! There might be enhancements and changes before its official release, which could be anywhere from 2005 to 2006. WinFS is not a traditional filesystem with file-indexes. Instead, it utilizes a "Yukon" relational data-engine. "Yukon" is the codename for the next release of SQL Server. There's lots of confusion in the tech-world surrounding exactly how WinFS fits together.&lt;br /&gt;&lt;br /&gt;Try to think of the current philosophy around file management: files are stored in folders, and subfolders and sub-subfolders... This doesn't work so well for the amount of data we store nowadays. Files get lost, or become hard to find at the very least. With WinFS, you don't need to remember the *location* of what you're looking for, but rather *any information* related to what you're looking for. Imagine trying to find that song in your head... You supply information like the category (ie "Rock"), or even a few of the lyrical lines of the song. WinFS will immediately find your song, or if you didn't supply enough info, reply with a list of candidates. &lt;br /&gt;It seems that in Longhorn, Explorer will be a graphical interface to a relational data store.&lt;br /&gt;&lt;br /&gt;WinFS is backwards compatible with Win32 files, and it provides support for 'filestreams' as we know them today.&lt;br /&gt;&lt;br /&gt;I will briefly discuss the following core areas:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Stores&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Uniform Data Model&lt;/li&gt;&lt;br /&gt;&lt;li&gt;API&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Core Services&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;strong&gt;Stores&lt;/strong&gt;&lt;br /&gt;One or more WinFS stores can exist on an NTFS partition. The store corresponds to an instance of the Base.Store type, which exposes meta-data and events for the store. Custom stores can be created. The set of items in a store is called a directed acyclic graph (DAG). Within a DAG, an item can have holding relationships from one or more items. There is a single root item, per store, with no holding relationships from any other items. Items in the stores are related to each other, and can be either file or non-file based.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Uniform Data Model&lt;/strong&gt;&lt;br /&gt;The data model provides the following concepts (from the SDK):&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Types and Subtypes&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Properties / Fields&lt;/li&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Simple / Complex Types&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;li&gt;Relationships&lt;/li&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Holding / Reference&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;li&gt;Constraints&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Extensibility&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;All items in a store are XML-serializable.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;API&lt;/strong&gt;&lt;br /&gt;All WinFS core functionality will be exposed via API's. The API's define strongly typed .NET classes for use with languages like C# or VB.NET. Some examples are functions to create or delete stores, or to search for a file (I sometimes wonder if files should still be called "files" in this "filesystem"!) based on its metadata. Examples of pre-defined types are Person, File, and Document.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Core Services&lt;/strong&gt;&lt;br /&gt;This includes Synchronization, InfoAgents and File System Services. Standard InfoAgents will be shipped, but developers can create their own. A user will configure an InfoAgent to perform a chosen action when a specified condition is met in the filesystem, for example if I had a new picture to "My Photos", my mom will automatically be notified via email. Synchronization will include functionality to synchronize contacts between your computers, for example.&lt;br /&gt;Custom services will be written, like AntiVirus software. Microsoft has coined a new term: "Services Oriented Programming", which is worth to read up on.&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;br /&gt;I've seen C# code specific to WinFS types, and it looks daunting. &lt;br /&gt;From the documentation:&lt;br /&gt;"At one end of the spectrum you can use relational APIs, including ADO.Net and OLE-DB, but miss the item oriented aspect of WinFS. At the other end, you get Win32, but miss the relational aspects of WinFS. The "WinFS" API merges both aspects into a single programming model."&lt;br /&gt;I feel as if there's just too much to learn! It is a total new philosophy regarding data storage and retrieval. Isn't this just typical of the software-world! Our brains will never rest :)&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5966491-106786872333841317?l=ernstkuschke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106786872333841317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106786872333841317'/><link rel='alternate' type='text/html' href='http://ernstkuschke.blogspot.com/2003_11_02_archive.html#106786872333841317' title=''/><author><name>Ernst</name><uri>http://www.blogger.com/profile/01181087493431018010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5966491.post-106777926333134186</id><published>2003-11-02T15:21:00.000+02:00</published><updated>2003-11-02T15:25:46.976+02:00</updated><title type='text'></title><content type='html'>I've been having little sleep over the last few days. It's been a great weekend, but I've failed to deliver the promised info on Longhorn. I have been checking out WinFS, and I can say that the little I know gets me excited. Forget about the definition you have for the word 'filesystem'. Think more in the lines of 'LIVE relational data engine'. I'm posting more on this tonight.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5966491-106777926333134186?l=ernstkuschke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106777926333134186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106777926333134186'/><link rel='alternate' type='text/html' href='http://ernstkuschke.blogspot.com/2003_11_02_archive.html#106777926333134186' title=''/><author><name>Ernst</name><uri>http://www.blogger.com/profile/01181087493431018010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5966491.post-106759730753775406</id><published>2003-10-31T12:48:00.000+02:00</published><updated>2003-11-07T08:50:34.376+02:00</updated><title type='text'></title><content type='html'>&lt;strong&gt;LONGHORN&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The winds of change are blowing, no, veraciously howling, over the lands of Windows programming. The next Windows, codenamed 'Longhorn' has been the star at the PDC in Los Angeles over the last few days, and I can tell you: there are lots to learn! &lt;br /&gt;(Come to think of it – it’s been hyped for a while now).&lt;br /&gt;Thanks to the *massive* (which is what I call two years of hyping up developers) marketing campaign Microsoft has been running, combined with the excellent online resources becoming available on the SDK, we might just have enough time to learn about the new technologies behind it in time for the release of this beast.&lt;br /&gt;&lt;br /&gt;Over the next few days I'll blog on the so-called 'pillars' of Longhorn:&lt;br /&gt;&lt;li&gt;WinFS&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Avalon&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Indigo&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;I'm also looking into Microsoft's next version of VS.NET(codenamed 'Whidbey'), which will be released shortly after Longhorn in 2005.&lt;br /&gt;&lt;br /&gt;(For a good overview, see Chris Sells' article, &lt;a target="_blank" href=”http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnfoghorn/html/foghorn10272003.asp”&gt;Living la Vida Longhorn&lt;/a&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5966491-106759730753775406?l=ernstkuschke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106759730753775406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106759730753775406'/><link rel='alternate' type='text/html' href='http://ernstkuschke.blogspot.com/2003_10_26_archive.html#106759730753775406' title=''/><author><name>Ernst</name><uri>http://www.blogger.com/profile/01181087493431018010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5966491.post-106743032432545647</id><published>2003-10-29T14:25:00.000+02:00</published><updated>2003-10-30T09:05:08.696+02:00</updated><title type='text'></title><content type='html'>Thought it was quite interesting to know that the biggest &lt;a target = "_blank" href="http://www.newscientist.com/news/news.jsp?id=ns99994324"&gt;solar flare&lt;/a&gt; in YEARS are heading towards earth.&lt;br /&gt;&lt;br /&gt;Just my 2cents for today :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5966491-106743032432545647?l=ernstkuschke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106743032432545647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106743032432545647'/><link rel='alternate' type='text/html' href='http://ernstkuschke.blogspot.com/2003_10_26_archive.html#106743032432545647' title=''/><author><name>Ernst</name><uri>http://www.blogger.com/profile/01181087493431018010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5966491.post-106742358385877092</id><published>2003-10-29T12:33:00.000+02:00</published><updated>2003-12-08T15:57:37.373+02:00</updated><title type='text'>productivity</title><content type='html'>I’ve been having a brain scrum with myself this morning on measuring productivity.&lt;br /&gt;Management is faced with, amongst others, the daunting task of increasing their employees’ productivity. This is often not as easy as it may seem.&lt;br /&gt;&lt;br /&gt;The software industry is known to not have any universal methods for measuring productivity of developers. Not being able to measure how productive you are is a problem – how much, and in which areas, do you plan on becoming more productive? You’d never know, without the knowledge of how and where you &lt;i&gt;are &lt;/i&gt;productive. &lt;br /&gt;&lt;br /&gt;To measure &lt;strong&gt;Lines Of Code (LOC)&lt;/strong&gt; is simply not a way to measure the productivity of a developer. If I can accomplish functionality with less LOC than you, it certainly doesn’t make me less productive. (It might actually make me &lt;i&gt;more&lt;/i&gt; productive!)&lt;br /&gt;&lt;strong&gt;Function Point Analysis (FPA)&lt;/strong&gt; has been hot for a while, but is in my opinion a mere indication of your productivity. Just to put some mud in the spokes: all functions aren’t equally difficult. To produce one difficult function could be seen as more productive than producing three fairly simple functions.&lt;br /&gt;I have talked to people who choose to simply measure the &lt;strong&gt;Amount of Hours&lt;/strong&gt; worked, and translate that to productivity. That could work if all your developers are equal in all factors: ability, experience, etc. Not a good way of measuring productivity, for sure. If you produce functionality that took me 2 days, in four hours, you are more productive than me.&lt;br /&gt;&lt;br /&gt;To stir things up even more: there are different languages. Writing a COM component that shows the current time in VB will take less time than doing the same in C++. The C++ coder will likely spend a bit more time on it - should he be seen as less productive? He does get to deal with much more complex programming, and his final product might use memory more efficiently. There are many facts to consider, aren’t there? And this was a &lt;i&gt;simple&lt;/i&gt; example…&lt;br /&gt;There are ways of measuring productivity in software development that I’m not going to discuss here, as this is not my point.&lt;br /&gt;&lt;br /&gt;My point is this: for effective management of developers, use the abovementioned techniques only as measures of indication. Low LOC might indicate laziness in certain cases, and genius in others…&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;GET TO KNOW YOUR DEVELOPERS PERSONALLY.&lt;/strong&gt; This is the only way to know exactly where your potential for increased productivity lies. Take the team for dinner after a successful project. Help and share your knowledge. By knowing your people, you will know what to make of their LOC figures, etc. Developers will put in extra effort for someone they know personally, trust me.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5966491-106742358385877092?l=ernstkuschke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106742358385877092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106742358385877092'/><link rel='alternate' type='text/html' href='http://ernstkuschke.blogspot.com/2003_10_26_archive.html#106742358385877092' title='productivity'/><author><name>Ernst</name><uri>http://www.blogger.com/profile/01181087493431018010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5966491.post-106726534351431171</id><published>2003-10-27T16:35:00.000+02:00</published><updated>2003-12-08T15:56:48.046+02:00</updated><title type='text'>Software Architecting: Planning your Solution</title><content type='html'>Approximately 70% of costs towards IT, is directed towards maintaining existing stuff. Only 30% goes into development of new functionality. &lt;br /&gt;&lt;br /&gt;If you're in the business to be profitable, this statement should ring a bell for you! Cut expenditure (simple math: it reduces profit!!!) by lowering maintenace costs. For most people, this is common knowledge. Maintenance adds onto your solution's TCO. You want as little as possible of this, and if possible, none of it at all. (Which is hardly ever possible)&lt;br /&gt;&lt;br /&gt;PLANNING. This is the most vital part of any project. PLANNING is the single development phase which reduces your solution's TCO the most.  I see it all the time: a solution has a spiffy-looking GUI, and acceptable performance, which, in most cases, is enough to sell it. After some time in pilot and even in production, changes &lt;strong&gt;will&lt;/strong&gt; be necessary.  Enhancements &lt;strong&gt;will&lt;/strong&gt; be necessary.  This adds to TCO. &lt;br /&gt;&lt;br /&gt;I'm ranting about this today, because I see this everyday in projects I join or am part of. I'd much rather postpone a deadline a bit, and PLAN my project well. This will enable your solution by exposing logical API's, seperating layers to scale properly, and provide the user with enough dynamic options to adapt to changing environments you have anticipated. Of course, the whole 'planning' business is broken into many steps and phases, involving use cases and the few gazillion other concepts; there are many models to go by, like Microsoft's &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;familyid=a71ac896-1d28-45a4-880c-8b0cc8265c63"&gt;MSF model&lt;/a&gt;, to name one. &lt;br /&gt;I just wish that software producers would take this process more seriously before coding away just to get it on the table first.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5966491-106726534351431171?l=ernstkuschke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106726534351431171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106726534351431171'/><link rel='alternate' type='text/html' href='http://ernstkuschke.blogspot.com/2003_10_26_archive.html#106726534351431171' title='Software Architecting: Planning your Solution'/><author><name>Ernst</name><uri>http://www.blogger.com/profile/01181087493431018010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5966491.post-106718583438548199</id><published>2003-10-26T18:30:00.000+02:00</published><updated>2003-10-27T08:45:00.250+02:00</updated><title type='text'></title><content type='html'>It's been a slow weekend regarding any 'tech'-activities, but I did complete my first 3 lessons in aviation yesterday :)&lt;br /&gt;Saw a cute &lt;a href="http://www.salon.com/ent/movies/review/2003/09/26/my_life/index_np.html"&gt;movie&lt;/a&gt; today - it's a pitty the afternoon ended so soon, though! :&lt;strong&gt;D&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Talking about low-cost data-access...&lt;/strong&gt;&lt;br /&gt;MSDE offers great functionality. However, it totally staggers with 5 or more users. (As promised!) Connection-pooling 5 shared connections does a good job for more than 5 users, but is only effective when your users don't request too much. MySQL is simply not an option in my book. Data-corruption is a common 'feature', among others...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5966491-106718583438548199?l=ernstkuschke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106718583438548199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106718583438548199'/><link rel='alternate' type='text/html' href='http://ernstkuschke.blogspot.com/2003_10_26_archive.html#106718583438548199' title=''/><author><name>Ernst</name><uri>http://www.blogger.com/profile/01181087493431018010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5966491.post-106698462634334043</id><published>2003-10-24T10:37:00.000+02:00</published><updated>2003-10-24T13:42:14.493+02:00</updated><title type='text'></title><content type='html'>With the PDC happening soon in the USA (wouldn't I just love to attend this...), and VSLive! happening regularly for the folks in Europe, we've always had to either spend the dollars to get there, or read the reviews and news afterwards.&lt;br /&gt;At long last we'll have our very own South African .NET conference, dubbed &lt;a href="http://www.vs-max.co.za"&gt;VS-Max&lt;/a&gt;, which I thought would be worth a mention here. Excellent speakers have been contracted: &lt;a href="http://www.amundsen.com"&gt;Mike Amundsen&lt;/a&gt; and &lt;a href="http://www.ingorammer.com/"&gt;Ingo Rammer&lt;/a&gt; come to mind.&lt;br /&gt;Not sure how the mix-up came to be, but Mike recently mailed me to help him settle his travel-arrangements down here. He also posts this &lt;a href="http://www.lonelyplanet.com/destinations/africa/south_africa/"&gt;link&lt;/a&gt; on his site, which I thought doesn't really do wonders for tourism down here!!!&lt;br /&gt;I do hope this event is successful enough to become an annual institution.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5966491-106698462634334043?l=ernstkuschke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106698462634334043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106698462634334043'/><link rel='alternate' type='text/html' href='http://ernstkuschke.blogspot.com/2003_10_19_archive.html#106698462634334043' title=''/><author><name>Ernst</name><uri>http://www.blogger.com/profile/01181087493431018010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5966491.post-106691937829026498</id><published>2003-10-23T16:29:00.000+02:00</published><updated>2003-10-23T16:29:38.070+02:00</updated><title type='text'></title><content type='html'>Being a new blogger, I'm still trying to get the blog-rules straight. Looking at most blogs, it seems to be a rule to blog once a day, if possible, and also to use the word 'blog' as often as possible ;)&lt;br /&gt;&lt;br /&gt;We had a Mill Group Board meeting at one of the sugarmills most of the day. The mill is in a small little town in the countryside, and it's a real beautiful drive. But I'm tired, nonetheless, and going home!&lt;br /&gt;&lt;br /&gt;Oh, I've been playing with #develop last night, a .NET IDE entirely written in C#, and it rocks. A few bugs need to be squashed still, but it's definately the IDE of choice besides VS.NET, and much less resource-intensive. If any of you want to try it, here's a warning: be patient during the innitialisation of the "Code Completion Database" - it really does take long. (It took me just over an hour on a P4-1.8Ghz, 256Mb RAM). But more on this tomorrow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5966491-106691937829026498?l=ernstkuschke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106691937829026498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106691937829026498'/><link rel='alternate' type='text/html' href='http://ernstkuschke.blogspot.com/2003_10_19_archive.html#106691937829026498' title=''/><author><name>Ernst</name><uri>http://www.blogger.com/profile/01181087493431018010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5966491.post-106674568411791076</id><published>2003-10-21T16:14:00.000+02:00</published><updated>2003-12-08T15:55:55.860+02:00</updated><title type='text'>Starting to Fly</title><content type='html'>On Saturday I took the first steps towards my 'PPL'. That's pilot-lingo for a Personal Pilot's Licence. I'm doing it at the &lt;a href="http://www.vfs.co.za/"&gt;Virginia Pilot School&lt;/a&gt;, which is right on the beach in Durban North, and makes for tremendous scenic landings and take-offs! At this time of year there are many whales in the area, and they are easily spotted from the air. (I'll try posting some photos at some stage).&lt;br /&gt;I'll be training in a &lt;a href="http://www.munichflyers.de/html/menu/charter/DEGCW.htm"&gt;Cessna C152&lt;/a&gt; and a &lt;a href="http://www.munichflyers.de/html/menu/charter/DEIZC.htm"&gt;Cessna 172P&lt;/a&gt;...&lt;br /&gt;Very exciting stuff.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5966491-106674568411791076?l=ernstkuschke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106674568411791076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106674568411791076'/><link rel='alternate' type='text/html' href='http://ernstkuschke.blogspot.com/2003_10_19_archive.html#106674568411791076' title='Starting to Fly'/><author><name>Ernst</name><uri>http://www.blogger.com/profile/01181087493431018010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5966491.post-106665160067797495</id><published>2003-10-20T14:06:00.000+02:00</published><updated>2003-10-20T14:06:40.780+02:00</updated><title type='text'></title><content type='html'>I've just started this new private venture which requires lots of ASP.NET coding. (I use C# for the 'code-behind'). Having experienced mainly realtime winform projects, bending my head around ASP gets daunting at times - especially state management has its issues!!&lt;br /&gt;&lt;br /&gt;Because the language compilers are included with the .NET CLR, many new private projects are seeing the light. I'm currently investigating the cost-effectiveness of building apps with the bare minimum of innitial investment.&lt;br /&gt;Today it is possible to utilise these .NET compilers, MSDE, and free 3rd-party code-editors to build small-scale apps fairly comfortably, 100% Microsoft-based...&lt;br /&gt;I'll keep you posted on my findings.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5966491-106665160067797495?l=ernstkuschke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106665160067797495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106665160067797495'/><link rel='alternate' type='text/html' href='http://ernstkuschke.blogspot.com/2003_10_19_archive.html#106665160067797495' title=''/><author><name>Ernst</name><uri>http://www.blogger.com/profile/01181087493431018010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5966491.post-106664995579857641</id><published>2003-10-20T13:41:00.000+02:00</published><updated>2003-10-20T13:45:14.523+02:00</updated><title type='text'></title><content type='html'>Maybe one day I'll be able to look back upon these postings and think: Ahh... the good old days... Who knows?! I'm blogging now!&lt;br /&gt;&lt;br /&gt;PS - I couldn't muster anything more creative / insightful than that, but bear in mind that it's only my first post :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5966491-106664995579857641?l=ernstkuschke.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106664995579857641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5966491/posts/default/106664995579857641'/><link rel='alternate' type='text/html' href='http://ernstkuschke.blogspot.com/2003_10_19_archive.html#106664995579857641' title=''/><author><name>Ernst</name><uri>http://www.blogger.com/profile/01181087493431018010</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry></feed>
