<?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-37223313</id><updated>2011-11-28T12:05:41.235+11:00</updated><category term='calendar'/><category term='mail'/><category term='cvs'/><category term='Microsoft'/><category term='package'/><category term='php'/><category term='Exchange'/><category term='Helper'/><category term='heron'/><category term='apt-get'/><category term='ashx'/><category term='contacts'/><category term='1.2.0'/><category term='1.1.4'/><category term='export'/><category term='hardy'/><category term='handler'/><category term='sync'/><category term='dead'/><category term='3.5'/><category term='outlook'/><category term='controller'/><category term='download'/><category term='IHttpHandler'/><category term='8.04'/><category term='iPhone'/><category term='2.0'/><category term='downgrade'/><category term='view'/><category term='unlock'/><category term='layout'/><category term='firmware'/><category term='source control'/><category term='Three'/><category term='3'/><category term='two hands'/><category term='version control'/><category term='SIM'/><category term='ubuntu'/><category term='csv'/><category term='serialize'/><category term='heath ledger'/><category term='windows server 2008 core'/><category term='jailbreak'/><category term='.NET'/><category term='web.config'/><category term='CakePHP'/><title type='text'>Drew Walker's Web Design &amp; Technical Blog</title><subtitle type='html'>Blogging about anything that grabs my interest.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://drew-walker.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://drew-walker.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Drew Walker</name><uri>http://www.blogger.com/profile/10640423467887962246</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>19</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-37223313.post-3862301406625697080</id><published>2011-05-25T09:13:00.002+10:00</published><updated>2011-05-25T10:18:06.692+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='serialize'/><category scheme='http://www.blogger.com/atom/ns#' term='csv'/><category scheme='http://www.blogger.com/atom/ns#' term='CakePHP'/><category scheme='http://www.blogger.com/atom/ns#' term='controller'/><category scheme='http://www.blogger.com/atom/ns#' term='layout'/><category scheme='http://www.blogger.com/atom/ns#' term='Helper'/><category scheme='http://www.blogger.com/atom/ns#' term='export'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='view'/><title type='text'>CakePHP CSV Export &amp; Helper</title><content type='html'>Ok, so I made a simple CakePHP helper for generating/exporting CSV files and thought I would share how I did it.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. Create the file /app/views/helpers/csv.php with the following code:&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;?php&lt;br /&gt;&lt;br /&gt;class CsvHelper extends AppHelper {&lt;br /&gt;&lt;br /&gt;    var $delimiter = ',';&lt;br /&gt;    var $enclosure = '"';&lt;br /&gt;    var $filename = 'Export.csv';&lt;br /&gt;    var $raw_data;&lt;br /&gt;&lt;br /&gt;    function headers($content_type) {&lt;br /&gt;        header("Content-type:$content_type;");&lt;br /&gt;        header("Content-disposition:attachment;filename=" . $this-&amp;gt;filename);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    function addCell($value) {&lt;br /&gt;        $this-&amp;gt;raw_data .= $this-&amp;gt;enclosure . $value . $this-&amp;gt;enclosure . $this-&amp;gt;delimiter;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    function endRow() {&lt;br /&gt;        $this-&amp;gt;raw_data = substr($this-&amp;gt;raw_data, 0, strrpos($this-&amp;gt;raw_data, $this-&amp;gt;delimiter)) . "\n";&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    function addRow($row) {&lt;br /&gt;        foreach($row as $cell) {&lt;br /&gt;            $this-&amp;gt;addCell($cell);&lt;br /&gt;        }&lt;br /&gt;        $this-&amp;gt;endRow();&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    function setFilename($filename) { &lt;br /&gt;        $this-&amp;gt;filename = $filename; &lt;br /&gt;        if (strtolower(substr($this-&amp;gt;filename, -4)) != '.csv') { &lt;br /&gt;            $this-&amp;gt;filename .= '.csv'; &lt;br /&gt;        } &lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    function serialize($data, $add_header_row = true) {&lt;br /&gt;        $row_number = 1;&lt;br /&gt;        foreach($data as $listing) {&lt;br /&gt;            foreach($listing as $model_name =&amp;gt; $model_data) {&lt;br /&gt;                foreach ($model_data as $field_name =&amp;gt; $field_value) {&lt;br /&gt;                    if ($row_number == 1) {&lt;br /&gt;                        $headerRow[] = $model_name.".".$field_name;&lt;br /&gt;                        $firstRow[] = $field_value;&lt;br /&gt;                    } else {&lt;br /&gt;                        $this-&amp;gt;addCell($field_value);&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            if ($row_number == 1) {&lt;br /&gt;                $this-&amp;gt;addRow($headerRow);&lt;br /&gt;                $this-&amp;gt;addRow($firstRow);&lt;br /&gt;                unset($headerRow);&lt;br /&gt;                unset($firstRow);&lt;br /&gt;            } else {&lt;br /&gt;                $this-&amp;gt;endRow();&lt;br /&gt;            }&lt;br /&gt;            $row_number++;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    function download($filename = null, $content_type = "application/vnd.ms-excel") {&lt;br /&gt;        if ($filename) { &lt;br /&gt;            if (is_string($filename)) $this-&amp;gt;setFilename($filename);&lt;br /&gt;        }&lt;br /&gt;        $this-&amp;gt;headers($content_type);&lt;br /&gt;        echo utf8_decode($this-&amp;gt;raw_data);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    function toString() {&lt;br /&gt;        header("Content-type:text/plain;");&lt;br /&gt;        echo utf8_decode($this-&amp;gt;raw_data);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;?&amp;gt;&lt;/pre&gt;&lt;b&gt;2. Add the following line to the controller where you'd like to use the CSV helper:&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;var $helpers = array('Csv');&lt;/pre&gt;&lt;b&gt;3. Create the file /app/views/layouts/csv/default.ctp with the following code:&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;?php echo $content_for_layout; ?&amp;gt;&lt;/pre&gt;This is just a blank layout template used to contain our CSV content.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;4. Populate the data and set the layout file by adding the relevant function to your controller. Example:&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;function export() {&lt;br /&gt;    $this-&amp;gt;Posts-&amp;gt;recursive = -1;&lt;br /&gt;    $this-&amp;gt;set('Posts', $this-&amp;gt;Post-&amp;gt;find('all'));&lt;br /&gt;    $this-&amp;gt;layout = 'csv/default';&lt;br /&gt;}&lt;/pre&gt;&lt;b&gt;5. Create the file /app/views/posts/export.ctp and serialize the model data to CSV:&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;$csv-&amp;gt;serialize($posts);&lt;br /&gt;$csv-&amp;gt;download("Posts.csv");&lt;/pre&gt;There are also some other methods in the helper that might be helpful for your purpose. They are addRow($row), addCell($value), endRow() and toString(). I'd suggest starting with calling the toString() method rather than download() and make sure the output looks as expected.&lt;br /&gt;&lt;br /&gt;Would love to hear any feedback that people.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37223313-3862301406625697080?l=drew-walker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drew-walker.blogspot.com/feeds/3862301406625697080/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://drew-walker.blogspot.com/2011/05/cakephp-csv-export-helper.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/3862301406625697080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/3862301406625697080'/><link rel='alternate' type='text/html' href='http://drew-walker.blogspot.com/2011/05/cakephp-csv-export-helper.html' title='CakePHP CSV Export &amp; Helper'/><author><name>Drew Walker</name><uri>http://www.blogger.com/profile/10640423467887962246</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-37223313.post-3726391601550404923</id><published>2010-01-13T09:24:00.000+11:00</published><updated>2010-01-13T09:24:51.981+11:00</updated><title type='text'>OSX archive dialog never closes</title><content type='html'>I've noticed that sometimes when you try and create a zip archive using OSX's default "Compress" option, the process starts but seems to never be able to complete (the dialog stays open). The easiest workaround for this is to open Terminal and browse to the folder you want to compress the content of, then execute the following command:&lt;br /&gt;&lt;br /&gt;zip Archive * -r&lt;br /&gt;&lt;br /&gt;This will create a file called Archive.zip in the same directory with the entire contents of the folder (including subdirectories).&lt;br /&gt;&lt;br /&gt;For other usages of the zip command you can execute:&lt;br /&gt;&lt;br /&gt;zip -h2&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37223313-3726391601550404923?l=drew-walker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drew-walker.blogspot.com/feeds/3726391601550404923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://drew-walker.blogspot.com/2010/01/osx-archive-dialog-never-closes.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/3726391601550404923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/3726391601550404923'/><link rel='alternate' type='text/html' href='http://drew-walker.blogspot.com/2010/01/osx-archive-dialog-never-closes.html' title='OSX archive dialog never closes'/><author><name>Drew Walker</name><uri>http://www.blogger.com/profile/10640423467887962246</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-37223313.post-3520130811174450548</id><published>2009-04-24T10:40:00.009+10:00</published><updated>2009-04-24T14:29:36.439+10:00</updated><title type='text'>HOW TO: Install Ubuntu 9.04 (Linux) Desktop Edition</title><content type='html'>&lt;a href="http://www.ubuntu.com/"&gt;Ubuntu 9.04&lt;/a&gt; was officially released today, so I thought I'd try out an installation in &lt;a href="http://www.virtualbox.org/"&gt;VirtualBox&lt;/a&gt; and post my experiences. The aim was to follow the basic installation steps and share those steps with people who may find them useful. The same steps should also apply to anyone performing a fresh install on a physical machine.&lt;br /&gt;&lt;br /&gt;Step 1: Select installation language&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_SPhQUS3F7Hw/SfE8ouh1ASI/AAAAAAAACaI/rtSPkiy3rLA/s1600-h/1-install-ubuntu-9.04-initial-language.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_SPhQUS3F7Hw/SfE8ouh1ASI/AAAAAAAACaI/rtSPkiy3rLA/s400/1-install-ubuntu-9.04-initial-language.png" alt="" id="BLOGGER_PHOTO_ID_5328106504538358050" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Step 2: Select 'Install Ubuntu' from the installation options&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_SPhQUS3F7Hw/SfE8orzkgKI/AAAAAAAACaQ/4ZylzX-mW8M/s1600-h/2-install-ubuntu-9.04-installation-mode.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_SPhQUS3F7Hw/SfE8orzkgKI/AAAAAAAACaQ/4ZylzX-mW8M/s400/2-install-ubuntu-9.04-installation-mode.png" alt="" id="BLOGGER_PHOTO_ID_5328106503807467682" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Step 3: Select your language (again). Why? Who knows.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_SPhQUS3F7Hw/SfE8o__VLTI/AAAAAAAACaY/icPk8aqRqzY/s1600-h/3-install-ubuntu-9.04-language.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_SPhQUS3F7Hw/SfE8o__VLTI/AAAAAAAACaY/icPk8aqRqzY/s400/3-install-ubuntu-9.04-language.png" alt="" id="BLOGGER_PHOTO_ID_5328106509225504050" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Step 4: Select your timezone&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_SPhQUS3F7Hw/SfE8pAx2BNI/AAAAAAAACag/_3x-I-3KxKc/s1600-h/4-install-ubuntu-9.04-timezone.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_SPhQUS3F7Hw/SfE8pAx2BNI/AAAAAAAACag/_3x-I-3KxKc/s400/4-install-ubuntu-9.04-timezone.png" alt="" id="BLOGGER_PHOTO_ID_5328106509437371602" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Step 5: Select your keyboard layout&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_SPhQUS3F7Hw/SfE8pE5ptSI/AAAAAAAACao/lvOp6AVZwzU/s1600-h/5-install-ubuntu-9.04-keyboard-layout.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_SPhQUS3F7Hw/SfE8pE5ptSI/AAAAAAAACao/lvOp6AVZwzU/s400/5-install-ubuntu-9.04-keyboard-layout.png" alt="" id="BLOGGER_PHOTO_ID_5328106510543861026" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Step 6: Select a disk partition to install to&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_SPhQUS3F7Hw/SfE9mC_1yRI/AAAAAAAACbI/RAQRNNkKqGo/s1600-h/6-install-ubuntu-9.04-partition-hard-disk-drive.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_SPhQUS3F7Hw/SfE9mC_1yRI/AAAAAAAACbI/RAQRNNkKqGo/s400/6-install-ubuntu-9.04-partition-hard-disk-drive.png" alt="" id="BLOGGER_PHOTO_ID_5328107558004967698" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Step 7: Create your user account and name your computer&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_SPhQUS3F7Hw/SfE9mW0ik4I/AAAAAAAACbQ/vGvnmUQfX1I/s1600-h/7-install-ubuntu-9.04-account-creation.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_SPhQUS3F7Hw/SfE9mW0ik4I/AAAAAAAACbQ/vGvnmUQfX1I/s400/7-install-ubuntu-9.04-account-creation.png" alt="" id="BLOGGER_PHOTO_ID_5328107563326280578" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Step 8: Review installation options&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_SPhQUS3F7Hw/SfE9mRtLFoI/AAAAAAAACbY/747wtTebKe8/s1600-h/8-install-ubuntu-9.04-installation-overview.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_SPhQUS3F7Hw/SfE9mRtLFoI/AAAAAAAACbY/747wtTebKe8/s400/8-install-ubuntu-9.04-installation-overview.png" alt="" id="BLOGGER_PHOTO_ID_5328107561953203842" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Step 9: Wait...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_SPhQUS3F7Hw/SfE9mjTZbeI/AAAAAAAACbo/fc9IM56woBQ/s1600-h/10-install-ubuntu-9.04-formatting-partitions.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_SPhQUS3F7Hw/SfE9mjTZbeI/AAAAAAAACbo/fc9IM56woBQ/s400/10-install-ubuntu-9.04-formatting-partitions.png" alt="" id="BLOGGER_PHOTO_ID_5328107566676930018" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_SPhQUS3F7Hw/SfE-UNWrYpI/AAAAAAAACbw/kfNDsaJwuYw/s1600-h/11-install-ubuntu-9.04-installing-system.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_SPhQUS3F7Hw/SfE-UNWrYpI/AAAAAAAACbw/kfNDsaJwuYw/s400/11-install-ubuntu-9.04-installing-system.png" alt="" id="BLOGGER_PHOTO_ID_5328108351059092114" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_SPhQUS3F7Hw/SfE-UCCY2bI/AAAAAAAACb4/K-hPpOdf_pA/s1600-h/12-install-ubuntu-9.04-configuring-apt.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_SPhQUS3F7Hw/SfE-UCCY2bI/AAAAAAAACb4/K-hPpOdf_pA/s400/12-install-ubuntu-9.04-configuring-apt.png" alt="" id="BLOGGER_PHOTO_ID_5328108348021201330" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_SPhQUS3F7Hw/SfE-UYNq6zI/AAAAAAAACcA/i9JluoDzWqY/s1600-h/13-install-ubuntu-9.04-setting-up-the-clock.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_SPhQUS3F7Hw/SfE-UYNq6zI/AAAAAAAACcA/i9JluoDzWqY/s400/13-install-ubuntu-9.04-setting-up-the-clock.png" alt="" id="BLOGGER_PHOTO_ID_5328108353974102834" 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/_SPhQUS3F7Hw/SfE-UjKfO6I/AAAAAAAACcI/XuSO533OK2M/s1600-h/14-install-ubuntu-9.04-detecting-hardware.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_SPhQUS3F7Hw/SfE-UjKfO6I/AAAAAAAACcI/XuSO533OK2M/s400/14-install-ubuntu-9.04-detecting-hardware.png" alt="" id="BLOGGER_PHOTO_ID_5328108356913544098" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Step 10: Restart the computer&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_SPhQUS3F7Hw/SfE-Uv6REiI/AAAAAAAACcQ/P0VN_aXclNg/s1600-h/15-install-ubuntu-9.04-installation-complete.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_SPhQUS3F7Hw/SfE-Uv6REiI/AAAAAAAACcQ/P0VN_aXclNg/s400/15-install-ubuntu-9.04-installation-complete.png" alt="" id="BLOGGER_PHOTO_ID_5328108360335168034" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Step 11: Remove the installation media&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_SPhQUS3F7Hw/SfE-9o3HQqI/AAAAAAAACcY/DZUnq15CU0U/s1600-h/16-install-ubuntu-9.04-remove-disc.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_SPhQUS3F7Hw/SfE-9o3HQqI/AAAAAAAACcY/DZUnq15CU0U/s400/16-install-ubuntu-9.04-remove-disc.png" alt="" id="BLOGGER_PHOTO_ID_5328109062817530530" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Step 12: Login!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_SPhQUS3F7Hw/SfE-9h9sjsI/AAAAAAAACcg/azinBGB-IpY/s1600-h/17-install-ubuntu-9.04-login-screen.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_SPhQUS3F7Hw/SfE-9h9sjsI/AAAAAAAACcg/azinBGB-IpY/s400/17-install-ubuntu-9.04-login-screen.png" alt="" id="BLOGGER_PHOTO_ID_5328109060966092482" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Step 13: Enjoy!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_SPhQUS3F7Hw/SfE-9kAaddI/AAAAAAAACco/xjjFihB05Is/s1600-h/18-install-ubuntu-9.04-desktop.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_SPhQUS3F7Hw/SfE-9kAaddI/AAAAAAAACco/xjjFihB05Is/s400/18-install-ubuntu-9.04-desktop.png" alt="" id="BLOGGER_PHOTO_ID_5328109061514360274" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The install took a total of about 15 minutes on my machine and was very easy. It will be very familiar to regular Ubuntu users and will probably even be simple for the newest users.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37223313-3520130811174450548?l=drew-walker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drew-walker.blogspot.com/feeds/3520130811174450548/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://drew-walker.blogspot.com/2009/04/how-to-install-ubuntu-904-linux-desktop.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/3520130811174450548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/3520130811174450548'/><link rel='alternate' type='text/html' href='http://drew-walker.blogspot.com/2009/04/how-to-install-ubuntu-904-linux-desktop.html' title='HOW TO: Install Ubuntu 9.04 (Linux) Desktop Edition'/><author><name>Drew Walker</name><uri>http://www.blogger.com/profile/10640423467887962246</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/_SPhQUS3F7Hw/SfE8ouh1ASI/AAAAAAAACaI/rtSPkiy3rLA/s72-c/1-install-ubuntu-9.04-initial-language.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37223313.post-8366263415652919070</id><published>2008-11-27T15:21:00.003+11:00</published><updated>2008-11-27T15:32:31.452+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sync'/><category scheme='http://www.blogger.com/atom/ns#' term='outlook'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='contacts'/><category scheme='http://www.blogger.com/atom/ns#' term='calendar'/><category scheme='http://www.blogger.com/atom/ns#' term='mail'/><category scheme='http://www.blogger.com/atom/ns#' term='Exchange'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Configuring iPhone to sync with Exchange Server</title><content type='html'>Firstly, from my experience, you can't sync contacts, email and calendar with your iPhone unless IMAP (?) is installed on the exchange server. I actually don't know if I'm correct with that statement, but in basic terms: if you can't access Outlook Web Access from outside your office, your iPhone probably won't be able to sync.&lt;br /&gt;&lt;br /&gt;To setup the synchronisation, you just need to go to &lt;span style="font-weight: bold;"&gt;Settings &gt; Mail, Contacts, Calendars &gt; Add Account&lt;/span&gt; on your iPhone. From here you will be asked to fill in your account details. The only thing that is confusing here is really the "Server" setting. This should be the domain you use to access Outlook Web Access. The other settings are basically just your domain and email credentials.&lt;br /&gt;&lt;br /&gt;Once the account has been configured it's easiest just to restart your iPhone. If you haven't already, you'll be asked to setup a pin (this seems to be required before the sync occurs) and you should now be in action.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37223313-8366263415652919070?l=drew-walker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drew-walker.blogspot.com/feeds/8366263415652919070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://drew-walker.blogspot.com/2008/11/configuring-iphone-to-sync-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/8366263415652919070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/8366263415652919070'/><link rel='alternate' type='text/html' href='http://drew-walker.blogspot.com/2008/11/configuring-iphone-to-sync-with.html' title='Configuring iPhone to sync with Exchange Server'/><author><name>Drew Walker</name><uri>http://www.blogger.com/profile/10640423467887962246</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-37223313.post-6932275907795118345</id><published>2008-11-27T15:01:00.003+11:00</published><updated>2008-11-27T15:17:16.597+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='package'/><category scheme='http://www.blogger.com/atom/ns#' term='heron'/><category scheme='http://www.blogger.com/atom/ns#' term='version control'/><category scheme='http://www.blogger.com/atom/ns#' term='apt-get'/><category scheme='http://www.blogger.com/atom/ns#' term='cvs'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='source control'/><category scheme='http://www.blogger.com/atom/ns#' term='hardy'/><category scheme='http://www.blogger.com/atom/ns#' term='8.04'/><title type='text'>Installing CVS Open Source Version Control on Ubuntu 8.04 (Hardy Heron)</title><content type='html'>As with most software for linux/ubuntu, you have two options when installing CVS on Ubuntu 8.04:&lt;br /&gt;&lt;br /&gt;1 - Install the package provided by the distributor of the operating system: to do this you just need to run the following command from a terminal.&lt;br /&gt;&lt;br /&gt;sudo apt-get install cvs&lt;br /&gt;&lt;br /&gt;This will install the &lt;a href="http://packages.ubuntu.com/hardy/cvs"&gt;CVS package provided by Ubuntu&lt;/a&gt;, which might not necessarily be the latest version of CVS, but will generally be a good/stable option.&lt;br /&gt;&lt;br /&gt;OR&lt;br /&gt;&lt;br /&gt;2 - Install the latest version of the software from the developers. The steps will obviously vary per application. For CVS, the details for installing from source can be found on the &lt;a href="http://www.nongnu.org/cvs/"&gt;CVS version control website&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Once the package has been successfully installed, you should be able to use the "cvs" command from the command line.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37223313-6932275907795118345?l=drew-walker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drew-walker.blogspot.com/feeds/6932275907795118345/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://drew-walker.blogspot.com/2008/11/installing-cvs-open-source-version.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/6932275907795118345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/6932275907795118345'/><link rel='alternate' type='text/html' href='http://drew-walker.blogspot.com/2008/11/installing-cvs-open-source-version.html' title='Installing CVS Open Source Version Control on Ubuntu 8.04 (Hardy Heron)'/><author><name>Drew Walker</name><uri>http://www.blogger.com/profile/10640423467887962246</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-37223313.post-1317482469307861392</id><published>2008-07-22T14:19:00.003+10:00</published><updated>2008-07-22T14:22:21.055+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='1.1.4'/><category scheme='http://www.blogger.com/atom/ns#' term='3'/><category scheme='http://www.blogger.com/atom/ns#' term='Three'/><category scheme='http://www.blogger.com/atom/ns#' term='1.2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='SIM'/><title type='text'>No support for 3 (Three) SIM on iPhone (first generation)</title><content type='html'>Last night I finally (11 days after the launch) managed to upgrade my first gen iPhone from the 1.1.4 firmware to 2.0 (I'll post the details in the next couple of days). However, I was saddened to see that the 2.0 firmware still doesn't allow me to use my '3' SIM card with my iPhone. :(&lt;br /&gt;&lt;br /&gt;Apparently this isn't an issue in the second generation iPhones, but I'm yet to see this for my own eyes. I'll keep investigating and will post if I find a solution.&lt;br /&gt;&lt;br /&gt;And for anyone who is wondering: you will never be able to add 3G support to your first gen iPhone with a firmware upgrade, this just isn't possible because it doesn't have the necessary hardware. However, hopefully we'll find a solution soon that allows us to roam on the other networks using a Three SIM.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37223313-1317482469307861392?l=drew-walker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drew-walker.blogspot.com/feeds/1317482469307861392/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://drew-walker.blogspot.com/2008/07/no-support-for-3-three-sim-on-iphone.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/1317482469307861392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/1317482469307861392'/><link rel='alternate' type='text/html' href='http://drew-walker.blogspot.com/2008/07/no-support-for-3-three-sim-on-iphone.html' title='No support for 3 (Three) SIM on iPhone (first generation)'/><author><name>Drew Walker</name><uri>http://www.blogger.com/profile/10640423467887962246</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-37223313.post-3985292052132642205</id><published>2008-07-22T14:00:00.003+10:00</published><updated>2008-07-22T14:23:01.776+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firmware'/><category scheme='http://www.blogger.com/atom/ns#' term='download'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='1.1.4'/><category scheme='http://www.blogger.com/atom/ns#' term='1.2.0'/><title type='text'>Which firmware for first generation iPhone</title><content type='html'>If you're wondering which firmware to use for your iPhone and where to get it when moving to 2.0, here they are:&lt;br /&gt;&lt;br /&gt;First Generation iPhone (no 3G) - &lt;a href="http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPhone/061-4956.20080710.V50OI/iPhone1,1_2.0_5A347_Restore.ipsw"&gt;Download iPhone1,1_2.0_5A347_Restore.ipsw firmware&lt;/a&gt;&lt;br /&gt;Second Generation iPhone (has 3G) - &lt;a href="http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPhone/061-4955.20080710.bgt53/iPhone1,2_2.0_5A347_Restore.ipsw"&gt;Download iPhone1,2_2.0_5A347_Restore.ipsw firmware&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;NOTE: These are the official firmware downloads from Apple. The servers are part of the Akamai Edge Suite, which is a content distribution network.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37223313-3985292052132642205?l=drew-walker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drew-walker.blogspot.com/feeds/3985292052132642205/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://drew-walker.blogspot.com/2008/07/which-firmware-for-first-generation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/3985292052132642205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/3985292052132642205'/><link rel='alternate' type='text/html' href='http://drew-walker.blogspot.com/2008/07/which-firmware-for-first-generation.html' title='Which firmware for first generation iPhone'/><author><name>Drew Walker</name><uri>http://www.blogger.com/profile/10640423467887962246</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-37223313.post-1530324244287988872</id><published>2008-07-21T09:05:00.002+10:00</published><updated>2008-07-21T09:12:32.667+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='firmware'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='1.1.4'/><category scheme='http://www.blogger.com/atom/ns#' term='jailbreak'/><category scheme='http://www.blogger.com/atom/ns#' term='unlock'/><title type='text'>Upgrade or unlock iPhone 2.0 firmware</title><content type='html'>Over the weekend the &lt;a href="http://blog.iphone-dev.org/"&gt;iPhone-dev Team&lt;/a&gt; released a new &lt;a href="http://thebigboss.org/repofiles/nonrepo/PwnageTool_2.0.zip"&gt;download of PwnageTool 2.0.1&lt;/a&gt; (if that link doesn't work, visit the dev team blog for mirrors), which will allow you to jailbreak and unlock your first generation iPhone, or jailbreak the iPhone 3G and iPod Touch.&lt;br /&gt;&lt;br /&gt;I'm yet to see if this works (I locked myself out of my apartment and can't get to my iPhone!), but it apparently does. All you need to do is build the custom firmware from the official ipsw and restore using iTunes 7.7.&lt;br /&gt;&lt;br /&gt;However, I'm sure it's not actually this simple, so once I get back into my apartment I'll post my experiences and a bit of a tutorial.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37223313-1530324244287988872?l=drew-walker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drew-walker.blogspot.com/feeds/1530324244287988872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://drew-walker.blogspot.com/2008/07/upgrade-or-unlock-iphone-20-firmware.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/1530324244287988872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/1530324244287988872'/><link rel='alternate' type='text/html' href='http://drew-walker.blogspot.com/2008/07/upgrade-or-unlock-iphone-20-firmware.html' title='Upgrade or unlock iPhone 2.0 firmware'/><author><name>Drew Walker</name><uri>http://www.blogger.com/profile/10640423467887962246</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-37223313.post-8097402261919949818</id><published>2008-07-15T14:42:00.002+10:00</published><updated>2008-07-15T14:53:35.899+10:00</updated><title type='text'>Cannot update to iPhone 2.0 official firmware (yet!)</title><content type='html'>For everyone who has an unlocked 1.1.4 iPhone, it might be a little while until you can move up to the 1.2.0 (aka 2.0) firmware. Currently the closest you can come is to update to the beta 2.0 firmware using &lt;a href="http://wikee.iphwn.org/news:pwnage1dot1_announcement"&gt;PwnageTool for MAC&lt;/a&gt;. This version of PwnageTool supports the 1.1.4 official firmware and the 2.0 beta (2.0 5A240d) but not the 2.0 official release (5A347). iClarified have suggested that there may be a &lt;a href="http://iclarified.com/entry/index.php?enid=1538"&gt;new release of PwnageTool shortly&lt;/a&gt;, but I have a feeling &lt;a href="http://winpwn.com/index.php/Main_Page"&gt;WinPwn&lt;/a&gt; may beat them to it. Either way, we're stuck at 1.1.4 until one of these guys brings out a new release or another player comes onto the scene. Maybe &lt;a href="http://www.ziphone.org/"&gt;ZiPhone&lt;/a&gt;, iBrickr or iLiberty?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37223313-8097402261919949818?l=drew-walker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drew-walker.blogspot.com/feeds/8097402261919949818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://drew-walker.blogspot.com/2008/07/cannot-update-to-iphone-20-official.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/8097402261919949818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/8097402261919949818'/><link rel='alternate' type='text/html' href='http://drew-walker.blogspot.com/2008/07/cannot-update-to-iphone-20-official.html' title='Cannot update to iPhone 2.0 official firmware (yet!)'/><author><name>Drew Walker</name><uri>http://www.blogger.com/profile/10640423467887962246</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-37223313.post-6953717444527574982</id><published>2008-07-11T16:18:00.003+10:00</published><updated>2008-07-11T16:30:37.663+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='downgrade'/><category scheme='http://www.blogger.com/atom/ns#' term='firmware'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='1.1.4'/><category scheme='http://www.blogger.com/atom/ns#' term='1.2.0'/><title type='text'>Downgrading iPhone from 1.2.0 (aka 2.0) to 1.1.4 firmware</title><content type='html'>After many (MANY!) hours of trying to get my iPhone back to the 1.1.4 firmware unsuccessfully, I finally found out how!&lt;br /&gt;&lt;br /&gt;How I got here: I upgraded my iPhone to the 1.2.0 firmware without hacking the 1.1.4 firmware first. As such, the phone was now useless, so I needed to find out how to get back to 1.1.4. Given that the 1.2.0 firmware was only released today, there were no articles instructing me how to do so, and there were no applications to perform the task for me.&lt;br /&gt;&lt;br /&gt;So, what was the problem: well, after much investigation it seems like the problem lay with iTunes 7.7 and the Apple Mobile Device Support. Any time I tried to restore the 1.1.4 ipsw, there were errors (mainly 1601/1602). After completely rolling back iTunes, Apple Mobile Device Support, Apple Software Update and QuickTime, rebooting and reinstalling iTunes 7.6, I was now able to put the phone into DFU mode and use the Restore (Shift+Restore in fact) function to restore the 1.1.4 firmware ipsw successfully.&lt;br /&gt;&lt;br /&gt;Hope this saves someone hours of searching and trial and error!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37223313-6953717444527574982?l=drew-walker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drew-walker.blogspot.com/feeds/6953717444527574982/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://drew-walker.blogspot.com/2008/07/downgrading-iphone-from-120-aka-20-to.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/6953717444527574982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/6953717444527574982'/><link rel='alternate' type='text/html' href='http://drew-walker.blogspot.com/2008/07/downgrading-iphone-from-120-aka-20-to.html' title='Downgrading iPhone from 1.2.0 (aka 2.0) to 1.1.4 firmware'/><author><name>Drew Walker</name><uri>http://www.blogger.com/profile/10640423467887962246</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-37223313.post-4582214142218686716</id><published>2008-05-20T10:41:00.002+10:00</published><updated>2008-05-20T10:44:29.788+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows server 2008 core'/><title type='text'>How to check installed components - Windows Server 2008 Core</title><content type='html'>I've started delving into Windows Server 2008 Web Core and have been having a bit of trouble finding information. However, one of the useful commands I came across was "oclist". This command will list the available components and indicate "Installed" or "Not Installed".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37223313-4582214142218686716?l=drew-walker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drew-walker.blogspot.com/feeds/4582214142218686716/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://drew-walker.blogspot.com/2008/05/how-to-check-installed-components.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/4582214142218686716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/4582214142218686716'/><link rel='alternate' type='text/html' href='http://drew-walker.blogspot.com/2008/05/how-to-check-installed-components.html' title='How to check installed components - Windows Server 2008 Core'/><author><name>Drew Walker</name><uri>http://www.blogger.com/profile/10640423467887962246</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-37223313.post-2975332790051300762</id><published>2008-05-06T11:46:00.003+10:00</published><updated>2008-05-06T11:51:14.346+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='3.5'/><title type='text'>ASP.NET 3.5 Dynamic Data Website Wizard Bug</title><content type='html'>I just came across a bug with the latest &lt;a href="http://code.msdn.microsoft.com/dynamicdata/Release/ProjectReleases.aspx?ReleaseId=853"&gt;ASP.NET Dynamic Data Preview&lt;/a&gt;, and thought I should blog about it.&lt;br /&gt;&lt;br /&gt;The bug occurs when you have a field name in a table that matches the name of the table. For example, I create a table called "Domain" that was going to be used to maintain a list of domains that I manage, and my field name for the domain name was "Domain". This caused a .NET exception. The workaround was to change the field name. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37223313-2975332790051300762?l=drew-walker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drew-walker.blogspot.com/feeds/2975332790051300762/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://drew-walker.blogspot.com/2008/05/aspnet-35-dynamic-data-website-wizard.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/2975332790051300762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/2975332790051300762'/><link rel='alternate' type='text/html' href='http://drew-walker.blogspot.com/2008/05/aspnet-35-dynamic-data-website-wizard.html' title='ASP.NET 3.5 Dynamic Data Website Wizard Bug'/><author><name>Drew Walker</name><uri>http://www.blogger.com/profile/10640423467887962246</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-37223313.post-802431637465399705</id><published>2008-01-31T08:53:00.002+11:00</published><updated>2008-05-06T11:52:46.507+10:00</updated><title type='text'>Maximum width and height on ActionScript 3.0 'Bitmap' class is 8191</title><content type='html'>I came across something worth keeping in mind when working with Bitmaps in ActionScript 3.0 yesterday. I was working with a large jpeg (10000 pixels wide) that I wanted to load into a Bitmap programatically. I was able to load the image and could confirm the load had completed by firing an event on complete. However, the image wouldn't render on the stage. I tried exactly the same code with on a jpeg with smaller dimensions (500 pixels wide) and found that everything worked as expected. It was at this point I realised it was quite obviously related to the size of the image and so I decided to do some trial and error. The result I found was that the 'width' and 'height' property of the 'Bitmap' class only supports an integer up to 8191. Apparently Adobe thought 12 bits would be more appropriate than 16 (which would've allowed dimensions up to 65535). I imagine the class could be extended quite easily to allow for larger dimensions, but I didn't go down this path just yet.&lt;br /&gt;&lt;br /&gt;Also, before anyone asks why you'd want to work with such large jpegs... the project I'm working on required the creation of a storyboard of 360 movie frames (each one 500x332 pixels). This storyboard took approximately 4 minutes to load when requesting each frame individually (through 360 HTTP request), but by compiling the frames server-side into a single storyboard and sending the jpeg in a single HTTP request, this time was reduced to around 15 seconds.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37223313-802431637465399705?l=drew-walker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drew-walker.blogspot.com/feeds/802431637465399705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://drew-walker.blogspot.com/2008/01/maximum-width-and-height-on.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/802431637465399705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/802431637465399705'/><link rel='alternate' type='text/html' href='http://drew-walker.blogspot.com/2008/01/maximum-width-and-height-on.html' title='Maximum width and height on ActionScript 3.0 &apos;Bitmap&apos; class is 8191'/><author><name>Drew Walker</name><uri>http://www.blogger.com/profile/10640423467887962246</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-37223313.post-3811246633095412623</id><published>2008-01-23T08:57:00.001+11:00</published><updated>2008-05-06T11:53:33.643+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dead'/><category scheme='http://www.blogger.com/atom/ns#' term='two hands'/><category scheme='http://www.blogger.com/atom/ns#' term='heath ledger'/><title type='text'>Heath Ledger Dead</title><content type='html'>&lt;p&gt;If the news reports are true ("&lt;a href="http://cityroom.blogs.nytimes.com/2008/01/22/actor-heath-ledger-is-found-dead/"&gt;Actor Heath Ledger Is Found Dead&lt;/a&gt;"), then it's a very sad day indeed.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I wouldn't usually make this sort of post, but Heath was a great actor and an even better Aussie. You will be sorely missed mate. My sincere condolences go out to Michelle Williams and Matilda Rose.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37223313-3811246633095412623?l=drew-walker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drew-walker.blogspot.com/feeds/3811246633095412623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://drew-walker.blogspot.com/2008/01/heath-ledger-dead-if-news-reports-are.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/3811246633095412623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/3811246633095412623'/><link rel='alternate' type='text/html' href='http://drew-walker.blogspot.com/2008/01/heath-ledger-dead-if-news-reports-are.html' title='Heath Ledger Dead'/><author><name>Drew Walker</name><uri>http://www.blogger.com/profile/10640423467887962246</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-37223313.post-5175445871426351632</id><published>2007-11-14T21:18:00.001+11:00</published><updated>2008-05-06T11:54:03.532+10:00</updated><title type='text'>Can't open Visual Studio 2003 Web Application?</title><content type='html'>I was trying for quite a long time to work out why I couldn't open a Visual Studio 2003 website and kept receiving an error along the lines of:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Web Access Failed - The default Web Access mode for this project is set to file share, but the project folder at 'http://localhost' cannot be opened with the path '\\localhost\wwwroot$\'.&lt;br /&gt;&lt;br /&gt;The error returned was:&lt;br /&gt;&lt;br /&gt;Unable to create Web project 'WebApplication1'. The file path&lt;br /&gt;'D:\Projects\WebProject1' does not correspond to the URL 'http://localhost/'.&lt;br /&gt;The two need to map to the same server location. HTTP Error 404 : Not Found&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;After some searching online I realised I needed to create a UNC share to the root directory of my website and specify that share when the project opens. 'Administrators' and 'VS Developers' need full control of the share.&lt;br /&gt;&lt;br /&gt;This got around the 'Web Access Failed' error. However, this is when the pain started. I was then confronted with:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Unable to Retrieve Folder Information from the Server&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;So, my project was still unavailable. I went through numerous steps to try and fix this issue, but nothing worked. Finally, I found an obscure post mentioning that you should avoid folders prefixed with '.' with Visual Studio as it can cause problems. This was right on the mark! Because I use &lt;a href="http://subversion.tigris.org/"&gt;Subversion&lt;/a&gt; and &lt;a href="http://tortoisesvn.tigris.org/"&gt;TortoiseSVN&lt;/a&gt; for my source control, my tree was littered with hidden '.svn' folders. It turns out that the creation of Subversion also came across this issue, as there is an option in the settings to use '_svn' instead of '.svn'. Once I changed this setting, deleted the folder and re-got the files from source control everything worked perfectly. In short, what out for folders with a period as a prefix when using Visual Studio!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37223313-5175445871426351632?l=drew-walker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drew-walker.blogspot.com/feeds/5175445871426351632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://drew-walker.blogspot.com/2007/11/cant-open-visual-studio-2003-web.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/5175445871426351632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/5175445871426351632'/><link rel='alternate' type='text/html' href='http://drew-walker.blogspot.com/2007/11/cant-open-visual-studio-2003-web.html' title='Can&apos;t open Visual Studio 2003 Web Application?'/><author><name>Drew Walker</name><uri>http://www.blogger.com/profile/10640423467887962246</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-37223313.post-9001801128800449854</id><published>2007-11-07T15:02:00.001+11:00</published><updated>2008-05-06T11:54:50.388+10:00</updated><title type='text'>MVC Framework from Microsoft</title><content type='html'>&lt;p&gt;A great &lt;a href="http://download.microsoft.com/download/f/0/8/f0830f07-44db-4eea-ace3-8865856c8d65/ScottGuOnMVCatALTNET.wmv"&gt;presentation from ScottGu on an upcoming Microsoft MVC framework&lt;/a&gt;. Well worth a look! I will certainly be trying it out as soon as an initial release is available.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37223313-9001801128800449854?l=drew-walker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drew-walker.blogspot.com/feeds/9001801128800449854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://drew-walker.blogspot.com/2007/11/mvc-framework-from-microsoft-great.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/9001801128800449854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/9001801128800449854'/><link rel='alternate' type='text/html' href='http://drew-walker.blogspot.com/2007/11/mvc-framework-from-microsoft-great.html' title='MVC Framework from Microsoft'/><author><name>Drew Walker</name><uri>http://www.blogger.com/profile/10640423467887962246</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-37223313.post-8450687076369170915</id><published>2007-08-21T13:35:00.001+10:00</published><updated>2008-05-06T11:55:41.423+10:00</updated><title type='text'>First Impressions of Windows Home Server</title><content type='html'>&lt;p&gt;I've been meaning to post my first impressions since it was announced that &lt;strong&gt;&lt;a href="http://blogs.technet.com/homeserver/archive/2007/07/16/ship-it.aspx"&gt;Windows Home Server has been released to manufacturing&lt;/a&gt;&lt;/strong&gt;, and I finally managed to get a spare 15 minutes.&lt;/p&gt;&lt;p&gt;I ran the "new" operating system in a virtual machine on a run of the mill Dell laptop with 512mb RAM allocated to the guest OS and was surprised to find that the performance was adequate to play around with. The first thing that I noticed was that it's simple. Actually, REALLY simple! It's clear that the main focus of this OS was to allow users to have access to some of the nice features of commercial servers without needing an IT degree.&lt;/p&gt;&lt;p&gt;The main areas I ended up playing around with were:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Automated backups of network PCs&lt;/li&gt;&lt;li&gt;Network security&lt;/li&gt;&lt;li&gt;File/media sharing, and&lt;/li&gt;&lt;li&gt;Remote access to your home network&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;I was very pleased to find out that all these features were very simple to set up. The only one that required a little digging around was to enable the remote access to the network. I imagine this would not be used by most people, but it is by far my favourite feature of Home Server. Once I set it up correctly I was able to remote desktop into any PC on my network through a browser from any location. The setup also included the creation of a free subdomain that I could use to browse to.&lt;/p&gt;&lt;p&gt;Once I got everything up and running Home Server ran very smoothly and worked brilliantly with the Vista machines I have running. Overall, I think this is a great product for home users looking to setup a simple home network and for the more advanced user who wants to extend the reach of their home network without having to learn the more difficult server products that Microsoft offers.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37223313-8450687076369170915?l=drew-walker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drew-walker.blogspot.com/feeds/8450687076369170915/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://drew-walker.blogspot.com/2007/08/first-impressions-of-windows-home.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/8450687076369170915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/8450687076369170915'/><link rel='alternate' type='text/html' href='http://drew-walker.blogspot.com/2007/08/first-impressions-of-windows-home.html' title='First Impressions of Windows Home Server'/><author><name>Drew Walker</name><uri>http://www.blogger.com/profile/10640423467887962246</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-37223313.post-4947141761525181761</id><published>2006-12-11T13:22:00.001+11:00</published><updated>2008-05-06T11:56:12.004+10:00</updated><title type='text'>IIS7 returns a 404 error</title><content type='html'>&lt;span style="font-family:Verdana;"&gt;&lt;strong&gt;Summary/Quick Fix:&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;Make sure that the feature of IIS you require (e.g - ASP.NET for .aspx, ASP for .asp) is installed. You can check this under add/remove windows features.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;strong&gt;More Information:&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;The development team at work has recently started using Vista and a common problem that has come up is that IIS7 returns "HTTP Error 404.3 - Not Found" when trying to access .aspx (ASP.NET) files on the local machine.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;In most cases, the reason for receiving this error will be that IIS is missing a piece of functionality that is required to serve the page. By default, IIS comes with a very limited set of features (the is deliberate, and highlights the extensibility of the new architecture). However, this means that ASP.NET and ASP are not installed by default. You can fix this by highlighting the features you require under add/remove windows features. For .aspx files you will need to make sure ASP.NET is installed. For .asp files, it's just plain old ASP. If this doesn't fix your problem, then I suggest you start reading the lengthy causes and resolutions provided by the built-in .NET error page. :)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37223313-4947141761525181761?l=drew-walker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drew-walker.blogspot.com/feeds/4947141761525181761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://drew-walker.blogspot.com/2006/12/iis7-returns-404-error-summaryquick-fix.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/4947141761525181761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/4947141761525181761'/><link rel='alternate' type='text/html' href='http://drew-walker.blogspot.com/2006/12/iis7-returns-404-error-summaryquick-fix.html' title='IIS7 returns a 404 error'/><author><name>Drew Walker</name><uri>http://www.blogger.com/profile/10640423467887962246</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-37223313.post-797484297711158169</id><published>2006-11-12T20:34:00.001+11:00</published><updated>2008-11-27T15:44:06.189+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web.config'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='IHttpHandler'/><category scheme='http://www.blogger.com/atom/ns#' term='ashx'/><category scheme='http://www.blogger.com/atom/ns#' term='handler'/><title type='text'>Adding custom handlers to the web.config</title><content type='html'>&lt;strong&gt;&lt;/strong&gt;Okay, some background information: I was sick of cutting hundreds of images out of photoshop files for headings, so I created a handler (.ashx) that generated the headings on-the-fly (with caching of course). That was working nicely, but what I was starting to get frustrated about was the need to include the file in the structure of the website (it just didn't seem right). So, I came up with an alternate solution. Here's what needed to be done:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step 1&lt;/strong&gt;&lt;br /&gt;Create a new class that inherits from &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.ihttphandler.aspx"&gt;&lt;em&gt;IHttpHandler&lt;/em&gt;&lt;/a&gt;. In my example, I named the class &lt;em&gt;DynamicImageHandler&lt;/em&gt; and placed it in the namespace &lt;em&gt;DrewWalker.Web.Handlers&lt;/em&gt;. The logic behind the naming was to follow Microsoft's conventions for System.Web.Handlers.TraceHandler, as I was aiming to echo the functionality of Trace.axd (you'll see what I mean).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step 2&lt;/strong&gt;&lt;br /&gt;Move the code from the .ashx to the new class (straightforward).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step 3&lt;/strong&gt;&lt;br /&gt;Register the handler in the &lt;em&gt;httpHandlers&lt;/em&gt; configuration section of the web.config. Here is an example:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;lt;system.web&amp;gt;&lt;br /&gt;&amp;lt;httphandlers&amp;gt;&lt;br /&gt;&amp;lt;add type="DrewWalker.Web.Handlers.DynamicImageHandler" path="DynamicImage.axd" verb="*"&amp;gt;&lt;br /&gt;&amp;lt;/httphandlers&amp;gt;&lt;br /&gt;&amp;lt;/system.web&amp;gt;&lt;br /&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Voila! Once you compile you will be able to reference your handler as though it were a file sitting in the structure of your website. So in my case I can now browse to http://localhost/DynamicImage.axd?Text=Hello%20World and see a nice jpeg with &lt;em&gt;Hello World&lt;/em&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37223313-797484297711158169?l=drew-walker.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drew-walker.blogspot.com/feeds/797484297711158169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://drew-walker.blogspot.com/2006/11/okay-some-background-information-i-was.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/797484297711158169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37223313/posts/default/797484297711158169'/><link rel='alternate' type='text/html' href='http://drew-walker.blogspot.com/2006/11/okay-some-background-information-i-was.html' title='Adding custom handlers to the web.config'/><author><name>Drew Walker</name><uri>http://www.blogger.com/profile/10640423467887962246</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></feed>
