<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5164732438256297952</id><updated>2011-11-30T00:56:38.815-08:00</updated><category term='wcf'/><category term='c#'/><category term='rest'/><category term='moving'/><category term='firefox'/><category term='linq'/><category term='xaml'/><category term='other'/><category term='entities'/><category term='mix09'/><category term='silverlight'/><category term='phoenix silverlight user group'/><category term='bragosphere'/><category term='upload'/><category term='worship'/><category term='microsoft'/><category term='family album'/><category term='web development'/><category term='.net'/><category term='music'/><category term='silverlight 2'/><category term='zleek'/><category term='humor'/><title type='text'>Zleek Speak</title><subtitle type='html'>Thoughts from the Zleek Geek</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://bragosphere.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://bragosphere.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Steve Commisso</name><uri>http://www.blogger.com/profile/12878739312946444949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>21</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5164732438256297952.post-7581280242082056476</id><published>2009-02-12T06:44:00.000-08:00</published><updated>2009-02-12T06:46:25.229-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='moving'/><title type='text'>Migration</title><content type='html'>Well, finally got tired of having the old address (Bragosphere), so I migrated my blog over to &lt;a href="http://zleek.wordpress.com"&gt;zleek.wordpress.com&lt;/a&gt;. Please update your bookmarks/rss accordingly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5164732438256297952-7581280242082056476?l=bragosphere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bragosphere.blogspot.com/feeds/7581280242082056476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5164732438256297952&amp;postID=7581280242082056476' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/7581280242082056476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/7581280242082056476'/><link rel='alternate' type='text/html' href='http://bragosphere.blogspot.com/2009/02/migration.html' title='Migration'/><author><name>Steve Commisso</name><uri>http://www.blogger.com/profile/12878739312946444949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5164732438256297952.post-5834464972054205614</id><published>2009-02-09T21:50:00.000-08:00</published><updated>2009-02-09T21:53:29.289-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><title type='text'>My Day Job</title><content type='html'>&lt;p&gt;This Dilbert strip sums up my day job pretty well.&lt;/p&gt;
&lt;a href="http://dilbert.com/strips/comic/2009-02-08/"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 179px;" src="http://dilbert.com/dyn/str_strip/000000000/00000000/0000000/000000/40000/0000/500/40556/40556.strip.sunday.gif" border="0" alt="" /&gt;&lt;/a&gt;
&lt;p&gt;I'll get to that &lt;a href="http://bragosphere.blogspot.com/2009/02/phoenix-silverlight-user-group.html"&gt;File Uploader&lt;/a&gt; post that I promised soon...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5164732438256297952-5834464972054205614?l=bragosphere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bragosphere.blogspot.com/feeds/5834464972054205614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5164732438256297952&amp;postID=5834464972054205614' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/5834464972054205614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/5834464972054205614'/><link rel='alternate' type='text/html' href='http://bragosphere.blogspot.com/2009/02/my-day-job.html' title='My Day Job'/><author><name>Steve Commisso</name><uri>http://www.blogger.com/profile/12878739312946444949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5164732438256297952.post-9198994086110898484</id><published>2009-02-02T11:09:00.000-08:00</published><updated>2009-02-04T20:28:30.714-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='silverlight 2'/><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='phoenix silverlight user group'/><category scheme='http://www.blogger.com/atom/ns#' term='wcf'/><category scheme='http://www.blogger.com/atom/ns#' term='upload'/><title type='text'>Phoenix Silverlight User Group</title><content type='html'>&lt;p&gt;&lt;a href="http://geekswithblogs.net/WynApseTechnicalMusings/archive/2009/01/30/129098.aspx"&gt;Dave Campbell&lt;/a&gt; of &lt;a href="http://www.silverlightcream.com"&gt;Silverlight Cream&lt;/a&gt; has asked me to present at the next &lt;a href="http://geekswithblogs.net/WynApseTechnicalMusings/archive/2009/01/30/129098.aspx"&gt;Phoenix Silverlight User Group&lt;/a&gt; meeting. If you are interested in Silverlight and live in the Phoenix-metro area, it is a great user group to join.&lt;/p&gt;
&lt;p&gt;My presentation is titled "&lt;strong&gt;Using &lt;a href="http://www.silverlight.net"&gt;Silverlight&lt;/a&gt; and &lt;a href="http://social.msdn.microsoft.com/content/en-us/msft/netframework/wcf/GettingStarted"&gt;WCF&lt;/a&gt; to create a &lt;a href="http://blogs.msdn.com/bags/archive/2008/11/10/rest-in-wcf-part-xi-tunneling-put-through-post.aspx"&gt;RESTful&lt;/a&gt; File Upload Utility&lt;/strong&gt;". If any of those topics interest you, please come and join us! Source code will be provided on this blog in the days following the presentation. Hope to see you there!&lt;/p&gt;
&lt;div style="font-weight:bold; margin-bottom: 15px; color: #FF0000"&gt;Get the &lt;a href="http://www.stevecommisso.com/Bragosphere/Posts/Agnition.Utils.zip"&gt;Source Code&lt;/a&gt; and the &lt;a href="http://www.stevecommisso.com/Bragosphere/Posts/SilverlightWcfFileUpload.ppt"&gt;Slide Deck&lt;/a&gt; here. I will put up a proper post covering everything more fully in the coming days.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5164732438256297952-9198994086110898484?l=bragosphere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bragosphere.blogspot.com/feeds/9198994086110898484/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5164732438256297952&amp;postID=9198994086110898484' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/9198994086110898484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/9198994086110898484'/><link rel='alternate' type='text/html' href='http://bragosphere.blogspot.com/2009/02/phoenix-silverlight-user-group.html' title='Phoenix Silverlight User Group'/><author><name>Steve Commisso</name><uri>http://www.blogger.com/profile/12878739312946444949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5164732438256297952.post-4874383530176135797</id><published>2009-01-03T09:45:00.001-08:00</published><updated>2009-01-03T10:02:39.584-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mix09'/><category scheme='http://www.blogger.com/atom/ns#' term='zleek'/><category scheme='http://www.blogger.com/atom/ns#' term='silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><title type='text'>MIX09 10K Smart Coding Challenge</title><content type='html'>&lt;p&gt;&lt;a href="http://2009.visitmix.com/MIXtify/TenKGallery.aspx"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 151px;" src="http://2009.visitmix.com/Images/Logo/MIX09_Color_RGB_tag.gif" border="0" alt="" /&gt;&lt;/a&gt;I entered a &lt;a href="http://www.zleek.com"&gt;Zleek&lt;/a&gt; &lt;a href="http://www.silverlight.net"&gt;Silverlight&lt;/a&gt; application into the &lt;a href="http://2009.visitmix.com/MIXtify/TenKGallery.aspx"&gt;MIX09 10K Smart Coding Challenge&lt;/a&gt;. Please &lt;a href="http://2009.visitmix.com/MIXtify/TenKDisplay.aspx?SubmissionID=0049"&gt;Vote for my entry&lt;/a&gt; by rating it 5 stars!&lt;/p&gt;
&lt;p&gt;It is a very "lite" version of &lt;a href="http://www.zleek.com"&gt;Zleek&lt;/a&gt; that contains only a single page where you can upload images, manipulate them using drag/rotate/scale, and save your layout. You can't share layouts with other users, but the application will remember your last saved layout.&lt;/p&gt;
&lt;p&gt;The idea of the competition is to fit as much functionality in only 10KB of source code. Here's a snippet of what size constraints will make your code look like (note that my actual submission was all on a single line of text):&lt;br /&gt;
&lt;a href="http://3.bp.blogspot.com/_gl38edFX2wM/SV-lj1Se3jI/AAAAAAAAABo/_pIWg8UzE8w/s1600-h/1-3-2009+10-43-55+AM.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 341px;" src="http://3.bp.blogspot.com/_gl38edFX2wM/SV-lj1Se3jI/AAAAAAAAABo/_pIWg8UzE8w/s400/1-3-2009+10-43-55+AM.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5287126522574855730" /&gt;&lt;/a&gt;I should write code like this at work! I'm sure everyone would appreciate how easy to read it is! Anyway, it was fun putting together code completely at odds with my normal coding style. For you geeks out there thinking about entering, here is what I learned from the experience:
&lt;ul&gt;
&lt;li&gt;var is your friend.&lt;/li&gt;
&lt;li&gt;Use lambdas where possible. The implicitly typed arguments are
great for shaving off type names (just like var).&lt;/li&gt;
&lt;li&gt;LINQ extensions to IEnumerable and IList are great. ForEach and
Cast will save you a lot of code especially when combined with
lambdas.&lt;/li&gt;
&lt;li&gt;Use fields over properties. Remember that leaving off the access
modifier will mark them private.&lt;/li&gt;
&lt;li&gt;Question every single framework call you make and whether or not
it makes sense to encapsulate it. I ended up taking a bunch of the
common ones and creating static methods that wrap the calls.&lt;/li&gt;
&lt;li&gt;If you have a function that takes multiple parameters of the same
type, use an array declaration instead. (e.g. CalcDistance(Point a,
Point b) becomes CalcDistance(Point[] p) -- and of course the actual
function name should be trimmed to 1-2 characters)&lt;/li&gt;
&lt;li&gt;XAML vs. Code vs. external image -- In many cases, code is
preferred over XAML. The obvious exceptions here is XAML that makes
heavy use of Path.Data (code does not accept the shorthand notation,
AFAIK). The code for downloading an image using WebClient is fairly
small. Definitely worth looking at. Note that downloading remote XAML
is frowned upon by the contest moderators and should not be used.&lt;/li&gt;
&lt;li&gt;Consider subclassing commonly-used non-sealed framework classes.
Unfortunately, all of the common long-named classes I was using were
sealed, so I couldn't do this... but I wanted to try and subclass
framework classes that I used a lot so that I wouldn't waste space
with the type name that often.&lt;/li&gt;
&lt;li&gt;Place all of your CODE in a single file so that you only have to
take up space for "using" directives once. (Note: you might have to
add some class assignment directives as well e.g. using
Path=System.Windows.Shapes.Path when System.IO is also imported)&lt;/li&gt;
&lt;li&gt;Cleanup all of the whitespace. Remember special spacing rules
like int[]a and int?a are valid and do not require spacing after the
type name due to the non-alpha character.&lt;/li&gt;
&lt;/ul&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5164732438256297952-4874383530176135797?l=bragosphere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bragosphere.blogspot.com/feeds/4874383530176135797/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5164732438256297952&amp;postID=4874383530176135797' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/4874383530176135797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/4874383530176135797'/><link rel='alternate' type='text/html' href='http://bragosphere.blogspot.com/2009/01/blog-post.html' title='MIX09 10K Smart Coding Challenge'/><author><name>Steve Commisso</name><uri>http://www.blogger.com/profile/12878739312946444949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_gl38edFX2wM/SV-lj1Se3jI/AAAAAAAAABo/_pIWg8UzE8w/s72-c/1-3-2009+10-43-55+AM.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5164732438256297952.post-3571095892343652234</id><published>2008-12-28T18:42:00.000-08:00</published><updated>2008-12-29T06:47:56.022-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='entities'/><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='silverlight 2'/><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='linq'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='wcf'/><title type='text'>Consuming RESTful Web Services in Silverlight</title><content type='html'>&lt;h3&gt;Overview&lt;/h3&gt;
&lt;div class="Article"&gt;
This post is an extension of &lt;a href="http://www.robbagby.com"&gt;Rob Bagby's&lt;/a&gt; series on RESTful services. His &lt;a href="http://blogs.msdn.com/bags/archive/2008/11/10/rest-in-wcf-part-xi-tunneling-put-through-post.aspx"&gt;11th post&lt;/a&gt; details setting up a RESTful WCF service that can be consumed in &lt;a href="http://www.silverlight.net"&gt;Silverlight&lt;/a&gt;.
&lt;br /&gt;&lt;br /&gt;
The key points are:
&lt;ul&gt;
&lt;li&gt;Creating a new &lt;strong&gt;Service Host Factory&lt;/strong&gt; and &lt;strong&gt;Interceptor&lt;/strong&gt; to support HTTP Verb tunneling, since Silverlight supports only &lt;strong&gt;GET&lt;/strong&gt; and &lt;strong&gt;POST&lt;/strong&gt; verbs.&lt;/li&gt;
&lt;li&gt;Issuing calls from a client application to the RESTful service (including &lt;strong&gt;Silverlight&lt;/strong&gt; and &lt;strong&gt;Fiddler&lt;/strong&gt;)&lt;/li&gt;
&lt;/ul&gt;
This provides a great starting point for creating RESTful services and consuming them with &lt;strong&gt;Silverlight&lt;/strong&gt;, so I decided to create a RESTful service layer around &lt;a href="http://www.zleek.com"&gt;Zleek&lt;/a&gt; that utilizes LINQ to Entities.
&lt;br /&gt;&lt;br /&gt;
Here are my take-aways from the experience:
&lt;ul&gt;
&lt;li&gt;The &lt;a href="http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=18830"&gt;WCF Rest Starter Kit&lt;/a&gt; makes generating RESTful services extremely easy!&lt;/li&gt;
&lt;li&gt;The ADO.NET generated &lt;strong&gt;entity classes&lt;/strong&gt; are declared as &lt;strong&gt;partial&lt;/strong&gt; so that you can easily extend them with your business logic.&lt;/li&gt;
&lt;li&gt;You should create a separate &lt;strong&gt;Data Contract&lt;/strong&gt; version of your &lt;strong&gt;entities&lt;/strong&gt; in order to facilitate &lt;strong&gt;serialization&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
I updated my &lt;strong&gt;Agnition.Silverlight.Utils&lt;/strong&gt; library (see my &lt;a href="http://bragosphere.blogspot.com/2008/12/silverlight-extenders-add.html"&gt;Previous Post&lt;/a&gt; on Silverlight Extensions) with some utility classes for dealing with RESTful services, including request creation and serialization.
&lt;/div&gt;
&lt;br /&gt;
&lt;h3&gt;Step-By-Step&lt;/h3&gt;
&lt;div class="Article"&gt;
&lt;ol style="counter-reset: item"&gt;
&lt;li&gt;Download the &lt;a href="http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=18830"&gt;WCF Rest Starter Kit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Create a blank solution and add the &lt;strong&gt;Microsoft.ServiceModel.Web&lt;/strong&gt; project from the starter kit as well as the &lt;strong&gt;Agnition.Silverlight.Utils&lt;/strong&gt; project into it.&lt;/li&gt;
&lt;li&gt;Create a class library for your ADO.NET Entities&lt;/li&gt;
&lt;li&gt;Create an Entity Data Model from your database&lt;br /&gt;
&lt;a href="http://www.stevecommisso.com/bragosphere/posts/122808/img0.jpg" target="_blank"&gt;&lt;img style="display:block;border:0px;margin:0px 0px 0px -73px;text-align:center;cursor:pointer;cursor:hand;width:460px;height:194px;" src="http://www.stevecommisso.com/bragosphere/posts/122808/img0s.jpg" border="0" alt="Creating a Data Model" id="BLOGGER_PHOTO_ID_5285037365990159266" /&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Create partial classes for each of your entities that you wish to write business logic or create data contracts for. Ideally this will be in a separate class library project.&lt;/li&gt;
&lt;li&gt;Create a class library for your data contracts.&lt;/li&gt;
&lt;li&gt;Create a Silverlight class library for data contracts. You will add all data contracts here as &lt;strong&gt;existing links&lt;/strong&gt; to your other data contracts library to facilitate code sharing between your .NET 3.5 and Silverlight 2.0 libraries.&lt;br /&gt;
&lt;a href="http://www.stevecommisso.com/bragosphere/posts/122808/img1.jpg" target="_blank"&gt;&lt;img style="display:block;border:0px;margin:0px 0px 0px -73px;text-align:center;cursor:pointer;cursor:hand;width:460px;height:167px;" src="http://www.stevecommisso.com/bragosphere/posts/122808/img1s.jpg" border="0" alt="Add Existing Item" id="BLOGGER_PHOTO_ID_5285037664804302450" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.stevecommisso.com/bragosphere/posts/122808/img2.jpg" target="_blank"&gt;&lt;img style="display:block;border:0px;margin:0px 0px 0px -73px;text-align:center;cursor:pointer;cursor:hand;width:460px;height:312px;" src="http://www.stevecommisso.com/bragosphere/posts/122808/img2s.jpg" border="0" alt="Add as Link" id="BLOGGER_PHOTO_ID_5285037987445207714" /&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Optionally create Silverlight business entity classes (possibly in another library) for your Silverlight application.&lt;/li&gt;
&lt;li&gt;Create a Silverlight application that you will use as your client. Ideally you should create a separate ASP.NET web application linked to the Silverlight application for ease-of-testing.&lt;/li&gt;
&lt;/ol&gt;
At this point, your solution structure should look similar to the following:&lt;br /&gt;
&lt;a href="http://www.stevecommisso.com/bragosphere/posts/122808/img3.jpg" target="_blank"&gt;&lt;img style="display:block;border:0px;margin:0px 0px 0px 0px;text-align:center;cursor:pointer; cursor:hand;width:263px;height:184px;" src="http://www.stevecommisso.com/bragosphere/posts/122808/img3s.jpg" border="0" alt="Sample Solution" id="BLOGGER_PHOTO_ID_5285043446976479346" /&gt;&lt;/a&gt;&lt;br /&gt;
Now we can start fleshing out the service and client. Let's start out by creating the service. Follow &lt;a href="http://blogs.msdn.com/bags/archive/2008/11/10/rest-in-wcf-part-xi-tunneling-put-through-post.aspx"&gt;Rob's Post&lt;/a&gt; to walk-through creating your &lt;strong&gt;Service Host Factory&lt;/strong&gt; and &lt;strong&gt;Interceptor&lt;/strong&gt;. After that is complete, get started making the sevice more accessible to Silverlight.
&lt;ol style="counter-reset: item 8"&gt;
&lt;li&gt;Remember those data contract libraries? Now it's time to flesh them out. For each entity, create a class with public properties for each piece of data you wish to expose. You can include relational properties this way as well. Here is an example:&lt;br /&gt;
&lt;a href="http://www.stevecommisso.com/bragosphere/posts/122808/img4.jpg" target="_blank"&gt;&lt;img style="display:block;border:0px;margin:0px 0px 0px 0px;text-align:center;cursor:pointer;cursor:hand;width:305px;height:544px;" src="http://www.stevecommisso.com/bragosphere/posts/122808/img4s.jpg" border="0" alt="Example Data Contract" id="BLOGGER_PHOTO_ID_5285038211721975586" /&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Provide a way to project your entity class into your data contract. The easiest way (syntactically) to do this is to create an operator that will allow you to project the entity class into your data contract type while using casting syntax. The following screenshot illustrates both creating the operator and using the cast syntax to perform conversions:&lt;br /&gt;
&lt;a href="http://www.stevecommisso.com/bragosphere/posts/122808/img5.jpg" target="_blank"&gt;&lt;img style="display:block;border:0px;margin:0px -20px 0px -73px;text-align:center;cursor:pointer;cursor:hand;width:460px;height:385px;" src="http://www.stevecommisso.com/bragosphere/posts/122808/img5s.jpg" border="0" alt="Projecting Into a Data Contract" id="BLOGGER_PHOTO_ID_5285038365449444514" /&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Create a web service method using &lt;strong&gt;OperationContract&lt;/strong&gt; and &lt;strong&gt;WebInvoke&lt;/strong&gt; (or &lt;strong&gt;WebGet&lt;/strong&gt;) attributes. Remember that to be truly RESTful, retrieval operations should use &lt;strong&gt;GET&lt;/strong&gt;, inserts/updates should use &lt;strong&gt;PUT&lt;/strong&gt;, deletes should use &lt;strong&gt;DELETE&lt;/strong&gt; and appends should use &lt;strong&gt;POST&lt;/strong&gt;. Response codes should be used effectively as well. Here is a &lt;strong&gt;GET&lt;/strong&gt; example:&lt;br /&gt;
&lt;a href="http://www.stevecommisso.com/bragosphere/posts/122808/img6.jpg" target="_blank"&gt;&lt;img style="display:block;border:0px;margin:0px 0px 0px -73px;text-align:center;cursor:pointer;cursor:hand;width:460px;height:399px;" src="http://www.stevecommisso.com/bragosphere/posts/122808/img6s.jpg" border="0" alt="Example Web Method" id="BLOGGER_PHOTO_ID_5285038476103404226" /&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
At this point you can either test the service using &lt;a href="http://www.fiddlertool.com/fiddler/"&gt;Fiddler&lt;/a&gt; (see &lt;a href="http://blogs.msdn.com/bags/archive/2008/11/10/rest-in-wcf-part-xi-tunneling-put-through-post.aspx"&gt;Rob's post&lt;/a&gt;), or go ahead and create the client application.
&lt;ol style="counter-reset: item 12"&gt;
&lt;li&gt;Create a way to get the service URL into the Silverlight application. I like to use startup parameters. Here is how they are declared:&lt;br /&gt;
&lt;a href="http://www.stevecommisso.com/bragosphere/posts/122808/img7.jpg" target="_blank"&gt;&lt;img style="display:block;border:0px;margin:0px 0px 0px -73px;text-align:center;cursor:pointer;cursor:hand;width:460px;height:94px;" src="http://www.stevecommisso.com/bragosphere/posts/122808/img7s.jpg" border="0" alt="Init Params" id="BLOGGER_PHOTO_ID_5285038687942132738" /&gt;&lt;/a&gt;&lt;br /&gt;
They can only be extracted in the &lt;strong&gt;Application.Startup&lt;/strong&gt; event, so I like to create a &lt;strong&gt;Configuration&lt;/strong&gt; class that gives strongly-typed access to my parameters later.&lt;br /&gt;
&lt;a href="http://www.stevecommisso.com/bragosphere/posts/122808/img8.jpg" target="_blank"&gt;&lt;img style="display:block;border:0px;margin:0px 0px 0px -73px;text-align:center;cursor:pointer;cursor:hand;width:460px;height:266px;" src="http://www.stevecommisso.com/bragosphere/posts/122808/img8s.jpg" border="0" alt="Reading Init Params" id="BLOGGER_PHOTO_ID_5285039264114535426" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;a href="http://www.stevecommisso.com/bragosphere/posts/122808/img9.jpg" target="_blank"&gt;&lt;img style="display:block;border:0px;margin:0px 0px 0px -73px;text-align:center;cursor:pointer;cursor:hand;width:460px;height:334px;" src="http://www.stevecommisso.com/bragosphere/posts/122808/img9s.jpg" border="0" alt="Sample Configuration Class" id="BLOGGER_PHOTO_ID_5285039480739406578" /&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Now we are ready to call the service and deserialize the result:&lt;br /&gt;
&lt;a href="http://www.stevecommisso.com/bragosphere/posts/122808/img10.jpg" target="_blank"&gt;&lt;img style="display:block;border:0px;margin:0px 0px 0px -73px;text-align:center;cursor:pointer; cursor:hand;width:460px;height:94px;" src="http://www.stevecommisso.com/bragosphere/posts/122808/img10s.jpg" border="0" alt="Call Service from Silverlight" id="BLOGGER_PHOTO_ID_5285043612749698130" /&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
That's it! Easier that you thought it would be, right? Please post any comments/questions you have about this. &lt;a href="http://www.stevecommisso.com/Test/Extenders/Extenders%20Source%20Code.zip"&gt;Here&lt;/a&gt; is the updated &lt;a href="http://www.stevecommisso.com/Test/Extenders/Extenders%20Source%20Code.zip"&gt;Agnition.Silverlight.Utils&lt;/a&gt; library.
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5164732438256297952-3571095892343652234?l=bragosphere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bragosphere.blogspot.com/feeds/3571095892343652234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5164732438256297952&amp;postID=3571095892343652234' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/3571095892343652234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/3571095892343652234'/><link rel='alternate' type='text/html' href='http://bragosphere.blogspot.com/2008/12/consuming-restful-web-services-in.html' title='Consuming RESTful Web Services in Silverlight'/><author><name>Steve Commisso</name><uri>http://www.blogger.com/profile/12878739312946444949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5164732438256297952.post-3450558716542708670</id><published>2008-12-21T19:38:00.000-08:00</published><updated>2008-12-30T19:44:23.531-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='family album'/><category scheme='http://www.blogger.com/atom/ns#' term='zleek'/><category scheme='http://www.blogger.com/atom/ns#' term='silverlight 2'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><title type='text'>Silverlight Extenders</title><content type='html'>&lt;div style="font-style: italic; font-weight:bold; margin-bottom: 15px; color: #FF0000"&gt;Source updated 12/24 with cross-browser support&lt;/div&gt;&lt;div style="font-style: italic; font-weight:bold; margin-bottom: 15px; color: #FF0000"&gt;Source updated 12/30 with RotateScaleExtender repaint fix&lt;/div&gt;
Work on the final version of &lt;a href="http://www.zleek.com/"&gt;Zleek &lt;/a&gt;is progressing nicely. The &lt;a href="http://www.stevecommisso.com/bragosphere/zleek2.jpg"&gt;new UI&lt;/a&gt; is coming along, as well as the backend. The new features, including integration with other photo services and video support, are just about complete as well.
&lt;br /&gt;&lt;br/&gt;
Over the coming months before our release, I will be posting code snippets and libraries that I put together for Zleek that may be helpful for other &lt;a href="http://www.silverlight.net/"&gt;Silverlight &lt;/a&gt;developers.
&lt;br /&gt;&lt;br/&gt;
This first post is a combination of a few extenders that I put together:
&lt;ul&gt;&lt;li&gt;&lt;b&gt;DragExtender&lt;/b&gt;: Adds mouse drag functionality to any FrameworkElement&lt;/li&gt;&lt;li&gt;&lt;b&gt;RotateScaleXtender&lt;/b&gt;: Adds mouse rotate/scale functionality to any FrameworkElement&lt;/li&gt;&lt;li&gt;&lt;b&gt;KeyExtender&lt;/b&gt;: Adds extra keyboard support, including handling of DOM events and extra keys&lt;/li&gt;&lt;li&gt;&lt;b&gt;FillContainerExtender&lt;/b&gt;: Automatically resizes the Silverlight application to fill its container.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Here is the &lt;a href="http://www.stevecommisso.com/Test/Extenders/TestExtenders.html"&gt;running example&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The source code in the test harness is pretty simple. You declare an instance of the extender and give it a reference to the FrameworkElement you want to add functionality to, and the extender does the rest. There are extensibility points inside of the extenders that should make them useful for any application.&lt;/p&gt;&lt;p&gt;Here is the &lt;a href="http://www.stevecommisso.com/Test/Extenders/Extenders%20Source%20Code.zip"&gt;source code&lt;/a&gt;, and here's a snippet from the test harness showing example usage:&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Controls;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; Agnition.Silverlight.Input;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; Agnition.Silverlight.Controls;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; ExtenderTestHarness&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;{&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;  &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Page : UserControl&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;  {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; Page() {&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;      InitializeComponent();&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;      &lt;span class="rem"&gt;// Initialize extenders&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;      _fillContainerExtender = &lt;span class="kwrd"&gt;new&lt;/span&gt; FillContainerExtender(&lt;span class="kwrd"&gt;this&lt;/span&gt;.LayoutRoot);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;      _keyExtender = &lt;span class="kwrd"&gt;new&lt;/span&gt; KeyExtender(&lt;span class="kwrd"&gt;this&lt;/span&gt;, &lt;span class="kwrd"&gt;true&lt;/span&gt;, &lt;span class="kwrd"&gt;true&lt;/span&gt;, &lt;span class="kwrd"&gt;true&lt;/span&gt;);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;      _keyExtender.KeyDown += &lt;span class="kwrd"&gt;new&lt;/span&gt; EventHandler&amp;lt;KeyCodeEventArgs&amp;gt;(KeyExtender_KeyDown);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;      _keyExtender.KeyUp += &lt;span class="kwrd"&gt;new&lt;/span&gt; EventHandler&amp;lt;KeyCodeEventArgs&amp;gt;(KeyExtender_KeyUp);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;      _dragExtender = &lt;span class="kwrd"&gt;new&lt;/span&gt; DragExtender(&lt;span class="kwrd"&gt;this&lt;/span&gt;.DragMe);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;      _dragExtender.StateChangeStart += &lt;span class="kwrd"&gt;new&lt;/span&gt; EventHandler&amp;lt;StateChangingEventArgs&amp;gt;(DragExtender_StateChangeStart);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;      _rotateScaleExtender = &lt;span class="kwrd"&gt;new&lt;/span&gt; RotateScaleExtender(&lt;span class="kwrd"&gt;this&lt;/span&gt;.DragMe, 0.75, 6);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;      _rotateScaleExtender.StateChangeStart += &lt;span class="kwrd"&gt;new&lt;/span&gt; EventHandler&amp;lt;StateChangingEventArgs&amp;gt;(RotateScaleExtender_StateChangeStart);&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; FullScreenButton_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, System.Windows.RoutedEventArgs e) {&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;      &lt;span class="rem"&gt;// Toggle full screen&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;      _fillContainerExtender.IsFullScreen = !_fillContainerExtender.IsFullScreen;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;      &lt;span class="rem"&gt;// Toggle display of warning&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;      FullScreenWarning.Visibility =&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;        FullScreenWarning.Visibility == System.Windows.Visibility.Collapsed ?&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;        System.Windows.Visibility.Visible : System.Windows.Visibility.Collapsed;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; KeyExtender_KeyDown(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, KeyCodeEventArgs e) {&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;      &lt;span class="rem"&gt;// Demonstrates KeyCode event arguments Key and TextValue&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;      &lt;span class="rem"&gt;// Show which key was pressed&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;      &lt;span class="kwrd"&gt;if&lt;/span&gt; (e.Key == KeyCode.Shift) {&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;        MouseMode.Text = &lt;span class="str"&gt;"Mouse Mode: Rotate/Scale"&lt;/span&gt;;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;      }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt;      &lt;span class="kwrd"&gt;else&lt;/span&gt; {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;        &lt;span class="rem"&gt;// Don't show message on shift, to prevent spamming while holding&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  47:  &lt;/span&gt;        KeysPressed.Text += e.Key.ToString() + &lt;span class="str"&gt;" "&lt;/span&gt;;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;      }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  49:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  50:  &lt;/span&gt;      &lt;span class="rem"&gt;// Render the text&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  51:  &lt;/span&gt;      &lt;span class="kwrd"&gt;if&lt;/span&gt; (e.TextValue != &lt;span class="kwrd"&gt;null&lt;/span&gt;) {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  52:  &lt;/span&gt;        KeyText.Text += e.TextValue;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  53:  &lt;/span&gt;      }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  54:  &lt;/span&gt;      &lt;span class="kwrd"&gt;else&lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; ((e.Key == KeyCode.Backspace) &amp;amp;&amp;amp; (KeyText.Text.Length &amp;gt; 0)) {&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  55:  &lt;/span&gt;        &lt;span class="rem"&gt;// Check for backspace&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  56:  &lt;/span&gt;        KeyText.Text = KeyText.Text.Substring(0, KeyText.Text.Length - 1);&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  57:  &lt;/span&gt;      }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  58:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  59:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  60:  &lt;/span&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; KeyExtender_KeyUp(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, KeyCodeEventArgs e) {&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  61:  &lt;/span&gt;      &lt;span class="rem"&gt;// Demonstrates KeyCode event arguments Key and TextValue&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  62:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  63:  &lt;/span&gt;      &lt;span class="rem"&gt;// Show which key was pressed&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  64:  &lt;/span&gt;      &lt;span class="kwrd"&gt;if&lt;/span&gt; (e.Key == KeyCode.Shift) {&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  65:  &lt;/span&gt;        MouseMode.Text = &lt;span class="str"&gt;"Mouse Mode: Drag"&lt;/span&gt;;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  66:  &lt;/span&gt;      }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  67:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  68:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  69:  &lt;/span&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; DragExtender_StateChangeStart(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, StateChangingEventArgs e) {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  70:  &lt;/span&gt;      &lt;span class="rem"&gt;// Demonstrates how to cancel an event in order to combine two MouseMovementExtenders&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  71:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  72:  &lt;/span&gt;      &lt;span class="rem"&gt;// If not holding shift, allow dragging&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  73:  &lt;/span&gt;      e.CancelEvent = _keyExtender.IsShiftDown;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  74:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  75:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  76:  &lt;/span&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; RotateScaleExtender_StateChangeStart(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, StateChangingEventArgs e) {&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  77:  &lt;/span&gt;      &lt;span class="rem"&gt;// Demonstrates how to cancel an event in order to combine two MouseMovementExtenders&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  78:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  79:  &lt;/span&gt;      &lt;span class="rem"&gt;// If holding shift, allow rotate/scale&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  80:  &lt;/span&gt;      e.CancelEvent = !_keyExtender.IsShiftDown;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  81:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  82:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  83:  &lt;/span&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; FillContainerExtender _fillContainerExtender;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  84:  &lt;/span&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; KeyExtender _keyExtender;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  85:  &lt;/span&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; DragExtender _dragExtender;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  86:  &lt;/span&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; RotateScaleExtender _rotateScaleExtender;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  87:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  88:  &lt;/span&gt;  }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  89:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5164732438256297952-3450558716542708670?l=bragosphere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bragosphere.blogspot.com/feeds/3450558716542708670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5164732438256297952&amp;postID=3450558716542708670' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/3450558716542708670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/3450558716542708670'/><link rel='alternate' type='text/html' href='http://bragosphere.blogspot.com/2008/12/silverlight-extenders-add.html' title='Silverlight Extenders'/><author><name>Steve Commisso</name><uri>http://www.blogger.com/profile/12878739312946444949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5164732438256297952.post-1902548163018372842</id><published>2008-07-13T19:48:00.000-07:00</published><updated>2008-07-13T20:10:43.178-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><title type='text'>New Job Opportunity</title><content type='html'>I recently received a package in the mail containing the following letter:

