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

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.


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

Moonlight: Mono's Silverlight

Here's something rather interesting... the developers on the Mono team "hacked" Silverlight and it only took them 21 days to do it. They are calling their own product "Moonlight", which I have to admit is a much cooler product name than Silverlight.

Project details as well as some internal information including a bit of information about Silverlight internals are are the link below. Even if you care nothing about Mono or Moonlight, if you have any interest in Silverlight at all you should check it out simply for that.

This is actually really cool as it should seriously help promote Silverlight as a de facto standard worldwide, but I doubt anyone will be making a documentary called "21 Days" any time soon.

Silverlight's Adoption as Public De-Facto Standard

Recently there have been comments floating around the internet and around conferences that Microsoft's Silverlight needlessly uses XAML as its mark up language where it should have used SVG (Scalable Vector Graphics). The argument here is based on the idea that since SVG is a vector technology accepted in all web browsers except IE, Microsoft should have used it instead of XAML and then simply added support for SVG to IE. While this seams to some to be a valid criticism and a good point to some of the web standards world, it is absolutely groundless and carries no weight.

Silverlight can be viewed as a web extension of the Windows Presentation Foundation (WPF), a .NET 3.0 technology and not simply as a new web technology. As such, it makes sense that Silverlight uses XAML, not SVG. If Silverlight were based on SVG, then there would be a chasm between Silverlight and the .NET Framework, but as it stands Silverlight's use of XAML makes it part of the .NET family. In fact, it’s important to note that elements in XAML usually represent objects in the .NET Framework; this would simply not be possible in SVG. Therefore, by choosing to use XAML over SVG, Microsoft kept SVG pure by not add proprietary technology to it.

Furthermore, SVG is "Scalable Vector Graphics" and as the name suggests it for vector graphics. If Microsoft were to start out with SVG as their base technology they would quick to add UI controls to it thereby altering it making it a Microsoft dialect of SVG, which would not be SVG at all. This would take the entire web world back to the same disasters that were seen in proprietary HTML elements, proprietary CSS selectors and rules, and proprietary JavaScript dynamics (i.e. "DHTML behaviors"). Aside from the architects and developers on the Internet Explorer team, the world, including Microsoft as a whole, thankfully has a lot more respect for specifications and standards than this.

Standards advocates should be very satisfied with Microsoft's decision to start from scratch on this one. Standards, as they are normally referred to as, deal with standardization and thereby allow everyone to talk about the same technology without proprietary terminology or technology. If Microsoft sets an explicit syntax on a well-defined language, publicly states the specification for the language, and makes it a multi-platform language, then the world has basically the same result that a standard would have (this point will be hit again in a moment.) While it's true that "popular" doesn't make things right (something most people learn early in high school) and that statements about "most people" do not mean a single thing, having a well-defined technology set with a set specification does make it a first class technology.

We can see this in the ECMA-334 (C#) specification. Microsoft could have taken JavaScript and forced it to obey the Common Language Specification (CLS) and pawned it off as the primary .NET Language, but they instead chose to create something entirely new and then publicly displayed the specification for it. So when .NET guides are written the samples usually have code for C# and VB, instead of JScript and VB. Those who criticize Microsoft for not using SVG as their client-side technology probably applaud Microsoft for creating a new programming language.

Lastly, it should be noted that one of the primary purposes of using the web as a platform is to make something more accessible. People should be able to use any sufficiently advanced web browser to access a web page or web application anywhere on the entire Internet. Truly, even if an application is created in a corporate environment, if the technologies used are proprietary to any one specific web browser, the primary purpose of using a web browser is defeated and using a smart client would probably give a much richer experience and result. So, while it is true then that the use of proprietary technology, such IE specific content, defeats the entire purpose of using the web as a platform, if a technology is spread enough, is on enough platforms, and allows integration into their current environment (i.e. Firefox, Safari, Opera), it doesn't need to be a standard because it would achieve the same result as a standard. Flash is probably the best example of this.

In conclusion, there should not be much fuss about Microsoft's new "Flash-killer" using what some would view as private corporate technology. As long as there is support for Silverlight in Firefox, Opera, Safari on Windows, Mac OS X, and Linux and a seamless installer experience, there shouldn't be any problem with a rapid world wide adoption of this new technology. Hopefully Silverlight's adoption into the web as a de-facto standard will silence many forms of critisism about it and help prompt developers to do a better job of creating intranet and Internet solutions for muliple platforms and multiple web browsers.