<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

 <title>Kyle LeNeau</title>
 <link href="http://kyleleneau.com/atom.xml" rel="self"/>
 <link href="http://kyleleneau.com/"/>
 <updated>2015-10-07T07:12:12+00:00</updated>
 <id>http://kyleleneau.com</id>
 <author>
   <name>Kyle LeNeau</name>
   <email></email>
 </author>

 
 <entry>
   <title>Is This Thing Still On</title>
   <link href="http://kyleleneau.com/is-this-thing-still-on"/>
   <updated>2015-10-07T00:00:00+00:00</updated>
   <id>http://kyleleneau.com/is-this-thing-still-on</id>
   <content type="html">&lt;p&gt;Wow, it has been a long time since the last post. Since I don&amp;#39;t think anyone is reading this and late I wanted to make sure the tires were kicked. I updated the theme tonight to use the wonderful template from &lt;a href=&quot;https://github.com/poole/hyde&quot;&gt;poole&lt;/a&gt;. I like it so far, much less to maintain.&lt;/p&gt;

&lt;p&gt;Like most bloggers I have great dreams of filling this up with code samples, musing, and deep thoughts. Here is to hoping I don&amp;#39;t waste time and get words on the screen. Whiskey in hand, lets make it happen. Be back soon!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Smart Windows of the Future</title>
   <link href="http://kyleleneau.com/2012/01/15/smart-windows-of-the-future/"/>
   <updated>2012-01-15T00:11:00+00:00</updated>
   <id>http://kyleleneau.com/2012/01/15/smart-windows-of-the-future</id>
   <content type="html">&lt;p&gt;This is awesome, I want one of these in my house! Can you imagine a weather overlay on it or watching the news. The blind feature is by far the coolest, minimal design saves me from curtains.&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;http://www.youtube.com/embed/m5rlTrdF5Cs&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;
</content>
 </entry>
 
 <entry>
   <title>Welcome To My New Octopress Blog</title>
   <link href="http://kyleleneau.com/2012/01/14/welcome-to-my-new-octopress-blog/"/>
   <updated>2012-01-14T22:19:00+00:00</updated>
   <id>http://kyleleneau.com/2012/01/14/welcome-to-my-new-octopress-blog</id>
   <content type="html">&lt;p&gt;Well, this is the obligatory first post of any new blog. Recently I have been itching for an excuse to start a new project. Setting up a blog seemed liked a good use of time. In the process I learned how to once again setup a Ubuntu Server, host private git repositories, use git with multiple remotes, and install and configure various linux packages.&lt;/p&gt;

&lt;h3&gt;Who am I?&lt;/h3&gt;

&lt;p&gt;My Name is Kyle LeNeau, I&amp;#39;m a software developer/engineer/architect living the Minneapolis, MN area. I enjoy learning and experiencing new technologies and I can usually pick something up rather quickly. My main areas of focus recently have been in Web Application Development and Mobile Development. Coding is my passion and I have been doing it professionally for the last 6+ years.&lt;/p&gt;

&lt;h3&gt;What&amp;#39;s Octopress?&lt;/h3&gt;

&lt;p&gt;As the title of this post states, this is my new blog powered by &lt;a href=&quot;http://octopress.org&quot;&gt;Octopress&lt;/a&gt; which happens to be an open source project hosted over at &lt;a href=&quot;http://raw.github.com/imathis/octopress&quot;&gt;github&lt;/a&gt;. The framework is very different than other blogging engines like &lt;a href=&quot;http://wordpress.org&quot;&gt;Wordpress&lt;/a&gt; since it&amp;#39;s output is static html files instead of being dynamically rendered from php and a database. Static sites were the original websites back in the day. If you wanted to host something online you needed to know Html at a minimum. Today, we have higher level languages that let us &amp;quot;speak&amp;quot; more naturally and code generators to take what we &amp;quot;speak&amp;quot; and output something else. This is what &lt;a href=&quot;http://octopress.org&quot;&gt;Octopress&lt;/a&gt; does, it takes files written in the &lt;a href=&quot;http://daringfireball.net/projects/markdown/&quot;&gt;Markdown&lt;/a&gt; language and processes them through a series of templates using Ruby to output a directory of Html files.&lt;/p&gt;

&lt;h3&gt;Why Static Content?&lt;/h3&gt;

&lt;p&gt;Bottom line, static sites are fast.  There is no processing or scripting time required by the server to output the Html to the browser.  The server receives a request to an html file, finds it on the server, and then opens it for reading back to the browser. The great thing about this is that the server doesn&amp;#39;t need to be anything spectacular. Also, with the use of caching and web server choice you can really hit the sweet spot when it comes to performance and out of pocket cost.&lt;/p&gt;

&lt;p&gt;As I see it, this blog is a back to basic for me. I would like to find my voice in the world and start sharing my various experiences so that one day someone will read this and find it useful. I am always consuming content on the internet, now is my chance to give something back and fill in some gaps I have encountered so that others don&amp;#39;t have to.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Json.Net Action Result with Asp.Net MVC</title>
   <link href="http://kyleleneau.com/programming/2010/10/08/json-dot-net-action-result-with-asp-dot-net-mvc/"/>
   <updated>2010-10-08T08:00:00+00:00</updated>
   <id>http://kyleleneau.com/programming/2010/10/08/json-dot-net-action-result-with-asp-dot-net-mvc</id>
   <content type="html">&lt;p&gt;Well this has probably been done 100 times before but so what, the world could always use more code. When working with ASP.Net MVC I started and fell in love with &lt;a href=&quot;http://james.newtonking.com/pages/json-net.aspx&quot;&gt;James Newton-King&amp;#39;s Json.Net library&lt;/a&gt;.  It is simple awesome and does an amazing job in different parts of my app.  The control over the serialzation and deserialization is very good and thought it would be well suited for my MVC application.&lt;/p&gt;

&lt;p&gt;You might be thinking, why not just use the one that comes with .Net. It&amp;#39;s in the box and is just as good. Well my preference was control, I wanted to control my model better and I wanted to output Json differently in different situations. So I created a new ActionResult that does just that but with the &lt;a href=&quot;http://james.newtonking.com/pages/json-net.aspx&quot;&gt;Json.Net library&lt;/a&gt;.  Enjoy!&lt;/p&gt;

&lt;p&gt;Example usage in any controller action:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-csharp&quot; data-lang=&quot;csharp&quot;&gt;&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ActionResult&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Year&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Month&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Year&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;Year&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DateTime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Now&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Year&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Month&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;Month&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DateTime&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Now&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Month&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;calendarMonth&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_calendarService&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;GetCalendarMonth&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Year&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Month&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;IsAdmin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;());&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;JsonNetResult&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;calendarMonth&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;script src=&quot;https://gist.github.com/606739.js&quot;&gt; &lt;/script&gt;
</content>
 </entry>
 
 <entry>
   <title>Simple Asp.Net MVC Navigation Menu</title>
   <link href="http://kyleleneau.com/programming/2010/10/01/simple-asp-net-mvc-navigation-menu/"/>
   <updated>2010-10-01T13:44:00+00:00</updated>
   <id>http://kyleleneau.com/programming/2010/10/01/simple-asp-net-mvc-navigation-menu</id>
   <content type="html">&lt;p&gt;Well it&amp;#39;s October first, it has been a really long time since I have last written anything. Oh well.  Recently I have been working on applying some updates to an MVC site I maintain, as usual I updated the dependencies, ran some tests, and looked over the code.  It&amp;#39;s been a while since I last opened the project since it has been in production.  Of course, I was not happy with a couple things in the application and was constantly fixing the same bugs in the navigation menu.&lt;/p&gt;

&lt;p&gt;There are always the same questions with a navigation menu, how do you render the html, how do you know what item is selected, how to achieve 2 level menus, and how do you trim by security.  To give some history; I went from defining only a single level with no selection (action links in an un-ordered list).  Then I found a project on &lt;a href=&quot;http://codeplex.com/&quot;&gt;codeplex&lt;/a&gt; called &lt;a href=&quot;http://mvcsitemap.codeplex.com/&quot;&gt;ASP.NET MVC SiteMap Provider&lt;/a&gt;, this is great it has a ton of features, fits the provider model of ASP.Net, easy to define and use in simple cases.  Unfortunately, it is not as mature as I would like.  Plus it adds another dependency that is hard to work with and does not always work the way I would expect it to.  Needless to say it is buggy (my opinion and experience only, others may differ).&lt;/p&gt;

&lt;p&gt;Which brings me to my subject line.  I wanted to create my own navigation system and have full control over the levels, rendering and selection of the items. Perfect, I needed a partial to render the menu and top level items in my own un-ordered list. I also needed some helpers to render those items in my partial, in this case the top level is a list of my controllers. &lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-html&quot; data-lang=&quot;html&quot;&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;ul&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;navigation&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;err&quot;&gt;&amp;lt;&lt;/span&gt;%= Html.NavItem(&amp;quot;Home&amp;quot;)%&amp;gt;
    &lt;span class=&quot;err&quot;&gt;&amp;lt;&lt;/span&gt;%= Html.NavItem(&amp;quot;Calendar&amp;quot;)%&amp;gt;
    &lt;span class=&quot;err&quot;&gt;&amp;lt;&lt;/span&gt;%= Html.NavItem(&amp;quot;Media&amp;quot;)%&amp;gt;
    &lt;span class=&quot;err&quot;&gt;&amp;lt;&lt;/span&gt;%= Html.NavItem(&amp;quot;Messages&amp;quot;, &amp;quot;Forum&amp;quot;, &amp;quot;Index&amp;quot;)%&amp;gt;
    &lt;span class=&quot;err&quot;&gt;&amp;lt;&lt;/span&gt;%= Html.NavItem(&amp;quot;Goods&amp;quot;, &amp;quot;Catalog&amp;quot;, &amp;quot;Index&amp;quot;)%&amp;gt;
    &lt;span class=&quot;err&quot;&gt;&amp;lt;&lt;/span&gt;%= Html.NavItem(&amp;quot;Links&amp;quot;, &amp;quot;Link&amp;quot;, &amp;quot;Index&amp;quot;)%&amp;gt;
    &lt;span class=&quot;err&quot;&gt;&amp;lt;&lt;/span&gt;%= Html.NavItem(&amp;quot;Contact&amp;quot;)%&amp;gt;
    &lt;span class=&quot;err&quot;&gt;&amp;lt;&lt;/span&gt;%= Html.LoginStatusNavItem() %&amp;gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;