&lt;div style="border: solid 1px #888; color: #e8e8e8; background-color: #7491ad; padding: 10px;"&gt;Mr. Stephen A. Commisso:

We at Thompson Checkwriter Co., Inc. are in the process of upgrading our computer system. We have been looking into many different options, and think we have found the most useful, top of the line system. We elclosed&lt;i&gt;[sic]&lt;/i&gt; a diskette with the program we plan on upgrading to, and a booklet that outlines its use. We have never been in the computer business, and we do not know anything about how to use them. We are in need of training.

We have heard your name around the industry, and we would be honored to have you come to our company and train our employees how to use this top of the line system. We will pay top dollar for your services. We will need you to set up the system, and train our employees on its use and how it can improve our company.

Thank you very much for your consideration, and we will be earnestly awaiting your response.&lt;/div&gt;
Wow, sounds promising! Here are the contents of the package:

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.stevecommisso.com/Bragosphere/thompson_checkwriter.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px;" src="http://www.stevecommisso.com/Bragosphere/thompson_checkwriter.jpg" border="0" alt="" /&gt;&lt;/a&gt;
I don't know, I think I should take it... I'll keep these on my desk at work from now on and see if anyone notices. I only wish I could use these disks. If only I had a copy in 9 1/2"...

My brother has a great sense of humor.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5164732438256297952-1902548163018372842?l=bragosphere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bragosphere.blogspot.com/feeds/1902548163018372842/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5164732438256297952&amp;postID=1902548163018372842' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/1902548163018372842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/1902548163018372842'/><link rel='alternate' type='text/html' href='http://bragosphere.blogspot.com/2008/07/new-job-opportunity.html' title='New Job Opportunity'/><author><name>Steve Commisso</name><uri>http://www.blogger.com/profile/12878739312946444949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5164732438256297952.post-3156061794094032155</id><published>2008-07-13T19:43:00.000-07:00</published><updated>2008-07-13T20:07:28.819-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zleek'/><category scheme='http://www.blogger.com/atom/ns#' term='bragosphere'/><title type='text'>Zleek</title><content type='html'>The Bragosphere is now &lt;a href="http://www.zleek.com/"&gt;Zleek&lt;/a&gt;! Same great product, new name.

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.zleek.com"&gt;&lt;img style="margin: auto; display: block; text-align: center; cursor: pointer; width: 244px; height: 127px;" src="http://www.zleek.com/images/Zleek_Logo_large.jpg" alt="Zleek" title="Zleek" border="0" /&gt;&lt;/a&gt;

