2005 2006 2007 2008 2009 2010 2011 2015 2016 2017 2018 aspnet azure csharp debugging docker elasticsearch exceptions firefox javascriptajax linux llblgen mongodb powershell projects python security services silverlight training videos wcf wpf xag xhtmlcss

Windows Live Writer RULES

Microsoft Windows Live Writer (Beta 2) is by far and away one of the coolest tools I've used in a long time.  Since I created Minima, I was using my own extremely lame WPF app to do all my posting and it made posting a bore.  I've been meaning to put some time into making a more interesting WPF app, but instead Windows Live Writer saved the day.  With this thing I can post new entries, save drafts, set labels, as well as view and edit previous entries.

 Having said all that, setting it up wasn't that easy.  Well, the setup was simple, but figuring out what to setup wasn't.  I kept thinking that there was some .NET interface you had to implement, because the documentation kept talking about it's API and gave COM and .NET examples.  Well as it turns out, all you have to do is implement a well known blogging API and point WLW to it!  In my case, I chose the Metaweblog API.

Setting this API was actually rather simple, though it took some experimentation at first as I've never worked with the API at first.  Also, this API uses XML-RPC calls and at first and, at first, I figured I would have to write the XML listener and all XML messages manually.  It turns out that there's a nice API called XML-RPC.NET.  You set this up similar to how you setup a WCF service: via interfaces.

Here's the basic idea behind the XML-RPC.NET API:

[XmlRpcService(Name = "Minima API", AutoDocumentation = true)]
[XmlRpcUrl("http://www.netfxharmonics.com/xml-rpc/")]

public class XmlRpcApi : XmlRpcService
{
    [XmlRpcMethod("blogger.getUsersBlogs")]
    public BlogInfo[] GetUsersBlogs(String key, String username, String password) {
        // Stuff goes here
    }
}

You just set two class-level attributes and then set a method-level on each method.  Then you expose this class as an HttpHandler as the XmlRpcService class this class is inheriting from actually implements the IHttpHandler interface, which is rather convenient.

How did I know what methods I had to implement?  Well, the Metaweblog API "specification" is NOT a real specification, it's just an article that only mentions parts of it.  Also, XML-RPC.NET doesn't seem to have any useful tracing abilities, so that was out.  After a while though, I just found someone else's web site that implements the Metaweblog API and looked their API documentation (you can just look at the sample API below).  It turns out that to use the Metaweblog API means you will be using parts of the Blogger API as well.  Interesting...

Being a minimalist though, I wasn't about to implement ALL functionality.  So I setup an ASPX page that took the Request.InputStream, pointed WLW at the page, and when WLW did a request I got an e-mail from my ASPX page.  When I saw that WLW was calling a specific function, I implemented that specific one.  Of course I also had to implement specific data structures as well.  Really though, all you have to do is use XML-RPC.NET to implement the functions it wants and give it the structures in the Metaweblog API (as you can see in the sample API below) and you're done.

[As a side note, if you aren't familiar with what I mean by accessing the Request.InputStream steam, this stream contains the information that comes to the ASPX page in the POST portion of the HTTP request.  You will often access this when you are creating manual XML services (see my XmlHttp Interop article below for an example).  Here is an example of getting the input stream:

Byte[] buffer = new Byte[context.Request.InputStream.Length];
context.Request.InputStream.Read(buffer, 0, (Int32)context.Request.InputStream.Length);
String postData = ASCIIEncoding.UTF8.GetString(buffer);

You could use something like this to view what information is being sent from WLW.]

In my debugging I found that WLW has a tremendous number of extremely weird bugs.  For example, one of the structures I needed to implement was a structure called "Post" (I'm using the term structure, but it's just XML over the wire and it's a class in my API-- not a struct).  However, WLW would give me errors if some of the fields were null and would give me a different error if they weren't null, but even then, it was only one some functions.  So I had to create two versions of "Post".  One called "Post" which only had a few members, and the other called "FullPost", which had everything.  Strange.  Oh well... I've seen worst (ever use Internet Explorer?)

In the end though, WLW was talking seamlessly with my API.  I was really, really dreading making a better blog client as that felt like such a waste of time (and there was NO way I was going to use a web client-- WPF RULES!). Windows Live Writer (Beta 2) has already been a great help for me in the past week. Not just WLW itself though, but also some of the great plugins you can use with it. For example, in this write-up, I used a Visual Studio pasting plugin to allow me to copy from VS2005 and paste here to get fancy color syntax. Cool!

Related Links

Extremely Misunderstood Software

Today I was thinking about some of the misunderstandings going around about software. Actually my life revolves around misunderstandings in every area of my life (not just my life in technology!) and I'm usually thinking about it in some respect. I can recall back to early 2004 when I was the black sheep in both the Microsoft AND Mozilla communities for promoting .NET *and* web standards. The Mozilla-ish (open-source) guys would mock the severe inefficiencies and painful security flaws of .NET (though they never ACTUALLY used .NET!) and the Microsoft-ish (.NET) guys would mock call me personally unrepeatable names for even suggesting that web developers should learn the foundational principles of JavaScript, CSS, and XHTML before they starting asking a load of "how do I..." questions. Now while the open-source community has wised up a bit, I still get extremely vile insults from the git-r-done areas .NET community where even mentioning proper development or training will get you killed. In any case, this is my life and like I say... not just in technology. Basically, everyone hates me :)

So, here's my concise (yeah like I'm capable of that) list of software that is EXTREMELY misunderstood. I'm not going to go into any detail except put a single line by the item which should give you a hint as to what the software really is. This is important: if you understand one of the confusions, that confusion is analogous to each of the others. For example, if you know how insane it is to compare SQL Server 2005 to MySQL then, guess what... you now understand why it's insane to compare Firefox to IE or LLBLGen Pro to .netTiers or NHibernate. You just can't do it! Yet, people all day long give me unjustifiable grief about this stuff and I am forced to spend literally 70% of my time in marketing instead of programming!

I'll shut up now... here's the list:

List of Extremely Misunderstood Software

Silverlight 1.0 Release Candidate Finally Out

For those of you who don't know, Silverlight 1.0 Release Candidate has been released.  If you haven't tried Silverlight out yet, this would be a good time to do so.  Be warned though: you need to know the fundamentals of Modern JavaScript to work with it.

In an effort to help educate the community on these topics, if you re not familiar with Modern JavaScript (i.e. multicast events, closures, anonymous functions, Ajax, prototype orientation, namespaces, etc...) please send me an e-mail and I will advise you.  Having said that... in almost every case I'll probably tell you to go buy Pro JavaScript Techniques by John Resig.  Oh any btw... being able to do validation or form processing in no way means you know JavaScript :)

NetFXHarmonics Subversion Repository Update

Today a did two things that compel me to give a very short update.

First, I created a permanent and unchanging version of the Data Feed Framework in the tags/ section under February2007/. This release is the original February 2007 release and it's what you could call is the "stable" release. All version of the DFF will be stable in terms of technology, but this is also stable in terms of documentation. You can be assured that when you download the Data Feed Framework from the trunk/ that you will be getting a solid version, but perhaps the API changed and you want a specified version for that API. Well, when the API interfaces changes, then that's a new version and I will tag that one as well. So, for now there is a tagged release called February2007/ which you may use in production at any time (as other are doing already). You may get this from the following location:

Second, I added an index to the my SolutionTemplate/E-Book. This file is the LessonIndex.txt file in the project repository. This file lists only the full-length lessons and as I write more full-length lessons I will be adding on to this file (today, I added a lesson on HttpHandlers and another on HttpHandlerFactories and added them to the index.)

Also, for you convienence here is that index:

Working with Global.asax

SolutionWebsite: App_Code/SampleHttpApplication.cs

Creating ASP.NET HTTP Handlers

SolutionWebsite: App_Code/ServiceHttpHandler.cs

Creating ASP.NET HTTP Handler Factories

SolutionWebsite: App_Code/SampleHttpHandlerFactory.cs

DOM Manipulation

SolutionWebsite: Code/SampleDomManipulator.js

JavaScript Events and Anonymous Functions

SolutionWebsite: Code/Initialization.js

JavaScript Namespaces

SolutionWebsite: Code/SampleStructure.js

JavaScript Closures

SolutionWebsite: Code/SampleStructure.js

Firefox Console

SolutionWebsite: Lib/Debug.js

JavaScript Loosely-Coupled Multicast Events

SolutionWebsite: Lib/Events.js

.NET Tracing