&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;class=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;clearboth&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

&lt;span class=&quot;nt&quot;&gt;&amp;lt;ul&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;id=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;subnavigation&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;err&quot;&gt;&amp;lt;&lt;/span&gt;%= Html.SubNavListItems() %&amp;gt;
    &lt;span class=&quot;err&quot;&gt;&amp;lt;&lt;/span&gt;%= Html.NavItem(&amp;quot;Join Our Mailing List!&amp;quot;, &amp;quot;Contact&amp;quot;, &amp;quot;MailingList&amp;quot;) %&amp;gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;I also added a helper to render the login/logout link in the navigation based on whether the request was authenticated.  The second level navigation was where the work came in. Essentially I wanted to render some of the actions from the current controller based on a attribute assigned to the action. The rending will then sort the list based on the sort order and perform security trimming.&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-csharp&quot; data-lang=&quot;csharp&quot;&gt;&lt;span class=&quot;na&quot;&gt;[NavigationItem(&amp;quot;About Us&amp;quot;, 0)]&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ActionResult&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;Index&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;View&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;Index&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;GetIndexModel&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;());&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;[NavigationItem(&amp;quot;Secured Page&amp;quot;, 0), Authorize]&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ActionResult&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;Admin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;View&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;Index&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;GetIndexModel&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;());&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;In order to do that I created a custom Attribute to store the link text and the order it should be in.&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-csharp&quot; data-lang=&quot;csharp&quot;&gt;&lt;span class=&quot;na&quot;&gt;[AttributeUsage(AttributeTargets.Method, Inherited = false, AllowMultiple = false)]&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;internal&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;sealed&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;NavigationItemAttribute&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Attribute&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;NavigationItemAttribute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;NavigationItemAttribute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;order&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;Text&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;SortOrder&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;order&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Text&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SortOrder&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;After that I needed a way to cache all this information in order to look it up later from my helpers. Populating this cache involves doing some basic reflection and type checking of controller actions. Then storing the results in a dictionary based on controller name as the key and a list of actions with the NavigationItemAttribute (stored as a ControllerNavigationItem, which is a POCO object to store data).  Since I only wanted to do this reflection once, I created a singleton to do the work.&lt;/p&gt;

&lt;script src=&quot;https://gist.github.com/606514.js&quot;&gt; &lt;/script&gt;

&lt;p&gt;Finally to render the second level navigation I look up the list based on the current controller and loop over the items, only rendering the secure and authenticated items or the public items in the order defined by the attribute.&lt;/p&gt;

&lt;p&gt;In hindsight, there are some things I could have made better or more features I could support. Currently it just checks to see if your logged in and doesn&amp;#39;t take into account any specific roles on the action.  Also it lacks support for MVC 2 Areas, but I don&amp;#39;t have any yet so I will cross that bridge when I get to it. This solution was simply an exercise for me in creating a singleton, using reflection to find controllers and actions, and to fill a common need in an ASP.Net MVC application.  Hope you found this interesting or useful.&lt;/p&gt;

&lt;p&gt;Download the code &lt;a href=&quot;http://gist.github.com/gists/606514/download&quot;&gt;here&lt;/a&gt; or check out the &lt;a href=&quot;http://gist.github.com/606514&quot;&gt;Gist&lt;/a&gt; on &lt;a href=&quot;http://github.com&quot;&gt;Github&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>jMonthCalendar Options, Events, & Methods Documentation</title>
   <link href="http://kyleleneau.com/programming/2009/08/09/jmonthcalendar-options-events-methods-documentation/"/>
   <updated>2009-08-09T15:09:00+00:00</updated>
   <id>http://kyleleneau.com/programming/2009/08/09/jmonthcalendar-options-events-methods-documentation</id>
   <content type="html">&lt;p&gt;In this post I am going to cover all the custom event/options as well as methods that can be configured and used in jMonthCalendar.  All of these are options that can be supplied at initialization in order to manipulate the calendar further or be able to tie into some additional logic or rules.  As well as methods that are exposed for manipulating the calendar after initialization.  This is my first attempt at formal documentation, so bare with me.&lt;/p&gt;

&lt;h2&gt;Options&lt;/h2&gt;

&lt;h3&gt;containerId - default: #jMonthCalendar&lt;/h3&gt;