There have been a few minor changes as well, including a new header that shows the latest public Zleek Pages.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5164732438256297952-3156061794094032155?l=bragosphere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bragosphere.blogspot.com/feeds/3156061794094032155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5164732438256297952&amp;postID=3156061794094032155' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/3156061794094032155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/3156061794094032155'/><link rel='alternate' type='text/html' href='http://bragosphere.blogspot.com/2008/07/zleek.html' title='Zleek'/><author><name>Steve Commisso</name><uri>http://www.blogger.com/profile/12878739312946444949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5164732438256297952.post-5817589933834507787</id><published>2008-06-21T13:29:00.000-07:00</published><updated>2008-06-21T13:36:58.009-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='silverlight 2'/><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='bragosphere'/><title type='text'>Firefox 2/3 and The Bragosphere</title><content type='html'>I was able to fix most of the issues affecting Firefox users. All &lt;a href="http://www.thebragosphere.com/tutorial.aspx"&gt;Brag Page&lt;/a&gt; functionality now works in Firefox, except &lt;a href="http://www.thebragosphere.com/tutorial.aspx#FullScreen"&gt;Full Screen Mode&lt;/a&gt; intermittently. this is a &lt;a href="http://silverlight.net/forums/t/12995.aspx"&gt;documented bug&lt;/a&gt; in &lt;a href="http://www.microsoft.com/silverlight"&gt;Silverlight 2 Beta 2&lt;/a&gt;, and will hopefully be fixed by the time the final version rolls out. That said, yesterday I couldn't use full screen in Firefox, and today I can. I'm not sure what triggers the failure, but if I find out, I'll post it here.