SolutionWebsite: Services/SampleAsyncSchemaService.aspx.cs

Custom Config Sections

SolutionWebsite: /Includes.js.aspx

ASP.NET MasterPages

SolutionWebsite: /MasterPages.master.cs

Using XAG

SampleLibrary: Config/JavaScriptImport.cs

Client-Side Type Organization

Introduction.txt

CSS Architecture

Introduction.txt

Framework Design

Introduction.txt

You can access my SolutionTemplate/E-Book at the following Subversion repository path:

Minima, DFF, and SolutionTemplate/E-Book now in Subversion

I've recently realized how lame it is to have to download a new ZIP file each file a new version of a framework is released or when a project has some changes. So, I'm moving my projects to Subversion instead of making everyone download my ZIP files. This should help me update the projects more often and allow everyone else to get my projects easier. Please note that this replaces all RAR/ZIP files I've previously released.

Currently, I have the following projects in Subversion:

  • Minima
  • Data Feed Framework
  • NetFXHarmonics .NET SolutionTemplate With E-Book

You can access these projects with any Subversion client, though you would probably want to use TortoiseSVN for Windows development. You can access the projects at the following SVN HTTP addresses. You are free to also use these SVN HTTP locations to browse through the code in your web browser. My primary emphasis is in .NET training and education, so I do hope this helps. Also, given that my SolutionTemplate is also my e-book, you can easily look at the files there and read them online without having to download the project.

Note the /trunk/ path at the end. There are currently no projects in the tags section of the Subversion repository and, honestly, I'm still planning what to do with that section. The branches section is currently set to not allow anonymous access.

By the way, if you're unfamiliar with it, Subversion is an incredibly powerful and seamlessly easy to use revision control system that allows for code repositories (that is, code stores) to be stored in a centralized local to allow access from diverse locations. Subversion also does automatic versioning of your commits (that is, saves) to the code repository. Not just versioning as in a magic number change, but also as in it saves all versions of your files so you can go back and see your changes over time.

Subversion is used for many different reasons and some of them have nothing to do with code. For example, I've been using something similar to it (CVS) for a rather long time now to store all my documents so I can keep everything stored in a centralized location and so I can see the progress of my work. One use that I found rather interesting was that one company was using Subversion to store and provision new instances of their application. So, you can use it as a place to store your code, as a global file system, or as an application repository. Subversion stores whatever you want to store, including binary files. For more information on Subversion, see the online O'Reilly e-book "Version Control with Subversion" below.

Related Links

Disabling IIS6 Socket Pooling

Yesterday I ran into one of the worst features of any program ever. In an attempt to setup Subversion on Apache on Windows, I found that Apache couldn't start on the specified IP address using port 80 even though NONE of my IIS6 websites were using this particular IP address. Well, after banging my head against the wall for about an hour, I realized that even though IIS was told to use SPECIFIC addresses for each website, it felt the need to take over ALL the IP addresses on my ENTIRE system!

After a bit of research I found that this "feature" is called Socket Pooling and has been driving people nuts for a while. So, in my attempt to research how to get around this "feature", I found numerous articles online including one on TechNet describing in PARTIAL detail how to fix the problem. Not a single one of the 10+ articles I read explained how to fix this problem correctly.

Here is how you fix this "feature":

Basically you need to tell IIS6 exactly what IP addresses it is allows to use. By default it thinks it has the right to take over ALL your IP Addresses. Not sure why someone thought that was a good idea, but ok...

