<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Josh Holmes &#187; Web Dev</title>
	<atom:link href="http://www.joshholmes.com/blog/category/web-dev/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.joshholmes.com/blog</link>
	<description>Random thoughts from a turbo nerd...</description>
	<lastBuildDate>Thu, 11 Apr 2013 15:51:31 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Is that a Rich Web in Your Pocket?</title>
		<link>http://www.joshholmes.com/blog/2011/07/01/is-that-a-rich-web-in-your-pocket/</link>
		<comments>http://www.joshholmes.com/blog/2011/07/01/is-that-a-rich-web-in-your-pocket/#comments</comments>
		<pubDate>Fri, 01 Jul 2011 14:34:08 +0000</pubDate>
		<dc:creator>joshholmes</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Speaking]]></category>
		<category><![CDATA[Web Dev]]></category>

		<guid isPermaLink="false">http://www.joshholmes.com/blog/2011/07/01/is-that-a-rich-web-in-your-pocket/</guid>
		<description><![CDATA[I had a fantastic opportunity recently as I was asked to speak at the Google Tech User Group on HTML5. Eoin Bailey, co-founder of Hit the Road and one of the founders of the Dublin GTUG, invited me to speak on HTML5 with some of their other speakers to give a full out HTML5 day at the Dublin GTUG. I couldn’t pass up the opportunity to speak at Google so [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.joshholmes.com/blog/wp-content/uploads/Is-that-a-Rich-Web-in-Your-Pocket_9A86/clip_image002.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 5px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image002" border="0" alt="clip_image002" align="left" src="http://www.joshholmes.com/blog/wp-content/uploads/Is-that-a-Rich-Web-in-Your-Pocket_9A86/clip_image002_thumb.jpg" width="244" height="184" /></a>I had a fantastic opportunity recently as I was asked to speak at the Google Tech User Group on HTML5. <a href="http://www.eoinbailey.com/">Eoin Bailey</a>, co-founder of <a href="http://www.hittheroad.ie/">Hit the Road</a> and one of the founders of the Dublin GTUG, invited me to speak on HTML5 with some of their other speakers to give a full out HTML5 day at the Dublin GTUG. I couldn’t pass up the opportunity to speak at Google so I rearranged my schedule to make sure that I could make it. <img src='http://www.joshholmes.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>&#160;</p>
<p>The schedule was as follows. </p>
<p>1. <a href="http://fhtr.org/">Ilmari Heikkinen</a>, &quot;Sprucing up your pictures with HTML5&quot; &#8211; Ilmari will cover some HTML5 basics &#8211; the enhancements that it provides over previous web standards and will focus on how image and video filters can be used, demonstrating some examples. </p>
<p>2. <a href="http://neilturner.com/">Neil Turner</a>, &quot;Lessons learned with HTML5&quot; &#8211; Neil has built some web applications based on HTML5 and will talk about his experience doing this, including browser support issues, compatibility, responsive web design and performance. </p>
<p>3. <a href="http://www.joshholmes.com/">Josh Holmes</a>, “Is that a Rich Web in Your Pocket?” &#8211; A fast moving trend is building for mobile with HTML5. In this talk, Josh Holmes will show what can be accomplished with a mobile browser app and talk about the design considerations for that form factor.</p>
<p>I borrowed some of the slides from Joe Marini’s MIX talk on Mobile and put my very demo heavy spin on it. My slides are at <a href="http://www.slideshare.net/joshholmes/is-that-a-rich-web-in-your-pocket">http://www.slideshare.net/joshholmes/is-that-a-rich-web-in-your-pocket</a>. </p>
<div style="width: 425px" id="__ss_8466425"><strong style="margin: 12px 0px 4px; display: block"><a title="Is that a Rich Web in Your Pocket?" href="http://www.slideshare.net/joshholmes/is-that-a-rich-web-in-your-pocket" target="_blank">Is that a Rich Web in Your Pocket?</a></strong> <iframe height="355" marginheight="0" src="http://www.slideshare.net/slideshow/embed_code/8466425" frameborder="0" width="425" marginwidth="0" scrolling="no"></iframe>
<div style="padding-bottom: 12px; padding-left: 0px; padding-right: 0px; padding-top: 5px">View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/joshholmes" target="_blank">Josh Holmes</a> </div>
</p></div>
<p><a href="http://www.joshholmes.com/blog/wp-content/uploads/Is-that-a-Rich-Web-in-Your-Pocket_9A86/Slide1.png"><img style="background-image: none; border-right-width: 0px; margin: 5px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Slide1" border="0" alt="Slide1" align="left" src="http://www.joshholmes.com/blog/wp-content/uploads/Is-that-a-Rich-Web-in-Your-Pocket_9A86/Slide1_thumb.png" width="244" height="139" /></a>I’ve been passionate about mobile and mobile web for quite some time. I’ve been doing on device mobile development for the better part of 10 years now starting back with CE 4 in January 2002. It’s amazing to me, however, how far the mobile industry has come in that time period. It’s been a fast and furious but fun ride in that time&#8230;</p>
<p><a href="http://www.joshholmes.com/blog/wp-content/uploads/Is-that-a-Rich-Web-in-Your-Pocket_9A86/Slide2.png"><img style="background-image: none; border-right-width: 0px; margin: 5px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Slide2" border="0" alt="Slide2" align="left" src="http://www.joshholmes.com/blog/wp-content/uploads/Is-that-a-Rich-Web-in-Your-Pocket_9A86/Slide2_thumb.png" width="244" height="139" /></a>Do you remember the pain of trying to develop on for the text based browser? Remember&#160; when WAP (Wireless Applications Protocol) development was all the rage? It seems soooo long ago at this point and so old school. In actuality, the WAP forum who were the main drivers of WAP was actually consolidated in 2002. And I remember when it was such a huge deal that the ASP.NET Mobile Toolkit could produce WAP compliant mark-up which meant that I didn’t have to&#8230;</p>
<p><a href="http://www.joshholmes.com/blog/wp-content/uploads/Is-that-a-Rich-Web-in-Your-Pocket_9A86/Slide3.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 5px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="Slide3" border="0" alt="Slide3" align="left" src="http://www.joshholmes.com/blog/wp-content/uploads/Is-that-a-Rich-Web-in-Your-Pocket_9A86/Slide3_thumb.png" width="244" height="139" /></a></p>
<p>But the mobile web development space has exploded. Smartphones these days, including the Windows Phone, are capable of running some amazing things. To demonstrate I showed <a href="http://ie.microsoft.com/testdrive/mobile/Performance/HamsterDanceRevolution/Default.html">HamsterDance Revolution</a> which uses javascript, CSS3, the audio tag and more with some serious performance on a Mango device. Next I showed the FishIE Tank and the Speed Reading in rapid succession and then moved over to the Mango emulator for my demos. </p>
<p><a href="http://www.joshholmes.com/blog/wp-content/uploads/Is-that-a-Rich-Web-in-Your-Pocket_9A86/Slide4.png"><img style="background-image: none; border-right-width: 0px; margin: 5px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Slide4" border="0" alt="Slide4" align="left" src="http://www.joshholmes.com/blog/wp-content/uploads/Is-that-a-Rich-Web-in-Your-Pocket_9A86/Slide4_thumb.png" width="244" height="139" /></a>Phones these days have the potential to be much more than just a small computer in our pocket. Phones these days know what time it is (clock), where it is (geo-location), what the lighting is like (light sensor), if it’s moving (accelerometer), where it’s going (compass) and can even see (camera) and hear (mic). It’s amazing what they are capable of these days. With all of that knowledge of their surroundings, mobile apps and sites should be augmented by reality. They should geo-locate you to give you directions to the closest train stop (for instance) rather than you having to pick from a list. If the lighting is bad, they should go with a high contrast colour scheme. If it’s loud around you, they should not ask for voice input. If you’re moving, minimize text input. And so on. At the moment, the browser doesn’t have access to all of these sensors but I can’t imagine that that’s that far away. </p>
<p><a href="http://www.joshholmes.com/blog/wp-content/uploads/Is-that-a-Rich-Web-in-Your-Pocket_9A86/Slide5.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 5px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="Slide5" border="0" alt="Slide5" align="left" src="http://www.joshholmes.com/blog/wp-content/uploads/Is-that-a-Rich-Web-in-Your-Pocket_9A86/Slide5_thumb.png" width="244" height="139" /></a>In addition, the way that people use devices in a mobile context is vastly different than a desktop development. It’s more than just the screen size that matters here. People who are using mobile are on the go and need immediate information. As part of that, I showed the <a href="http://m.united.com">United Airlines</a> mobile site, <a href="http://m.facebook.com">Facebook</a>, <a href="http://m.twitter.com/joshholmes">Twitter</a> and the like. </p>
<p><a href="http://www.joshholmes.com/blog/wp-content/uploads/Is-that-a-Rich-Web-in-Your-Pocket_9A86/Slide6.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 5px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="Slide6" border="0" alt="Slide6" align="left" src="http://www.joshholmes.com/blog/wp-content/uploads/Is-that-a-Rich-Web-in-Your-Pocket_9A86/Slide6_thumb.png" width="244" height="139" /></a>When people are sitting at their desk, they are in a controlled, stable and (a lot of the time) comfortable environment. They are able to do sustained browsing and research. </p>
<p>When people are on the go, they need quick, &quot;glance-able” information that will give them the information that they need at the moment. For example, that could be directions to the venue that they are headed to or a phone number or any number of discrete bits of information that they need while on the go. </p>
<p><a href="http://www.joshholmes.com/blog/wp-content/uploads/Is-that-a-Rich-Web-in-Your-Pocket_9A86/Slide7.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 5px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="Slide7" border="0" alt="Slide7" align="left" src="http://www.joshholmes.com/blog/wp-content/uploads/Is-that-a-Rich-Web-in-Your-Pocket_9A86/Slide7_thumb.png" width="244" height="139" /></a>Then I moved on to talking about designing for the finger verses the stylus/mouse/keyboard. First of all, the finger is not as accurate as a stylus or mouse. If I turn my finger on it’s side and am very careful, my finger is still at least 40 pixels across and most of the time it’s closer to 80 pixels. And then there’s all of the sites that are so dependent on the mouse and/or keyboard. </p>
<p>As an example, I pulled up <a href="http://thekillersmusic.com/html5">http://thekillersmusic.com/html5</a> in IE9 and showed how fantastic of a site it is and then showed the same site rendering on Mango but talked about the fact that it’s too reliant on the mouseovers and the like to be useful in a mobile context. Same thing with Pacman in IE9 verses on a mobile device. While it renders and plays, it requires a keyboard for navigation. </p>
<p><a href="http://www.joshholmes.com/blog/wp-content/uploads/Is-that-a-Rich-Web-in-Your-Pocket_9A86/Slide8.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 5px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="Slide8" border="0" alt="Slide8" align="left" src="http://www.joshholmes.com/blog/wp-content/uploads/Is-that-a-Rich-Web-in-Your-Pocket_9A86/Slide8_thumb.png" width="244" height="139" /></a></p>
<p>Mobile sites need to be clean and crisp without a lot mixed fonts, colours and the like. Don’t overuse graphics, gradients and&#160; heavy background images as they can all effect download speed and/or view-ability in direct sunlight. Make sure that you’ve thought about the readability and the usage of whitespace. Obviously you don’t want to go nuts with the white space because you’ve got so little real estate to start with but a little bit of white space can make all the difference. </p>
<p><a href="http://www.joshholmes.com/blog/wp-content/uploads/Is-that-a-Rich-Web-in-Your-Pocket_9A86/Slide9.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 5px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="Slide9" border="0" alt="Slide9" align="left" src="http://www.joshholmes.com/blog/wp-content/uploads/Is-that-a-Rich-Web-in-Your-Pocket_9A86/Slide9_thumb.png" width="244" height="139" /></a></p>
<p>Work as hard for your user as you can. In other words, minimize the user’s input by providing intelligent defaults and picking up as much from the sensors as you can to make as many decisions as possible. Make sure that you store user’s previous inputs and where possible, use them to help streamline future engagement.s </p>
<p><a href="http://www.joshholmes.com/blog/wp-content/uploads/Is-that-a-Rich-Web-in-Your-Pocket_9A86/Slide10.png"><img style="background-image: none; border-right-width: 0px; margin: 5px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Slide10" border="0" alt="Slide10" align="left" src="http://www.joshholmes.com/blog/wp-content/uploads/Is-that-a-Rich-Web-in-Your-Pocket_9A86/Slide10_thumb.png" width="244" height="139" /></a>Lastly, think carefully about your mobile strategy. It can range from doing nothing to going hog wild with a mobile specific design. </p>
<p>One of the key things here is that you make a deliberate choice with regards to your mobile strategy because almost guaranteed you’ll have users browsing your site from their mobile devices. </p>
<ul>
<li>Do nothing</li>
<ul>
<li>No special content adaptation, result is the desktop site being delivered to the device. Sometimes, this is the right choice. It’s definitely the default choice and the easy one to go with. </li>
</ul>
<li>Basic Mobile Adaptation</li>
<ul>
<li>Content laid out so it will at least be consumable on a device, special META tags indicate that page is ready for mobile. This one is slightly more difficult to pull off as you have to make sure that your content works on both desktop and mobile.</li>
</ul>
<li>Multi-Serving Content</li>
<ul>
<li>Same page is sent to mobile and desktop, styled differently for each. This is not as hard as you’d think. You can accomplish this through the use of the @media tags to reformat the layout dependent on screen width and the like. </li>
</ul>
<li>Mobile Specific Design</li>
<ul>
<li>Parts of site are designed for mobile specifically, kept in separate domain or subfolder, redirected to when necessary. This is a high end strategy that requires a lot more work as you’re effectively building two different sites. On the other hand, it makes the mobile experience fantastic but doesn’t require you to compromise on the desktop experience. </li>
</ul>
</ul>
<p><a href="http://www.joshholmes.com/blog/wp-content/uploads/Is-that-a-Rich-Web-in-Your-Pocket_9A86/Slide12.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 5px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="Slide12" border="0" alt="Slide12" align="left" src="http://www.joshholmes.com/blog/wp-content/uploads/Is-that-a-Rich-Web-in-Your-Pocket_9A86/Slide12_thumb.png" width="244" height="139" /></a></p>
<p>The quick couple of take aways are that mobile web has evolved tremendously over the past handful of years. As a result you should really think about your mobile strategy and consider your mobile user’s context as part of that strategy. </p>
<p>Oh – and in my last moments I threw up <a href="http://ie6countdown.com">http://ie6countdown.com</a> to hopefully push out the last bits of IE6 around. <img src='http://www.joshholmes.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>This was a fun talk to give and I hope to expand on this talk and do a much richer version in the near future. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.joshholmes.com/blog/2011/07/01/is-that-a-rich-web-in-your-pocket/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>phpBB is in the Web Application Gallery</title>
		<link>http://www.joshholmes.com/blog/2010/05/07/phpbb-is-in-the-web-application-gallery/</link>
		<comments>http://www.joshholmes.com/blog/2010/05/07/phpbb-is-in-the-web-application-gallery/#comments</comments>
		<pubDate>Fri, 07 May 2010 16:25:07 +0000</pubDate>
		<dc:creator>joshholmes</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[Web Dev]]></category>
		<category><![CDATA[JumpIn Camp]]></category>
		<category><![CDATA[PHPBB]]></category>

		<guid isPermaLink="false">http://www.joshholmes.com/blog/2010/05/07/phpbb-is-in-the-web-application-gallery/</guid>
		<description><![CDATA[You might have seen me tweet about the fact that PHPBB had submitted to the Web Application Gallery a couple of weeks back. Well, it’s official – the phpBB package has been finished, tested and accepted into the Web Application Gallery. You can see the official announcement on the Microsoft Web Platform blog. That means that you can install phpBB on Windows through the Web Platform Installer (WebPI) which gives [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.joshholmes.com/blog/wp-content/uploads/2010/05/image.png"><img style="border-right-width: 0px; margin: 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" align="left" src="http://www.joshholmes.com/blog/wp-content/uploads/2010/05/image_thumb.png" width="174" height="97" /></a> You might have seen me tweet about the fact that <a href="http://www.phpbb.com/">PHPBB</a> had submitted to the <a href="http://www.microsoft.com/web/gallery">Web Application Gallery</a> a couple of weeks back. Well, it’s official – the phpBB package has been finished, tested and accepted into the Web Application Gallery. You can see the <a href="http://blogs.msdn.com/webplatform/archive/2010/05/07/announcing-phpbb-available-for-the-microsoft-web-platform.aspx">official announcement on the Microsoft Web Platform blog</a>. That means that you can install phpBB on Windows through the <a href="http://www.microsoft.com/web/gallery">Web Platform Installer (WebPI)</a> which gives you a very simple wizard to walk through. </p>
<p><a href="http://www.microsoft.com/web/gallery/phpBB.aspx">Try phpBB on the Microsoft Web Platform today</a>!</p>
<p>&#160;</p>
<p>The <a href="http://www.microsoft.com/web/gallery">WebPI</a> will take a look at the dependencies that the project has requested and pull those in as well. In the case of phpBB, this includes PHP 5.2.13 (and higher when the WebPI supports it), SQL Server (Yes, I said SQL Server!) and more. It will configure IIS for FastCGI support and the whole nine yards. </p>
<p>The work to accomplish all of this awesome support was done at <a href="http://www.jumpincamp.com/">JumpIn Camp</a> by <a href="http://www.naderman.de/">Nils Aderman</a>, <a href="http://www.cs278.org/">Chris Smith</a> and <a href="http://user.cs.tu-berlin.de/~hsudhof/">Henry Sudhof</a> of the phpBB core team. I’ll be talking a lot more about <a href="http://www.jumpincamp.com/">JumpIn Camp</a> over the next couple of weeks but in short, <a href="http://www.jumpincamp.com/">JumpIn Camp</a> was an event that I helped organize, along with Yuriy Zaytsev, <a href="http://twitter.com/will_coleman">Will Coleman</a> and <a href="http://blogs.msdn.com/bramveen/">Bram Veenhof</a> in Zurich, Switzerland. There were contributors from a number of the top PHP applications in the world that attended for the opportunity to work on their own projects to support various Microsoft technologies (such as IIS, WebPI, SQL Server, SQL Azure, Silverlight…) with Microsoft technology experts available for technical support. </p>
<p>The SQL Server patch was developed by Microsoft in line with our interoperability efforts in the open source community. The new SQL Server for PHP 1.1 driver that was released back in October, 2009 enables phpBB with UTF-8 on SQL Server, Multiple Active Record Sets (MARS) and the ability to leverage SQL Azure. phpBB has accepted that patch now in their 3.0.7 release. </p>
<p>There are a couple more things that are exciting about all of this to me. </p>
<p>First, it only took a handful of days at <a href="http://www.jumpincamp.com/">JumpIn Camp</a> to pull together the <a href="http://www.microsoft.com/web/gallery">WebPI</a> package + WinCache support for superior performance on Windows. For full disclosure there was some testing and a few minor bugs fixed since then but the lions share of the work was done at <a href="http://www.jumpincamp.com/">JumpIn Camp</a>. </p>
<p>Second, phpBB is the first of the PHP application that can be installed through the WebPI with SQL Server support. I’m hoping that it will become the trend now that the <a href="http://blogs.msdn.com/sqlphp/archive/2010/04/19/sql-server-driver-for-php-2-0-ctp-adds-php-s-pdo-style-data-access-for-sql-server.aspx">SQL Server Driver for PHP 2.0 CTP with PDO</a> is in CTP and people can start playing with it. I know that there are several applications that are starting testing with the new driver. </p>
<p>Third, it was a ton of fun to get to know the folks from phpBB and all of the folks that attended <a href="http://www.jumpincamp.com/">JumpIn Camp</a>. I’ve been chatting with <a href="http://www.naderman.de/">Nils</a> online for about 6-9 months now but this was the first time that I had met him in person. </p>
<p>Wrapping up – I’m looking forward to seeing a lot more of the work that came out of the JumpIn Camp wrapping up and going public over the next handful of months. It’s going to be a fun time. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.joshholmes.com/blog/2010/05/07/phpbb-is-in-the-web-application-gallery/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>PHP On Azure Resources</title>
		<link>http://www.joshholmes.com/blog/2010/04/07/php-on-azure-resources/</link>
		<comments>http://www.joshholmes.com/blog/2010/04/07/php-on-azure-resources/#comments</comments>
		<pubDate>Wed, 07 Apr 2010 23:24:48 +0000</pubDate>
		<dc:creator>joshholmes</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web Dev]]></category>
		<category><![CDATA[JumpIn Camp]]></category>

		<guid isPermaLink="false">http://www.joshholmes.com/blog/2010/04/07/php-on-azure-resources/</guid>
		<description><![CDATA[I’m at JumpIn Camp in Zurich and we’ve been diving deep into PHP on Azure. One of the things that we’ve done is talk about a ton of resources that are available out there on the web to learn more about PHP on Azure. To that end, I thought I’d collect a few of them here on my blog. In the morning, I talked at a high level about what [...]]]></description>
				<content:encoded><![CDATA[<p>I’m at <a href="http://www.jumpincamp.com">JumpIn Camp</a> in Zurich and we’ve been diving deep into PHP on Azure. One of the things that we’ve done is talk about a ton of resources that are available out there on the web to learn more about PHP on Azure. To that end, I thought I’d collect a few of them here on my blog. </p>
<p>In the morning, I talked at a high level about what Azure is, how the various roles work and how to run PHP on Azure. My deck that I used was the first half of the same deck that I used on the <a href="http://www.joshholmes.com/blog/2010/03/31/php-on-azure-world-tour/">PHP On Azure World Tour</a>. </p>
<div style="width: 425px" id="__ss_3342103"><strong style="margin: 12px 0px 4px; display: block"><a title="Scaling Big While Sleeping Well" href="http://www.slideshare.net/joshholmes/scaling-big-while-sleeping-well">Scaling Big While Sleeping Well</a></strong><object width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=scalingbigwhilesleepingwell-100305045218-phpapp01&amp;stripped_title=scaling-big-while-sleeping-well" /><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=scalingbigwhilesleepingwell-100305045218-phpapp01&amp;stripped_title=scaling-big-while-sleeping-well" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding-bottom: 12px; padding-left: 0px; padding-right: 0px; padding-top: 5px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/joshholmes">Josh Holmes</a>.</div>
</p></div>
<p>Another great starting point and set of resources is <a href="http://blog.maartenballiauw.be">Maarten Balliauw’s Blog</a> itself. He’s been helping out here at <a href="http://www.jumpincamp.com">JumpIn Camp</a> from a technical perspective on Azure and running PHP on Windows in the first place. He did the next part of the session diving deep into the <a href="http://phpazure.codeplex.com/">PHP on Azure SDK</a>. </p>
<p>You’ll notice some overlap between our desk because we’re largely talking about the same SDK and leveraging the same code examples. </p>
<p>Maarten’s first deck that he used to talk about Blog, Queue and Table storage is:</p>
<div style="width: 425px" id="__ss_3263396"><strong style="margin: 12px 0px 4px; display: block"><a title="Running PHP In The Cloud" href="http://www.slideshare.net/maartenba/running-php-in-the-cloud">Running PHP In The Cloud</a></strong><object width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=runningphpinthecloud-100224041543-phpapp02&amp;stripped_title=running-php-in-the-cloud" /><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=runningphpinthecloud-100224041543-phpapp02&amp;stripped_title=running-php-in-the-cloud" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding-bottom: 12px; padding-left: 0px; padding-right: 0px; padding-top: 5px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/maartenba">Maarten Balliauw</a>.</div>
</p></div>
<p>The second one that Maarten used to talk about SQL Azure is:</p>
<div style="width: 425px" id="__ss_3656575"><strong style="margin: 12px 0px 4px; display: block"><a title="Windows Azure Storage &amp; Sql Azure" href="http://www.slideshare.net/maartenba/windows-azure-storage-sql-azure">Windows Azure Storage &amp; Sql Azure</a></strong><object width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=windowsazurestorage-sqlazure-100407084100-phpapp02&amp;stripped_title=windows-azure-storage-sql-azure" /><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=windowsazurestorage-sqlazure-100407084100-phpapp02&amp;stripped_title=windows-azure-storage-sql-azure" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding-bottom: 12px; padding-left: 0px; padding-right: 0px; padding-top: 5px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/maartenba">Maarten Balliauw</a>.</div>
</p></div>
<p>Maarten also did a demo of an app called ImageCloud leverages both a Web and Worker role to do front end uploading of an image and backend processing of that image. That code can be found at <a href="http://blog.maartenballiauw.be/file.axd?file=2010%2f2%2fImageCloud.rar">ImageCloud Azure Demo Application</a>.</p>
<p>For some great resources on architecture guidance, take a look at <a href="http://wag.codeplex.com/">Windows Azure Architecture Guidance</a>. This is put out by the Patterns and Practices group at Microsoft. </p>
<p>&#160;</p>
<p>Another great resource is <a href="http://azurescope.cloudapp.net/">Benchmarking and Guidance for Windows Azure</a>. This was created and launched by the Extreme Computing Group (aka XCG). </p>
<p>&#160;</p>
<p>More resources:</p>
<p><a href="http://www.microsoft.com/windowsazure/interop">Microsoft Windows Azure Interop</a></p>
<p><a href="http://www.interoperabilitybridges.com/ ">Microsoft Interop Bridges</a></p>
<p><a href="http://www.windowsazure4e.org ">Windows Azure 4 Eclipse</a></p>
<p><a href="http://phpazure.codeplex.com/">PHP Azure SDK</a></p>
<p><a href="http://code.msdn.microsoft.com/winazuremysqlphp">Windows Azure MySQL PHP Solution Accelerator</a></p>
<p>&#160;</p>
<p>I’ll be adding to these resources over the course of the week so check back for lots more.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joshholmes.com/blog/2010/04/07/php-on-azure-resources/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Making PHP faster on IIS</title>
		<link>http://www.joshholmes.com/blog/2010/04/06/making-php-faster-on-iis/</link>
		<comments>http://www.joshholmes.com/blog/2010/04/06/making-php-faster-on-iis/#comments</comments>
		<pubDate>Tue, 06 Apr 2010 16:22:57 +0000</pubDate>
		<dc:creator>joshholmes</dc:creator>
				<category><![CDATA[IIS]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web Dev]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Webcast]]></category>

		<guid isPermaLink="false">http://www.joshholmes.com/blog/2010/04/06/making-php-faster-on-iis/</guid>
		<description><![CDATA[I’ve been doing quite a bit of work with PHP on the Microsoft stack recently. That includes my work with PHP on Azure and moving my blog to WordPress. I’ll be honest though and say that I’m simply standing on the shoulders of giants. The PHP on IIS team, including Ruslan Yakushev, the Web Application Gallery team, including Faith Allington, Crystal Hoyer and Mai-lan Tomsen Bukovec (all three of whom [...]]]></description>
				<content:encoded><![CDATA[<p>I’ve been doing quite a bit of work with PHP on the Microsoft stack recently. That includes my work with <a href="http://www.joshholmes.com/blog/2010/02/10/helloworldazureinphp/">PHP on Azure</a> and moving my blog to WordPress. I’ll be honest though and say that I’m simply standing on the shoulders of giants. The <a href="http://php.iis.net/">PHP on IIS</a> team, including <a href="http://ruslany.net">Ruslan Yakushev</a>, the <a href="http://www.microsoft.com/web/gallery">Web Application Gallery</a> team, including <a href="http://blogs.technet.com/tnspot/archive/2008/01/24/technet-spotlight-on-demand-video-faith-allington-deploying-and-managing-web-farms-on-microsoft-internet-information-services-iis-7.aspx">Faith Allington</a>, Crystal Hoyer and Mai-lan Tomsen Bukovec (all three of whom I wish would start blogging), the <a href="http://www.microsoft.com/web">Microsoft Web</a> marketing team (who happen to be extremely technical and are a credit to marketers everywhere), including <a href="http://blogs.msdn.com/markbrown">Mark Brown</a>, the <a href="http://port25.technet.com">Microsoft Open Source Technology Center (OSTC)</a>. </p>
<p>An example of this is that when I spoke at <a href="http://www.joshholmes.com/blog/2010/03/26/wordcampireland/">WordCamp Ireland</a>, I talked about the amazing improvements in FastCGI over the past few years, the Web Application Gallery and Web Platform Installer (WebPI), URL Redirect, WinCache and many other things that Microsoft is doing to embrace open source technologies. My slides are below:</p>
<div style="width: 425px" id="__ss_3556481"><strong style="margin: 12px 0px 4px; display: block"><a title="Wordpress On Windows" href="http://www.slideshare.net/joshholmes/wordpress-on-windows">WordPress On Windows</a></strong><object width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=wordpressonwindows-100325170349-phpapp02&amp;stripped_title=wordpress-on-windows" /><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=wordpressonwindows-100325170349-phpapp02&amp;stripped_title=wordpress-on-windows" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding-bottom: 12px; padding-left: 0px; padding-right: 0px; padding-top: 5px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/joshholmes">Josh Holmes</a>.</div>
</p></div>
<p>Now you can hear about these improvements from <a href="http://ruslany.net">Ruslan Yakushev</a> and <a href="http://blogs.msdn.com/markbrown">Mark Brown</a> themselves talking about these improvements, specifically the ones related to performance, with the good folks over at <a href="http://www.phparch.com/">PHP Architect</a> on a webcast…</p>
<p>For all the details, check out the web cast at <a href="http://bit.ly/a9mRbi">Making PHP faster on IIS</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joshholmes.com/blog/2010/04/06/making-php-faster-on-iis/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PHP/Ruby on Azure World Tour</title>
		<link>http://www.joshholmes.com/blog/2010/02/11/phprubyonazureworldtour/</link>
		<comments>http://www.joshholmes.com/blog/2010/02/11/phprubyonazureworldtour/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 08:50:35 +0000</pubDate>
		<dc:creator>joshholmes</dc:creator>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[Conference]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[User Groups]]></category>
		<category><![CDATA[Web Dev]]></category>

		<guid isPermaLink="false">http://www.joshholmes.com/blog/2010/02/11/PHPRubyOnAzureWorldTour.aspx</guid>
		<description><![CDATA[I’m thrilled and honored to be doing another speaking tour through Europe. I’m getting to visit a number of countries that I haven’t visited before and some old favorites. I’ll be speaking on PHP, Ruby and other non .NET technologies on Azure. The talk that I’m going to be doing in most places is PHP/Ruby on Azure or Leveraging Azure with Non-Microsoft Languages: Windows Azure is Microsoft’s Cloud Computing offering. [...]]]></description>
				<content:encoded><![CDATA[<p>I’m thrilled and honored to be doing another speaking tour through Europe. I’m getting to visit a number of countries that I haven’t visited before and some old favorites. I’ll be speaking on PHP, Ruby and other non .NET technologies on Azure. </p>
<p><img style="display: block; float: none; margin-left: auto; margin-right: auto" src="http://farm1.static.flickr.com/23/26088970_16fb1769ac.jpg"></p>
<p>The talk that I’m going to be doing in most places is PHP/Ruby on Azure or Leveraging Azure with Non-Microsoft Languages:</p>
<blockquote><p>Windows Azure is Microsoft’s Cloud Computing offering. It is more than a simple scalable hosting option as it is truly a platform as a service offering. This allows you to focus on your application rather than the configuring and managing your infrastructure whether you are writing C# or VB.NET or even languages such as PHP or Ruby which are first class citizens in Windows Azure. The Windows Azure Platform includes Windows Azure, which is the OS and hosting environment for web and background services, as well as non-relational storage, queues, and a blob storage for everything from videos to mountable virtual drives. Additionally, the Windows Azure Platform includes SQL Azure, a fully relational database as a service, and Windows Azure AppFabric for industry standards compliant identity management and a service bus for message passing.
<p>But there remain the questions around why, when and how you should move to the cloud, especially if you are using PHP or Ruby. Should I put everything in Windows Azure? Do you have to convert everything you have to ASP.NET? Do you have to write code specifically for Windows Azure? What if my current applications depend on MySQL and/or memcached?
<p>There’s a lot of good news here as it is relatively straight forward to get running in Windows Azure. Once your application is running, however, now you need to look at how to fully leverage the platform offerings architecting for the best usage of the different roles and the various aspects of the Windows Azure offerings such as the AppFabric and SQL Azure. This will help your application make the most efficient usage of CPU, bandwidth, storage and all of the things that cost in a cloud hosting scenario.
<p>In this half day session, we will begin with the why of Windows Azure talking about when it makes sense to make a move and what the prudent migration paths are for your organization.&nbsp; During this time we will tour the various aspects of Windows Azure. Then we’ll delve into the technical aspects of how to run your PHP/Ruby code on Windows Azure. Once we have that mastered, we will move onto leveraging the Windows Azure platform to its fullest.</p>
</blockquote>
<p>The full schedule is as follows (and yes, this is a lot of countries in not very many days)</p>
<p>Feb. 21 &#8211; Dublin Ireland &#8211; <a title="http://bit.ly/phpazuredublin" href="http://bit.ly/phpazuredublin">http://bit.ly/phpazuredublin</a></p>
<blockquote><p>I love Ireland. I hope to someday live there. I spoke there about a year and a half ago on RIA and got to meet a few of the folk but mostly worked with <a href="http://blogs.msdn.com/martharotter/">Martha Rotter</a>. I got to make a number of friends last time and I’m really looking forward to seeing them again.&nbsp;&nbsp; </p>
</blockquote>
<p>Feb 23 – Lisbon, Portugal &#8211; <a title="http://bit.ly/phpazurelisbon" href="http://bit.ly/phpazurelisbon">http://bit.ly/phpazurelisbon</a>&nbsp;</p>
<blockquote><p>This is my first time to Portugal. I’m really looking forward to meeting the local DPE team (<a href="http://twitter.com/luismartins">Luis Alves Martins</a> and <a href="http://blogs.technet.com/sergio_martinho/default.aspx">Sergio Martinho</a>). I’m speaking at the university. it looks like a beautiful venue &#8211; <a href="http://bit.ly/avsYU9">http://bit.ly/avsYU9</a>. I just wish that I had more time here to explore the local culture. </p>
</blockquote>
<p>Feb 24 – Vienna, Austria &#8211; <a title="http://bit.ly/phpazurevienna" href="http://bit.ly/phpazurevienna">http://bit.ly/phpazurevienna</a>&nbsp;</p>
<blockquote><p>My brother has spent a lot of time in Austria but I’ve never been. I have met <a href="http://blogs.msdn.com/mszcool">Mario Szpuszta</a> back when he and I both spoke at <a href="http://jaoo.dk">JAOO</a> in 2008 in Denmark. That was an awesome conference. I’ll also get to met <a href="http://blogs.msdn.com/msdnat/">Rolf Mistelbacher</a>. Another thing I’m really excited about is that I’m going to spend enough time to actually see some of the city. </p>
</blockquote>
<p>Feb 26 – London, UK – Keynoting PHPUK &#8211; <a title="http://bit.ly/9l8IH0" href="http://bit.ly/9l8IH0">http://bit.ly/9l8IH0</a></p>
<blockquote><p>At PHP UK, I’m actually not talking about Azure. Rather I’m doing a keynote titled The <a href="http://bit.ly/artofsimplicity">Lost Art of Simplicity</a> (Full slides on <a href="http://bit.ly/artofsimplicity">slideshare</a>). This is actually the original reason that I’m coming to Europe in the first place. I’m honored to be asked to do the keynote and am beholden to <a href="http://twitter.com/scottmac">Scott MacVicar</a> for the invitation and to <a href="http://www.johannacherry.com/">Johanna Cherry</a> for making everything work smoothly. </p>
</blockquote>
<p>March 2 – Stockholm, Sweden &#8211; <a title="http://bit.ly/phpazurestockholm" href="http://bit.ly/phpazurestockholm">http://bit.ly/phpazurestockholm</a></p>
<blockquote><p>Check out this awesome venue &#8211; <a title="http://bit.ly/cGTbC0" href="http://bit.ly/cGTbC0">http://bit.ly/cGTbC0</a> – it’s a 17th century building in downtown Stockholm. Really looking forward to hanging out in this space. </p>
</blockquote>
<p>March 3 – Oslo, Norway – registration information coming soon</p>
<blockquote><p>I’ve never been to Norway. I should have more information about this trip in the next day or so and I’ll update this post. </p>
<p>**Update**</p>
<p>I’ve got all of the registration information for my Oslo stop.</p>
<p>Auditorium (ground floor)
<p>Lysaker Torg 45
<p>Lysaker Akershus 1366
<p>Norge
<p><a title="http://bit.ly/phpazureoslo" href="http://bit.ly/phpazureoslo">http://bit.ly/phpazureoslo</a> for all of the registration information.</p>
</blockquote>
<blockquote><p>Also, as a side note I’ve met a bunch of people from Norway while at the PHPUK conference and they’ve assured me that the polar plunge was decent training for my visit but I’d enjoy it regardless.</p>
</blockquote>
<p>March 4 – Amsterdam, The Netherlands – PHP User Group</p>
<blockquote><p>I haven’t actually met <a href="http://blogs.msdn.com/bramveen">Bram Veenhof</a> in person but&nbsp; have been working with him over the past couple of years on a couple of things.I’ve been to Amsterdam several times but mostly just to the Airport and the Microsoft offices there, both of which are awesome. I’m thrilled this time to actually have a little time to explore the city. </p>
</blockquote>
<p>March 5 – Brussels, Belgium &#8211; <a title="http://bit.ly/phpazurebrussells" href="http://bit.ly/phpazurebrussells">http://bit.ly/phpazurebrussells</a></p>
<blockquote><p>I’ve been to Brussels once before and I’m really looking forward to going back. I’ve not get <a href="http://blogs.msdn.com/katriend/default.aspx">Katrien De Graeve</a> and Rudy Van Hoe but are two of the other people that I’ve been working with closely over the past couple of years. </p>
</blockquote>
<p>March 6,7 – Kilkenny, Ireland – hanging out and speaking at Wordcamp Ireland</p>
<blockquote><p>Again, I love Ireland and hope to live there someday. I’ll be in Kilkenny at <a title="Wordcamp Ireland" href="http://bit.ly/b44UWZ">Wordcamp Ireland</a>. </p>
</blockquote>
<p>It’s going to be a lot of fun and I’m really hoping that there’s lots of good conversation. Please let me know via comments or via twitter if you’re able to make it to one of the sessions. </p>
<p>If you tweet about this – please use the hash tag #phpazuretour and #cityyourecomingto!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joshholmes.com/blog/2010/02/11/phprubyonazureworldtour/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Above the Fold and how It Really Should be Used</title>
		<link>http://www.joshholmes.com/blog/2009/10/09/abovethefoldandhowitreallyshouldbeused/</link>
		<comments>http://www.joshholmes.com/blog/2009/10/09/abovethefoldandhowitreallyshouldbeused/#comments</comments>
		<pubDate>Fri, 09 Oct 2009 02:50:19 +0000</pubDate>
		<dc:creator>joshholmes</dc:creator>
				<category><![CDATA[UX]]></category>
		<category><![CDATA[Web Dev]]></category>

		<guid isPermaLink="false">http://www.joshholmes.com/blog/2009/10/09/AboveTheFoldAndHowItReallyShouldBeUsed.aspx</guid>
		<description><![CDATA[I’ve come to realize that many web designers don’t understand what “Above the Fold” and how it really should be used. Above the Fold is an old print newspaper layout term for what’s on the top part of the page, the part that is displayed in the window at the newspaper stand. In web design, the term is used for the bits that the user can see without having to [...]]]></description>
				<content:encoded><![CDATA[<p><a title="Chicago 080" href="http://www.flickr.com/photos/87487802@N00/305909364/"><img style="margin: 5px; display: inline" class="flickr" border="0" hspace="5" alt="Chicago 080" vspace="5" align="left" src="http://static.flickr.com/121/305909364_ef7b862b55_m.jpg"></a>I’ve come to realize that many web designers don’t understand what “Above the Fold” and how it really should be used. Above the Fold is an old print newspaper layout term for what’s on the top part of the page, the part that is displayed in the window at the newspaper stand. In web design, the term is used for the bits that the user can see without having to scroll. I’ve talked and ranted about this before as It’s point number 23 in <a href="http://www.slideshare.net/joshholmes/32-ways-to-keep-your-blog-from-sucking">32 ways to keep your blog from sucking</a>…</p>
<p>&lt;update&gt;It was <a href="http://twitter.com/richie_p/statuses/4742012403">brought to my attention</a> that it’s often not a web designer but rather an Information Architect or a Developer who is updating the layout on the page. Completely agreed and this is yet another reason that you should look for competent web designers for the layout and design of your page.&lt;/update&gt;</p>
<p>What’s bringing it up now is that <a href="http://www.cxpartners.co.uk">CX Partners</a> recently blogged about <a href="http://www.cxpartners.co.uk/cxblog/the_myth_of_the_page_fold_evidence_from_user_testing/">The myth of the page fold: evidence from user testing | cxpartners</a> and it concerned me a little. <a href="http://www.cxpartners.co.uk">CX Partners</a> does a lot of user testing and one of the things that they have tested for is whether or not the “Fold” mattered to users and out of 800 users, only 3 were unable to find content because they would have to scroll to find it. They are right, users are used to scrolling and are willing to do so if they know that there’s more content below. We just need to give them visual hints that there is more content that they will have to scroll to see. What they are trying to fight is the urge to put all of the content or at least all of the <strong>*important*</strong> content Above the Fold and design pages so that users do have to scroll. I’m on board with that fight. Cramming all of the content into cramped margins and smashing things together just so that it can be seen without scrolling is horrible design. </p>
<p>Here’s the part that concerns me as an old school print layout guy. There’s a fundamental miss on what the “Above the Fold” content is supposed to be used for in your layout whether it’s print or web design. </p>
<h3>How does print layout treat above the fold?</h3>
<p>The above the fold content is not meant to be the meat of the content or really even the most important content. It’s meant to be eye catching. It’s the lure for people to pick up the paper or magazine. </p>
<p><a title="100th Anniversary of the Seattle P-I Newspaper" href="http://www.flickr.com/photos/49233110@N00/3511599262/"><img style="margin: 5px" class="flickr" border="0" hspace="5" alt="100th Anniversary of the Seattle P-I Newspaper" vspace="5" align="right" src="http://static.flickr.com/3382/3511599262_b040b36422_m.jpg"></a>When thinking about the fold in a newspaper, think about the old school newspaper dispenser with the top half of the top page displayed in the little window. There is a deliberate attempt to put a catchy photo and headline in that window so people buy the paper. Is that the best thing in the paper, not even close. That’s the picture that’s going to look good on someone’s coffee table when they toss down the newspaper. </p>
<p><a title="New York 1st day. magazine stands" href="http://www.flickr.com/photos/24672979@N00/365878605/"><img style="margin: 5px; display: inline" class="flickr" border="0" hspace="5" alt="New York 1st day. magazine stands" vspace="5" align="left" src="http://static.flickr.com/170/365878605_c707017c5d_m.jpg"></a>Or better, think about the magazine stand and how there are potentially hundreds of magazines there and you need for yours to stand out enough that people will buy it. Think this through – what can they see in the magazine stand? Typically they can see the top edge of the magazine and part of the picture. I was amazed once when I was talking to a freelance sports photographer who told me that he’d net $40k-$60k for one photo if he could land the cover picture on Sports Illustrated. But it makes a ton of sense. This concept of trying to stand out on just a headline and a photo is not lost on the smart people at Sports Illustrated. The right picture could make far more than $40k worth of a difference on the stand. </p>
<h3>How does this apply to web design?</h3>
<p>Honestly, it’s the same exact concept. The fold or scroll line is the area of the page that people can see without having to scroll down the page. This area needs to catch people’s attention correctly because they may only be on your page for a few seconds. If you look at the statistics on any site that gets a decent amount of traffic and the average page view length is measured in seconds, not minutes. </p>
<p>When people are browsing through and they get a link from another site or from a search engine, what’s the first thing that they see? Imagine that as if they are glancing past your page among the potentially hundreds of others that they are looking past which is really not that much of a stretch because they are looking to see which pages are more likely to fit their needs than others. They may not be paying for your content but they are investing their time.</p>
<p>The problems come in two sizes. First, there are designs that try to shove as much content as they can into that above the fold area because there’s an assumption that if it’s not there, their users won’t see it. Second, there are other designs that completely shun the idea of scrolling and end up with these horrid wizard style pages where the user has to click through to see the next page and the next page and so on. Either of these are poor choices. </p>
<p>Back to the article for a moment &#8211; I really liked <a href="http://www.cxpartners.co.uk">CX Partners</a>’s <a href="http://www.cxpartners.co.uk/thoughts/the_myth_of_the_page_fold_evidence_from_user_testing.htm">“Design tips to encourage scrolling”</a>. What was missing is the “How to hook them and keep them” bit. </p>
<p>Let’s look at <a href="http://jeffblankenburg.com">Jeff Blankenburg</a>’s blog for a good reference here. </p>
<p><a href="http://jeffblankenburg.com"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/AbovetheFoldandwhatitreallyMeans_815C/image_3.png" width="551" height="364"></a> </p>
<p>You know exactly what you are going to get on his page. The disk in the middle, which is what most people see first cycles through all of the social networks that he frequents. The tweets across the top express his last several publically blasted thoughts while the little bird that flies around them draws eyeballs to them. The menu shows you that he’s delivering Code and Slides through this blog in addition to other posts. The RSS tag that hangs down and swings a little definitely captures the attention and draws people to subscribe. Finally, the title of the blog and the first blog post start drawing eyes down the page to see the meat of the content. But what real content is above the fold on Jeff’s blog? Honestly, there’s none. All of the real content is below the fold so the user has to scroll for it. Going back to the <a href="http://www.cxpartners.co.uk">CX Partners</a> post, that’s fine. Users know how to and are willing to scroll for content if they find the page interesting. The <strong>*only*</strong> thing that I dislike about his header is that it’s a fairly large chunk that takes 3-5 seconds to load the first time. This is a killer if the use<br />
r is only on the page for 3 seconds.</p>
<p>Another great example is any Amazon product page. They have the picture of the product, average user rating and price right at the top. The product detail, related products, the actual reviews and all of the rest of the content is below the scroll line. Obviously, it’s successful for them. </p>
<h3>Wrapping up…</h3>
<p>Above the Fold is widely miss-understood. You need to realize that this critical section of the page is not about shoving as much content as you can the user. It’s about effectively giving the “Elevator” pitch on your site and getting that longer look that will likely involve scrolling down to see the real content. </p>
<p>Guard the above the fold content and keep it to the essential bits that will tell the user what your site is about rather than trying to give them everything in one big drink from the fire hose. Whenever anyone talks to you about moving a certain section of content above the fold, turn the question on them by asking them how that keeps people on the site over all. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.joshholmes.com/blog/2009/10/09/abovethefoldandhowitreallyshouldbeused/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Announcing the WebsiteSpark Program</title>
		<link>http://www.joshholmes.com/blog/2009/09/24/announcingthewebsitesparkprogram/</link>
		<comments>http://www.joshholmes.com/blog/2009/09/24/announcingthewebsitesparkprogram/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 16:11:55 +0000</pubDate>
		<dc:creator>joshholmes</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Web Dev]]></category>
		<category><![CDATA[WebsiteSpark]]></category>

		<guid isPermaLink="false">http://www.joshholmes.com/blog/2009/09/24/AnnouncingTheWebsiteSparkProgram.aspx</guid>
		<description><![CDATA[Building on the success of the DreamSpark and BizSpark program that we launched about 11 months ago Microsoft is now launching the WebsiteSpark program. WebsiteSpark is designed for small web consultancies ranging in size from 1 to 10 people. With WebsiteSpark, you get a package of software specifically selected for a web consultancy to serve their customers better. What does the program provide? WebSiteSpark provides software licenses that you can [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/AnnouncingtheWebsiteSparkProgram_82C9/image_2.png"><img style="border-bottom: 0px; border-left: 0px; margin: 5px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/AnnouncingtheWebsiteSparkProgram_82C9/image_thumb.png" width="161" height="96"></a> Building on the success of the <a href="https://www.dreamspark.com/default.aspx">DreamSpark</a> and <a href="http://www.joshholmes.com/blog/2008/11/10/MicrosoftBizSpark.aspx">BizSpark</a> program that we launched about 11 months ago Microsoft is now launching the <a href="http://www.microsoft.com/web/websitespark">WebsiteSpark</a> program. </p>
<p><a href="http://www.microsoft.com/web/websitespark/">WebsiteSpark</a> is designed for small web consultancies ranging in size from 1 to 10 people. With <a href="http://www.microsoft.com/web/websitespark/">WebsiteSpark</a>, you get a package of software specifically selected for a web consultancy to serve their customers better.<br />
<h5>What does the program provide?</h5>
<p><a href="http://www.microsoft.com/web/websitespark/">WebSiteSpark</a> provides software licenses that you can use for three years at no cost.&nbsp; Once enrolled, you can download and immediately use the following software from Microsoft:
<ul>
<li>3 licenses of Visual Studio 2008 Professional Edition
<li>1 license of Expression Studio 3 (which includes Expression Blend, Sketchflow, and Web)
<li>2 licenses of Expression Web 3
<li>4 processor licenses of Windows Web Server 2008 R2
<li>4 processor licenses of SQL Server 2008 Web Edition
<li>DotNetPanel control panel (enabling easy remote/hosted management of your servers) </li>
</ul>
<p>The Windows Server and SQL Server licenses are for you to do both development and production work. Also, the production licenses can be leveraged in a couple of different ways. You can do 1 production server with 4 processors or 4 servers with 1 processor each. These servers can also be either dedicated hardware or virtualized offerings. If you want, you can throw the licenses on your own server with the “self-hosted” model or you can enroll with one of the hosters that have signed up as a Network Partner. As a Network Partner, they will pass the savings of the licenses on to you and only charge you for the infrastructure work. You can find all of the hosting network partners on the <a href="http://www.microsoft.com/web/websitespark/">WebsiteSpark</a> page.
<p>But this program is not just about software. As part of the <a href="http://www.microsoft.com/web/websitespark/">WebsiteSpark</a>, the people that enroll are entered into the <a href="https://partner.microsoft.com/US/30000104?ID=90894078">Microsoft Partner Program</a> and into <a href="http://pinpoint.microsoft.com/en-US/">Microsoft Pinpoint</a>. This will help result in customer referrals and more. There’s also 2 Microsoft professional support incidents per year and some free online training that will be provided.&nbsp;<br />
<h5>Who’s eligible for BizSpark?</h5>
<p><a href="http://www.microsoft.com/web/websitespark/">WebSiteSpark</a> is available to independent web developers and small web development companies.&nbsp; The only two requirements to join the program are:
<ol>
<li>Your company builds web sites and web application on behalf of others.
<li>Your company currently has less than 10 employees. </li>
</ol>
<p>If you qualify and want to get signed up today, there are a couple of different paths.
<p>You can always visit <a href="http://www.microsoft.com/web/websitespark/">WebsiteSpark</a> and sign up directly. During the enrollment, you can pick a network partner or you can pick one of your friends at Microsoft such as me as your contact to enroll and sign you up.
<p>Or you can send mail to <a href="mailto:webspark@microsoft.com">webspark@microsoft.com</a> you can get a referral code quickly.&nbsp; You can then use that code to enroll in the program on the <a href="http://www.microsoft.com/web/websitespark/">WebsiteSpark website</a>.&nbsp; Once enrolled you can immediately download and use the software, as well as begin to participate in the network/partner opportunities.
<p>If you run into any issues at all, email me at <a href="mailto:josh.holmes@microsoft.com">josh.holmes@microsoft.com</a> and I’ll help you out.<br />
<h5>Some quick Q&amp;A</h5>
<ul>
<li>
<h5>What happens after the 3 years?</h5>
</li>
</ul>
<p>There is a $100 exit fee when you leave the program whether you leave at the end of 1 year or you leverage all three years. However, there’s no obligation to continue using any/all of the software once you exit the program. If you so wish, you can pay the $100 exit fee and wash your hands of the whole deal. Obviously, the play here is that at the end of the three years you will find our platform and tools valuable enough to purchase.
<p>That said, there are some interesting incentives that are being put in place right now to help you with that decision. WebsiteSpark participants can optionally choose to purchase all of the software in the WebsiteSpark program via a $999/year package. And yes, that includes all of the software involved from the tools to the production licenses.&nbsp;&nbsp;
<p>Or you can just leverage the production licenses through a stellar $199 a year offer that includes both 1 Windows Web Server processor license and 1 SQL Server Web edition processor license.&nbsp; You can buy the quantity you need of this package at $199/year each.&nbsp; </p>
<ul>
<li>
<h5>What’s the role of the Network Partner?</h5>
</li>
</ul>
<ul>
<h5></h5>
</ul>
<p>Similar to the BizSpark program, the Network Partners are selected because they are active in supporting the ecosystem that the program is intended for. In the case of hosters it’s obvious. They host the websites that WebsiteSpark participants are building. There are others who work with the community in advisory roles and want to help out as mentors and coaches. </p>
<p>Couple of examples:</p>
<p><a href="http://blog.calevans.com/">Cal Evans</a> is another example of a great network partner as he’s working with PHP shops all over the world and helping them to be successful again as a mentor and as a coach. As a network partner, he is adding one more offering into the portfolio to help his mentees be successful. </p>
<p><a href="http://stevesmithblog.com/">Steve Smith</a> from <a href="http://NimblePros.com">Nimble Pros</a> who wanted to be involved as a network partner because he’s active in working with other consults to help them be successful through support, advice, mentoring and sometimes sub-contracting. He’s proven this by being a Microsoft Regional Director and an MVP for many years. His role as a network partner in the program only furthers that goal of helping the ecosystem. </p>
<p><a href="http://twitter.com/ben_henderson">Ben Henderson</a> from <a href="http://www.fireflylogic.com">Firefly Logic</a>, <a href="http://www.harperreed.org/">Harper Reed</a> from <a href="http://www.threadless.com/">Threadless</a> and <a href="http://geekswithblogs.net/jalexander/">John Alexander</a> and <a href="http://geekswithblogs.net/jjulian/">Jeff Julian</a> from <a href="http://www.geekswithblogs.net/">Geeks With Blogs</a> hold similar positions in the community as influential bloggers, coaches, mentors and advisors to many companies. </p>
<h5>Summary</h5>
<p>I’m really excited about <a href="http://www.microsoft.com/web/websitespark/">WebsiteSpark</a> because I remember when I was an independent consultant and then a partner at <a href="http://www.srtsolutions.com">SRT Solutions</a> getting our first dedicated server. It was a great feeling to have the freedom to do whatever we needed to do with the server from installing different types of software to configuring the redirects the way we wanted.
<p>For more details – read Scott Guthrie&#8217;s blog post at <a href="http://weblogs.asp.net/scottgu/archive/2009/09/24/announcing-the-websitespark-program.aspx">Announcing the WebsiteSpark<br />
Program &#8211; ScottGu&#8217;s Blog</a>
<p>Again, if you want to get involved, feel free to contact me at <a href="mailto:josh.holmes@microsoft.com">josh.holmes@microsoft.com</a>. Either I can sign you up directly or get you in touch with the right network partner to help you in your situation.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joshholmes.com/blog/2009/09/24/announcingthewebsitesparkprogram/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Interesting Web Development Related Resources</title>
		<link>http://www.joshholmes.com/blog/2009/02/26/interestingwebdevelopmentrelatedresources/</link>
		<comments>http://www.joshholmes.com/blog/2009/02/26/interestingwebdevelopmentrelatedresources/#comments</comments>
		<pubDate>Thu, 26 Feb 2009 23:19:19 +0000</pubDate>
		<dc:creator>joshholmes</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Web Dev]]></category>

		<guid isPermaLink="false">http://www.joshholmes.com/blog/2009/02/26/InterestingWebDevelopmentRelatedResources.aspx</guid>
		<description><![CDATA[Like so many thing that we do in our daily development, there’s a high probability that someone has already solved the problem if you know where to look. This is just a collection of resources that I’ve found useful over time. Honestly, I’m posting these here because I need them in one place so that I can find them easily… JavaScript Resources Like a lot of you, I’ve been doing [...]]]></description>
				<content:encoded><![CDATA[<p>Like so many thing that we do in our daily development, there’s a high probability that someone has already solved the problem if you know where to look. This is just a collection of resources that I’ve found useful over time. Honestly, I’m posting these here because I need them in one place so that I can find them easily… </p>
<h3>JavaScript Resources</h3>
<p>Like a lot of you, I’ve been doing JavaScript since 1996. I’ve been pretty geeked, however, with the recent (well, last 2-4 years) emergence of a ton of JavaScript frameworks that are making this work a lot easier. </p>
<p><a href="http://dojotoolkit.org"><img style="border-bottom: 0px; border-left: 0px; margin: 5px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/InterestingWebDevRelatedResources_DA24/image_23.png" width="111" height="83"></a>The first one to talk about it <a href="http://dojotoolkit.org">dojo</a>. It’s one of the more mature ones that’s out there. I’ll be honest and say that it’s been a little while since I’ve used it because I’ve started using jQuery or Prototype more often. That said, <a href="http://dojotoolkit.org">dojo</a> is one of the most complete frameworks out there. I do love it’s drag and drop support. It includes offline support and a whole lot more. Check out and play with some of it’s cool features at <a title="http://dojocampus.org/explorer" href="http://dojocampus.org/explorer">http://dojocampus.org/explorer</a>. </p>
<p>Of course, any group that has a conference called <a href="http://dojotoolkit.org/tags/dojo-beer">dojo.beer()</a> is a winner in my book. </p>
<p><a href="http://www.mochikit.com/"><img style="border-bottom: 0px; border-left: 0px; margin: 5px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/InterestingWebDevRelatedResources_DA24/image_24.png" width="200" height="108"></a>The second toolkit is <a href="http://www.mochikit.com/">MochiKit</a>. I love it’s tag line of “Making JavaScript Suck Less”. I first worked with MochiKit when I was playing around with <a href="http://turbogears.org">TurboGears</a> – a Python web application stack. What it’s really outstanding at is doing async work which is particularly useful in doing AJAX and other service based work. It’s interesting to note that <a href="http://www.blueskyonmars.com/">Kevin Dangoor</a> started Turbo Gears and then at some point later ended up working for <a href="http://www.sitepen.com">SitePen</a> who paid him to work on <a href="http://dojotoolkit.org">dojo</a>. Check out demos of it in action at <a title="http://www.mochikit.com/demos.html" href="http://www.mochikit.com/demos.html">http://www.mochikit.com/demos.html</a>. </p>
<p><a href="http://www.prototypejs.org/"><img style="border-bottom: 0px; border-left: 0px; margin: 5px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/InterestingWebDevRelatedResources_DA24/image_27.png" width="152" height="85"></a> </p>
<p><a href="http://www.prototypejs.org/">Prototype</a> is a slick relatively low level framework. What it does is extend the HTML DOM to include a lot of really useful features like element, class and css selectors. One of the useful things that it does is add a number of manipulations to the built in string class. This gives us startsWith, stripScripts, stripTags, isJSON, strip and a whole lot of other really useful functions.<a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/InterestingWebDevRelatedResources_DA24/image_29.png"><img style="border-bottom: 0px; border-left: 0px; margin: 5px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="right" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/InterestingWebDevRelatedResources_DA24/image_thumb_10.png" width="244" height="74"></a> By itself, <a href="http://www.prototypejs.org/">Prototype</a>’s useful but I have a hard time talking about it without mentioning <a href="http://script.aculo.us/">script.aculo.us</a> and some of the other plugins. <a href="http://script.aculo.us/">script.aculo.us</a> brings drag and drop support, animation frameworks a number of controls and makes it all really easy. </p>
<p>Check out demos of <a href="http://www.prototypejs.org/">Prototype</a> and <a href="http://script.aculo.us/">script.aculo.us</a> working together at <a title="http://wiki.github.com/madrobby/scriptaculous/demos" href="http://wiki.github.com/madrobby/scriptaculous/demos">http://wiki.github.com/madrobby/scriptaculous/demos</a>. </p>
<p><a href="http://jquery.com/"><img style="border-bottom: 0px; border-left: 0px; margin: 5px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/InterestingWebDevRelatedResources_DA24/image_32.png" width="236" height="81"></a><a href="http://jquery.com/">jQuery</a> is a fantastic and relatively light-weight framework that’s garnering a lot of new supporters recently. Honestly, I was happy with <a href="http://dojotoolkit.org">dojo</a> and <a href="http://www.prototypejs.org/">Prototype</a> until I saw the <a href="http://blogs.msdn.com/webdevtools/archive/2009/02/24/vsdoc-for-jquery-1-3-2-now-available.aspx">Visual Studio Support for jQuery</a> at which point I started playing with it. </p>
<p>I’m a convert. <img src='http://www.joshholmes.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Now, because it’s not as low level as <a href="http://www.prototypejs.org/">Prototype</a>, <a href="http://jquery.com/">jQuery</a> doesn’t have some things like the string manipulation, but overall I’m really pleased. I find that I have to write a lot less code to accomplish the same results. And very importantly, the <a href="http://docs.jquery.com/">jQuery Documentation</a> is really good. Another really useful thing is that <a href="http://jquery.org">jQuery</a>, being a really nice citizen, has built in support to make sure that it’s <a href="http://docs.jquery.com/Using_jQuery_with_Other_Libraries">compatible with other JavaScript frameworks</a>. Throw all of that in with intellisense in Visual Studio and it makes life easy. </p>
<p>There are also a ton of different <a href="http://plugins.jquery.com/">plugins for jQuery</a> that do everything from menus to rude string manipulation (not as good as Prototype but it’s a start). </p>
<p>Some of my favorite jQuery plugins in no particular order are:</p>
<h5><a href="http://www.jqueryplugins.com/plugins/view/62/">AJAX History</a><br /><a href="http://www.jqueryplugins.com/plugins/view/97/">Mousewheel</a><br /><a href="http://www.jqueryplugins.com/plugins/view/96/">JSON</a><br /><a href="http://www.jqueryplugins.com/plugins/view/14/">Curvy Corners</a><br /><a href="http://www.jqueryplugins.com/plugins/view/22/">jCarousel</a><br /><a href="http://www.jqueryplugins.com/plugins/view/51/">xWin</a></h5>
<p><a href="http://www.asp.net/ajax/"><img style="border-bottom: 0px; border-left: 0px; margin: 5px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/InterestingWebDevRelatedResources_DA24/image_35.png" width="180" height="82"></a>&nbsp; <a href="http://www.asp.net/ajax/">ASP.NET AJAX</a> is the last framework I’m going to talk about here not because there aren’t other frameworks but I haven’t used the others so I don’t really want to comment on them. </p>
<p>First, as the name does imply, what it does really well is AJAX stuff. One of the really powerful features is the JavaScript proxy generation. </p>
<pre class="csharpcode"><span class="kwrd">&lt;</span><span class="html">asp:ScriptManager</span> <span class="attr">ID</span><span class="kwrd">="ScriptManager1"</span> <span class="attr">runat</span><span class="kwrd">="server"</s
pan><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">Services</span><span class="kwrd">&gt;</span>
           <span class="kwrd">&lt;</span><span class="html">asp:ServiceReference</span> <span class="attr">Path</span><span class="kwrd">="~/CustomersService.asmx"</span> <span class="kwrd">/&gt;</span>
      <span class="kwrd">&lt;/</span><span class="html">Services</span><span class="kwrd">&gt;</span>
<span class="kwrd">&lt;/</span><span class="html">asp:ScriptManager</span><span class="kwrd">&gt;</span></pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>That allows you to call web services as if they were methods on an object. </p>
<pre class="csharpcode"><span class="kwrd">function</span> GetCustomerByCountry()
{
      <span class="kwrd">var</span> country = $get(<span class="str">"txtCountry"</span>).value;
      InterfaceTraining.CustomersService.GetCustomersByCountry(country, OnWSRequestComplete);
}

<span class="kwrd">function</span> OnWSRequestComplete(results)
{
      <span class="kwrd">if</span> (results != <span class="kwrd">null</span>)
      {
           CreateCustomersTable(results);
           GetMap(results);
      }
}</pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>Second, despite the name, <a href="http://www.asp.net/ajax/">ASP.NET AJAX</a> can work with more than just <a href="http://www.asp.net">ASP.NET</a>. There’s a project on CodePlex to generate the service proxies for PHP called <a href="http://www.codeplex.com/phpmsajax">PHP MS AJAX</a> (which is a whole lot of capital letters…). </p>
<h5>How do you choose? </h5>
<p>There are a ton of different tests out there some of which you can look at the results, others of which you can actually run yourself…</p>
<p><a href="http://blog.creonfx.com/javascript/mootools-vs-jquery-vs-prototype-vs-yui-vs-dojo-comparison-revised:">Dojo vs JQuery vs MooTools vs Prototype Performance Comparison | Peter Velichkov&#8217;s Blog &#8211; Jan 19, 2009</a></p>
<p><a href="http://mootools.net/slickspeed/ ">Mootools Slickspeed Test</a></p>
<p>I like to see if there’s broad support so the project won’t go away, see if it’s actively being developed, what tooling is available, how easy the syntax is, how well it plays with others, what it brings to the table from a functionality standpoint and a whole lot more. </p>
<p>Really though, it comes down to your preferences. The good news is that it’s not the end of the world if you decide to switch frameworks. </p>
<p>My current JavaScript work is being done with a combination of <a href="http://jquery.org">jQuery</a> for most of my client side work with <a href="http://www.asp.net/ajax/">ASP.NET AJAX</a> doing my communications (and some of the controls) with a little bit of <a href="http://www.prototypejs.org/">Prototype</a> thrown in when I need to go lower level. </p>
<h3>CSS Resources</a></h3>
<p>I used to spend days getting exactly the right alignment in my HTML/CSS work. But as time has gone on, I’ve gotten more mature and realized that I don’t have to work that hard. Instead of me figuring out how to do the exact right layout should be, I’m starting to leverage the various CSS Frameworks that are out there – especially since there are so many new browsers and form factors out there from IE8 to Safari 4 to iPhone. I want a framework to </p>
<p><a href="http://960.gs/"><a href="http://960.gs/"><img style="border-bottom: 0px; border-left: 0px; margin: 5px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/InterestingWebDevRelatedResources_DA24/image_17.png" width="143" height="105"></a></a>One really simple CSS Framework is the <a href="http://960.gs/">960 Grid System</a>. It’s simple and gives you a lot of flexibility. The idea is that it breaks up the page into either 12 or 16 different columns and then lets you put in areas that spread across any number of those columns. This is a direct nod to the print industry which does exactly the same thing on paper. This gives you a tremendous number of possibilities from a simple two column layout to a really complicated layouts with multiple width columns and variety. Check it out, it’s simple and it works. </p>
<p><a href="http://www.designinfluences.com/fluid960gs/"><img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/InterestingWebDevRelatedResources_DA24/image_16.png" width="244" height="36"></a>&nbsp; The downside of it is that it’s a fixed width layout so it’s not always the right choice. The good news, however, is that the project has been extended by <a href="http://www.designinfluences.com/fluid960gs/">Fluid 960 Grid System</a>. <a href="http://www.mootools.net/"><img style="border-bottom: 0px; border-left: 0px; margin: 5px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="right" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/InterestingWebDevRelatedResources_DA24/image_15.png" width="191" height="48"></a>This adds JavaScript to the <a href="http://960.gs/">960 Grid System</a> to give is a much more dynamic layout that resized to your screen size. It also brings dynamic menus to the table. It’s JavaScript it based off of a project called <a href="http://www.mootools.net/">MooTools</a>.&nbsp; </p>
<p><a href="http://layouts.ironmyers.com"><img style="border-bottom: 0px; border-left: 0px; margin: 5px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/InterestingWebDevRelatedResources_DA24/image_18.png" width="244" height="27"></a>If the you really don’t want to think that hard and the others don’t give you what you need tied up in a neat enough package, check out <a href="http://layouts.ironmyers.com">Layouts.IronMyers.com</a>. It’s simple to use web site gives you a preview of exactly the layout that you’re looking for and lets you download a zip file with a sample HTML and CSS inside. </p>
<p><a href="http://www.freecsstemplates.org/"><a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/InterestingWebDevRelatedResources_DA24/image_10.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/InterestingWebDevRelatedResources_DA24/image_thumb_4.png" width="244" height="59"></a></a>And if that’s not enough and you really just need the design and all of the layout handed to you – check out <a href="http://www.freecsstemplates.org/">FreeCSSTemplates.org</a>. It’s got a large number of Creative Commons licensed CSS templates and layouts. </p>
<h3>Conclusion</h3>
<p>I hope these resources are as useful to you as they are to me. I’ve banged my head against the wall a ton of times until I realized that someone else had already solved the problem and I can leverage their solution. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.joshholmes.com/blog/2009/02/26/interestingwebdevelopmentrelatedresources/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adding Paging to the Simple Photo Gallery</title>
		<link>http://www.joshholmes.com/blog/2009/01/29/addingpagingtothesimplephotogallery/</link>
		<comments>http://www.joshholmes.com/blog/2009/01/29/addingpagingtothesimplephotogallery/#comments</comments>
		<pubDate>Thu, 29 Jan 2009 22:48:10 +0000</pubDate>
		<dc:creator>joshholmes</dc:creator>
				<category><![CDATA[Web Dev]]></category>

		<guid isPermaLink="false">http://www.joshholmes.com/blog/2009/01/29/AddingPagingToTheSimplePhotoGallery.aspx</guid>
		<description><![CDATA[Over my last handful of posts, Building a Simple Photo Gallery in ASP.NET MVC Framework, Returning Thumbnails With the MVC Framework and Adding Lighbox.js to the Simple Photo Gallery I&#8217;ve built a simple photo gallery on the ASP.NET MVC framework. In this post, we&#8217;re going to continue that project by adding paging rather than showing all of the pictures on the one page. Adding Paging to the Model with LINQ [...]]]></description>
				<content:encoded><![CDATA[<p><a title="Turn the page" href="http://www.flickr.com/photos/79165057@N00/56107224/"><img style="margin: 0px 5px 5px" class="flickr" border="0" alt="Turn the page" align="left" src="http://static.flickr.com/26/56107224_a4120dd201_m.jpg"></a>Over my last handful of posts, <a href="http://www.joshholmes.com/blog/2009/01/27/BuildingASimplePhotoGalleryInASPNETMVCFramework.aspx">Building a Simple Photo Gallery in ASP.NET MVC Framework</a>, <a href="http://www.joshholmes.com/blog/2009/01/27/ReturningThumbnailsWithTheMVCFramework.aspx">Returning Thumbnails With the MVC Framework</a> and <a href="http://www.joshholmes.com/blog/2009/01/28/AddingLighboxjsToTheSimplePhotoGallery.aspx">Adding Lighbox.js to the Simple Photo Gallery</a> I&#8217;ve built a simple photo gallery on the <a href="http://www.asp.net/mvc">ASP.NET MVC</a> framework. </p>
<p>In this post, we&#8217;re going to continue that project by adding paging rather than showing all of the pictures on the one page. </p>
<h5>Adding Paging to the Model with LINQ</h5>
<p>Since we are simply using an XML file for the storage, we need to do the paging manually against our set of objects that we have in memory. This method works well any time you have client side caching as well. </p>
<pre class="code"><span style="color: blue">public class </span><span style="color: #2b91af">ImageModel </span>: <span style="color: #2b91af">List</span>&lt;<span style="color: #2b91af">Image</span>&gt;
{
    <span style="color: blue">public </span>ImageModel() : <span style="color: blue">this</span>(1, 10)
    {
    }

    <span style="color: blue">private </span><span style="color: #2b91af">List</span>&lt;<span style="color: #2b91af">Image</span>&gt; GetAllImages()
    {
        <span style="color: blue">string </span>imagesDir = <span style="color: #2b91af">HttpContext</span>.Current.Server.MapPath(<span style="color: #a31515">"~/images/"</span>);
        <span style="color: #2b91af">XDocument </span>imageMetaData = <span style="color: #2b91af">XDocument</span>.Load(imagesDir + <span style="color: #a31515">@"/ImageMetaData.xml"</span>);
        <span style="color: blue">var </span>images = <span style="color: blue">from </span>image <span style="color: blue">in </span>imageMetaData.Descendants(<span style="color: #a31515">"image"</span>)
                     <span style="color: blue">select new </span><span style="color: #2b91af">Image</span>(image.Element(<span style="color: #a31515">"filename"</span>).Value,
                     image.Element(<span style="color: #a31515">"description"</span>).Value);
        
        TotalCount = images.Count&lt;<span style="color: #2b91af">Image</span>&gt;();

        <span style="color: blue">return </span>images.ToList&lt;<span style="color: #2b91af">Image</span>&gt;();
    }

    <span style="color: blue">public int </span>TotalCount { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }
    <span style="color: blue">public int </span>CurrentPage { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }
    <span style="color: blue">public int </span>PageSize { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }
    <span style="color: blue">public </span>ImageModel(<span style="color: blue">int </span>pageNum, <span style="color: blue">int </span>pageSize)
    {
        CurrentPage = pageNum;
        PageSize = pageSize;

        <span style="color: blue">var </span>images = GetAllImages();

        <span style="color: blue">this</span>.AddRange(images.Skip((pageNum - 1) * 
            pageSize).Take(pageSize).ToList());
    }<br />}</pre>
<p>Notice that I added a new constructor that takes as parameters page number and page size. This will allow us, from the controller, to control the action happening here. The next thing to notice is that the default constructor is now calling the new constructor passing in default parameters of 1 and 10. Notice that we&#8217;re starting with 1 instead of 0. This will make a ton more sense to the user and makes mapping the pages a lot simpler. Lastly, notice that we&#8217;re setting some parameters (TotalCount, CurrentPage and PageSize). We&#8217;ll use these in the view in a little bit. </p>
<p>If we run right now, we&#8217;ll only get the first 10 pictures. If you happen to be following along and coding this with me, go ahead and try it. </p>
<h5>Adding the Custom Route</h5>
<p>Next, we need to add a route to handle the page mechanism. </p>
<p>In the global.asax.cs file, in the method called RegisterRoutes add the following route. </p>
<pre class="code">routes.MapRoute(
    <span style="color: #a31515">"ImagePaging"</span>,                                              <span style="color: green">// Route name
    </span><span style="color: #a31515">"{controller}/Page{pagenumber}"</span>,                           <span style="color: green">// URL with parameters
    </span><span style="color: blue">new </span>{ controller = <span style="color: #a31515">"Home"</span>, action = <span style="color: #a31515">"Page"</span>, pagenumber = <span style="color: #a31515">"1" </span>}  <span style="color: green">// Parameter defaults
</span>);</pre>
<p>Notice how the routes are built. It&#8217;s a series of url parts and named parameters. For example, the Page2 is going to pass in 2 as the selected pagenumber. We actually could have hard coded the whole path except for the page number. </p>
<h5>Adding the Paging Action to the Controller</h5>
<p>Now that we&#8217;ve got data routing to the an Action, we need to make sure that we&#8217;re handling it. </p>
<p>Turns out, this was the easiest piece of all. </p>
<pre class="code"><span style="color: blue">public </span><span style="color: #2b91af">ActionResult </span>Page(<span style="color: blue">string </span>pagenumber)
{
    <span style="color: #2b91af">ImageModel </span>model = <span style="color: blue">new </span><span style="color: #2b91af">ImageModel</span>(<span style="color: blue">int</span>.Parse(pagenumber), 10);
    <span style="color: blue">return </span>View(<span style="color: #a31515">"index"</span>, model);
}</pre>
<p>Notice that we are just creating the ImageModel leveraging our new constructor and passing it into a view. The view that we&#8217;re using is still the index view, which is the default. We don&#8217;t have to go build a new view for the paging, we just need to alter the data that we&#8217;re passing into our current view. </p>
<p>If you want, you can go test by browsing to /image/page2 and see what it shows. </p>
<h5>Adding the Navigation Links</h5>
<p>The last thing to do is to add the navigation links to the view. If you use the &lt;% %&gt; tags in any ASPX it runs on the server side. What this is actually doing is that the ASPX page is parsed and generated into code and compiled into a .NET assembly on the server side and the code inside the &lt;% %&gt; just gets copied into that generated code before it&#8217;s compiled. This means that the code that&#8217;s inside your brackets must match the language that you set at the top of the page. </p>
<pre class="code"><span style="background: #ffee62">&lt;%</span><span style="color: blue">if </span>(ViewData.Model.TotalCount &gt; ViewData.Model.PageSize){ <span style="background: #ffee62">%&gt;
</span><span style="color: blue">&lt;</span><span style="color: #a31515">div </span><span style="color: red">class</span><span style="color: blue">="paging"&gt;
    </span><span style="background: #ffee62">&lt;%</span><span style="color: blue">if </span>(ViewData.Model.CurrentPage &gt; 1) { <span style="background: #ffee62">%&gt;
</span>        <span style="background: #ffee62">&lt;%</span><span style="color: blue">= </span>Html.ActionLink(<span style="color: #a31515">"Back"</span>, <br />               <span style="color: #a31515">"Page" </span>+ <br />               (ViewData.Model.CurrentPage - 1).ToString(), <span style="color: #a31515">"Image"</span>)<span style="background: #ffee62">%&gt;</span><span style="color: red">&amp;nbsp;
    </span><span style="background: #ffee62">&lt;%</span> }<span style="background: #ffee62">%&gt;
</span>    <span style="background: #ffee62">&lt;%</span><span style="color: blue">decimal </span>numberOfPages = <br />          <span style="color: blue">decimal</span>.Divide(ViewData.Model.TotalCount, ViewData.Model.PageSize);
      <span style="color: blue">int </span>lastPageNumber = (<span style="color: blue">int</span>)<span style="color: blue">decimal</span>.Ceiling(numberOfPages);
      <span style="color: blue">for </span>(<span style="color: blue">int </span>i = 1; i &lt;= lastPageNumber; i++)
       {
           <span style="color: blue">if </span>(i != ViewData.Model.CurrentPage)
           {
            <span style="background: #ffee62">%&gt;
</span>        <span style="background: #ffee62">&lt;%</span><span style="color: blue">= </span>Html.ActionLink(i.ToString(), <span style="color: #a31515">"Page" </span>+ i.ToString(), <span style="color: #a31515">"Image"</span>)<span style="background: #ffee62">%&gt;</span><span style="color: red">&amp;nbsp;
    </span><span style="background: #ffee62">&lt;%</span> 
            }
       }<span style="background: #ffee62">%&gt;
</span>    <span style="background: #ffee62">&lt;%</span><span style="color: blue">if </span>(ViewData.Model.CurrentPage &lt; lastPageNumber)
        { <span style="background: #ffee62">%&gt;
</span>        <span style="background: #ffee62">&lt;%</span><span style="color: blue">= </span>Html.ActionLink(<span style="color: #a31515">"Next"</span>, <br />              <span style="color: #a31515">"Page" </span>+ (ViewData.Model.CurrentPage + 1).ToString(), <span style="color: #a31515">"Image"</span>)<span style="background: #ffee62">%&gt;
</span>    <span style="background: #ffee62">&lt;%</span> }<span style="background: #ffee62">%&gt;
</span>    <span style="background: #ffee62">&lt;%</span><span style="color: blue">=</span>lastPageNumber<span style="background: #ffee62">%&gt;
</span><span style="color: blue">&lt;/</span><span style="color: #a31515">div</span><span style="color: blue">&gt;
</span><span style="background: #ffee62">&lt;%</span> }<span style="background: #ffee62">%&gt;</span></pre>
<p>Notice that we&#8217;re using the properties set by back in the model here. There&#8217;s three different sections here. The first checks to see if we need a back button. The second loops over the pages and creates step links. And the third checks to see if we need a next button. </p>
<p>The navigation links in the view turned out to be the most complicated part of adding paging to the photo gallery. </p>
<p><a href="http://rss.joshholmes.com/joshholmes">Stay tuned to future posts</a> for styling with CSS, adding a Silverlight front end and more. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.joshholmes.com/blog/2009/01/29/addingpagingtothesimplephotogallery/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Adding Lighbox.js to the Simple Photo Gallery</title>
		<link>http://www.joshholmes.com/blog/2009/01/28/addinglighboxjstothesimplephotogallery/</link>
		<comments>http://www.joshholmes.com/blog/2009/01/28/addinglighboxjstothesimplephotogallery/#comments</comments>
		<pubDate>Wed, 28 Jan 2009 23:47:48 +0000</pubDate>
		<dc:creator>joshholmes</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Web Dev]]></category>

		<guid isPermaLink="false">http://www.joshholmes.com/blog/2009/01/28/AddingLighboxjsToTheSimplePhotoGallery.aspx</guid>
		<description><![CDATA[In my previous two posts, Building a Simple Photo Gallery in ASP.NET MVC Framework and Returning Thumbnails With the MVC Framework, I built a simple photo gallery on the ASP.NET MVC framework. In this post we are going to start making this a little prettier. To start with, we are going to leverage an JavaScript project called Lightbox.js that&#8217;s released under the Creative Commons Attribution 2.5 License. One cool part [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/AddingLighbox.jstotheSimplePhotoGallery_1085F/image_2.png"><img style="border-bottom: 0px; border-left: 0px; margin: 5px; border-top: 0px; border-right: 0px" border="0" alt="image" align="left" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/AddingLighbox.jstotheSimplePhotoGallery_1085F/image_thumb.png" width="244" height="195"></a> In my previous two posts, <a href="http://www.joshholmes.com/blog/2009/01/27/BuildingASimplePhotoGalleryInASPNETMVCFramework.aspx">Building a Simple Photo Gallery in ASP.NET MVC Framework</a> and <a href="http://www.joshholmes.com/blog/2009/01/27/ReturningThumbnailsWithTheMVCFramework.aspx">Returning Thumbnails With the MVC Framework</a>, I built a simple photo gallery on the <a href="http://www.asp.net/mvc">ASP.NET MVC</a> framework. In this post we are going to start making this a little prettier. To start with, we are going to leverage an JavaScript project called <a href="http://lokeshdhakar.com/projects/lightbox2/">Lightbox.js</a> that&#8217;s released under the Creative <a href="http://creativecommons.org/licenses/by/2.5/">Commons Attribution 2.5 License</a>. </p>
<p>One cool part about it is that you can get a tremendous amount of functionality with little to no JavaScript coding on your own. It leverages a couple of different JavaScript libraries including <a href="http://www.prototypejs.org/">Prototype</a> and <a href="http://script.aculo.us/">Scriptaculous</a>. These do a lot of generic HTML Dom manipulation and visualization. </p>
<p>The result of leveraging Lightbox.js is that when you click on one of the thumbnails that we started showing in <a href="http://www.joshholmes.com/blog/2009/01/27/ReturningThumbnailsWithTheMVCFramework.aspx">Returning Thumbnails With the MVC Framework</a> the full sized picture will show in a really nice lightbox style effect. </p>
<p>First, you need to download the Lightbox.js project. It comes in a zip file that comes with a sample application. Unzip the contents into the appropriate folders. This means that the .js files go in your /scripts directors and the images and the css in the /content folder. </p>
<p>The cool part is that since you have the source to it all, rock on and modify it to your heart&#8217;s content. And we&#8217;re going to do a light modification right off the bat. We could have put the images from the Lightbox.js project in the /images folder but we&#8217;re already using that for something else so we put them in the /content folder. That means that you need to open up lightbox.js and change the directory of the loading and close images to point to the correct directory. </p>
<pre class="code">LightboxOptions = Object.extend({
    fileLoadingImage:        <span style="color: #a31515">'content/loading.gif'</span>,
    fileBottomNavCloseImage: <span style="color: #a31515">'content/closelabel.gif'</span>,</pre>
<p>That&#8217;s the only mod that we *need* to make at the moment. If you feel like it, you can fix the image paths in lighthouse.css as well. </p>
<pre class="code"><span style="color: #a31515">#prevLink:hover</span>, <span style="color: #a31515">#prevLink:visited:hover </span>{ <span style="color: red">background</span>: <br />        <span style="color: blue">url(Content/prevlabel.gif) left 15% no-repeat</span>; }
<span style="color: #a31515">#nextLink:hover</span>, <span style="color: #a31515">#nextLink:visited:hover </span>{ <span style="color: red">background</span>: <br />        <span style="color: blue">url(Content/nextlabel.gif) right 15% no-repeat</span>; }</pre>
<p>The only thing left to do is update the Images/index view to take advantage of our new capabilities. There are two mods to make. First, we need to include links to the lightbox.css and the required 3 JavaScript files (prototype.js, scriptaculous.js and lighbox.js). Second, we need to add a rel=&#8221;lightbox&#8221; to the anchor tag around our picture. </p>
<pre class="code"><span style="background: #ffee62">&lt;%</span><span style="color: blue">@ </span><span style="color: #a31515">Page </span><span style="color: red">Title</span><span style="color: blue">="" </span><span style="color: red">Language</span><span style="color: blue">="C#" </span><span style="color: red">MasterPageFile</span><span style="color: blue">="~/Views/Shared/Site.Master" <br />      </span><span style="color: red">AutoEventWireup</span><span style="color: blue">="true" </span><span style="color: red">CodeBehind</span><span style="color: blue">="Index.aspx.cs" <br />      </span><span style="color: red">Inherits</span><span style="color: blue">="PhotoGalleryMVC.Views.Image.Index" </span><span style="background: #ffee62">%&gt;
</span><span style="color: blue">&lt;</span><span style="color: #a31515">asp</span><span style="color: blue">:</span><span style="color: #a31515">Content </span><span style="color: red">ID</span><span style="color: blue">="Content1" </span><span style="color: red">ContentPlaceHolderID</span><span style="color: blue">="MainContent" </span><span style="color: red">runat</span><span style="color: blue">="server"&gt;
    &lt;</span><span style="color: #a31515">link </span><span style="color: red">rel</span><span style="color: blue">="stylesheet" </span><span style="color: red">href</span><span style="color: blue">="content/lightbox.css" </span><span style="color: red">type</span><span style="color: blue">="text/css" </span><span style="color: red">media</span><span style="color: blue">="screen" /&gt;
    &lt;</span><span style="color: #a31515">script </span><span style="color: red">src</span><span style="color: blue">="scripts/prototype.js" </span><span style="color: red">type</span><span style="color: blue">="text/javascript"&gt;&lt;/</span><span style="color: #a31515">script</span><span style="color: blue">&gt;
    &lt;</span><span style="color: #a31515">script </span><span style="color: red">src</span><span style="color: blue">="scripts/scriptaculous.js?load=effects,builder" </span><span style="color: red">type</span><span style="color: blue">="text/javascript"&gt;&lt;/</span><span style="color: #a31515">script</span><span style="color: blue">&gt;
    &lt;</span><span style="color: #a31515">script </span><span style="color: red">src</span><span style="color: blue">="scripts/lightbox.js" </span><span style="color: red">type</span><span style="color: blue">="text/javascript"&gt;&lt;/</span><span style="color: #a31515">script</span><span style="color: blue">&gt;

    &lt;</span><span style="color: #a31515">p</span><span style="color: blue">&gt;</span><span style="background: #ffee62">&lt;%</span><span style="color: blue">= </span>Html.ActionLink(<span style="color: #a31515">"Add your own image"</span>, <span style="color: #a31515">"Upload"</span>, <span style="color: #a31515">"Image"</span>)<span style="background: #ffee62">%&gt;</span><span style="color: blue">&lt;/</span><span style="color: #a31515">p</span><span style="color: blue">&gt;
       </span><span style="background: #ffee62">&lt;%</span> <span style="color: blue">foreach </span>(<span style="color: blue">var </span>image <span style="color: blue">in </span>ViewData.Model) { <span style="background: #ffee62">%&gt;
</span>   <span style="color: blue">&lt;</span><span style="color: #a31515">span </span><span style="color: red">class</span><span style="color: blue">="image"&gt;
        &lt;</span><span style="color: #a31515">a </span><span style="color: red">href</span><span style="color: blue">="/images/</span><span style="background: #ffee62">&lt;%</span>= image.Path <span style="background: #ffee62">%&gt;</span><span style="color: blue">" </span><span style="color: red">rel</span><span style="color: blue">="lightbox"&gt;<br />            &lt;</span><span style="color: #a31515">img </span><span style="color: red">src</span><span style="color: blue">="/image/thumbnail/</span><span style="background: #ffee62">&lt;%</span>= image.Path <span style="background: #ffee62">%&gt;</span><span style="color: blue">" /&gt;<br />        &lt;/</span><span style="color: #a31515">a</span><span style="color: blue">&gt;
        &lt;</span><span style="color: #a31515">span </span><span style="color: red">class</span><span style="color: blue">="description"&gt;</span><span style="background: #ffee62">&lt;%</span><span style="color: blue">= </span>image.Description <span style="background: #ffee62">%&gt;</span><span style="color: blue">&lt;/</span><span style="color: #a31515">span</span><span style="color: blue">&gt;
   &lt;/</span><span style="color: #a31515">span</span><span style="color: blue">&gt;
</span><span style="background: #ffee62">&lt;%</span> }<span style="background: #ffee62">%&gt;

</span><span style="color: blue">&lt;/</span><span style="color: #a31515">asp</span><span style="color: blue">:</span><span style="color: #a31515">Content</span><span style="color: blue">&gt;</span></pre>
<p>It&#8217;s that simple. This will render a really nice little lightbox effect on our images. </p>
<p><a href="http://rss.joshholmes.com/joshholmes">Stay tuned for future posts</a> about styling the CSS, paging the pictures and a whole lot more. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.joshholmes.com/blog/2009/01/28/addinglighboxjstothesimplephotogallery/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