The updates to &lt;a href="http://www.thebragosphere.com"&gt;The Bragosphere&lt;/a&gt; will be slower and slower now that the majority of the functionality is complete. Watch this blog for details of new enhancements!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5164732438256297952-5817589933834507787?l=bragosphere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bragosphere.blogspot.com/feeds/5817589933834507787/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5164732438256297952&amp;postID=5817589933834507787' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/5817589933834507787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/5817589933834507787'/><link rel='alternate' type='text/html' href='http://bragosphere.blogspot.com/2008/06/firefox-23-and-bragosphere.html' title='Firefox 2/3 and The Bragosphere'/><author><name>Steve Commisso</name><uri>http://www.blogger.com/profile/12878739312946444949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5164732438256297952.post-836702407734800488</id><published>2008-06-19T01:16:00.000-07:00</published><updated>2008-06-19T01:19:54.926-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bragosphere'/><title type='text'>New Look and Feel</title><content type='html'>&lt;a href="http://www.linkedin.com/in/swami108"&gt;Swami&lt;/a&gt; has put together a great new UI for &lt;a href="http://www.thebragosphere.com"&gt;The Bragosphere&lt;/a&gt;. Check it out!

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.stevecommisso.com/Bragosphere/newUI.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px;" src="http://www.stevecommisso.com/Bragosphere/newUI.jpg" border="0" alt="" /&gt;&lt;/a&gt;