To tell IIS6 exactly what IP addresses you want to use, thereby freeing up all other IP address, you need the httpcfg.exe utility that comes in the Support Tools on your Windows Server 2003 disc (for R2, it's disc 1) at the follow path:

\SUPPORT\TOOLS\SUPTOOLS.MSI

In my situation, my dedicated hosting service didn't feel that I would EVER need to use ANY of the utilities installed by SUPTOOLS.MSI, so I was stuck there. Furthermore, after wasting about a half hour on searching my closets for a Windows Server 2003 trial disc, I realized that I needed a new plan. If you find yourself in a similiar situation, you can install the Windows XP SP2 Support Tools on your local machine and upload httpcfg.exe to the server. No other files are needed. The Windows XP SP2 Support Tools download is a free file downloadable from the Microsoft website.

After you have httpcfg.exe on the server, get to a command line and get httpcfg.exe in your path (I put the file in the Windows folder).

Now you need to decide what IP addresses you want IIS6 to use. This is where I kept getting confused. Because the default model of IIS6 is to greedily takeover ALL IP addresses, I kept thinking that I wanted to give IIS6 an EXCLUSION. All the articles make it sound like that. All the articles I read made it sound like that was the case. So I kept using httpcfg.exe to include an address in an exclusion list. Well, that's not how it works and the articles should have explicitily stated that. In reality, you tell IIS6 what specific IP addresses you want IIS6 to use and by doing so you are naturally disabling the "feature" of socket pooling. Moving on...

Use the following command to give IIS6 an IP address you would like for it to use (clearly 10.1.1.1 is just an example):

httpcfg set iplisten -i 10.1.1.1

Repeat that for EACH IP address you want IIS6 to use.

If you accidentally set an IP address that you didn't want to add, then you may use the following sample command:

httpcfg delete iplisten -i 10.1.1.1

If you want to see what addresses you have set, use this command:

httpcfg query iplisten

Then STOP the http service by:

net stop http /y

Then START the W3C service by:

net start w3svc

Now your IIS should be running and you should be able to start other web servers as well on different IP addresses. Now, if you find that one of your websites will NOT start and showed up as "stopped" when the other websites started fine, then the IP address for that specific site was not added via httpcfg and you need to do so for that website to start. If that website is using an IP address that Apache or something else is using, you need to choose a different IP address. It's not that big of a deal. That's what DNS was for and if you are using DNS and not just handing out IP addresses, then you won't have a problem.

As a final note, if you are on IIS5 for some reason, then, well, you should upgrade, but say you can't upgrade for some reason, then you too have this same socket pooling "feature", but it's disabled differently. I haven't tried it myself on IIS5, but according to the documenation, you can disable all IIS5 socket pooling by openning a command prompt window and moving to the \Inetpub\AdminScripts folder, then running the following command:

cscript adsutil.vbs set w3svc/disablesocketpooling true

If you see the following response, then you are good. Just stop IIS, then restart IIS and the WWW service to come back online.

disablesocketpooling : (BOOLEAN) True

This method will give you the same nice and happy message on IIS6 as well, but it's just a show intended to give you a false sense of acomplishment and doesn't actually disable socket pooling at all. This method only works for IIS5. You need to use the httpcfg.exe method described above for IIS6.

Firefox 2.0 Bookmark Auto-Backup

The other someone called me up telling me their world has come to and end because they came home to find that someone accidentally deleted all their Firefox bookmarks. The situation was rather serious to them, which is understandable as no one likes to lose anything, so I went over to their place to see what I could do for them. Sure enough the bookmarks were gone, but...

...much to by delight (and their's), I found that Firefox 2.0 keeps automatic backups of your bookmarks for the past 5 days. I found all their bookmarks in the following folder:

%appdata%\Mozilla\Firefox\Profiles\<random stuff>.default\bookmarkbackups

So, I was able to import their bookmarks from a backup and BAM... happiness. That's just a down-right awesome feature that MANY more applications should have. Firefox 3.0 has a new bookmark system called Places which uses SQLite (an open source relation database system) to manage its bookmarks and it should be interesting to see what techniques they use in their final release.

NetFXHarmonics SolutionTemplate/E-Book

Recently I started putting together my standard .NET solution template for public release. This template contains the base architecture and functionality that all my projects need. This template is also organized in a very clear way that clearly separates each type of element into it's own section to maximize expansion and ease of development.

In order to make sure that the solution is understandable by many different types of developers, there are commentaries in each file in the solution. In addition to this, many of the files have full chapter-length lessons on a development topic contained in that file. For example, in the Code/SampleDomManipulator.js file, I wrote a rather extensive introduction to JavaScript browser dynamics through DOM manipulation. Because of these lessons, this solution template is also living .NET e-book.

Here is a list of some of the topics I've written about in this first release of my solution template, some of them are simple explanations and others are lengthy detailed lessons.

  • HttpHandler Creation
  • HttpModule Creation
  • HttpHandlerFactory Creation
  •  
  • Custom Config Section Creation
  • .NET Tracing
  •  
  • MasterPages Concepts
  • Global.asax Usage
  •  
  • CSS Theming, Management, and Media-Specific Sheets
  •  
  • JavaScript Namespaces
  • JavaScript File Consolidation
  • Firefox Console Usage
  • JavaScript Anonymous functions
  • JavaScript Multicast Event Handling
  • DOM Element Creation
  • DOM Element Manipulation
  • DOM Element Deletion
  • JavaScript Event Handling with Low Coupling
  •  
  • JavaScript GET/POST XmlHttp Service Interop
  • Manual XmlHttp Service Creation
  •  
  • JavaScript/CSS/ASP.NET/C# Code Separation
  • Highly Cohesive Type Organization

This solution template could be used for the basis for production projects or as a training utility for people new to ASP.NET, people new to JavaScript, DOM Manipulation or AJAX or people who just want to learn how to organize their projects more effectively.

As with all my projects, but much more so with this one, I will be updating the solution template over time to account for more AJAX techniques and .NET technologies. I will also continue to expand the commentaries and lessons to the point where this solution itself becomes a case study, a sample application, and book all wrapped up in one.

Links

Reflections on Windows Mobile 6 and my T-Mobile Wing

The other day I got my new T-Mobile Wing. This phone is a Windows Mobile 6 device with a pullout keyboard and a whole world of cool features. Last year I had the T-Mobile MDA, which didn't last me a week. This phone fixes a ton of the common problems with Windows Mobile devices, but not only the ones you normally think of. For example, this phone has an almost rubbery texture to it so it doesn't fly across the car and get stuck under my passengers seat every time I dodge someone trying to cut me off. I absolutely love this phone and it was the only phone in the past 4 years that met my EXTREMELY high standards for technology. Before this I was on the Nokia 3650 for many, many, many years and before that I would pre-order and overnight a new $500 cell phone each year directly from Taiwan. So, it takes a lot for me to switch to and keep a phone.

With regard to my service... in my world, a 1500 minute cell plan costs $40.00 with no concept of "US long distance" (i.e. every thing is the US is local) and no concept of roaming (i.e. I can call from anywhere). Period. I have a million features and upgrades on my account, but even with my T-Mobile Hotspot wireless access to every Borders and Starbucks in the world that gives me high speed wireless Internet for BOTH my cell phone AND my laptop, my bill is still under $80 *including taxes*. Of course I also have the ability to switch phones on a whim by flipping out my SIM card and putting it into my old phone. This comes in very handy. For example, I'm not bringing my new phone to the beach. I'll put my SIM card in one of my Symbian phones for the day. If you want to put up with calling someone to switch YOUR service to another one of YOUR phones, then be my guest. Furthermore, EDGE networking is faster than GPRS and even though it's slower than 3G I'm not an impatient child and I since I get WiFi access at every Borders and Starbucks (and apartment complex via an unsecured Internet router setup by someone who can't read a step-by-step, large-print wireless router setup poster) in the world, I have no problems with speed.

Now... for those of you with Windows Mobile 6 devices, may I recommend that if you want to be as cool as the people with the iPhone, then you should get a few things. First, you seriously need to check out the Picsel web browser. IEMobile is actually an OK browser, Opera also good, and Minimo (Mobile Firefox)... doesn't even pretend to work. Picsel and IEMobile together is the way to go for people like me who loves FREE (as in root beer) much more than FREE (as in speech). Using Picsel you can do some of the the cool stuff the iPhone people are doing like showing the FULL web page in your screen and zooming in and out of it with your finger. I find it absolutely amazing for doing my daily bank account monitoring via my bank's website. It also helps tremendously with my NewEgg.com shopping. iPhone's Safari is a very nice mobile browser, so you don't have all the features... but you have the essentials. Now, for things that have a really nice mobile interface... use IEMobile. There's no point in trying to view the entire Amazon.com in a screen of only 2-3 inches. That's rather intolerable. Viewing a full website newspaper on my phone is NOT something that appeals to me. The point is to get the result you want, not to have a fancy "full" webpage.

Google, Gmail, Google Calendar, Amazon.com, and my ESV Bible have amazing mobile interfaces. Amazon.com one is particularly nice as you can even read book reviews. This came in VERY handy when I was a Borders last night where I wanted to compare local prices with Amazon's and also check out the reviews. So, I whipped out my mobile and looked at the ratings and reviews for each of the books I wanted. Gmail is also incredible as a mobile website. I should note that Windows Mobile 6 supports Gmail as a mail service and that is my primary way of getting mail. I get Gmail notifications on my phone just like any other mail system, but I still like Gmail mobile for browsing the mail already in my box. Google Calendar and my ESV Bible also fit their purposes very well. They are both very minimalistic, but that's how I like it. For websites like these, IEMobile is actually much nicer than Picsel. Needless features and fanciness or ads don't really do it for me on my mobile device.

Also, how about that cool Google maps feature for the iPhone? Guess what... it's a free download from Google for you Windows Mobile device. You can zoom in and out and navigate as needed just as you would do from your desktop web browser. Windows Mobile 6 also comes with Windows Live which also does something similar, though I find their interface less intuitive.

With those two utilities I feel my need to have an iPhone subsided (and guess what... I have MMS and can install my own apps, including ones I've created using the .NET Framework!) However, there are two major things that make an iPhone an iPhone and I'm NOT going to list "it has a real operating system on it" as one. As cool as that is, it's pointless (where's the shell access?) First, the multi-touch surface. That's just insanely awesome. I have so many designs in my head for things I can do with Microsoft Surface it's not even funny anymore. I *NEED* Microsoft Surface now so I can start building my apps! I can't wait until I and throw away this stupid keyboard and mouse paradigm and start using an interaction system that's actually intuitive (ohhhh how I hate the keyboard-- and ohhh how I wish they would STOP putting a CAPS lock key on there-- it's the most worthless and pointless key ever thought up) Alas, I don't have any multi-touch with my Windows Mobile 6 device. Second, this phone uses a MicroSD card and the largest SD card that's affordable by mere mortals is a 2GB card. What? 2GB? That's NOTHING. The iPhone has 8GB of space and that will probably be doubled very soon. On the bright side though... I can install applications, documents, and data sources (i.e. XML or SQL Server 2005 Compact Edition databases) into my 2GB whereas the iPhone people can only download battery draining music and videos into their 8GB.

As a footnote, let me mention some non-free applications that I'm using. The first is one of the most amazing applications I've ever seen: NewsGator Go. I don't really like their desktop application and as software designer of the Google design school of thought I much prefer the minimalistic Google Reader over the Yahoo-ish NewsGator online. However, their mobile application is just great. To set it up I exported my OPML from my Google Reader and imported it into the online NewsGator and simply logged into my NewsGator Go. It automatically downloaded my settings and updated my RSS feeds. Now THAT'S good software design! I should NEVER be forced to do ANY setup of ANYTHING on my mobile device... Gosh I would LOVE to have a web interface on my desktop to access the Windows Mobile 6 settings.

The other application I use is one that I'm seriously growing addicted to: OneNote 2007 . At this point, I'm talking about the desktop version. It's basically like a personal wiki that just stores all your ANYTHING without you EVER needing to save. AGAIN, this is called good software design (are you taking notes?) Granted, this thing is in absolute desperate need of an online version with magically auto sync and without that feature I'm going to continue to use my own personal wiki to store all my important notes and drafts (BTW, in case you didn't know: MediaWiki is FREE and runs on Linux AND Windows; Apache AND IIS). Still, it does auto sync with OneNote Mobile on my Windows Mobile 6 Device. However (and this is a HUGE however), OneNote Mobile is completely worthless to me because there is absolutely NO option for "send this note". I'm not sure what the people were thinking when they designed that application, but that's fatal design flaw in the same category as Apple's forgetting to add MMS to the iPhone and the IE team forgetting that the W3C runs the web standards, not the IE team.

Lastly, I feel I should at least mention that Money 2006 for Windows Mobile is a free download from Microsoft's website. I'm a local, small town banking person as long as that local, small town bank has a website where I can track my money. I don't really need a WS-Security service to access my information, though that would be nice, but I do need a way to track my daily expenses without using Excel. Money 2006 for Windows Mobile fills this need for my very well.

Minima and Data Feed Framework Renamed and Explained

As of today I'm renaming any of my CTP releases to simply... "releases". That is, my Minima February 2007 CTP is now "Minima - February 2007 Release" and my Data Feed Framework February 2007 CTP is now "Data Feed Framework - February 2007 Release".

The motivation behind these is different for each. With regard to Minima, I knew it wouldn't be a long term or real production project, so announcing it as a CTP was a mistake on my part. Not a big deal. Lesson learned. Furthermore, I knew from the start that it would be more of a training tool than anything else. With regard to my Data Feed Framework (DFF), after using it in various areas I realized that my initial release was sufficient for most scenarios.

As a reminder... what is Minima? Minima is an ASP.NET 2.0 blog engine built using a SQL Server 2005 database and an LLBLGen Pro 2.0 DAL that provides the base functionality that most technical bloggers would need. Since it's initial release I've added some functionality to my own instance of Minima and have used the February 2007 release as a training tool numerous times. Moving forward I want to make it very clear that Minima is primarily a training tool and a such, it's a blog template that people learning ASP.NET can enhance and upgrade to aide in their own personal learning. Having said that, Minima is a full fledged blog engine and it does have features such as labels and the ability to have more than one URL point to the same entry. In any case, if you want something to help you learn the various components of ASP.NET, please feel free to take Minima and use it as you please (see attribution/licensing note below).

By using Minima as a training tool you can learn much about base ASP.NET technology as well as manual Ajax prinicples, CSS theming, HttpWebRequest, proper use of global.asax, framework guidelines, and type organization. Furthermore you can use it to learn WCF, the power of HTTPHandlers, and how to effectively utilize LLBLGen Pro. I will try to release versions of Minima to demonstrate the new technologies of the day. For example, when ASP.NET Ajax matures a bit (I find it slower than a dead turtle right now), I'll be adding portions to demonstrate ASP.NET Ajax. However, I will not be adding new functionality for the sake of functionality. If the functionality can be used as a training tool, then I will add it. Also, Minima is a great way of learning WPF. How so? I deliberately did NOT include a client! Why? Because I would rather you use whatever you want to use to create a simple form to access the API via WCF. The client I use a very basic WPF client that calls the Minima WCF service. So far, Minima has been a very effective learning tool and I hope you will find it useful as well.

As far as my Data Feed Framework (DFF). What is it? It's a self-contained framework that converts SQL statements into RSS feeds. I've used this in a number of places where creating a manual RSS feed and MANAGING the RSS feeds would just be too time consuming. For example, say you have a ASP.NET 2.0 e-commerce website and you have new products released at various intervals. Well, it would be AWESOME if you had an RSS feed to announce new products and sales without having to send out an ethically questionable e-mail blast. With DFF, you simply write something like "select Title=ProductName, Description=ProductDescription from Product where ProductDate > '7/11/07' order by ProductDate desc" and BAM you have an RSS feed. Since an RSS feed is simply a select statement in a column in a row in a SQL Server table, you could also use it to dynamically create a custom feed for each person who wants to monitor the price of a certain product. It's very flexible. RSS feeds are accessible via their name, their ID, or you can use a "secret feed" to force a feed to be accessible via GUID only. DFF also includes some templating abilities to help customize the output of the RSS feed. In addition to the DFF SQL to RSS engine, DFF also includes an ASP.NET 2.0 control called an InfoBlock that allows you to consume any RSS feed and display it as an XHTML list. You can see an example of how to use an InfoBlock my looking at my blog. The boxes on the right are InfoBlocks which allow me to manage my lists using a SQL Server table (the DFF database contains a Snippet and a SnippetGroup table to store autonomous information like the information in these lists--please see the documentation for more information). DFF is creating secret RSS feeds that my own personal version of Minima then consumes. With this as an example, it should be easy to see how DFF can be used in portals. My DFF demonstration video shows a bit more of that.

For more information regarding my Data Feed Framework (DFF), please skim the concise documentation for Data Feed Framework linked below. It would also probably be a good idea for you to watch my short video documentation for DFF as well. Please note that even though DFF is designed to be a production framework, it too can be used as a training tool. The most obvious thing you can learn is how to create data-bound server controls for ASP.NET 2.0 as this is exactly what an InfoBlock is.

You may use either the SQL->RSS engine or the InfoBlock portion or both. It's up to you. Also, as with all my .NET technologies that I create, the source and database files are included for extensibility and so you may use these as training tools (for yourself or for others). Lastly, for both Minima and Data Feed Framework, please remember to keep the license information intact and make it very clear that your work either uses or is based on either whichever product you are using.

Minima - Links

Data Feed Framework - Links