&lt;p&gt;Use this to configure where your calendar should be placed in the page. You must have a matching DOM element with the ID&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$.jMonthCalendar.Initialize({ containerId: &amp;#39;#MyContainerId&amp;#39; }, null);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;headerHeight - default: 50&lt;/h3&gt;

&lt;p&gt;This sets the height of the navigation header.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$.jMonthCalendar.Initialize({ headerHeight: 50 }, null);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;firstDayOfWeek - default: 0&lt;/h3&gt;

&lt;p&gt;This determines which day of the week weeks should start on (default 0 refers to sunday). Monday is 1, Tuesday is 2, etc.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$.jMonthCalendar.Initialize({ firstDayOfWeek: 1 }, null);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;calendarStartDate - default: new Date()&lt;/h3&gt;

&lt;p&gt;This determines which month to display when the calendar is first loaded. The default is to start in the current month (today).&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$.jMonthCalendar.Initialize({ calendarStartDate: new Date(2009, 1, 1) }, null);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;dragableEvents - default: true&lt;/h3&gt;

&lt;p&gt;This determines weather or not you want event blocks to be dragable. Note this depends on jquery.ui.dragable.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$.jMonthCalendar.Initialize({ dragableEvents: false }, null);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;dragHoverClass - default: &amp;#39;DateBoxOver&amp;#39;&lt;/h3&gt;

&lt;p&gt;This is the css class that is added when an element is being hovered over an acceptable date cell.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$.jMonthCalendar.Initialize({ dragHoverClass: &amp;#39;SomeCssClass&amp;#39; }, null);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;navLinks (object of values)&lt;/h3&gt;

&lt;p&gt;These are the label text and switches to determine the header navigation.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$.jMonthCalendar.Initialize({   
    navLinks: {
        enableToday: true,
        enableNextYear: true,
        enablePrevYear: true,
        p:&amp;#39;‹ Prev&amp;#39;, 
        n:&amp;#39;Next ›&amp;#39;, 
        t:&amp;#39;Today&amp;#39;,
        showMore: &amp;#39;Show More&amp;#39;
    }
}, null);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Events&lt;/h2&gt;

&lt;h3&gt;onMonthChanging&lt;/h3&gt;

&lt;p&gt;This event is triggered upon changing the calendar&amp;#39;s month. If the callback function returns false, the change will be prevented. Note: this would be an excelent point to do an AJAX call for the next months events.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;// supply this callback as an option with the collowing signature
$.jMonthCalendar.Initialize({
    onMonthChanging(newDate) { ... }
}, null);

// AJAX call sample for more events
$.jMonthCalendar.Initialize({
    onMonthChanging(newDate) { 

    }
}, null);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;onMonthChanged&lt;/h3&gt;

&lt;p&gt;This event is triggered after calendar&amp;#39;s month has been changed.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$.jMonthCalendar.Initialize({
    onMonthChanged(event, newDate) { ... }
}, null);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;onEventLinkClick&lt;/h3&gt;

&lt;p&gt;This event is triggered when the anchor tag of the event is clicked. Note: good place to link out to another page.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$.jMonthCalendar.Initialize({
    onEventLinkClick(event) { 
        alert(event.data.Event);
    }
}, null);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;onEventBlockClick&lt;/h3&gt;

&lt;p&gt;This event is triggered when the div container of the event is clicked. Note: this our the link click would be a good place to show tooltips.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$.jMonthCalendar.Initialize({
    onEventBlockClick(event) { 
        alert(event.data.Event);
    }
}, null);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;onEventBlockOver&lt;/h3&gt;

&lt;p&gt;This event is triggered when your mouse is over the event div container.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$.jMonthCalendar.Initialize({
    onEventBlockOver(event) { 
        alert(event.data.Event);
    }
}, null);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;onEventBlockOut&lt;/h3&gt;

&lt;p&gt;This event is triggered when you mouse moves off the event div container.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$.jMonthCalendar.Initialize({
    onEventBlockOut(event) { 
        alert(event.data.Event);
    }
}, null);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;onDayLinkClick&lt;/h3&gt;

&lt;p&gt;This event is triggered when the user clicks on the label of the day (number in upper right corner)&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$.jMonthCalendar.Initialize({
    onDayLinkClick(event) { 
        alert(event.data.Date);
    }
}, null);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;onDayCellClick&lt;/h3&gt;

&lt;p&gt;This event is triggered when the user clicks on the cell that contains the event div containers.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$.jMonthCalendar.Initialize({
    onDayCellClick(event) { 
        alert(event.data.Event);
    }
}, null);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;onDayCellDblClick&lt;/h3&gt;

&lt;p&gt;This event is triggered wehn the user double clicks ont eh cell that contains the event div containers.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$.jMonthCalendar.Initialize({
    onDayCellDblClick(event) { 
        alert(event.data.Event);
    }
}, null);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;onEventDropped&lt;/h3&gt;

&lt;p&gt;This event is fired after a user drags and drops and event onto a new day.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$.jMonthCalendar.Initialize({
    onEventDropped(event, calEvent, newDate) { 
        alert(calEvent);
        alert(newDate);
    }
}, null);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;onShowMoreClick&lt;/h3&gt;

&lt;p&gt;This event is triggered when the user wishes to &amp;quot;see more&amp;quot; events than what can be displayed in the cell. Note: this would be a good place to use a tooltip or dialog as well.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$.jMonthCalendar.Initialize({
    onShowMoreClick(dayEvents) { 
        // dayEvents is an array of events 
        alert(dayEvents.length);
    }
}, null);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Methods&lt;/h2&gt;

&lt;h3&gt;Initialize(options, eventArray)&lt;/h3&gt;

&lt;p&gt;This is the main method needed to be called to get a calendar on the page. You can initialize it with the options and event callbacks mentioned above to get a more custom plugin.    &lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$.jMonthCalendar.Initialize({ containerId: &amp;#39;#MyContainerId&amp;#39; }, []);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;ChangeMonth(newDate)&lt;/h3&gt;

&lt;p&gt;This method will change the current selected month of the calendar. This method will fire the callback onMonthChanging and onMonthChanged.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$.jMonthCalendar.ChangeMonth(new Date(2009, 1, 1));
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;ReplaceEventCollection(eventArray)&lt;/h3&gt;

&lt;p&gt;This will replace all events in the plugin with the new event array passed in. This will clear all existing events being displayed and redraw all the events after the replacement.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$.jMonthCalendar.ReplaceEventCollection([]);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;AddEvents(eventArray)&lt;/h3&gt;

&lt;p&gt;This method will add a single event to the plugin or an array of events by merging into the existing array of events. After which the method will clear all visible event on the calendar and draw the events in the updated array.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$.jMonthCalendar.AddEvents([]);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;ClearEventsOnCalendar()&lt;/h3&gt;

&lt;p&gt;This method will remove all the events in the plugin and and remove any being displayed.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$.jMonthCalendar.ClearEventsOnCalendar();
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content>
 </entry>
 
 <entry>
   <title>jMonthCalendar-1.3.2-beta Release</title>
   <link href="http://kyleleneau.com/programming/2009/08/09/jmonthcalendar-132-beta-release/"/>
   <updated>2009-08-09T00:21:00+00:00</updated>
   <id>http://kyleleneau.com/programming/2009/08/09/jmonthcalendar-132-beta-release</id>
   <content type="html">&lt;p&gt;I have released a new version of jMonthCalendar (1.3.2-beta).  Below I will provide a sample of the use of event callback as options.  Well this release is pretty straight forward for the most part.  It includes changes to how the custom events are fired mostly and addresses various bug fixes.  As well as includes some reduction in file size. &lt;strong&gt;UPDATE&lt;/strong&gt; Beta2 is released to fix some minor bug issues.&lt;/p&gt;

&lt;p&gt;Download location: &lt;a href=&quot;http://jmonthcalendar.googlecode.com/files/jMonthCalendar-1.3.2-beta.zip&quot;&gt;jMonthCalendar-1.3.2-Beta&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The biggest change in this release is how events are handled.  Before I was not passing the DOM event back to you for control, I was simply just calling the methods you configured as options and passing parameters.  Now, the original DOM event is bubbled up to the custom event in most cases.  Along with the original DOM event I am also stuffing in the custom data for the callback into the &lt;a href=&quot;http://docs.jquery.com/Events/jQuery.Event&quot;&gt;jQuery event object&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;jQuery provides a nice way of encapsulating the original DOM event into a &lt;a href=&quot;http://docs.jquery.com/Events/jQuery.Event&quot;&gt;jQuery event object&lt;/a&gt;.  A property on that object is &amp;#39;data&amp;#39; (which can be waht ever I want).  So now, all custom events are mostly passed one single parameter (with the exception of onMonthChanging and onShowMoreClick); the jquery typed event.  Inside that event object I have put the data I want to send back, like the date or event object clicked on.  Don&amp;#39;t worry I will get to a sample of what I am talking about.&lt;/p&gt;

&lt;p&gt;First I will start off by showing you the old way of doing it prior to this release.&lt;/p&gt;

&lt;h3&gt;OLD Way&lt;/h3&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$().ready(function() {
    var options = {
        onMonthChanging: function(dateIn) {
            // this could be an Ajax call to the backend to get this months events
            alert(&amp;quot;on month changing&amp;quot;);
            // $.jMonthCalendar.ReplaceEventCollection(events);
        },
        onEventLinkClick: function(calEvent) { 
            // calEvent will be the calendar event you clicked on
            alert(&amp;quot;event link click&amp;quot;);
            return true; 
        },
        onDayLinkClick: function(dateIn) { 
            // date might be wrong here, held reference from last item
            alert(dateIn.toLocaleDateString());
        }
    };

    $.jMonthCalendar.Initialize(options, []);
});
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Okay, so the obvious problem with that is that there is no way to get to the original DOM event.&lt;/p&gt;

&lt;h3&gt;NEW recommended Way&lt;/h3&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$().ready(function() {
    var options = {
        onMonthChanging: function(dateIn) {
            // this could be an Ajax call to the backend to get this months events
            alert(&amp;quot;on month changing&amp;quot;);
            // $.jMonthCalendar.ReplaceEventCollection(events);
        },
        onEventLinkClick: function(event) { 
            // event is the jQuery event passed
            alert(&amp;quot;event link click&amp;quot;);
            // can get to the actual calendar event now through the Data property
            alert(event.data.Event);
            // want to prevent event bubbling use:
            event.stopPropagation();
        },
        onDayLinkClick: function(event) { 
            alert(event.data.Date.toLocaleDateString());
        }
    };

    $.jMonthCalendar.Initialize(options, []);
});
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content>
 </entry>
 
 <entry>
   <title>Getting Started with jMonthCalendar</title>
   <link href="http://kyleleneau.com/programming/2009/06/12/getting-started-with-jmonthcalendar/"/>
   <updated>2009-06-12T11:46:00+00:00</updated>
   <id>http://kyleleneau.com/programming/2009/06/12/getting-started-with-jmonthcalendar</id>
   <content type="html">&lt;p&gt;So you are interested in using jMonthCalendar and are unsure how to start using it...?  Well hopefully I can give the 5 minute startup that will help you along the way.  In this post I will show you how to install and place a calendar on the page as well as show you how to populate the calendar with some events. Easy enough right?  I hope so.&lt;/p&gt;

&lt;p&gt;Getting started with jMonthCalendar is really quite easy, it is like any other Javascript library or jQuery plugin in that it requires a Javascript file and reference in the page.&lt;/p&gt;

&lt;h3&gt;Step 1 - Download&lt;/h3&gt;

&lt;p&gt;Well you will first need a copy of jQuery if you don&amp;#39;t already have one, I recomend jQuery 1.3.2 which can be found &lt;a href=&quot;http://docs.jquery.com/Downloading_jQuery#Current_Release&quot;&gt;here&lt;/a&gt;, you either want the uncompressed version or the compressed version depending on your preferences.&lt;/p&gt;

&lt;p&gt;You will will also need a copy of jMonthCalendar which can be downloaded &lt;a href=&quot;http://jmonthcalendar.googlecode.com/files/jMonthCalendar-1.3.1-beta.zip&quot;&gt;here&lt;/a&gt;.  The download contains the Javascript files, a sample html page, and some default css (which can be changed to suit your needs).&lt;/p&gt;

&lt;h3&gt;Step 2 - Include in Html&lt;/h3&gt;

&lt;p&gt;After the files are downloaded you will want to move them to a directory in your project/website that can be references either relativley or absolutly.  You&amp;#39;ll want to include a reference to the jQuery file you downloaded as well as the jMonthCalendar plugin.  You can place these references in the head of the html or the body, with Javascript it is all the same. You&amp;#39;ll want to put these two line in your html document:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;&amp;lt;script src=&amp;quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src=&amp;quot;js/jMonthCalendar.js&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;If you want to use the default styles now is the time to either copy the contents of the core.css (from the jMonthCalendar download) into your css file or include a reference in the head like so:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;&amp;lt;link href=&amp;quot;css/core.css&amp;quot; type=&amp;quot;text/css&amp;quot; rel=&amp;quot;stylesheet&amp;quot;&amp;gt;&amp;lt;/link&amp;gt;  
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Step 3 - Create place holder in the Html body&lt;/h3&gt;

&lt;p&gt;In order to draw the calendar on to the page, the plugin needs to know where to put it.  Add and empty div tag someplace in the body of the html like so: (The ID of the div is VERY important, you can change the ID but you must tell the plugin what it should look for through the options.)&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;&amp;lt;div id=&amp;quot;jMonthCalendar&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Step 4 - Initialize calendar on page load.&lt;/h3&gt;

&lt;p&gt;To draw the calendar after the page has loaded you will need to hook up that standard jQuery onLoad event.  This usually happens once on the page and is surrounded in a script block at either the top or the bottom of the page.  The safest place to do this is with another script block right after step 2.  This will create the calendar and draw it on the screen using the empty div you created in step 3.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;
    $().ready(function() {
    $.jMonthCalendar.Initialize(null, null);
    });
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Thats it! That is all you need to do in order to display the calendar on te page. There are of course configurable options and events that you can tie into to perform advanced operations but I will save that for another post. The next topic I will cover is, &amp;quot;okay now what...&amp;quot;, how to load events into the calendar.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; Added the first bits of documentation for the plugin &lt;a href=&quot;/2009/08/09/jmonthcalendar-options-events-methods-documentation/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>jMonthCalendar 1.3.0 Beta</title>
   <link href="http://kyleleneau.com/programming/2009/06/12/jmonthcalendar-130-beta/"/>
   <updated>2009-06-12T11:45:00+00:00</updated>
   <id>http://kyleleneau.com/programming/2009/06/12/jmonthcalendar-130-beta</id>
   <content type="html">&lt;p&gt;&lt;strong&gt;jMonthCalendar has reached a new milestone!&lt;/strong&gt; It now supports multi-day events (events that span multiple days).  Plus it retains all the same features as before including drag and drop and event stacking. This release is a huge change from the previous version and is thus labeled as Beta.  Most significant to the change is how events are rendered onto the calendar. In this post I am going to go over the new features and how they will affect existing users. I will also try to cover some of the new functionality and how it might be used.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Change Log&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Events that span multiple days with continuation over days, weeks, months, years.&lt;/li&gt;
&lt;li&gt;jQuery 1.3.2 Support&lt;/li&gt;
&lt;li&gt;Events are now pre-sorted for multi day events on top.&lt;/li&gt;
&lt;li&gt;&amp;quot;Show More Events&amp;quot; setting/hoot that passes the days worth of event object as an array.&lt;/li&gt;
&lt;li&gt;Start of jQuery UI theme support, arrows for spanning events.&lt;/li&gt;
&lt;li&gt;Removed initialize for static height and width, now all set on the main calendar using CSS (everything else is dynamic).&lt;/li&gt;
&lt;li&gt;Note: you must specify an EventID in the event objects, they are required now.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The biggest change to this release is the fact that multi-day events are being drawn now. In order to add this I had to make a huge amount of changes under the hood and thus I am adding a Beta to the release to warn people. At the same time I want to see how it behalves for people and fix any issues people might have.&lt;/p&gt;

&lt;p&gt;In the last release events were being appended into the table cell tag of the specified day. This created huge problems as you can&amp;#39;t do a column span on the event easily, plus how are you supposed to handle overflow and events that wrap over weeks or months. So I chose to rewrite how the events were drawn and make them absolutely positioned. I also added an object for each day on the calendar and set some properties, that made it a lot easier to reference the object from an array and grab the days worth of events.&lt;/p&gt;

&lt;p&gt;Some people may look into this and think that I have missed how to display &amp;quot;More Events&amp;quot; (events that overflow the day). I have left this out and added a hook instead. I was unable to settle on an implementation and with so many other good balloon pop ups, I thought I would leave it up to you. There is a new hook called onShowMoreClick that passes an array of events to it. The array of events is a representation to all the events for that day, including the non-visible ones. I hope to provide a series of usage posts on how this might be done using my favorite plugins.&lt;/p&gt;

&lt;p&gt;One last piece of information is regrading drag and drop events. They are supported with multi-day events even. They will fire the same hooks as in the past: onEventDropped (passing the event and the new date).&lt;/p&gt;

&lt;p&gt;Please let me know what you think in the comments, I am very proud of where this plugin has come so far and hope to keep pushing it&amp;#39;s feature set. If you experience any issues please feel free to leave a comment, email, or better yet; file an issue over at the Google Code Home page.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://jmonthcalendar.googlecode.com/files/jMonthCalendar-1.3.0-beta.zip&quot;&gt;Download From Google Code&lt;/a&gt;**
**&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>log4net Dynamic Properties in XML Configuration</title>
   <link href="http://kyleleneau.com/programming/2009/06/12/log4net-dynamic-properties-in-xml-configuration/"/>
   <updated>2009-06-12T11:34:00+00:00</updated>
   <id>http://kyleleneau.com/programming/2009/06/12/log4net-dynamic-properties-in-xml-configuration</id>
   <content type="html">&lt;p&gt;I just learned about a new feature today of log4net that would have saved me a few hours of time had I known or been able to find this earlier. I learned that you can have dynamic properties stored into log4net&amp;#39;s global context from code and then access them from the XML configuration file. This is useful in the case where dynamic configuration of log4net is needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My Case:&lt;/strong&gt; I have been building console application that will run nightly to sync some integration records and I wanted to setup logging in order to see that status of the job and gather some reporting information (counts, time run, etc). There was a catch though this process would run multiple times in a night but each time for a different customer. This would make it difficult to read the logs for a particular customer as all I would have to go on is the file date and time.&lt;/p&gt;

&lt;p&gt;I needed a way to break my log files into different customers yet retain the rolling file appender features of log4net. My first pass at with was to configure log4net using the basic configurator all in code and create the appender, with a dynamic file name, and set the level of the logger programmatically. This was not my preferred way but was my only hope to getting the application out of development. Then I found how to set properties into log4net&amp;#39;s global context and access them through the configuration file. I did run into a small problem that my app.config file was not being read in so I had to add these two variable to my assembly.    &lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;[assembly: log4net.Config.XmlConfigurator(Watch = true)]
[assembly: log4net.Config.Repository]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;My goal was to make the file name dynamic based on the CustomerID passed into the application. Please not the file tag as it is the ticket to my case.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;&amp;lt;log4net&amp;gt;
    &amp;lt;root&amp;gt;
        &amp;lt;level value=&amp;quot;INFO&amp;quot;&amp;gt;&amp;lt;/level&amp;gt;
        &amp;lt;appender-ref ref=&amp;quot;RollingLogFileAppender&amp;quot;&amp;gt;&amp;lt;/appender-ref&amp;gt;
    &amp;lt;/root&amp;gt;


    &amp;lt;appender type=&amp;quot;log4net.Appender.RollingFileAppender&amp;quot; name=&amp;quot;RollingLogFileAppender&amp;quot;&amp;gt;
        &amp;lt;file type=&amp;quot;log4net.Util.PatternString&amp;quot; value=&amp;quot;logs\logFile_%property{BrokerID}.txt&amp;quot;&amp;gt;&amp;lt;/file&amp;gt; 
        &amp;lt;appendtofile value=&amp;quot;false&amp;quot;&amp;gt;&amp;lt;/appendtofile&amp;gt;
        &amp;lt;rollingstyle value=&amp;quot;Size&amp;quot;&amp;gt;&amp;lt;/rollingstyle&amp;gt;
        &amp;lt;maxsizerollbackups value=&amp;quot;-1&amp;quot;&amp;gt;&amp;lt;/maxsizerollbackups&amp;gt;
        &amp;lt;maximumfilesize value=&amp;quot;50GB&amp;quot;&amp;gt;&amp;lt;/maximumfilesize&amp;gt;
        &amp;lt;layout type=&amp;quot;log4net.Layout.PatternLayout&amp;quot;&amp;gt;
            &amp;lt;conversionpattern value=&amp;quot;%date [%thread] %-5level %logger - %message%newline&amp;quot;&amp;gt;&amp;lt;/conversionpattern&amp;gt;
        &amp;lt;/layout&amp;gt;
    &amp;lt;/appender&amp;gt;
&amp;lt;/log4net&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Here is a sample of my log4net configuration section.  Please note the file tag and type attribute to be log4net.Util.PatternString. The pattern of the value is important to, it must be %property{property_name} to get the right replacement. This is the ticket to dynamic values.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;private static void InitLogger()
{
    //This is freaking awesome, put a property into the log4net context and using the 
    //  log4net.Util.PatternString type you can dynamically set values for the logging context from code.
    log4net.GlobalContext.Properties[&amp;quot;CustomerID&amp;quot;] = (CustomerID!= 0) ? CustomerID.ToString() : &amp;quot;Error&amp;quot;;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Here is an example of my small InitLogger.  This method is the very first item to be called when the main routine starts up. All that needs to be done now is get a logger and start logging.  A file will be created based on the CustomerID which in this case is retrieved from the command line arguments before InitLogger is called. If no CustomerID is passed in than the file will be to logFile_Error.txt&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;private static ILog Logger;

static void Main(string[] args)
{
    if (args.Length &amp;gt; 0)
        CustomerID= Util.GetInt(args[0]);

    InitLogger();
    Logger = LogManager.GetLogger(&amp;quot;Process&amp;quot;);
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pretty cool I think, I hope this saves people some headaches.  I wish I would have found this a few days ago.  Oh well it is to my benefit to learn.  Happy coding.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>ASP.NET Bundle launch giveaway</title>
   <link href="http://kyleleneau.com/2009/05/19/aspnet-bundle-launch-giveaway/"/>
   <updated>2009-05-19T09:01:00+00:00</updated>
   <id>http://kyleleneau.com/2009/05/19/aspnet-bundle-launch-giveaway</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://www.typemock.com/&quot;&gt;Unit Testing&lt;/a&gt; ASP.NET? &lt;a href=&quot;http://www.typemock.com/ASP.NET_unit_testing_page.php&quot;&gt;ASP.NET unit testing&lt;/a&gt; has never been this easy.&lt;/p&gt;

&lt;p&gt;Typemock is launching a new product for ASP.NET developers Ã¢â‚¬â€œ the &lt;strong&gt;ASP.NET Bundle&lt;/strong&gt; - and for the launch will be giving out &lt;strong&gt;FREE licenses&lt;/strong&gt; to bloggers and their readers.&lt;/p&gt;

&lt;p&gt;The ASP.NET Bundle is the ultimate ASP.NET unit testing solution, and offers both &lt;a href=&quot;http://www.typemock.com/&quot;&gt;Typemock Isolator&lt;/a&gt;, a &lt;a href=&quot;http://www.typemock.com/&quot;&gt;unit test&lt;/a&gt; tool and &lt;a href=&quot;http://sm-art.biz/Ivonna.aspx&quot;&gt;Ivonna&lt;/a&gt;, the Isolator add-on for &lt;a href=&quot;http://sm-art.biz/Ivonna.aspx&quot;&gt;ASP.NET unit testing&lt;/a&gt;, for a bargain price.&lt;/p&gt;

&lt;p&gt;Typemock Isolator is a leading &lt;a href=&quot;http://www.typemock.com/&quot;&gt;.NET unit testing&lt;/a&gt; tool (C# and VB.NET) for many hard to test technologies such as &lt;a href=&quot;http://typemock.com/sharepointpage.php&quot;&gt;SharePoint&lt;/a&gt;, &lt;a href=&quot;http://www.typemock.com/ASP.NET_unit_testing_page.php&quot;&gt;ASP.NET&lt;/a&gt;, &lt;a href=&quot;http://www.typemock.com/ASP.NET_unit_testing_page.php&quot;&gt;MVC&lt;/a&gt;, &lt;a href=&quot;http://www.typemock.com/wcfpage.php&quot;&gt;WCF&lt;/a&gt;, WPF, &lt;a href=&quot;http://www.typemock.com/Silverlight_unit_testing_page.php&quot;&gt;Silverlight&lt;/a&gt; and more. Note that for &lt;a href=&quot;http://www.typemock.com/Silverlight_unit_testing_page.php&quot;&gt;unit testing Silverlight&lt;/a&gt; there is an open source Isolator add-on called &lt;a href=&quot;http://www.typemock.com/Silverlight_unit_testing_page.php&quot;&gt;SilverUnit&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The first 60 bloggers who will blog this text in their blog and &lt;a href=&quot;http://blog.typemock.com/2009/05/get-free-typemock-licenses-aspnet.html&quot;&gt;tell us about it&lt;/a&gt;, will get a Free Isolator ASP.NET Bundle license (Typemock Isolator + Ivonna). If you post this in an ASP.NET &lt;strong&gt;dedicated&lt;/strong&gt; blog, you&amp;#39;ll get a license automatically (even if more than 60 submit) during the first week of this announcement.&lt;/p&gt;

&lt;p&gt;Also 8 bloggers will get an &lt;strong&gt;additional 2 licenses&lt;/strong&gt; (each) to give away to their readers / friends.&lt;/p&gt;

&lt;p&gt;Go ahead, click the following link for &lt;a href=&quot;http://blog.typemock.com/2009/05/get-free-typemock-licenses-aspnet.html&quot;&gt;more information &lt;/a&gt;on how to get your free license.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>jMonthCalendar: Minor Release 1.2.2</title>
   <link href="http://kyleleneau.com/programming/2009/05/01/jmonthcalendar-minor-release-122/"/>
   <updated>2009-05-01T09:02:00+00:00</updated>
   <id>http://kyleleneau.com/programming/2009/05/01/jmonthcalendar-minor-release-122</id>
   <content type="html">&lt;p&gt;Well it has been awhile since I posted anything new so I thought that I would provide a rundown of the minor new features and fixes in jMonthCalendar 1.2.2&lt;/p&gt;

&lt;p&gt;New Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dragable Events support using jQuery UI (Optional usage).&lt;br&gt;&lt;/li&gt;
&lt;li&gt;Add ability to enable or disable calendar links (today link, next year, and previous year). &lt;/li&gt;
&lt;li&gt;Default Next and Previous link text changed.&lt;br&gt;&lt;/li&gt;
&lt;li&gt;Added onDayCellDblClick event that passes the date you are double clicking. &lt;/li&gt;
&lt;li&gt;Added onEventDropped event that passes the event object and the new date being dropped into.&lt;br&gt;&lt;/li&gt;
&lt;li&gt;Removed my custom Date extensions and replaced it with &lt;a href=&quot;http://www.datejs.com/&quot;&gt;Datejs&lt;/a&gt;, more on this below.&lt;br&gt;&lt;/li&gt;
&lt;li&gt;Complete Build Process to build, pack and minify the source.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The drag and drop stuff is pretty cool and makes the calendar even slicker.  Have to provide props to the reader (&lt;a href=&quot;http://mattias-jakobsson.net/Item/19/Extended%20jMonthCalendar%20with%20drag%20n%20drop&quot;&gt;Mattias Jakobsson&lt;/a&gt;) who took it upon their own to add it in.  With the addition of the event when the event is dropped this would allow a developer to update an event using AJAX, allowing the user to easily reorganize events.  jQuery UI is not a dependency and this feature is totally optional.&lt;/p&gt;

&lt;p&gt;As for the date extension stuff, it was not something I wanted to maintain, and didn&amp;#39;t use that often.  I hope to add another option in the setup to allow for a date parsing options on the inbound JSON.&lt;/p&gt;

&lt;p&gt;Another item I am proud of is a unified build process.  I wanted to make releases as easy as possible so I thought I would spend some time learning ANT and looking at other scripts (jQuery, Dojo, and other projects for JavaScript).  I managed to write a pretty neat ANT script that will produce all the artifacts for a release and zip it up.  I will save the details for another post.&lt;/p&gt;

&lt;p&gt;The last point I will mention is now the ability to override the navigation links and turn them on or off depending on your usage.  This was asked for and was a simple addition to source.  If you have any suggestions, send them along I will add them in to the source if I feel they fit the project goal.  Below is an updated definition of all the options available for the plugin.&lt;/p&gt;

&lt;p&gt;FYI: The next release will make a change in how the calendar is sized and will absolutely position events over the calendar for Multi Day Event capabilities.&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-javascript&quot; data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;defaults&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;650&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;980&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;navHeight&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;25&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;labelHeight&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;25&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;firstDayOfWeek&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;calendarStartDate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Date&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;dragableEvents&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;activeDroppableClass&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;hoverDroppableClass&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;navLinks&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;enableToday&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;enableNextYear&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;enablePrevYear&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;‹ Prev&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
        &lt;span class=&quot;nx&quot;&gt;n&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;Next ›&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; 
        &lt;span class=&quot;nx&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;Today&amp;#39;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;onMonthChanging&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;dateIn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;onMonthChanged&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;dateIn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;onEventLinkClick&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;onEventBlockClick&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;onEventBlockOver&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;onEventBlockOut&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;onDayLinkClick&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;date&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;onDayCellClick&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;date&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;onDayCellDblClick&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;dateIn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;onEventDropped&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;newDate&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;locale&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;days&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;Sunday&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Monday&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Tuesday&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Wednesday&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Thursday&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Friday&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Saturday&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Sunday&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;daysShort&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;Sun&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Mon&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Tue&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Wed&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Thu&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Fri&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Sat&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Sun&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;daysMin&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;Su&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Mo&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Tu&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;We&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Th&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Fr&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Sa&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Su&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;months&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;January&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;February&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;March&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;April&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;May&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;June&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;July&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;August&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;September&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;October&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;November&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;December&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;monthsShort&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;Jan&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Feb&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Mar&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Apr&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;May&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Jun&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Jul&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Aug&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Sep&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Oct&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Nov&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot;Dec&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;weekMin&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;wk&amp;#39;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>New Project Home For jMonthCalendar</title>
   <link href="http://kyleleneau.com/programming/2009/03/24/new-project-home-for-jmonthcalendar/"/>
   <updated>2009-03-24T18:07:00+00:00</updated>
   <id>http://kyleleneau.com/programming/2009/03/24/new-project-home-for-jmonthcalendar</id>
   <content type="html">&lt;p&gt;It has been awhile since I have had anything to announce with jMonthCalendar.  I have been quite busy lately and have been procrastinating at bug fixes and enhancements.  Lately, I&amp;#39;ve been working on an idea to set up project wiki, issue, and source management system using  &lt;a href=&quot;http://www.redmine.org/&quot;&gt;Redmine&lt;/a&gt; and Subversion.  My current host does not play well with Subversion and was lacking on memory and access needed to run &lt;a href=&quot;http://www.redmine.org/&quot;&gt;Redmine&lt;/a&gt; the way I wanted.  So I have moved the project and source over to Google Code.&lt;/p&gt;

&lt;p&gt;A few weeks ago I started down the path of setting up a new server/host using &lt;a href=&quot;http://www.slicehost.com/&quot;&gt;SliceHost&lt;/a&gt; for the purpose of installing a Subversion server and a RoR application &lt;a href=&quot;http://www.redmine.org&quot;&gt;Redmine&lt;/a&gt;.  They are great, I can&amp;#39;t speak anymore highly of their product. Everything got setup and installed perfectly as expected.  I got the RoR app up quickly using &lt;a href=&quot;http://www.modrails.com/&quot;&gt;Phusion Passenger&lt;/a&gt; which saved me a ton of pain.&lt;/p&gt;

&lt;p&gt;Unfortunately I went to sleep worrying about how I was going to manage an application, open source project and still keep a secure Subversion repository and server while still being able to develop. The other night I decided I would save some and make by life simpler by moving the project over to code.google.com and ditch my slice. Google Code will, now going forward, provide jMonthCalendar a project home, wiki, issues, downloads and Subversion source control. It currently allows anonymous Subversion browsing and the ability to add members to the project for collaborative development.  Google code offers everything I would need for an open source project, allowing me to focus on the fun stuff, coding. Along with the new project home I also created a Google Group (found below) for open discussion, support, suggestions, etc.  Please feel free to stop buy and check it out.&lt;/p&gt;

&lt;p&gt;Comments and suggestions will be greatly appreciated, also if you are currently using jMonthCalendar please let me know, I would love to feature/link your site on the home page. Happy Coding.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;If you are interested in jMonthCalendar or looking for the new details, please see below.&lt;/strong&gt;
&lt;strong&gt;Latest Release:&lt;/strong&gt; jMonthCalendar 1.2.1 (bug fixes)
&lt;strong&gt;Downloads:&lt;/strong&gt; &lt;a href=&quot;http://code.google.com/p/jmonthcalendar/downloads/list&quot;&gt;http://code.google.com/p/jmonthcalendar/downloads/list&lt;/a&gt;
&lt;strong&gt;Project home:&lt;/strong&gt; &lt;a href=&quot;http://code.google.com/p/jmonthcalendar/&quot;&gt;http://code.google.com/p/jmonthcalendar/&lt;/a&gt;
&lt;strong&gt;Google Group:&lt;/strong&gt; &lt;a href=&quot;http://groups.google.com/group/jmonthcalendar&quot;&gt;http://groups.google.com/group/jmonthcalendar
&lt;/a&gt;*&lt;em&gt;Source Code: *&lt;/em&gt;&lt;a href=&quot;http://groups.google.com/group/jmonthcalendar&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://code.google.com/p/jmonthcalendar/source/list&quot;&gt;http://code.google.com/p/jmonthcalendar/source/list&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</content>
 </entry>
 
 <entry>
   <title>jMonthCalendar: Minor Release 1.2.0</title>
   <link href="http://kyleleneau.com/programming/2009/02/12/jmonthcalendar-minor-release-120/"/>
   <updated>2009-02-12T13:04:00+00:00</updated>
   <id>http://kyleleneau.com/programming/2009/02/12/jmonthcalendar-minor-release-120</id>
   <content type="html">&lt;p&gt;Wow, let me first start by saying it has been too long since I posted any updates on jMonthCalendar.  I hope that the new release of jMonthCalendar 1.2.0 excites you as much as it does me.  1.2.0 sets the stage for some pretty cool stuff. Continue reading to see a short list of the new features and where this project is going next.&lt;/p&gt;

&lt;p&gt;On the short list of new features there is: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Today Link (navigate back to today&amp;#39;s date)&lt;/li&gt;
&lt;li&gt;Year navigation, jump to &amp;#39;10 or back to &amp;#39;08 in the active month&lt;/li&gt;
&lt;li&gt;Ability to click a day cell or day link and fire your own custom logic (i.e. add event on that day)&lt;/li&gt;
&lt;li&gt;JSON date parsing, parse what some from that event object if the calendar is un-aware.&lt;/li&gt;
&lt;li&gt;Fixed in-line sizing, configurable by options construct&lt;/li&gt;
&lt;li&gt;Deprecating Date property, replaced by StartDate&lt;/li&gt;
&lt;li&gt;Added EndDate property to event object&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While not all of all of them seem flashy, the last three or four points make the calendar that much closer to having multi-day events and event overflow support.&lt;/p&gt;

&lt;p&gt;I am happy to report that I am currently using the calendar on an ASP.Net MVC site on my development machine. I hope to have a new calendaring system ready soon. This should concern you only because when I find issues while developing and using it, I fix them and everyone benefits. In more detail my calendar does a JSON GetData call to a controller actions, which executes and returns JSON formatted events. I am using &lt;a href=&quot;http://james.newtonking.com/projects/json-net.aspx&quot;&gt;James Newton-King&amp;#39;s JSON.Net&lt;/a&gt; library to map and serialize my C# objects. I use the attributes on my properties to rename or exclude them from serialization. Very nice library and commend James for the work.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>jMonthCalendar: Minor Relese 1.1.0</title>
   <link href="http://kyleleneau.com/programming/2009/01/29/jmonthcalendar-minor-relese-110/"/>
   <updated>2009-01-29T22:45:00+00:00</updated>
   <id>http://kyleleneau.com/programming/2009/01/29/jmonthcalendar-minor-relese-110</id>
   <content type="html">&lt;p&gt;I just finished posting a updated release for jMonthCalendar that can be found &lt;a href=&quot;/portfolio/jmonthcalendar&quot;&gt;here&lt;/a&gt;. This release mostly consists of a few bug fixes and a new features that have been suggested by fellow supporters (people who post comments, issues and suggestions, and anyone else I&amp;#39;ve missed). To those and everyone else I say: Thank you.&lt;/p&gt;

&lt;p&gt;Most of the bug fixes are internal but one notable thing I changed in my sample&amp;#39;s is the Event object JSON string. I have also extended the Event object to accept a CssClass and Description properties. &lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-csharp&quot; data-lang=&quot;csharp&quot;&gt;&lt;span class=&quot;c1&quot;&gt;//Before, (notice the lack of quotes to identify the property)&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;events&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;EventID&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Date&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Date&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;2009&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;10:00 pm - EventTitle1&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;URL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;#&amp;quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;EventID&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Date&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Date&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;2009&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;9:30 pm - this is a much longer title&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;URL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;#&amp;quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;//After: new properties and quotes property strings (better JSON)&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;events&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt; 
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;EventID&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Date&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Date&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;2009&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;10:00 pm - EventTitle1&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;URL&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;#&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Description&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;This is a sample event description&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;CssClass&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Birthday&amp;quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;EventID&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Date&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Date&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;2009&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;9:30 pm - this is a much longer title&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;URL&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;#&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Description&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;This is a sample event description&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;CssClass&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Meeting&amp;quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The new properties will allow for two things. One, the CssClass is placed onto the event block so that it can be styled with css easily. This could also be used like an event type or category. Second, the description allows for a more information, this is in conjunction with the feature below.&lt;/p&gt;

&lt;p&gt;An exciting new feature for some is the ability execute custom code (extension point) when hovering over/out an event. This will provide the ability to do something with the hovered event, like display a ballon/pup-up. The new feature is part of the options construct so it should be define like the example below.&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-javascript&quot; data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;options&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;onEventBlockOver&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;//of course this is rude example but you could to anything here and pass property values to it.&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;//Example, you could create UI ballon and display (set the scope higher) then destroy or close it on out.&lt;/span&gt;
        &lt;span class=&quot;nx&quot;&gt;alert&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Title&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&amp;quot; - &amp;quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Description&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;onEventBlockOut&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This was my solution to a comment that someone wanted balloon like pop-ups. I didn&amp;#39;t want to have to mess with that since it deals with positioning and calculations that I am not comfortable with spending the time on it now.  My continued goal of this project is to avoid dependencies, with the exception of jQuery sponsored projects.&lt;/p&gt;

&lt;p&gt;Please keep up the comments for suggestions, issues, requested features, and anything else you think I might like. Thanks for the support.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>ASP.Net MVC Release Candidate</title>
   <link href="http://kyleleneau.com/programming/2009/01/29/aspnet-mvc-release-canidate/"/>
   <updated>2009-01-29T11:54:00+00:00</updated>
   <id>http://kyleleneau.com/programming/2009/01/29/aspnet-mvc-release-canidate</id>
   <content type="html">&lt;p&gt;If you didn&amp;#39;t know already, ASP.Net MVC framework is int he release candidate stages. Wahoo!!!. As per usual ScottGu over at Microsoft posted insanely detailed remarks on the new features. &lt;a href=&quot;http://weblogs.asp.net/scottgu/archive/2009/01/27/asp-net-mvc-1-0-release-candidate-now-available.aspx&quot;&gt;Check it out here.&lt;/a&gt;. Some notable improvements that I have used and like thus far include NO MORE CODE BEHIND FILES (this is my favorite), shortcut&amp;#39;s to switch between views and controllers, and &amp;quot;scaffold&amp;quot; like generation of views and controllers using the T4 template engine in Visual Studio.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>jMonthCalendar: Patch Relese 1.0.1</title>
   <link href="http://kyleleneau.com/programming/2009/01/20/jmonthcalendar-patch-relese-101/"/>
   <updated>2009-01-20T16:14:00+00:00</updated>
   <id>http://kyleleneau.com/programming/2009/01/20/jmonthcalendar-patch-relese-101</id>
   <content type="html">&lt;p&gt;I just released my jMonthCalendar (the full month event calendar) with some new enhancements/fixes upon request.  The change log can be found &lt;a href=&quot;/portfolio/jmonthcalendar&quot;&gt;here&lt;/a&gt; along with updated samples and direct download. Fixes include: month name display in IE, isArray function not present in older version of jQuery, and new configurable first-day-of-week that the calendar starts on (Sun, Mon, Tue, etc).&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>jMonthCalendar: A jQuery Event Calendar</title>
   <link href="http://kyleleneau.com/programming/2009/01/18/jmonthcalendar-a-jquery-event-calendar/"/>
   <updated>2009-01-18T12:46:00+00:00</updated>
   <id>http://kyleleneau.com/programming/2009/01/18/jmonthcalendar-a-jquery-event-calendar</id>
   <content type="html">&lt;p&gt;While working on a project conversion to MVC I realized I needed a full month calendar that supported events.  None existed so I spent a few evenings learning jQuery and developing my own.  I just recently posted new pages on the project and submitted the plugin to jQuery.&lt;/p&gt;

&lt;p&gt;Recently I have been working on a re-architecture of &lt;a href=&quot;http://www.pertnearsandstone.com&quot;&gt;PertNearSandstone.com&lt;/a&gt;.  I have been converting the project into a full MVC application (previously Webforms).  Part of the application features displaying upcoming events/shows on a calendar for visitors.  In the previous Webforms world this was easy, I could throw an Asp.Net Calendar on the page and tie into the instances events to display what I wanted on the calendar.  Well MVC does not like the runat tag and thus can not use the same control in the new app.&lt;/p&gt;

&lt;p&gt;I searched the web for a replacement, I thought that someone would have made something to fulfill this requirement.  All I could find were Javascript pop-up calendar like the ones you see next to input fields.  Since I couldn&amp;#39;t find one I thought I would start on my own adventure into learning jQuery (since I have heard good things about it) and creating my own.  That is where I cam up with &lt;a href=&quot;/portfolio/jmonthcalendar&quot;&gt;this&lt;/a&gt; full month calendar that can display events and provide some minor extension points for custom code.&lt;/p&gt;

&lt;p&gt;Overall I am very pleased and excited about this.  This is close to my first sole open source project and is a major accomplishment for my JavaScript skills; not to mention that I was successfully able to learn jQuery and develop a plugin for it.  I am giving back to the jQeury community who helped me out, if you would like a copy of this please visit &lt;a href=&quot;http://plugins.jquery.com/project/jMonthCalendar&quot;&gt;jMonthCalendar jQuery Plugin page&lt;/a&gt;.  To see code samples and demos of the plugin please visit my projects page &lt;a href=&quot;/portfolio/jmonthcalendar&quot;&gt;here&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>My Recent Positive Experience with Apple</title>
   <link href="http://kyleleneau.com/2009/01/08/my-recent-positive-experience-with-apple/"/>
   <updated>2009-01-08T20:23:00+00:00</updated>
   <id>http://kyleleneau.com/2009/01/08/my-recent-positive-experience-with-apple</id>
   <content type="html">&lt;p&gt;So recently (the past year) I had an issue with my MacBook Pro and it&amp;#39;s battery life. My laptop is was bought in February of 2007 so of course the manufactures warranty expired on February of 2008. This was concerning cause some time after the warranty expired my battery life went to heck. I could not work with having to stay connected to the wall. If I did try and roam the house or go to a coffee shop to meet with a friend my laptop would last 30 minutes before self powering down. This sucks, I have a laptop in order to be mobile and away from the and AC outlet but am limited to 30 minutes of work, this doesn&amp;#39;t bode well for me. As 2008 went on 30 minutes of battery power went down to 20, then 10, then there were a few times that would only last 5 minutes if the computer was doing &lt;em&gt;anything&lt;/em&gt; intensive.&lt;/p&gt;

&lt;p&gt;As of today my warranty has been expired for almost a year. I didn&amp;#39;t think anything of it and thought I would have to break down and buy a new battery. Since I got used to having to be near an AC outlet I thought nothing of it. It wasn&amp;#39;t until I had done some research on apple MacBook Pro batteries only to find out that there were issues with the batteries and that there were many case of Apple replacing them (even out of warranty) free of charge. So I mad an appointment last night at the genius bar. The genius was very nice and pointed out my laptop was out of warranty and that it shouldn&amp;#39;t be covered BUT... The details of a bad battery were evident. I had 1016 Mah of power at full charge with 250 full power cycles. Normally the battery should be reporting 80% of the battery capacity at 300 cycles. The normal full charge is about 5000 Mah.&lt;/p&gt;

&lt;p&gt;To end the long drawn out story... Apple saved my but and &amp;quot;it was in the best interest of them to replace the battery free of charge&amp;quot;. I walked out of the store with a brand new MacBook Pro battery installed, and I didn&amp;#39;t have to pay a penny. Apple, you are the best. You know how to take care of your loyal customers. I could almost guarantee that if it were any other company they would have told me to get last or presented with a $100+ bill.&lt;/p&gt;

&lt;p&gt;So this goes out to anyone who might be in the same boat, all you have to do is ask. What is the worst Apple is going to say &amp;quot;No&amp;quot;?&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>The Geek way to welcome the New Year</title>
   <link href="http://kyleleneau.com/2009/01/02/the-geek-way-to-welcome-the-new-year/"/>
   <updated>2009-01-02T17:06:00+00:00</updated>
   <id>http://kyleleneau.com/2009/01/02/the-geek-way-to-welcome-the-new-year</id>
   <content type="html">&lt;p&gt;Welcome to the year 7D9!&lt;/p&gt;

&lt;p&gt;Welcome to the year 3731!!&lt;/p&gt;

&lt;p&gt;For machines, welcome to the year 11111011001&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>ASP.Net MVC Areas/Modules</title>
   <link href="http://kyleleneau.com/programming/2008/12/03/aspnet-mvc-areasmodules/"/>
   <updated>2008-12-03T13:40:00+00:00</updated>
   <id>http://kyleleneau.com/programming/2008/12/03/aspnet-mvc-areasmodules</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://haacked.com/archive/2008/11/04/areas-in-aspnetmvc.aspx&quot;&gt;In this post Phil Haack explains how Areas can be accomplished in the ASP.Net MVC framework.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I really like this idea of have Areas or Modules in ASP.Net MVC. I have been in the process of developing a Forum for a website and came across this after I was complete. I thought that &amp;quot;yes it would be nice to use this same logic in another application&amp;quot;, and having an areas or module to move around would be quite nice.&lt;/p&gt;

&lt;p&gt;One thing I would expand upon is the idea of creating a self contained binary (dll) that can be referenced into the main project. This would mean that all the views and resources would have to be statically defined in the binary, but could be easily re-styled with CSS. You&amp;#39;d probably also have to define a configuration element in your web.config that defines database connections and other information important/configurable to the Module/Area.&lt;/p&gt;

&lt;p&gt;We&amp;#39;ll see how time permits for a prototype. Not something I need now but is cool to think of. I wish the ASP.Net MVC guys/gals would include this functionality of segregated sections/areas/modules in a future release of ASP.Net MVC.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>ASP.Net MVC Route Table Ordering</title>
   <link href="http://kyleleneau.com/programming/2008/10/27/aspnet-mvc-route-table-ordering/"/>
   <updated>2008-10-27T17:20:34+00:00</updated>
   <id>http://kyleleneau.com/programming/2008/10/27/aspnet-mvc-route-table-ordering</id>
   <content type="html">&lt;p&gt;Over the past few weeks I have been working on an MVC forum component for a website I maintain/develop (&lt;a href=&quot;http://pertnearsandstone.com&quot;&gt;http://pertnearsandstone.com&lt;/a&gt;). As I was working through the various screens I would set up the intended routes to the route table in my global.ascx.cs file only to learn that route ordering is very important. The order of the routes affects the flow and logic of your application.&lt;/p&gt;

&lt;p&gt;To start off I had something like this working. I could get to all my views and actions as expected. Could get to the post/reply system as well and the index of topics and thread pages.&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-csharp&quot; data-lang=&quot;csharp&quot;&gt;&lt;span class=&quot;n&quot;&gt;routes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MapRoute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;Forum-Index&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Forum&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;controller&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Forum&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;action&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Index&amp;quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;routes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MapRoute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;Forum-CreatePost&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Forum/Create&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;controller&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Forum&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;action&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Create&amp;quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;routes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MapRoute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;Forum-NewPost&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Forum/Post/{ParentThreadID}/{ParentPostID}&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;controller&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Forum&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;action&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;New&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ParentThreadID&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ParentPostID&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;routes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MapRoute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;Forum-Thread&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Forum/Thread/{threadId}&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;controller&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Forum&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;action&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Thread&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;threadId&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Then I wanted to add paging to the index (topics) page so I implemented the logic in my controllers and added the helper to the view.  I also updated my routes to accept the new page as seen below:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-csharp&quot; data-lang=&quot;csharp&quot;&gt;&lt;span class=&quot;n&quot;&gt;routes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MapRoute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;Forum-Index&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Forum/{page}&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;controller&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Forum&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;action&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Index&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;page&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;routes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MapRoute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;Forum-CreatePost&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Forum/Create&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;controller&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Forum&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;action&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Create&amp;quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;routes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MapRoute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;Forum-NewPost&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Forum/Post/{ParentThreadID}/{ParentPostID}&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;controller&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Forum&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;action&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;New&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ParentThreadID&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ParentPostID&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;routes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MapRoute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;Forum-Thread&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Forum/Thread/{threadId}&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;controller&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Forum&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;action&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Thread&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;threadId&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;I tested everything out and found that the paging was working correctly but everything else had broken, except the thread page.  I spent entirely too much time on this issue to find out thanks to &lt;a href=&quot;http://weblogs.asp.net/scottgu/default.aspx&quot;&gt;Scott Guthrie&lt;/a&gt; and his &lt;a href=&quot;http://weblogs.asp.net/scottgu/archive/2007/12/03/asp-net-mvc-framework-part-2-url-routing.aspx&quot;&gt;URL Routing Post&lt;/a&gt; that I had an issue with how my routes were ordered. In his post I re-learned that routes must be in order from most specific to least specific. Obviously my new paging parameter was catching my Create route and my Post route when no data was being sent additionally (/Forum/Post/0/0 works, /Forum/Post did not). I changed the order of my routes like below and everything worked as expected.&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-csharp&quot; data-lang=&quot;csharp&quot;&gt;&lt;span class=&quot;n&quot;&gt;routes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MapRoute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;Forum-CreatePost&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Forum/Create&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;controller&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Forum&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;action&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Create&amp;quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;routes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MapRoute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;Forum-NewPost&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Forum/Post/{ParentThreadID}/{ParentPostID}&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;controller&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Forum&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;action&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;New&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ParentThreadID&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ParentPostID&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;routes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MapRoute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;Forum-Thread&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Forum/Thread/{threadId}&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;controller&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Forum&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;action&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Thread&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;threadId&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;routes&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MapRoute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;Forum-Index&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Forum/{page}&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;controller&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Forum&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;action&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;Index&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;page&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;If you are reading this entry and know of a way to a) either check to see if the parameter can be parsed as an int (as in page index) and match the route, similar to a constraint or b) an easy way to test the routes.  I would greatly appreciate any feedback, comments, or sample code of your solutions.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Frustrating IIS7 Configuration 500 Error</title>
   <link href="http://kyleleneau.com/programming/2008/09/22/frustrating-iis7-configuration-500-error/"/>
   <updated>2008-09-22T15:13:00+00:00</updated>
   <id>http://kyleleneau.com/programming/2008/09/22/frustrating-iis7-configuration-500-error</id>
   <content type="html">&lt;p&gt;Recently I have been putting a lot of my evenings and weekends in to a re-architecting of a site I host and develop for some friends of mine &lt;a href=&quot;http://www.pertnearsandstone.com&quot;&gt;Pert&amp;#39; Near Sandstone.&lt;/a&gt; The Entire site is built using ASP.Net and features a standard (web forms) website front end (public facing) and an admin side also built using web forms. I liked this at the time, but it soon became very difficult to debug, maintain and add features to.&lt;/p&gt;

&lt;p&gt;The biggest factor in deciding the re-architect the site at the time was the lack of interoperability in the Admin side/application. It worked as intended about 60% of the time (60% of the time it works every time). The web forms admin side required a lot of code that was spread out over numerous code behind files, making it difficult to maintain. Not to mention similar logic was being duplicated, violating the DRY principal (don&amp;#39;t repeat yourself).&lt;/p&gt;

&lt;p&gt;Around the same time I had just finished my exploration of the new ASP.Net MVC (model-view-controller) model and had fallen in love with web development all over again. I had been in the process of creating some sample applications with it. I even started testing how it deployed on various web hosting platforms. I discovered that the MVC pattern DID work on IIS6 and IIS7. The URL&amp;#39;s on IIS6 required special mapping (either adding .aspx or .mvc to map to the aspnet framework), I didn&amp;#39;t like that so I found a host that offered IIS7. The URL&amp;#39;s are now clean and to my liking. MVC makes sense, it creates clean separation of UI, business logic and data models. and will be an architecture of choice on ASP.Net.&lt;/p&gt;

&lt;p&gt;So to make my long story short and to the point. I ended up re-architecting the Admin (once web forms side) of my site/project into a new MVC project in my solution. I started bringing over functionality one peice at a time, while reworking the underlying business logic and data access logic into various providers and repositories. I had everything working perfectly for a phase one deployment to the web host. I had 2 projects to deploy, one public facing site (web forms) and one admin MVC site. I set up the web host to use a virtual directory for the the MVC site, configured my connection strings as:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-xml&quot; data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;connectionstrings&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;add&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;name=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;PertNear.Data.Properties.Settings.PertNearSandstoneConnectionString&amp;quot;&lt;/span&gt;
         &lt;span class=&quot;na&quot;&gt;connectionstring=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;server=secureserver.net;uid=user;pwd=pass;database=db&amp;quot;&lt;/span&gt;
         &lt;span class=&quot;na&quot;&gt;providername=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;System.Data.SqlClient&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/add&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;add&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;name=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;PertNear.Membership&amp;quot;&lt;/span&gt;
         &lt;span class=&quot;na&quot;&gt;connectionstring=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;server=secureserver.net;uid=user;pwd=pass;database=db&amp;quot;&lt;/span&gt; 
         &lt;span class=&quot;na&quot;&gt;providername=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;System.Data.SqlClient&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/add&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/connectionstrings&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;I uploaded everything to the virtual directory and tried to access the new applications.  The public facing side (web forms) worked cause it had a separate config file, the admin side through the generic IIS7 internal server error with no messages.  I looked everywhere to find a solution.  Many sources said to add a wrapping element around the parent web.config so that it&amp;#39;s settings don&amp;#39;t conflict with the virtual directories (inheritance in IIS7 config files). I spent a week plus on this issue until I ran the config file through an XML validator.  As you can see I had a rouge comment tag in the config.  Had I known that IIS7 was first validating my config file I might have gotten an error along the lines of &amp;quot;invalid xml&amp;quot; instead of generic 500 error.&lt;/p&gt;

&lt;p&gt;Reader be warned, be sure the validate the web.config file before uploading.  And check the config file before you make any drastic changes like I did (I moved the MVC project into the public facing site to now have just one project to deploy, thinking that might solve the issue).  One point worth mentioning, I had edited my published web.config outside of VS2008 in a text editor, hopefully VS would have caught that error for me had I known.&lt;/p&gt;

&lt;p&gt;Good luck, happy coding and avoid the frustration I had.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Where I was 7 years ago</title>
   <link href="http://kyleleneau.com/2008/09/11/where-i-was-7-years-ago/"/>
   <updated>2008-09-11T17:47:00+00:00</updated>
   <id>http://kyleleneau.com/2008/09/11/where-i-was-7-years-ago</id>
   <content type="html">&lt;p&gt;This day, September 11th, will make any person think back to what they were doing when the tragic news broke from New York.&lt;/p&gt;

&lt;p&gt;My experience was unique, to say the least. Seven years ago I was in my senior year of high school at Park Center Senior High in Brooklyn Park, MN. I had stayed home that day because I had an orthodontist appointment in the morning.  My mom was going to take me to the appointment and then drop me off at school before fourth period. I remember waking up, eating breakfast and then watching the television.  Just as we were about to leave, the news footage started coming on the TV about the first plane.  They were reporting it as a small plane at first, not a jumbo jet.  Soon after my mom and I watched in disbelief as we saw the live footage of the second plane.&lt;/p&gt;

&lt;p&gt;We were now running late for the appointment so we got in the car and drove to the dentist. The appointment was just a usual band replacement and tightening.  I remember sitting in the chair wondering what was going on while I could hear the news over the radio (they usually have music on).  The technicians where confused with what was going on, I recall telling them what I had seen at home.  The appointment didn&amp;#39;t last long and we were on our way back home; don&amp;#39;t know why my mom didn&amp;#39;t take me to school.  She probably thought that school might be closing and she should find out before she drops me off.&lt;/p&gt;

&lt;p&gt;Once back, we flipped back on the TV to see replays of any recent events.  Television shots from all angles and opinions were spewing everywhere.  I remember seeing all the reports as they broke, from the initial crashes, pentagon crash, Pennsylvania crash, to even the collapse of the two towers.  My mom and I were in shock, she was calling everyone she could think of  including my dad and relatives who live on the east coast (everyone was safe).  Once the second tower had collapsed it had gotten late and was time to get me to school.&lt;/p&gt;

&lt;p&gt;When I got to school, all the TV&amp;#39;s in our lunchroom were tuned to the news channels and there were groups of students, faculty and staff watching in dis-belief.  I headed up to my class and it was a different story, no one knew what had happened and slowing the information started trickling in.  Later, in one of my economics classes the teacher carted in a TV for us to watch, knowing that trying to teach us was going to be useless.&lt;/p&gt;

&lt;p&gt;The facts of that day are still unbelievable.  Our security of a nation was not as secure as we expected.  The rest is history better left unsaid by me.  However In my opinion, and the opinion of many, the events of that day changed this century.  We suspected Al Quida and Bin Laden for the attacks as a nation, but yet we went to war with Iraq???  I don&amp;#39;t see the connection between WMD&amp;#39;s and Boeing 767&amp;#39;s.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Science Rocks!</title>
   <link href="http://kyleleneau.com/2008/09/11/science-rocks/"/>
   <updated>2008-09-11T14:54:00+00:00</updated>
   <id>http://kyleleneau.com/2008/09/11/science-rocks</id>
   <content type="html">&lt;p&gt;I Found this on one of my friends posts and found it very interesting. &lt;a href=&quot;http://blog.wired.com/wiredscience/2008/09/top-10-amazing.html&quot;&gt;Science Rocks!!!&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Black Betty Snowboard Video</title>
   <link href="http://kyleleneau.com/snowboarding/video/2008/09/04/black-betty-snowboard-video/"/>
   <updated>2008-09-04T13:22:00+00:00</updated>
   <id>http://kyleleneau.com/snowboarding/video/2008/09/04/black-betty-snowboard-video</id>
   <content type="html">&lt;p&gt;During college I was big in to video editing and movie making. Since then priorities have changed to coding and life. I was cleaning up a hard drive I used back then and found one of my favorite creations. I&amp;#39;m sure I have one more video that I made/published, I just have to find it. All of the filming and editing was done by me, and all of the riders featured are friends of mine. Hope you enjoy!&lt;/p&gt;

&lt;p&gt;&lt;iframe src=&quot;http://player.vimeo.com/video/1615944&quot; width=&quot;500&quot; height=&quot;375&quot; frameborder=&quot;0&quot; webkitAllowFullScreen mozallowfullscreen allowFullScreen&gt;&lt;/iframe&gt; &lt;p&gt;&lt;a href=&quot;http://vimeo.com/1615944&quot;&gt;Snowboard with Black Betty&lt;/a&gt; from &lt;a href=&quot;http://vimeo.com/bytecyclist&quot;&gt;Kyle LeNeau&lt;/a&gt; on &lt;a href=&quot;http://vimeo.com&quot;&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Byte Sized Tour de France Stage 3 Winner</title>
   <link href="http://kyleleneau.com/cycling/2008/09/03/byte-sized-tour-de-france-stage-3-winner/"/>
   <updated>2008-09-03T01:56:00+00:00</updated>
   <id>http://kyleleneau.com/cycling/2008/09/03/byte-sized-tour-de-france-stage-3-winner</id>
   <content type="html">&lt;p&gt;Maybe I can be a pro cyclist after all...  My wife and I have been following the Tour de France 2008 Stage 3 winner &lt;a href=&quot;http://en.wikipedia.org/wiki/Samuel_Dumoulin&quot;&gt;Samuel Dumoulin&lt;/a&gt; for a while. We like to keep up with his achievements because he is similar in size to us. We all (myself, wife and Samuel Dumoulin) all stand about 5&amp;#39; 2&amp;quot; (5 feet 2 inches) tall and for my wife and I seeing someone who is similar in stature win such a stage and event is enough to keep us motivated. How cool would it be to meet him or even take a ride with him through France, Awesome! Way to go Samuel! Keep up the good riding.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.equipe-cofidis.com/gb/equipe.asp?lid=10&quot;&gt;Samuel Dumoulin on team Cofidis&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Bytecyclist dot com</title>
   <link href="http://kyleleneau.com/cycling/2008/09/03/bytecyclist-dot-com/"/>
   <updated>2008-09-03T01:54:00+00:00</updated>
   <id>http://kyleleneau.com/cycling/2008/09/03/bytecyclist-dot-com</id>
   <content type="html">&lt;p&gt;Welcome to ByteCyclist.com. My name is Kyle LeNeau, I am the author of this site, idea, name, code, plugins, and anything else. I am a programmer from Minneapolis, MN who enjoys bytes (coding) and riding my bicycle thus the name bytecyclist.com. I am &lt;strong&gt;The ByteCyclist&lt;/strong&gt;. This site is formed with the intent of getting my thoughts out to the world. Since I&amp;#39;m a developer you should expect code samples and ideas of mine along with any projects I might be working on. As a cyclist, who knows what will end up here, maybe some cool bike sites/links, rides of mine or anything else related to biking. Enjoy the content.&lt;/p&gt;
</content>
 </entry>
 

</feed>