Now on to the cross-browser fixes... Firefox/Safari users -- we haven't forgotten about you!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5164732438256297952-836702407734800488?l=bragosphere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bragosphere.blogspot.com/feeds/836702407734800488/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5164732438256297952&amp;postID=836702407734800488' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/836702407734800488'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/836702407734800488'/><link rel='alternate' type='text/html' href='http://bragosphere.blogspot.com/2008/06/new-look-and-feel.html' title='New Look and Feel'/><author><name>Steve Commisso</name><uri>http://www.blogger.com/profile/12878739312946444949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5164732438256297952.post-8234284375595884040</id><published>2008-06-16T22:40:00.001-07:00</published><updated>2008-06-16T22:40:39.595-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='family album'/><category scheme='http://www.blogger.com/atom/ns#' term='bragosphere'/><title type='text'>It's Here!</title><content type='html'>I can finally announce that The Bragosphere is live!

One more feature I never mentioned before: full screen mode. That's right, you can view your page layout in full-screen to get a better look at all your photos and videos!

Go. Check. It. Out. Now.

&lt;a href="http://www.thebragosphere.com"&gt;The Bragosphere&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5164732438256297952-8234284375595884040?l=bragosphere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bragosphere.blogspot.com/feeds/8234284375595884040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5164732438256297952&amp;postID=8234284375595884040' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/8234284375595884040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/8234284375595884040'/><link rel='alternate' type='text/html' href='http://bragosphere.blogspot.com/2008/06/its-here.html' title='It&apos;s Here!'/><author><name>Steve Commisso</name><uri>http://www.blogger.com/profile/12878739312946444949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5164732438256297952.post-2906961689586689207</id><published>2008-06-14T09:18:00.000-07:00</published><updated>2008-06-16T22:41:33.411-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='silverlight 2'/><category scheme='http://www.blogger.com/atom/ns#' term='bragosphere'/><title type='text'>Customizing a Silverlight Install Experience</title><content type='html'>A while back when I first started the Bragosphere project, I came across this &lt;a href="http://www.timheuer.com/blog/archive/2008/03/25/creating-a-great-silverlight-deployment-experience.aspx"&gt;excellent post by Tim Heuer&lt;/a&gt;.

I put this off until now, but I think I've put together a decent installation experience with the help of &lt;a href="http://www.nikhilk.net/Silverlight-Analytics.aspx"&gt;some browser and platform detection javascript&lt;/a&gt;

Here are the results:

&lt;div style="text-align: center"&gt;
&lt;a href="http://www.stevecommisso.com/Bragosphere/installexperience.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px;" src="http://www.stevecommisso.com/Bragosphere/installexperience.jpg" border="0" alt="Standard Install Experience" /&gt;&lt;/a&gt;
Standard Install Experience
&lt;/div&gt;

&lt;div style="text-align: center"&gt;
&lt;a href="http://www.stevecommisso.com/Bragosphere/installexperience_unix.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px;" src="http://www.stevecommisso.com/Bragosphere/installexperience_unix.jpg" border="0" alt="*Nix Install Experience" /&gt;&lt;/a&gt;
*Nix Install Experience
&lt;/div&gt;

&lt;div style="text-align: center"&gt;
&lt;a href="http://www.stevecommisso.com/Bragosphere/installexperience_unsupported.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px;" src="http://www.stevecommisso.com/Bragosphere/installexperience_unsupported.jpg" border="0" alt="Unsupported Experience" /&gt;&lt;/a&gt;
Unsupported Experience
&lt;/div&gt;

I still have to skin the popup a bit, but the detection is working great!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5164732438256297952-2906961689586689207?l=bragosphere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bragosphere.blogspot.com/feeds/2906961689586689207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5164732438256297952&amp;postID=2906961689586689207' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/2906961689586689207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/2906961689586689207'/><link rel='alternate' type='text/html' href='http://bragosphere.blogspot.com/2008/06/customizing-silverlight-install.html' title='Customizing a Silverlight Install Experience'/><author><name>Steve Commisso</name><uri>http://www.blogger.com/profile/12878739312946444949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5164732438256297952.post-5357191639647698870</id><published>2008-06-11T19:05:00.000-07:00</published><updated>2008-06-11T19:23:21.809-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='silverlight 2'/><category scheme='http://www.blogger.com/atom/ns#' term='bragosphere'/><title type='text'>The Bragosphere Is Coming!</title><content type='html'>Well, it's about time I posted some screenshots here to show exactly what I've been up to. I won't make any promises about a release date, but I can tell you that The Bragosphere will be here very soon.

I just finished the integration with &lt;a href="http://www.silverlight.net"&gt;Silverlight 2 Beta 2&lt;/a&gt;, and have some minor tweaking to do on the site itself, but here is an early view of what it looks like:

&lt;a href="http://www.stevecommisso.com/Bragosphere/shot1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px;" src="http://www.stevecommisso.com/Bragosphere/shot1.jpg" border="0" alt="Bragosphere Screenshot 1" /&gt;&lt;/a&gt;

In the above picture you see a simple "Brag Page" that I've created with some standard &lt;a href="http://www.microsoft.com/windows/"&gt;Windows Vista&lt;/a&gt; Sample Pictures. The site allows users to upload pictures in bulk, complete with a progress bar with thumbnail images showing what file is currently being uploaded. Once uploaded, pictures can be arranged any way the page creator wants by resizing, positioning, and rotating the pictures. A few different page backgrounds can then be chosen, the default of which is designed to look like a photo album page. Once the design is complete, security settings can be configured. The page can be public, private, or assigned to groups created by the user.

&lt;a href="http://www.stevecommisso.com/Bragosphere/shot2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px;" src="http://www.stevecommisso.com/Bragosphere/shot2.jpg" border="0" alt="Bragosphere Screenshot 2" /&gt;&lt;/a&gt;

Once saved, the page is visible to other (allowed) users. These users can manipulate the page in any way they like to create their own layout, and can even print it off if they like. They cannot save the layout and at any time they can reset the layout back to its original state. The controls available to users include double clicking on an image to zoom in/out; right clicking on an image to zoom in/out, reset state, or download the image; right clicking on the page background to reset the entire page state, or download all the images in a zip file.

&lt;a href="http://www.stevecommisso.com/Bragosphere/shot3.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px;" src="http://www.stevecommisso.com/Bragosphere/shot3.jpg" border="0" alt="Bragosphere Screenshot 3" /&gt;&lt;/a&gt;

Multiple "Brag Pages" can be combined to create a "Brag Book", which can then be flipped through with the mouse just like you were turning the pages of an actual photo album! If the mouse is hovered over the top-left corner of the page, and a previous page is available, the corner will turn gold. Clicking and dragging will turn the page. Similarly, the bottom-right corner of the page allows you to go to the next page.

&lt;a href="http://www.stevecommisso.com/Bragosphere/shot4.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px;" src="http://www.stevecommisso.com/Bragosphere/shot4.jpg" border="0" alt="Bragosphere Screenshot 4" /&gt;&lt;/a&gt;

Did you think I was done going over all of the features? Well, not quite. As you can see in the above screenshot, there is also full-motion-video support!

Keep watching this space for more updates, and get ready to join The Bragosphere!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5164732438256297952-5357191639647698870?l=bragosphere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bragosphere.blogspot.com/feeds/5357191639647698870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5164732438256297952&amp;postID=5357191639647698870' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/5357191639647698870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/5357191639647698870'/><link rel='alternate' type='text/html' href='http://bragosphere.blogspot.com/2008/06/bragosphere-is-coming.html' title='The Bragosphere Is Coming!'/><author><name>Steve Commisso</name><uri>http://www.blogger.com/profile/12878739312946444949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5164732438256297952.post-7763295527491887156</id><published>2008-05-30T19:10:00.000-07:00</published><updated>2008-05-30T19:20:39.143-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='family album'/><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='bragosphere'/><title type='text'>Silverlight Project Updates</title><content type='html'>Wow, it's already been a month since my last post... and it's been busy one. I've been working non-stop in my spare time on a &lt;a href="http://www.silverlight.net"&gt;Silverlight 2.0&lt;/a&gt; project. I should be going live with it in the next week or two, so watch this space! I'm pretty excited about it. If you've read my &lt;a href="http://bragosphere.blogspot.com/2008/04/connecting-families-with-silverlight.html"&gt;earlier posts&lt;/a&gt; you can probably guess what it's going to be about.

