Sergio and the sigil

Please open my .aspx fast

Posted by Sergio on 2008-11-22

Still in the topic of performance, I'll throw a little freebie. Visual Studio seems to take an inordinate amount of time to open .aspx files for the first time. I noticed that the status bar read "Initializing toolbox..." for a long time. I'm mentioning .aspx but it really applies to any other webforms markup like .ascx and .master as well.

Heck, I don't even have the toolbox loaded, docked, or hidden in my IDE. I don't use the toolbox at all for web develoment. I'm more of a source view kind of programmer. So why should I be penalized like that?

I shouldn't. Here's what I did to speed that up:

  • Show the toolbox
  • Right-click and select "Choose Items..."
  • Uncheck every item that the namespace contains "Web" (I also unchecked controls that I can't stand, like the database connections and data sources.)
  • Click OK to save that, close the toolbox again and enjoy your precious stolen time again.

Video - Core, an AOP Framework

Posted by Sergio on 2008-11-07

Wow, that took a long time to be published, but here it is. This video was recorded during the October's meeting of Chicago ALT.NET that happened almost just about a whole month ago.

The video shows Josh Heyse demonstrating and explaining the works of the AOP framework called Core. What the video doesn't show is who's that voice that also knows a lot about Core. That would be Anthony Green, who developed Core with Josh.

ViewEngines at Chicago ALT.NET

Posted by Sergio on 2008-10-30

One of the reasons I've been mucking with NHaml is the upcoming meeting of the Chicago ALT.NET group.

The plan is to talk about NHaml and Spark (and maybe Brail), comparing equivalent implementations of a simple website written in ASPX, NHaml and Spark. The meeting is on November 12th, see registration link below for details.

The Different Views of ASP.NET MVC

6:00 pm
Pizza and networking time

6:30 pm
The default ASPX view engine in ASP.NET MVC is fine and comfortable but as with just about anything in ASP.NET MVC, you can replace it with alternative engines — and there are a few of those available.

We will be giving an overview of some of the alternative view engines, showing how to install and use them, what brought them about, and why would you use them.

7:45 pm
You may want to stick around after the presentation portion of the meeting and take part in our monthly open discussion. The topic is never arranged in advance but it's common that it reflects the content of the presentation.

ASP.NET MVC and NHaml

Posted by Sergio on 2008-10-29

I started playing with NHaml lately for sheer curiosity. It comes with MVCContrib and that's what I've been using to explore it.

I'm not completely on board yet that you'll want to write all your views, for all kinds of application scenarios using NHaml. I know someone will probably jump out and say that their entire site was built with NHaml and it's wonderful. I'm sure it can be done, I'm just still wondering if it's more trouble than necessary. On the other hand, if you are starting a new application from scratch (i.e. you are not inheriting any existing template or that sort of thing,) then NHaml can guide you through a different way of thinking about your views and simplify them a lot.

I might have already said this before, but I'm generally in favor of working as close to the platform as possible and viable. That's why I'm not a big fan of things like Script#, RJS, and Volta. NHaml is almost in the same category but it does bring some nice things to the table and that's why I'm not ready to dismiss it just yet. Just take a look at what our HTML looked like circa 1998 and what it is now with richer CSS and JavaScript.

As much as I can, I try to separate my (X)HTML from my CSS and my JavaScript. Sometimes it gets to the point that I wonder why I am using HTML to begin with — it's all data and structure. I wonder how long until we have a WikiText or MarkDown view engines.

NHaml fits well for these kinds of well-separated HTML views. It does away (kind of) with the HTML tags and focus on the structure and meaning of each piece of information. Because it defines structure in a way that works well with CSS, it also works great with jQuery for our JavaScripts. It's unobtrusive JavaScript heaven!

I think the key to learning NHaml is forgetting about HTML and its tags (or at least don't focus on them). Forget that the page ultimately rendered will be in HTML. For a moment just visualize the areas of the page as meaningful pieces of data: sidebar, lists, headings, article title, article body, author name, navigation tabs, etc, not divs, tables, spans, fieldsets, etc.

Less Noise More Content

The most obvious impression you get when looking at a NHaml template for the first time is how skinny it is compared to any tag-based template. Your eyes are used to look for angle brackets to help you understand the structure of the document, but in NHaml the indentation serves that purpose.

Take a look at a common template to create a grid of products in ASPX.

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
	<head>
		<title><%= ViewData["pagetitle"] %></title>
	</head>
	<body>
		<h1>All Products</h1>
		<table class="grid" id="products">
			<tr>
				<th>ID</th>
				<th>Name</th>
			</tr>
			<% foreach(var prod in (IEnumerable<Product>)ViewData["products"])  { %>
				<tr>
					<td><%= prod.ID %></td>
					<td><%=  prod.Name %></td>
				</tr>
			<% }  %>
		</table>
		<input type="button" value="Say Hi" onclick="alert('Hi');" />
	</body>
</html>

Now take compare that to the NHaml version.

!!! XML
!!!
%html
  %head
    %title= ViewData["pagetitle"] 
    %body
      %h1 All Products
        %table.grid#products
          %tr
            %th ID
            %th Name
          - foreach(var prod in (IEnumerable<Product>)ViewData["products"])
          %tr
            %td= prod.ID
            %td= prod.Name
        %input{ type="button", value="Say Hi", onclick="alert('Hi');"}/

Never Forget a Closing Tag Again

Having meaningful indentation brings the common advantage of needing to explicitly mark the end of a block, making that automatic. In other words, the closing tags are added at the right places for you. That's something I value a lot.

Identifiers and Selectors, Css-Friendly

By now, after looking at the above NHaml sample a few times, you probably noticed that the class and id attributes are set using a dot and a # sign, respectively.

%table.grid#products

Created with Community Server

Posted by Sergio on 2008-09-25

Don't you hate when tools try to promote themselves in your work, especially if you paid for them?

Last night I was noavigatin around in Reflector when I stoped by the embedded resource named System.Data.Odbc.OdbcMetaData.xml (in System.Data.dll 2.0). What I saw was both familiar and a little aggravating.

<?xml version="1.0" standalone="yes"?>
<!-- edited with XMLSPY v5 rel. 4 U (http://www.xmlspy.com) by Carl Perry (Microsoft) -->
<NewDataSet>
    ... xml content here ...
Filed under: