<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8965987</id><updated>2012-01-29T16:50:06.598-06:00</updated><category term='home'/><category term='c# .net 4.0 DynamicObject'/><category term='silverlight'/><category term='web'/><category term='rails ruby'/><category term='programming'/><category term='Rails'/><category term='wedding'/><category term='random'/><category term='xbox'/><category term='ubuntu'/><category term='html 5 canvas'/><category term='gaming'/><category term='vista'/><title type='text'>Chad Michel</title><subtitle type='html'>My Thoughts, or lack there of</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default?start-index=101&amp;max-results=100'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>200</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8965987.post-4592266305400573446</id><published>2012-01-29T16:21:00.002-06:00</published><updated>2012-01-29T16:21:58.732-06:00</updated><title type='text'>NodeJS</title><content type='html'>I'm giving NodeJS a try, haven't played with anything Javascripty in a while. I'm also giving coffeescript a try. I thought I'd hate coffeescript, but I used it a little bit with Rails and coffeescript seemed natural. Even debugging coffeescript by looking at JS files turns out to be pretty easy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-4592266305400573446?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/4592266305400573446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=4592266305400573446' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/4592266305400573446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/4592266305400573446'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2012/01/nodejs.html' title='NodeJS'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-6680942186349277929</id><published>2010-11-04T22:46:00.011-05:00</published><updated>2010-11-04T22:55:23.537-05:00</updated><title type='text'>Using HTML 5 to rotating an image</title><content type='html'>&lt;img src="http://1.bp.blogspot.com/_jBiKhFpTHdY/TNN-hOw7N9I/AAAAAAAAAHY/e4b0vyT5xXc/s320/spaceship_rotation_example.png" style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 301px; height: 169px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5535907476332558290" /&gt;In the previous posts I have been rotating a black box. With this post I'll show how to rotate an image. Concept is basically the same (actual code changes are very small).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;First we add an image to the HTML document.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="html"&gt;&lt;br /&gt;&lt;br /&gt;&lt;img id="spaceshipflying" src="spaceship_flying.png" width="50" height="50" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;&lt;br /&gt;var flying = document.getElementById('spaceshipflying');&lt;br /&gt;ctx.drawImage(flying, -20, -20, 40, 40); &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-6680942186349277929?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/6680942186349277929/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=6680942186349277929' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/6680942186349277929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/6680942186349277929'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2010/11/using-html-5-to-rotating-image.html' title='Using HTML 5 to rotating an image'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_jBiKhFpTHdY/TNN-hOw7N9I/AAAAAAAAAHY/e4b0vyT5xXc/s72-c/spaceship_rotation_example.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-7859332311636863535</id><published>2010-11-04T22:09:00.009-05:00</published><updated>2010-11-04T22:18:26.670-05:00</updated><title type='text'>Html 5 rotate using arrow keys</title><content type='html'>&lt;div&gt;&lt;br /&gt;Yesterday I put up a post describing how to rotate a box using HTML 5 canvas and a little JavaScript. Today I am writing about how to rotate using the error keys instead. This turns out to be very easy.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;I use a simple jquery event to check for key down. I modify the rotate by -1.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;&lt;br /&gt;&lt;br /&gt;            $('body').keydown(function (key) {&lt;br /&gt;                if (key.keyCode == '37') { // 37 for left arrow&lt;br /&gt;                    world.rotation -= 1;&lt;br /&gt;                }&lt;br /&gt;                else if (key.keyCode == '39') { // 39 for right arrow&lt;br /&gt;                    world.rotation += 1;&lt;br /&gt;                }                &lt;br /&gt;            }); &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;full JavaScript&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;&lt;br /&gt;&lt;br /&gt;// store information about the world&lt;br /&gt;function World() {&lt;br /&gt;    this.canvasHeight = 500;&lt;br /&gt;    this.canvasWidth = 500;&lt;br /&gt;    this.rotation = 10;&lt;br /&gt;    this.middleY = this.canvasHeight / 2;&lt;br /&gt;    this.middleX = this.canvasWidth / 2;                &lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;var world = new World();       &lt;br /&gt;            &lt;br /&gt;// setup canvas&lt;br /&gt;$(document).ready(function () {&lt;br /&gt;    $("#pagetitle").html("Hello");&lt;br /&gt;&lt;br /&gt;    c = document.getElementById("gamecanvas");&lt;br /&gt;    var ctx = c.getContext('2d');&lt;br /&gt;&lt;br /&gt;    ctx.save();&lt;br /&gt;&lt;br /&gt;    ctx.translate(world.middleX, world.middleY);&lt;br /&gt;    ctx.rotate(world.rotation);&lt;br /&gt;&lt;br /&gt;    ctx.fillRect(-10, -10, 20, 20);                               &lt;br /&gt;&lt;br /&gt;    setInterval("rotator()", 100);&lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;// handle key presses&lt;br /&gt;$('body').keydown(function (key) {&lt;br /&gt;    if (key.keyCode == '37') { // 37 for left arrow&lt;br /&gt;        world.rotation -= 1;&lt;br /&gt;    }&lt;br /&gt;    else if (key.keyCode == '39') { // 39 for right arrow&lt;br /&gt;        world.rotation += 1;&lt;br /&gt;    }                &lt;br /&gt;}); &lt;br /&gt;            &lt;br /&gt;// rotate every 100ms&lt;br /&gt;function rotator() {&lt;br /&gt;&lt;br /&gt;    $("#pagetitle").html(world.rotation);&lt;br /&gt;                &lt;br /&gt;    if (world.rotation &gt; 360)&lt;br /&gt;        world.rotation = 0;&lt;br /&gt;    if (world.rotation &lt; 0)&lt;br /&gt;        world.rotation = 360;&lt;br /&gt;&lt;br /&gt;    c = document.getElementById("gamecanvas");  &lt;br /&gt;    var ctx = c.getContext('2d');&lt;br /&gt;&lt;br /&gt;    // we need to restore the default tranformation &lt;br /&gt;    // and rotation before we clear the screen.                &lt;br /&gt;    ctx.restore();&lt;br /&gt;&lt;br /&gt;    ctx.fillStyle = "white";&lt;br /&gt;    ctx.fillRect(0, 0, world.canvasWidth, world.canvasHeight);&lt;br /&gt;&lt;br /&gt;    // save current transform and rotation&lt;br /&gt;    ctx.save();&lt;br /&gt;                &lt;br /&gt;    // re render the world using current rotation&lt;br /&gt;    ctx.translate(world.middleX, world.middleY);&lt;br /&gt;    ctx.rotate(world.rotation * Math.PI / 180);&lt;br /&gt;&lt;br /&gt;    ctx.fillStyle = "black";&lt;br /&gt;    ctx.fillRect(-10, -10, 20, 20);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-7859332311636863535?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/7859332311636863535/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=7859332311636863535' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/7859332311636863535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/7859332311636863535'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2010/11/html-5-rotate-using-arrow-keys.html' title='Html 5 rotate using arrow keys'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-1540939342493422732</id><published>2010-11-04T10:14:00.002-05:00</published><updated>2010-11-04T10:15:52.196-05:00</updated><title type='text'>Silverlight not for web but, ....</title><content type='html'>Silverlight might be dead for the web but it still has a lot of uses.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. Windows Mobile will use it as the development platform.&lt;/div&gt;&lt;div&gt;2. Silverlight still provides the best way to stream video over the web. Silverlight adaptive streaming is considerably better than Flash's stream switching.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-1540939342493422732?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/1540939342493422732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=1540939342493422732' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/1540939342493422732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/1540939342493422732'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2010/11/silverlight-not-for-web-but.html' title='Silverlight not for web but, ....'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/10493983460319716405</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-1863094777018548455</id><published>2010-11-03T22:04:00.015-05:00</published><updated>2010-11-05T15:26:14.808-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='html 5 canvas'/><title type='text'>HTML 5 canvas rotate</title><content type='html'>HTML 5 / Canvas adds some really cool graphics functionality. With canvas you can easily draw a wide variety of objects. Included with this drawing power is the ability to rotate and transform the world.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;With rotation and transformation you can do some really amazing things. My demo code below just rotates a black box inside of a canvas, but it shows the power that this provides. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Things to note about the code below. &lt;/div&gt;&lt;div&gt;1. Javascript setInterval is used for timing.&lt;/div&gt;&lt;div&gt;2. Canvas restore / save are used for saving current state. This makes it easy to clear the entire page. After restoring it is easy to just clear entire window.&lt;/div&gt;&lt;div&gt;3. Canvas grid goes from 0, 0 in the top left to 500, 500 in bottom right. The translate call shifts the center to 250, 250.&lt;br /&gt;&lt;pre name="code" class="html"&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt; &amp;lt;title&amp;gt;HTML 5 Canvas - Rotate&amp;lt;/title&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;  &lt;br /&gt; &amp;lt;style type="text/css"&amp;gt;&lt;br /&gt;&lt;br /&gt;     canvas&lt;br /&gt;     {&lt;br /&gt;     border-style:solid;&lt;br /&gt;     border-width:5px;&lt;br /&gt;     border-color: Blue;&lt;br /&gt;     }&lt;br /&gt; &amp;lt;/style&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;div&amp;gt;&lt;br /&gt;&lt;br /&gt;     &amp;lt;div id="pagetitle"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;  &lt;br /&gt;     &amp;lt;canvas id="gamecanvas" width="500" height="500"&amp;gt;&lt;br /&gt;         canvas&lt;br /&gt;     &amp;lt;/canvas&amp;gt;&lt;br /&gt;          &lt;br /&gt;     &amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;&lt;br /&gt;         function World() {&lt;br /&gt;             this.canvasHeight = 500;&lt;br /&gt;             this.canvasWidth = 500;&lt;br /&gt;             this.rotation = 10;&lt;br /&gt;             this.middleY = this.canvasHeight / 2;&lt;br /&gt;             this.middleX = this.canvasWidth / 2;&lt;br /&gt;         };&lt;br /&gt;&lt;br /&gt;         var world = new World();    &lt;br /&gt;      &lt;br /&gt;         $(document).ready(function () {&lt;br /&gt;             $("#pagetitle").html("Hello");&lt;br /&gt;&lt;br /&gt;             c = document.getElementById("gamecanvas");&lt;br /&gt;             var ctx = c.getContext('2d');&lt;br /&gt;&lt;br /&gt;             ctx.save();&lt;br /&gt;&lt;br /&gt;             ctx.translate(world.middleX, world.middleY);&lt;br /&gt;             ctx.rotate(world.rotation * Math.PI / 180);&lt;br /&gt;&lt;br /&gt;             ctx.fillRect(-10, -10, 20, 20);                            &lt;br /&gt;&lt;br /&gt;             setInterval("rotator()", 100);&lt;br /&gt;         });&lt;br /&gt;      &lt;br /&gt;         function rotator() {&lt;br /&gt;&lt;br /&gt;             $("#pagetitle").html(world.rotation);&lt;br /&gt;&lt;br /&gt;             world.rotation = world.rotation + 1;&lt;br /&gt;             if (world.rotation &amp;gt; 360)&lt;br /&gt;                 world.rotation = 0;&lt;br /&gt;          &lt;br /&gt;             c = document.getElementById("gamecanvas");&lt;br /&gt;             var ctx = c.getContext('2d');&lt;br /&gt;&lt;br /&gt;             ctx.restore();&lt;br /&gt;&lt;br /&gt;             ctx.fillStyle = "white";&lt;br /&gt;             ctx.fillRect(0, 0, world.canvasWidth, world.canvasHeight);&lt;br /&gt;&lt;br /&gt;             ctx.save();&lt;br /&gt;          &lt;br /&gt;             // re render&lt;br /&gt;             ctx.translate(world.middleX, world.middleY);&lt;br /&gt;             ctx.rotate(world.rotation * Math.PI / 180);&lt;br /&gt;&lt;br /&gt;             ctx.fillStyle = "black";&lt;br /&gt;             ctx.fillRect(-10, -10, 20, 20);&lt;br /&gt;         }&lt;br /&gt;                  &lt;br /&gt;      &lt;br /&gt;     &amp;lt;/script&amp;gt;&lt;br /&gt;  &lt;br /&gt; &amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-1863094777018548455?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/1863094777018548455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=1863094777018548455' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/1863094777018548455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/1863094777018548455'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2010/11/html-5-canvas-rotate.html' title='HTML 5 canvas rotate'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-3009746506299999850</id><published>2010-10-31T14:32:00.002-05:00</published><updated>2010-10-31T14:40:04.503-05:00</updated><title type='text'>Silverlight for the web is dead</title><content type='html'>I had a debate with a coworker this summer over the future of Silverlight. He thought it was the future of the web. I felt is wouldn't be that relevant a few years from now, and now I get to tell him I told you so.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Silverlight solves a problem that doesn't really exist. HTML 5 and Javascript do most of what Silverlight does, and what can't be done with HTML 5 and Javascript probably doesn't need to be done.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I like Microsoft developer technologies. I feel Visual Studio is Microsoft's best product. So I don't espouse the above to attack Microsoft. Actually I think it is Microsoft coming to terms with the web, and the way people want it. People don't want to install a plugin. They just want to go to websites.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I believe there are two fundamental things about users and developers.&lt;/div&gt;&lt;div&gt;1. Users don't want to install anything&lt;/div&gt;&lt;div&gt;2. Developers don't want to write anything to be installed&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Installs are inconvenient for both parties. Now with the mobile apps explosion everyone is rethinking apps. Personally I feel this is a short term explosion. Eventually people we be able to write apps for phones using HTML 5 / Javascript. That will be the death of apps.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;At PDC 2010 Microsoft showed how IE9 allows for the docking of a web site to the taskbar. This is the future. Rich applications hosted on the web. Eventually more platforms will exploit things like install a website right to your main menu. Once this is every where, apps will die again.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-3009746506299999850?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://m.zdnet.com/blog/microsoft/microsoft-our-strategy-with-silverlight-has-shifted/7834' title='Silverlight for the web is dead'/><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/3009746506299999850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=3009746506299999850' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/3009746506299999850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/3009746506299999850'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2010/10/silverlight-for-web-is-dead.html' title='Silverlight for the web is dead'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-7144129665392727277</id><published>2010-10-12T11:38:00.002-05:00</published><updated>2010-10-12T11:40:36.280-05:00</updated><title type='text'>Google Chrome</title><content type='html'>I started using Google Chrome when testing some flash stuff. It was the only browser that didn't crash when flash crashed. Eventually I started using it for the majority of my browsing, I just like it.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The single address / search bar is awesome.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The speed is awesome.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My wife (currently a firefox user) started using it last night. After a few minutes of using it she now wants to use Chrome. No prodding. She was just using it on my desktop.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-7144129665392727277?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/7144129665392727277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=7144129665392727277' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/7144129665392727277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/7144129665392727277'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2010/10/google-chrome.html' title='Google Chrome'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-6299983444058589996</id><published>2010-10-11T21:49:00.002-05:00</published><updated>2010-10-11T21:52:47.824-05:00</updated><title type='text'>How many comments</title><content type='html'>We had a debate today about how much to comment. To me it depends upon the code. If I am writing a some sort of algorithm that is difficult to understand I'll use more comments. For most code I use comments as a way to know that I am writing bad code. If I feel the need to comment it, it is probably bad code.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Linus has a similar view...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 13px; "&gt;Generally, you want your comments to tell WHAT your code does, not HOW. Also, try to avoid putting comments inside a function body: if the function is so complex that you need to separately comment parts of it, you should probably go back to chapter 4 for a while. You can make small comments to note or warn about something particularly clever (or ugly), but try to avoid excess. Instead, put the comments at the head of the Linux kernel coding style function, telling people what it does, and possibly WHY it does it.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 13px; "&gt;&lt;a href="https://red001.mail.microsoftonline.com/owa/redir.aspx?C=4a91c66c7a814c54bdec4cb3bbb4284e&amp;amp;URL=https%3a%2f%2fcomputing.llnl.gov%2flinux%2fslurm%2fcoding_style.pdf" target="_blank"&gt;https://computing.llnl.gov/linux/slurm/coding_style.pdf&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-6299983444058589996?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/6299983444058589996/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=6299983444058589996' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/6299983444058589996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/6299983444058589996'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2010/10/how-many-comments.html' title='How many comments'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-8627515265301643084</id><published>2010-07-13T07:58:00.003-05:00</published><updated>2010-07-13T08:02:16.299-05:00</updated><title type='text'></title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_jBiKhFpTHdY/TDxjQXdAfyI/AAAAAAAAAHE/l6nyQKAL3uw/s1600/ImplicitTransaction.PNG"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 182px;" src="http://4.bp.blogspot.com/_jBiKhFpTHdY/TDxjQXdAfyI/AAAAAAAAAHE/l6nyQKAL3uw/s320/ImplicitTransaction.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5493374778309902114" /&gt;&lt;/a&gt;Oracle PL/SQL had a nice feature in that an insert/update query written in the query window wouldn't post until you did a commit. This was nice in that it gave you another chance to look at what the query did before actually doing damage to the database.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Sql server has a similar feature that can be enabled thru the options window.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-8627515265301643084?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/8627515265301643084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=8627515265301643084' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/8627515265301643084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/8627515265301643084'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2010/07/oracle-plsql-had-nice-feature-in-that.html' title=''/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_jBiKhFpTHdY/TDxjQXdAfyI/AAAAAAAAAHE/l6nyQKAL3uw/s72-c/ImplicitTransaction.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-5030145211467175716</id><published>2010-06-10T14:22:00.003-05:00</published><updated>2010-06-10T14:25:55.834-05:00</updated><title type='text'>ADO.Net Entity framework</title><content type='html'>I use the Entity Framework a lot at work. I usually work with it in a detached manner, which it doesn't seem to like. But I found a nice msdn article that describes how to work attach detached objects. This article solved a problem I had with calling save multiple times with the same instance of a model.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb896248.aspx"&gt;link&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-5030145211467175716?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/5030145211467175716/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=5030145211467175716' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/5030145211467175716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/5030145211467175716'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2010/06/adonet-entity-framework.html' title='ADO.Net Entity framework'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-384834811599111076</id><published>2010-06-07T07:59:00.003-05:00</published><updated>2010-06-07T08:49:08.670-05:00</updated><title type='text'>ASP.Net Error Handling</title><content type='html'>&lt;div&gt;Options&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;1. Catch a page level - On page catch the Page_Error event. Inside of Page_Error call Server.GetLastError to retrieve error, call Server.ClearError to remove the error.&lt;div&gt;&lt;br /&gt;&lt;div&gt;2. Catch application level errors in Global.asax (Application_Error).&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-384834811599111076?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/384834811599111076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=384834811599111076' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/384834811599111076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/384834811599111076'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2010/06/aspnet-error-handling.html' title='ASP.Net Error Handling'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-276111217112095459</id><published>2010-06-07T07:53:00.001-05:00</published><updated>2010-06-07T07:53:37.032-05:00</updated><title type='text'>ASP.Net Custom control</title><content type='html'>&lt;p class="MsoNormal"&gt;Custom User Control – Easy to make, harder to do more advanced things with.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Web Custom Control – must be done in code. Harder to create but more flexible. Can be installed to GAC.&lt;span style="mso-spacerun:yes"&gt;  &lt;/span&gt;Can be added to toolbox.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Composite control – Single control that supports lots of controls. Must override CreateChildControl.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Templated Control – Does not provide a default UI. UI is provided using a designer. Lots of flexibility. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa651710(VS.71).aspx"&gt;http://msdn.microsoft.com/en-us/library/aa651710(VS.71).aspx&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-276111217112095459?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/276111217112095459/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=276111217112095459' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/276111217112095459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/276111217112095459'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2010/06/aspnet-custom-control.html' title='ASP.Net Custom control'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-8565180427422319547</id><published>2010-05-10T10:25:00.002-05:00</published><updated>2010-05-10T10:27:26.375-05:00</updated><title type='text'>Impersonate another user using WindowsIdentity</title><content type='html'>&lt;pre&gt;Below is some code that impersonates the a windows user&lt;br /&gt;&lt;br /&gt;[DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]&lt;br /&gt;public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword,&lt;br /&gt;   int dwLogonType, int dwLogonProvider, ref IntPtr phToken);&lt;br /&gt;&lt;br /&gt;[DllImport("kernel32.dll", CharSet = CharSet.Auto)]&lt;br /&gt;public extern static bool CloseHandle(IntPtr handle);&lt;br /&gt;&lt;br /&gt;[DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]&lt;br /&gt;public extern static bool DuplicateToken(IntPtr ExistingTokenHandle,&lt;br /&gt;   int SECURITY_IMPERSONATION_LEVEL, ref IntPtr DuplicateTokenHandle);&lt;br /&gt;&lt;br /&gt;private static void Impersonate()&lt;br /&gt;{&lt;br /&gt;   IntPtr tokenHandle = IntPtr.Zero;&lt;br /&gt;&lt;br /&gt;   const int LOGON32_PROVIDER_DEFAULT = 0;&lt;br /&gt;   const int LOGON32_LOGON_INTERACTIVE = 2;&lt;br /&gt;          &lt;br /&gt;   bool loggedIn = LogonUser(@"USERNAME", "DOMAIN", "PASSWORD",&lt;br /&gt;           LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref tokenHandle);&lt;br /&gt;&lt;br /&gt;   if (loggedIn)&lt;br /&gt;   {&lt;br /&gt;       WindowsIdentity wi = new WindowsIdentity(tokenHandle);&lt;br /&gt;       using (WindowsImpersonationContext wic = wi.Impersonate())&lt;br /&gt;       {&lt;br /&gt;           File.AppendAllText(@"c:\users\test\test.txt", "hello world");&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-8565180427422319547?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/8565180427422319547/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=8565180427422319547' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/8565180427422319547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/8565180427422319547'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2010/05/impersonate-another-user-using.html' title='Impersonate another user using WindowsIdentity'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-3841945298800857805</id><published>2010-05-05T10:57:00.005-05:00</published><updated>2010-05-05T11:10:38.320-05:00</updated><title type='text'>Imperative Code Access Security in .Net 3.5</title><content type='html'>In my previous &lt;a href="http://blog.mutantbunny.com/2010/05/code-access-security-and-net-35.html"&gt;post&lt;/a&gt; I discussed using declarative Code Access Security (CAS). Now I am going to cover using the same concepts but imperatively. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The example below uses imperative security to only allow access to c:\poop.txt. The code below should run without an exception.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;static void Main(string[] args)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    WriteToFile();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    Console.ReadLine();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;public static void WriteToFile()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    // Create permission object. &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    FileIOPermission p = new FileIOPermission(FileIOPermissionAccess.AllAccess, @"c:\poop.txt");&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    // call permit only to only allow access to the c:\poop.txt resource.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    p.PermitOnly();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;            &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    // Create a file&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    TextWriter tw = new StreamWriter(@"C:\poop.txt");&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    tw.WriteLine("howdy");&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    tw.Close();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    // Display the text of the file&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    TextReader tr = new StreamReader(@"C:\poop.txt");&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    Console.WriteLine(tr.ReadToEnd());&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    tr.Close();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you change the permission request to c:\poop2.txt the code will then throw an exception.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;static void Main(string[] args)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    WriteToFile();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    Console.ReadLine();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;public static void WriteToFile()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    // Create permission object. &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    FileIOPermission p = new FileIOPermission(FileIOPermissionAccess.AllAccess, @"c:\poop2.txt");&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    // call permit only to only allow access to the c:\poop.txt resource.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    p.PermitOnly();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;            &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    // Create a file&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    TextWriter tw = new StreamWriter(@"C:\poop.txt");&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    tw.WriteLine("howdy");&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    tw.Close();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    // Display the text of the file&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    TextReader tr = new StreamReader(@"C:\poop.txt");&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    Console.WriteLine(tr.ReadToEnd());&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    tr.Close();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;With the imperative security the method usage has changed a little, and you gain some flexibility. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To Demand access to a particular resource you can use Demand just as you would have with Declarative security. You can also still Deny to revoke access to a particular resource.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you call another function after you revoke permission to a resource that will be respected in the called function.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;static void Main(string[] args)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    WriteToFile();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    Console.ReadLine();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;public static void WriteToFile()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    // Create permission object. &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    FileIOPermission p = new FileIOPermission(FileIOPermissionAccess.AllAccess, @"c:\poop.txt");&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    // block access to resource&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    p.Deny();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    // call another function to do work.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    WriteToFile2();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;public static void WriteToFile2()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    // Create a file&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    TextWriter tw = new StreamWriter(@"C:\poop.txt");&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    tw.WriteLine("howdy");&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    tw.Close();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    // Display the text of the file&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    TextReader tr = new StreamReader(@"C:\poop.txt");&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    Console.WriteLine(tr.ReadToEnd());&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    tr.Close();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you block access to a resource in one function that block will only live until that function has ended. Future use of that resource will be allowed.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;static void Main(string[] args)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    // block access&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    WriteToFile();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    // do actual work&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    WriteToFile2();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    Console.ReadLine();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;public static void WriteToFile()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    // Create permission object. &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    FileIOPermission p = new FileIOPermission(FileIOPermissionAccess.AllAccess, @"c:\poop.txt");&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    // block access to resource&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    p.Deny();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;public static void WriteToFile2()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    // Create a file&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    TextWriter tw = new StreamWriter(@"C:\poop.txt");&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    tw.WriteLine("howdy");&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    tw.Close();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    // Display the text of the file&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    TextReader tr = new StreamReader(@"C:\poop.txt");&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    Console.WriteLine(tr.ReadToEnd());&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    tr.Close();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Notes&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Declarative security is easier&lt;/li&gt;&lt;li&gt;Imperative security is more flexible&lt;/li&gt;&lt;li&gt;Imperative security and Declarative security are similar.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-3841945298800857805?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/3841945298800857805/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=3841945298800857805' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/3841945298800857805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/3841945298800857805'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2010/05/imperative-code-access-security-in-net.html' title='Imperative Code Access Security in .Net 3.5'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-736653465356408925</id><published>2010-05-05T09:57:00.013-05:00</published><updated>2010-05-05T10:42:35.602-05:00</updated><title type='text'>Code Access Security and .Net 3.5</title><content type='html'>Code Access Security (CAS) is probably the biggest mess in the entire .net framework. In general I feel the .net framework is well laid out and easy to understand. CAS is just a complete mess.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I am being forced to learn this in great detail as I study for the 70-536 exam. I am studying to complete the .net 3.5 series for ASP.Net. An added frustration is that a lot of CAS is deprecated in .net 4.0, that certainly hurts the motivation to study.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In this post I'm going to go thru the basics of declarative security. Both at an assembly level and at a method level. First lets assume we have the code below. For this post I won't cover partially trusted applications, we will look at that later.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Assembly Level Declarative Security&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;static void Main(string[] args)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;{           &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    WriteToFile();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    Console.ReadLine();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;public static void WriteToFile()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    // Create a file&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    TextWriter tw = new StreamWriter(@"C:\poop.txt");&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    tw.WriteLine("howdy");&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    tw.Close();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    // Display the text of the file&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    TextReader tr = new StreamReader(@"C:\poop.txt");&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    Console.WriteLine(tr.ReadToEnd());&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    tr.Close();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;}  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style=" ;font-family:'courier new';"&gt;     &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;The code above basically writes to a file named poop.txt at the root of c. Lets say we want to add a permission to allow only access to that file. We can do this both at a method level and at an assembly level. We will look at the assembly level first.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Add the following into your code before the declaration of the namespace. The declares that at a minimum we need access to c:\poop.txt. If you run the application it will run normally.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;[assembly: FileIOPermission(SecurityAction.RequestMinimum, Write = @"c:\poop.txt", Read = @"c:\poop.txt")]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you change the code to be a minimum request for c:\poop2.txt the application will still run without a problem. If you were running as a partially trusted application this would come into play.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;[assembly: FileIOPermission(SecurityAction.RequestMinimum, Write = @"c:\poop2.txt", Read = @"c:\poop2.txt")]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Change the declaration to be a RequestOptional and you will receive different behavior. Once you list one declaration as request optional only the permissions listed will be allowed. So if you are still allowing only permissions to c:\poop2.txt the system will throw an exception. You will also want to declare that you need access to the UI, otherwise displaying the error will be difficult.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[assembly: FileIOPermission(SecurityAction.RequestOptional, Write = @"c:\poop2.txt", Read = @"c:\poop2.txt")]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;[assembly: UIPermission(SecurityAction.RequestMinimum, Unrestricted = true)]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you change poop2.txt to poop.txt the application will run again. Because we are saying that we need access to poop.txt.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;[assembly: FileIOPermission(SecurityAction.RequestOptional, Write = @"c:\poop.txt", Read = @"c:\poop.txt")]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;RequestRefuse can be used to prevent access to a resource. If you refuse access to c:\poop.txt it will block you from writing to that file.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;[assembly: FileIOPermission(SecurityAction.RequestRefuse, Write = @"c:\poop.txt", Read = @"c:\poop.txt")] &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Review of Assembly level restrictions&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;RequestMinimum says I will need access to a particular resource. If the resource is accessible when the assembly is loaded then continue.&lt;/li&gt;&lt;li&gt;RequestOptional says I will need access to a particular resource. Only allow access to resources that a specified. If a resource is specified using RequestMinimum it will also be allowed.&lt;/li&gt;&lt;li&gt;RequestRefuse says do not allow access to a particular resource.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;b&gt;Method Level Declarative Security&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;You can do basically the same thing as the assembly level security, but a particular method level.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Now the SecurityAction you apply to a method is different then the security action applied to an assembly. For assemblies you use RequestMinimum, RequestOptional, RequestRefuse. For methods you use Demand, LinkDemand, Deny, and Permit Only.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Each method action type basically corresponds to a assembly security action type. I'll cover LinkDemand more in a post later.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;div&gt;SecurityAction.Demand == SecurityAction.RequestMinimum&lt;/div&gt;&lt;div&gt;SecurityAction.LinkDemand == SecurityAction.RequestMinimum&lt;/div&gt;&lt;div&gt;SecurityAction.PermitOnly == SecurityAction.RequestOptional&lt;/div&gt;&lt;div&gt;SecurityAction.Deny == SecurityAction.RequestRefuse&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To put a requirement that a method has access to the c:\poop.txt resource, but nothing else use the PermitOnly action. The following code will run just fine.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;[FileIOPermission(SecurityAction.PermitOnly, Write = @"c:\poop.txt", Read = @"c:\poop.txt")]&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;public static void WriteToFile()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    // Create a file&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    TextWriter tw = new StreamWriter(@"C:\poop.txt");&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    tw.WriteLine("howdy");&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    tw.Close();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    // Display the text of the file&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    TextReader tr = new StreamReader(@"C:\poop.txt");&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    Console.WriteLine(tr.ReadToEnd());&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;    tr.Close();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But, change the c:\poop.txt to c:\poop2.txt and you will be blocked.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Things I will cover later&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Imperative Security&lt;/li&gt;&lt;li&gt;Mixing assembly level and method level&lt;/li&gt;&lt;li&gt;RequestRefuse and RequestMinimum (at the same time)&lt;/li&gt;&lt;li&gt;Mixing Imperative and Declarative&lt;/li&gt;&lt;li&gt;Evidence&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" ;font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-736653465356408925?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/736653465356408925/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=736653465356408925' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/736653465356408925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/736653465356408925'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2010/05/code-access-security-and-net-35.html' title='Code Access Security and .Net 3.5'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-769609707742843318</id><published>2010-05-01T22:28:00.003-05:00</published><updated>2010-05-01T22:33:12.363-05:00</updated><title type='text'>Windows Live Authentication</title><content type='html'>I'm developing a web app that uses Windows Live Authentication. We will probably also use Google account login and open id. We don't really want our users to have to have another login. Most users probably have a windows live account or a google account.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I chose Windows Live to do first because their docs seemed a little more flushed out. But there is a problem with the way they make you do the development. The return URL is specified in the setup of your windows live account id. This makes using a single account ID for dev (localhost) and production impossible.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-769609707742843318?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/769609707742843318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=769609707742843318' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/769609707742843318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/769609707742843318'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2010/05/windows-live-authentication.html' title='Windows Live Authentication'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-2398581890343844282</id><published>2010-01-25T10:15:00.006-06:00</published><updated>2010-01-25T10:33:42.119-06:00</updated><title type='text'>Remote testing of web form</title><content type='html'>.Net Web services have a nice test form that is very useful for quick verification of a web service. This sort of verification can be nice after a deployment. It makes it quick and easy to know if it is working. The default behavior is only to allow this functionality to occur from on the box. With a simple web.config setting change you can even test from a remote host.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://geekswithblogs.net/juang/archive/2005/11/28/61437.aspx"&gt;link&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-2398581890343844282?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://geekswithblogs.net/juang/archive/2005/11/28/61437.aspx' title='Remote testing of web form'/><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/2398581890343844282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=2398581890343844282' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/2398581890343844282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/2398581890343844282'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2010/01/remote-testing-of-web-form.html' title='Remote testing of web form'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-354700555970041527</id><published>2010-01-06T16:20:00.002-06:00</published><updated>2010-01-06T16:22:17.145-06:00</updated><title type='text'>DfsCmd</title><content type='html'>You can configure Microsoft's DFS from the command line using DFSCmd.exe.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-354700555970041527?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/354700555970041527/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=354700555970041527' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/354700555970041527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/354700555970041527'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2010/01/dfscmd.html' title='DfsCmd'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-2244575271893282819</id><published>2010-01-02T22:13:00.002-06:00</published><updated>2010-01-02T22:15:20.522-06:00</updated><title type='text'>web2py updated at and created at fields</title><content type='html'>It is nice to have updated at and created at fields in your tables. Rails makes this concept really easy, but web2py isn't too bad. Just add the following to fields when defining your table.&lt;br /&gt;&lt;br /&gt;Field('created_at', 'datetime', &lt;strong&gt;default=request.now&lt;/strong&gt;),   &lt;br /&gt;Field('updated_at', 'datetime', &lt;strong&gt;update=request.now, default=request.now&lt;/strong&gt;),&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-2244575271893282819?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/2244575271893282819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=2244575271893282819' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/2244575271893282819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/2244575271893282819'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2010/01/web2py-updated-at-and-created-at-fields.html' title='web2py updated at and created at fields'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-6890554039197830326</id><published>2010-01-02T11:35:00.002-06:00</published><updated>2010-01-02T11:35:48.881-06:00</updated><title type='text'>Web2py inserting a record</title><content type='html'>I don't know if this is the only way to do this or not, but to insert a record you can do the following.&lt;br /&gt;&lt;br /&gt;db.post.insert(title="title", body="body")&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-6890554039197830326?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/6890554039197830326/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=6890554039197830326' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/6890554039197830326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/6890554039197830326'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2010/01/web2py-inserting-record.html' title='Web2py inserting a record'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-6700197372942139948</id><published>2010-01-02T11:33:00.002-06:00</published><updated>2010-01-02T11:35:16.528-06:00</updated><title type='text'>web2py and Goolge App Engine (GAE)</title><content type='html'>Getting web2py running in GAE wasn't super easy, but once I ran web2py locally and let it update the index.yaml file everything within GAE worked out of the box. I now have a web2py application that runs locally or in GAE without any code changes, pretty cool.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-6700197372942139948?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/6700197372942139948/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=6700197372942139948' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/6700197372942139948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/6700197372942139948'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2010/01/web2py-and-goolge-app-engine-gae.html' title='web2py and Goolge App Engine (GAE)'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-3884662978306921748</id><published>2010-01-01T12:57:00.002-06:00</published><updated>2010-01-01T12:57:54.202-06:00</updated><title type='text'>Getting web2py to run on google app engine</title><content type='html'>useful links&lt;br /&gt;&lt;a href="http://mdp.cti.depaul.edu/AlterEgo/default/show/105"&gt;http://mdp.cti.depaul.edu/AlterEgo/default/show/105&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-3884662978306921748?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/3884662978306921748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=3884662978306921748' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/3884662978306921748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/3884662978306921748'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2010/01/getting-web2py-to-run-on-google-app.html' title='Getting web2py to run on google app engine'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-6303643704395641640</id><published>2010-01-01T11:15:00.003-06:00</published><updated>2010-01-01T11:18:53.967-06:00</updated><title type='text'>web2py</title><content type='html'>I am giving a new web framework a try, &lt;a href="http://web2py.com/examples/default/index"&gt;web2py&lt;/a&gt;. So far it is going pretty good. Not as easy to get going as Rails, but pretty good. I am also forcing myself to learn Python as part of the process. I'll write more as I learn more about the framework.&lt;br /&gt;&lt;br /&gt;Quick notes&lt;br /&gt;1. &lt;a href="http://wiki.web2py.com/Deploying_web2py_on_Google_App_Engine_GAE_"&gt;Supports Google App Engine&lt;/a&gt;&lt;br /&gt;2. Go thru the slides on the homepage, they help alot.&lt;br /&gt;3. Easier to get going than Django.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-6303643704395641640?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/6303643704395641640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=6303643704395641640' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/6303643704395641640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/6303643704395641640'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2010/01/web2py.html' title='web2py'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-1837063116266636253</id><published>2009-06-08T21:36:00.002-05:00</published><updated>2009-06-08T21:38:25.256-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c# .net 4.0 DynamicObject'/><title type='text'>.net 4.0 DynamicObject</title><content type='html'>c# 4.0 has an amazing DynamicObject feature. It is incredibly easy to use too. Below is a sample program showing the feature. The MyValue property is provided dynamically.&lt;br /&gt;&lt;br /&gt;class Program&lt;br /&gt;{&lt;br /&gt;static void Main(string[] args)&lt;br /&gt;{&lt;br /&gt;dynamic d = new TestDynamic();&lt;br /&gt;int i = d.MyValue;&lt;br /&gt;int y = d.MyValue2;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;class TestDynamic : System.Dynamic.DynamicObject&lt;br /&gt;{&lt;br /&gt;public int MyValue2&lt;br /&gt;{&lt;br /&gt;get { return 5; }&lt;br /&gt;}&lt;br /&gt;public override bool TryGetMember(System.Dynamic.GetMemberBinder binder, out object result)&lt;br /&gt;{&lt;br /&gt;bool ret = false;&lt;br /&gt;if (binder.Name == "MyValue")&lt;br /&gt;{&lt;br /&gt;result = 10;&lt;br /&gt;ret = true;&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;ret = base.TryGetMember(binder, out result);&lt;br /&gt;return ret;&lt;br /&gt;}&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-1837063116266636253?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/1837063116266636253/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=1837063116266636253' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/1837063116266636253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/1837063116266636253'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2009/06/net-40-dynamicobject.html' title='.net 4.0 DynamicObject'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-5385143282448480035</id><published>2009-06-07T20:29:00.002-05:00</published><updated>2009-06-07T20:32:21.086-05:00</updated><title type='text'>E3 2009 Thouthts</title><content type='html'>Project Natal seems super cool, but until they announce a release date and show some real games it doesn't amount to much. I also wonder how much I would use it for games I like to play.&lt;br /&gt;&lt;br /&gt;Project Natal also suffers because all 360s won't have one. Will some games be Natal only, or will developers double their efforts on new games to support the existing controller and Natal.&lt;br /&gt;&lt;br /&gt;One thing that might be possible with Natal would be more realistic 3D scenes. If you move your head the image could be adjusted. That could create some crazy 3D effects.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-5385143282448480035?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/5385143282448480035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=5385143282448480035' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/5385143282448480035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/5385143282448480035'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2009/06/e3-2009-thouthts.html' title='E3 2009 Thouthts'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-7275462382311038973</id><published>2008-08-20T13:08:00.002-05:00</published><updated>2008-08-20T13:09:49.518-05:00</updated><title type='text'>A new word</title><content type='html'>One of my co-workers (Hari) and I have created a new word, "welk". It can be used at the end of a conversation as a replacement for "later".&lt;br /&gt;&lt;br /&gt;welk.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-7275462382311038973?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/7275462382311038973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=7275462382311038973' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/7275462382311038973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/7275462382311038973'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/08/new-word.html' title='A new word'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-5624067310118465500</id><published>2008-08-08T11:00:00.002-05:00</published><updated>2008-08-08T11:01:17.880-05:00</updated><title type='text'>Linq - Stored procedures</title><content type='html'>Linq has some amazing stored procedure support. Crazy. You can now call stored procedures just like you were calling a functions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-5624067310118465500?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://msdn.microsoft.com/en-us/vbasic/bb737938.aspx#function' title='Linq - Stored procedures'/><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/5624067310118465500/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=5624067310118465500' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/5624067310118465500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/5624067310118465500'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/08/linq-stored-procedures.html' title='Linq - Stored procedures'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-6235338084133686034</id><published>2008-08-07T22:55:00.002-05:00</published><updated>2008-08-07T22:57:24.237-05:00</updated><title type='text'>Going to give LINQPad a try</title><content type='html'>It seems like a nice way to learn LINQ while performing daly tasks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-6235338084133686034?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.linqpad.net/challenge.html' title='Going to give LINQPad a try'/><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/6235338084133686034/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=6235338084133686034' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/6235338084133686034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/6235338084133686034'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/08/going-to-give-linqpad-try.html' title='Going to give LINQPad a try'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-6389469489064763161</id><published>2008-08-06T08:32:00.002-05:00</published><updated>2008-08-06T08:36:21.877-05:00</updated><title type='text'>Vista Notes</title><content type='html'>People give Vista a lot of crap. But this last week I have been using it as my primary development system, and I am liking it. For development I think it is a better environment then XP.&lt;br /&gt;&lt;br /&gt;Things I like so far&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Better IIS (multiple websites!!!). This has been needed for a long time.&lt;/li&gt;&lt;li&gt;Search on Vista is awesome. You can actually do things like "size &gt; 1000".&lt;/li&gt;&lt;li&gt;Users folder instead of Documents and Settings&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-6389469489064763161?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/6389469489064763161/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=6389469489064763161' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/6389469489064763161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/6389469489064763161'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/08/vista-notes.html' title='Vista Notes'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-8052182431904390112</id><published>2008-07-27T23:18:00.002-05:00</published><updated>2008-07-28T15:50:43.790-05:00</updated><title type='text'>StringTemplate</title><content type='html'>While looking for a .net template engine I stumbled upon &lt;a href="http://www.stringtemplate.org/"&gt;StringTemplate&lt;/a&gt;. It is by the creator of antlr (which is also cool). I can't wait to give this a try.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-8052182431904390112?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/8052182431904390112/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=8052182431904390112' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/8052182431904390112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/8052182431904390112'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/07/stringtemplatenet.html' title='StringTemplate'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-7338741452508377459</id><published>2008-07-27T09:43:00.001-05:00</published><updated>2008-07-27T09:44:42.504-05:00</updated><title type='text'>VirtualBox - pretty easy</title><content type='html'>It turned out to be really easy getting my VirtualBox running on my Vista laptop. I created a virtual server that was running Ubunut 8.04. Even configuring the network bridge was incredibly easy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-7338741452508377459?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/7338741452508377459/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=7338741452508377459' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/7338741452508377459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/7338741452508377459'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/07/virtualbox-pretty-easy.html' title='VirtualBox - pretty easy'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-1586434879633434350</id><published>2008-07-26T20:35:00.002-05:00</published><updated>2008-07-26T20:39:00.227-05:00</updated><title type='text'>VirtualBox</title><content type='html'>I am going to make an attempt at using Sun's VirtualBox. My ultimate goal will be to have multiple Ubuntu vm instances running under a single Ubuntu installation. Each Ubuntu vm instance will need to be viewable from the network at a private static ip address. I hope this isn't too difficult. I am trying it first on my Vista laptop. If I can get it to work there then I'll try running on Ubuntu.&lt;br /&gt;&lt;br /&gt;Useful links:&lt;br /&gt;&lt;a href="http://www.virtualbox.org/"&gt;virtualbox&lt;/a&gt;&lt;br /&gt;&lt;a href="http://opensourceexperiments.wordpress.com/2008/04/18/virtualbox-case-study-making-host-only-networking-work-between-two-ubuntu-guest-os-virtual-machine-on-windows-vista-host/"&gt;Networking Info&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-1586434879633434350?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/1586434879633434350/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=1586434879633434350' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/1586434879633434350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/1586434879633434350'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/07/virtualbox.html' title='VirtualBox'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-5660280714083471763</id><published>2008-07-26T11:00:00.001-05:00</published><updated>2008-07-26T11:00:52.707-05:00</updated><title type='text'>XBox Live Movie Count</title><content type='html'>July: 473, of which probably half are slasher films.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-5660280714083471763?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/5660280714083471763/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=5660280714083471763' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/5660280714083471763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/5660280714083471763'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/07/xbox-live-movie-count.html' title='XBox Live Movie Count'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-4824517159407513907</id><published>2008-07-21T16:02:00.002-05:00</published><updated>2008-07-21T16:04:02.705-05:00</updated><title type='text'>Sleepy</title><content type='html'>My son is 5 months old, but still doesn't have the sleeping thing down. Last night was another example of Mom (and Dad) not getting a great night sleep. Hopefully someday :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-4824517159407513907?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/4824517159407513907/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=4824517159407513907' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/4824517159407513907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/4824517159407513907'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/07/sleepy.html' title='Sleepy'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-8616009764349951524</id><published>2008-07-06T08:59:00.001-05:00</published><updated>2008-07-06T09:02:06.556-05:00</updated><title type='text'>VS2008, Vista and ActiveX controls</title><content type='html'>Using an ActiveX control in a .net application is normally a pretty easy process. Just add a reference and everything works. With VS2008 and Windows Vista it isn’t as easy. There are two issues that will prevent your application from working. The first is that VS2008 now enables DEP for applications it compiles. The second is that you need to tell VS2008 to compile your .net application for the same processor (32 or 64) as the ActiveX control.&lt;br /&gt;Steps for using an ActiveX control in VS2008.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Add a reference to your ActiveX control to VS2008.&lt;/li&gt;&lt;li&gt;Add a post build event to your VS2008 project. This will remove DEP for your .net application. "C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\editbin" /NXCOMPAT:NO $(TargetPath)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If your VS2008 project settings select x86 if the ActiveX control is a 32-bit ActiveX control. Select x64 if the ActiveX control is a 64-bit ActiveX control.&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-8616009764349951524?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/8616009764349951524/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=8616009764349951524' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/8616009764349951524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/8616009764349951524'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/07/vs2008-vista-and-activex-controls.html' title='VS2008, Vista and ActiveX controls'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-5440098997502778282</id><published>2008-07-03T15:19:00.002-05:00</published><updated>2008-07-03T15:24:06.817-05:00</updated><title type='text'>ActiveX control and .net applications on Vista</title><content type='html'>Using an ActiveX control with a .net application can be a little strange on Vista. When you try and do a CreateObject on Vista you will receive a DEP error (when compiling with VS2008). To get rid of this error you need to run editbin on your binary.&lt;br /&gt;&lt;br /&gt;\Program Files\Microsoft Visual Studio 9.0\VC\bin\editbin.exe" /NXCOMPAT:NO mybin.exe&lt;br /&gt;&lt;br /&gt;Also if you are trying to run your ActiveX control on Vista 64-bit you may run into other problems. If your ActiveX control is 32-bits and you have your .net compile option set to "AnyCPU" CreateObject will not work. To make application work you will need to set your application's compile option to "x86".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-5440098997502778282?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/5440098997502778282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=5440098997502778282' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/5440098997502778282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/5440098997502778282'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/07/activex-control-and-net-applications-on.html' title='ActiveX control and .net applications on Vista'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-2988251925787068410</id><published>2008-07-03T15:12:00.002-05:00</published><updated>2008-07-03T15:19:17.688-05:00</updated><title type='text'>Vista 64-bit - how I loath thee</title><content type='html'>I want to like Vista 64-bit. I want to like it for a few reasons.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;I want to move on past XP.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;32-bit operating systems are already becoming limiting. We need more memory.&lt;/li&gt;&lt;/ol&gt;But, as much as I want to like Vista 64-bit, I can't. I can tolerate Vista (32-bit). There are a lot of things to be annoyed with, but Vista 64-bit is just too much.&lt;br /&gt;&lt;br /&gt;With Vista 64-bit there are two Program files folders. One for 32-bit software and one for 64-bit software. This is just ugly. Plus the usage of the system32 folder is crazy too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-2988251925787068410?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/2988251925787068410/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=2988251925787068410' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/2988251925787068410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/2988251925787068410'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/07/vista-64-bit-how-i-loath-thee.html' title='Vista 64-bit - how I loath thee'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-2630048414999266510</id><published>2008-06-23T10:48:00.002-05:00</published><updated>2008-06-23T10:57:26.979-05:00</updated><title type='text'>Dynamic SQL vs Stored procedure</title><content type='html'>We work in .net 1.1 so we can't use any of the cool Linq stuff yet. Plus we use Oracle as our database so that too reduces what we can integrate with. But I was getting tired of our lack of a good Object relation mapping framework (entity framework) so I created one.&lt;br /&gt;&lt;br /&gt;It started out as a simple class that other classes can be derived from. It handles a lot of the tedious code to handle saving and finding records in the database. Plus, it uses reflection to auto-map database columns to field / properties in the objects. This worked fine but it still required a lot more work than it needed to.&lt;br /&gt;&lt;br /&gt;So I created a code generator to generate the starting SQL (stored procedures) and objects needed for this. This too reduced development time but I felt it could be better. So I decided to remove the stored procedures and just generate the SQL dynamically in the class. I was worried this would result in worse performance but I was pleasently suprised by the results.&lt;br /&gt;&lt;br /&gt;The dynamic code resulted in performance esentially the same as using stored procedures. This was a big suprise. I really expected the SPs to perform better than dynamic (in .net SQL). My tests were all for simple scenarios (insert / update / select from a single table). Maybe if selects involved joining multiple tables different performance could have been observed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-2630048414999266510?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/2630048414999266510/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=2630048414999266510' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/2630048414999266510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/2630048414999266510'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/06/dynamic-sql-vs-stored-procedure.html' title='Dynamic SQL vs Stored procedure'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-1288949388788197912</id><published>2008-06-23T10:40:00.003-05:00</published><updated>2008-06-23T10:48:24.441-05:00</updated><title type='text'>More and more integration</title><content type='html'>When we first develop a product if often has only a few points of integration. If a product is successful it seems we often get more and more integration points. Before long integration seems to be the majority of work. Now we have to integrate with x or y. Integration points can become a huge burden for software projects. That is why it is so important to do a good job integrating. If you can come up with a few good patterns to use for integration it can save you a huge amount of work in the long run. Our systems with bad integrations are always painful to work with, but our systems with good integrations are usually pretty easy to tweak.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-1288949388788197912?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/1288949388788197912/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=1288949388788197912' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/1288949388788197912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/1288949388788197912'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/06/more-and-more-integration.html' title='More and more integration'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-1962953576234857322</id><published>2008-06-18T11:18:00.003-05:00</published><updated>2008-06-18T11:21:30.718-05:00</updated><title type='text'>Tech Ed 2008</title><content type='html'>I didn't go to Tech Ed (new baby at my house), but I can't say that I missed much. Listening to others at our company that went Microsoft continues to tout things already mentioned elsewhere. Is that a bad thing? No, but I feel Microsoft needs to get some of these techs out of development (beta) and into final versions that we can use.&lt;br /&gt;&lt;br /&gt;Things of interest:&lt;br /&gt;IronRuby&lt;br /&gt;MVC&lt;br /&gt;Dynamic Data&lt;br /&gt;REST&lt;br /&gt;Silverlight 2.0&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-1962953576234857322?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/1962953576234857322/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=1962953576234857322' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/1962953576234857322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/1962953576234857322'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/06/tech-ed-2008.html' title='Tech Ed 2008'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-3537796318806662517</id><published>2008-06-18T11:17:00.003-05:00</published><updated>2008-06-18T11:17:52.721-05:00</updated><title type='text'>XBox Live Marketplace movie count - June 17th</title><content type='html'>399 movies.&lt;br /&gt;&lt;br /&gt;(I am tracking how many movies are added per month)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-3537796318806662517?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/3537796318806662517/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=3537796318806662517' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/3537796318806662517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/3537796318806662517'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/06/xbox-live-marketplace-movie-count-june.html' title='XBox Live Marketplace movie count - June 17th'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-3705362127906172278</id><published>2008-06-14T08:56:00.002-05:00</published><updated>2008-06-14T09:08:03.024-05:00</updated><title type='text'>NPD numbers for May</title><content type='html'>The May numbers are out and the 360 is behind the PS3 in hardware units sold, and the Wii is way out in front. I think this is probably what everyone would expect. Maybe everyone thought GTA4 would boost hardware units of the 360 / PS3 more, but I think there needs to be a price drop if they want the sales to increase.&lt;br /&gt;&lt;br /&gt;The 360 is especially in need of a price drop. Without a price drop soon the 360 could get smashed the rest of this year. Why? Well Sony won the race to the next movie format, and that now gives another reason to own a PS3. You get a game system and a Blu-ray movie player for comparable price to the 360. Why would a neutral gamer purchase a 360? Sure the 360 has Halo 3, but Halo 3 isn't everyones favorite game.&lt;br /&gt;&lt;br /&gt;Without a price drop soon it might be a signal that the Microsoft is giving up on the 360. Waiting this long for a price drop makes one wonder. Why didn't they drop the price of the 360 before the release of GTA4. They could have ran up some good number with a price drop. At the current price point the 360 is still too expense for many families.&lt;br /&gt;&lt;br /&gt;How low does the 360 need to go? The Arcade SKU needs to go below the price of the Wii. $199 would be ideal. That would allow that SKU to be purchased by the masses. The premium needs to $299 or less. Preferably $249 (same price as Wii).&lt;br /&gt;&lt;br /&gt;Should Sony or Nintendo lower their prices. I would say no. Sony has MSG4 and Blu-ray that can probably carry them until the holiday season. Buying a Wii is still difficult, so there is no reason to lower the price of the Wii.&lt;br /&gt;&lt;br /&gt;Microsoft is in a tough situation here. If they can't keep momentum this year the 360 might lose, and lose to both the PS3 and the Wii. They would be a major loss to Microsoft given how much they have invested into the platform.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-3705362127906172278?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.joystiq.com/2008/06/12/may-npd-ps3-up-and-ps2-out-gta-iv-in-and-cod-4-out/' title='NPD numbers for May'/><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/3705362127906172278/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=3705362127906172278' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/3705362127906172278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/3705362127906172278'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/06/npd-numbers-for-may.html' title='NPD numbers for May'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-7100414007960651007</id><published>2008-06-11T12:47:00.003-05:00</published><updated>2008-06-11T12:50:28.461-05:00</updated><title type='text'>Google app engine - failure</title><content type='html'>I wanted to like Google's App Engine. I really did. It sounded like a wonderful place put up small web applications. After working it with for a few evenings I realized that it sucked, and at least for not I am giving up on using it.&lt;br /&gt;&lt;br /&gt;Why does it suck?&lt;br /&gt;1. Requires a lot of effort for each page.&lt;br /&gt;2. No MVC baked in.&lt;br /&gt;3. Database access seemed weird. But not that bad.&lt;br /&gt;&lt;br /&gt;Maybe I was just expecting something like Rails (only in Python), but it just seemed like a lot of work to create a few pages. Hopefully future version can simplify the process.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-7100414007960651007?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/7100414007960651007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=7100414007960651007' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/7100414007960651007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/7100414007960651007'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/06/google-app-engine-failure.html' title='Google app engine - failure'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-8621280565990238728</id><published>2008-05-16T12:54:00.001-05:00</published><updated>2008-05-16T12:55:53.466-05:00</updated><title type='text'>XBox Live Marketplace movie count</title><content type='html'>May 15: 362 Movies&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-8621280565990238728?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/8621280565990238728/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=8621280565990238728' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/8621280565990238728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/8621280565990238728'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/05/xbox-live-marketplace-movie-count.html' title='XBox Live Marketplace movie count'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-3450150084941503436</id><published>2008-05-08T19:21:00.001-05:00</published><updated>2008-05-08T19:24:00.727-05:00</updated><title type='text'>Amazon's astore</title><content type='html'>Amazon has a service where you can create your own custom store. It was pretty easy to do. Check out my custom store at &lt;a href="http://astore.amazon.com/mutantbunny-20"&gt;http://astore.amazon.com/mutantbunny-20&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-3450150084941503436?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://astore.amazon.com/mutantbunny-20' title='Amazon&apos;s astore'/><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/3450150084941503436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=3450150084941503436' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/3450150084941503436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/3450150084941503436'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/05/amazons-astore.html' title='Amazon&apos;s astore'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-5706690158841288295</id><published>2008-05-06T21:59:00.001-05:00</published><updated>2008-05-06T22:01:15.251-05:00</updated><title type='text'>Google App Engine</title><content type='html'>I received my invitation to the Google App Engine today. I'll need to write a Python web application to use this site. I guess it is time I learn Python and Django :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-5706690158841288295?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/5706690158841288295/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=5706690158841288295' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/5706690158841288295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/5706690158841288295'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/05/google-app-engine.html' title='Google App Engine'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-4838822122799290742</id><published>2008-04-10T23:43:00.002-05:00</published><updated>2008-04-10T23:47:28.119-05:00</updated><title type='text'>XBox Live Marketplace movie count</title><content type='html'>The XBox Live Marketplace has a wonderful idea, rent movies online. The movies are reasonably priced (maybe a little high). But they don't seem to be adding movies very fast, or at all. What happened. There has seemed to be around 300 movies for a long time. So now I am going to keep track. I am going to record how many movies are in the marketplace on a random day each month. At the end of the year I'll report how many movies have been added to the service.&lt;br /&gt;&lt;br /&gt;April 9th: 302 movies&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-4838822122799290742?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/4838822122799290742/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=4838822122799290742' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/4838822122799290742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/4838822122799290742'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/04/xbox-live-marketplace-movie-count.html' title='XBox Live Marketplace movie count'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-8812383370039942269</id><published>2008-03-17T16:31:00.002-05:00</published><updated>2008-03-17T16:46:11.645-05:00</updated><title type='text'>email vs e-mail</title><content type='html'>email vs e-mail is a debate that has existed within technical writing for a while. I think technical writers usually use the e-mail version and not the email version. I imagine they continue using e-mail because that is what the rest of their documents say, and they don't want to update previous documents.&lt;br /&gt;&lt;br /&gt;I personally prefer email without the hyphen. Email is a common term (noun / verb) within the English speaking world. Why continue on with this crazy pattern of using a hyphen.&lt;br /&gt;&lt;br /&gt;I found a website that looks for what is most common on the web. And email won.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-8812383370039942269?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://spellweb.com/dualwebber.php' title='email vs e-mail'/><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/8812383370039942269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=8812383370039942269' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/8812383370039942269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/8812383370039942269'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/03/email-vs-e-mail.html' title='email vs e-mail'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-5156040477416802747</id><published>2008-03-13T18:04:00.002-05:00</published><updated>2008-11-15T02:23:34.377-06:00</updated><title type='text'>Sam and I playing video game</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_jBiKhFpTHdY/R9mzN-g3n7I/AAAAAAAAAB8/UAlqHoUU4oE/s1600-h/IMG_0419.JPG"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_jBiKhFpTHdY/R9mzN-g3n7I/AAAAAAAAAB8/UAlqHoUU4oE/s320/IMG_0419.JPG" alt="" id="BLOGGER_PHOTO_ID_5177366299339628466" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-5156040477416802747?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/5156040477416802747/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=5156040477416802747' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/5156040477416802747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/5156040477416802747'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/03/sam-and-i-playing-video-game.html' title='Sam and I playing video game'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_jBiKhFpTHdY/R9mzN-g3n7I/AAAAAAAAAB8/UAlqHoUU4oE/s72-c/IMG_0419.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-575959161874033965</id><published>2008-02-21T21:53:00.002-06:00</published><updated>2008-11-15T02:23:34.679-06:00</updated><title type='text'>A new baby!!!</title><content type='html'>We have a new baby&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_jBiKhFpTHdY/R75HovLaqhI/AAAAAAAAAB0/K3b5MrOYDV0/s1600-h/IMG_0387.JPG"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_jBiKhFpTHdY/R75HovLaqhI/AAAAAAAAAB0/K3b5MrOYDV0/s320/IMG_0387.JPG" alt="" id="BLOGGER_PHOTO_ID_5169648187452598802" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_jBiKhFpTHdY/R75HdvLaqgI/AAAAAAAAABs/eHP_n87OI54/s1600-h/IMG_0379.JPG"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_jBiKhFpTHdY/R75HdvLaqgI/AAAAAAAAABs/eHP_n87OI54/s320/IMG_0379.JPG" alt="" id="BLOGGER_PHOTO_ID_5169647998474037762" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-575959161874033965?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/575959161874033965/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=575959161874033965' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/575959161874033965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/575959161874033965'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/02/new-baby.html' title='A new baby!!!'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_jBiKhFpTHdY/R75HovLaqhI/AAAAAAAAAB0/K3b5MrOYDV0/s72-c/IMG_0387.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-4569019163979492933</id><published>2008-02-17T23:04:00.002-06:00</published><updated>2008-11-15T02:23:34.937-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='home'/><title type='text'>Kitchen Floor redone</title><content type='html'>My dad and one of this friends redid our kitchen floor last week, it looks great.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_jBiKhFpTHdY/R7kSa_LaqfI/AAAAAAAAABk/Up-9cwajsRQ/s1600-h/IMG_0364.JPG"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_jBiKhFpTHdY/R7kSa_LaqfI/AAAAAAAAABk/Up-9cwajsRQ/s320/IMG_0364.JPG" alt="" id="BLOGGER_PHOTO_ID_5168182302229572082" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_jBiKhFpTHdY/R7kSOfLaqeI/AAAAAAAAABc/nDjNUzr8xy8/s1600-h/IMG_0362.JPG"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_jBiKhFpTHdY/R7kSOfLaqeI/AAAAAAAAABc/nDjNUzr8xy8/s320/IMG_0362.JPG" alt="" id="BLOGGER_PHOTO_ID_5168182087481207266" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-4569019163979492933?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/4569019163979492933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=4569019163979492933' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/4569019163979492933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/4569019163979492933'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/02/kitchen-floor-redone.html' title='Kitchen Floor redone'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_jBiKhFpTHdY/R7kSa_LaqfI/AAAAAAAAABk/Up-9cwajsRQ/s72-c/IMG_0364.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-8104405657969234091</id><published>2008-02-02T22:04:00.000-06:00</published><updated>2008-02-02T22:05:31.788-06:00</updated><title type='text'>Its GroundHog Day</title><content type='html'>GroundHog Day is my favorite movie of all time. If you haven't seen it before, today (GroundHog Day) is the perfect day.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-8104405657969234091?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/8104405657969234091/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=8104405657969234091' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/8104405657969234091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/8104405657969234091'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/02/its-groundhog-day.html' title='Its GroundHog Day'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-2576032615068447918</id><published>2008-01-25T13:29:00.000-06:00</published><updated>2008-01-25T13:40:31.552-06:00</updated><title type='text'>Uninstall the VS 2008 Beta</title><content type='html'>I like Visual Studio. I use it everyday at my job and it is a pretty good development environment. Sure it gets a little angry every now and again. And it uses a couple terabytes of ram, but it is overall a pretty good product.&lt;br /&gt;&lt;br /&gt;My beef is with the betas for Visual Studio. With both 2005 and now 2008 we have installed the beta to evaluate the new features and see how are existing code will run with the new framework. And both times we have been bitten. Both times the uninstall included with the Visual Studio beta screwed stuff up.&lt;br /&gt;&lt;br /&gt;Now I realize that this is a beta and betas are not final code. I realize that betas have more bugs than final products (usually). But still this is the Visual Studio development team. If you would expect solid betas you would expect it from them, and you would most certainly expect the beta uninstall would work. If there is anything you will want to do with a beta it is uninstall.&lt;br /&gt;&lt;br /&gt;Check out the link below for details on uninstalling VS2008.&lt;br /&gt;http://msdn2.microsoft.com/en-us/vs2008/bb964521.aspx&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-2576032615068447918?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://msdn2.microsoft.com/en-us/vs2008/bb964521.aspx' title='Uninstall the VS 2008 Beta'/><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/2576032615068447918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=2576032615068447918' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/2576032615068447918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/2576032615068447918'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/01/uninstall-vs-2008-beta.html' title='Uninstall the VS 2008 Beta'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-6986589289960778498</id><published>2008-01-23T23:51:00.000-06:00</published><updated>2008-01-23T23:55:05.942-06:00</updated><title type='text'>MySql backup / restore</title><content type='html'>Backup a MySql database:&lt;br /&gt;mysqldump mydb &gt; backup.sql&lt;br /&gt;&lt;br /&gt;Restore a MySql database&lt;br /&gt;mysql -u root -p mydb &lt; backup.sql&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-6986589289960778498?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/6986589289960778498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=6986589289960778498' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/6986589289960778498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/6986589289960778498'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/01/mysql-backup-restore.html' title='MySql backup / restore'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-1950384028591025109</id><published>2008-01-22T22:11:00.000-06:00</published><updated>2008-01-22T22:20:33.484-06:00</updated><title type='text'>Capistrano, Rails,and Mongrel</title><content type='html'>I am using Capistrano to deploy my Rails applications. I had it setup and working okay with my Rails 1.2 application, but with my Rails 2.0 application I kept running into problems. For some reason it kept giving me anger of some passwd thing :(&lt;br /&gt;&lt;br /&gt;Well eventually I just decided it would be easier to manually change the deploy:restart task to restart my mongrel cluster. I added the following lines to my deploy.rb file.&lt;br /&gt;&lt;br /&gt;namespace :deploy do&lt;br /&gt;&lt;br /&gt;  desc "mongrel restart"&lt;br /&gt;  task :restart do&lt;br /&gt;    run "cd " + deploy_to + "/current &amp;amp;&amp;amp; mongrel_rails cluster::restart"&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;end&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-1950384028591025109?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/1950384028591025109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=1950384028591025109' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/1950384028591025109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/1950384028591025109'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/01/capistrano-railsand-mongrel.html' title='Capistrano, Rails,and Mongrel'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-5436926392006269060</id><published>2008-01-20T15:33:00.000-06:00</published><updated>2008-01-20T16:18:38.133-06:00</updated><title type='text'>Rails 2.0 pagination</title><content type='html'>Pagination in Rails before 2.0 was kind of awkward to use. It most certainly wasn't the most beautiful interface. Well with Rails 2.0 pagination has been removed from the core of Rails. The only way to use pagination is to install a plugin. Classic pagination is available in a plugin, but this post is about another plugin the will_paginate plugin.&lt;br /&gt;&lt;br /&gt;To install the plugin type the following.&lt;br /&gt;ruby script/plugin install svn://errtheblog.com/svn/plugins/will_paginate&lt;br /&gt;&lt;br /&gt;Then you must change your existing pagination usage in your controllers. Previously you probably had something like below in you controllers.&lt;br /&gt;&lt;br /&gt;@contact_pages, @contacts = paginate(:Contact, :per_page =&gt; 20)&lt;br /&gt;&lt;br /&gt;You will need to change this to something like below.&lt;br /&gt;&lt;br /&gt;@contacts = Contact.paginate(:page =&gt; params[:page], :per_page =&gt; 20)&lt;br /&gt;&lt;br /&gt;Then your templates need to be updated. Instead of using pagination_link you will need to use will_paginate.&lt;br /&gt;&lt;br /&gt;&lt;%= pagination_links(@contact_pages) %&gt;&lt;br /&gt;&lt;br /&gt;needs to become...&lt;br /&gt;&lt;br /&gt;&lt;%= will_paginate @contacts %&gt;&lt;br /&gt;&lt;br /&gt;There you go. Rails 1.2 pagination converted to Rails 2.0 using the will_paginate plugin.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-5436926392006269060?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/5436926392006269060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=5436926392006269060' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/5436926392006269060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/5436926392006269060'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/01/rails-20-pagination.html' title='Rails 2.0 pagination'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-1906146497410600536</id><published>2008-01-18T16:18:00.000-06:00</published><updated>2008-01-18T16:22:29.087-06:00</updated><title type='text'>Free XBox Live Game</title><content type='html'>Personally I don't think XBox Live current problems are that big of deal. They haven't really cost me any money, and I am not that upset, despite my enjoyment complaining about the problem :)&lt;br /&gt;&lt;br /&gt;But MS is now giving away to all gamers a free XBox Live game to make up for it. Interestingly I wonder if this has legal ramifications. If you download (take MS's offer) the game does that prevent you from suing MS. I am no legal expert, but just wondering out loud.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;I should also note that I think the people that are suing are idiots with way too much time on their hands.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-1906146497410600536?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.majornelson.com/archive/2008/01/18/undertow-free-of-charge-next-week.aspx' title='Free XBox Live Game'/><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/1906146497410600536/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=1906146497410600536' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/1906146497410600536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/1906146497410600536'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/01/free-xbox-live-game.html' title='Free XBox Live Game'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-5492106232551355814</id><published>2008-01-14T22:46:00.000-06:00</published><updated>2008-01-14T22:54:27.248-06:00</updated><title type='text'>360 Red Ring of Death Continues</title><content type='html'>I have a friend whose 360 did the "Red Ring of Death" about a month ago. She sent her 360 back to MS and they sent her a different one. The new one has the same "Red Ring of Death" issue. I am a huge fan of the 360, but this is just ridiculous. MS needs to get this problem behind them, and sending back broken 360 isn't the answer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-5492106232551355814?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/5492106232551355814/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=5492106232551355814' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/5492106232551355814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/5492106232551355814'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/01/360-red-ring-of-death-continues.html' title='360 Red Ring of Death Continues'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-5805717398980260569</id><published>2008-01-12T14:04:00.000-06:00</published><updated>2008-01-12T14:11:19.205-06:00</updated><title type='text'>Wii effect</title><content type='html'>Something happened last night that I never expected, my mom and I were battling it out with a video game. My mom fell in love with Wii Sports Bowling last night. We had a hard time getting her to stop playing, it was a really strange thing to see.&lt;br /&gt;&lt;br /&gt;I still don't have much love for the Wii, but watching it grab my mom's attention like that was amazing. While I doubt I'll ever spend hours playing with my Wii, I think my mom might. Now if I can only find her a Wii.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-5805717398980260569?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/5805717398980260569/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=5805717398980260569' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/5805717398980260569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/5805717398980260569'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/01/wii-effect.html' title='Wii effect'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-5586911730589316991</id><published>2008-01-08T09:40:00.000-06:00</published><updated>2008-01-08T09:50:27.027-06:00</updated><title type='text'>ruby-openid</title><content type='html'>I am working on a new Ruby on Rails website, and with this new website I wanted to support OpenID. Doing so with Ruby involves using the ruby-openid gem. Most the articles I found on the web seemed to describe how to use older versions of the library. After many frustrations, and almost giving up I eventually started looking for the actual code (locally) for the gem. While doing so I stumbled across some excellent examples includes right with the gem. They got me going in no time. Excellent work "ruby-openid" team. I just should have looked there sooner.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-5586911730589316991?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://openidenabled.com/ruby-openid/' title='ruby-openid'/><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/5586911730589316991/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=5586911730589316991' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/5586911730589316991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/5586911730589316991'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/01/ruby-openid.html' title='ruby-openid'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-1205405835888507181</id><published>2008-01-07T13:05:00.001-06:00</published><updated>2008-01-07T13:05:50.493-06:00</updated><title type='text'>Lego Batman</title><content type='html'>There are some screen shots of Lego Batman up on Kotaku, I can't wait.&lt;br /&gt;&lt;br /&gt;http://kotaku.com/341667/new-lego-batman-screens-hit&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-1205405835888507181?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/1205405835888507181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=1205405835888507181' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/1205405835888507181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/1205405835888507181'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/01/lego-batman.html' title='Lego Batman'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-3799705020648470690</id><published>2008-01-06T15:08:00.000-06:00</published><updated>2008-01-06T15:18:37.810-06:00</updated><title type='text'>Holiday Video Gaming</title><content type='html'>I love to play video games, it is something I haven't grown out of. I can even get my wife to play sometimes, though my wife is mostly a RockBand / Guitar Hero kind of person.&lt;br /&gt;&lt;br /&gt;This holiday has been an awesome holiday to be a 360 owner. With some many great games like Halo 3, Call of Duty 4, The Orange Box, Bioshock, and Mass Effect it couldn't have been a better time to own a 360. And I have played a lot of video games lately.&lt;br /&gt;&lt;br /&gt;I got Call of Duty 4 for my Birthday (early December) and played that up to Christmas. On Christmas I got NBA 2K8, which is a very good game. I got my wife RockBand and a wii for Christmas. We have been playing RockBand together some, and I am really enjoying it.&lt;br /&gt;&lt;br /&gt;The wii hasn't been used as much as I thought it would, but Super Mario Galaxy is an excellent game (would be better with a normal controller). I can't recommend Zelda though. It hasn't done much for me. Wii sports is an o.k. party game, but not a great game either. The integrated web browser is kind of cool (why can't MS give us a web browser on the 360). Plus the mii avatars are way better than gamer pictures. I'll do a more complete review / comparison of 360 vs wii later.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-3799705020648470690?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/3799705020648470690/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=3799705020648470690' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/3799705020648470690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/3799705020648470690'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/01/holiday-video-gaming.html' title='Holiday Video Gaming'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-3678590429292776193</id><published>2008-01-04T21:33:00.000-06:00</published><updated>2008-01-04T21:53:23.712-06:00</updated><title type='text'>JavaScript secure hash login with Rails</title><content type='html'>Sending passwords plain text over the web isn't a great idea. Normally if you have access to https this isn't a big deal, because they'll just be sent over the encrypted https traffic. But if you are a small website you might not be able to get / install a SSL certificate necessary for the https traffic.&lt;br /&gt;&lt;br /&gt;What should you do under that scenario? Use JavaScript to hash the passwords. That way you are only sending a hash (md5 or sha1) of the password.&lt;br /&gt;&lt;br /&gt;How to setup JavaScript hashing of passwords using Ruby on Rails:&lt;br /&gt;&lt;br /&gt;1. Get a JavaScript implementation of &lt;a href="http://pajhome.org.uk/crypt/md5/"&gt;sha1&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;font-size:85%;" &gt;&lt;%= javascript_include_tag "sha1" %&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;2. On your submit buttons add an on click JavaScript function that will encrypt the password fields.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;font-size:85%;" &gt;&lt;%= submit_tag 'Login', :controller =&gt; 'Members', :action =&gt; 'login', :onclick =&gt; 'HashPasswords()' %&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;3. Write your JavaScript function to encrypt the password.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;function HashPasswords()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    try&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    {                     &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      HashPasswordField("login_password");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    catch(err)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    }        &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;function HashPasswordField(field_id)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   try&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;       pw_field = document.getElementById(field_id);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;       if (pw_field != null)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;       {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;         pw_hash = hex_sha1(pw_field.value);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;         pw_field.value = pw_hash;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;       }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   catch(err)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   }        &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt; }&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-3678590429292776193?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/3678590429292776193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=3678590429292776193' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/3678590429292776193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/3678590429292776193'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/01/javascript-secure-hash-login-with-rails.html' title='JavaScript secure hash login with Rails'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-437929568934537213</id><published>2008-01-04T08:45:00.000-06:00</published><updated>2008-01-04T08:54:51.611-06:00</updated><title type='text'>XBox Live Christmas Performance</title><content type='html'>Over the Christmas break XBox Live broke. I wrote up another post about this and speculated that it was purely a problem of load. While I am glad that Microsoft acknowledged the problem I am a little concerned with their ability to do capacity planning.&lt;br /&gt;&lt;br /&gt;Clearly anyone should have known that they were going to get a lot of new users over Christmas. And that a lot more user's would be online over the Christmas break. But clearly Microsoft didn't want to invest in the necessary hardware until it became a problem for the users. Microsoft should have invested in the required hardware (or bandwidth) before Christmas. Waiting until your user's have problems is just bad business sense. I sometimes get the feeling that Microsoft wants to nickel/dime the XBox Live community to death. And things like this don't help that sentiment.&lt;br /&gt;&lt;br /&gt;Also, to make up for the downtime Microsoft is going to give all XBox Live user's a free arcade game. I understand the billing complexities that would be required to add an extra month on to everyone's service. Doing isn't a simple matter of adding 1 to a db record. But a free XBox Live arcade game. It is hard to find a arcade game that everyone will like / want.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://209.11.233.28/archive/2008/01/03/xbox-live-holiday-performance.aspx"&gt;link&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-437929568934537213?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://209.11.233.28/archive/2008/01/03/xbox-live-holiday-performance.aspx' title='XBox Live Christmas Performance'/><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/437929568934537213/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=437929568934537213' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/437929568934537213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/437929568934537213'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/01/xbox-live-christmas-performance.html' title='XBox Live Christmas Performance'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-8303446582050546837</id><published>2008-01-03T13:14:00.001-06:00</published><updated>2008-01-03T13:47:53.523-06:00</updated><title type='text'>.net reference vs value objects</title><content type='html'>One of my biggest annoyances with VB.Net/C# (.net) is reference objects and value type objects. This has always irritated me, and is a good source of confusion for people.&lt;br /&gt;&lt;br /&gt;With .net some objects are value type objects. That means they actually hold a value, such as an integer. In VB.Net if you were to do something like the following the value 10 is actually stored in the variable on the stack.&lt;br /&gt;&lt;br /&gt;VB.NET: Dim v1 as Integer = 10&lt;br /&gt;C#: int v1 = 10;&lt;br /&gt;&lt;br /&gt;That seems reasonable, but what if you assign v1 to another variable that is just type of object. It will work just fine, but then when you check if v2 is nothing it will return false. That isn't odd but if you try and do a "V1 Is Nothing" the VB compiler will throw an error saying that "Is Nothing" can only be used on reference type objects. What happens is the v1 value type object is boxed into a reference type object of v2. Yuck :(&lt;br /&gt;&lt;br /&gt;Dim v1 As Integer = 10&lt;br /&gt;Dim v2 As Object = v1&lt;br /&gt;&lt;br /&gt;If v2 Is Nothing Then&lt;br /&gt;    System.Console.WriteLine("v2 is nothing")&lt;br /&gt;Else&lt;br /&gt;    System.Console.WriteLine("v2 something")&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;Probably the biggest annoyance with value vs reference is where the data is actually stored. With a value type object the data is going to be stored on the stack. With a reference type object it will be stored on heap. In the example below the variable v1 will be stored on the stack. When the existing function / procedure is done executing the data will be gone. But with variable v2 it will require the garbage collector to come along and clean up that memory.&lt;br /&gt;&lt;br /&gt;Dim v1 as Integer = 10 ' stored on stack&lt;br /&gt;Dim v2 as ClientName = new ClientName('Bob', 'Smith')&lt;br /&gt;&lt;br /&gt;Another issue with value vs reference is how assignments are handled. With value types the data is actually copied, but with references only the reference is assigned. In the example below x1 gets a copy of v1 data. x2 gets assigned the same reference as v2, therefore any changes to x2 will affect v2.&lt;br /&gt;&lt;br /&gt;Dim x1 as Integer = v1 ' value is copied&lt;br /&gt;Dim x2 as ClientName = v2 ' both x2 and v2 now have the same reference.&lt;br /&gt;&lt;br /&gt;The value vs reference issue was probably introduced into VB.Net / C# because that is what Java did (probably some performance advantages of this scheme). While I don't think this issue is a disaster, it can be confusing for new programmers to the languages.&lt;br /&gt;&lt;br /&gt;I really prefer the Ruby way of doing things. In Ruby everything is an object, there is no value / reference type object problems. In Ruby you can compare to see if any variable is null, because all of them could. Ruby really hit a home run on its OOP support. If you are new to programming I recommend giving Ruby a try.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-8303446582050546837?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/8303446582050546837/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=8303446582050546837' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/8303446582050546837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/8303446582050546837'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2008/01/net-reference-vs-value-objects.html' title='.net reference vs value objects'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-1805670560910922567</id><published>2007-12-30T20:53:00.000-06:00</published><updated>2007-12-30T21:25:24.024-06:00</updated><title type='text'>XBox Live Crappiness</title><content type='html'>I am normally a huge lover of XBox Live, but this Christmas season it has been nothing but crap. While XBox Live normally works like a champ lately it has been a constant problem. Just logging into XBox Live is often not possible.&lt;br /&gt;&lt;br /&gt;Also, my wife and I thought we would watch "Pirate's III" this evening. We got about 20% downloaded and started to play the movie, then it immediately stopped the download because we were kicked out of XBox live. How sucky. The bad thing is that once you start watching a movie you only have 24 hours to watch it. We can't even get the movie to download, how are we supposed to watch it. Plus, my wife has to work tomorrow, so we can't watch it late tonight and watching it tomorrow will be difficult. What a screw job.&lt;br /&gt;&lt;br /&gt;I do have a theory on the problem. While I am not an expert on XBox Live, I am a developer on a 100% up time web site so I do understand what they could be going through. I believe the problem is probably a problem of load. There servers are being overworked and that is causing these intermittent problems.&lt;br /&gt;&lt;br /&gt;Factors:&lt;br /&gt;1. Obviously this is the holiday season, and obviously there are more people with time off this time of year. Many college students and high school students are at home with nothing else to do but drink and play video games. The average number of users is surely up by a big amount.&lt;br /&gt;&lt;br /&gt;2. There was probably a new 500,000 XBox Live user's this holiday season. That isn't a huge amount, but a good number of people logging in, browsing the marketplace, downloading XBox Live arcade games. This too has probably increased the XBox Live load a fair amount.&lt;br /&gt;&lt;br /&gt;3. Games for Christmas. A lot of people probably received a copy of COD4 or another game under the tree for Christmas. And since Christmas have probably been playing till there bladders are on the verge of  explosion. This too has probably increased the load.&lt;br /&gt;&lt;br /&gt;4. Latest XBox Live update added a bunch of new ways to access marketplace information. Under the best of circumstances things like "Spotlight" or "New arrivals" seem slow. I imagine because the DB queries behind these features take a while. Now imagine a lot more user's hitting these queries.&lt;br /&gt;&lt;br /&gt;The problems related to XBox Live probably relates to the factors above. Some more than others. When will the problems go away, probably when people start going back to school.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;What to do while XBox Live sucks, play some Super Mario Galaxy on the Wii.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Links:&lt;br /&gt;&lt;a href="http://www.majornelson.com/archive/2007/12/29/xbox-live-status-12-29.aspx"&gt;Major Nelson's Take&lt;/a&gt;&lt;br /&gt;&lt;a href="http://news.teamxbox.com/xbox/15365/Xbox-Live-Still-Experiencing-Intermittent-Issues/"&gt;TeamXbox&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.engadget.com/tag/xboxlive"&gt;Engadget&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-1805670560910922567?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/1805670560910922567/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=1805670560910922567' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/1805670560910922567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/1805670560910922567'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2007/12/xbox-live-crappiness.html' title='XBox Live Crappiness'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-3375657926961299405</id><published>2007-12-25T23:55:00.000-06:00</published><updated>2007-12-26T00:02:57.667-06:00</updated><title type='text'>Christmas 2007</title><content type='html'>This was Lisa and my second Christmas as a married couple, and it was a really great one. We got to go to a great Christmas eve service at my sister's Church (my dad actually went). Then we spent Monday (24th) evening hanging out with my side of the family. It was a great evening, with lots of good food and a ceremonial watching of "Christmas Vacation".&lt;br /&gt;&lt;br /&gt;This morning Lisa and I awoke like little kids at 7:00am and opened gifts from each other. I gave here a really nice purse, RockBand (360) and a new wii. She was pretty excited.&lt;br /&gt;&lt;br /&gt;Then today her family game over. Lisa cooked her first Turkey today which was a somewhat stressful situation for both of us, but in the end it worked out. The food was excellent, and we all ate way to much.&lt;br /&gt;&lt;br /&gt;Then in the evening my sister's family and my mom came over for a few minutes. My brother-in-law gave the wii and RockBand a try. Then we ate more pie.&lt;br /&gt;&lt;br /&gt;The evening ended with Lisa and I just hanging out watching an episode of Heroes. It was a wonderful day.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-3375657926961299405?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/3375657926961299405/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=3375657926961299405' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/3375657926961299405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/3375657926961299405'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2007/12/christmas-2007.html' title='Christmas 2007'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-4291737981373145089</id><published>2007-12-24T16:10:00.000-06:00</published><updated>2007-12-25T23:55:10.811-06:00</updated><title type='text'>The Orange Box</title><content type='html'>The Orange box is a collection of Half-life 2, episodes 1 &amp;amp; 2, Portal, and Team Fortress. Each game within this collection stands on its own, and would be fun in its own right.&lt;br /&gt;&lt;br /&gt;Everyone loved Half-life, and I think almost everyone loved Half-life 2. The only thing I didn't like about Half-life 2 was that I played it on my PC and had to install that steam piece of crap. Steam was the reason I never downloaded episode 1 and played it. So I am glad episode 1 was included in this box, because I never played it.&lt;br /&gt;&lt;br /&gt;Half-life 2 was an excellent game, with a good mixture of gun play, puzzles, and vehicles. It is just a really fun game. My only real complaint would be that Half-life 2 didn't really move the plot of the Half-life series on as much as I hoped.&lt;br /&gt;&lt;br /&gt;Episode 1 was a good return to the series, but once again I didn't think the story really went any where. In Episode 1 Gordan and Alyx stabilize the reactor core long enough so everyone can escape. Episode 2 is about shutting down a super portal, and stopping the flow of combine troops. Episode 2 was my favorite part of the Orange Box. It was more shoot and blow stuff up, my type of gaming.&lt;br /&gt;&lt;br /&gt;Episodes 1 and 2 constitute more game play than most FPS games. 1&amp;amp;2 will take longer to complete than Halo 3 or Call of Duty 4. Just episodes 1&amp;amp;2 make the Orange Box a great value.&lt;br /&gt;&lt;br /&gt;But, Portal adds another notch to this game. Portal isn't my style of game, not a lot of explosions, but it is an excellent game. You can't help but laugh as you listen to the song at the end of game. Portal was one of my more memorable gaming experiences of this year. In Portal you use small portals to solve many puzzles. Some of the puzzles are some real mind benders. I really enjoyed the puzzles that required using the characters momentum to make longer jumps. Some of those puzzles were truly original.&lt;br /&gt;&lt;br /&gt;I didn't reply HL2, I played it on my PC when it first came out. When the holiday season is over I'll probably play HL2 again (maybe this next summer when there are no good games).&lt;br /&gt;&lt;br /&gt;I started to play "Team Fortress", but I couldn't get into it. When I realized I had to select a particular server I just couldn't do it. I really prefer the easy of use that Halo 3 provides. Select a game type and sit back and play.&lt;br /&gt;&lt;br /&gt;Pros:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Lots of game here.&lt;/li&gt;&lt;li&gt;HL2 episode 2 is excellent. For me the high point of the game.&lt;/li&gt;&lt;li&gt;Great single player experience.&lt;/li&gt;&lt;/ul&gt;Cons:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;No resume option in menus.&lt;/li&gt;&lt;li&gt;Older graphics.&lt;/li&gt;&lt;li&gt;Too much Gravity Gun for me in episode 1.&lt;/li&gt;&lt;li&gt;With Team Fortress you have to select a server. Not nearly as easy as Halo 3 to get going with multi-player.&lt;/li&gt;&lt;li&gt;Hopefully future episodes won't require purchasing an Orange Box 2. Not really episodic content.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Grade: A-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-4291737981373145089?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/4291737981373145089/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=4291737981373145089' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/4291737981373145089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/4291737981373145089'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2007/12/orange-box.html' title='The Orange Box'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-1462484594112688883</id><published>2007-12-23T17:28:00.000-06:00</published><updated>2008-11-15T02:23:35.352-06:00</updated><title type='text'>RadRails :(</title><content type='html'>I thought I'd give RadRails a try this weekend, but it hasn't been good. I was unable to install the RadRails plugin. See screen shot below.&lt;br /&gt;&lt;br /&gt;Also, a few other notes about Aptana RadRails.&lt;br /&gt;&lt;br /&gt;1. Why does it want to install in C:\Aptana\Aptana Studio and not C:\Program Files\Aptana\Aptana Studio.&lt;br /&gt;&lt;br /&gt;2. No Ruby specific version, yuck.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_jBiKhFpTHdY/R27vdnsGzkI/AAAAAAAAAA0/efmTd6rWRNk/s1600-h/radrails.png"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_jBiKhFpTHdY/R27vdnsGzkI/AAAAAAAAAA0/efmTd6rWRNk/s400/radrails.png" alt="" id="BLOGGER_PHOTO_ID_5147314716280278594" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="file:///C:/Users/cmichel/AppData/Local/Temp/moz-screenshot.jpg" alt="" /&gt;&lt;img src="file:///C:/Users/cmichel/AppData/Local/Temp/moz-screenshot-1.jpg" alt="" /&gt;&lt;img src="file:///C:/Users/cmichel/AppData/Local/Temp/moz-screenshot-2.jpg" alt="" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-1462484594112688883?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/1462484594112688883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=1462484594112688883' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/1462484594112688883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/1462484594112688883'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2007/12/radrails.html' title='RadRails :('/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_jBiKhFpTHdY/R27vdnsGzkI/AAAAAAAAAA0/efmTd6rWRNk/s72-c/radrails.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-8863147615602127692</id><published>2007-12-14T10:35:00.000-06:00</published><updated>2007-12-14T10:40:58.557-06:00</updated><title type='text'>NetBeans with Rails</title><content type='html'>I use Ruby on Rails for some of my side projects and love it. The one thing I haven't loved is the editor / IDE support on windows. I started out with RadRails, which was okay but no longer updating. I tried my old friend gvim, but didn't really think it was a good fit. I tried jedit, which worked okay, but really didn't seem to have great ruby support. Then I found NetBeans.&lt;br /&gt;&lt;br /&gt;NetBeans has made a serious effort to support Ruby, and it shows. With the final release of NetBeans 6.0 the Ruby support is pretty good. I finally have a Ruby debugger within the IDE. Auto-complete finally works like it should.&lt;br /&gt;&lt;br /&gt;I haven't had much of a chance to play with the final 6.0 release yet, but so far so good.&lt;br /&gt;&lt;br /&gt;Thanks to all the people that made NetBeans kick butt for Ruby.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-8863147615602127692?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://netbeans.org' title='NetBeans with Rails'/><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/8863147615602127692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=8863147615602127692' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/8863147615602127692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/8863147615602127692'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2007/12/netbeans-with-rails.html' title='NetBeans with Rails'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-4092098103460282320</id><published>2007-12-10T09:39:00.000-06:00</published><updated>2007-12-10T10:08:45.106-06:00</updated><title type='text'>Video Game Awards 2007</title><content type='html'>The video game awards aired last night on Spike TV, click &lt;a href="http://money.cnn.com/news/newsfeeds/articles/prnewswire/NYSA00208122007-1.htm"&gt;here&lt;/a&gt; to view the results.&lt;br /&gt;&lt;br /&gt;This year I had actually played every game in the "Game of the Year" category (review of Orange Box coming soon). I really enjoyed every one of the games nominated BioShock, Orange Box, Mass Effect and Halo 3.&lt;br /&gt;&lt;br /&gt;BioShock was a FPS/RPG set in an under water city. I liked this game, but it wasn't my favorite. I like Orange box, but a lot of the content in that game was already released. Mass Effect was an excellent RPG, but I didn't think the game play was as it good as it could be. Halo 3 was my favorite game from this year, it has actually pulled me back into multi-player gaming.&lt;br /&gt;&lt;br /&gt;Game of the year winner was "BioShock", which I don't agree with. My wife has a theory. She believes that "BioShock" was the choice of the want-to-be intellectual. She predicted that all of these want-to-be intellectuals will vote of the supposedly intellectual choice "BioShock". Now she gets to tell me I told you so :(&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-4092098103460282320?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/4092098103460282320/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=4092098103460282320' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/4092098103460282320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/4092098103460282320'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2007/12/video-game-awards-2007.html' title='Video Game Awards 2007'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-4653722582945011830</id><published>2007-11-28T21:16:00.001-06:00</published><updated>2007-11-28T21:16:18.226-06:00</updated><title type='text'>Mass Effect Review</title><content type='html'>Before Oblivion I wasn't an RPG gamer. Oblivion forever changed my opinion on RPGs, and is probably the reason I game Mass Effect a try, and I am great full. Mass Effect is an excellent game, with a deep story, excellent graphics, and good game play. What else could you want?&lt;br /&gt;&lt;br /&gt;Mass Effect is science fiction RPG set within a future were aliens abound and humans are treated as the lesser race. The world of Mass Effect features many aliens, mostly human bi-pedal, but some 4 legged creatures run around too. Most of the races are in in the same coalition of alien races. This collation meets at the Citadel, and ancient space station.&lt;br /&gt;&lt;br /&gt;With Mass Effect you get to create your own character to play (like most RPGs). You are given the option of playing a male Shepard, or a female Shepard. You also get to choose between six character classes. Soldier, standard shoot first as questions later class. Engineer, hack your way through the game. Adept, make your way through the game using implants. Vanguard, biotic warriors. Sentinel, biotic (implants) / tech combo. Infiltrator, tech / gun combo. Each of the different character classes have different abilities.&lt;br /&gt;&lt;br /&gt;After choosing a character class you are dropped onto the space ship Normandy, from there the story begins. I don't want to give much away about the story, so I'll describe how the game plays, but not what you actually do. You have a lot of mobility in the game, you can use the Normandy to move from system to system within the Galaxy. You can explore a lot of different systems, but your home base is the Citadel. The Citadel houses the council and the embassies of many races.&lt;br /&gt;&lt;br /&gt;After landing on a planet or the Citadel you can walk around using a standard 3rd person view. On most of your missions two other party members will join you. You can choose from six different party members. The party members are one of the most annoying parts of the game. They often get stuck while following you around, which means you have to manually lead them around corners.&lt;br /&gt;&lt;br /&gt;Controls are pretty standard. Left moves your character while right stick changes view point. The "X" button draws your weapon, while "B" holsters your weapon.&lt;br /&gt;&lt;br /&gt;Fighting involves standard gun play, with the but you can also you many custom abilities. Such as some hacking enemy AI. The other members of your party do a decent job fighting, but they often get lost (stuck) when following you around.The actual fighting reminds me a lot of "Gears of War", wear you often look around corners to do the shooting. You also have the ability to use many of the special abilities by using "RB". You can use things such as the before mentioned "AI Hacking". My only real control complaint is that the grenade button is the "Back" button. That is an awkward button to hit during a fight.&lt;br /&gt;&lt;br /&gt;My major complaints about this game don't involve the control system. The first problem is that you often can't skip the cut scenes, this is just inexcusable. Also, after completing the game I couldn't continue the side quests. This was extremely annoying, and means that if I want to solve many of the side quests, I'll need to go back a lot of saves, or start over.&lt;br /&gt;&lt;br /&gt;Good&lt;br /&gt;Excellent Story&lt;br /&gt;Excellent conversation system with interesting characters to talk to.&lt;br /&gt;Excellent Graphics&lt;br /&gt;Good RPG elements&lt;br /&gt;Good game play. Driving vehicle was a little difficult.&lt;br /&gt;&lt;br /&gt;Bad&lt;br /&gt;Cannot continue side plots after completing game. Oblivion allowed this, and so should have Mass Effect.&lt;br /&gt;Can't skip cut scenes. This is just inexcusable.&lt;br /&gt;Party members are idiots.&lt;br /&gt;&lt;br /&gt;Grade: A-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-4653722582945011830?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/4653722582945011830/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=4653722582945011830' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/4653722582945011830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/4653722582945011830'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2007/11/mass-effect-review.html' title='Mass Effect Review'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-6857737401273535067</id><published>2007-11-28T21:01:00.000-06:00</published><updated>2007-11-28T21:04:36.312-06:00</updated><title type='text'>Happy Feet</title><content type='html'>I watched "Happy Feet" tonight. I thought it was a movie about environmental stewardship, but I was surprised at its conclusion. "Happy Feet" showed that penguins should only be allowed to live if they can amuse us, I was very surprised by this conclusion. Not the family friendly film I expected.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-6857737401273535067?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/6857737401273535067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=6857737401273535067' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/6857737401273535067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/6857737401273535067'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2007/11/happy-feet.html' title='Happy Feet'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-2408611349936535409</id><published>2007-11-07T22:06:00.000-06:00</published><updated>2007-11-07T22:08:25.160-06:00</updated><title type='text'>Baby Riddle</title><content type='html'>How is a baby born before another baby, but yet have a later time of birth?&lt;br /&gt;&lt;br /&gt;http://www.wral.com/news/local/story/2011296/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-2408611349936535409?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/2408611349936535409/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=2408611349936535409' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/2408611349936535409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/2408611349936535409'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2007/11/baby-riddle.html' title='Baby Riddle'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-4201763756725062329</id><published>2007-10-26T22:41:00.001-05:00</published><updated>2007-10-26T22:41:57.130-05:00</updated><title type='text'>Parents say the darndest things</title><content type='html'>Dad: Your computer has google on it, so does Steve&amp;#39;s.&lt;br&gt;&lt;br&gt;Mom: (left message on voice mail) Hello this is Donna, your mom.&lt;br clear="all"&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-4201763756725062329?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/4201763756725062329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=4201763756725062329' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/4201763756725062329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/4201763756725062329'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2007/10/parents-say-darndest-things.html' title='Parents say the darndest things'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-113646929370640066</id><published>2007-10-24T08:41:00.001-05:00</published><updated>2007-10-24T08:44:25.986-05:00</updated><title type='text'>California Fires</title><content type='html'>Google has some excellent maps of the California fires. It is amazing how close these fires are to real towns. I know some people that live in the area, and the fire is actually relatively close. One of my friends lives less than 7 miles from the fires. Scary.&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Calibri;font-size:85%;color:#1f497d;"&gt;&lt;span style="font-size: 11pt; font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; color: rgb(31, 73, 125);"&gt;&lt;a href="http://googleblog.blogspot.com/2007/10/southern-california-fire-maps.html"&gt;http://googleblog.blogspot.com/2007/10/southern-california-fire-maps.html&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-113646929370640066?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://googleblog.blogspot.com/2007/10/southern-california-fire-maps.html' title='California Fires'/><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/113646929370640066/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=113646929370640066' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/113646929370640066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/113646929370640066'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2007/10/california-fires.html' title='California Fires'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-2850760747547667984</id><published>2007-10-05T11:29:00.001-05:00</published><updated>2008-11-15T02:23:35.739-06:00</updated><title type='text'>Halo 3 Review</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_jBiKhFpTHdY/RwZmnGVacVI/AAAAAAAAAAs/S-7kjyQGli4/s1600-h/114421-Full.jpg"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_jBiKhFpTHdY/RwZmnGVacVI/AAAAAAAAAAs/S-7kjyQGli4/s400/114421-Full.jpg" alt="" id="BLOGGER_PHOTO_ID_5117890848454504786" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;--- Preface ---&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I completed the campaign for Halo 3 on September 25 (the day of release). I took the day off from work so I could go to a midnight release, and start playing the game right away.&lt;br /&gt;&lt;br /&gt;Before righting this I should admit that I am a pretty big Halo fan. I own a Halo 3 t-shirt. I have played Halo and Halo 2 multiple times (twice on each game with my wife using co-op). I don't consider myself a fanboy, but I am a fan.&lt;br /&gt;&lt;br /&gt;The Halo series is maybe the most popular video game series. It did 170 million on the first day. So if you are reading this I think it is fair to say you have heard of Halo before. But here is a little background information. In the world of Halo humans are being pushed to extinction by a group of aliens races known as the covenant. In their attempt to survive the humans  decide to create super solders (Spartans). The Spartan program produces numerous Spartans, but the Halo saga focuses on the Spartan 117, aka John, aka the Master Chief. &lt;br /&gt;&lt;br /&gt;The first Halo game involves the Master Chief prevention of the covenant from firing one of the Halo rings. The Halo rings were created by ancient humans (forerunners) to contain the flood in case of an outbreak. The flood is a lot like a zombie disease, but the flood can still fire guns. The flood are ultimately under the control of grave mind.&lt;br /&gt;More: http://en.wikipedia.org/wiki/Halo&lt;br /&gt;&lt;br /&gt;Halo 2 is a lot like Halo 1, but this time you play as both the Master Chief and the Arbiter. The Arbiter is an Elite that is held responsible for the Master Chief destroying the first Halo 3 by the covenant. The Arbiter is given a custom task to silence those that appose the covenant prophets. Eventually both the Arbiter and the Master Chief end up on another Halo. And the Master Chief and Arbiter eventually end up on the same side. The Master Chief and the Arbiter have the common goal to stop second Halo from firing. They are eventually successful, but in doing so the rest of the rings are put into a mode where they can be remotely activated.&lt;br /&gt;More: http://en.wikipedia.org/wiki/Halo&lt;br /&gt;&lt;br /&gt;Halo 3 continues the story of Halo 2, with the Master Chief arriving on earth. In Halo 3 the player will only play as the Master Chief (unless playing in coop mode). This is a change from Halo 2, but an understandable one. Having a video game focus on two main characters is confusing.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-- Halo 3 Review ---&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Story:&lt;/span&gt;&lt;br /&gt;I don't want to expose to much of Halo 3's plot, but I can say that it provides a satisfying end to the Halo saga. With H3 the focus is clearly on the Master Chief, but the Arbiter does play an important role. The H3 story moves at a good pace, and the cut scenes are excellent. The story is easy to follow, and mostly your objectives are clearly defined from the story (occasionally navigation points are needed to lead you in the right direction). I don't want to give away much of the actual plot, but I enjoyed the story a lot.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Gameplay:&lt;/span&gt;&lt;br /&gt;The Halo series has done a great job with game play, and Halo 3 is no exception. Actually I think the game play in Halo 3 is the best it has ever been. The usual weapons are back (including assault rifle), and a few new weapons, but no one weapon in Halo 3 is a all powerful. All weapons have their advantages and disadvantages. The bad guys brutes, grunts, jackles, hunters, and the flood all create different gaming experiences. And the levels are varied enough that it doesn't feel like you are doing the same thing over and over. If anything there isn't enough game play. I could have played another 10 levels.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Graphics:&lt;/span&gt;&lt;br /&gt;Halo 3 probably isn't as visually stunning as Gears of War, but the graphics are pretty amazing. Halo 3 really gets the lighting affects right. The individual character models have also seen a drastic improvement from Halo 1 and 2. The grunts in H3 have a lot of details for an appointment character. Everything seems more detailed than before and less blocky. Also, the battles are really huge. I have never played a game with as many vehicles / people running around and fighting at the same time. And during these crazy battles the frame rate stays consistent, amazing!. Halo 3 also gets expulsions better than any other game. Whether it is a grenade blowing up a brute or a vehicle blowing up it looks awesome.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Sound / Music:&lt;/span&gt;&lt;br /&gt;The Halo series has some of the most memorable much of any game. Even the slightest hint of the music will have me in Halo mode. With H3 the music is pretty much the same as before, but that is a good thing. The sounds are much improved from the previous games. The weapons sound beefer than before.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Multi-player:&lt;/span&gt;&lt;br /&gt;The Halo series has always had some of the best multi-player experiences around. First, the campaign can be played in a coop mode. With that mode two players can play together through the game's story. This is huge for me because it allows my wife and I to play through together. Also, with H3 the inclusion of campaign scoring allows you to track how you did vs your campaign partner.&lt;br /&gt;&lt;br /&gt;But when speaking about Halo multi-player people are not usually talking about coop. They are talking about online player vs player. Halo 3 really shines here too. With multiple modes, each matchmaking, and bungie.net for stat tracking it doesn't get any better. Halo 3 is the gold standard for online player vs player FPS.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Extras:&lt;/span&gt;&lt;br /&gt;Halo 3 feels like a feature complete game, but not only that it feels like they added a few extras. The first is the theater. This allows you to watch previous game footage. This has already created many memorable &lt;a href="http://gameroom.mlgpro.com/view/rhojIAED55g.html"&gt;moments&lt;/a&gt;. Plus you can take photos of you in game events.&lt;br /&gt;&lt;br /&gt;Another extra is the inclusion of a Forge editor that allows gamers to change maps. Personally I don't see myself using this option much, but it allows players to drop tanks on their friends. What can be wrong with that.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The Bad:&lt;/span&gt;&lt;br /&gt;There is not a lot to say negatively about the game. My only real complaints are that the theater mode doesn't allow you to rewind campaign films. And maybe that the game is a lot like the previous games (or is that a good thing).&lt;br /&gt;&lt;br /&gt;Grade: A+&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-2850760747547667984?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/2850760747547667984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=2850760747547667984' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/2850760747547667984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/2850760747547667984'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2007/10/halo-3-review.html' title='Halo 3 Review'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_jBiKhFpTHdY/RwZmnGVacVI/AAAAAAAAAAs/S-7kjyQGli4/s72-c/114421-Full.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-8298541190116700593</id><published>2007-10-05T10:36:00.001-05:00</published><updated>2007-10-05T10:36:13.461-05:00</updated><title type='text'>Bungie / Microsoft break up</title><content type='html'>I am sure that they did all they could in consoling, but in the end it is probably for the best. Microsoft will retain custody of the kids (Halo), but Bungie will probably get some visitation rights (Halo 4).&lt;br&gt;&lt;br&gt;&lt;a href="http://kotaku.com/gaming/breaking/bungie-split-confirmed-307565.php"&gt; http://kotaku.com/gaming/breaking/bungie-split-confirmed-307565.php&lt;/a&gt;&lt;br&gt;&lt;br clear="all"&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-8298541190116700593?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/8298541190116700593/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=8298541190116700593' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/8298541190116700593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/8298541190116700593'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2007/10/bungie-microsoft-break-up.html' title='Bungie / Microsoft break up'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-5824146299015555758</id><published>2007-10-01T11:13:00.001-05:00</published><updated>2008-11-15T02:23:36.130-06:00</updated><title type='text'>Halo 3 pictures</title><content type='html'>Here are a couple Halo 3 pictures I have taken using Halo 3's awesome theater. The top picture was taken while I was playing the campaign. The bottom picture is when I was playing the online multilayer.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_jBiKhFpTHdY/RwEdlj61sZI/AAAAAAAAAAk/n2ufTVcC-vI/s1600-h/114421-Full.jpg"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_jBiKhFpTHdY/RwEdlj61sZI/AAAAAAAAAAk/n2ufTVcC-vI/s400/114421-Full.jpg" alt="" id="BLOGGER_PHOTO_ID_5116403182803988882" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_jBiKhFpTHdY/RwEdcD61sYI/AAAAAAAAAAc/4RB7AO4eKfU/s1600-h/400863-Full.jpg"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_jBiKhFpTHdY/RwEdcD61sYI/AAAAAAAAAAc/4RB7AO4eKfU/s400/400863-Full.jpg" alt="" id="BLOGGER_PHOTO_ID_5116403019595231618" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-5824146299015555758?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/5824146299015555758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=5824146299015555758' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/5824146299015555758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/5824146299015555758'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2007/10/halo-3-pictures.html' title='Halo 3 pictures'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_jBiKhFpTHdY/RwEdlj61sZI/AAAAAAAAAAk/n2ufTVcC-vI/s72-c/114421-Full.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-1840165406273459150</id><published>2007-09-19T23:51:00.001-05:00</published><updated>2007-09-19T23:51:50.733-05:00</updated><title type='text'>Polyphasic sleep</title><content type='html'>On an episode of Seinfeld Kramer tries to adjust to Devinci&amp;#39;s sleep cycle. I thought this was made up, but supposedly some people do use alternate sleep patterns. Sleeping more than once during a day is Polyphasic sleep.  &lt;br&gt;&lt;br&gt;Here are a few good links to read.&lt;br clear="all"&gt;&lt;a href="http://www.stevepavlina.com/blog/2005/10/polyphasic-sleep/"&gt;http://www.stevepavlina.com/blog/2005/10/polyphasic-sleep/&lt;/a&gt;&lt;br&gt;&lt;a href="http://en.wikipedia.org/wiki/Polyphasic_sleep"&gt; http://en.wikipedia.org/wiki/Polyphasic_sleep&lt;/a&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-1840165406273459150?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/1840165406273459150/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=1840165406273459150' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/1840165406273459150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/1840165406273459150'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2007/09/polyphasic-sleep.html' title='Polyphasic sleep'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-8105833469634337151</id><published>2007-09-04T18:46:00.001-05:00</published><updated>2007-09-04T18:46:37.553-05:00</updated><title type='text'>Wikipedia watch: Sony trashes Halo 3</title><content type='html'>Sony has been caught trashing Halo 3 on Wikipedia. This is&amp;nbsp; a pretty big black eye for Sony&lt;br&gt;&lt;br&gt;&lt;a href="http://news.teamxbox.com/xbox/14404/Sony-Trashes-Halo-3-on-Wikipedia/"&gt;http://news.teamxbox.com/xbox/14404/Sony-Trashes-Halo-3-on-Wikipedia/ &lt;/a&gt;&lt;br&gt;&lt;br clear="all"&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-8105833469634337151?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/8105833469634337151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=8105833469634337151' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/8105833469634337151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/8105833469634337151'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2007/09/wikipedia-watch-sony-trashes-halo-3.html' title='Wikipedia watch: Sony trashes Halo 3'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-2006076162691060807</id><published>2007-08-29T13:52:00.001-05:00</published><updated>2007-08-29T13:52:38.691-05:00</updated><title type='text'>Release</title><content type='html'>I hate releases / migrations. What should be a time of calibration and victory, is really a time of freak outs and strange problems. &lt;br&gt;&lt;br&gt;I do website development work for an e-commerce platform. And every few months we do another release. We did probably one of the bigger releases in a while recently, and it was crazy. It seems no matter how well prepared you are releases always take a long time. We will often start releases in the wee hours of the morning (2:00am to 4:00am), and they won&amp;#39;t often complete until sometime in the afternoon. This most recent releases started at 2:00am and didn&amp;#39;t complete until after 1:00pm. Yuck. &lt;br&gt;&lt;br&gt;Part of the reason this releases take so long is because we have to update a number of servers, but most do so in a way that doesn&amp;#39;t affect current website traffic. This makes migrations a slow process. Requiring updates to DNS entries, multiple databases, sync jobs, and multiple website across multiple servers. And with each server update requiring manual testing to ensure that is functioning properly releases take a long time. &lt;br&gt;&lt;br&gt;&lt;br&gt;How could this process be improved?&lt;br&gt;&lt;br&gt;1. We could do more to automate the individual deployments. All database modifications could be put into a single script to be ran against the servers. Also the deployment of  &lt;a href="http://asp.net"&gt;asp.net&lt;/a&gt; website could also be automated.&lt;br&gt;&lt;br&gt;2. Automatic testing scripts could be used to do a quick smoke test of the websites as the are updated. This could show any problems with the deployment before QA starts looking at the servers. &lt;br&gt;&lt;br&gt;3. Mock deployments. Before doing a real release we should do a mock deployment to a server holding almost real (scrubbed) data. This would allow us to work out any kinks in our database scripts before deployment to production. &lt;br&gt;&lt;br&gt;4. Test using real credit card numbers on our QA servers. This does require some special setup / configuration, but it could allow us to find some of the strange release day bugs that seem to happen.&lt;br&gt;&lt;br&gt;5. Test scripts. Document exactly what is going to be tested on release day. Setup all test scenarios before release day (if they can be setup before release). &lt;br&gt;&lt;br&gt;6. Ensure that all test credit cards have enough money. By knowing exactly what people are going to test (5) we can avoid running out of money on test credit cards. (Always leave some room for errors)&lt;br&gt;&lt;br&gt;&lt;br&gt;Day after  &lt;br&gt;&lt;br&gt;1. Plan for some follow up day after testing.&lt;br&gt;&lt;br&gt;2. Look at logs / error messages the day after release to ensure everything went as planned.&lt;br&gt;&lt;br&gt;3. The following day audit review some orders placed using new code. &lt;br&gt;&lt;br&gt;&lt;br clear="all"&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-2006076162691060807?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/2006076162691060807/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=2006076162691060807' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/2006076162691060807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/2006076162691060807'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2007/08/release.html' title='Release'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-4332797627154380434</id><published>2007-08-27T11:47:00.001-05:00</published><updated>2007-08-27T11:47:16.208-05:00</updated><title type='text'>Halo revisted</title><content type='html'>My wife and I played through Halo the last few weeks. It was our second time playing through together, and my fourth time through the game. Playing through the game again was kind of like catching up with an old friend. I had forgot that Halo was such a great game. It is probably the only game I have ever played four times.  &lt;br&gt;&lt;br&gt;We are playing through Halo and Halo 2 before the release of Halo 3 on September 25. (We are currently working our way through the inferior Halo 2)&lt;br&gt;&lt;br&gt;Halo is truly a joy to play. Assault riffle, grenades and warthogs it was almost all good. The graphics on Halo old up surprisingly well. I thought the graphics would look a lot worse than they do. The sound and music are both exceptional. And the excellent face paced game play. The game play in is probably the best I have ever experienced in a FPS.  &lt;br&gt;&lt;br&gt;Halo was also one of the first FPS games I played with really great vehicles. The vehicles helped to very the game play. Dogfighting with a Banshee is something you don&amp;#39;t expect in an FPS.&lt;br&gt;&lt;br&gt;Halo isn&amp;#39;t perfect though. Halo makes going to the Library even worse than it really is. The Library level in Halo was a horrible level. While playing through Halo the library level was only level that I didn&amp;#39;t enjoy (I would have given this game an A+ if is wasn&amp;#39;t for the Library level). Also the architecture in Halo was somewhat repetitive. A little more diversity in the indoor structures would have been appreciated.  &lt;br&gt;&lt;br&gt;Grade: A&lt;br&gt;&lt;br&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-4332797627154380434?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/4332797627154380434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=4332797627154380434' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/4332797627154380434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/4332797627154380434'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2007/08/halo-revisted.html' title='Halo revisted'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-4688585328399349591</id><published>2007-08-26T22:25:00.001-05:00</published><updated>2007-08-26T22:25:04.418-05:00</updated><title type='text'>Bioshock unhappiness</title><content type='html'>Bioshock makes me unhappy, not because I don&amp;#39;t like the game (haven&amp;#39;t played it), but because I can&amp;#39;t find it. I tried numerous gamestops, Target, Wal-mart and Shopko, but Bioshock was sold out at each location. Hopefully I&amp;#39;ll be able to pick up a copy this week.  &lt;br&gt;&lt;br&gt;Bioshock must be selling well.&lt;br clear="all"&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-4688585328399349591?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/4688585328399349591/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=4688585328399349591' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/4688585328399349591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/4688585328399349591'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2007/08/bioshock-unhappiness.html' title='Bioshock unhappiness'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-640653487843047348</id><published>2007-08-22T08:49:00.000-05:00</published><updated>2007-08-22T10:28:32.373-05:00</updated><title type='text'>Microsoft releases tafiti</title><content type='html'>Microsoft has released an interesting new search engine &lt;a href="http://www.tafiti.com/"&gt;tafiti&lt;/a&gt; (yeah I don't know how to pronounce it either). It is a great showcase for Microsoft's Silverlight technologies. The page behaves like a combination of a flash application and a search engine pretty impressive.&lt;p&gt;I honestly don't know if I'll ever use it. The page seemed slow, and when searching I often want my answer now. Plus the search uses Microsoft's Windows Live search. I used Windows Live Search as part of a few month experiment a while back. I eventually returned to Google, because I felt like I received better results.&lt;/p&gt;&lt;p&gt;The search did offer a nice was to save off the items I've found. All you do is drag them to the buckets on the right of the page. But that functionality won't be enough to get me to come back.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.tafiti.com/"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-640653487843047348?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/640653487843047348/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=640653487843047348' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/640653487843047348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/640653487843047348'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2007/08/microsoft-releases-tafiti.html' title='Microsoft releases tafiti'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-3562496408825237943</id><published>2007-08-06T23:47:00.001-05:00</published><updated>2007-08-06T23:47:45.802-05:00</updated><title type='text'>XBox 360 price cut</title><content type='html'>The XBox 360 is going to be a little cheaper in a few days. Personally I don&amp;#39;t think it is enough. The Premium version is still $100 more than a Wii. That is just too much. Most people don&amp;#39;t want the core version. It is the price of the Premium version that really matters. &lt;br&gt;&lt;br&gt;&lt;a href="http://www.majornelson.com/archive/2007/08/06/Xbox-360-price-drop-and-Halo-3-Console-pricing.aspx"&gt;http://www.majornelson.com/archive/2007/08/06/Xbox-360-price-drop-and-Halo-3-Console-pricing.aspx&lt;/a&gt;&lt;br clear="all"&gt; &lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-3562496408825237943?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/3562496408825237943/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=3562496408825237943' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/3562496408825237943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/3562496408825237943'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2007/08/xbox-360-price-cut.html' title='XBox 360 price cut'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-8558291459382922670</id><published>2007-07-26T08:03:00.000-05:00</published><updated>2007-07-26T08:04:03.494-05:00</updated><title type='text'>How I learned to read</title><content type='html'>&lt;p class="MsoPlainText"&gt;When I was a young lad of about 4 years I found some magazines in my dad's closet. I found the magazines to be incredibly interesting and way more visually appealing than comic books, I was hooked. My love reading affected my development in many ways, and my early elementary teachers were always impressed with my vocabulary :)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-8558291459382922670?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/8558291459382922670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=8558291459382922670' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/8558291459382922670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/8558291459382922670'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2007/07/how-i-learned-to-read.html' title='How I learned to read'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-4352616312728785682</id><published>2007-07-22T16:54:00.001-05:00</published><updated>2007-07-22T16:57:12.014-05:00</updated><title type='text'>NBA 2K7 vs NBA Live 07</title><content type='html'>I love watching the NBA, of all professional sports the NBA is my favorite. That isn't to say I don't have problems with the NBA. I hate the officiating. I hate the over acting by the players. I hate the strange rules (defense 3 seconds). But I still love watching. And I love playing NBA video games.&lt;br /&gt;&lt;br /&gt;Last year I played both NBA 2K6 and NBA Live 06 but I didn't think either was that great. Both annoyed me. This year I tried both again,  both on my 360.&lt;br /&gt;&lt;br /&gt;NBA 2K7 is from 2K Sports and NBA Live 07 is from EA sports. Both games contain real NBA players. Both games contain single game and season modes. Even though they are a lot a like on the surface, they are very different games.&lt;br /&gt;&lt;br /&gt;Graphics:&lt;br /&gt;Live 07 looks better in still photos. The players look more like their real counter parts than 2K7. But 2K7 has better animations. The players in 2K7 move more like real players.  Overall I'd give the advantage in graphics to 2K7 because the animations look more realistic.&lt;br /&gt;&lt;br /&gt;Control:&lt;br /&gt;The control schemes of both games acceptable. I can't select one as better. The shot stick in 2K7 seems cool (right stick to control shot type), but I often do the wrong shot. If the shot stick worked better I'd give the edge to 2K7, but as it is I can't give either the edge.&lt;br /&gt;&lt;br /&gt;Menu:&lt;br /&gt;Both games menu systems are bad. 2K7 is just not intuitive, you often have to use the right stick to cause the menu to display. What other XBox 360 game uses that? Live 07 menu to just plain difficult to navigate and find what you want. Plus it often doesn't have the option you want anyways. Live 07 is a pretty shallow game. I didn't like either of their menu systems, so can't give the edge to either game.&lt;br /&gt;&lt;br /&gt;Gameplay:&lt;br /&gt;The gameplay of 2K7 is a lot more fun than Live 07. Live 07 is a pretty easy game to defeat. Even on the most difficult level it is pretty easy to dunk every time down the court. While 2K7 makes it a little to easy to dunk, it is still a ton better than Live 07. Plus the gameplay of 2K7 is a lot of fun. I have really enjoyed 2K7, and the gameplay is largely why. With 2K7 I actually find myself using offensive plays, which is pretty cool.&lt;br /&gt;&lt;br /&gt;Game Modes / Extras:&lt;br /&gt;Live 07 doesn't contain a lot of extras, heck it doesn't even allow you to set the length of season you want to play. 2K7 includes seasonal modes, dynasty modes, and even a 24/7 mode. The 24/7 mode is interesting because it allows gamers develop a player and play in a series of street games. This mode was a lot of fun, but still needs some work (you can't change camera modes during 24/7). Overall 2K7 has a lot more in the extra category.&lt;br /&gt;&lt;br /&gt;Players / Realism:&lt;br /&gt;Both games have a long way to go here. Live 07 players look more like their real life counterparts. But with 2K7 the players seem to play more like their real life counterparts. With 2K7 Lebron James will score up a storm if you don't double him. I do think both games need to reevaluate their player ratings. I don't like Kobe, but he is probably the best player in the league (or Duncan), and most certainly the best scorer. When playing a full season in 2K7 Kobe wasn't even in the top 5 in scoring. Also interesting, Kobe is listed only as 98 the same as Lebron. I like Lebron, but I don't think he is quite to the level of Kobe. I think 2K7 should let the guy that created this  &lt;a href="http://www.gamefaqs.com/console/xbox360/file/932864/46897"&gt;faq&lt;/a&gt; be in charge of their player rankings.&lt;br /&gt;&lt;br /&gt;Difficulty:&lt;br /&gt;2K7 wins this category in a big way. Live 07 can be mastered in a few hours. 2K7 will force you to start using offensive plays to get the best shot, awesome.&lt;br /&gt;&lt;br /&gt;NBA 2K7: A- (excellent game)&lt;br /&gt;NBA Live 07: C (bad game)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-4352616312728785682?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/4352616312728785682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=4352616312728785682' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/4352616312728785682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/4352616312728785682'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2007/07/nba-2k7-vs-nba-live-07.html' title='NBA 2K7 vs NBA Live 07'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-62390674371503213</id><published>2007-07-11T13:42:00.001-05:00</published><updated>2007-07-11T13:42:13.283-05:00</updated><title type='text'>PS3 a little cheaper now</title><content type='html'>Sony lowered the price of the PS3 this week. This should help them&lt;br&gt;gain some momentum from the XBox 360. This shows that Sony hasn&amp;#39;t&lt;br&gt;given up on the PS3, and still intends to win this round of the&lt;br&gt;console wars.&lt;p&gt;The big surprise is that Microsoft isn&amp;#39;t matching with a price&lt;br&gt;reduction. I am shocked that at least $50 hasn&amp;#39;t been removed from the&lt;br&gt;sticker price. Personally I think $100 is needed to really make the&lt;br&gt;360 a purchase that the wally world shoppers can afford. Plus&lt;br&gt;Microsoft needs some good news after last weeks warranty nightmare.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-62390674371503213?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/62390674371503213/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=62390674371503213' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/62390674371503213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/62390674371503213'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2007/07/ps3-little-cheaper-now.html' title='PS3 a little cheaper now'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-8972817236596157100</id><published>2007-07-08T22:46:00.000-05:00</published><updated>2007-07-08T22:48:07.250-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rails ruby'/><title type='text'>Rest scaffold</title><content type='html'>Creating a rest controller for Ruby on Rails is super easy.&lt;br /&gt;&lt;br /&gt;At a command prompt type the following:&lt;br /&gt;ruby script/generate scaffold_resource contact&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-8972817236596157100?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/8972817236596157100/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=8972817236596157100' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/8972817236596157100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/8972817236596157100'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2007/07/rest-scaffold.html' title='Rest scaffold'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-4508497554401659589</id><published>2007-07-06T09:21:00.000-05:00</published><updated>2007-07-06T09:47:40.348-05:00</updated><title type='text'>XBox 360 - Extended Extended Warranty</title><content type='html'>Today Microsoft announced that the warranty on the XBox 360 will be extended to 3 years. Wow, 3 years is a long time for a console warranty. It was initially 90 days I think. Then after many customer complaints the warranty was pushed to 1 year. Now 3 years. Wow.&lt;br /&gt;&lt;br /&gt;This is both good and bad news. It is good news that if my console breaks in the next few years I can get it fixed. It is bad news because the 360 must be really buggy. And the bugs must be in the hardware. If it was a software problem they could just push a software update and solve the problem. But that must not be the case.&lt;br /&gt;&lt;br /&gt;Another side note to this story is that his warranty is only for the 3 rings of death, not for other sort of problems. I have had system lock ups and "cannot read disk" problems, but no 3 rings of death. I don't think my problems would be covered by this warranty extension.&lt;br /&gt;&lt;br /&gt;Another problem with this warranty is that they will probably ship customers a different console (not new) back. Who knows if this replacement console will behave better or worse than there first console.&lt;br /&gt;&lt;br /&gt;The good thing of out this is that Microsoft is supposedly going to try and solve these problems once and for all. This is good news, but it should have happened in 2006 not 2007. Also, Microsoft is still being tight lipped about the actual failure numbers. I still feel that the community needs to know that information. If the failure rate is 3 to 5% purchasing a 360 is a good investment. But if the failure rate is 25%, then maybe users should wait on purchasing a 360 until the rate lowers.&lt;br /&gt;&lt;br /&gt;According to some website (don't take this as gospel)  this could cost Microsoft 1 billion dollars. Wow that is a lot of money. Interestingly, it Microsoft charges its customers $140 to have a console repaired. If we take $1,000,000,000 (1 billion dollars) divided by $140 we end up with around 7 million units being defective. Now to make the numbers more Microsoft friendly lets assume they spend $400 (price for premium) on each repair than that means around 2.5 million defective units. Either way that is a lot of defective units. 2.5 / 12 (consoles sold) = 21 % failed. Yikes that is a lot. (Please don't take any of the math above as another other than random ramblings)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.majornelson.com/archive/2007/07/05/Show-_2300_233-The-one-with-Peter-Moore-on-the-Xbox-360-enhanced-warranty-.aspx"&gt;Major Nelson Blogcast&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.xbox.com/en-US/support/petermooreletter.htm"&gt;Peter Moore Letter&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.pro-g.co.uk/news/06-07-2007-5903.html"&gt;How much will this cost?&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-4508497554401659589?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.majornelson.com/archive/2007/07/05/Show-_2300_233-The-one-with-Peter-Moore-on-the-Xbox-360-enhanced-warranty-.aspx' title='XBox 360 - Extended Extended Warranty'/><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/4508497554401659589/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=4508497554401659589' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/4508497554401659589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/4508497554401659589'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2007/07/xbox-360-extended-extended-warranty.html' title='XBox 360 - Extended Extended Warranty'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-1613963680132802055</id><published>2007-07-03T12:30:00.000-05:00</published><updated>2007-07-03T12:36:28.236-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xbox'/><title type='text'>XBox 360 - High failure rates</title><content type='html'>An article on dailytech tries to put some real numbers to the XBox 360 reliability problem. Since none of the sources have names the article really doesn't mean anything. It would mean a lot more if X company says that around 1/3 of all XBox 360 sold have problems, but I understand why a company wouldn't want to be part of that firestorm.&lt;br /&gt;&lt;br /&gt;Regardless, the XBox 360 has an appearance issue, people think it is buggy. I have ran into more than my share of problems with the 360. I think the 360 was rushed to market, and needed more testing time.&lt;br /&gt;&lt;br /&gt;I feel it would be better for everyone if Microsoft owned up to the issue (showed actual numbers) and tried to make all future 360 consoles better.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-1613963680132802055?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.dailytech.com/Retailers+Estimate+Xbox+360+Failure+Rate+High+as+33+Percent/article7892.htm' title='XBox 360 - High failure rates'/><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/1613963680132802055/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=1613963680132802055' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/1613963680132802055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/1613963680132802055'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2007/07/xbox-360-high-failure-rates.html' title='XBox 360 - High failure rates'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-4893999233830132507</id><published>2007-07-02T11:21:00.000-05:00</published><updated>2007-07-02T11:25:55.545-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wedding'/><title type='text'>WedddingControl</title><content type='html'>During our engagement I created a simple Access database to help manage the craziness that is guest management. The Access database at first didn't seem very useful to Lisa, but after a while of using it Lisa began to really like it. After the wedding was over Lisa thought I should make it into a website for everyone to use. Well that project has finally been completed. The website is available at &lt;a href="http://weddingcontrol.com"&gt;http://weddingcontrol.com&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-4893999233830132507?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://weddingcontrol.com' title='WedddingControl'/><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/4893999233830132507/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=4893999233830132507' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/4893999233830132507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/4893999233830132507'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2007/07/wedddingcontrol.html' title='WedddingControl'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-3199145223346101490</id><published>2007-06-29T09:41:00.001-05:00</published><updated>2007-06-29T09:41:40.866-05:00</updated><title type='text'>The Legend of the MutantBunny</title><content type='html'>My wife has been working on a kids story about a bunny that becomes a mutant. Lisa has completed part one of the story. It covers how the bunny becomes a mutant. Amusing stuff :)&lt;br&gt;&lt;br&gt;The story can be read at our company website  &lt;a href="http://mutantbunny.com/mutantbunny/story"&gt;here&lt;/a&gt;.&lt;br clear="all"&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-3199145223346101490?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/3199145223346101490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=3199145223346101490' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/3199145223346101490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/3199145223346101490'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2007/06/legend-of-mutantbunny.html' title='The Legend of the MutantBunny'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-7514651894993993934</id><published>2007-06-21T12:34:00.000-05:00</published><updated>2007-06-21T12:43:52.716-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>PNG Image colors under IE</title><content type='html'>While working on &lt;a href="http://weddingcontrol.com/"&gt;WeddingControl&lt;/a&gt; I ran into some problems with PNG images under IE. The images just didn't match the colors listed in my CSS file. The images looked just fine in Firefox.&lt;br /&gt;&lt;br /&gt;I ended up switching to JPG files to get around the issue. But the real issue is that some browsers don't support PNG gamma correction. IE does, and that makes its rendering of the PNG file inconsistent with other browsers such as Firefox. I could have got around this issue by removing the gamma information, but it was just easier to switch to a JPG file.&lt;br /&gt;&lt;br /&gt;More info...&lt;br /&gt;&lt;a href="http://hsivonen.iki.fi/png-gamma/"&gt;The Sad Story of PNG Gamma&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.hanselman.com/blog/GammaCorrectionAndColorCorrectionPNGIsStillTooHard.aspx"&gt;Gamma Correction And Color Correction Is Still Too Hard&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-7514651894993993934?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://hsivonen.iki.fi/png-gamma/' title='PNG Image colors under IE'/><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/7514651894993993934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=7514651894993993934' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/7514651894993993934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/7514651894993993934'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2007/06/png-image-colors-under-ie.html' title='PNG Image colors under IE'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-4574703418735894658</id><published>2007-06-19T08:32:00.001-05:00</published><updated>2007-06-19T08:32:51.152-05:00</updated><title type='text'>HD-DVD vs Blu-ray</title><content type='html'>The battle over the next generation movie format is in full swing. Blue-ray is ahead of HD-DVD by most accounts. The inclusion of Blu-ray into the PS3 has probably helped the cause.&lt;br&gt;&lt;br&gt;But does this battle matter? Will the next format be some form of download distribution? I often wonder if both HD-DVD and Blu-ray are both ignoring what consumers want, or at least what I want. I want to be able to download movies (rent or own) and watch them on my TV. My XBox 360 already has this functionality, but its catalog sucks. I can also get movies on demand through my cable company, but their catalog sucks too. Hopefully someone will create a distribution network with all the movies I want (like Netflicks), but for digital download to my TV. &lt;br clear="all"&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-4574703418735894658?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/4574703418735894658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=4574703418735894658' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/4574703418735894658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/4574703418735894658'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2007/06/hd-dvd-vs-blu-ray.html' title='HD-DVD vs Blu-ray'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-3138406277824262679</id><published>2007-06-17T16:31:00.000-05:00</published><updated>2007-06-17T16:32:17.145-05:00</updated><title type='text'>Interesting article on programming languages</title><content type='html'>Recommended programming reading &lt;br&gt;&lt;br&gt;&lt;a href="http://steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html"&gt;http://steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html&lt;/a&gt;&lt;br clear="all"&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-3138406277824262679?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/3138406277824262679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=3138406277824262679' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/3138406277824262679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/3138406277824262679'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2007/06/interesting-article-on-programming.html' title='Interesting article on programming languages'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-3513161683016765888</id><published>2007-06-15T10:40:00.001-05:00</published><updated>2007-06-15T10:44:51.480-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='random'/><title type='text'>NBA Playoffs</title><content type='html'>For about as long as I can remember I have been a big basketball fan,&lt;br /&gt;and that includes the NBA. Normally I don't start watching the NBA&lt;br /&gt;until playoff time, but I usually follow the playoffs pretty&lt;br /&gt;regularly. Every year I enjoy the games, but I always end up getting&lt;br /&gt;annoyed by the NBA at the same time.&lt;p&gt;Things I like...&lt;/p&gt;&lt;p&gt;1. I was pulling for the Spurs, so I am glad they one.&lt;/p&gt;&lt;p&gt;2. The great games. The earlier rounds of the playoffs were full of&lt;br /&gt;them. James with 48 against Detroit. The heated Spurs / Sun games.&lt;br /&gt;Mavs getting thumped by some team I've never heard of before :)&lt;/p&gt;&lt;p&gt;3. I always enjoy the fact that for a few weeks there is a game on&lt;br /&gt;every night. That is awesome.&lt;/p&gt;&lt;p&gt;4. TNT broadcast of games is excellent. Pre/post game shows are top&lt;br /&gt;notch with Barkley, Smith, and the other guy. They even sometimes get&lt;br /&gt;Magic on the show.&lt;/p&gt;&lt;p&gt;Things I don't like...&lt;/p&gt;&lt;p&gt;1. The NBA officials are without question the worst officials in all&lt;br /&gt;of sports. First, they are not consistent (unless you mean&lt;br /&gt;consistently bad). Officials will call the game differently in the&lt;br /&gt;last 2 minutes then the rest of the game. James got mugged by Bowen at&lt;br /&gt;the end of game 3, but no call. I know the refs saw the foul they just&lt;br /&gt;didn't call it. Second, they are not fair. Different players are&lt;br /&gt;treated differently. Some players get calls other players won't.&lt;br /&gt;Third, they almost won't call traveling. Fourth, the insane defense 3&lt;br /&gt;seconds rule. This isn't the officials fault, they don't make the&lt;br /&gt;rules. But this is just a dumb rule. Not as bad as illegal defense,&lt;br /&gt;but close.&lt;/p&gt;&lt;p&gt;2. ABC broadcast of the games. They really suck compared to the TNT&lt;br /&gt;crew. The in game commentary sucks with Jackson, Van Gundy, and the other&lt;br /&gt;guy. Jackson is so annoying I almost have to turn the volume off&lt;br /&gt;on my TV to watch the games. Van Gundy is tolerable, but not good. The&lt;br /&gt;post game stuff on ESPN also sucks. I think the NBA should require all&lt;br /&gt;finals games to be ran by the TNT crew.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-3513161683016765888?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/3513161683016765888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=3513161683016765888' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/3513161683016765888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/3513161683016765888'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2007/06/nba-playoffs.html' title='NBA Playoffs'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-1999214231804737086</id><published>2007-06-14T14:49:00.001-05:00</published><updated>2007-06-14T14:53:23.564-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>Useful Rails websites</title><content type='html'>Ruby on Rails websites&lt;p&gt;Main Rails websites&lt;br /&gt;&lt;a href="http://rubyonrails.org"&gt;rubyonrails.org&lt;/a&gt; - Main Ruby on Rails website.&lt;br /&gt;&lt;a href="http://api.rubyonrails.org"&gt;api.rubyonrails.org&lt;/a&gt; - Ruby on Rails API documentation&lt;/p&gt;&lt;p&gt;Main Ruby websites&lt;br /&gt;&lt;a href="http://ruby-lang.org"&gt;ruby-lang.org&lt;/a&gt; - Main Ruby website&lt;br /&gt;&lt;a href="http://ruby-doc.org"&gt;ruby-doc.org&lt;/a&gt; - General Ruby documentation&lt;/p&gt;&lt;p&gt;Ruby projects&lt;br /&gt;&lt;a href="http://rubyforge.org"&gt;rubyforge.org&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Blogs&lt;br /&gt;&lt;a href="http://loadthinking.com"&gt;loudthinking.com&lt;/a&gt; - David Heinemeier Hansson's blog&lt;br /&gt;&lt;a href="http://weblog.rubyonrails.org"&gt;weblog.rubyonrails.org&lt;/a&gt; - Main Rails blog&lt;br /&gt;&lt;a href="http://weblog.jamisbuck.org"&gt;weblog.jamisbuck.org&lt;/a&gt; - Another 37signals developer&lt;br /&gt;&lt;a href="http://rubyinside.com"&gt;rubyinside.com&lt;/a&gt; - Keep up on generic Ruby news&lt;/p&gt;&lt;p&gt;Random other sites&lt;br /&gt;&lt;a href="http://tryruby.hobix.com"&gt;tryruby.hobix.com&lt;/a&gt; - Try Ruby in your browser&lt;br /&gt;&lt;a href="http://www.rubyist.net/%7Eslagell/ruby/index.html"&gt;www.rubyist.net/~slagell/ruby/index.html&lt;/a&gt; - Generic Ruby info&lt;br /&gt;&lt;a href="http://rubycentral.com/book/index.html"&gt;rubycentral.com/book/index.htm&lt;/a&gt;l - Programming Ruby book&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-1999214231804737086?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/1999214231804737086/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=1999214231804737086' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/1999214231804737086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/1999214231804737086'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2007/06/useful-rails-websites.html' title='Useful Rails websites'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8965987.post-9189650443929441209</id><published>2007-06-13T09:17:00.001-05:00</published><updated>2007-06-13T10:56:38.145-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='random'/><title type='text'>Cleveland Ohio</title><content type='html'>I was watching the NBA Finals last night and I started wondering why I never really wanted to go to Cleveland, why no one wants to go to Cleveland for that matter (with the exception of people on 30 Rock).&lt;p&gt;I think it is the name of Cleveland that is the problem. I think Cleveland should be renamed Cleavage.&lt;/p&gt;&lt;p&gt;Cleavage Ohio, that is a name you won't forget.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8965987-9189650443929441209?l=chadmichel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://chadmichel.blogspot.com/feeds/9189650443929441209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8965987&amp;postID=9189650443929441209' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/9189650443929441209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8965987/posts/default/9189650443929441209'/><link rel='alternate' type='text/html' href='http://chadmichel.blogspot.com/2007/06/cleveland-ohio.html' title='Cleveland Ohio'/><author><name>Chad Michel</name><uri>http://www.blogger.com/profile/09568546290607966180</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