Anyway, check out this post on &lt;a href="http://timheuer.com"&gt;Tim Heuer's blog&lt;/a&gt;. It would be pretty cool if this is where the web is headed:

&lt;a href="http://timheuer.com/blog/archive/2008/05/29/new-deep-zoom-samples.aspx"&gt;http://timheuer.com/blog/archive/2008/05/29/new-deep-zoom-samples.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5164732438256297952-7763295527491887156?l=bragosphere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bragosphere.blogspot.com/feeds/7763295527491887156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5164732438256297952&amp;postID=7763295527491887156' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/7763295527491887156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/7763295527491887156'/><link rel='alternate' type='text/html' href='http://bragosphere.blogspot.com/2008/05/bragosphere-live.html' title='Silverlight Project Updates'/><author><name>Steve Commisso</name><uri>http://www.blogger.com/profile/12878739312946444949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5164732438256297952.post-7690746650509147980</id><published>2008-04-29T18:00:00.000-07:00</published><updated>2008-05-02T06:59:19.847-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='other'/><title type='text'>Linkedin Networking</title><content type='html'>I'm really enjoying &lt;a href="http://www.linkedin.com"&gt;Linkedin&lt;/a&gt;. I've been able to reconnect with some old classmates at &lt;a href="http://www.asu.edu"&gt;ASU&lt;/a&gt; and it will help me stay in touch with my colleagues from previous positions I've held. If you haven't seen it yet (which you probably have -- I'm just always the last to find out about new things on the web), check it out -- it's basically a professional networking application.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5164732438256297952-7690746650509147980?l=bragosphere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bragosphere.blogspot.com/feeds/7690746650509147980/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5164732438256297952&amp;postID=7690746650509147980' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/7690746650509147980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/7690746650509147980'/><link rel='alternate' type='text/html' href='http://bragosphere.blogspot.com/2008/04/linkedin-networking.html' title='Linkedin Networking'/><author><name>Steve Commisso</name><uri>http://www.blogger.com/profile/12878739312946444949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5164732438256297952.post-5520141080183496952</id><published>2008-04-28T19:00:00.000-07:00</published><updated>2008-05-02T07:08:06.020-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='family album'/><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='silverlight'/><title type='text'>Connecting Families with Silverlight</title><content type='html'>One of the biggest hassles my family has concerns pictures. We take pictures on our digital camera, stick them on our PC, and let them sit there for months on end. Occasionally we may print a few or e-mail them to family. True, we could use a site like &lt;a href="http://www.flickr.com"&gt;Flickr&lt;/a&gt; to provide an online listing of your photos that family can share. This still leaves a lot to be desired.

When we're with family, we can show them printed pictures. They can handle the pictures, rotate them, look closely at fine details. If wehave the time we might create a photo album to show them, containing page layouts, possibly grouped around a specific theme, with the photos positioned however we like.

Why can't we do this on the web? I would like to be able to take pictures on my camera, stick them on my PC, upload them to a web site, and create a virtual photo album just how I want. I also want my family to be able to virtually "handle" these pictures by rotating, zooming, repositioning however they want.

Stay tuned as you'll be hearing more about this in the near future...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5164732438256297952-5520141080183496952?l=bragosphere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bragosphere.blogspot.com/feeds/5520141080183496952/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5164732438256297952&amp;postID=5520141080183496952' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/5520141080183496952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/5520141080183496952'/><link rel='alternate' type='text/html' href='http://bragosphere.blogspot.com/2008/04/connecting-families-with-silverlight.html' title='Connecting Families with Silverlight'/><author><name>Steve Commisso</name><uri>http://www.blogger.com/profile/12878739312946444949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5164732438256297952.post-1078405041117726565</id><published>2008-04-28T18:00:00.000-07:00</published><updated>2008-05-02T06:54:41.310-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='worship'/><title type='text'>Instrument Preferences</title><content type='html'>Over the past few years I've mostly been playing bass guitar, with keyboard thrown in occasionally. &lt;a href="http://www.danielbrymer.com"&gt;Daniel Brymer&lt;/a&gt;, on his last Sunday at &lt;a href="http://www.livingstreams.org"&gt;Living Streams&lt;/a&gt;, moved me over to the piano. Since then, I have been scheduled for piano maybe 1/3 of the time. I just received the May schedule and it looks like I'm back on the piano full time. I'm really looking forward to it as I've felt like I've let my piano skills degrade over the last few years while I played bass more, and hopefully I can improve my skills while not hitting too many bad notes in the process.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5164732438256297952-1078405041117726565?l=bragosphere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bragosphere.blogspot.com/feeds/1078405041117726565/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5164732438256297952&amp;postID=1078405041117726565' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/1078405041117726565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/1078405041117726565'/><link rel='alternate' type='text/html' href='http://bragosphere.blogspot.com/2008/04/instrument-preferences.html' title='Instrument Preferences'/><author><name>Steve Commisso</name><uri>http://www.blogger.com/profile/12878739312946444949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5164732438256297952.post-397476801355145901</id><published>2008-04-27T18:00:00.000-07:00</published><updated>2008-05-02T06:53:28.765-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='worship'/><title type='text'>Mat Weddle</title><content type='html'>Today was my second time on the &lt;a href="http://www.livingstreams.org"&gt;Living Streams&lt;/a&gt; worship team with &lt;a href="http://www.obadiahparker.com"&gt;Mat Weddle&lt;/a&gt;  (who you may recognize from &lt;a href="http://www.youtube.com/watch?v=8-8nkkOA_AM"&gt;YouTube&lt;/a&gt;) leading. He's a really great guy and I hope he gets scheduled for more Sundays. It seemed like he felt a lot more comfortable leading our church's worship service this past Sunday than he has in the past, and as a result the worship set was amazing. He has a sincere heart of worship, and a great ability to lead others into a genuine worship experience, and that was on display this past Sunday.

Unfortunately, the next time he is playing is on Mothers' Day, which I requested off (finally - I had played it 3 years in a row, which included my wife's first Mothers' Day - big oops!), so I'm not sure when we'll be playing together next, but I am looking forward to it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5164732438256297952-397476801355145901?l=bragosphere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bragosphere.blogspot.com/feeds/397476801355145901/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5164732438256297952&amp;postID=397476801355145901' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/397476801355145901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/397476801355145901'/><link rel='alternate' type='text/html' href='http://bragosphere.blogspot.com/2008/04/mat-weddle.html' title='Mat Weddle'/><author><name>Steve Commisso</name><uri>http://www.blogger.com/profile/12878739312946444949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5164732438256297952.post-3510661996887235233</id><published>2008-04-25T18:00:00.000-07:00</published><updated>2008-05-02T06:50:54.273-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='xaml'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><title type='text'>Silverlight Development</title><content type='html'>I am working on a &lt;a href="http://www.silverlight.net"&gt;Silverlight&lt;/a&gt; 2.0 project right now and got pointed to &lt;a href="http://www.timheuer.com"&gt;Tim Heuer's blog&lt;/a&gt; on one of my queries and found out that Tim is now working on the &lt;a href="http://www.silverlight.net"&gt;Silverlight&lt;/a&gt; team along with &lt;a href="http://silverlight.net/blogs/jesseliberty"&gt;Jesse Liberty&lt;/a&gt;. Tim is a great guy who lives in the Phoenix area and helped me when I was a consultant with &lt;a href="http://us.sogeti.com"&gt;Sogeti&lt;/a&gt;, as our local &lt;a href="http://www.microsoft.com"&gt;Microsoft&lt;/a&gt; developer evangelist.

If you're working with &lt;a href="http://www.silverlight.net"&gt;Silverlight&lt;/a&gt; and have any questions, check out his blog: &lt;a href="http://www.timheuer.com"&gt;~ Method Of Failed ~&lt;/a&gt;.

Aside from that, I'm pleasantly surprised at how easy it is to learn &lt;a href="http://www.xaml.net"&gt;XAML&lt;/a&gt; and the &lt;a href="http://www.silverlight.net"&gt;Silverlight&lt;/a&gt; model. I previously had no &lt;a href="http://en.wikipedia.org/wiki/Windows_Presentation_Foundation"&gt;WPF&lt;/a&gt; experience (my .NET 3.0 experience was limited to &lt;a href="http://en.wikipedia.org/wiki/Windows_Communication_Foundation"&gt;WCF&lt;/a&gt;), so I had no prior knowledge of &lt;a href="http://www.xaml.net"&gt;XAML&lt;/a&gt;, but was able to pick it up pretty quickly. Granted, I made (and keep making) plenty of newbie mistakes, but overall the learning curve has been pretty gentle. Of course, coming from the perspective of working with &lt;a href="http://www.cabpedia.com/index.php?title=Introduction_to_CAB"&gt;Microsoft CAB&lt;/a&gt; and the &lt;a href="http://msdn.microsoft.com/en-us/library/aa480482.aspx"&gt;Smart Client Software Factory&lt;/a&gt;, just about anything else will have a gently learning curve... but that's a topic for another post altogether. By the way, if you're working with that stuff, &lt;a href="http://neverindoubtnet.blogspot.com"&gt;Ward Bell&lt;/a&gt; rocks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5164732438256297952-3510661996887235233?l=bragosphere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bragosphere.blogspot.com/feeds/3510661996887235233/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5164732438256297952&amp;postID=3510661996887235233' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/3510661996887235233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/3510661996887235233'/><link rel='alternate' type='text/html' href='http://bragosphere.blogspot.com/2008/04/silverlight-development.html' title='Silverlight Development'/><author><name>Steve Commisso</name><uri>http://www.blogger.com/profile/12878739312946444949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5164732438256297952.post-8817126139577951189</id><published>2008-04-23T18:00:00.000-07:00</published><updated>2008-05-02T06:44:42.562-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='xaml'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><title type='text'>Rebooting the Web</title><content type='html'>If you're not a geek like myself, you probably haven't heard about &lt;a href="http://www.silverlight.net"&gt;Silverlight&lt;/a&gt;, &lt;a href="http://www.microsoft.com"&gt;Microsoft&lt;/a&gt;'s new web technology. As both a web developer and a client developer using the &lt;a href="http://www.microsoft.com/net"&gt;.NET platform&lt;/a&gt;, I see the strengths and weaknesses on both sides of the thick/thin client coin. &lt;a href="http://www.silverlight.net"&gt;Silverlight&lt;/a&gt;, especially &lt;a href="http://silverlight.net/GetStarted"&gt;Silverlight 2.0&lt;/a&gt;, blurs these lines. It allows developers to write what are essentially client applications on the web.

A few years ago, AJAX (using a technology created by Microsoft, and made popular by sites such as &lt;a href="http://maps.google.com"&gt;Google Maps&lt;/a&gt;), greatly enhanced web applications by doing away with the page refreshes between mouse clicks. This allowed developers to create a new generation of web applications that behaved more like client applications. This revolution was called &lt;a href="http://en.wikipedia.org/wiki/Web_2"&gt;Web 2.0&lt;/a&gt;. It was a great improvement, however web applications were still handicapped by the visual confines of &lt;a href="http://en.wikipedia.org/wiki/Html"&gt;HTML&lt;/a&gt; and the browser. Of course, a compelling user experience could still be created with &lt;a href="http://www.adobe.com/products/flash"&gt;Flash&lt;/a&gt;, but that meant that the &lt;a href="http://www.adobe.com/products/flash"&gt;Flash&lt;/a&gt; content would not be indexed by a search engine.

&lt;a href="http://www.silverlight.net"&gt;Silverlight&lt;/a&gt; is the next evolution of the web. As Jeff Prosise put it last year, Microsoft &lt;a href="http://jeffbishop.com/the-desert-skies/microsoft-rebooted-the-web-yesterday"&gt;"rebooted the web"&lt;/a&gt; by giving developers a declarative programming model using &lt;a href="http://www.xaml.net"&gt;XML (XAML)&lt;/a&gt;, that allows for the creation of &lt;a href="http://www.adobe.com/products/flash"&gt;Flash&lt;/a&gt;-like user interfaces that can also be indexed be search engines (not to mention it has killer performance).

In the past year since the announcement of &lt;a href="http://www.silverlight.net"&gt;Silverlight&lt;/a&gt; (formerly WPF/E), there have been some great ideas developed around it. Most early adopters used &lt;a href="http://www.silverlight.net"&gt;Silverlight&lt;/a&gt; simply for &lt;a href="http://www.microsoft.com/silverlight/overview/streaming.aspx"&gt;streaming HD-video&lt;/a&gt;, but that is just the tip of the iceberg. Check out the &lt;a href="http://www.silverlight.net/showcase"&gt;Silverlight Showcase&lt;/a&gt; to see what is possible with &lt;a href="http://www.silverlight.net"&gt;Silverlight&lt;/a&gt; 1.0.

&lt;a href="http://www.silverlight.net"&gt;Silverlight&lt;/a&gt; 2.0, currently in Beta 1, expands on the &lt;a href="http://www.silverlight.net"&gt;Silverlight&lt;/a&gt; model by including a version of the &lt;a href="http://www.microsoft.com/net"&gt;.NET platform&lt;/a&gt; to write code against. This opens the door for .NET developers who have never touched &lt;a href="http://www.adobe.com/products/flash"&gt;Flash&lt;/a&gt; to write applications on the web that provide experiences that users never thought possible on the web.

It will be interesting to see how quickly this technology (or alternatively, &lt;a href="http://www.adobe.com/products/flex"&gt;Flex&lt;/a&gt;, but I'm rooting for &lt;a href="http://www.silverlight.net"&gt;Silverlight&lt;/a&gt;) is adopted and how the web will be transformed. It is an exciting time to be a web developer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5164732438256297952-8817126139577951189?l=bragosphere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bragosphere.blogspot.com/feeds/8817126139577951189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5164732438256297952&amp;postID=8817126139577951189' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/8817126139577951189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/8817126139577951189'/><link rel='alternate' type='text/html' href='http://bragosphere.blogspot.com/2008/04/rebooting-web.html' title='Rebooting the Web'/><author><name>Steve Commisso</name><uri>http://www.blogger.com/profile/12878739312946444949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5164732438256297952.post-8617458086694069046</id><published>2008-04-21T18:00:00.000-07:00</published><updated>2008-05-02T07:10:14.691-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='other'/><title type='text'>Introduction</title><content type='html'>Well, I finally bit the bullet (thanks &lt;a href="http://www.raillife.com/blog"&gt;Kelly&lt;/a&gt;!) and decided to create a blog. It will primarily focus on &lt;a href="http://www.microsoft.com"&gt;Microsoft&lt;/a&gt; technologies and my experience with them, and hopefully provide some insight into the world of software development to the uninitiated. I may also write about music, life, and other bits and pieces. Occasionally there will be code walkthroughs, so to you non-geek types, you have been warned!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5164732438256297952-8617458086694069046?l=bragosphere.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bragosphere.blogspot.com/feeds/8617458086694069046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5164732438256297952&amp;postID=8617458086694069046' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/8617458086694069046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5164732438256297952/posts/default/8617458086694069046'/><link rel='alternate' type='text/html' href='http://bragosphere.blogspot.com/2008/04/introduction.html' title='Introduction'/><author><name>Steve Commisso</name><uri>http://www.blogger.com/profile/12878739312946444949</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
