<?xml version="1.0" encoding="utf-8"?><rss version="2.0"><channel><title>Blog Entries</title><description>
Sort: DisplayedDate Desc</description><language>en-us</language><generator>Agility CMS</generator><lastBuildDate>9/17/2010 2:49:34 PM</lastBuildDate><item><title><![CDATA[Internet Explorer 9 Beta launches]]></title><author><![CDATA[Chuck Lee]]></author><description><![CDATA[<p>The much anticipated IE9 is now out on beta.  Leaner, faster and more modern, IE9 promises to be what it should've been with IE8.  The final release is not out for a few more months still but at least we can now see how our sites will fare on IE9.  The question remains, how long do people really want to support IE6/7 for?</p>
<p>Great article from Wire: <a href="http://www.wired.com/epicenter/2010/09/internet-explorer-9-beta-drops-its-lean-fast-and-modern/">http://www.wired.com/epicenter/2010/09/internet-explorer-9-beta-drops-its-lean-fast-and-modern/</a></p>
<p>Most interesting is the adaption of web technologies:</p>
<p>Internet Explorer 9’s support for both established and emerging web standards is sure to be sharply scrutinized. It’s an area where previous versions of IE have lagged considerably. For years, Microsoft was loathe to adopt support for unratified standards, considering them a moving target and thus a waste of time. As such, IE8 contained only partial support for HTML5 and newer CSS 3 components.</p>
<p>With IE9 Beta, we see a reversal of that stance. IE9 supports much of HTML5, and there’s a new parser to handle the new markup language. There’s support for native playback of audio and video files, and the Canvas element, with support for animated 2D polygons and text. HTML5 selection is supported, but not drag-and-drop or Microdata.</p>
<p>The Scalable Vector Graphics (SVG) standard is supported, and like other animation and media features in the browser, it can take advantage of hardware acceleration.</p>
<p>There’s finally real support for CSS 3 in this release — media queries, borders and backgrounds, selectors, the fonts module and the Web Open Font Format (WOFF) rich type standard, among other things.</p>
<p>Web standards support in IE9 isn’t perfect (who can claim that?), but it’s certainly admirable. Most importantly, IE9 is likely to be a boom for the web when the final version ships sometime in the coming months.</p>
<p>Once all the Windows 7 and Vista users out there update to the final version of IE9 — either manually or automatically — the web will begin its shift to a new era where the large majority of browsers can handle more complex graphics, behaviors and markup. Which is not to say the web won’t still be fractured and forked in various ways (vendor-specific capabilities will probably always be around), but the browser’s arrival will signal a much-needed step forward.</p>]]></description><pubDate>9/17/2010 2:49:33 PM</pubDate></item><item><title><![CDATA[Choosing the Right CMS For Your Business]]></title><author><![CDATA[Pam Westwater]]></author><description><![CDATA[<p><strong>What CMS are you looking for?</strong></p>
<p>When you create a website, the first things that come to mind are
often what will it look like and what content will it have.&nbsp; Sometimes,
the critical decision of which content management system (CMS)&nbsp;to use is
an afterthought which is why so many websites use the wrong solution.&nbsp;
With so many CMS options for every type of site, it is often easier to
pick the one your colleague used or the "popular" one, rather than
research which one is best.</p>
<p>I do not&nbsp;believe that there is one “correct” option that everyone
should use, as every company will have different needs and the CMS
should support that. Each CMS product offers different features which
may be either a pro or con to your business needs.</p>
<p>There are a few main questions that need to be asked when choosing a CMS system for your website:<strong><br />
</strong></p>
<p><strong>What are your Project needs? What is the website being used for?</strong></p>
<ul>
    <li>Discuss the vision for the website.&nbsp; Having a full understanding
    of what you are looking to do with the site, whether it be an online
    store, a community site, or a blog.&nbsp; Some CMS’s are pretty flexible and
    can handle a variety of applications, but there is not a
    one-size-fits-all CMS that will work for everyone.&nbsp; </li>
    <li>Know how many pages you'll need for the site. Determine whether
    you'll want photo galleries, product listings, contact pages, or forums
    added to your site.&nbsp; Knowing and planning this information ahead of
    time, will save you from needing to make large adjustments after the
    site has been done.&nbsp; Plus, your CMS choice will depend on what specific
    needs you have for the site.&nbsp; If you dont plan for these pages ahead of
    time, the CMS you choose may not necessarily be able to handle them. </li>
    <li>Try to understand what their process will be when posting
    content.&nbsp; Will there be one main editor of content for the site, or will
    multiple people be allowed to alter the content? What kind of a
    review/editing process will there be? Will content get archived after a
    certain amount of time? Will it ever be deleted? </li>
</ul>
<strong>Who is the CMS being used for?<br />
</strong>
<ul>
    <li>If you are designing the website for yourself, then it comes
    down to a lot of personal preference. What do you like? How do you want
    it to work? You basically get to decide your own process of publishing
    content, which gives you a lot of freedom </li>
    <li>The size of the organization that will be using the CMS system
    will impact your decision a great deal. How many people do you expect to
    be using it? Do they need different levels of access? Smaller CMS
    products have one level of access, strictly for the administrator. They
    can see and change everything. The last thing you want is somebody
    changing or altering features and settings that they do not understand,
    or making design decisions that only designers should make. </li>
    <li>The size and kind of organization that will be using the CMS
    will also alter your decision making process.&nbsp; High profile
    organizations will require a CMS with high security, to avoid any
    chances of hackers getting into the site and stealing information. Even
    if your site involves monetary transactions, you'll need to ensure that
    the CMS chosen has the capability of high security and low chance of
    security breaching. </li>
</ul>
<strong>What are the limitations for what can be done? (ie. Budgets, Timelines, etc.)</strong><br />
<ul>
    <li>It is clear that the size of your business and your available
    budget will also be a determining factor in choosing a CMS.&nbsp; If you are a
    small business who is looking to gain an online presence, you will most
    likely venture towards a smaller, less complicated CMS system that will
    only cost a small monthly fee. A large business may choose a
    multi-faceted CMS system, which will allow for CSS, PHP, and social
    media integration options, as they have the budget to back up their
    requirements. </li>
    <li>On the other hand, there may be technical, or hardware
    limitations that must be complied with. The CMS may have to tie into a
    pre-existing system or a specific programming language.&nbsp; The company's
    designers may be used to a certain version of coding or development
    which may not operate with every CMS system. </li>
    <li>Finally, you have to consider your own capabilities.&nbsp; It may be
    time, or cost prohibitive for you to learn a completely new system. If
    you’re a designer, and not really comfortable with programming, don't go
    with a system that requires it for simple functionality.&nbsp; Know your own
    strengths and weaknesses, and choose a CMS that you understand and will
    be able to work with.&nbsp; You do not want to be spending months of
    precious time learning how to use the CMS.&nbsp; That time is better spent
    entering content, or adding new features to make your site more
    appealing. </li>
</ul>
Choosing a CMS is not an easy task. But I believe that if you fully
understand your requirements it will make it much easier to choose the
right one for you or your business]]></description><pubDate>9/16/2010 1:49:25 PM</pubDate></item><item><title><![CDATA[Google Introduces Instant Search]]></title><author><![CDATA[Pam Westwater]]></author><description><![CDATA[<p>Google has returned to its roots of speedy Web searches with <a href="http://www.google.com/instant/#utm_campaign=launch&amp;utm_medium=van&amp;utm_source=instant" target="_blank">Google Instant</a>, a new version of the search engine that displays results as you type.</p>
<p>According to <a href="http://www.google.com" class="ApplyClass" target="_blank">Google</a>, a typical searcher spends nine seconds entering a query, and 15 seconds searching for answers. Google hopes to shave two to five seconds per search using Google Instant. Instant will not slow down Internet connections, because the amount of data delivered for search terms is relatively small, and because the system only sends parts of the page that change when more typing alters a search result. For connections that are already slow, Google Instant automatically turns off, and users can also shut off the service through their user preferences or by clicking the drop down box to the right of the search bar.</p>
Google states that the most obvious change is that you get to the right content much faster than before because you don’t have to finish typing your full search term, or even press the “search” button.  You will also see results as you type, which can help you formulate a better search term by providing instant feedback. This allows your search to adapt simultaneously until the results match exactly what you want.
<p>With all this being said, how will Google Instant now affect SEO and the way companies optimize their searches?  Well here are some thoughts on why it will be even more important to specify search details for queries and ensure that your products and services remain at the top of the search results:</p>
<ul>
    <li>Google Instant has made being in the top 3 spots of Google searches more important than ever.
    <p> </p>
    </li>
    <li>Page title &amp; meta description are also more important now then they were previously.  Now we may have to write titles and descriptions to capture someone’s attention quickly enough that they might abandon what they are typing and instead click on your link.
    <p> </p>
    </li>
    <li>More Google users will be spending time in the search box as opposed to weeding and paging through search results. Which may mean those sites who could only be found on the 10th or 15th page, will most likely lose their vistors.
    <p> </p>
    </li>
    <li>Long tail searches will likely get longer, but the algorithm has to catch-up to ensure relevant results are appearing for those ultra-long-tail queries (diminishing returns). If people are offered results before they’ve completed their search term, are they more likely to go for simpler results rather than continue to fill out their entire query?
    <p> </p>
    </li>
    <li>AdWords will also be impacted with more impressions but fewer click-throughs.
    <p> </p>
    </li>
    <li>Universal search results such as videos and screenshots are more important since they are visually more compelling when cycling through a number of search queries. </li>
</ul>
<p> </p>]]></description><pubDate>9/10/2010 11:41:30 AM</pubDate></item><item><title><![CDATA[Canonical Links]]></title><author><![CDATA[Russell Huntington]]></author><description><![CDATA[<p>The big three search engines have recently introduced the concept of canonical links in an attempt to solve the problem of duplicate data in their search results. The basic problem is that multiple links to the same content can vary in style, thereby creating duplicate instances in the results pages of a search. The variation in style could be really simple like these:</p>
<ul>
    <li>http://fishing.ca/videos.aspx?id=219 </li>
    <li>http://www.fishing.ca/videos.aspx?id=219 </li>
    <li>http://www.fishing.ca/videos.aspx?id=219&amp;category=bass </li>
</ul>
<p>All of these links produce the same content, and would be considered different by a search engine and would therefore produce duplicate results. Consider a more complex example:  </p>
<ul>
    <li>http://fishing.ca/shop/rods.aspx </li>
    <li>http://fishing.ca/shop/rods.aspx?sortBy=price </li>
    <li>http://fishing.ca/shop/rods.aspx?sortBy=price&amp;sortDirection=descending </li>
    <li>http://fishing.ca/shop/rods.aspx?sortBy=price&amp;sortDirection=descending&amp;sessionId=717df154-e6d5-4522-bda5-7ccd2852c287 </li>
</ul>
<p>Again, all of these links essentially lead to the same content. The variances defined by the query string parameter only alter the way content is displayed, and not the intrinsic nature of the content itself. We therefore want to avoid having all four examples showing up in Google, if possible.</p>
<p>There are two ways to achieve this:</p>
<p>The first is to always use absolute urls in links - a consistent approach to linking reduces duplicates on the site and reduces the variance of links found by the search engine's crawler. </p>
<p>The second is to use a canonical link - this would be added to the head element of a page and contain a URL that is considered to be the 'true' path to the content. In the e-commerce style example above, the link element would look like this: <br />
&lt;link rel="canonical" href="<a href="http://www.fishing.ca/shop/rods.aspx">http://www.fishing.ca/shop/rods.aspx</a>" /&gt;<br />
This means that however a crawler reached the page, it would know that the content is the same as defined in the page found at the <a href="http://www.fishing.ca/shop/rods.aspx" target="_blank">http://www.fishing.ca/shop/rods.aspx</a> and would therefore not index it seperately.</p>
<p>There are a number of caveats: </p>
<ul>
    <li>A canoncial link is used as a strong hint as to the 'actual' content of the page - it is not guaranteed to override the crawl results. </li>
    <li>It is strongly recommended to use absolute URLs </li>
    <li>Links cannont cross domains, although they can cross sub-domains </li>
    <li>If a link returns a 404, or a page that is considered to have different or non-similar content, the link will be ignored. </li>
</ul>
<p>In summary, using canoncial links will help us build better search-engine optimized sites; but we shouldn't stop doing the basics like using proper absolute urls and building good site maps etc. There's still more research to do on all of this!</p>
<p>Further reading:</p>
<ul>
    <li><a href="http://www.google.com/support/webmasters/bin/answer.py?hl=en&amp;answer=139394" class="ApplyClass" target="_blank">http://www.google.com/support/webmasters/bin/answer.py?hl=en&amp;answer=139394</a> </li>
    <li><a href="http://www.ysearchblog.com/2009/02/12/fighting-duplication-adding-more-arrows-to-your-quiver/" target="_blank">http://www.ysearchblog.com/2009/02/12/fighting-duplication-adding-more-arrows-to-your-quiver/</a> </li>
</ul>]]></description><pubDate>9/7/2010 1:22:37 PM</pubDate></item><item><title><![CDATA[HTML5 In All its Glory!]]></title><author><![CDATA[Chuck Lee]]></author><description><![CDATA[<p>We've heard alot about HTML5 but haven't seen much in terms of development... until now.</p>
<p>Rock group Arcade Fire has released a music video online that's done completely in HTML5.  It showcases many HTML5 features and shows how different medias can integrate to enhance the user experience.  </p>
<p><a href="http://www.thewildernessdowntown.com/" class="ApplyClass" target="_blank">http://www.thewildernessdowntown.com/</a> (obviously won't work in IE)</p>
<p>Enter an address you are familiar with like the home you grew up in.  As the video plays, you see a few things: </p>
<p>1) Multiple windows playing video</p>
<p>2) Google Earth view of the street you inputted with video overlay</p>
<p>3) Google Street view images of the address you inputted</p>
<p>Very cool features that undoubtedly future websites will want to incorporate to enhance the user experience.</p>
<p> </p>]]></description><pubDate>9/9/2010 2:50:14 PM</pubDate></item><item><title><![CDATA[Getting comfortable with Javascript callbacks]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>It seems every language has it’s own way of implementing callbacks.</p>
<p>Back in the VB days (daze?) we used the addressof operator and all kinds of win32 stuff to get app and activex control to do what we wanted.</p>
<p>In C#, we have the delegate (and the anonymous delegate) that makes life pretty easy in terms of defining how to subscribe to a callback “even” and how to broadcast that callback.</p>
<p>Javascript callbacks are the simplest, and arguable the more nebulous, implementation of them all.  Once you understand how callbacks work, using libraries like jQuery, and our own UGC Javascript API becomes much easier.</p>
<h3>Why do we need it?</h3>
<p>Think of the way code normal iterates from line to line.  It’s straightforward and simple: you loop over a list, and at the end of the loop, you keep going; you use an if statement, and after that you know that the condition has been met; similarily, when you call a method, you know that it has done all of its work and returned something useful.  Right?  Well… not always.  Sometimes that method will invoke web requests that need some time to process, or it may call another method that has to do some processing or is waiting for user input…  These kinds of operations can be implemented asynchronously, and the only way to manage that logic programmatically is with a callback parameter.</p>
<h3>How does it work?</h3>
<p>A callback parameter on a Javascript method is essentially passing a reference to the enter function definition into the method so that the method can call that function when it needs to.</p>
<p>Here’s an example:</p>
<p>function doSomething(callback) {<br />
    if (somecondition()) {        <br />
      callback(true);<br />
    }<br />
}</p>
<p>function entryPoint() {<br />
    doSomething(function(yesOrNo) {<br />
       //do something else<br />
    });<br />
}</p>
<p>Let’s assume that the entryPoint() method is being called first.  It calls doSomething(), which in turn exits right away.  The only way that the entryPoint method will know what the doSomething method wanted to return is to pass in a function as a callback, and take the return value as parameter.  In this case, it’s a boolean value, but it could be anything (or more that one thing).</p>
<p>A lot of the useful methods in the jQuery library use this logic, especially the unobtrusive event handlers on buttons or links.</p>
<p>$("#btnSubmitForm").click(function(e) {<br />
    e.preventDefault();<br />
    //do something<br />
});</p>
<p>Notice how the click method takes a function parameter, which in turn has a “e” parameter with the event data from the button click.</p>
<p>Now let’s look at how Urls can be invoked asynchronously (remember the first letter of the AJAX acronym is asynchronous).</p>
<p>$.ajax({<br />
  url: 'path/handler.ext',<br />
  success: function(data) {<br />
     //do something with the data<br />
  },<br />
  error : function(request, errorType, exception) {<br />
     //handle the error<br />
  }<br />
});</p>
<p>You’ll notice that this implementation is a bit different – the ajax method from jQuery is passed an object that has several fields defining how that method is meant to behave.  The first one here is the Url, which will be invoked.  Then we have 2 separate functions that are passed in – one for the success condition that is passed the data that was returned from the Url handler, and another with the error condition.  </p>
<p>There is also a way to invoke the ajax method synchronously, such that it blocks the calling method until the web request handling is complete, but that may cause the user’s browser to appear frozen if the request takes a long time, so be super careful with this one.</p>
<p>var html = $.ajax({<br />
  url: "filepath.ext",<br />
  async: false<br />
 }).responseText;</p>
<p>There are lots of other things to consider when using callbacks in Javascript.  Mostly, you’ll need to be able to quickly refer to whatever documentation is available so that you can determine with the expected parameters and fields are for each callback function itself.</p>
<p>more later – joel</p>
<p>Joel Varty writes for the official ASP.net blog.  Subscribe to his blog here: <a href="http://weblogs.asp.net/joelvarty/archive/2010/08/26/getting-comfortable-with-javascript-callbacks.aspx" class="ApplyClass" target="_blank">http://weblogs.asp.net/joelvarty/archive/2010/08/26/getting-comfortable-with-javascript-callbacks.aspx</a></p>]]></description><pubDate>9/7/2010 1:23:43 PM</pubDate></item><item><title><![CDATA[Facebook Promotions Guidelines]]></title><author><![CDATA[Kyle Tinning]]></author><description><![CDATA[<p>In searching for some example Facebook contests, I came across the official guidelines and some commentary regarding Facebook contests.</p>
<p>Given that many clients will want to use Facebook for more marketing in the future, it's a good idea to be aware of what is and what is not allowed.</p>
<p>In brief:</p>
<ul>
    <li>You should have your promotion approved by Facebook </li>
    <li>Facebook has specific requirements for disclaimer messages and how you may refer to Facebook </li>
    <li>The only action that is allowable as a condition of entering a contest is the action of becoming a fan.  e.g. a photo contest that requires uploading a photo is not allowable. </li>
</ul>
<p><strong>Official guidelines:</strong> <a href="http://www.facebook.com/promotions_guidelines.php" class="ApplyClass" target="_blank">http://www.facebook.com/promotions_guidelines.php</a></p>
<p><strong>6 tips for running promotions within the guidelines:</strong> <a href="http://www.insidefacebook.com/2010/02/23/6-tips-for-running-promotions-within-facebooks-guidelines/" target="_blank">http://www.insidefacebook.com/2010/02/23/6-tips-for-running-promotions-within-facebooks-guidelines/</a></p>
<p> </p>]]></description><pubDate>8/25/2010 9:11:50 AM</pubDate></item><item><title><![CDATA[Google Tests and Releases New Search Features]]></title><author><![CDATA[Pam Westwater]]></author><description><![CDATA[<p>In the past couple of weeks, <a href="http://www.google.com" class="NewsLink" target="_blank">Google</a> has decided to launch and test some new features to its search site in order to keep on top of popular searches and remain the most popular search engine on the internet.</p>
<p>Firstly, Google launched their new Google Apps Search, which is basically a universal search for Gmail, docs and sites.  As a new Gmail Labs feature, once activated, the "Search Mail" button will change to a "Search Mail and Docs" button.  Your results will include the 20 most recent emails with that query as well as the 20 related Google Docs or sites as well.  This feature also accounts for errors by providing a "Did you mean?" search option in case of typos.  Gmail is continuously becoming a central location for performing all of my searches, and this application is making it much easier to find the items that I'm looking for.</p>
<p>Google is also testing a feature that displays live-updating search results as you type your search query, with no keystroke of “Enter” or “Return” required.   As you start typing your search, the search box is relocated to the top of the site.  This new search feature on the site provides live-updating search results as you type your query and your results are changed to match what you type as you go. Although not available to the public at large, Google is testing this new feature with a small selection of users.  This may come as a surprise to most people as Google makes its money by displaying ads based on your searches.  But apparently these ads are also being updated live along with the search results.</p>
<p>Hopefully the Live updating search feature sticks around, as I know it will make searching for specific items much easier and faster to find.  The advertisers don't lose out on anything in terms of placement, and the searcher saves time and filters through alternate results much more efficiently with this option.  Both great new features if you ask me! </p>]]></description><pubDate>8/23/2010 11:40:16 AM</pubDate></item><item><title><![CDATA[Visual Studio 2010 Productivity Power Tools]]></title><author><![CDATA[Matt Quinn]]></author><description><![CDATA[<p>Earlier this summer Microsoft released a new set of <a href="http://visualstudiogallery.msdn.microsoft.com/en-us/d0d33361-18e2-46c0-8ff2-4adea1e34fef" class="NewsLink" target="_blank">Productivity Power Tools </a>for Visual Studio 2010. Included in the package are a bunch of tweaks and improvements to make common tasks a little bit friendlier and more convenient. </p>
<p>You can read about some of the details on Scott Guthrie's <a href="http://weblogs.asp.net/scottgu/archive/2010/06/09/visual-studio-2010-productivity-power-tool-extensions.aspx" class="NewsLink" target="_blank">posts</a> on the <a href="http://weblogs.asp.net/scottgu/archive/2010/07/19/vs-2010-productivity-power-tools-update-with-some-cool-new-features.aspx" class="NewsLink" target="_blank">subject</a>. I particularly like the <strong>Ctrl+Click Go To Definition, Highlight Current Line, Move Line Up/Down Commands</strong>, and perhaps most of all, the <strong>Searchable Add Reference Dialog</strong> - which adds not only searching but also some much-needed caching improvements. Also included are a slew of improvements to Visual Studio's tab navigation, including options to pin tabs to their location, and to remove them in "least-recently used" order (instead of the default "least-recently opened" order).</p>
<p>Each of these tools can be enabled or disabled from Visual Studio's Options menu. You can <a href="http://visualstudiogallery.msdn.microsoft.com/en-us/d0d33361-18e2-46c0-8ff2-4adea1e34fef" class="NewsLink" target="_blank">download the entire package</a> for free from Microsoft.</p>
<p> </p>]]></description><pubDate>8/20/2010 1:25:40 PM</pubDate></item><item><title><![CDATA[Facebook Is Changing Its Application Tab Width]]></title><author><![CDATA[Matt Quinn]]></author><description><![CDATA[<p>On August 6, <a href="http://developers.facebook.com/blog/post/399" class="NewsLink" target="_blank">Facebook announced </a>that the width of all custom tabs would be changed to 520px - down from the previous 760px. This change will be made to the public on August 23, so time is running out to slim down your application. Page admins will see tabs at their new width, allowing them to assess and preview these changes prior to the public rollout. </p>
<p>With just over two weeks between the official announcement and the drop dead date I imagine a few applications will get caught by this one. As always, vigilance is the key when trying to keep up with the ever-changing landscape of Facebook application development. To that end, Facebook publishes a <a href="http://developers.facebook.com/roadmap" class="NewsLink" target="_blank">Developer Roadmap</a> which lists upcoming deprecations and breaking changes. Developers can also subscribe to Facebook's <a href="http://developers.facebook.com/blog/" class="NewsLink" target="_blank">Developer Blog </a>(by email or RSS) where major announcements about the service and API are made.</p>]]></description><pubDate>8/25/2010 9:12:05 AM</pubDate></item><item><title><![CDATA[The new Google Buzz "Who to Follow" Feature]]></title><author><![CDATA[Pam Westwater]]></author><description><![CDATA[<p>In the midst of the suggested follower options on both Facebook and Twitter, <a href="http://www.google.com/buzz" class="NewsLink" target="_blank">Google Buzz</a> has decided to follow suit and add a new "Who to Follow" feature on the site.  This feature was an addition to the site to complement their user updates, and published Google Profiles.</p>
<p>According to Google, this will take effect for all Gmail users for the next time they sign in to the Buzz tab.  The followers list will be based on your social connections on other networks, as well as people you frequently email or chat with.  Of course, only those with Public profiles will be shown as suggestions.</p>
<p><img width="604" height="360" alt="" style="width: 460px; height: 313px;" class="alignnone size-full wp-image-208976" title="Picture 1" src="http://tctechcrunch.files.wordpress.com/2010/08/picture-11.png?w=604&amp;h=360" /></p>
<p>The only downside to Buzz's features is that their "suggested friends" are people you most often chat or email.  These may not necessarily be the people you want to connect with through your social network, but at least you have the option to pick and choose who should be there.  This version of suggested followers also offers the option to "ignore", as well as a "close" option for those you are uninterested in following.  </p>
<p><strong>Integration with Twitter Follower Lists</strong></p>
<p>In addition, I found a little tool to integrate your twitter followers into the Google Buzz program.  <a href="http://tw2buzz.com/" class="NewsLink" target="_blank">Tw2buzz</a> is a simple service, which cross-references your Twitter Followers list with Google Profiles and automatically builds a list of of people you may want to follow in Buzz.  The only downside to the service, is that it offers your "followers" list as opposed to your "following" list.  I would think that most people would look to have the people they follow on their Buzz account as opposed to people that are following them, but regardless, its a helpful list.</p>
<p roundtrip="0" lastVisited="0">They have made using the service very simple to do. Initially, you must make sure you are logged into your Google account and authorize the app to connect with your <a href="http://www.twitter.com" class="NewsLink">Twitter</a> profile. Tw2buzz will automatically parse and analyze your followers and prepare a list of Google Profiles. Due to the lack of a Google Buzz API, Tw2buzz has not implemented a bulk follow option as of yet. Instead you will have to open each user’s Google Profile page and follow them individually.</p>
<p><strong>A little more about Google Buzz</strong></p>
<p><a href="http://www.google.com/buzz" class="NewsLink" target="_blank">Google Buzz</a> is a social network and sharing product built by <a href="http://www.google.com/" class="NewsLink" target="_blank">Google</a>. Based within Google Profiles,  Buzz offers a stream of status updates, pictures, links, and videos from your friends. You can “like” these items and you can comment on them. Updates from Flickr, Picasa, Google Reader or Twitter can also be automatically imported into a Buzz stream. Buzz will recommend items you might like based on your friends’ activity.</p>]]></description><pubDate>8/18/2010 2:58:27 PM</pubDate></item><item><title><![CDATA[Akismet for Comment Spam]]></title><author><![CDATA[Andre Gaulin]]></author><description><![CDATA[<p>Comment spam sucks for everyone, but there's a service for that - Akismet.</p>
<p>For those in the Wordpress world, Akismet is usually one of the first plugins you enable on a new install.  Just like a traditional email spam filter, Akismet does a great job of keeping comment spam at bay.  It's another project from the team at Automattic (the developers of Wordpress) but it's not strictly a Wordpress thing.  Akismet is available for commercial use via their API layer.  <a href="http://akismet.com/development/" class="NewsLink" target="_blank">http://akismet.com/development/</a></p>
<p>The beauty of a solution like Akismet is that it allows you to streamline the commenting process without having to force users to deal with cryptic captcha modules or user logins and it's a great second layer of protection if a client wants a non-moderated comment configuration.</p>
<p>Something to keep in mind for future projects.</p>
<p> </p>]]></description><pubDate>8/20/2010 8:26:30 AM</pubDate></item><item><title><![CDATA[jQuery is going Mobile]]></title><author><![CDATA[Andre Gaulin]]></author><description><![CDATA[<p>jQuery has just announced that later this year they will be releasing a mobile optimized version of jQuery that will be targeted at a broad range of mobile devices.</p>
<p>It looks like the jQuery team has been busy at work focusing on mobile.  They have just announced that later this year they will be releasing a mobile optimized version of jQuery that will be targeted at a broad range of mobile devices.</p>
<p style="text-align: center;">"jQuery mobile framework takes the "write less, do more" mantra to the next level: Instead of writing unique apps for each mobile device or OS, the jQuery mobile framework will allow you to design a single highly branded and customized web application that will work on all popular smartphone and tablet platforms."</p>
Beyond solid cross-mobile-platform support they are also heavily focused on delivering a pretty robust set of touch optimized layouts and UI elements.
<p> </p>
<p style="text-align: center;">"Our aim is to provide tools to build dynamic touch interfaces that will adapt gracefully to a range of device form factors. The system will include both layouts (lists, detail panes, overlays) and a rich set of form controls and UI widgets (toggles, sliders, tabs)."</p>
<p>More details over on the jQuery <a href="http://jquerymobile.com/" class="NewsLink" target="_blank">mobile site</a>.</p>
<p> </p>]]></description><pubDate>8/17/2010 4:28:01 PM</pubDate></item><item><title><![CDATA[Google Analytics Filters]]></title><author><![CDATA[Kyle Tinning]]></author><description><![CDATA[<p>Here is a list of some custom filters offered by Google Analytics that can be quite helpful in filtering results.</p>
<p>Here are some more GA customizations and settings:</p>
<p><a href="http://doteduguru.com/id629-google-analytics-filters.html">http://doteduguru.com/id629-google-analytics-filters.html</a></p>
<p>Note that most of this configuration requires you to be an administrator for the analytics account.</p>
<p>Filters described:</p>
<ol>
    <li>All Lowercase Filter </li>
    <li>Sub-Domain Traffic Filter </li>
    <li>Include All Domain Traffic Filter </li>
    <li>Exclude IP Traffic Filter </li>
    <li>Directory Filter </li>
    <li>Country/Region/City Filter </li>
    <li>Full Referral URL Filter </li>
</ol>
<p> </p>]]></description><pubDate>8/17/2010 4:24:59 PM</pubDate></item><item><title><![CDATA[Twitter Releases Official ReTweet Button]]></title><author><![CDATA[Andre Gaulin]]></author><description><![CDATA[<p>Twitter has just released their officially supported "Retweet" button that will allow site visitors to easily share content via their Twitter feed.  Similar to the Facebook "like" button, the Retweet button is a <a href="http://twitter.com/goodies/tweetbutton" class="NewsLink" target="_blank">simple piece of code </a>that is easy to implement almost anywhere.  </p>
<p><a href="http://knowledge.edentity.local/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/andregaulin/tweet_5F00_button_5F00_on_5F00_blog.png"><img alt="" style="border-bottom: 0px solid; border-left: 0px solid; border-top: 0px solid; border-right: 0px solid;" src="http://knowledge.edentity.local/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/andregaulin/tweet_5F00_button_5F00_on_5F00_blog.png" /></a></p>
<p>Not only does the button allow the user to easily share content, but it also has the added option of suggesting other Twitter accounts which may be related to the content in some way.  Users can let their friends know that they enjoyed a specific article and they can also quickly follow the author or someone mentioned in the content they have just shared.</p>
<p>The Twitter team have a few more details and a video demo over on the official <a href="http://blog.twitter.com/2010/08/pushing-our-tweet-button.html" class="NewsLink" target="_blank">Twitter blog</a>.</p>
<p> </p>
<p> </p>]]></description><pubDate>8/17/2010 4:25:45 PM</pubDate></item><item><title><![CDATA[Twitter OAuth Authentication with TweetSharp]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p><strong>Basic Authentication is Going Away</strong></p>
<p>Previously, the easiest way to authenticate a Twitter app was to ask for a user’s credentials and pass them directly to the Twitter API in the Authentication HTTP Header.  This is, incidentally, how any site that uses basic authentication behaves.  Your credentials are passed in a base64 encoded string in the header on EVERY request.  Encoded – not encrypted.  So if the site isn’t using SSL (and Twitter doesn’t) you could be exposing credentials to anyone who wants to sniff them.</p>
<p>Twitter has acknowledged this fact, and has provided an OAuth alternative based on an open and accepted standard of token based authentication.  Up until now, though, the OAuth standard has not been enforced, since it was more of a development hurdle for folks who just wanted to get their work out there and were willing to accept the risk of sniffed credentials.</p>
<p><strong>The OAuth Authorization and Authentication Process<br />
</strong></p>
<p>What do we mean by authorization versus authentication?  Authorization is the process by which an end user of your Twitter app (if you haven’t created one of these yet, do it here) will allow it to access their account.  This is done in a browser window, and the user, once they’ve clicked “Allow Access” will be presented with a short PIN sequence will they will have to copy and paste or enter manually into your application.  Given that PIN, your app will have the ability to create (and store) an OAuth Token and Secret that will allow your app access to that Twitter account until access is denied.</p>
<p>Every request you send to Twitter (either for new status updates or for queries) should have that token provided as a credential.  This will mark any status updates with your application’s name and provide a link for other users to go to your application URL.</p>
<p><strong>Here the Step by Step Process for Authorization</strong></p>
<ol>
    <li><a href="http://dev.twitter.com/apps/new" class="NewsLink" target="_blank">Create a Twitter App </a><br />
    keep track of your Consumer Key and Secret, you’ll need these! </li>
    <li>Generate an unauthorized token </li>
    <li>Generate a authorization and direct your user’s browser to it </li>
    <li>Give your user the opportunity to enter the PIN into your app </li>
    <li>Generate the authorized token and secret </li>
    <li>Persist the token and secret <br />
      </li>
</ol>
<p><strong>TweetSharp and other OAuth Libraries</strong></p>
In its own OAuth FAQ, Twitter mentions that you really shouldn’t tackly OAuth with raw HTTP requests (although you can if you want).  The fact of the matter is that there are lots of different wrappers written for OAuth itself, which could in theory be used with any standard OAuth provided (Google and Yahoo also use OAuth) as well provider specific wrappers written to give you a high level access to the logical functions of the system you are accessing.
<p>TweetSharp is a very nice .Net API for Twitter, but it’s authors have based it upon another library that they built, the more generic <a href="http://hammock.codeplex.com/" class="NewsLink" target="_blank">Hammock</a> which they are still actively developing.  Apparently <a href="http://tweetsharp.codeplex.com/Thread/View.aspx?ThreadId=213604" class="NewsLink" target="_blank">nobody has been helping them build TweetSharp</a>, so they are leaving it for the community to work on from now on.</p>
<p>One of the things that TweetSharp makes super simple is the generation of the Tokens and Authorization URL that I outlined above.  </p>
<p>First of all, <a href="http://tweetsharp.codeplex.com/releases/view/45794" class="NewsLink" target="_blank">download the TweetSharp API </a>and add a reference in your app to the TweetSharp and TweetSharp.Twitter assemblies.</p>
<p>The follow code snippets are all that you need after that:</p>
<p>using TweetSharp.Model;<br />
using TweetSharp.Twitter.Extensions;<br />
using TweetSharp.Twitter.Fluent;<br />
using TweetSharp.Twitter.Model;<br />
using TweetSharp.Twitter.Service;</p>
<p>//generate the token and url that will we need<br />
OAuthToken unauthorizedToken = service.GetRequestToken(twitterConsumerKey, twitterConsumerSecret);<br />
string url = service.GetAuthorizationUrl(unauthorizedToken);</p>
<p>//TODO: get the pin from the user</p>
<p>//once you have the pin from the user, build your authorized token<br />
OAuthToken authToken = service.GetAccessToken(twitterConsumerKey, twitterConsumerSecret, unauthToken, pin);</p>
<p>//store the authToken.Token, and the authToken.TokenSecret</p>
<p>//make an authenticated call<br />
var service = new TwitterService();<br />
service.AuthenticateWith(twitterConsumerKey, twitterConsumerSecret, syndicationService.OAuthToken, syndicationService.OAuthTokenSecret);<br />
if (service.Error == null)<br />
{<br />
    TwitterStatus status = service.SendTweet(value);<br />
} </p>
<p>TweetSharp also has some nice documentation on this process, and a couple of different methods that you can do it <a href="http://tweetsharp.codeplex.com/wikipage?title=OAuthWorkflow&amp;referringTitle=OAuthWalkthrough" class="NewsLink" target="_blank">here</a>.</p>
<p>more later – joel</p>
<p>Joel Varty writes for the official ASP.net blog.  Subscribe to his blog here: <a href="http://weblogs.asp.net/joelvarty/archive/2010/08/12/twitter-oauth-authentication-with-tweetsharp.aspx" class="NewsLink" target="_blank">http://weblogs.asp.net/joelvarty/archive/2010/08/12/twitter-oauth-authentication-with-tweetsharp.aspx</a></p>]]></description><pubDate>8/17/2010 4:26:41 PM</pubDate></item><item><title><![CDATA[My Heroes (and why)]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Love them or hate them, you've gotta respect them!</p>
<p><strong>Steve Jobs</strong> (the master of simplifying complexity)</p>
<p><strong>Bill Gates</strong> (computer genius meets business genius - and the ultimate philanthropist)</p>
<p><strong>Barack Obama</strong> (the great believer)</p>
<p><strong>Mark Zuckerberg</strong> (the father of social media)</p>
<p><strong>Michael Schumacher</strong> (most precise person who ever lived - well, used to be)</p>
<p><strong>Mike Lazaridis</strong> (rags to crazy riches)</p>
<p><strong>Jim Balsillie</strong> (bull headed determination to be the best)</p>
<p><strong>Dietrich Mateschitz</strong> (Richard Branson x 100)</p>
<p><strong>Jim Collins</strong> (concise teller of business science)</p>
<p><strong>Bernie Eccelstone</strong> (raced his way to billions)</p>
<p><strong>Jason Fried</strong> (champion of the unstartup)</p>
<p>I'll think of more...</p>
<p><strong>Who are yours?</strong></p>]]></description><pubDate>9/9/2010 7:55:00 PM</pubDate></item><item><title><![CDATA[5 Rules to Follow in Social Media Optimization (SMO)]]></title><author><![CDATA[Pam Westwater]]></author><description><![CDATA[<p>In doing some research into how to best use Social Media for our business, I have come across the idea of Social Media Optimization or SMO many times.  SMO is essentially the bridge between Search Engine Optimization and Social media networks, and has become a growing niche in the world of digital marketing.</p>
<p>So here is a breakdown of the 5 main rules I have found that you should follow when trying to optimize your social media content and get it out to a wide range of networks.</p>
<p>1.  <strong>Participate in numerous Social networks</strong>.  Having accounts with Facebook, Twitter, Blogs and Linkedin will help to ensure that you're near the top of google searches, and maintain your influence on your readers.  By continuously updating statuses, or blogging on topics that your company specializes in, you can keep your readers informed and interested in what your company is all about.</p>
<p>2.  <strong>Create shareable content.  </strong>The better the content is that you are writing about, the more likely it is to be shared with an entire social network.  Having a Like, Digit, Shareit or Retweet option on your articles is probably the most important facet to maintaining your social media presence on the web.  Make sure you keep it simple, as in One-Button sharing simple.  Readers are more likely to share a blog or article if all it takes is the click of a button, minimal thinking required!</p>
<p>3.  <strong>Share content consistently.  </strong>Websites draws millions of visitors wanting to share information, pictures and videos daily.  Blogs make it easy for companies to embed videos, links, and digital media, so make use of this accessibility.  The more you share, the more your network knows about your company, and the more your network will grow.  With an increasingly large network of shared content, the power of your medium and influence will only get more momentum.  Plus, by sharing information to those in your network, you are increasing awareness of your corporate brand and what your company is all about.</p>
<p>4. <strong>Mashups are important, use them.  </strong>A  mashup is usually a web-based application that combines content and functionality from a variety of sources using technologies.  For social media, the "mashup" occurs when readers take and remix your information or content by adding their own input or voice.  In previous years, people would consider this a version of plagiarism, but the idea has grown past this recently.  Allowing people to take ownership over content you have published will only help you to optimize for the social web.</p>
<p>5<strong>.  Remember that Engagement has rewards</strong>.  Creating a presence in social networks is mandatory, but it’s also not enough. Actively and thoughtfully engaging consumers in social networks is quickly becoming an expectation.  Brands that focus on prospects and customers through social engagement will open new doors that increase brand awareness and sales through word of mouth. Businesses will also earn expanded relevance in the age of a new and powerful medium.</p>
<p>By using these rules as guidelines, you will be on your way to  attaining Social Media Optimization, while also potentially gaining some new followers, friends, or RSS'ers! Make use of the knowledge you have, your never know how many people will want to share it with their world.</p>
<p> </p>
<p> </p>
<p> </p>]]></description><pubDate>8/11/2010 10:09:53 AM</pubDate></item><item><title><![CDATA[Big Rusty Anchor]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>I read a lot of business books.  I find that a well written business book can have an instant impact on the growth of a small business.</p>
<p>One of my favourite authors is Jim Collins (Built to Last, Good to Great, How the Mighty Fall).  He doesn't write about small business per se, but his research is very compelling and is applicable to businesses of all sizes.</p>
<p>One of his concepts that has stuck with me is the Big Hairy Audatious Goal - that shining star on the horizon that your business shoots for.  That near impossible achievement that inspires, motivates and guides every decision of a company.  Without a BHAG, Collins argues, you will never be a great company because you're not setting your sights high enough.  Fair enough.</p>
<p>I recently realized is that there is an equal and opposite force on a business that is just as important to identify if you want to achieve greatness.  The thing that's holding you back, dragging you down or getting in the way of your big decisions.  I call it the Big Rusty Anchor.</p>
<p>At Edentity, our BHAG is focussed on the number of Agility accounts that we can sign up in the next two years.  Pretty straightforward.  As we were trying to figure out how we can accelerate the progress toward this goal, we identified our Big Rusty Anchor: the sheer size and complexity of each new account.  With content management software, each account comes with an implementation.  The software itself is useless unless it's hooked into something like a web site or mobile site that the software can be used to manage.  These implementations take time - sometimes up to 6 months.  </p>
<p>So, while keeping our eyes fixed on the BHAG on the horizon, we are simultaneously trying to minimize the drag of the Big Rusty Anchor.  In our case, that means drastically simplifying CMS implementations, finding new and innovative ways to use our software and engaging partners and clients to help shoulder the implementation load.  I hope it works!</p>
<p>Do you have a BHAG?  What about a Big Rusty Anchor?</p>]]></description><pubDate>8/11/2010 3:54:23 PM</pubDate></item><item><title><![CDATA[Social Media Stream Widget Coming to Share This]]></title><author><![CDATA[Chuck Lee]]></author><description><![CDATA[<p>Share This has launched a Beta Program for it's upcoming Stream Widget </p>
<p>Participate in the Beta at: <a href="http://www.sharethis.com/streamdemo" class="ApplyClass" target="_blank">http://www.sharethis.com/streamdemo</a></p>
<p>username: sharethis<br />
password: Abc123</p>
<p>Stream Widget is a social media curation tool that can be added to web sites that will allow users to expose whats trending across various social media outlets based on keyword and/or domains.  This is a great way for endusers to see how your site or a particular campaign is trending and will help with:</p>
<ul>
    <li>Increasing user engagement </li>
    <li>Increase content relevancy with trending and social content </li>
    <li>Aggregate user's social activity from Facebook, Twitter and Google Buzz </li>
    <li>Increase sharing of site content through integrated Like and Comments </li>
</ul>
<p><img alt="" src="~/ecms.ashx/Images/sharethis_stream_demo.jpg" /></p>
<p>Will you try this? </p>]]></description><pubDate>8/9/2010 4:03:29 PM</pubDate></item><item><title><![CDATA[Shortcuts for initializing C# collections]]></title><author><![CDATA[Matthew Quinn]]></author><description><![CDATA[<p>When initializing a collection to a known set of values, C# provides a bit of syntactic sugar to cut down on your typing. The long way to initialize a list of the first 5 primes might look like this:</p>
<p>List&lt;int&gt; primes = new List&lt;int&gt;();<br />
primes.Add(2);<br />
primes.Add(3);<br />
primes.Add(5);<br />
primes.Add(7);<br />
primes.Add(11);<br />
You can shorten this to:</p>
<p>List&lt;int&gt; primes = new List&lt;int&gt;() { 2, 3, 5, 7, 11 };<br />
// Works for arrays too<br />
int[] primes = new int[] { 2, 3, 5, 7, 11 };<br />
There is a similar shortcut for dictionaries. This comes in handy when you're initializing a UGC Record:</p>
<p>Record blogPost = new Record() {<br />
    ID = -1,<br />
    RecordTypeName = "BlogPost",<br />
    Values = new Dictionary&lt;string, object&gt;() {<br />
        { "Title", "Example Post" },<br />
        { "Body", "&lt;p&gt;This is the body of my post.&lt;/p&gt;" },<br />
        { "Date", DateTime.Now },<br />
        { "ViewCount", 0 }<br />
    }<br />
};</p>
<p > </p>]]></description><pubDate>7/29/2010 10:37:07 AM</pubDate></item><item><title><![CDATA[Simple ways UGC can benefit your brand]]></title><author><![CDATA[Pam Westwater]]></author><description><![CDATA[<p>Found this great video from the <a href="http://www.imediaconnection.com/content/27258.asp##" class="NewsLink" target="_blank">iMedia Connection</a> site on how UGC has helped some of the bigger brands build their Brand Name and relationship with their customers.  The ability to have users submitting their own content to your site not only allows them to be a part of the branding experience, but also creates additional "buzz" for your products. </p>
<p> <embed name="flashObj" width="486" height="412" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" src="http://c.brightcove.com/services/viewer/federated_f8/271566451" type="application/x-shockwave-flash" swliveconnect="true" seamlesstabbing="false" base="http://admin.brightcove.com" flashvars="videoId=194064787001&amp;playerId=271566451&amp;viewerSecureGatewayURL=https://console.brightcove.com/services/amfgateway&amp;servicesURL=http://services.brightcove.com/services&amp;cdnURL=http://admin.brightcove.com&amp;domain=embed&amp;autoStart=false&amp;" bgcolor="#FFFFFF" /> </p>
<p>Many companies tend to stick to their in-house marketing team to supply the content for their site, which has proven to be quite successful over the years.  But as of late, with the increasing popularity of social networks and blogging, it has become almost necessary to have some form of UGC on your site.  This feature makes the branding much more relatable to the consumer, and creates great interactivity for the site!</p>
<p>Agility is one of the CMS products out there that allows for UGC and can be developed to create a number of interactive options to your site.  Check it out at <a href="http://www.agilitycms.com" class="NewsLink" target="_blank">Agility CMS</a>! </p>]]></description><pubDate>8/9/2010 4:04:13 PM</pubDate></item><item><title><![CDATA[jQuery Code Snippets for use in Visual Studio 2010]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p><a href="http://weblogs.asp.net/joelvarty/archive/2010/06/22/thoughts-on-azure-compute-storage-and-sql.aspx" target="_blank"></a></p>
<p>These are just genius.  I especially like the one for adding an AJAX call to the asmx, which is always a pain.</p>
<p><a href="http://jquerysnippets.codeplex.com/documentation?referringTitle=Home">http://jquerysnippets.codeplex.com/documentation?referringTitle=Home</a></p>
<p>A quick demo of the code snippets can be found <a href="http://www.screencast.com/users/JohnSheehan/folders/Jing/media/e0787da7-5e1c-4eef-bbb9-648426204be5" target="_blank">here</a>.  This is a great time saver, and the plugin template is great too!</p>
<p>more later- joel</p>
<p>Joel Varty writes for the official ASP.net blog.  Subscribe to his blog here: <a href="http://weblogs.asp.net/joelvarty/archive/2010/06/22/thoughts-on-azure-compute-storage-and-sql.aspx">http://weblogs.asp.net/joelvarty/archive/2010/06/22/thoughts-on-azure-compute-storage-and-sql.aspx</a></p>]]></description><pubDate>7/26/2010 8:46:14 PM</pubDate></item><item><title><![CDATA[Creating and consuming Rss/Atom syndication feed in .NET Framework 3.5]]></title><author><![CDATA[Osvel Legon]]></author><description><![CDATA[<p>The .NET Framework did not provide any built-in functionality for creating or consuming syndication feeds until version 3.5 with the introduction of the <a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.syndication.aspx" class="NewsLink" target="_blank">System.ServiceModel.Syndication </a>namespace. </p>
<p>Usually we were exposing or consumimg syndication feeds like RSS or Atom by reading or writing the XML structure of the feed. There is no more need of this approach, when using the .Net Framework 3.5/4.0.</p>
<p>The most important class in the new namespace is <a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.syndication.syndicationfeed.aspx" class="NewsLink" target="_blank">SyndicationFeed</a>. This class represents a top-level feed object, &lt;feed&gt; in Atom 1.0 and &lt;rss&gt; in RSS 2.0. It has properties like Title, Description, Links, and Copyright, which provide details about the feed. The content items that make up the feed are specified via the Items property, which is a collection of SyndicationItem objects. The SyndicationFeed class also has a static Load method that parses and loads the information from a specified RSS 2.0 or Atom 1.0 syndication feed.</p>
<p>In addition to the SyndicationFeed and SyndicationItem classes, the System.ServiceModel.Syndication namespace also includes two formatter classes, <a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.syndication.atom10feedformatter.aspx" class="NewsLink" target="_blank">Atom10FeedFormatter</a> and <a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.syndication.rss20feedformatter.aspx" class="NewsLink" target="_blank">Rss20FeedFormatter</a>. These classes take a SyndicationFeed object and generate the corresponding XML content that conforms to either the Atom 1.0 or RSS 2.0 specificiations.</p>
<p> </p>]]></description><pubDate>7/26/2010 11:39:24 AM</pubDate></item><item><title><![CDATA[Microsoft to sell Azure Appliances]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>According to C|NET, Microsoft will begin selling their cloud service,
Azure, as an appliance.&nbsp; Hardware manufacturers, such as HP and Dell,
will be able to host and sell Azure from their own data centers.</p>
<p><a href="http://news.cnet.com/8301-13860_3-20010124-56.html?tag=nl.e703" target="_blank" class="ApplyClass">http://news.cnet.com/8301-13860_3-20010124-56.html?tag=nl.e703</a></p>
<p></p>]]></description><pubDate>7/12/2010 1:17:53 PM</pubDate></item><item><title><![CDATA[Summary of Windows Azure]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>Windows Azure, Microsoft's cloud platform, is ready for primetime. When we think of cloud-based infrastructures, it has many pieces that make it both viable and attractive from many points of view.</p>
<p><strong>So what is Azure, really?<br />
</strong><br />
I attended a technical briefing for Microsoft partners in Toronto last week, and this was the biggest question.  I think there is a lot of misconception out there about what is offered and was is possible with Azure.  </p>
<p><strong>Windows Azure - Compute<br />
</strong><br />
To  be quite blunt, this is primarily meant for Web Apps and Web Services, with the Compute platform tailored to what are called “Web Roles” and “Worker Roles”.  These can ONLY be coded in managed code, however they can invoke executables written in whatever language you like.  Basically, a web role is a web app, and do pretty much anything a web app can do.  A worker role is akin to a windows service, and if you’ve coded your windows services with decent separation of concerns, you should be port one of those over with no difficulty.</p>
<p>The real power of the Compute platform is that is allows you to manually ramp up the number and size of Instances (read: Virtual Machines) that you want the app to be deployed, both for Web and Worker roles.  This means you can flip a config variable and ramp up the power without ever calling IT or touching any routers or load balancers or anything.  If you have a multi-tenanted app, this is nice.  If not, if you have a an app that’s is single-server, uses a ton of session, is coded like the tutorials, and isn’t meant to be publically available… you might want to reconsider if you need a cloud solution at all.</p>
<p>What’s really good here is that, as of June 2010,  .Net 4.0 is supported in Compute.</p>
<p><strong>Windows Azure – Storage<br />
</strong><br />
Table Storage – this is really “entity” storage (I know, I know, kind of the same thing), but really this is just a serialized object repository with the ability to be queried in OData style using the Data Services API.  Basically, you can dump objects in and get them out again.  It has automatic partitioning based on a partition key, meaning this is very scalable.  What stinks about it right now is that it only supports a pretty small subset of the OData (and therefore Data Servics) specification. </p>
<p><strong>Blob Storage</strong></p>
<p>Blobs equal files.  You can do block (sequential, or streamed) blobs or “paged blobs”.  These are not good names, but who cares?  The biggest annoyance is that it isn’t as good as Amazon S3 (yet), except that it’s stored in the same environment as your Compute instance(s), meaning that you don’t pay for data transfer to and from the Compute and Storage.  You only pay for data transfer in and out of Azure itself.  </p>
<p><strong>Queue Storage</strong></p>
<p>A queue where items live for up to seven days, 8kb string max.  Useful for implementing a multi-instance worker role pattern where the web roles create items in the queue and they are processed by an offline worker role.  These are not MSMQ, but they are still wicked useful.</p>
<p><strong>SQL Azure<br />
</strong><br />
Databases in the cloud.  Great!  Except that you can’t do Table partitioning based on filegroup, which is major pain.  The only way to scale is to do what is called database sharding.  I’m hoping I can hold out until we can do something less useless.  I don’t want to rewrite app code and join data in my data access layer.  That defeats the purpose of SQL Server at all.</p>
<p>To be continued…</p>
<p><strong>Windows Azure AppFabric<br />
</strong><br />
The most important thing about Azure AppFabric is to know that it is NOTHING like Windows Server AppFabric.  Which is too bad – because there isn’t yet a decent solution for distributed caching Azure Compute… a real shame.</p>
<p>All in all, Azure is the real deal, and you’d do well to research this carefully – the naming of the technology has changed over the last 18 months and there is as much misinformation and rumor out there as anything else.  If in doubt, stick with what MSDN tells us.</p>
<p>more later - joel</p>
<p><em>Joel Varty writes for the official ASP.net blog.  Subscribe to his blog here: </em><a href="http://weblogs.asp.net/joelvarty/archive/2010/06/22/thoughts-on-azure-compute-storage-and-sql.aspx" class="ApplyClass" target="_blank"><em>http://weblogs.asp.net/joelvarty/archive/2010/06/22/thoughts-on-azure-compute-storage-and-sql.aspx</em></a></p>]]></description><pubDate>6/23/2010 8:39:06 PM</pubDate></item><item><title><![CDATA[JS Bin - Collaborative JavaScript Debugging]]></title><author><![CDATA[Osvel Legon]]></author><description><![CDATA[<p>I've been using <a href="http://jsbin.com/" class="ApplyClass" target="_blank">JSBin</a> as a tool to test some of the javascript code I can find in the Internet, and for my own javascript code test also.</p>
<p>This site/tool has some collaborative options. You can share with others the code you created using a URL, and it also provides a kind of versioning option of the code.</p>]]></description><pubDate>6/23/2010 8:42:40 PM</pubDate></item><item><title><![CDATA[Client side charts from Google]]></title><author><![CDATA[Osvel Legon]]></author><description><![CDATA[<p> With <a href="http://code.google.com/apis/charttools/index.html" class="ApplyClass" target="_blank">Google Chart Tools</a> we have a powerful tool to start developing more interactive client side charts. </p>
<p><strong>What are Google Chart Tools?</strong></p>
<p>The Google Chart Tools enable adding live charts to any web page. </p>
<p>The advantages of the Google Chart Tools are:A rich gallery of visualizations provided as: Image charts - using a simple URL request to a Google chart server Interactive charts - using a Google developed JavaScript library Can read live data from a variety of <a href="http://code.google.com/apis/visualization/documentation/toolsgallery.html" target="_blank">data sources</a>.</p>
<p>Simple to use and free jQuery integrationThere are some jQuery plugins that are making easy the use of this toll like Google Charts, you can see demos <a href="http://keith-wood.name/gChart.html" target="_blank">here</a>.  </p>]]></description><pubDate>6/23/2010 8:43:46 PM</pubDate></item><item><title><![CDATA[Unique IDs for regular HTML elements in modules]]></title><author><![CDATA[Matthew Quinn]]></author><description><![CDATA[<p>The fastest way to get a handle on an object in the HTML DOM is by its ID. This also applies to jQuery's ID selector. Consequently it makes sense to put ID attributes on any elements you're planning to select.</p>
<p>However, IDs need to be unique in order to work as expected. This adds a bit of a challenge when writing Agility modules, which may appear multiple times on a page. In order to guarantee uniqueness of IDs (without using .NET controls, which generate these IDs automatically), you can do the following:</p>
<p>&lt;!-- beginning of module --&gt;<br />
&lt;div id="&lt;%= ClientID %&gt;"&gt;<br />
  &lt;img id="&lt;%= ClientID %&gt;_Image" src="..." alt="..." /&gt;<br />
  &lt;p id="&lt;%= ClientID %&gt;_Summary"&gt;Some content.&lt;p/&gt;<br />
&lt;/div&gt;<br />
&lt;!-- end of module --&gt;<br />
Since the ClientID for the control will be unique, you will also have a unique ID for each of the child elements. Additionally, you only have to pass the ClientID to a JavaScript function and you'll already know how to get all the child elements by using the same ID suffixes.</p>
<p> </p>]]></description><pubDate>6/14/2010 5:10:56 PM</pubDate></item><item><title><![CDATA[Iteration order of an object's properties in Javascript]]></title><author><![CDATA[Matthew Quinn]]></author><description><![CDATA[<p>I was in a situation where I was iterating over a Javascript object which I was using like a dictionary of objects. e.g.</p>
<p>var dictionary = {  key1: { prop1: "", prop2: "" },  key2: { prop1: "", prop2: "" },  key3: ...};This object was being retrieved through a JSON call. Once it was retrieved, I was iterating over it using a for..in loop.</p>
<p>for (var key in dictionary) {  doSomething(dictionary[key]);}I was expecting the order of the keys to be the same as when the dictionary was defined, and this is true in all browsers except Chrome, where the order was arbitrary. As it turns out, the iteration order of properties in an object is not required in the Javascript specification, even though most browsers behave that way.</p>
<p>In order to get the correct behaviour, you can create an array of the keys in traversal order, and iterate over that instead. In this case, the order will of course be maintained. In my case, this array had to be returned with the original dictionary in the JSON call.</p>
<p>var dictionary = {  key1: { prop1: "", prop2: "" },  key2: { prop1: "", prop2: "" },  key3: ...};var orderedKeys = ["key1", "key2", "key3", ...];for (var i = 0; i &lt; orderedKeys.length; i++) {  doSomething(dictionary[orderedKeys[i]]);}</p>]]></description><pubDate>6/14/2010 5:10:27 PM</pubDate></item><item><title><![CDATA[Amazon CloudFront Now Supports HTTPS]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p>Today Amazon release an update to their popular CDN service CloudFront with support for secure communication over HTTPS. Previously CloudFront was restricted to HTTP traffic only which made it impossible to use within secure sites. With this release we gain security without limiting performance.</p>
<p>For more details check out:<br />
<a href="http://aws.amazon.com/cloudfront/">http://aws.amazon.com/cloudfront/</a></p>
<p>Mike</p>
<p> </p>]]></description><pubDate>6/14/2010 5:10:43 PM</pubDate></item><item><title><![CDATA[Google Font API & Google Font Directory]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>There is a CSS element out there that looks like this:</p>
<p>@font-face { <br />
  font-family: ''; <br />
  src: url('…'); <br />
}</p>
<p>I’ve only used this tag in a bunch of old apps and sites that were built exclusively for IE back in the day.  </p>
<p>Well, it’s part of CSS 3 and Google is going to make it easy to find and share fonts.</p>
<p><a href="http://googlecode.blogspot.com/2010/05/introducing-google-font-api-google-font.html" class="ApplyClass" target="_blank">http://googlecode.blogspot.com/2010/05/introducing-google-font-api-google-font.html</a></p>
<p>more later - joel</p>
<div style="clear: both;"></div>
<p><i>Read the complete post at <a href="http://weblogs.asp.net/joelvarty/archive/2010/05/27/google-font-api-amp-google-font-directory.aspx" target="_blank">http://weblogs.asp.net/joelvarty/archive/2010/05/27/google-font-api-amp-google-font-directory.aspx</a></i></p>]]></description><pubDate>5/31/2010 12:23:13 PM</pubDate></item><item><title><![CDATA[Retrieve anonymous user password for websites on IIS 6]]></title><author><![CDATA[Henry Ji]]></author><description><![CDATA[<p>Some times you may need to change the user for anonymous access for a website in IIS 6 in Authentication and Access Control of the website. But when you want to change it back to the default IUSR_&lt;machinename&gt; user, you need type in its password. There are several ways to retrieve the password of the IUSR_&lt;machinename&gt; user.</p>
<p>First, you can just install IIS 6.0 Resource Kit Tools and use Metabase Explorer in it to check the secret and inherited values from the other websites currently using the IUSR_&lt;machinename&gt; user for anonymous access.</p>
<p>Second, you can use script under the Inetpub\AdminScripts folder to query the password by running the following command-line statement. Before that, you need change IsSecureProperty = True to IsSecureProperty = False in the Inetpub\AdminScripts\adsutil.vbs script otherwise you will just see ****** displayed as password:</p>
<p>[Drive:]\Inetpub\AdminScripts&gt;cscript adsutil.vbs get w3svc/anonymoususerpass</p>
<p>Last, you can program a simple asp or aspx page and deploy it to a website currently using the IUSR_&lt;machinename&gt; user for anonymous access, to use IIS ADSI object to retrieve the password for the anonymoususerpass object.</p>]]></description><pubDate>5/31/2010 12:23:44 PM</pubDate></item><item><title><![CDATA[Google Storage for Developers]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>I noticed <a href="http://code.google.com/apis/storage/docs/overview.html" target="_blank">this</a> today and it seems to be a service that will compete with Amazon S3 and Microsoft’s Azure Blob storage.</p>
<p>It’s only open to US developers for now, but I have one burning question: can we transfer directly from Google Storage to another Google service (like YouTube, Docs, etc) without incurring any transfer charges?  </p>
<p>The even bigger question is whether all of the APIs will be updated to include this new service and to better amalgamate the existing app services with this one, since storage is so central to everything, it seems to beg the question.</p>
<p>via <a href="http://daringfireball.net/linked/2010/05/19/google-storage" target="_blank">Daring Fireball</a></p>
<p>more later - joel</p>
<img width="1" height="1" alt="" src="http://weblogs.asp.net/aggbug.aspx?PostID=7491746" /><i>Read the complete post at <a href="http://weblogs.asp.net/joelvarty/archive/2010/05/20/google-storage-for-developers.aspx" class="ApplyClass" target="_blank">http://weblogs.asp.net/joelvarty/archive/2010/05/20/google-storage-for-developers.aspx</a></i>]]></description><pubDate>5/20/2010 3:40:01 PM</pubDate></item><item><title><![CDATA[Using Amazon S3/Cloudfront and Encoding.com to deliver web video – step by step for iPhone/iPod/iPad…]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p><a href="http://aws.amazon.com/" target="_blank"><img alt="" style="border-bottom: 0px solid; border-left: 0px solid; border-top: 0px solid; border-right: 0px solid;" src="http://g-ecx.images-amazon.com/images/G/01/webservices/AWS_LOGO._V2289989_.gif" /></a></p>
<p>The Amazon AWS newsletter for May 2010 had a <a href="http://www.encoding.com/amazon/apple_streaming.php" target="_blank">great link</a> in it to this article by encoding.com on how you can use they service to encode your video for multi-format, multi-bandwidth streaming to many devices, including iPhone, iPad, and Flash with H264.</p>
<p> </p>
<p><a href="http://www.encoding.com/amazon/apple_streaming.php" target="_blank"><img width="358" height="50" style="border-bottom: 0px solid; border-left: 0px solid; display: inline; border-top: 0px solid; border-right: 0px solid;" title="image" alt="image" src="http://weblogs.asp.net/blogs/joelvarty/image_47082967.png" /></a> </p>
<p>This looks like it doesn’t actually take advantage of CloudFront streaming, but merely splits your encoded files into the available chunks and includes all of the M3U8 files that point to the different bitrates and such.</p>
<p> </p>
<p><img width="672" height="316" style="border-bottom: 0px solid; border-left: 0px solid; display: inline; border-top: 0px solid; border-right: 0px solid;" title="image" alt="image" src="http://weblogs.asp.net/blogs/joelvarty/image_03044550.png" /> </p>
<p>This looks like a pretty sweet service in general, especially since they seem to have <a href="http://www.encoding.com/wdocs/ApiDoc" target="_blank">an API</a> as well, so that may be very useful to those of you out there looking to host video.</p>
<p>more later – joel</p>
<img width="1" height="1" alt="" src="http://weblogs.asp.net/aggbug.aspx?PostID=7486645" />
<div style="clear: both;"></div>
<p><i>Read the complete post at <a href="http://weblogs.asp.net/joelvarty/archive/2010/05/17/using-amazon-s3-cloudfront-and-encoding-com-to-deliver-web-video-step-by-step-for-iphone-ipod-ipad.aspx" class="ApplyClass" target="_blank">http://weblogs.asp.net/joelvarty/archive/2010/05/17/using-amazon-s3-cloudfront-and-encoding-com-to-deliver-web-video-step-by-step-for-iphone-ipod-ipad.aspx</a></i></p>]]></description><pubDate>5/17/2010 1:41:22 PM</pubDate></item><item><title><![CDATA[YouTube announces new privacy option for videos]]></title><author><![CDATA[Chuck Lee]]></author><description><![CDATA[<p>YouTube has just introduced a new privacy option for videos uploaded to the site, <a href="http://youtube-global.blogspot.com/2010/05/more-choice-for-users-unlisted-videos.html" target="_blank"><span style="color: #2266bb;">Unlisted Videos</span></a>. The new option lets users post videos to the site and mark them as “unlisted.”</p>
<p>Essentially Unlisted Videos are private videos that anyone can view if, and only if, they have access to the video URL. These videos will not show up on public pages, in search results or on user channels. There’s no limit on the amount of people who can view the video, and anyone can see it, regardless of whether or not they have a YouTube account.</p>
<p>Unlisted Videos should be welcomed by users not satisfied with the existing public and private options. Private videos could only be shared with other YouTube users. This new option is perfect for teachers, students, non-profits, organizations and anyone else who wants to upload a video to YouTube, share it, but not expose it to the world.</p>
<p>This will be a great way to add private UGC content to your site without the restrictions currently involved with YouTube private videos.</p>]]></description><pubDate>5/17/2010 1:40:53 PM</pubDate></item><item><title><![CDATA[Share different URLs from that of current page using AddThis]]></title><author><![CDATA[Henry Ji]]></author><description><![CDATA[<p>By default, the AddThis code will allow you to share the URL of current page by clicking the generated links. If you add the AddThis links for individual entries on the main entry listing page, you will want AddThis to share the URL of the individual entry instead of the main entry listing page. This can be done using the following code example:</p>
<p><span class="pun">&lt;</span><span class="tag">a</span><span class="pln"> </span><span class="atn">href</span><span class="pun">=</span><span class="atv">"http://www.addthis.com/bookmark.php"</span><span class="pln"> <br />
      </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"addthis_button"</span><span class="pln"><br />
      </span><span class="atn">addthis:url</span><span class="pun">=</span><span class="atv">"http://example.com"</span><span class="pln"><br />
      </span><span class="atn">addthis:title</span><span class="pun">=</span><span class="atv">"An Example Title"</span><span class="pln"><br />
      </span><span class="atn">addthis:description</span><span class="pun">=</span><span class="atv">"An Example Description"</span><span class="pun">&gt;&lt;/</span><span class="tag">a</span><span class="pun">&gt;</span></p>
<p><span class="pun">The addthis help page is <a href="http://www.addthis.com/help/url-and-title" class="ApplyClass" title="AddThis - Help" target="_blank">here</a>.</span></p>
<p><span class="pun">And if you try to implement this by adding url query string parameter to bookmark.php for href in the above code, it won't work in this case because the AddThis javascript code will override it based on cssclass addthis_button.</span></p>]]></description><pubDate>5/12/2010 2:04:35 PM</pubDate></item><item><title><![CDATA[Microsoft’s Contribution to jQuery – Client Templating]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>I am interested to see the community’s response to Microsoft’s contributions to jQuery.  I have been using jTemplates on and off in my apps for a while, but I will certainly check out the new templating plugins put forth by MS and explained <a href="http://weblogs.asp.net/scottgu/archive/2010/05/07/jquery-templates-and-data-linking-and-microsoft-contributing-to-jquery.aspx" class="ApplyClass" target="_blank">here</a> by Scott Guthrie.</p>
<p>It may be that some are against the very idea of a company like Microsoft being involved with jQuery, and Scott explains the process with the following:</p>
<p>“jQuery has a fantastic developer community, and a very open way to propose suggestions and make contributions.  Microsoft is following the same process to contribute to jQuery as any other member of the community.”</p>
<p>I think we can take this in one of two ways:  </p>
<ol>
    <li>It’s great that Microsoft sees themselves as a part of a greater community that they can support. </li>
    <li>It’s the first step in Microsoft’s attempt to usurp the community and have greater control over the web, it’s standards, and it’s developer community. </li>
</ol>
<p>Personally, I believe Microsoft sees the world (and the web) differently from how they did back when IE had more than %80 of the browser market.  Now, in order to keep it’s development products relevant, they are pushing Asp.Net (as they have been for a few years) towards a more open strategy that’s more “web-like” in my opinion.</p>
<p>These contributions to jQuery are a good thing, I think.  Now, let’s go try out these new plug-ins and see if they stack up…</p>
<p>more later - joel</p>
<img width="1" height="1" alt="" src="http://weblogs.asp.net/aggbug.aspx?PostID=7473771" /><i>Read the complete post at <a href="http://weblogs.asp.net/joelvarty/archive/2010/05/07/microsoft-s-contribution-to-jquery-client-templating.aspx" target="_blank">http://weblogs.asp.net/joelvarty/archive/2010/05/07/microsoft-s-contribution-to-jquery-client-templating.aspx</a></i>]]></description><pubDate>5/7/2010 10:09:06 AM</pubDate></item><item><title><![CDATA[My thoughts on the future of the web with respect to flash, plugins, etc…]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>More than 10 years ago I was coding Java applets.  They were great at the time because I could reasonably expect them to run the same way in Netscape and Internet Explorer.  I could also reliably do asynchronous networking back to the server.  But then, Microsoft pulled their native Java runtime from Windows and Internet Explorer.  It got a lot harder to get applets running in people’s browsers.</p>
<p>So I started writing ActiveX controls for IE and Java applets for Netscape.</p>
<p>Then I switched to Flash, not for too long, but it was enough for me to see that it was a capable and curious implementation of animation, multimedia and script.</p>
<p>I even wrote a few Silverlight controls, but then I stopped.</p>
<p>I stepped back from all of the “richness” and “interactivity” and I thought about things like accessibility and SEO.  I wondered how my apps and sites might appear to the greater world.  I wondered how the developers I am working with, or who might be inheriting my code down the road, might interact with it.</p>
<p>And I thought to myself, <em>What the hell was I thinking?</em></p>
<p>Those embedded controls are not what the web is about, and they run contrary to nearly all of the things that makes the web exciting and fosters innovation within and around.   Those plugins or controls, or whatever you want to refer to them as, are only stop-gaps that fill a hole in the basic HTML/Script/CSS specifications, and that’s all they should ever be used for.  Full stop.  Period.  </p>
<p>For instance, I still make use of a nifty little flash control called <a href="http://www.swfupload.org/" target="_blank">SWFUpload</a> because it lets me check file size before an upload starts.  I can do the same thing from a Silverlight control.  But rest assured, if I could do this from native javascript, I would in a second.  In fact, the only reason I chose SWFUpload over a ton of other alternatives is that it has a great javascript API so I can do (nearly) all of the UI in regular HTML.  And I ALWAYS provide a non-flash alternative for uploading, and for the rest of any website where the designer has insisted on some piece of creativity that requires flash (usually because the designer is also the flash developer, but that’s an aside…).</p>
<p>The web is about openness, and about exposing that openness in such a way that it can be taken advantage of as a small part of a greater whole.  Sure we need security and authentication and ssl and all that stuff, but for me, its something more profound.  For me, the majority of what the web is, is about exposing <em>something</em> that delivers meaning.  </p>
<p>What meaning can we derive from an &lt;object&gt; tag?</p>
<p> </p>
<p>more later - joel</p>
<img width="1" height="1" alt="" src="http://weblogs.asp.net/aggbug.aspx?PostID=7472908" />
<div style="clear: both;"></div>
<p><i>Read the complete post at <a href="http://weblogs.asp.net/joelvarty/archive/2010/05/06/my-thoughts-on-the-future-of-the-web-with-respect-to-flash-plugins-etc.aspx" class="ApplyClass" target="_blank">http://weblogs.asp.net/joelvarty/archive/2010/05/06/my-thoughts-on-the-future-of-the-web-with-respect-to-flash-plugins-etc.aspx</a></i></p>]]></description><pubDate>5/7/2010 10:08:47 AM</pubDate></item><item><title><![CDATA[Breaking Changes in Asp.Net 4]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>I upgraded an app to .net just for fun and a bunch of things broke. </p>
<p>Turns out there are quite a few things that are officially broken between anything and .Net 4.0…</p>
<p><a href="http://www.asp.net/%28S%28ywiyuluxr3qb2dfva1z5lgeg%29%29/learn/whitepapers/aspnet4/breaking-changes/" class="ApplyClass" title="http://www.asp.net/%28S%28ywiyuluxr3qb2dfva1z5lgeg%29%29/learn/whitepapers/aspnet4/breaking-changes/" target="_blank">http://www.asp.net/%28S%28ywiyuluxr3qb2dfva1z5lgeg%29%29/learn/whitepapers/aspnet4/breaking-changes/</a></p>
<p>more later – joel</p>
<img width="1" height="1" alt="" src="http://weblogs.asp.net/aggbug.aspx?PostID=7471614" />
<div style="clear: both;"></div>
<p><i>Read the complete post at <a href="http://weblogs.asp.net/joelvarty/archive/2010/05/05/breaking-changes-in-asp-net-4.aspx" target="_blank">http://weblogs.asp.net/joelvarty/archive/2010/05/05/breaking-changes-in-asp-net-4.aspx</a></i></p>]]></description><pubDate>5/7/2010 10:07:25 AM</pubDate></item><item><title><![CDATA[Setting up excel so that you can open items from Team Explorer]]></title><author><![CDATA[Kyle Tinning]]></author><description><![CDATA[<p>I was unable to open work items from Team Explorer in Excel.  I found this link with very clear and simple instructions:</p>
<p><a href="http://blog.solidsoft.com/blogs/richards_infrastructure_blog/archive/2006/11/02/165.aspx" class="ApplyClass" target="_blank">http://blog.solidsoft.com/blogs/richards_infrastructure_blog/archive/2006/11/02/165.aspx</a> </p>
 ]]></description><pubDate>5/7/2010 10:07:59 AM</pubDate></item><item><title><![CDATA[Issue with VS 2010 RTM: IDE hangs when debugging .net 3.5 web apps]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>This isn’t how I hoped my first experience with the VS 2010 RTM would be…</p>
<p>Issue is logged with Microsoft <a href="https://connect.microsoft.com/VisualStudio/feedback/details/556000/vs-2010-hangs-when-debugging-asp-net-3-5-web-application-or-website" target="_blank">here</a>. </p>
<p>I will post updates on this blocking issue.</p>
<p>more later - joel</p>
<div style="clear: both;"></div>
<p><i>Read the complete post at <a href="http://weblogs.asp.net/joelvarty/archive/2010/04/30/issue-with-vs-2010-rtm-ide-hangs-when-debugging-net-3-5-web-apps.aspx">http://weblogs.asp.net/joelvarty/archive/2010/04/30/issue-with-vs-2010-rtm-ide-hangs-when-debugging-net-3-5-web-apps.aspx</a></i></p>]]></description><pubDate>5/7/2010 10:07:44 AM</pubDate></item><item><title><![CDATA[Great info on making HTML E-Mail marketing work in the new online ecosystem]]></title><author><![CDATA[Ian Davis]]></author><description><![CDATA[<p>Sharing a little info on HTML marketing here (I have some experience in this area, sending out about 60 million emails in the last 4 years)</p>
<p>Great tips from a recent campaign by Mac developer Panic and marketing firm campaign monitor on how to craft and deliver successful campaigns to a wide variety of platforms. </p>
<p><a href="http://www.campaignmonitor.com/blog/post/3116/what-you-can-learn-from-panics-email-marketing/" class="ApplyClass" target="_blank">http://www.campaignmonitor.com/blog/post/3116/what-you-can-learn-from-panics-email-marketing/</a></p>
<p>Check it out!</p>]]></description><pubDate>5/3/2010 1:50:17 PM</pubDate></item><item><title><![CDATA[SQL Server 2008 R2 was released today]]></title><author><![CDATA[Henry Ji]]></author><description><![CDATA[<p>SQL Server 2008 R2 Launch Site: <a href="http://www.sqlserverlaunch.com/" target="_blank"><span style="color: #ff5b00;">http://www.sqlserverlaunch.com/</span></a></p>
<p>Official Microsoft Site for SQL Server 2008 R2: <a href="http://www.microsoft.com/sqlserver/2008/en/us/R2.aspx" target="_blank"><span style="color: #ff5b00;">http://www.microsoft.com/sqlserver/2008/en/us/R2.aspx</span></a></p>
<p>R2 edtions: <a href="http://www.microsoft.com/sqlserver/2008/en/us/R2-editions.aspx" class="ApplyClass" target="_blank">http://www.microsoft.com/sqlserver/2008/en/us/R2-editions.aspx</a></p>]]></description><pubDate>4/26/2010 2:47:30 PM</pubDate></item><item><title><![CDATA[Amazon CloudFront Cache Invalidation – Fill out the Survey!]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>Amazon have come up with a survey regarding how cache can be invalidated on object stored in their CloudFront servers.</p>
<p><a href="http://survey.amazonwebservices.com/survey/s?s=1369" title="http://survey.amazonwebservices.com/survey/s?s=1369">http://survey.amazonwebservices.com/survey/s?s=1369</a></p>
<p>This is a key feature for Agility CMS, and for a lot of other applications.</p>
<p>If it’s important to you, I suggest you spend a few minutes and fill it out.</p>
<p>more later - joel</p>
<div style="clear: both;"></div>
<p><i>Read the complete post at <a href="http://weblogs.asp.net/joelvarty/archive/2010/04/13/amazon-cloudfront-cache-invalidation-fill-out-the-survey.aspx">http://weblogs.asp.net/joelvarty/archive/2010/04/13/amazon-cloudfront-cache-invalidation-fill-out-the-survey.aspx</a></i></p>]]></description><pubDate>4/14/2010 10:13:34 AM</pubDate></item><item><title><![CDATA[VS.PHP - Write PHP code within the Visual Studio IDE]]></title><author><![CDATA[Mike Iskiw]]></author><description><![CDATA[<p><a href="http://www.jcxsoftware.com/download.php">http://www.jcxsoftware.com/download.php</a> </p>
<p>Might be worth a look at.</p>
<p>Mike</p>]]></description><pubDate>4/14/2010 10:13:58 AM</pubDate></item><item><title><![CDATA[Visual Studio 2010 and .Net Framework 4.0 – Available today!]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>Senior vice president of the Developer Division at Microsoft, <a href="http://www.microsoft.com/presspass/exec/somasegar/" target="_blank">S. Somasegar</a> announced the availability of VS 2010 and .Net 4.  He writes the following:</p>
<p>“This represents the biggest tools release from Microsoft in many years.”</p>
<h4>Silverlight 4 coming later this week</h4>
<p>He also writes about Silverlight 4 - “I am also thrilled to say that Silverlight 4 will be released to the Web later this week. When Silverlight 4 is released, you will be able to download an update for Visual Studio 2010 to support Silverlight 4 development.”</p>
<p>See the full post <a href="http://blogs.msdn.com/somasegar/archive/2010/04/11/announcing-visual-studio-2010-and-net-framework-4.aspx" target="_blank">here</a>.</p>
<p>more later - joel </p>
<img width="1" height="1" alt="" src="http://weblogs.asp.net/aggbug.aspx?PostID=7440582" /> <i>Read the complete post at <a href="http://weblogs.asp.net/joelvarty/archive/2010/04/12/visual-studio-2010-and-net-framework-4-0-available-today.aspx" class="ApplyClass" target="_blank">http://weblogs.asp.net/joelvarty/archive/2010/04/12/visual-studio-2010-and-net-framework-4-0-available-today.aspx</a></i>]]></description><pubDate>4/12/2010 2:24:44 PM</pubDate></item><item><title><![CDATA[Data Services Update for .NET 3.5 SP1]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[I have started writing OData style services for a couple of clients, and I noticed that a lot of the classes in the API were missing… That’s because I needed to download the update, just having .net 3.5 sp1 wasn’t enough..
<p><a href="http://blogs.msdn.com/astoriateam/archive/2010/01/27/data-services-update-for-net-3-5-sp1-available-for-download.aspx" title="http://blogs.msdn.com/astoriateam/archive/2010/01/27/data-services-update-for-net-3-5-sp1-available-for-download.aspx">http://blogs.msdn.com/astoriateam/archive/2010/01/27/data-services-update-for-net-3-5-sp1-available-for-download.aspx</a></p>
<p>More later - joel</p>
<img width="1" height="1" alt="" src="http://weblogs.asp.net/aggbug.aspx?PostID=7434388" /><i>Read the complete post at <a href="http://weblogs.asp.net/joelvarty/archive/2010/04/07/data-services-update-for-net-3-5-sp1.aspx">http://weblogs.asp.net/joelvarty/archive/2010/04/07/data-services-update-for-net-3-5-sp1.aspx</a></i>]]></description><pubDate>4/12/2010 2:25:31 PM</pubDate></item><item><title><![CDATA[YSlow for Firebug: Grade your web pages speed and identify bottlenecks.]]></title><author><![CDATA[Ian Davis]]></author><description><![CDATA[<p>When tracking down performance or load time issues, Firebug is a great tool for debugging web sites, but unfortunately is a little clunky when it comes to packaging that information into quickly identifiable errors.</p>
<p>YSLOW, from yahoo (<a href="http://developer.yahoo.com/yslow" class="ApplyClass" target="_blank">http://developer.yahoo.com/yslow</a>) works within firebug to "grade" your site based on HTML structure, javascript run times, network connections, etc and presents them to the user in a report, grading each are from F to A+. </p>
<p>When tracking down speed issues, it's an essential tool for all developers here @ Edentity, and paired with Yahoo's great guidelines for High performance websites here (<a href="http://developer.yahoo.com/performance/rules.html" target="_blank">http://developer.yahoo.com/performance/rules.html</a>) will really help make our sites fly.</p>]]></description><pubDate>3/30/2010 11:06:24 AM</pubDate></item><item><title><![CDATA[Why Agility over Joomla Or Drupal]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>People always ask me why would anyone pay for Agility when they can get Joomla or Drupal for free.</p>
<p>Here are the main points:</p>
<ul>
    <li>Open source software is not owned by anyone, so no one takes ownership over it
    <ul>
        <li>No tech support </li>
        <li>No neck to ring if something goes wrong </li>
        <li>Spotty documentation </li>
    </ul>
    </li>
    <li>You really have to be an expert to sift through all of the modules and add-ins to get the ones you want </li>
    <li>They are both very confusing and difficult to use for end users </li>
    <li>It is hard to find a developer who is experienced enough to implement it right, and if you do, they disappear after the project </li>
    <li>You still have to host the website and the software somewhere which costs money </li>
</ul>
<p>Also, Dan Knauss explains how Joomla is missing the boat in CMS.  He argues that Joomla doesn't even classify as a CMS:</p>
<p><a href="http://www.alltogetherasawhole.org/profiles/blogs/the-competition-joomla-is">http://www.alltogetherasawhole.org/profiles/blogs/the-competition-joomla-is</a></p>
<p>And then there are posts on RoboZen and Bivings Group about why Drupal sucks:</p>
<p><a href="http://robozen.com/technology/drupal-sucks/">http://robozen.com/technology/drupal-sucks/</a></p>
<p><a href="http://www.bivingsreport.com/2009/so-why-does-drupal-suck/">http://www.bivingsreport.com/2009/so-why-does-drupal-suck/</a></p>
<p>And of course the famous post on the Drupal.org site about the problems with Drupal:</p>
<p><a href="http://drupal.org/node/34421">http://drupal.org/node/34421</a></p>
<p> </p>]]></description><pubDate>3/27/2010 12:38:47 PM</pubDate></item><item><title><![CDATA[Removing the autocomplete or F5 Refresh in Firefox from remembering field values…]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>With a normal input field, the value will be “remembered” by Firefox when you hit F5 or Refresh.  ctrl-F5 will clear the value, but most users won’t know to do that.  So if you need a value to remain blank, or set to it’s default value, on a regular refresh, simply add the following attribute: autocomplete="off"</p>
<p>That was easy.</p>
<p>more later - joel</p>
<div style="clear: both;"></div>
<p><i>Read the complete post at <a href="http://weblogs.asp.net/joelvarty/archive/2010/03/22/removing-the-autocomplete-or-f5-refresh-in-firefox-from-remembering-field-values.aspx">http://weblogs.asp.net/joelvarty/archive/2010/03/22/removing-the-autocomplete-or-f5-refresh-in-firefox-from-remembering-field-values.aspx</a></i></p>]]></description><pubDate>3/25/2010 10:57:11 AM</pubDate></item><item><title><![CDATA[Twitter Announces Their Version of Facebook Connect]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Twitter announced @anywhere at the SXSW conference.  The service will allow website developers to integrate logins with Twitter, much like Facebook has done with Connect.</p>
<p>I like this idea a lot.  Depending on the demographic for your site or campaign, the use of Twitter vs. Facebook could be much higher.  Also, it's a lot less annoying to post an interesting peice of content to Twitter than to your Facebook news feed.</p>
<p>More from CMS Wire:</p>
<p><a href="http://www.cmswire.com/cms/web-content/sxsw-twitter-copies-facebook-connect-with-anywhere-006990.php?utm_source=twitter&amp;utm_medium=twitterfeed&amp;utm_campaign=Social%20Media%20%28Twitter%29" class="ApplyClass" target="_blank">http://www.cmswire.com/cms/web-content/sxsw-twitter-copies-facebook-connect-with-anywhere-006990.php?utm_source=twitter&amp;utm_medium=twitterfeed&amp;utm_campaign=Social%20Media%20%28Twitter%29</a></p>
<p>Looking forward to trying it out soon!</p>]]></description><pubDate>3/17/2010 4:46:32 PM</pubDate></item><item><title><![CDATA[What is Cloud Computing?]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>This is a question that we discuss quite often at Edentity.  It’s one of those things, kind of like “web services” where the terminology has been thrown around by a ton of people and means a lot of different things.</p>
<p>Here’s my favorite diagram so far, which is a visual breakdown of the material presented <a href="http://csrc.nist.gov/groups/SNS/cloud-computing/" target="_blank">here</a> by NIST, visualized by the folks at <a href="http://cloudsecurityalliance.org/" class="ApplyClass" target="_blank">Cloud Security Alliance</a>.</p>
<p> </p>
<p><a href="http://weblogs.asp.net/blogs/joelvarty/clip_image002_35281E7B.jpg"><img width="674" height="426" style="border-bottom: 0px solid; border-left: 0px solid; display: block; float: none; margin-left: auto; border-top: 0px solid; margin-right: auto; border-right: 0px solid;" title="clip_image002" alt="clip_image002" src="http://weblogs.asp.net/blogs/joelvarty/clip_image002_thumb_0D81A251.jpg" /></a></p>
<p>What I like about this diagram is that is shows several different ways that we can differentiate our definitions of cloud computing, from the essential characteristics, or which “Broad Network Access" and “On-Demand Self-Service” (which often are used on their own to define cloud computing) are but a couple of things that help make something “cloud”.</p>
<p>The most important section from my point of view is the middle one – the Service Models.  This represents the different ways that cloud computing can be exposed from the ground up.  It can be an Infrastructure, a Platform or a piece of Software that an end user interacts with.</p>
<p>This is the future, folks.</p>
<p>more later- joel</p>
<div style="clear: both;"></div>
<p><i>Read the complete post at <a href="http://weblogs.asp.net/joelvarty/archive/2010/03/16/what-is-cloud-computing.aspx">http://weblogs.asp.net/joelvarty/archive/2010/03/16/what-is-cloud-computing.aspx</a></i></p>]]></description><pubDate>3/17/2010 4:46:48 PM</pubDate></item><item><title><![CDATA[Why Multitenancy Matters In The Cloud]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Alok Misra from InformationWeek explains why multi-tenancy is the way to go for cloud based applications:</p>
<p><a href="http://www.informationweek.com/cloud-computing/blog/archives/2010/02/why_multitenanc.html?catid=cloud-computing" class="ApplyClass" target="_blank">http://www.informationweek.com/cloud-computing/blog/archives/2010/02/why_multitenanc.html?catid=cloud-computing</a></p>
<p>With a multi-tenancy application, infrastructure and resources are shared across the customer base which lowers the overall cost for each client.  Because it is so much easier to upgrade a multi-tenant system, this also reduces costs.</p>]]></description><pubDate>3/17/2010 4:47:00 PM</pubDate></item><item><title><![CDATA[Be careful of mail server domain names when counting unique referring sites using the Referring Sites data of Google Analytics]]></title><author><![CDATA[Henry Ji]]></author><description><![CDATA[<p>When I worked on an interesting project to write Windows service code to get Referring Sites data from Google Analytics, I found that Google Analytics considers; ns[RANDOM_NUMBER].mail.yahoo.com and ns[RANDOM_NUMBER].mail.live.com as unique referring sites, respectively, which is not exactly our definition about unique referring sites. </p>
<p>Therefore, if you want to count unique referring sites for any specific page, like me, you need to ter the Google Analytics referring site data on your own by removing the beginning part before mail in the referring sites' names if the names contain ".mail.". </p>
<p>Hope this helps!</p>]]></description><pubDate>3/17/2010 4:47:42 PM</pubDate></item><item><title><![CDATA[Windows Vista Snipping Tool]]></title><author><![CDATA[Jonathan Voigt]]></author><description><![CDATA[<p style="line-height: normal; margin: 0cm 0cm 10pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;" class="MsoNormal">This is a cool tool for taking screen captures that is built right into Vista!<o:p></o:p></p>
<p><a href="http://desktoppub.about.com/od/screencaptures/ig/Snipping-Tool/">http://desktoppub.about.com/od/screencaptures/ig/Snipping-Tool/</a><o:p></o:p></p>
<p style="line-height: normal; margin: 0cm 0cm 0pt;" class="MsoNormal">The Snipping Tool utility in Windows Vista is a better option than the Windows Print Screen method of screen captures. It saves a few steps compared to Print Screen and offers more options than just capturing the screen or the active window. <o:p></o:p></p>
<p style="line-height: normal; margin: 18pt 0cm;" class="MsoNormal">To access the Snipping Tool you'll need to activate the Tablet PC Optional Components. Yes, an odd place to put such a universally useful utility.<o:p></o:p></p>
<ul>
    <li>
    <div style="line-height: normal; text-indent: -18pt; margin: 0cm 0cm 0pt 9.4pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;" class="MsoNormal">         Go into <i>Control Panel</i> </div>
    </li>
    <li>
    <div style="line-height: normal; text-indent: -18pt; margin: 0cm 0cm 0pt 9.4pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;" class="MsoNormal">         Click on <i>Programs</i> </div>
    </li>
    <li>
    <div style="line-height: normal; text-indent: -18pt; margin: 0cm 0cm 0pt 9.4pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;" class="MsoNormal">         Look under <i>Programs &amp; Features</i> </div>
    </li>
    <li>
    <div style="line-height: normal; text-indent: -18pt; margin: 0cm 0cm 0pt 9.4pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;" class="MsoNormal">         Select <i>Turn Windows features on and off</i> </div>
    </li>
    <li>
    <div style="line-height: normal; text-indent: -18pt; margin: 0cm 0cm 0pt 9.4pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;" class="MsoNormal">         Check the box by <i>Tablet PC Optional Components</i> </div>
    </li>
</ul>
<p style="line-height: normal; text-indent: -18pt; margin: 0cm 0cm 0pt 9.4pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;" class="MsoNormal">If If you're using the Classic View of Control Panel:</p>
<p style="line-height: normal; text-indent: -18pt; margin: 0cm 0cm 0pt 9.4pt; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt;" class="MsoNormal"><o:p></o:p></p>
<ul>
    <li>
    <div style="line-height: normal; text-indent: -18pt; margin: 0cm 0cm 0pt 9.4pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt;" class="MsoNormal">         Go into <i>Control Panel </i>(Classic View) </div>
    </li>
    <li>
    <div style="line-height: normal; text-indent: -18pt; margin: 0cm 0cm 0pt 9.4pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt;" class="MsoNormal">         Click on <i>Programs and Features</i> </div>
    </li>
    <li>
    <div style="line-height: normal; text-indent: -18pt; margin: 0cm 0cm 0pt 9.4pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt;" class="MsoNormal">         Select <i>Turn Windows features on and off</i> (from the sidebar) </div>
    </li>
    <li>
    <div style="line-height: normal; text-indent: -18pt; margin: 0cm 0cm 0pt 9.4pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt;" class="MsoNormal">         Check the box by <i>Tablet PC Optional Components</i> <o:p></o:p></div>
    </li>
</ul>
<p style="line-height: normal; margin: 0cm 0cm 10pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;" class="MsoNormal">Then, search for Snipping Tool in the search bar.</p>
<p style="line-height: normal; margin: 0cm 0cm 10pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;" class="MsoNormal"> </p>]]></description><pubDate>3/17/2010 4:47:55 PM</pubDate></item><item><title><![CDATA[Amazon S3 – Now with Versioning!]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>One of best tools that we’ve been using extensively with <a href="http://www.agilitycms.com/" class="ApplyClass" target="_blank">Agility</a> is Amazon’s Simple Storage Service.  One of the features that we get asked about often (probably because we have it built into our own custom storage tool) is the ability to store versions and to recover deleted files.</p>
<p>Now, Amazon has added Versioning as an out of the box feature that you can simply enable!</p>
<p>This means that the bucket will operate normally, but a special version number can be used to record any object’s version (deleted, overwritten, or whatever).  Also, the extra space that this takes up will count towards the storage charges, but heck, it’ll be worth it when someone accidentally deletes all of the data in the “images” folder, right?</p>
<p>This is just one more reason to get excited about S3!</p>
<p>more later – joel.</p>
<p> </p>
<p>Here’s the press release:</p>
<p><a href="http://www.amazon.com/gp/r.html?R=E4O0WV6UAJZW&amp;C=3K43UUMDV5VKP&amp;H=BDQGLOIMR2PZROSAFM0NC2KOULYA&amp;T=C&amp;U=http%3A%2F%2Faws.amazon.com%3Fref_%3Dpe_2170_14276020"><img alt="" style="border-bottom: 0px solid; border-left: 0px solid; border-top: 0px solid; border-right: 0px solid;" src="http://g-ecx.images-amazon.com/images/G/01/webservices/AWS_LOGO._V2289989_.gif" /></a></p>
<p>Dear Amazon S3 Customer,</p>
<p>We are pleased to announce the availability of the Versioning feature for beta use across all of our Amazon S3 Regions. Versioning allows you to preserve, retrieve, and restore every version of every object in an Amazon S3 bucket. Once you enable Versioning for a bucket, Amazon S3 preserves existing objects any time you perform a PUT, POST, COPY, or DELETE operation on them. By default, GET requests will retrieve the most recently written version. Older versions of an overwritten or deleted object can be retrieved by specifying a version in the request. </p>
<p>Amazon S3 provides customers with a highly durable storage infrastructure. Versioning offers an additional level of protection by providing a means of recovery when customers accidentally overwrite or delete objects. This allows you to easily recover from unintended user actions and application failures. You can also use Versioning for data retention and archiving. </p>
<p>Thank you to everyone who participated in the public beta in our Northern California Region. As a result of your feedback, we've added an additional MFA Delete capability to Versioning. MFA Delete uses <a href="http://www.amazon.com/gp/r.html?R=E4O0WV6UAJZW&amp;C=3K43UUMDV5VKP&amp;H=9L2M8SMBASZ4FLVYYZ3MOA2G7NEA&amp;T=C&amp;U=http%3A%2F%2Faws.amazon.com%2Fmfa%3Fref_%3Dpe_2170_14276020">multi-factor authentication</a> to provide an additional layer of security. If you enable Versioning with MFA Delete on your Amazon S3 bucket, two forms of authentication are required to delete a version of an object: your AWS account credentials and a valid six-digit code and serial number from an authentication device in your physical possession.</p>
<p>Normal Amazon S3 storage rates apply for all object versions stored. For more information, please see the Amazon S3 <a href="http://www.amazon.com/gp/r.html?R=E4O0WV6UAJZW&amp;C=3K43UUMDV5VKP&amp;H=782ML4CBHS63MO6FV2A2MMWUZNOA&amp;T=C&amp;U=http%3A%2F%2Faws.amazon.com%2Fs3%2Ffaqs%3Fref_%3Dpe_2170_14276020">FAQs</a> and <a href="http://www.amazon.com/gp/r.html?R=E4O0WV6UAJZW&amp;C=3K43UUMDV5VKP&amp;H=C1CK83LSG0G0ZT7MLBSHCGRCFD8A&amp;T=C&amp;U=http%3A%2F%2Fdocs.amazonwebservices.com%2FAmazonS3%2Flatest%2Fdev">Developer Guide</a> or register for the <a href="http://www.amazon.com/gp/r.html?R=E4O0WV6UAJZW&amp;C=3K43UUMDV5VKP&amp;H=CJXDXLAOKXF1E5ABAWAX1YY4ZSEA&amp;T=C&amp;U=https%3A%2F%2Fwww2.gotomeeting.com%2Fregister%2F517067634">Introduction to Versioning webinar</a>. </p>
<p>Sincerely,</p>
<p>The Amazon S3 Team</p>
<img width="1" height="1" alt="" src="http://weblogs.asp.net/aggbug.aspx?PostID=7340588" />
<div style="clear: both;"></div>
<p><i>Read the complete post at <a href="http://weblogs.asp.net/joelvarty/archive/2010/02/09/amazon-s3-now-with-versioning.aspx">http://weblogs.asp.net/joelvarty/archive/2010/02/09/amazon-s3-now-with-versioning.aspx</a></i></p>]]></description><pubDate>2/9/2010 12:50:33 PM</pubDate></item><item><title><![CDATA[HTML5 Video with Flash-like controls in 100% javaScript]]></title><author><![CDATA[Ian Davis]]></author><description><![CDATA[<p>As we move into the new world of web standards, it's worth checking out how far along we are already with the capabilities of HTML5's new video element.</p>
<p>Check out this skinable, scrollable, full screenable (is that even a word?) JavaScript player from Swiss design team Jilion </p>
<p><a href="http://jilion.com/sublime/video" class="ApplyClass" target="_blank">http://jilion.com/sublime/video</a></p>]]></description><pubDate>2/5/2010 9:19:01 AM</pubDate></item><item><title><![CDATA[411 Length Required in Firefox 3]]></title><author><![CDATA[Andre Small]]></author><description><![CDATA[<p>When using AJAX in FF3.0.x you need to be careful if you are doing a post to webservice method or any end-point that does not accept any parameters as you may get a "411 Length Required - HTTP Error 411. The request must be chunked or have a content length." error from the server. </p>
<p>Since you are not sending any parameters to service, a Content-length header of 0 is set in the request. To fix this, add an empty javascript object. In the case of jQuery, it would look something like this (the change is highlighted in bold):</p>
<p><span style="font-size: x-small;">$.ajax({ <span style="font-size: 13px;">
<p>type: </p>
</span></span></p>
<p><span style="color: #a31515; font-size: 10px;">"POST"</span><span style="font-size: x-small;"><span style="font-size: 10px;">,</span><span style="font-size: 13px;">
<p>url: "MyService.</p>
</span></span></p>
<p>&nbsp;</p>
<p><span style="color: #a31515; font-size: 10px;">asmx/Logout"</span><span style="font-size: x-small;"><span style="font-size: 10px;">,</span><span style="font-size: 13px;">
<p>contentType: </p>
</span></span></p>
<p>&nbsp;</p>
<p><span style="color: #a31515; font-size: 10px;">"application/json; charset=utf-8"</span><span style="font-size: x-small;"><span style="font-size: 10px;">, </span>
<p><strong>data: {}, </strong></p>
<span style="font-size: 13px;">
<p>success: </p>
</span></span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10px;"><span style="color: #0000ff; font-size: x-small;">function </span><span style="font-size: x-small;">(msg) { //... },</span></span><span style="font-size: 13px;">
<p>error: </p>
</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10px;"><span style="color: #0000ff; font-size: x-small;">function </span><span style="font-size: x-small;">(e) { //... }</span></span></p>
<p><span style="font-size: 10px;">});</span></p>
<p> </p>
<p>This was tested and verified on FF3 and IIS 7.</p>]]></description><pubDate>1/28/2010 9:28:21 AM</pubDate></item><item><title><![CDATA[jQuery 1.4 released]]></title><author><![CDATA[Osvel Legon]]></author><description><![CDATA[<p>Today the 1.4 version of jQuery was released. This is the <a href="http://jquery14.com/" class="ApplyClass" target="_blank">4th birthday of jQuery library</a>, and it's called the <em>latest major release</em> of this library.</p>
<p>One of the main updates is what they call "<em>Performance Overhaul of Popular Methods </em>where many of the most popular and commonly used jQuery methods have seen a significant rewrite in jQuery 1.4. When analyzing the code base we found that we were able to make some significant performance gains by comparing jQuery against itself: Seeing how many internal function calls were being made and to work to reduce the complexity of the code base".</p>
<p>You can look <a href="http://jquery14.com/day-01/jquery-14" target="_blank">here</a> for an overview of the of all the changes and functionality added to jQuery 1.4.</p>]]></description><pubDate>1/28/2010 9:27:58 AM</pubDate></item><item><title><![CDATA[Windows Azure Platform Released]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Microsoft's cloud computing environment has been released including the Azure operating system, .NET Services, and SQL Azure.</p>
<p>Cloud computing is development, computation and storage that is done within the internet 'cloud' on servers hosted by a third party.  Amazon was one of the first companies to release a commercial grade cloud computing environment with their S3 and EC2 platforms.  </p>
<p>Cloud computing promises to provide an endless supply of storage and processing power for increasingly complex internet based applications.  Microsoft recognizes that software development is rapidly moving towards the cloud and has been developing their Azure platform to compete with the Amazon services for a couple of years.</p>
<p>Because of the long beta period, the community and code gallery is well developed and getting started with Azure as a Microsoft developer is relatively easy.</p>
<p>Visit the Azure developer center:</p>
<p><a href="http://msdn.microsoft.com/en-ca/azure/default.aspx" class="ApplyClass" target="_blank">http://msdn.microsoft.com/en-ca/azure/default.aspx</a></p>
<p>Download the tools and SDK:</p>
<p><a href="http://msdn.microsoft.com/en-ca/azure/default.aspx" target="_blank">http://msdn.microsoft.com/en-ca/azure/default.aspx</a></p>]]></description><pubDate>1/5/2010 4:11:20 PM</pubDate></item><item><title><![CDATA[SQL Azure Migration Wizard]]></title><author><![CDATA[Mike Iskiw]]></author><description><![CDATA[<p>This looks like a promising little app to migrate SQL server databases to SQL Azure</p>
<p><a href="http://sqlazuremw.codeplex.com/" class="ApplyClass" target="_blank">http://sqlazuremw.codeplex.com/</a> </p>
<p><b>Project Description</b><br />
<br />
The SQL Azure Migration Wizard helps you migrate your local SQL Server 2005 / 2008 databases into SQL Azure. The wizard walks you through the selection of your SQL objects, creates SQL scripts suitable for SQL Azure, and allows you to migrate your data.<br />
<br />
<b>Project Details</b><br />
The SQL Azure Migration Wizard (SQLAzureMW) gives you the options to analyzes, generates scripts, and migrate data (via BCP) from:</p>
<ol>
    <li>SQL Server to SQL Azure </li>
    <li>SQL Azure to SQL Server </li>
    <li>SQL Azure to SQL Azure </li>
</ol>]]></description><pubDate>1/8/2010 10:27:14 AM</pubDate></item><item><title><![CDATA[Maps that go BING]]></title><author><![CDATA[Mike Iskiw]]></author><description><![CDATA[<p>Bing Maps provides a robust API to support building pretty much any mapping application you might think of: We used Bing Maps for Subaru's "Get Out More" Site (<a href="http://www.subaru.ca/getoutmore" target="_blank">http://www.subaru.ca/getoutmore</a>) which provided us with the ability to produce a rich Mapping interface for Activities across Canada.</p>
<p>Overall my experience with Bing maps was a positive one. The API was extremely rich and matched up well with functionality provided by Google Maps which I have used previously. I think coming from a .NET background I found the Microsoft Bing Maps API to be more familiar and logical to my .NET experience which helped with the transition.</p>
<p>Some of the features we used on this site build were</p>
<p>Full Map Functionality <br />
Custom Point placement with custom Icons <br />
Geo-location to find address and positions on the map <br />
Jumping to points on the map so users could navigate between search results <br />
Separate layers for different types of content being displayed on the map <br />
Zoom Level Manipulation <br />
Customization of Navigation controls <br />
We Optimized the load of the activities by only loading activities that were viewable within the map and within a minimum zoom level </p>
<p>Used the Map Info API to get the positions of all the corners of the map <br />
Map event handling <br />
Calls to Activate Point Info Boxes <br />
etc </p>
<p>The above features are used in combination with each other to achieve the effects and transitions that we desired.</p>
<p>A great starting point for my investigation was the Bing Maps Interactive SDK demo site which provided example source code of specific features we required for the site. You can find the Interactive SDK here: <a href="http://www.microsoft.com/maps/isdk/ajax/">http://www.microsoft.com/maps/isdk/ajax/</a></p>
<p>Take a look at the samples and see what you can do!</p>
<p>Mike</p>]]></description><pubDate>12/23/2009 10:16:13 AM</pubDate></item><item><title><![CDATA[jQuery and JavaScript Coding: Best Practices]]></title><author><![CDATA[Osvel Legon]]></author><description><![CDATA[<p>When used correctly, jQuery can help you make your website more interactive, interesting and exciting.</p>
<p><strong>Why jQuery?</strong><br />
The jQuery official web site states, "jQuery is a fast and concise JavaScript Library that simplifies HTML document traversing, event handling, animating, and Ajax interactions for rapid web development. jQuery is designed to change the way that you write JavaScript". jQuery is simple to understand and easy to use, which means the learning curve is small, while the possibilities are (almost) infinite.</p>
<p><strong>Javascript and Best Practices</strong><br />
Javascript has long been the subject of many heated debates about whether it is possible to use it while still adhering to best practices regarding accessibility and standards compliance.</p>
<p>The answer to this question is still unresolved, however, the emergence of Javascript frameworks like jQuery has provided the necessary tools to create beautiful websites without having to worry (as much) about accessibility issues.</p>
<p>Obviously there are cases where a Javascript solution is not the best option. The rule of thumb here is: use DOM scripting to enhance functionality, not create it.</p>
<p><strong>Unobtrusive DOM Scripting</strong><br />
While the term “DOM scripting” really just refers to the use of scripts (in this case, Javascripts) to access the Document Object Model, it has widely become accepted as a way of describing what should really be called “unobtrusive DOM scripting”—basically, the art of adding Javascript to your page in such a way that if there were NO Javascript, the page would still work (or at least degrade gracefully). In the website world, our DOM scripting is done using Javascript.</p>
<p><strong>The Bottom Line: Accessible, Degradable Content</strong><br />
The aim of any web producer, designer or developer is to create content that is accessible to the widest range of audience. However, this has to be carefully balanced with design, interactivity and beauty. Using the theories set out in this article, designers, developers and web producers will have the knowledge and understanding to use jQuery for DOM scripting in an accessible and degradable way; maintaining content that is beautiful, functional AND accessible.</p>
<p><strong>Unobtrusive DOM Scripting?</strong><br />
In an ideal world, websites would have dynamic functionality AND effects that degrade well. What does this mean? It would mean finding a way to include, say, a snazzy Javascript Web 2.0 animated sliding news ticker widget in a web page, while still ensuring that it fails gracefully if a visitor’s browser can’t (or won’t) run Javascripts.</p>
<p>The theory behind this technique is quite simple: the ultimate aim is to use Javascript for non-invasive, “behavioural” elements of the page. Javascript is used to add or enhance interactivity and effects. The primary rules for DOM scripting follow.</p>
<p><strong>Rule #1: Separate Javascript Functionality</strong><br />
Separate Javascript functionality into a “behavioural layer,” so that it is separate from and independent of (X)HTML and CSS. (X)HTML is the markup, CSS the presentation and Javascript the behavioural layer. This means storing ALL Javascript code in external script files and building pages that do not rely on Javascript to be usable. </p>
<p><strong>Rule #2: NEVER Depend on Javascript</strong><br />
To be truly unobtrusive, a developer should never rely on Javascript support to deliver content or information. It’s fine to use Javascript to enhance the information, make it prettier, or more interactive—but never assume the user’s browser will have Javascript enabled. This rule of thumb can in fact be applied to any third-party technology, such as Flash or Java. If it’s not built into every web browser (and always enabled), then be sure that the page is still completely accessible and usable without it.</p>
<p><strong>Rule #3: Semantic and Accessible Markup Comes First</strong><br />
It is very important that the (X)HTML markup is semantically structured. (While it is outside the scope of this article to explain why, see the links below for further reading on semantic markup.) The general rule here is that if the page’s markup is semantically structured, it should follow that it is also accessible to a wide range of devices. This is not always true, though, but it is a good rule of thumb to get one started.</p>
<p>Semantic markup is important to unobtrusive DOM scripting because it shapes the path the developer will take to create the DOM scripted effect. The FIRST step in building any jQuery-enhanced widget into a page is to write the markup and make sure that the markup is semantic. Once this is achieved, the developer can then use jQuery to interact with the semantically correct markup (leaving an (X)HTML document that is clean and readable, and separating the behavioural layer).</p>
<p><strong>Understanding jQuery for Unobtrusive DOM Scripting</strong><br />
Understanding Selectors: the Backbone of jQuery - Performance Rules<br />
<strong></strong></p>
<p><strong>Always Descend From an #id</strong><br />
The fastest selector in jQuery is the ID selector ($('#someid')). This is because it maps directly to a native JavaScript method, getElementById().</p>
<p><strong>Selecting Multiple Elements</strong><br />
Once we start talking about selecting multiple elements, we are really talking about DOM traversal and looping, something that is slow. To minimize the performance hit, always descend from the closest parent ID.</p>
<p><strong>Use Tags Before Classes<br />
</strong>The second fastest selector in jQuery is the Tag selector ($('head')). Again, this is because it maps to a native JavaScript method, getElementsByTagName().</p>
<p>Note: The class selector is among the slowest selectors in jQuery; in IE it loops through the entire DOM. Avoid using it whenever possible. Never prefix an ID with a tag name.</p>
<p><strong>Cache jQuery Objects</strong><br />
Get in the habit of saving your jQuery objects to a variable. First save the object to a local variable, and then continue your operations. </p>
<p><strong>Harness the Power of Chaining</strong><br />
This allows us to write less code, making our JavaScript more lightweight. </p>
<p><strong>Use Sub-queries</strong><br />
jQuery allows us to run additional selector operations on a wrapped set. This reduces performance overhead on subsequent selections since we already grabbed and stored the parent object in a local variable.</p>
<p><strong>Limit Direct DOM Manipulation</strong><br />
The basic idea here is to create exactly what you need in memory, and then update the DOM. This is not a jQuery best practice, but a must for efficient JavaScript. Direct DOM manipulation is slow. </p>
<p><strong>Leverage Event Delegation (a.k.a. Bubbling)</strong><br />
Unless told otherwise, every event (e.g. click, mouseover, etc.) in JavaScript “bubbles” up the DOM tree to parent elements. This is incredibly useful when we want many elements (nodes) to call the same function. Instead of binding an event listener function to many nodes—very inefficient—you can bind it once to their parent, and have it figure out which node triggered the event. </p>
<p><strong>Eliminate Query Waste</strong><br />
Although jQuery fails nicely if it does not find any matching elements, it still takes time to look for them. If you have one global JavaScript for your entire site, it may be tempting to throw every one of your jQuery functions into $(document).ready(function(){ // all my glorious code }). Don’t you dare. Only run functions that are applicable to the page. The most efficient way to do this is to use inline initialization functions so your template has full control over when and where JavaScript executes. </p>
<p><strong>Defer to $(window).load</strong><br />
There is a temptation among jQuery developers to hook everything into the $(document).ready pseudo event. After all, it is used in most examples you will find. Although $(document).ready is incredibly useful, it occurs during page render while objects are still downloading. If you notice your page stalling while loading, all those $(document).ready functions could be the reason why. You can reduce CPU utilization during the page load by binding your jQuery functions to the $(window).load event, which occurs after all objects called by the HTML (including &lt;iframe&gt; content) have downloaded.</p>
<p>Superfluous functionality such as drag and drop, binding visual effects and animations, pre-fetching hidden images, etc., are all good candidates for this technique.</p>
<p><strong>Compress Your JS</strong><br />
Okay, this isn’t jQuery related, but I had to include it. There is a tendency to make JavaScript functions and variables overly descriptive, which is essential for developers but irrelevant to users. No more excuses, it’s time to build JS compression into our workflows.</p>
<p><strong>Learn the Library</strong><br />
Print out this jQuery 1.3 cheat sheet, and make it a goal to eventually understand what each function does.  </p>
<p>Get ready.<br />
$(document).ready()<br />
Traditionally Javascript events were attached to a document using an “onload” attribute in the &lt;body&gt; tag of the page. Forget this practice. Wipe it from your mind.</p>
<p>jQuery provides us with a special utility on the document object, called “ready”, allowing us to execute code ONLY after the DOM has completely finished loading. This is the key to unobtrusive DOM scripting, as it allows us to completely separate our Javascript code from our markup. Using $(document).ready(), we can queue up a series of events and have them execute after the DOM is initialized.</p>
<p>This means that we can create entire effects for our pages without changing the markup for the elements in question.</p>
<p><strong>Dynamic CSS Rule Creation</strong><br />
One problem with many DOM scripting effects is that they often require us to hide elements of the document from view. This hiding is usually achieved through CSS. However, this is less than desirable. If a user’s browser does not support Javascript (or has Javascript disabled), yet does support CSS, then the elements that we hide in CSS will never be visible, since our Javascript interactions will not have run.</p>
<p>The solution to this comes in the form of a plugin for jQuery called cssRule, which allows us to use Javascript to easily add CSS rules to the style sheet of the document. This means we can hide elements of the page using CSS—however the CSS is ONLY executed IF Javascript is running.</p>
<p><strong>Further Reading</strong><br />
Further Reading: jQuery and JavaScript Practices<br />
jQuery Web Site: How jQuery Works and Tutorials<br />
John Resig + Other Contributors<br />
One of jQuery’s true strengths is the documentation provided by John Resig and his team. <br />
51 Best jQuery Tutorials and Examples <br />
Easy As Pie: Unobtrusive JavaScript <br />
Seven Rules of Unobtrusive JavaScript <br />
Learning jQuery <br />
Visual jQuery <br />
jQuery Tutorials For Designers <br />
jQuery For Designers<br />
jQuery for Designers: learn how easy it is to apply web interaction using jQuery. <br />
15 Days Of jQuery<br />
jQuery tutorials and example code that takes you from zero to hero in no time flat. <br />
15 Resources To Get You Started With jQuery From Scratch <br />
The Seven Rules Of Pragmatic Progressive Enhancement <br />
The Behaviour Layer Slides<br />
Jeremy Keith<br />
Great slide notes giving a quick rundown on unobtrusive Javascripting. <br />
A List Apart: Behavioral Separation<br />
Jeremy Keith<br />
A more in-depth explanation of the idea of separating Javascript into an unobtrusive “behavioural” layer. <br />
Unobtrusive JavaScript with jQuery<br />
Simon Willison<br />
A great set of slides about using jQuery unobtrusively. Also, finishes with a wonderful summary of jQuery methods and usage. <br />
Further Reading: Semantic Markup<br />
Wikipedia: Definition of Semantics<br />
It’s worth understanding the idea of semantics in general prior to trying to wrap one’s head around the concept of semantic markup. <br />
Who cares about semantic markup?<br />
Dave Shea<br />
Dave Shea explores the benefits of semantic markup and <br />
Standards don’t necessarily have anything to do with being semantically correct<br />
Jason Kottke<br />
Kottke discusses the differences between standards compliance and semantic markup. <br />
CSS3 selector specification<br />
W3C<br />
The complete specification for CSS3 selectors (most of which work perfectly in jQuery selectors also). This is great reading for anyone who likes to keep up to date with best practices and standards compliance. </p>
<p>Based on:<br />
jQuery and JavaScript Coding: Examples and Best Practices - Smashing Magazine<br />
jQuery Performance Rules - Best Practices for Speeding Up jQuery</p>
<p> </p>]]></description><pubDate>1/8/2010 10:44:51 AM</pubDate></item><item><title><![CDATA[Mobile Sites and the iPhone]]></title><author><![CDATA[Mike Iskiw]]></author><description><![CDATA[<p>There is one magic line that you need to remember to add to your Head Tag to get mobile sites to be displayed properly on the iPhone:</p>
<p>&lt;meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0" /&gt;</p>
<p>This tells the iPhone browser that it shouldn't zoom out to try to fit a normal resolution screen and use the default resolution of the iPhone.</p>]]></description><pubDate>12/23/2009 10:17:17 AM</pubDate></item><item><title><![CDATA[Agility Tip: Handling Agility Save Events in Client Mode]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>One of the features we added this year was the ability to write Input Forms for Content Definitions and Module Definitions that are for "client side save", which means that the values of the content item are saved using Javascript instead of a postback.</p>
<p>In order to handle before and after save events for these, you need to do the following:</p>
<p>    ContentItem_BeforeClientSave = function () {<br />
        alert("before save!");<br />
        return true;<br />
    }<br />
    <br />
    ContentItem_AfterClientSave = function (contentItemID) {<br />
        alert("after save - " + contentItemID);        <br />
    }</p>
<p>The "before save" is a cancel-able event - meaning you can return false to stop the save from happening.  This is great if you need to do some extra validation.  The regular field validation will run after this.</p>
<p>The "after save" is a chance for you to run a script after the save has successfully completed and all of the attachments and linked content areas have been updated.  This event will run even on a save-and-close - so you should test it in all the save situations (save, save and close, save and preview).</p>
<p>These events are especially useful if you have linked content on the item that you want to show only after the item has been saved for the first time.</p>
<p>more later - joel.</p>
<p> </p>
<p> </p>]]></description><pubDate>12/21/2009 3:38:19 PM</pubDate></item><item><title><![CDATA[Google Browser Size]]></title><author><![CDATA[Andre Small]]></author><description><![CDATA[<p>Google labs has just released an interesting tool call Browser Size. You can use it at: <a href="http://browsersize.googlelabs.com/" target="_blank">http://browsersize.googlelabs.com/</a></p>
<p>Basically this online tool allows you to get a glimpse on how webpage content will be viewed on different screen resolutions. I know that there are many plugins for various browsers that exist that can do this, but to my knownlegde, none show you all the different resolution views at the same time.</p>
<p>"Google Browser Size is a visualization of browser window sizes for people who visit Google. For example, the "90%" contour means that 90% of people visiting Google have their browser window open to at least this size or larger.</p>
<p>"This is useful for ensuring that important parts of a page's user interface are visible by a wide audience. On the example page that you see when you first visit this site, there is a "donate now" button which falls within the 80% contour, meaning that 20% of users cannot see this button when they first visit the page. 20% is a significant number; knowing this fact would encourage the designer to move the button much higher in the page so it can be seen without scrolling."</p>
<p><a href="http://browsersize.googlelabs.com/static/about-browser-size.html" class="ApplyClass" target="_blank">http://browsersize.googlelabs.com/static/about-browser-size.html</a></p>
<p> </p>]]></description><pubDate>12/21/2009 9:51:28 AM</pubDate></item><item><title><![CDATA[Catching errors on the jQuery's load() function]]></title><author><![CDATA[Osvel Legon]]></author><description><![CDATA[<p>When using the jQuery's load function there is a way to catch the errors. The callback is full of parameters from the request and the response:</p>
<p>$("body").load("/load.aspx", function (responseText, textStatus, XMLHttpRequest) {<br />
    if (textStatus == "error") {<br />
       alert('Error!');<br />
       // XMLHttpRequest.responseText has the error info you want.<br />
       alert(XMLHttpRequest.responseText);<br />
    }<br />
});</p>
<p>The XMLHttpRequest is a full <a href="http://www.w3.org/TR/XMLHttpRequest/" target="_blank">XMLHttpRequest object</a>.</p>
<p>Also you can register a general error handler for all the jQuery ajax calls:</p>
<p>$.ajaxError(function(event, request, settings) {<br />
      alert("Oops!!");<br />
});</p>
<p> </p>]]></description><pubDate>12/17/2009 10:58:29 AM</pubDate></item><item><title><![CDATA[The jTemplates plugin for jQuery – Keep inline templates from being misinterpreted]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>I love the jTemplates plugin for jQuery.  It works great and I’ve had very little trouble working with it when I put my templates in separate files.  This ensures that the browser does re-interpret the html for the template and re-arrange the elements.  This happens mostly with tables in IE and Webkit browsers where you want to repeat the rows of the table.  You’ll see what I mean in a moment.</p>
<p>Take a template like the following:</p>
<pre class="csharpcode"><span class="kwrd">&lt;</span><span class="html">table</span><span class="kwrd">&gt;</span>    
    <span class="kwrd">&lt;</span><span class="html">thead</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">th</span><span class="kwrd">&gt;</span>Date<span class="kwrd">&lt;/</span><span class="html">th</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">th</span><span class="kwrd">&gt;</span>Title<span class="kwrd">&lt;/</span><span class="html">th</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">th</span><span class="kwrd">&gt;</span>Count<span class="kwrd">&lt;/</span><span class="html">th</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">thead</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">tbody</span><span class="kwrd">&gt;</span>
        {#foreach $T as o}
            <span class="kwrd">&lt;</span><span class="html">tr</span><span class="kwrd">&gt;</span>                                
                <span class="kwrd">&lt;</span><span class="html">td</span><span class="kwrd">&gt;</span>{$T.o.CreatedOn}<span class="kwrd">&lt;/</span><span class="html">td</span><span class="kwrd">&gt;</span>
                <span class="kwrd">&lt;</span><span class="html">td&gt;</span>{$T.o.Title}<span class="kwrd">&lt;/</span><span class="html">td</span><span class="kwrd">&gt;</span>
                <span class="kwrd">&lt;</span><span class="html">td</span><span class="kwrd">&gt;</span>{$T.o.Count}<span class="kwrd">&lt;/</span><span class="html">td</span><span class="kwrd">&gt;</span>
            <span class="kwrd">&lt;/</span><span class="html">tr</span><span class="kwrd">&gt;</span>
        {#/for}
    <span class="kwrd">&lt;/</span><span class="html">tbody</span><span class="kwrd">&gt;</span>    
<span class="kwrd">&lt;/</span><span class="html">table</span><span class="kwrd">&gt;</span></pre>
<p> </p>
<p>This works great if I put the template in it’s own html or text file, but not if I embed it in a &lt;div&gt;.  </p>
<p>Why?  Well, the {# foreach} and the {#/for} lines in the template are NOT interpreted as being part of the &lt;table&gt; element, and so that text ends up being placed in the DOM as text elements either before or after the table.</p>
<p>The way around this is simple – just place your template in a &lt;textarea&gt; instead of a div.  Then you can use $(“#elementID”).val() to grab the literal text (which isn’t interpreted into the DOM as anything but text), and all should be good.</p>
<p>More later - joel</p>
<img width="1" height="1" alt="" src="http://weblogs.asp.net/aggbug.aspx?PostID=7270550" />
<div style="clear: both;"></div>
<p><i>Read the complete post at <a href="http://weblogs.asp.net/joelvarty/archive/2009/12/04/the-jtemplates-plugin-for-jquery-keep-inline-templates-from-being-misinterpreted.aspx">http://weblogs.asp.net/joelvarty/archive/2009/12/04/the-jtemplates-plugin-for-jquery-keep-inline-templates-from-being-misinterpreted.aspx</a></i></p>]]></description><pubDate>12/4/2009 9:21:45 AM</pubDate></item><item><title><![CDATA[Copy by value for JSON objects]]></title><author><![CDATA[Henry Ji]]></author><description><![CDATA[<p>In Javascript, if you assign a reference object to another object, you actually copy it by reference. Therefore, when I wanted to create a new JSON object to have the same structure as an existing object, I tried to find a deep copy function in JavaScript first. And then I found out another way to tackle it - I stringify the existing JSON object and eval the resultant string to the new JSON object. It works just like copy by value.</p>
<p><a href="http://www.json.org/js.html" class="ApplyClass" target="_blank">Here</a> you can find an JSON stringify function.</p>]]></description><pubDate>12/4/2009 9:17:49 AM</pubDate></item><item><title><![CDATA[Get Querystring value from UrlReferrer]]></title><author><![CDATA[Andre Small]]></author><description><![CDATA[<p>Here is a snippet of code that I have found to be useful as of late.</p>
<p><em>NameValueCollection nameValueCollection = HttpUtility.ParseQueryString(Request.UrlReferrer.Query);<br />
string keyword = nameValueCollection["kw"];</em></p>
<p>Enjoy.</p>]]></description><pubDate>11/30/2009 7:54:47 PM</pubDate></item><item><title><![CDATA[Agility Tip: Content Personalization]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>We all have different opinions and interests so why are most websites served up exactly the same for all users?  Agility allows you to add a little personalization to your site.</p>
<p>Agility allows you to serve up different content and navigation, depending on choices your visitors make about what interests them.  These choices can be made on the first visit to your site, or whenever they want to change their preferences.</p>
<p>A great example of this is wnetwork.com.  Upon the first visit to the site, you will be asked to rank content categories in the order that they interest you.  The site then rearranges the content according to your preferences.</p>
<p><a href="~/Contact.aspx">Contact us</a> to learn about how to add personalization to your site.</p>]]></description><pubDate>11/25/2009 12:00:10 PM</pubDate></item><item><title><![CDATA[Using Google search control to Integrate Google custom search into your website]]></title><author><![CDATA[Henry Ji]]></author><description><![CDATA[<p>There are several ways to use Google custom search. One way to do it is using Search Control. After logging in the Google Custom Search site <a href="http://www.google.com/cse/" class="ApplyClass" target="_blank">http://www.google.com/cse/</a>, you can create your own search engine, add site search restrictions, configure search languauges etc.. You can then go to Preview page under Control panel menu to preview your own search engine and configurations. There is also a Statiscs page under Control panel, where you can see useful statistics about how people have searched your website.</p>
<p>Now you can go to Get code page under Control panel. You can just copy this Custom Search element code as below to your webpage and your website now have a custom search.</p>
<p>&lt;div id="cse" style="width: 100%;"&gt;Loading&lt;/div&gt;<br />
&lt;script src="<a href="http://www.google.com/jsapi" target="_blank">http://www.google.com/jsapi</a>" type="text/javascript"&gt;&lt;/script&gt;<br />
&lt;script type="text/javascript"&gt;<br />
  google.load('search', '1');<br />
  google.setOnLoadCallback(function(){<br />
    var customSearchControl = new google.search.CustomSearchControl('[YOUR KEY WILL BE HERE!');<br />
    customSearchControl.setResultSetSize(google.search.Search.FILTERED_CSE_RESULTSET);<br />
    customSearchControl.draw('cse');<br />
  }, true);<br />
&lt;/script&gt;<br />
&lt;link rel="stylesheet" href="<a href="http://www.google.com/cse/style/look/default.css" target="_blank">http://www.google.com/cse/style/look/default.css</a>" type="text/css" /&gt;</p>
<p>You may want to specify UI language by changing "google.load('search', '1');" to "google.load('search', '1', {"language" : "en"});", which will display search text in the search button and more results text beside page indexes in English or any other language you like and Google supports.</p>
<p>If you have business account for Google custom search, you choose to remove Google branding. You can override CSS attributes of the HTML elements within search control. You can also use the CSS code from the article "<a href="http://www.ampsoft.net/webdesign-l/image-button.html" target="_blank">CSS image replace for submit buttons</a>" to replace the search button with an Image.</p>
<p>When you use Google search control, another things you need be aware of are:</p>
<ol>
    <li>No previous and next buttons </li>
    <li>No total result number. The max number is 10 results * 10 pages = 100 results. If clicking the 10 page index, "more results" link will be displayed and leads to google custom search page. </li>
</ol>
<p>If you look for more flexibility, you can use google.search.WebSearch so you can get search results from it and create UI on your own. One important feature I notice from WebSearch is that you can use google.search.search.RESTRICT_EXTENDED_ARGS to restricts a web searcher to a specific language as below:</p>
<pre class="prettyprint"><span class="pln">searcher </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> google</span><span class="pun">.</span><span class="pln">search</span><span class="pun">.</span><span class="typ">WebSearch</span><span class="pun">()</span><span class="pln"><br />searcher</span><span class="pun">.</span><span class="pln">setRestriction</span><span class="pun">(</span><span class="pln">google</span><span class="pun">.</span><span class="pln">search</span><span class="pun">.</span><span class="typ">Search</span><span class="pun">.</span><span class="pln">RESTRICT_EXTENDED_ARGS</span><span class="pun">,</span><span class="pln"><br />                        </span><span class="pun">{</span><span class="pln"> </span><span class="str">"lr"</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="str">"lang_de"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"filter"</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> </span><span class="str">"0"</span><span class="pun">});</span></pre>
<p>You can find more information in Google AJAX Search API documentation <a href="http://code.google.com/apis/ajaxsearch/documentation/reference.html" target="_blank">here</a>.</p>]]></description><pubDate>11/20/2009 3:22:50 PM</pubDate></item><item><title><![CDATA[Publish to Facebook, Mobile Sites and YouTube from Agility CMS]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>The name Agility comes from the flexibility of the platform to do lots of things that other CMS systems can't. One of the biggest areas that we have been demonstrating more and more is the multi-platform publish capability.</p>
<p>Agility saves you time by allowing you to update content on your website instantly, without engaging a developer.  Agility also allows you to publish the same content to your mobile site, Facebook Page, YouTube Channel, Flickr Gallery or other platform at the same time.  You only have to write content once and log into one tool to publish content to all of your favourite places.</p>
<p>Our SDK lets you customize how the content is displayed on the mobile screen or Facebook page so that it seamlessly integrates with the platform that your audience is used to.  You can also work with our implementation team to get you set up.</p>
<p><a href="~/Contact.aspx">Contact us</a> to learn about how to publish your Agility content to all of your marketing channels.</p>]]></description><pubDate>11/17/2009 9:13:32 AM</pubDate></item><item><title><![CDATA[Configuration, System.Diagnostics and Medium Trust]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>In the past, I have widely used, and been a fan of, TextWriterTraceListener and EventLogTraceListener configured via the web.config in order to output diagnostics information from a web app or site.  These things have been there since .Net 1, so our main library of code has hooks into System.Diagnostics.  We even implemented a messaging aspect to this so that certain critical errors would trigger an SMTP message to us.  This has been invaluable in determining what is happening with a site as content changes, or something happens that we need to take action on before a complaint comes in.  (Who am I kidding – this is how we find out about bugs that got missed for whatever reason).</p>
<p>A few months ago, a site we had hosted on a 3rd party provider decided they would switch the site to Medium trust, so all of that diagnostics code was busted.   The diagnostics config was done using a custom configuration section, so that didn’t work, neither did any method that referenced any class from System.Diagnostics.</p>
<p>To make matters worse, our error emails weren’t sending out either, since the smtp server was working using a drop folder that was outside out our app folder… gah.  It wasn’t good.</p>
<p>So how did we get around this problem?</p>
<p>The configuration section was easy to fix – you just need to read the web.config as an XmlDocument and populate your configuration object manually.  I also recommend caching this in Application (remember to use lock() when accessing this collection..) so that the Xml parsing only has to happen once per application life cycle.</p>
<p>The Diagnostics stuff is a complete wash – you need to switch out all of this code (luckily ours was all routing through a single method, so it wasn’t too crazy) and replace it was custom logic to write to files, event logs, whatever.  I went with the quick and dirty approach and used the System.IO.File.AppendAllText() method.  This may not be as efficient as keeping the file handle open throughout the application, but it also means that you don’t have to worry about having an open file-handle either…  of course the AppendAllText call is wrapped in a lock() so that only one thread can write to the log at once.  The general idea is that your app shouldn’t be spitting out copious amounts of logging unless you are in a problem situation anyways…</p>
<p>As for the SMTP issue – the provider gave us credentials to send messages through a normal SMTP relay, so that ended up being fine.</p>
<p> </p>
<p>The moral of this story?  Think twice before using System.Diagnostics on a site that will be hosted on a third part provider…</p>
<p> </p>
<p>(Special Note: apparently Azure will be <a href="http://blogs.msdn.com/windowsazure/archive/2009/03/18/hosting-roles-under-net-full-trust.aspx" class="ApplyClass" target="_blank">NOT be limited to medium trust</a>… sweet!)</p>
<p> </p>
<p>more later - joel</p>
<img width="1" height="1" alt="" src="http://weblogs.asp.net/aggbug.aspx?PostID=7252533" />
<div style="clear: both;"></div>
<p><i>Read the complete post at <a href="http://weblogs.asp.net/joelvarty/archive/2009/11/12/configuration-system-diagnostics-and-medium-trust.aspx" target="_blank">http://weblogs.asp.net/joelvarty/archive/2009/11/12/configuration-system-diagnostics-and-medium-trust.aspx</a></i></p>]]></description><pubDate>11/12/2009 3:01:33 PM</pubDate></item><item><title><![CDATA[jQuery browser detection]]></title><author><![CDATA[Osvel Legon]]></author><description><![CDATA[<p>jQuery browser detection was working fine for me until recently. <a href="http://docs.jquery.com/Utilities/jQuery.browser" target="_blank">jQuery.browser</a> started detecting my Internet Explorer 8 as version 6, even if it was in IE7 mode.</p>
<p>The solution: there are a lot of jQuery browser detection plugins but the javascript solution on <a href="http://www.quirksmode.org/js/detect.html" target="_blank">this page</a> works for me. </p>
<p><a href="http://www.quirksmode.org/js/detect.html" class="ApplyClass" target="_blank">JavaScript - Browser detect</a></p>]]></description><pubDate>11/12/2009 3:02:05 PM</pubDate></item><item><title><![CDATA[How to test multiple copies of Internet Explorer on your PC without Virtual Machines]]></title><author><![CDATA[Ian Davis]]></author><description><![CDATA[<p>Nearly 10 years after it's release Internet Explorer 6 is still used by enough people to warrant testing. But as IE is now a Windows Update you cant keep an older copy around for testing.</p>
<p><i>OR CAN YOU?!</i></p>
<p>The IE Collection (http://finalbuilds.edskes.net/iecollection.htm) allows you to install any copy as far back as 1.0 and run it in parallel with IE 8+.</p>
<p><strong>Internet Explorer Collection contains the following versions of IE:</strong></p>
<ul>
    <li>Internet Explorer 1.0 (4.40.308) </li>
    <li>Internet Explorer 1.5 (0.1.0.10) </li>
    <li>Internet Explorer 2.01 (2.01.046) </li>
    <li>Internet Explorer 3.0 (3.0.1152) </li>
    <li>Internet Explorer 3.01 (3.01.2723) </li>
    <li>Internet Explorer 3.03 (3.03.2925) </li>
    <li>Internet Explorer 4.01 (4.72.3110.0) </li>
    <li>Internet Explorer 5.01 (5.00.3314.2100) </li>
    <li>Internet Explorer 5.5 (5.51.4807.2300) </li>
    <li>Internet Explorer 6.0 (6.00.2800.1106) </li>
    <li>Internet Explorer 6.0 (6.00.2900.2180) </li>
    <li>Internet Explorer 7.0 (7.00.5730.13) </li>
    <li>Internet Explorer 8.0 (8.00.6001.18702) </li>
</ul>
<p>For those of us who require functional testing in IE over older versions, this is an excellent tool....until IE is standards compliant <img alt="Geeked" src="http://knowledge.edentity.local/emoticons/emotion-15.gif" /></p>]]></description><pubDate>11/10/2009 2:54:43 PM</pubDate></item><item><title><![CDATA[Quick and dirty Cross Browser compliance...]]></title><author><![CDATA[Ian Davis]]></author><description><![CDATA[<p>Even though all sites should be "standards compliant", the world of the web just doesn't work that way. Sometimes you need to quickly see if a layout or a form even works in Firefox, Safari, IE and others. You can install multiple versions, but that's a bit of overkill when you can use Spoon.</p>
<p><a href="http://spoon.net/Browsers/" class="ApplyClass" target="_blank">http://spoon.net/Browsers/</a></p>
<p>Spoon is an in-browser plugin to run multiple browses "sandboxed" on your local machine. There "real" versions of the programs, streamed to the plugin from their servers. Performance is easily good enough for functional testing, although Flash and Javascript support is dodgy. They have IE 6 / 7 / 8, Firefox 2 ,3 and 3.5, chrome, opera and Safari too. <br />
While not exact enough to be considered true tests, Spoon can easily uncover CSS and HTML issues that may show up during development, without filling up your applications menu. </p>
<p>For quick and dirty cross browser tests, try Spoon.</p>]]></description><pubDate>11/10/2009 2:54:59 PM</pubDate></item><item><title><![CDATA[Shrinking your SQL Server 2005 Transaction Log]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>I get this question all of the time, and there is a great support article from Microsoft on how to do this.</p>
<p>One of the ways to truncate the log file is to simply detach the database and re-attach it without the log.</p>
<p>I DO NOT recommend that unless it is a development db that you don’t care about.</p>
<p>The proper way to do this is to first backup the TRANSACTION LOG portion of the database by using the following command:</p>
<pre><strong><span style="color: #0000ff;">BACKUP LOG &lt;DatabaseName&gt; TO DISK = '&lt;BackupFile&gt;'</span></strong></pre>
<p>And then running a shrinkfile command:</p>
<pre><strong><span style="color: #0000ff;">DBCC SHRINKFILE (&lt;FileName&gt;, &lt;TargetSize&gt;) WITH NO_INFOMSGS</span></strong></pre>
<p>If you run the shrinkfile command without first doing a log backup, all it will remove is the empty space in the ldf file, no matter what target size you specify.</p>
<p><a href="http://support.microsoft.com/kb/907511" class="ApplyClass" target="_blank">Here</a> is the Microsoft support article that explains this.</p>
<p>More later- Joel</p>]]></description><pubDate>11/5/2009 12:10:34 PM</pubDate></item><item><title><![CDATA[Edentity announces Sponsorship at nextMEDIA Toronto]]></title><author><![CDATA[Pam Westwater]]></author><description><![CDATA[<p>Edentity is proud to be a sponsor of the 2009 nextMedia Toronto event, taking place from November 30th to December 1, 2009 at the Design Exchange Building. This event includes an intensive two days of networking, learning and strategizing and attracts top executives from Advertising, Broadcasting, TV Production, Media Buying and Interactive Agencies.  The nextMedia event is all a part of Innovation Week '09.</p>
<p>The conference offers a number of options for learning and relationship building for your business, as well as an Awards night entitled the "Canadian New Media Awards."  This conference focuses on the Digital Media world, and offers Edentity great exposure for networking and business partnerships.  This 3-day event will be a platform for innovators, individuals, companies and communities from across the country to come together to discuss present successes and ideas for the future.</p>
<p>So if you're looking for the "Who's who" of the interactive and digital world, the nextMEDIA is the place to be.  That's where we'll be spending our time! </p>
<p>More information on the event can be found at <a href="http://www.nextmediaevents.com/toronto/index.php" class="ApplyClass" target="_blank">http://www.nextmediaevents.com/toronto/index.php</a>.</p>
<p><img width="448" height="208" alt="" src="~/ecms.ashx/NM-TOR-blk.jpg" /></p>]]></description><pubDate>11/10/2009 2:54:31 PM</pubDate></item><item><title><![CDATA[Facebook Open Graph API Makes Every Website a Facebook Page]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Facebook recently made some big product roadmap announcements at the latest Facebook Developer Garage including the Open Graph API.</p>
<p>Unfortunately, we'll have to wait at least 3 quarters, but it's great to know that it's coming.</p>
<p>The Open Graph API essentially turns any website into a Facebook Page.  According to Inside Facebook, "with the Open Graph API, any website can have access to all the communication channels that a Facebook Page does, while living outside of Facebook.com."  "... users can become a "fan" of the site itself.  Web masters and publishers can then publish content to users' News Feeds through the stream publishing APIs."</p>
<p>This is very exciting because it means that brands can leverage their existing investment in their web properties by easily hooking into the best parts of Facebook. It also fits very nicely with your Agility CMS managed website.</p>
<p>There were 4 other product roadmap announcements that are detailed by Inside Facebook:</p>
<p><a href="http://www.insidefacebook.com/2009/10/30/page-brand-managers-facebook/" class="ApplyClass" target="_blank">http://www.insidefacebook.com/2009/10/30/page-brand-managers-facebook/</a> </p>]]></description><pubDate>10/30/2009 3:02:05 PM</pubDate></item><item><title><![CDATA[Edentity is proud to announce our Sponsorship of the Digital Marketing Awards]]></title><author><![CDATA[Pam Westwater]]></author><description><![CDATA[<p>Edentity is proud to be a sponsor of the 2009 Digital Marketing Awards, taking place on November 11, 2009 at the Metro Toronto Convention Centre.  These awards celebrate Innovation, excellence, and leadership in the Digital Marketing world.  Produced by <i>Marketing</i> magazine, the DMA's represent the best of interactive marketing in Canada. The Awards are judged exclusively by the industry, and a select few are chosen for their creativity and for leveraging the interactive environment to its full potential. </p>
<p>The awards are part of the 12th Annual Digital Marketing Conference which has been a very successful event over the past few years.  This year's conference focus is The Digital Marketing Balancing Act, covering the focus and prioritization of opportunities with the ever changing marketing landscape.  With a number of successful keynote speakers, and valuable networking opportunities, Edentity hopes to gain a wealth of knowledge through our presence at the conference.  More information on the conference, and the option to purchase tickets can be found at: </p>
<p><a href="http://www.the-cma.org/marketingweek/digitalday.asp" class="NewsLink" target="_blank">http://www.the-cma.org/marketingweek/digitalday.asp</a></p>
<p>Edentity is excited to be a part of the growing Digital Marketing industry, and continues to make their mark on the Digital Marketing and Web Development World.</p>]]></description><pubDate>10/27/2009 2:52:27 PM</pubDate></item><item><title><![CDATA[Bing Maps Interactive SDK]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>If you're working with Bing Maps, the Interactive SDK gives you a leg up on how to learn and code all of the features and functionality.</p>
<p><span class="NewsLink"><a href="http://www.microsoft.com/maps/isdk/ajax/" class="ApplyClass" target="_blank">http://www.microsoft.com/maps/isdk/ajax/</a> </span></p>
<p>Use the interactive map to test the various features of the API, like multi-point routes and custom tile layers; tabs behind the map provide source code, references and additional help for the features that you have enabled.</p>
<p>Very handy for building a Bing Maps mashup!</p>]]></description><pubDate>10/30/2009 2:53:49 PM</pubDate></item><item><title><![CDATA[Channel 9 - Windows Azure Storage Overview Video]]></title><author><![CDATA[Mike Iskiw]]></author><description><![CDATA[<p>Great video on the basic concepts of Window Azure Storage</p>
<p><a href="http://channel9.msdn.com/posts/dunnry/Windows-Azure-Storage-Overview/" class="ApplyClass" target="_blank">http://channel9.msdn.com/posts/dunnry/Windows-Azure-Storage-Overview/</a> </p>
<p>Enjoy</p>]]></description><pubDate>10/30/2009 3:00:53 PM</pubDate></item><item><title><![CDATA[Windows Azure - Get 750 Free Computing Hours per Month]]></title><author><![CDATA[Mike Iskiw]]></author><description><![CDATA[<p><span style="font-size: 10pt;">Microsoft is giving away free computing hours to MSDN Premium subscribers. This is a great opportunity for developers to get their feet wet with cloud computing scenarios.   </span></p>
<p><span style="font-size: 10pt;">The chart on this page also give you a insight on what azure will cost when it goes live (with their estimated retail values): </span></p>
<p><span style="font-size: 10pt;"><a href="http://msdn.microsoft.com/en-us/subscriptions/ee461076.aspx" class="NewsLink" target="_blank">http://msdn.microsoft.com/en-us/subscriptions/ee461076.aspx</a></span></p>
<p><span style="font-size: 10pt;">Mike</span></p>]]></description><pubDate>10/30/2009 2:57:10 PM</pubDate></item><item><title><![CDATA[CNET News: Visual Studio 2010 to launch in March]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>According to an article from CNET News on October 19th, Visual Studio 2010 will launch in March, 2010.  This sort of follows the current timeline, where the Beta 2 has just been released, and we can probably expect another beta and/or a Release Candidate drop to evaluate before the final release.</p>
<p><img alt="" src="http://i.i.com.com/cnwk.1d/i/bto/20091015/VS_h_rgb_270x39.png" /> </p>
<p>Scanning through some of the comments in the CNET post, it seems that many people are debating the usefulness of upgrading their development environment.  I personally don’t understand this.  As of Visual Studio 2008, the ability to target multiple versions of the framework has been there, and the newer tools are miles ahead of their predecessors.  The only distinction that I would make on that is the Business Intelligence tools (which seem to be target more specifically for a given version of Visual Studio and SQL Server) and the legacy C++ tools that have been phased out of Visual Studio over time.</p>
<p>My only question is whether the new environment, which apparently is based upon Window Presentation Foundation (WPF), will be more or less responsive than the current IDE.  More importantly, will it be more stable, especially with respect to add-ons like Team Explorer and the various “extra” project types, like the Database Professional Edition projects.  </p>
<p>Possibly the biggest boon from moving to Visual Studio 2010 will be built-in (although I have yet to use it) Azure support.  I believe that building and deploying applications and services to Azure (an other cloud services environments) will be a massive shift in the next generation of .Net.  </p>
<p>Here’s hoping they get it right!</p>
<p> </p>
<p>More later – joel.</p>
<img width="1" height="1" alt="" src="http://weblogs.asp.net/aggbug.aspx?PostID=7235895" />
<div style="clear: both;"></div>
<p><i>Read the complete post at <a href="http://weblogs.asp.net/joelvarty/archive/2009/10/22/cnet-new-visual-studio-2010-to-launch-in-march-cnet.aspx" class="ApplyClass" target="_blank">http://weblogs.asp.net/joelvarty/archive/2009/10/22/cnet-new-visual-studio-2010-to-launch-in-march-cnet.aspx</a></i></p>
<div class="BlogPostTags"><span id="ctl00_ctl00_ctl00_bcro_bcr_bcr_bcr_WeblogPostTagEditableList1_ctl01"><a href="http://knowledge.edentity.local/blogs/joel/archive/tags/.Net+4.0/default.aspx" rel="tag"></a></span></div>]]></description><pubDate>10/22/2009 1:28:19 PM</pubDate></item><item><title><![CDATA[Fixing the Activation Date issue on work items in Team System]]></title><author><![CDATA[Jon Voigt]]></author><description><![CDATA[Sometimes work items&nbsp; will get in a weird state where they say there is not Activation date set, problem is you can't set this.&nbsp; This value is set when the item is Openned so the only way to fix it, is to decline the work item, then open it again.&nbsp; This will fix this problem.<br />
<br />
Regards,<br />
<br />
Jon]]></description><pubDate>10/16/2009 9:39:10 AM</pubDate></item><item><title><![CDATA[More URL Routing in Asp.Net 4.0…]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>We do our own routing with Agility CMS, however we are looking at switching to the more standardized routing built into Asp.Net (as of 3.5sp1). </p>
<p>I think the capabilities built into Asp.Net 4 will be what kicks us in the pants enough to update our logic, though, as it has some cool features and enough end-to-end link management utilities to make it work for our developers without asking them to re-learn the re-invention of the wheel again.</p>
<p><a href="http://weblogs.asp.net/scottgu/default.aspx" target="_blank">Scott Guthrie</a> outlines some stuff <a href="http://weblogs.asp.net/scottgu/archive/2009/10/13/url-routing-with-asp-net-4-web-forms-vs-2010-and-net-4-0-series.aspx" target="_blank">here</a> that describes how to use this mechanism in MVC 2.0 and Web Forms 4.0.</p>
<p><i>Read the complete post at <a href="http://weblogs.asp.net/joelvarty/archive/2009/10/13/more-url-routing-in-asp-net-4-0.aspx">http://weblogs.asp.net/joelvarty/archive/2009/10/13/more-url-routing-in-asp-net-4-0.aspx</a></i></p>]]></description><pubDate>10/19/2009 7:36:43 PM</pubDate></item><item><title><![CDATA[Writing for the Web]]></title><author><![CDATA[Kyle Tinning]]></author><description><![CDATA[<p>I have written web standards several times for jobs in the past.  So many times that I wrote them for myself so I wouldn't have to keep writing them.  They probably aren't all that important for us, but you may find it a good read or something to share with a client that is interested in this sort of thing.  So much of SEO is related to your content after all...</p>
<p><strong>Writing Standards For Web pages</strong></p>
<p>The purpose of these standards is to improve the usability of pages (how easy are they to read) as well as the search-ability (how easy are they to find).</p>
<p>There is a lot of research on web writing styles available online.  The foremost authority on most things web is Jakob Nielsen.  A collection of articles for web writing standards can be found here:  <a href="http://www.useit.com/papers/webwriting/" class="ApplyClass" target="_blank">http://www.useit.com/papers/webwriting/</a></p>
<p><strong>Executive Summary</strong><br />
Inverted Pyramid<br />
Put the most important information at the top of the page. </p>
<p><strong>Be Concise</strong><br />
People read computer screens 25% slower than print.  Web pages should be half as long as their print equivalents.</p>
<p><strong>Scan-able</strong><br />
Web users do not read, they scan.  Use headings and lists judiciously.  Highlight keywords.  Start headings and paragraphs with keywords.</p>
<p><strong>Credibility</strong><br />
Web pages inherently lack credibility.  Write in an objective manner, quote experts, cite facts, and keep information up to date to increase trustworthiness.</p>
<p><strong>Search-ability</strong><br />
If a user doesn’t know exactly where to go, he is going to search – most likely with google.  Modern search engines rank pages by the relevancy of their content and markers – such as titles, headings, and links within the content.</p>
<p><strong>Grammar</strong><br />
Some web specific grammar rules to be referenced in conjunction with any corporate standards.</p>
<p><strong>Lower Literacy Users</strong><br />
The internet is a global medium and not all visitors are native English speakers.  Lower literacy users have special needs and it turns out that what is good for them is good for higher-literacy users as well.</p>
<p><strong>Inverted Pyramid</strong><br />
<em>Overview – What is an Inverted Pyramid?</em><br />
The inverted pyramid is a writing style that starts a page with the conclusion (the most important information) follows with key supporting information, and ends with specific details.  The reader immediately knows the key findings and purpose of the page and can stop reading at any time.</p>
<p>Web users are impatient and critical; using the inverted pyramid immediately informs them if they have arrived at the correct destination or whether they need to continue their search.</p>
<p><strong>Title &amp; Summary –</strong> The most important elements<br />
The most important element on the page is the title.  The title needs to clearly state the page’s purpose and should contain the keywords that a user may have searched to find the page.</p>
<p>A summary needs to follow the title.  The summary should be short: two sentences maximum.  The user should confidently know what they can find on the rest of the page after reading the summary.  The summary will capture the interest of a user that has found what they are looking for; it is not intended to generate interest in a user that is looking for something else.</p>
<p><strong>Scrolling &amp; Scanning</strong> – Only interested users scroll<br />
Users don't like to scroll and will read only the top of a page to judge their interest. Very interested readers will scroll, but they are more likely to scan than to read. </p>
<p>“Scanners” will read the first line (or less) of each paragraph, skipping the rest if it appears to be irrelevant. Information should be prioritized so the first sentence of each paragraph indicates what the paragraph will contain.  See “Scan-able” for more information.</p>
<p><strong>Be Concise!</strong><br />
Overview – Get to the point<br />
Keep sentences short and to the point.  People read computer screens 25% slower than print and tend to scan more than they read.  Web pages should be half as long as their print equivalents.</p>
<p><strong>Stay Relevant – Don’t mix your messages<br />
</strong>Avoid unnecessary content and stick to your message. Web users do not want to read “marketese” or welcome messages. </p>
<p><strong>Using paragraphs – One idea per paragraph</strong><br />
Write short, tight paragraphs following these guidelines: </p>
<p><strong>Short, direct sentences (20 to 25 words).</strong> <br />
Break up long paragraphs (three to five sentences). <br />
Be succinct. Use only your best details and examples. <br />
Use simple sentence structures: Convoluted writing and complex words are difficult to understand online. <br />
<strong></strong></p>
<p><strong>Page Length - Avoid long pages</strong><br />
Users don't like to scroll, so keep it short and to the point. BUT - do not break up information into separate pages if it belongs together: moving pages is more disruptive than scrolling</p>
<p><strong>Lists – Great for scanning, but keep them short</strong><br />
Limit the number of items in a single list to no more than nine. Limit lists to no more than two levels: primary and secondary.</p>
<p><strong>Scan-able</strong><br />
Overview – Web users don’t read<br />
79% of users scan new pages, only 16% read word-by-word.  Users scan in an “F-Pattern” and will read the page title, the summary, and the first few words starting paragraphs and headings.</p>
<p>Increase usability with scan-able text such as:</p>
<p>meaningful headings <br />
short and focused paragraphs <br />
bulleted &amp; numbered lists <br />
hypertext links <br />
block quotes <br />
highlighted keywords <br />
numbers <br />
<strong></strong></p>
<p><strong>Structure &amp; Headings</strong> – Scanner friendly formatting<br />
Properly constructed headings organize a document and summarize the content found beneath them.  Headings should clearly describe what the following text is about even when read out of context.</p>
<p>Headings must be properly coded so that the topmost heading on the page is an H1, and subsequent headings (h2, h3, h4, etc) are organized structurally.  The hierarchy of headings should be no deeper than four levels. Lower-level heads are hard to distinguish and disorienting to online readers.</p>
<p>Headings should start with information carrying words (first 3 words) that users will notice when scanning the left side of the page.  It is ok to use passive voice when constructing a heading if it improves scan-ability.  Skip leading articles like "the" and "a" if the sentence still makes sense without them.</p>
<p>To ensure an adequate number of headings, try to create a heading for each “thought” or paragraph on a page.  Leave the heading in if it makes sense.</p>
<p><strong>Heading Don’ts</strong> <br />
Puns and clever headlines obscure content and are difficult to scan; use plain language. <br />
Do not tease or try to entice users to click to find out what a page is about: users typically will not bother. <br />
Paragraphs – Short and sweet<br />
Large blocks of text are more difficult to read online than in print and should be broken up into short sentences and paragraphs.  Each paragraph should contain one main idea; use a second paragraph for a second idea.</p>
<p>Like headings, paragraphs should start with information carrying words (first 3 words) that users will notice when scanning the left side of the page.  </p>
<p><strong>Lists – Full of important facts and points</strong><br />
Bulleted and numbered lists attract the scanning eye and draw attention to important points.  Use numbered lists when the order of entries is important and unnumbered lists when the sequence is not important.  Lists are preferable to lengthy comma separated sentences.</p>
<p>Limit the number of items in a single list to no more than nine. Limit lists to no more than two levels: primary and secondary.</p>
<p><strong>Links – What scanners are looking for</strong><br />
Hyperlinks stand out by virtue of being colored and underlined (default state). Scanners will fix on hyperlink text, so they should contain keywords.  Links should contain keywords for SEO purposes as well.</p>
<p><strong>Quotes – Add credibility and interest</strong><br />
Block quotes (those that are pulled out of the flow of the rest of the text) are very effective at attracting the scanner’s eyes.  A quote also lends credibility to a topic.</p>
<p><strong>Bolding – Makes keywords stand out</strong><br />
Within paragraphs, use bold to make keywords or short statements stand out.  These elements help guide readers' eyes towards the most important content.  </p>
<p>Bold and italics can be used more in online than in print, but should still be used sparingly for maximum effect.  Bold is more noticeable and is preferable to italics.</p>
<p>Never underline or use blue to highlight words as those formats can be confused for being hyperlinks. <br />
Highlight only information-carrying words. Avoid highlighting long phrases as a scanning eye can only pick up two (or at most three) words at a time. <br />
Numbers – Numbers represent facts<br />
Users tend to fixate on numerals as numbers represent facts.  Show Numbers as Numerals – e.g. use "23" rather than "twenty-three".  More info on numbers in the grammar section.</p>
<p><strong>Governance &amp; Credibility</strong><br />
Overview – Are you trustworthy?<br />
Credibility is very important to users as it is often unclear who authors information on the Web, if facts and quotations are true, and whether a page can be trusted.  Content needs to be kept updated and relevant.  Adequate resources to check each content page at least once every three months is required.</p>
<p><strong>Dates &amp; Authors –</strong> Who wrote this and when<br />
Users have more confidence in information on pages that list an author or contact and the date the page was published or last updated.</p>
<p><strong>Page Updates</strong> – Last updated in 2002<br />
An outdated page causes users to question whether any of the content on a site is relevant.</p>
<p><strong>External links and citations</strong> – Cite your sources<br />
Hyperlinks to other sites that have supporting information increases credibility and helps users assess the accuracy and quality of information on our site. We should cite our sources whenever appropriate. </p>
<p><strong>Quotes</strong> – Who is behind the quote?<br />
Users trust quotes from experts whose names and photos are provided.</p>
<p><strong>Statistics </strong>– Are these facts &amp; figures to be believed?<br />
All statistics should be cited.</p>
<p><strong>Marketing </strong>– If you say so…<br />
Exaggerated claims and boastful language hurt credibility.  Users detest "marketese"; it has been shown that “promotional language imposes a cognitive burden” on users who have to spend resources on filtering out the hyperbole to get at the facts.</p>
<p>A neutral, objective writing style with factually supported claims is trustworthy and allows users to quickly scan or read content.  Slogans can be used, but should appear in the site masthead or as a sidebar.  The mission statement belongs in the about us area of the site. </p>
<p><strong>Context </strong>– this heading is in the credibility section<br />
Any page can be accessed out of context (ie. search engines). Each page needs to disclose enough information to let the user know where they are and what the topic is.  Cross-linking can be used to expand on topics covered elsewhere on the site.</p>
<p><strong>Search-ability</strong><br />
Overview – Can you be found?<br />
More than half of users rely on search engines to find web pages.  When a user links to a page from a search engine, they should immediately know how the page relates to their query. Highlight keywords, start the page with a summary, and follow the guidelines listed under "Scan-ability" to ensure the content of a page is immediately recognizable.  Including all of the keywords that a searching user would expect to find on a page will improve search results.</p>
<p><strong>Keywords</strong> – The words typed into a search bar<br />
All possible terms that might be credibly used to search for a page should appear in the content. Keywords appearing in the page “Title” and in the headings on a page will have the most benefit to SEO and will be most visible to the user.  Do not add keywords that are only peripherally related to a page.</p>
<p>Prior to authoring a page, list the most important keywords and use them to try to structure the page.</p>
<p><strong>Meta Content Descriptions</strong> – Tell the user what is on your page<br />
Each page should have a short summary included in the description meta-tag. This summary is shown below the page title by some search engines and must be 150 characters or less. </p>
<p>Meta Content Descriptions should make sense when read out of context and should tell users what the page is about; do not fill descriptions with hyperbole or promotional language. </p>
<p><strong>Title</strong> – Be descriptive and use the keywords your user will search on<br />
Each page must have a &lt;TITLE&gt; tag.  The title tag appears on the viewports top bar, the history and back button function of browsers and in search results.  Each page on a site should have a unique title.</p>
<p>The title tag is the single most important element in search engine optimization.</p>
<p>Make the first word of the title the most important descriptor of the page. Use relevant keywords in the first 40 characters, as titles are often truncated in navigation menus and by search engines.</p>
<p>Use the company name first for the homepage title, but place it at the end for all content page titles. Do not start all page titles with the same word: they will be hard to differentiate when scanning a list. </p>
<p><strong>Headings –</strong> Just like the title<br />
The second most important content element in search engine optimization are the headings that structure the content on a page.  Each page should have an &lt;h1&gt; heading that is the title of a page and &lt;h2&gt; thru &lt;h6&gt; headings that structure the rest of the content.  Headings should include the keywords relevant to the content they describe and should start with the most descriptive one to assist with scanning.</p>
<p><strong>Hyperlink Text –</strong> Counts as keywords.  Ever search for ‘click here’?<br />
The words within a hyperlink describe the destination page the user will reach when they click.  These words are considered in search algorithms and have a significant impact on page rank.  When linking to internal pages, the link text should be descriptive and contain the keywords relevant to the destination page.  Links such as ‘more’ and ‘click here’ should never be used.  Where a shorter link is desired, link “title” text can be used.</p>
<p>Descriptive links are very important for accessibility concerns as screen readers can read links out of context.</p>
<p><strong>Keyword Density –</strong> More keywords, good – Less other words, better<br />
Keywords that appear more often on a page with fewer words have more power in search results. See the “Be Concise” section.</p>
<p><strong>Grammar &amp; Style</strong><br />
Overview – This is just for the web<br />
The grammar &amp; style rules listed below are specific to websites and should be followed in conjunction with any other corporate writing standards in place.</p>
<p><strong>Active Voice</strong> – more readable than passive voice<br />
Active voice is clear, direct, and more succinct than passive voice.  All content should be written in active voice with one exception:  Headings can be written in passive voice to improve “scan-ability”.</p>
<p><strong>Simple Language</strong> – Avoid jargon &amp; acronyms<br />
The language used on a website should appeal to the widest possible audience.  Convoluted syntax, specialist vocabulary and acronyms need to be avoided and there is no need to use long words where short ones will do.</p>
<p>As the web is a global medium, content should be written with low-literacy users in mind.  It has been shown that improvements for lower-literacy users do not come at the expense of higher-literacy users, the same way as improved usability for users with disabilities increases usability for non-disabled users as well.</p>
<p><strong>Tone</strong> – Relax, it’s the web…<br />
The Web is a less informal medium than print and a more relaxed writing style is acceptable as long as grammatical rules are respected. Caution should still be used with humour and puns that may not be understood by all readers.</p>
<p><strong>Numbers</strong> – Numbers represent facts<br />
Users tend to fixate on numerals as numbers represent facts.  Numbers should be shown as Numerals – e.g. use "23" rather than "twenty-three" – to catch users’ eyes when they scan a page.  The following rules should be followed when using numbers online:</p>
<p>Write numbers with digits, not letters (23, not twenty-three). <br />
Use numerals even when the number is the first word in a sentence or bullet point. <br />
Use numerals for big numbers up to but not including 1 billon: <br />
2,000,000 is better than two million. <br />
2 trillion is better than 2,000,000,000,000 as most users can't interpret that many zeros. <br />
Use numerals for the significant digits and write out the magnitude as a word: e.g. write 24 billion (not twenty-four billion or 24,000,000,000). <br />
But - spell out numbers that don't represent specific facts. <br />
Grammar &amp; Spelling – Have it checked by another set of eyes<br />
Grammar and spelling are important for the same reasons as consistency. All pages must be QA’d by marketing to ensure proper grammar and spelling.</p>
<p><strong>Web specific grammar</strong> – Some web-isms<br />
Email vs. email vs. E-mail vs. e-mail. Use e-mail, with the hyphen and no capitalization, unless it begins a sentence or is in a headline. <br />
WWW vs. www and Web vs. web. Use the Web or WWW in text and www in URLs. <br />
Use a lowercase "w" when describing web pages, web surfers, or web sites. <br />
Online vs. On-line. Use online. <br />
A vs. An with Acronyms. Use a or an based on the acronym's pronunciation. For example, a WYSIWYG application and an ASCII file. <br />
Set Up vs. Setup and Log On vs. Logon. Use set up and log on as verbs in instructions, such as: set up the printer or log on the network. Use setup and logon are adjectives or nouns, such as: the setup program or your logon password. <br />
Notes About Lower Literacy Users <br />
Overview - Lower literacy is different than illiteracy<br />
People with lower-literacy can read, but they may have some difficulties doing so.</p>
<p><strong>Inverted Pyramid</strong> – Don’t make them read so much<br />
The inverted pyramid is especially important to prioritize information. Users who might give up after a few lines of text will have read the most important content. </p>
<p><strong>Be Concise!</strong> – Don’t make them read so much<br />
Having to scroll can break a lower-literacy users' visual concentration and they often will lose their place after scrolling.  Writing in a concise manner will ensure the most important information remains above the fold and minimizes scrolling.</p>
<p><strong>Scanability</strong> – Hard to do<br />
Lower-literacy users have difficulty understanding a sentence by glancing at it. They read word for word and can spend considerable time on multi-syllabic words and jargon.  As a result, lower-literacy users don't scan text. They have a narrow field of view and often miss objects outside the main flow of the text they're reading.</p>
<p><strong>Lower-literacy users tend to satisfice</strong> – accept something as "good enough" – as digging deeper requires too much reading, which is both challenging and time consuming. As soon as text becomes too dense, lower-literacy users start skipping, usually looking for the next link.</p>
<p><strong>Search-ability</strong> – Are you feeling lucky?<br />
Lower-literacy users often have difficulty processing search results, which typically show weird, out-of-context snippets of text. As a result, lower-literacy users often simply pick the first hit on the list, even if it's not the most appropriate for their needs. </p>
<p><strong>Downloadable file or webpage?</strong><br />
If the content is longer than 10 printed pages, upload it as a pdf.</p>
<p>If the original document contains complex graphics or layouts, upload it as a pdf.</p>
<p>If the content is short and non-graphical, upload it as html.</p>
<p> </p>]]></description><pubDate>10/22/2009 1:30:20 PM</pubDate></item><item><title><![CDATA[Launch of the OCA Chiropractor Locator]]></title><author><![CDATA[Kyle Tinning]]></author><description><![CDATA[<p>Announcing the launch of the OCA Chiropractor Locator on September 3. You will find it here: <a href="http://www.chiropractic.on.ca/locator.aspx" class="ApplyClass" target="_blank">www.chiropractic.on.ca/locator.aspx</a> </p>
<p>This project was completed for the OCA who were looking for a way for people to easily find a chiropractor in Ontario by searching by location, name or clinic name and provide microsites to all of the OCA members.  Information is pulled from out of the OCA's newly built Association Server system for both the locator and microsites.  Presentation templates were created for the Association Server system and the Members only secure area login was altered to authenticate from Association Server. </p>
<p>Here is a summary of the project team members and their contributions: </p>
<p>Mike Iskiw – Architect-ed the data transfers </p>
<p>David Luu - Produced all templates, built a windows service to pull data from Association Server and set up all the google geo-coding for the mapping features of both the locator and microsites </p>
<p>Kyle Tinning - Project management  </p>
<p>Please join me in congratulating the team on a job well done!  When you get a chance, take a look at the site!  </p>
<p> </p>]]></description><pubDate>10/22/2009 1:30:33 PM</pubDate></item><item><title><![CDATA[Facebook Connect Wizard and Translations]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[The new setup wizard is a tool that allows a Facebook Connect script to be set up in three easy steps.  <br />
<br />
With the new translation capabilities, it will automatically translate your site into the language of the user's computer.  This is very compelling and is something we will investigate further for adding onto Agility sites.<br />
<br />
Learn more from CNet:<br />
<br />
<a href="http://news.cnet.com/8301-13577_3-10364277-36.html?tag=nl.e703">http://news.cnet.com/8301-13577_3-10364277-36.html?tag=nl.e703</a>]]></description><pubDate>10/7/2009 7:30:34 AM</pubDate></item><item><title><![CDATA[Canadian Opera Company Website Wins WebAward]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Delvinia Interactive and Edentity have won a WebAward for 'Outstanding Achievement in Web Development' in the 'Non-Profit Standard of Excellence' category for the Canadian Opera Company website.</p>
<p>Delvinia provided the strategic direction, functional specifications and design.  Edentity took care of the back-end development and content management system implementation.</p>
<p>Here are the details of the award:</p>
<p><a href="http://www.webaward.org/winner.asp?eid=13196" class="ApplyClass" target="_blank">http://www.webaward.org/winner.asp?eid=13196</a></p>
<p>Here is the COC site:</p>
<p><a href="http://www.coc.ca" target="_blank">www.coc.ca</a></p>
<p>For more about Delvinia:</p>
<a href="http://www.delvinia.com" target="_blank">
<p>www.delvinia.com</p>
</a>]]></description><pubDate>10/30/2009 3:00:29 PM</pubDate></item><item><title><![CDATA[ASP.NET Expression Builder]]></title><author><![CDATA[Andre Small]]></author><description><![CDATA[After working on a few multi-lingual sites, the common problem that I face was the swapping the text and images. Now, you can use &lt;%$&nbsp; %&gt; expression builder to get the text and image path from resources files. Personally, I only use resx files for text, I don't like referencing images/files using a single Camel-case string. I want to see the path the image/resource as I scan through code. I think that adds additional clicks and memory work when looking through asp.net files. &nbsp;<br />
<br />
So I decided to write my own ASP.NET Expression Builder which was a lot easier than I thought it would be. There are a few caveats to using an expression builder:<br />
<br />
1.&nbsp; You should consider them static, meaning they don't below to an HttpContext, or page or object instance/context, but act more like a static methods.<br />
<br />
2.&nbsp; You will need to standardize your resource naming so that you can modify the supplied value to output the correct value for the control in a given language.<br />
<br />
Here is the code block.<br />
<br />
namespace Project<br />
{<br />
&nbsp;&nbsp;&nbsp; [ExpressionPrefix("ProjectResources")]<br />
&nbsp;&nbsp;&nbsp; public class ProjectResourcesExpressionBuilder : ExpressionBuilder &nbsp;<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public override System.CodeDom.CodeExpression GetCodeBLOCKED EXPRESSION;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
<br />
You will have to update the web.config with a couple of additional lines to enable the expression builder:<br />
<br />
&lt;compilation debug="true"&gt;<br />
&nbsp;&lt;assemblies&gt;<br />
&nbsp; &lt;add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/&gt;<br />
&nbsp; &lt;add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/&gt;<br />
&nbsp; &lt;add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/&gt;<br />
&nbsp; &lt;add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/&gt;<br />
&nbsp;&lt;/assemblies&gt;<br />
&nbsp;&lt;expressionBuilders&gt;<br />
&nbsp; &lt;add expressionPrefix="ProjectResources" type="Project.ProjectResourcesExpressionBuilder "/&gt;<br />
&nbsp;&lt;/expressionBuilders&gt;<br />
&lt;/compilation&gt;]]></description><pubDate>9/15/2009 3:42:07 PM</pubDate></item><item><title><![CDATA[Useful Javascript functions]]></title><author><![CDATA[Andre Small]]></author><description><![CDATA[The String.Trim(), String.StartWith and String.EndWith methods are very useful methods that are prebuilt into the .NET framework, that need a client-side implementation. Below are the javascript equivalents that I have found to be extremely helpful.<br />
<br />
String.prototype.trim = function(){return (this.replace(/^[\s\xA0]+/, "").replace(/[\s\xA0]+$/, ""))}<br />
<br />
String.prototype.startsWith = function(str) {return (this.match("^"+str)==str)}<br />
<br />
String.prototype.endsWith = function(str)&nbsp; {return (this.match(str+"$")==str)}<br />
<br />
Credit: http://www.tek-tips.com/faqs.cfm?fid=6620<br />
<br />
Also, The ResolveUrl() method that I (we) use a lot in ASP.NET development. Here is a Javascript equivalent. Note: This requires some help from ASP.NET to provide the resolution of the "~/" and needs to be inline in the HTML.<br />
<br />
function ResolveUrl(url) {<br />
&nbsp;if (url.match("^~/") == "~/") {<br />
&nbsp; return url.replace("~/", "&lt;%= ResolveUrl("~/") %&gt;");<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;return url;<br />
}<br />
<br />
I hope this helps you.]]></description><pubDate>9/15/2009 3:42:07 PM</pubDate></item><item><title><![CDATA[Crisp Brand Agency Launches First Agility-Managed Flash Site]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[Agility has been used to manage content embedded in Flash objects for a while.&nbsp; However, the Five Axis site is the first example of an Agility-managed site that is 100% Flash - navigation, content and all.<br />
<br />
It's a sick site too.&nbsp; Check it out!<br />
<p><a href="http://www.fiveaxis.net" target="_blank" class="ApplyClass">www.fiveaxis.net</a></p>
<p>Check out Agility CMS:</p>
<p><a href="http://www.agilitycms.com" target="_blank" class="ApplyClass">www.agilitycms.com</a> </p>]]></description><pubDate>9/16/2009 12:29:38 PM</pubDate></item><item><title><![CDATA[Always check for null on Request.UserAgent]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[Personally, I love the “Browser Capabilities” project on codeplex (http://browserdetection.codeplex.com/) that does a nice job of extracting the actual things that a browser can do, saving you from doing things the following:<br />
<br />
if (Request.UserAgent.IndexOf("AppleWebKit") &gt; 0)<br />
{<br />
&nbsp;&nbsp; //DO SOMETHING<br />
}<br />
<br />
But if you find yourself in a situation where you have custom logic you need to implement around a piece of logic (like I did with a mobile site I recently worked on), rememeber to always do a null check on the UserAgent before performing string operations on it.<br />
<br />
While you’re at it, please don’t these things either (I won’t say why not – if you don’t know why not, ask somebody):<br />
<br />
Request.QueryString["page"].ToString();<br />
DataRow["column"].ToString();<br />
<br />
More later - joel<br />]]></description><pubDate>9/14/2009 4:34:29 PM</pubDate></item><item><title><![CDATA[MonoTouch (by Novell) Enables iPhone Development in .NET]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[Novell launched Mono in 2004 as a platform for building and deploying .NET applications in Linux.&nbsp; MonoTouch is designed to extend that capability to iPhone development.<br />
<br />
This presents an exciting opportunity for experienced .NET developers who want to apply their knowledge to the iPhone platform.<br />
<br />
It's not free, but might be worth the $399 per year license for hardcore .NET developers to try their hand at iPhone development.<br />
<br />
CNet Article: <a href="http://news.cnet.com/8301-1001_3-10351923-92.html?tag=nl.e703" target="_blank" class="ApplyClass">http://news.cnet.com/8301-1001_3-10351923-92.html?tag=nl.e703</a><br />
<br />
Novell's Mono Project: <a href="http://www.mono-project.com/Main_Page" target="_blank">http://www.mono-project.com/Main_Page</a>]]></description><pubDate>9/14/2009 4:34:29 PM</pubDate></item><item><title><![CDATA[SQL Server 2005 Reporting Services Installation]]></title><author><![CDATA[Henry Ji]]></author><description><![CDATA[Recently I had to install SQL Server 2005 Reporting Services and thought if I summarized the things that are needed to pay attention to, it might be helpful for anyone who is in the same situation.<br />
<br />
First off, if you want to install SQL Server 2005 Reporting Services after SQL Server 2005 has been installed, you need to manually configure the reporting services to get it work. Here is a link about the known limitation of SSRS 2005 Configuration Manager / WMI provider, which disables the "Install the default configuration" option but leaves only "Install but do not configure" option selected by default when you install SQL Server 2005 Reporting Services after SQL Server 2005 has been installed. As the workaround on the Microsoft Connect page points out, you can find the manual configuration instruction here.<br />
<br />
Second, don't forget installing SQL Server 2005 Service Pack 2. Otherwise you will find trouble choosing / connecting the report server database when you configure the reporting services.]]></description><pubDate>9/10/2009 5:35:41 PM</pubDate></item><item><title><![CDATA[How JSONP works]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[There are a plethora of explanations for JSONP (JSON with Padding, I think it stands for) out there – just search for “how JSONP works” and you’ll get a ton of descriptions.&nbsp; JSONP is provided as an alternative to normal JSON by jQuery on the client side to enable the invocation of services outside of the current domain.<br />
<br />
Some of them are incorrect in explaining that this technology uses a server-server proxy to call out to another server outside of the current domain.<br />
<br />
This is NOT a server-server technology, but rather more like the way a lot of Ad servers work by injecting javascript into the page using document.write() with a script tag.<br />
<br />
The url for the script tag has a querystring parameter which become that javascript function that wraps up the JSON return value of the web method.&nbsp; Essentially, a document.write() call creates a script tag on the page which goes to whatever server you want to, and then returns a javascript function object which will get invoked when the script’s response is evaluated by the browser.&nbsp; This means that the server code has to be tweaked to wrap the JSON return in that function call.<br />
<br />
One thing you will not get from JSONP is notification of network errors or anything that responds nicely to badly formed responses, so you have to accept that as a tradeoff with the ability to invoke services on other domains.<br />
<br />
This is a very high level explanation of JSON, but I hope it gets you started in right direction.<br />
<br />
More later - joel]]></description><pubDate>9/10/2009 10:18:07 PM</pubDate></item><item><title><![CDATA[WebKit, Flash Coming to BlackBerry]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>The WebKit web browser platform, made famous by the iPhone but also
used on the Palm Pre, Symbian and Android phones, will now be coming to
the BlackBerry.</p>
<p>RIM aquired WebKit developer Torch Mobile to help with the task.</p>
<p>They are shooting for a summer 2010 launch of a WebKit powered browser which will also support Flash</p>
<p>See details from CNET:</p>
<p><a target="_blank" href="The%20WebKit%20web%20browser%20platform,%20made%20famous%20by%20the%20iPhone%20but%20also%20used%20on%20the%20Palm%20Pre,%20Symbian%20and%20Android%20phones,%20will%20now%20be%20coming%20to%20the%20BlackBerry.%20%20RIM%20aquired%20WebKit%20developer%20Torch%20Mobile%20to%20help%20with%20the%20task.%20%20They%20are%20shooting%20for%20a%20summer%202010%20launch%20of%20a%20WebKit%20powered%20browser%20which%20will%20also%20support%20Flash%20%20See%20details%20from%20CNET:%20%20http://news.cnet.com/8301-13506_3-10316027-17.html?tag=nl.e703">http://news.cnet.com/8301-13506_3-10316027-17.html?tag=nl.e703</a></p>
<p></p>]]></description><pubDate>8/28/2009 2:59:03 PM</pubDate></item><item><title><![CDATA[Using DateDiff and LIKE in LINQ]]></title><author><![CDATA[Alex Cibotari]]></author><description><![CDATA[<p>It's simple. </p>
<p>Use System.Data.Linq.SqlClient.SqlMethods class. :)</p>]]></description><pubDate>9/10/2009 5:24:42 PM</pubDate></item><item><title><![CDATA[Browse Team Foundation Server project 'Documents' folders like your C: Drive]]></title><author><![CDATA[Steve Pontisso]]></author><description><![CDATA[<p>Want to access files from the TFS SharePoint repository faster?&nbsp;</p>
<p>I use this method because it's faster than browsing files in TFS,
doesn't require refresh, and let's me do "Save As" (from Basecamp for
example) much more directly.</p>
<ol>
    <li>In TFS, get the path of the Documents folder by right-clicking on it, and selecting 'Properties'</li>
    <li>Copy the path, not the http: part (so everything after the http:)</li>
    <li>Go to 'My Computer'</li>
    <li>Browse to the path where you want to put a shortcut to this
    project's documents.&nbsp; I keep a folder on my local drive called "My
    Projects".</li>
    <li>Right click anywhere inside your destination folder, and pick New -&gt; Shortcut</li>
    <li>Paste the path into the shortcut path field - but don't click next yet!</li>
    <li>Edit the path by changing all the '/' characters to '\'</li>
    <li>Click Next.</li>
    <li>Edit the name if you want, but I recommend keeping it the same so you don't get confused.</li>
    <li>Click Finish</li>
    <li>Test your new shortcut.</li>
</ol>
<p>Voila!&nbsp; This should save you some time throughout your day!&nbsp; Enjoy!</p>]]></description><pubDate>8/21/2009 3:54:28 PM</pubDate></item><item><title><![CDATA[Team Foundation Server: Who edited this text? – Annotations in source control]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>If you were ever looking at some code and wondered who actually
changed the line of text you were currently looking at, there is a way
to do just that!</p>
<p>It is called Annotations, and it is a visual
tracking of the history of that file’s history in source control, along
with any additional annotations added to it manually.</p>
<p>Get there by right clicking the actual source file and choosing “Source Control | Annotate”</p>
<p>When you click “Annotate”, a new tab will open in Visual Studio that outlines each change to the file.</p>
<p>
</p>
<p>You can see the editor for each version, as well as the clickable change set link associated with the version.&nbsp; </p>
<p>Awesome.</p>
<p>more later - joel</p>
<p><em>Read the complete post at <a href="http://weblogs.asp.net/joelvarty/archive/2009/08/18/tfs-who-edited-this-text-annotations-in-source-control.aspx">http://weblogs.asp.net/joelvarty/archive/2009/08/18/tfs-who-edited-this-text-annotations-in-source-control.aspx</a></em></p>]]></description><pubDate>8/21/2009 3:54:29 PM</pubDate></item><item><title><![CDATA[Run threads and async handlers under the same impersonated identity as the website]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[When you run a background thread or async handler in asp.net, the thread will not run with the same identity specified in the impersonate tag of the web.config.&nbsp; You can easily get around this by grabbing the identity before the thread starts and either storing it in a variable or passing it to the thread as part of the ParameterizedThreadStart delegate. <br />
<br />
Here are some code chunks to copy and paste:<br />
<br />
WindowsIdentity appID= System.Security.Principal.WindowsIdentity.GetCurrent()<br />
<br />
ParameterizedThreadStart ts = new ParameterizedThreadStart(RunSyncThread)<br />
Thread workerThread = new Thread(ts)<br />
workerThread.Start(appID)<br />
<br />
<p>
Now, from the thread itself, you only need to take the Identity object and impersonate using it.</p>
<p></p>
WindowsImpersonationContext wi = appID.Impersonate()<br />
<br />
&nbsp;<br />
<br />
Your thread will now operate under the proper identity!<br />
<br />
more later – joel]]></description><pubDate>8/17/2009 3:22:34 PM</pubDate></item><item><title><![CDATA[Fix for Firebug issues in FireFox 3.5]]></title><author><![CDATA[Matthew Quinn]]></author><description><![CDATA[After installing Firefox 3.5, I started having trouble with Firebug 1.4. Whatever I did, I couldn't get the console functions to work. I resolved the issue by using the latest alpha build - 1.5X.0a18. Now console logging works like a charm again, and I don't have to go back to abominable alert debugging.<br />]]></description><pubDate>8/4/2009 1:09:36 PM</pubDate></item><item><title><![CDATA[Great Article on Open Source Software from CMS Watch]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[My favourite line: 'First of all, I have to keep repeating that open source isn't gratis ("think of <em>free</em> as in <em>free speech</em>, not as in <em>free beer</em>").' <br />
<br />
The author explains how Open Source is just a licence model and should not be a key deciding factor on the CMS you purchase. He also reminds us that Open Source is usually the same cost or more than traditional licensing models. <br />
<br />
Here is the full article: <br />
<br />
<a href="http://www.cmswatch.com/Trends/1642-Open-Source-License?source=RSS%20" target="_blank">http://www.cmswatch.com/Trends/1642-Open-Source-License?source=RSS </a><br />
<br />]]></description><pubDate>8/4/2009 1:02:46 PM</pubDate></item><item><title><![CDATA[Download/output dynamic empty files from asp.net]]></title><author><![CDATA[Alex Cibotari]]></author><description><![CDATA[Task: Download / output dynamic empty files from asp.net<br />
<br />
Solution:<br />
<br />
If you just pass to Response.BinaryWrite an empty array you get an exception. So this case should be handled separately in the following way:<br />
<br />
Response.ContentType = .....<br />
<br />
Response.AddHeader("Content-Length", "0");//here is the magic<br />
<br />
Response.End();<br />
<br />
&nbsp;<br />
<br />
No Response.BinaryWrite calls]]></description><pubDate>8/4/2009 1:09:36 PM</pubDate></item><item><title><![CDATA[ResolveUrl in Javascript]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>This is something that is super easy, yet I get asked about it quite often.</p>
<p>Here’s how you do it:</p>
<p>In the master page for the site, put this:</p>
<pre class="csharpcode"><span class="kwrd">&lt;</span><span class="html">script</span> <span class="attr">type</span><span class="kwrd">="text/javascript"</span><span class="kwrd">&gt;</span>
        <span class="kwrd">var</span> baseUrl = <span class="str">"&lt;%= ResolveUrl("</span>~/<span class="str">") %&gt;"</span>;
<span class="kwrd">&lt;/</span><span class="html">script</span><span class="kwrd">&gt;</span></pre>
<p>&nbsp;</p>
<p>Then, in your javascript file, put this function:</p>
<pre class="csharpcode"><span class="kwrd">function</span> ResolveUrl(url) {
    <span class="kwrd">if</span> (url.indexOf(<span class="str">"~/"</span>) == 0) {
        url = baseUrl + url.substring(2);
    }
    <span class="kwrd">return</span> url;
}</pre>
<p>You could have put the function right in the master page, but then you wouldn’t get intelli-sense on it for the rest of your code.</p>
<p>Now you can call ResolveUrl with ~/ right from javascript.  </p>
<p>Super easy, but also super useful!</p>
<p>If you use themes, you might even want to write something that does a “get themed url” where the current theme is output from the master page via Page.Theme.</p>]]></description><pubDate>7/22/2009 2:30:17 PM</pubDate></item><item><title><![CDATA[Password Generation Class]]></title><author><![CDATA[Alexandru Cibotari]]></author><description><![CDATA[<p>Here is a class that allows generating passwords. The result is customizable. &nbsp;It’s possible to specify:</p>
<p>1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Password length</p>
<p>2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Allow/Don’t allow upper case characters</p>
<p>3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Allow/Don’t allow lower case characters</p>
<p>4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Allow/Don’t allow numbers</p>
<p>5.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Allow/Don’t allow symbols</p>
<p>Source code:</p>
<p>
</p>
<p>
</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static string GeneratePassword(int passworLength, bool allowLowerCaseCharacters, bool allowUppercaseCharacters, bool allowNumbers, bool allowSymbols)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string[] Lower = new string[26] { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" };</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string[] Upper = new string[26] { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string[] Number = new string[10] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "0" };</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string[] Symbol = new string[] { "!", "@", "#", "$", "%", "&amp;", "*", "?" };</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string password = "";</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; passworLength; i++)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Random rand = new System.Random(Guid.NewGuid().GetHashCode());</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int rplace = rand.Next(0, 4);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int rplace2 = 0;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (!IsChecked(rplace, allowLowerCaseCharacters, allowUppercaseCharacters, allowNumbers, allowSymbols))</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rplace = rand.Next(0, 4);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch (rplace)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 0:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rplace2 = rand.Next(0, 26);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; password += Lower[rplace2];</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 1:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rplace2 = rand.Next(0, 26);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;password += Upper[rplace2];</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 2:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rplace2 = rand.Next(0, 10);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; password += Number[rplace2];</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 3:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rplace2 = rand.Next(0, 8);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; password += Symbol[rplace2];</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; default:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; password += "";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return password;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static bool IsChecked(int rplace, bool allowLowerCaseCharacters, bool allowUppercaseCharacters, bool allowNumbers, bool allowSymbols)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch (rplace)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 0:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return allowLowerCaseCharacters;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 1:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return allowUppercaseCharacters;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 2:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return allowNumbers;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case 3:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return allowSymbols;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; default:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p></p>
<p></p>]]></description><pubDate>7/17/2009 12:49:06 PM</pubDate></item><item><title><![CDATA[Good Summary of and Commentary on Google Chrome OS]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>GigaOM,&nbsp;has a concise article on Google Chrome OS and a great discussion that follows.</p>
<p>From GigaOM: <br />
<br />
<a href="http://gigaom.com/2009/07/08/google-chrome-os/%20" target="_blank">http://gigaom.com/2009/07/08/google-chrome-os/ </a><br />
<br />
<a target="_blank" href="http://gigaom.com/2009/07/08/google-chrome-os-a-scramble-to-say-nothing/%20">http://gigaom.com/2009/07/08/google-chrome-os-a-scramble-to-say-nothing/ </a><br />
<br />
From NYT: <br />
<br />
<a href="http://www.nytimes.com/2009/07/08/technology/companies/08operate.html" target="_blank">http://www.nytimes.com/2009/07/08/technology/companies/08operate.html </a><br />
<br />
Intriguing but not the bomb that TechCrunch makes it out to be: <br />
<br />
<a target="_blank" href="http://www.techcrunch.com/2009/07/08/google-chrome-redefining-the-operating-system/%20">http://www.techcrunch.com/2009/07/08/google-chrome-redefining-the-operating-system/ </a><br />
<br />
To me, it's no different than a phone OS. <br />
<br />
And someone made a good point on the second GigaOM link: if they are putting an OS on a computer, won't regulators force them to include other browsers? </p>]]></description><pubDate>7/10/2009 1:46:49 PM</pubDate></item><item><title><![CDATA[Agility CMS Reviews Posted on Capterra]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Read product reviews from Agility customers.</p>
<p>4.5 out of 5 stars on average.  Not bad!</p>
<p><a href="http://www.capterra.com/content-management-software/reviews/88191/Agility%20Content%20Management%20System/Edentity%20Web%20Systems" target="_blank">http://www.capterra.com/content-management-software/reviews/88191/Agility%20Content%20Management%20System/Edentity%20Web%20Systems</a></p>]]></description><pubDate>7/7/2009 4:06:03 PM</pubDate></item><item><title><![CDATA[Launch Announcement Microscan]]></title><author><![CDATA[Kyle Tinning]]></author><description><![CDATA[<p>A belated launch announcement for the Microscan redesign and S3 document migration...<br />
<br />
On June 18th, we launched both the Microscan redesign and the S3 migration.  Check it out at:  http://www.microscan.com<br />
<br />
This project was our first S3 migration of an Agility site.  It turned out to be a very tricky switch due to the size of the microscan website, the number of documents and attachments, the various different methods Microscan had used to link to documents - not the least of which was a script for Eloqua that redirected links to capture click metrics.<br />
<br />
Here is a summary of the project team members and their contributions:</p>
<ul style="list-style-type: disc;">
    <li>Joel Varty - S3 migration &amp; testing </li>
    <li>David Luu - Redesign of templates, header/footer scripts, global language resources, collapsible left nav </li>
    <li>Ryan Lee - Testing </li>
    <li>Alexandru Cibotari - creating iframe module </li>
    <li>Kyle Tinning - Project management </li>
</ul>
<p >One thing we learned on this project is...<br />
<br />
Setting the "ACL" in  S3Fox is a little buggy and processing can fail and result in images / documents not appearing on the site.<br />
<br />
Please join me in congratulating the team on a job well done! When you get a chance, take a look at the site!<br />
<br />
Thanks,<br />
<br />
Kyle </p>]]></description><pubDate>7/2/2009 3:07:02 PM</pubDate></item><item><title><![CDATA[Synchronizing jQuery Animations]]></title><author><![CDATA[Matthew Quinn]]></author><description><![CDATA[<p>On a current project I had to animate the "opening" of an absolute-positioned div (initially hidden) from the top-right to its full dimensions (917x228). That means animating the width (from 0px to 917px), the offset left (from its initial value to 917px less than that) and the height (from 0px to 228px).</p>
<p>The first thing that comes to mind is the following <a href="http://jquery.com/" target="_blank">jQuery</a> <a href="http://docs.jquery.com/Effects/animate" target="_blank">animation function</a> (assuming initial height and width 0px):</p>
<pre>$("#TheElement").animate({<br />    width: "917px",<br />    height: "228px",<br />    left: "-=917px"<br />});</pre>
<p>However, these 3 animations are <b>not synchronized </b>- deviations in the speed at which they run may put the "width" and "left" out of whack, which completely ruins the effect as the div jumps around horizontally during the animation. This was especially noticeable in Firefox. As it turns out, jQuery lets you set a (mostly undocumented) callback on each animation "step", which lets you do the synchronization yourself (while still harnessing all the built-in power of the "animate" function).</p>
<pre>var initialLeft = $("#TheElement").css("left");<br />$("#TheElement").animate({<br />    width: "917px",<br />    height: "228px"<br />}, {<br />    step: function(now, fx) {<br />        if (fx.prop == "width") {<br />               $("#TheElement").css("left", initialLeft - now);<br />        }<br />    }<br />);</pre>
<p>Now the width and left offset are kept perfectly in sync. (As I said, the step function seems <a target="_blank">undocumented</a>, but you can output the "fx" object in something like <a href="http://getfirebug.com/" target="_blank">Firebug</a> to see all its properties. The key one is "fx.prop", which is the CSS property that the "step" callback is referencing. The first callback parameter, "now", is a shortcut to "fx.now", which is the currently calculated value of the CSS property for the current animation step.)</p>]]></description><pubDate>6/30/2009 1:36:59 PM</pubDate></item><item><title><![CDATA[Adding HttpModules to Agility Websites? Extend the ExtensibleAgilityHTTPModule]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>If you want to do Friendly Urls or other things in an Agility website that requires you to add an Http Module, you should do it by extending Agility.Web.HttpModules.ExtensibleAgilityHTTPModule.</p>
<p>This is a module that already has the appropriate logic in it for handling language switching, state management, etc.</p>
<p>There is one method in this class to override called "<b>InitExtensibleModule()</b>" that you can treat like the init of a regular http module.  From there, you can bind to the begin request event, or whatever other event you need.</p>
<p><b>public override void InitExtensibleModule()<br />
{<br />
   base.BeginRequest += new EventHandler(FriendlyUrlModule_BeginRequest);<br />
}<br />
</b></p>
<p><b>void FriendlyUrlModule_BeginRequest(object sender, EventArgs e)<br />
{<br />
}</b></p>
<p>Also, please take note that if you are doing friendly URLs, you'll need to add some logic to ensure the output cache of the page is a different version for every raw url.</p>
<p>You can usually do this by added <b>Request.RawUrl</b> to the GetVaryByCustomString method as a return value like so:</p>
<p><b> public override string GetVaryByCustomString(HttpContext context, string custom)<br />
    {<br />
        //AgilityCacheControl is a special "VaryByCustom" value that is added in the HTTPModule.<br />
        if (string.Compare(custom, "AgilityCacheControl", true) == 0)<br />
        {<br />
            StringBuilder sb = new StringBuilder();<br />
            sb.Append(Agility.Web.Data.GetAgilityVaryByCustomString(context));                       <br />
            sb.Append(context.Request.RawUrl);            <br />
            return sb.ToString();<br />
        }<br />
<br />
        <br />
        return base.GetVaryByCustomString(context, custom);<br />
    }</b></p>]]></description><pubDate>6/29/2009 1:35:35 PM</pubDate></item><item><title><![CDATA[SSIS: Access Denied Issue when Using Bulk Insert Task to Insert from a file on Network Drive.]]></title><author><![CDATA[Henry Ji]]></author><description><![CDATA[Normally, if a SSIS package is scheduled to run in a SQL agent job using a proxy user and this proxy user has permission to access a network drive, then there will be no permission problem for accessing files on the network drive from the control flow items in the SSIS package. However, the Bulk Insert Task item apparently works another way. <br />
<br />
The Bulk Insert actually uses the user which is used to run the SQL Server instance, who normally doesn't have permission to access any network drive. Therefore, to avoid accessing a file on network drive from Bulk Insert Task, a File System Task item can be added before the Bulk Insert Task item to move the file from network drive to local so that the Bulk Insert Task item can insert from a local file.]]></description><pubDate>6/25/2009 10:53:38 AM</pubDate></item><item><title><![CDATA[Include Bing Results on your 404 Page]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Bing has released a toolkit and API for displaying search results on 404 (page not found) error pages.</p>
<p>The toolkit is an add-on to IIS which allows customization of the standard IIS 404 pages.  The API allows you to make AJAX calls to Bing to grab results that are relevant to what the person was looking for when they landed on the 404 page.</p>
<p>Details from the Bing Blog:</p>
<p><a href="http://www.bing.com/community/blogs/developer/archive/2009/06/23/customize-your-404-error-pages-with-the-bing-api-web-page-error-toolkit.aspx" target="_blank">http://www.bing.com/community/blogs/developer/archive/2009/06/23/customize-your-404-error-pages-with-the-bing-api-web-page-error-toolkit.aspx</a> </p>]]></description><pubDate>6/25/2009 10:51:16 AM</pubDate></item><item><title><![CDATA[IIS 7 - WCF Services Won't Run by Default (.svc returns 404)]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>If you get a 404 on a WCF web service (SVC) in IIS7, you may need to re-register WCF on the machine.</p>
<p>Here is the command line, make sure you run Command Prompt as an Administrator to do this.</p>
<p><b>"%Windir%\Microsoft.Net\Framework\v3.0\Windows Communication Foundation\ServiceModelReg.exe" -r</b></p>]]></description><pubDate>6/25/2009 10:41:52 AM</pubDate></item><item><title><![CDATA[CSS: Get Rid of Dashed Border on Focused Elements]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p><strong>Disclaimer</strong>: This is meant to be use ONLY ff you do NOT want your user to be able to Tab through the links on your site, or if you have already coded the :focus subclasses or onfocus script events for all of the elements in your site that you wish your user to be able to visually tab through.</p>
<p>Do you want to get rid of the dashed border that appears when you click on links, flash controls, etc?</p>
<p>Try this!</p>
<p> </p>
<pre class="csharpcode">* 
{
    -moz-outline-style: none;     
    outline-syle: none;
    outline-width: 0px;
    outline-color: -moz-use-text-color;
}</pre>
<p> </p>]]></description><pubDate>6/23/2009 1:58:45 PM</pubDate></item><item><title><![CDATA[Bring Your Site to Life with SitePal]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>This nifty utility allows you to place a talking avatar on your site to guide your visitors through the functionality and navigation.</p>
<p>Starting from just $9.95 per month, your customized avatar can speak to your audience in several languages.  Design your avatar, record your audio, and you're done!  You can then drop your speaking website companion anywhere on your Agility managed site.</p>
<p>Contact us to learn more about how to integrate SitePal with your site.</p>
<p><a href="http://www.sitepal.com/home" target="_blank">http://www.sitepal.com/home</a></p>]]></description><pubDate>6/17/2009 11:03:48 AM</pubDate></item><item><title><![CDATA[Coolest Ad I've Seen in a While - for Bing]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Talk about thinking outside the box.  This is one of the coolest TV ads I've seen a while.  It provides instant value to the consumer while creating the perfect association with the product.</p>
<p>I guess innovation happens when you spend $100 millon on an ad campaign like Microsoft is doing for Bing.</p>
<p><a href="http://bit.ly/4Sr1R" target="_blank">http://bit.ly/4Sr1R</a></p>]]></description><pubDate>6/17/2009 11:02:15 AM</pubDate></item><item><title><![CDATA[Use Different Google Analytics tracker based on domain]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p>Sometimes we use a different domain based on the language of the site, but technically the site code is the same on both domains. We may want to track this domain differently based on the domain they are hitting (English vs. French Domain for example). Since Google analytics is simply a javascript call to a web service we can manipulate the default javascript to sent the appropriate tracking code based on the currently accessed domain.</p>
<p>Here was my code that was used on CCA Fit in 15 which has an English domain and a French domain:</p>
<p>&lt;script type="text/javascript"&gt;<br />
        var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");<br />
        document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));<br />
    &lt;/script&gt;<br />
    &lt;script type="text/javascript"&gt;<br />
        //English as default<br />
        var trackerValue = "UA-9221845-1";<br />
        var url = location.href.toLowerCase();<br />
        if (url.match("faitesle15.ca")) {<br />
            trackerValue = "UA-9221845-2";<br />
        }<br />
        try <br />
        {<br />
            var pageTracker = _gat._getTracker(trackerValue);<br />
            pageTracker._trackPageview();<br />
        } <br />
        catch (err) { }<br />
    &lt;/script&gt;</p>
<p> </p>
<p>As you can see I simply change the trackerValue based on the domain they are currently coming from.</p>]]></description><pubDate>6/17/2009 11:02:16 AM</pubDate></item><item><title><![CDATA[Google Maps Icon / Marker Customization]]></title><author><![CDATA[Kyle Tinning]]></author><description><![CDATA[<p>In looking into what is involved with customizing google maps icons - the markers that appear as points on the map - there are a bunch of properties that need to be tweaked to ensure that they react appropriately to the user's actions.  Trying to perfect these properties could entail a lengthy session of guess, check, refine.</p>
<p>Luckily someone went to the trouble of creating a mini app that calculates everything for you. You just need to upload your new icon image and it outputs code and a zip file.</p>
<a href="http://www.powerhut.co.uk/googlemaps/custom_markers.php" target="_blank">
<p>http://www.powerhut.co.uk/googlemaps/custom_markers.php</p>
</a>]]></description><pubDate>6/10/2009 1:53:31 PM</pubDate></item><item><title><![CDATA[Overlaying a Transparent Image over the Desktop to Verify Website Designs]]></title><author><![CDATA[Osvel Legon]]></author><description><![CDATA[<p>Here's a great way to verify that your HTML code is an exact, pixel perfect match to the designs provided.</p>
<p>This small utility <a href="http://chime.tv/products/glass2k.shtml" target="_blank">Glass2k</a> makes a desktop window transparent. Now you can open an image with your prefered image viewer (mine is <a href="http://www.irfanview.com/" target="_blank">IrfanView</a>), and make the viewer window transparent (I use 50% transparency), then move the viewer over you webpage in the browser and it's really easy to verify the webpage against the original design. Always verify that the image in your viewer is shown in the original size.</p>]]></description><pubDate>6/10/2009 1:53:32 PM</pubDate></item><item><title><![CDATA[Google Launches Innovative Translation Tool]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>The Google Translator Toolkit combines automated translation with 'crowdsourcing' so actual people can review and edit machine generated translations.</p>
<p>Wikimedia is excited about the possibilities for speeding up translation of its many thousands of pages.</p>
<p>We will look at how we can use this tool to help speed up translations of Agility sites into new languages.</p>
<p>More from TechCrunch:</p>
<p><a href="http://www.techcrunch.com/2009/06/10/google-translator-kit-automated-translation-meets-crowdsourcing/" target="_blank">http://www.techcrunch.com/2009/06/10/google-translator-kit-automated-translation-meets-crowdsourcing/</a></p>
<br />
<br />]]></description><pubDate>6/11/2009 4:36:06 PM</pubDate></item><item><title><![CDATA[IIS7 Search Engine Optimization Toolkit]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Microsoft has released a toolkit that will simplify basic SEO tasks like making it easier to build a site index and robots.txt file.</p>
<p>The features include:</p>
<ul>
    <li>Improve the volume and quality of traffic to your Web site from search engines </li>
    <li>Control how search engines access and display Web content </li>
    <li>Inform search engines about locations that are available for indexing </li>
    <li>Site Analysis Features </li>
    <li>Robots Exclusion Features </li>
    <li>Sitemap and Sitemap Index Features </li>
</ul>
<p>We will take a close look at this and see how we can use IIS7 and the SEO Toolkit to improve the search engine optimization of Agility CMS managed site.</p>
<p>For details:</p>
<a href="http://www.iis.net/extensions/SEOToolkit" target="_blank">
<p>http://www.iis.net/extensions/SEOToolkit</p>
</a>]]></description><pubDate>6/9/2009 10:50:57 AM</pubDate></item><item><title><![CDATA[Twitter a 'suspension bridge of pebbles' - TIME]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>I've recently joined Twitter and find it quite useful for staying on top of the latest tech news and for sparking ideas from my friends and colleagues.  Still haven't tried it?  See if TIME Magazine can convince you of its value.</p>
<p>Here is TIME's article:</p>
<p><a href="http://www.time.com/time/business/article/0,8599,1902604-1,00.html" target="_blank">http://www.time.com/time/business/article/0,8599,1902604-1,00.html</a></p>
<p>Here is an analysis of it by Mashable: <br />
<br />
<a href="http://mashable.com/2009/06/04/time-magazine-twitter/" target="_blank">http://mashable.com/2009/06/04/time-magazine-twitter/</a></p>]]></description><pubDate>6/5/2009 1:48:53 PM</pubDate></item><item><title><![CDATA[Amazon S3/CloudFront Information and Pricing for Clients]]></title><author><![CDATA[Jonathan Voigt]]></author><description><![CDATA[<div>
<p>Amazon S3 is a great way to store media files.  It can be slow though so if speed is needed it should be used with Amazon Cloudfront.</p>
<p>Think of Amazon S3 as a storage location.  Think of Amazon Cloudfront as a caching server in front of S3.  Actually, it is located throughout the world as close to the end clients as possible.  When a file is requested, Cloudfront return is quickly from cache.  If it doesn't have it, it will get it from S3, cache it and then send it out.  All subsequent requests come from cache.  </p>
<p><b>Pricing:</b></p>
<p>Pricing for S3 can be found here: <a href="http://aws.amazon.com/s3/#pricing" target="_blank">http://aws.amazon.com/s3/#pricing</a></p>
<p>Pricing for Cloudfront can be found here: <a href="http://aws.amazon.com/cloudfront/#pricing" target="_blank">http://aws.amazon.com/cloudfront/#pricing</a></p>
<p>Calculating the pricing for clients can be tricky.  You have to understand how much content is transferred both in and out as well as how much storage is needed per month.  To add on top of this you have to consider Cloudfront as well.</p>
<p>If you really break down the costs usually everything is insignificant except for the data transfer out.  For example here are some sample charges:</p>
<p><b>Amazon S3: </b>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td colspan="4" align="left"></td>
        </tr>
        <tr id="AmazonS3blockitem0">
            <td style="width: 14px;"> </td>
            <td style="width: 10%;"> </td>
            <td>$0.150 per GB - first 50 TB / month of storage used </td>
            <td>0.252 GB-Mo </td>
            <td>0.04 </td>
        </tr>
        <tr id="AmazonS3blockitem1">
            <td style="width: 14px;"> </td>
            <td style="width: 10%;"> </td>
            <td>$0.030 per GB - all data transfer in </td>
            <td>0.027 GB </td>
            <td>0.01 </td>
        </tr>
        <tr id="AmazonS3blockitem2">
            <td style="width: 14px;"> </td>
            <td style="width: 10%;"> </td>
            <td>$0.170 per GB - first 10 TB / month data transfer out </td>
            <td>156.910 GB </td>
            <td>26.67 </td>
        </tr>
        <tr id="AmazonS3blockitem3">
            <td style="width: 14px;"> </td>
            <td style="width: 10%;"> </td>
            <td>$0.01 per 1,000 PUT, COPY, POST, or LIST requests </td>
            <td>309 Requests </td>
            <td>0.01 </td>
        </tr>
        <tr id="AmazonS3blockitem4">
            <td style="width: 14px;"> </td>
            <td style="width: 10%;"> </td>
            <td>$0.01 per 10,000 GET and all other requests </td>
            <td>100269 Requests </td>
            <td>0.10 </td>
        </tr>
        <tr id="AmazonS3blockitem4">
            <td style="width: 14px;"> </td>
            <td style="width: 10%;"> </td>
            <td></td>
            <td></td>
            <td><b>26.83</b> </td>
        </tr>
    </tbody>
</table>
</p>
<p><b>Amazon Cloudfront:</b></p>
<p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td colspan="4" align="left"></td>
        </tr>
        <tr id="AmazonCloudFrontblockitem0">
            <td colspan="5">United States</td>
        </tr>
        <tr id="AmazonCloudFrontblockitem1">
            <td style="width: 14px;"> </td>
            <td style="width: 10%;"> </td>
            <td>$0.170 per GB - first 10 TB / month data transfer out </td>
            <td>257.205 GB </td>
            <td>43.72 </td>
        </tr>
        <tr id="AmazonCloudFrontblockitem2">
            <td style="width: 14px;"> </td>
            <td style="width: 10%;"> </td>
            <td>$0.010 per 10,000 GET Requests </td>
            <td>186501 Requests </td>
            <td>0.19 </td>
        </tr>
        <tr id="AmazonCloudFrontblockitem3">
            <td> </td>
            <td> </td>
            <td> </td>
            <td> </td>
            <td><b>43.91</b> </td>
        </tr>
        <tr id="AmazonCloudFrontblockitem4">
            <td colspan="5">European Union</td>
        </tr>
        <tr id="AmazonCloudFrontblockitem5">
            <td style="width: 14px;"> </td>
            <td style="width: 10%;"> </td>
            <td>$0.170 per GB - first 10 TB / month data transfer out </td>
            <td>172.929 GB </td>
            <td>29.40 </td>
        </tr>
        <tr id="AmazonCloudFrontblockitem6">
            <td style="width: 14px;"> </td>
            <td style="width: 10%;"> </td>
            <td>$0.012 per 10,000 GET Requests </td>
            <td>121521 Requests </td>
            <td>0.15 </td>
        </tr>
        <tr id="AmazonCloudFrontblockitem7">
            <td> </td>
            <td> </td>
            <td> </td>
            <td> </td>
            <td><b>29.55</b> </td>
        </tr>
        <tr id="AmazonCloudFrontblockitem8">
            <td colspan="5">Japan</td>
        </tr>
        <tr id="AmazonCloudFrontblockitem9">
            <td style="width: 14px;"> </td>
            <td style="width: 10%;"> </td>
            <td>$0.221 per GB - first 10 TB / month data transfer out </td>
            <td>15.389 GB </td>
            <td>3.40 </td>
        </tr>
        <tr id="AmazonCloudFrontblockitem10">
            <td style="width: 14px;"> </td>
            <td style="width: 10%;"> </td>
            <td>$0.013 per 10,000 GET Requests </td>
            <td>10326 Requests </td>
            <td>0.01 </td>
        </tr>
        <tr id="AmazonCloudFrontblockitem11">
            <td> </td>
            <td> </td>
            <td> </td>
            <td> </td>
            <td><b>3.41</b> </td>
        </tr>
        <tr id="AmazonCloudFrontblockitem12">
            <td colspan="5">Hong Kong</td>
        </tr>
        <tr id="AmazonCloudFrontblockitem13">
            <td style="width: 14px;"> </td>
            <td style="width: 10%;"> </td>
            <td>$0.210 per GB - first 10 TB / month data transfer out </td>
            <td>33.624 GB </td>
            <td>7.06 </td>
        </tr>
        <tr id="AmazonCloudFrontblockitem14">
            <td style="width: 14px;"> </td>
            <td style="width: 10%;"> </td>
            <td>$0.012 per 10,000 GET Requests </td>
            <td>31944 Requests </td>
            <td>0.04 </td>
        </tr>
        <tr id="AmazonCloudFrontblockitem15">
            <td><b> </b></td>
            <td><b> </b></td>
            <td><b> </b></td>
            <td><b> </b></td>
            <td><b>7.10</b> </td>
        </tr>
        <tr>
            <td style="width: 14px;"> </td>
            <td> </td>
            <td> </td>
            <td>&lt;nobr&gt; &lt;/nobr&gt;</td>
            <td><b>83.97</b> </td>
        </tr>
    </tbody>
</table>
</p>
<p>As you can see from both S3 and Cloudfront, the only real cost is the data transfer out.  That means you can estimate using just this number for clients and be 99% accurate.  Also, consider when you combine S3 and Cloudfront.  For example, if you site does 100GB/month of data out.  You will have 100GB/month of data from Cloudfront but S3 will only charge for the first request, so if you have 100GB/month with 1000 requests then S3 will send it to Cloudfront once then it will be cached so depending on how spread out around the world the site is you will pay more for each transfer from S3 to areas around the world.  For the example above about 25% of the requests come from S3, this is because this example shows a site that is very widely spread around the world.  This means you would be charged for 100GB/month on Cloudfront and 25GB/month on S3.</p>
<p>We should always help clients understand the costs but be sure they setup their own accounts and understand how the pricing works.</p>
<p>Also, we should ALWAYS setup CNAMES (Eg. media.edentity.ca) and point this to Cloudfront or S3.  The reason for this is that you can always point a CNAME somewhere else in case they want to move their content.</p>
<p>Happy Amazon S3ing and Cloudfronting...</p>
</div>]]></description><pubDate>6/4/2009 11:22:47 AM</pubDate></item><item><title><![CDATA[Visual Studio Team System 2008 Database Edition GDR R2]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>This is the update to the VS 2008 Database Edition and adds support for SQL Server 2008 and no longer requires a local database server to operate.  It was released back in April, but I just realized I needed it when I installed SQL Server 2008 on my local development machine, and found out that the base install does NOT support SQL Server 2008.</p>
<p>Now it does!</p>
<p><a href="http://weblogs.asp.net/blogs/joelvarty/2008projecttypes_71C184F8.png"><img width="595" height="166" title="2008-project-types" style="border: 0px solid;   " alt="2008-project-types" src="http://weblogs.asp.net/blogs/joelvarty/2008projecttypes_thumb_513A4546.png" /></a> </p>
<p><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=bb3ad767-5f69-4db9-b1c9-8f55759846ed&amp;displaylang=en#filelist" target="_blank">Here is the link</a> to the download.</p>
<p>This is an update to the VS Database Edition, which is now included if you have Team Developer Edition (or possibly Professional Edition, not sure on that), so be sure to install that first.</p>
<p>I can’t believe ANYONE does database work these days without using database edition.</p>
<p>It has become a part of every project I start in Visual Studio.</p>]]></description><pubDate>6/2/2009 3:21:35 PM</pubDate></item><item><title><![CDATA[Minify your Javascripts!]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>This is a process that is becoming more and more important as we offload a ton of our page processing to .js files as opposed to HTML files processed by the server.  This is because we are doing more client templating and logical processing on the client and not on the server.</p>
<p><a href="http://encosia.com/2009/05/20/automatically-minify-and-combine-javascript-in-visual-studio/" target="_blank">Here is a great blog post</a> that goes through automating the minification process through Visual Studio build events.</p>
<p>There are other ways – I also think an HTTP handler that does this is nice if you want to have a more easily updatable source tree where you don’t need to keep track of a debug and live version of a file on top of your other versioning.</p>
<p><a href="http://robertpohl.blogspot.com/2009/03/cached-javascript-minification-on-fly.html" target="_blank">Here is a link</a> to an http handler which allows you to minify js files inline.  </p>
<p>via [<a href="http://encosia.com/" target="_blank">encosia</a>] via [<a href="http://weblogs.asp.net/scottgu/archive/2009/05/30/may-30th-links-asp-net-ajax-asp-net-mvc-visual-studio.aspx" target="_blank">scottgu</a>]</p>
<p>and via [<a href="http://robertpohl.blogspot.com/" target="_blank">Robert Pohl</a>]</p>
<br />
<br />]]></description><pubDate>6/2/2009 3:20:23 PM</pubDate></item><item><title><![CDATA[Google Wave]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p>From the creators of Google Maps comes Google Wave... integration with this service is going to take us in a new direction with the web.</p>
<p>Enjoy the Keynote speach.<br />
<a href="http://www.youtube.com/watch_popup?v=v_UyVmITiYQ" target="_blank">http://www.youtube.com/watch_popup?v=v_UyVmITiYQ</a></p>]]></description><pubDate>6/2/2009 3:21:55 PM</pubDate></item><item><title><![CDATA[Enhanced Edentity Blog Now Live]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>We have posted an update to our site that includes a new and improved blog. </p>
<p>The update was mainly around organizing the many posts and improving SEO elements like page titles and URLs.  We have also added the 'ShareThis' functionality and comments.</p>
<p>Check it out!</p>
<p><a href="http://www.edentity.ca/blog" title="Edentity Blog" target="_blank">www.edentity.ca/blog</a></p>]]></description><pubDate>5/28/2009 5:58:35 PM</pubDate></item><item><title><![CDATA[Amazon Web Services Import/Export – fill your S3 Buckets Without Killing Your Bandwidth]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<br />
<br />
<p><a href="http://weblogs.asp.net/blogs/joelvarty/awsimportexport_11E6FBDE.png"><img width="480" height="79" title="awsimportexport" style="border: 0px solid;   " alt="awsimportexport" src="http://weblogs.asp.net/blogs/joelvarty/awsimportexport_thumb_158516BB.png" /></a> </p>
<p>One of the things about online file storage is getting the first massive data dump onto the server.  If you have a lot of data to store, it would be more prudent to simply take an external drive to the physical data center and do a transfer that way.</p>
<p>That’s what Amazon is proposing as high level service with their newly announced Import/Export product.</p>
<p>The premise here is that you can fill up an portable storage device and ship it to Amazon for them to copy to your S3 bucket(s).  The authenication is handled by a separate email that explains what is on the device and where to put, as well as the credentials for the bucket itself.</p>
<p>It sounds like a great idea – I just wish I could get into the beta. :)</p>
<p><img width="622" height="121" title="awsimportexportclose" style="border: 0px solid;   " alt="awsimportexportclose" src="http://weblogs.asp.net/blogs/joelvarty/awsimportexportclose_5C0206C3.png" /> </p>
<p>more later – joel.</p>
<img width="1" height="1" alt="" src="http://weblogs.asp.net/aggbug.aspx?PostID=7094137" />]]></description><pubDate>5/22/2009 9:30:27 AM</pubDate></item><item><title><![CDATA[Adding Guides to VS2008]]></title><author><![CDATA[David Luu]]></author><description><![CDATA[<p>I generally like to keep my code statements all in one line (unless it gets extremely long such as &gt; 150 characters) but I can see how that can be annoying to other developers who read my code.  ReSharper can automatically break up your code to improve readability but it's not always ideal.  I recently ran into a "hack" that allows you to add column guides in Visual Studio which can be quite helpful in maintaining readability of your code for yourself and among team members.  It's simple - only requires adding a key to Windows Registry.</p>
<ol>
    <li>Go to HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\Text Editor </li>
    <li>Add a string value "Guides" </li>
    <li>Set the value to RGB(176,176,176) 4,90 where RGB is the colour of your guide and 4 and 90 are the column positions of the guides.  You can set as many positions as you want, but I don't think you can have multiple coloured guides.  Below is a screenshot. </li>
</ol>
<p style="text-align: center;"><a href="http://knowledge.edentity.local/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/davidluu/vsnet_2D00_guides.gif"><img alt="" style="border: 0px solid;   " src="http://knowledge.edentity.local/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/davidluu/vsnet_2D00_guides.gif" /></a></p>]]></description><pubDate>5/21/2009 3:59:07 PM</pubDate></item><item><title><![CDATA[SQL Server - Need to test? Why not add some Stress.]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p>A Simple tool to stress test your sql queries to ensure they are running at acceptable speeds under load.</p>
<p><a href="http://www.datamanipulation.net/SQLQueryStress/" target="_blank">http://www.datamanipulation.net/SQLQueryStress/</a></p>]]></description><pubDate>5/21/2009 4:42:07 PM</pubDate></item><item><title><![CDATA[Retrieving Top Visited Pages Using Google Analytics API]]></title><author><![CDATA[David Luu]]></author><description><![CDATA[<p>To add more practicality to my previous post, here's a working example of how to retrieve data using Google Analytics API and C#.  In this case, we will be retrieving the top 10 visited pages for a website.  This is a very simplistic example with much detail (including error handling) omitted.</p>
<h3>Prerequisites:</h3>
<ul>
    <li>Need a Google Accounts account and signed up for Analytics </li>
    <li>Active Analytics account so that our resultset won't come back empty </li>
</ul>
<h3>Retrieval Basics:</h3>
<ol>
    <li>Authentication - In order to retrieve data, the user must be authenticated.  There are a few ways to authenticate but in this example we will be using Client Login (i.e. submitting your username and password with the request). </li>
    <li>Account Query - Under any Analytics account there could be many accounts, and within that, many profiles.  Now that you are signed in, you need to decide which profile you will be conducting queries on. </li>
    <li>Profile Query - Get your data. </li>
</ol>
<h3>Example:</h3>
<p><b>1. Authentication - submitting credentials and returns an authentication token</b></p>
<p><code>var token = "";<br />
var authData = string.Format("email={0}&amp;passwd={1}&amp;accountType=GOOGLE&amp;service=analytics&amp;source=edentity-test-1", YOUR_USERNAME, YOUR_PWD);<br />
<br />
var encoding = new ASCIIEncoding();<br />
byte[] data = encoding.GetBytes[authData];</code></p>
<p><code></code><code>var httpRequest = (HttpWebRequest)WebRequest.Create("https://www.google.com/accounts/ClientLogin");<br />
httpRequest.Method = "POST";<br />
httpRequest.ContentType = "application/x-www-form-urlencoded";<br />
httpRequest.ContentLength = data.Length;<br />
<br />
using (var requestStream = httpRequest.GetRequestStream())<br />
{<br />
</code><code>    requestStream.Write(data, 0, data.Length);<br />
    requestStream.Close();<br />
}<br />
<br />
var httpResponse = (HttpWebResponse)httpRequest.GetResponse();<br />
<br />
using (var responseStream = httpResponse.GetResponseStream())<br />
{<br />
    var response = (new StreamReader(responseStream.GetResponseStream())).ReadToEnd();<br />
    token = response.Split(new string[] { "Auth=" })[1];</code><code><br />
}</code><code><br />
</code><code><br />
return token;</code> </p>
<p><b>2. Get Account Profiles - if you already know the Profile ID you can skip this step</b></p>
<p><code>var response = "";<br />
var httpRequest = (HttpWebRequest)WebRequest.Create<b>(</b>"https://www.google.com/analytics/feeds/accounts/default"<b>);<br />
</b><br />
// All requests require authentication, you have to set the Authorization header for each request with the token provided<br />
httpRequest.Headers.Add(string.Format("Authorization: GoogleLogin auth={0}", token));<br />
<br />
var httpResponse = (HttpWebResponse)httpRequest.GetResponse();<br />
</code><code><br />
using (var stream = httpResponse.GetResponseStream())<br />
{<br />
    response = (new StreamReader(stream)).ReadToEnd();<br />
}<br />
<br />
// ...<br />
// This XML response contains your profile(s) information.  You can parse the information out, but<br />
// if you already know the ID of the profile you'll be working with then you can skip this step.</code></p>
<p><b>3. Build Your Query and Get The Results</b></p>
<p><code>// Data for the month of May<br />
var top10Query = string.Format("https://www.google.com/analytics/feeds/data?ids=ga:{0}&amp;dimensions=ga:pageTitle,ga:pagePath&amp;metrics=ga:pageviews&amp;sort=-ga:pageviews&amp;start-date=2009-05-01&amp;end-date=2009-05-31&amp;max-results=10", profileID);<br />
<br />
// dimensions - primary data keys from which Analytics reports are constructed (e.g. ga:pageTitle, ga:city)<br />
// metrics - aggregated statistics for user activity in a profile (e.g. ga:clicks, ga:pageviews)<br />
// sort - "-" means descending<br />
// start-date, end-date - required<br />
<br />
// ...</code></p>
<p>Plug the query into the prior section (step #2) to retrieve the response.</p>
<p><b>4. Parse the XML Response and Make It Look Pretty</b></p>
<p><code>var xmlResponse = new XMLDocument();<br />
xmlResponse.LoadXml(response);<br />
<br />
var entries = xmlResponse.GetElementsByTagName("entry");<br />
<br />
foreach (XmlNode entry in entries)<br />
{<br />
    var pageTitle = entry.ChildNodes[4].Attributes["value"].Value;<br />
    var pagePath = entry.ChildNodes[5].Attributes["value"].Value;<br />
    var pageViews = entry.ChildNodes[6 ].Attributes["value"].Value;<br />
<br />
    Response.Write(string.Format("&lt;div&gt;&lt;a href='{0}{1}'&gt;{2}&lt;/a&gt; - {3}&lt;/div&gt;", siteBaseUrl, pagePath, pageTitle, pageViews));<br />
}</code></p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Remember to Check-in When You re-format Your Machine!!!]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>Besides losing any code you may have written that you’ll never get back, those pending changes or locks will be stored on the server until someone does an “undo” or a workspace delete.</p>
<p>Here is the undo command:</p>
<p><b>tf undo /workspace:TheirWorkspace;DOMAIN\TheirUserAccount $/path/to/file</b></p>
<p>Here is the delete workspace command:</p>
<p><b>tf workspace /delete TheirWorkspace;DOMAIN\TheirUserAccount /s:http://TFSSERVER:8080</b></p>
<p>I nabbed these commands from <a href="http://blogs.msdn.com/rimuri/archive/2006/03/06/544686.aspx" target="_blank">this blog post</a> on Richard Murillo’s blog.</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[The Browser no Install Option ... Web Dev's Rejoice!]]></title><author><![CDATA[Andre Small]]></author><description><![CDATA[<p>This is really cool!!!</p>
<p>Over at Xencode, the makers of an application virtualization product called "Virtual Application Studio" has a beta out for Internet Explorer 8 running in a "virtualized application mode". Go to: <a href="http://www.xenocode.com/Start/?a=IE8" target="_blank">http://www.xenocode.com/Start/?a=IE8</a> and click on the <i>Install</i> link in the top right corner of the image. This will install, what they call a Sandbox Manager. It is a onetime installation and it is not browser specific. </p>
<p>Once installed, you may need to reload the page. Click on the green power button. The application virtualized package is streamed to your computer and starts to run and ... Boom! You have an application virtualized version of the IE 8. Since the application is not installed on your machine, will need to visit the site again to use the IE 8 image. Also, I am unsure about your privacy when using the streamed browser instance - so don't ask!</p>
<p>But wait it gets, better. Your new IE 8 instance will have access to your local resources on your PC. The history and cookies are all available, even the Adobe Flash and Reader plugins work in embedded mode. You will run into some issues (IE 8 warns) that some plugins are not compatible with it, like the IE Developer Toolbar. But that is ok, because the new developer tools in IE 8 work.</p>
<p>After some quick testing, the virtual IE 8 instance works really well. Performance is good. </p>
<p>They also have virtual instances for Firefox 2 &amp; 3, Chrome, Opera, Safari and IE 7 &amp; 6. Check out: <a href="http://www.xenocode.com/Browsers/" target="_blank">http://www.xenocode.com/Browsers/</a></p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Amazon CloudFront Adds Access Logging Capability]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p><img width="164" height="60" alt="" style="border: 0px solid;   " src="http://media.amazonwebservices.com/logo_aws.gif" /></p>
<p>Amazon CloudFront announced today that they have added support for access logs.  This means that any of the objects being access from your S3 Account via Cloudfront can be tracked and reported on without any additional work.</p>
<p>&nbsp;</p>
<p>This is great news for Agility Customers - since we added support for S3 and CloudFront in the March features update.  </p>
<p>This is a great example of how hosted software can continually evolve - giving customers a better and more integrated experience without having to install or change anything in their systems - it just works.</p>
<p>From the announcment:</p>
<p>&nbsp;</p>
<p>Dear AWS Customer,</p>
<p>We're excited to let you know that we've added a new feature to Amazon CloudFront, AWS's easy-to-use, low-cost content delivery service: access logs. Access logs are activity records that show you details about every request delivered through Amazon CloudFront. We've heard that many customers wanted more information about how, when, where and to whom their content is being delivered, so we're happy to make this feature available starting today. </p>
<p>Access logs contain a comprehensive set of information about requests for your content, including the object requested, the date and time of the request, the edge location serving the request, the client IP address, the referrer and the user agent. It's easy to get started using access logs: you just specify the name of the Amazon S3 bucket you want to use to store the logs when you configure your Amazon CloudFront distribution. There are no fees for using the access logs, beyond normal Amazon S3 charges to write, store and retrieve the logs. </p>
<p>The Amazon Elastic MapReduce team has also built a sample application, <a href="http://www.amazon.com/gp/r.html?R=E4O0WV6UAJZW&amp;C=3VRCQCX350JQC&amp;H=FTDGNAVWI3QWDUNTIA9TRXMCIHCA&amp;T=C&amp;U=http%3A%2F%2Fdeveloper.amazonwebservices.com%2Fconnect%2Fentry.jspa%3FexternalID%3D2440">CloudFront LogAnalyzer</a>, that will analyze your Amazon CloudFront access logs. This tool lets you use the power of Amazon Elastic MapReduce to quickly turn Access Logs into the answers to the most commonly asked questions about your business. Additionally, several partners have also built solutions that help you analyze these access logs; you can find more information about these in the <a href="http://www.amazon.com/gp/r.html?R=E4O0WV6UAJZW&amp;C=3VRCQCX350JQC&amp;H=I0ZQPL0XBRPW92BPUOANQGNM0FSA&amp;T=C&amp;U=http%3A%2F%2Fdeveloper.amazonwebservices.com%2Fconnect%2Fkbcategory.jspa%3FcategoryID%3D217">AWS Solution Catalog</a>.</p>
<p>You can read more about access logs in the <a href="http://www.amazon.com/gp/r.html?R=E4O0WV6UAJZW&amp;C=3VRCQCX350JQC&amp;H=JB7Y6T38JRRSM5ANYQTRAEDPSLIA&amp;T=C&amp;U=http%3A%2F%2Fdocs.amazonwebservices.com%2FAmazonCloudFront%2Flatest%2FDeveloperGuide%2F">Amazon CloudFront Developer's Guide</a>.</p>
<p>Sincerely,</p>
<p>The Amazon CloudFront Team</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Refresh of Internet Explorer Application Compatibility VPC Image]]></title><author><![CDATA[Andre Small]]></author><description><![CDATA[<p>Microsoft has updated their virtual PC images for IE compatibility test (finally!) The last set of images expired on April 30, 2009. The new, released on May 5th will expire on August 31, 2009 for the Win XP versions and 120 days after the first run for the Vista versions.</p>
<p>My only wish would that they, build an application virtualized version using <a href="http://www.microsoft.com/systemcenter/appv/default.mspx" target="_blank">http://www.microsoft.com/systemcenter/appv/default.mspx</a><a href="http://www.microsoft.com/systemcenter/appv/dynamic.mspx"></a> or <a href="http://www.xencode.com/" target="_blank">http://www.xencode.com/</a>. That would be very cool and more PC resource efficient!</p>
<p><a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=21EABB90-958F-4B64-B5F1-73D0A413C8EF&amp;displaylang=en" target="_blank">http://www.microsoft.com/downloads/details.aspx?FamilyId=21EABB90-958F-4B64-B5F1-73D0A413C8EF&amp;displaylang=en</a></p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Using Calendar Control for Date Filters in Analysis Services Reports]]></title><author><![CDATA[Henry Ji]]></author><description><![CDATA[<p>The Time Dimension filters by default appear as dropdown list boxes when designing Analysis Services reports within Visual Studio. However, users will expect Calendar controls for date filters in the reports. Here is the solution for using calendar control for date report filters.</p>
<ol>
    <li>Under the Layout tab in Report Designer, go to Report Parameters and change the Data Type of the date filters to DateTime and changed Available values to Non-queried. </li>
    <li>Under the Data tab in Report Designer, go to Parameters of Dataset and change the Value text of the date parameters to use expressions like
    <p><code>="[Time].[Date].&amp;[" + Format(CDate(Parameters!FromTimeDate.Value, "yyyy-MM-ddT00:00:00") + "]"</code></p>
    </li>
    <li>When previewing the report, you will find Calendar controls appearing for Date filters and working fine now. </li>
</ol>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[TFS Work Item Changed Notification: Customizing the URL for Team System Web Access]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>This has been explained a bunch of times – most notably <a href="http://msmvps.com/blogs/vstsblog/archive/2007/08/31/changing-tfs-email-notifications-to-link-to-team-system-web-access.aspx" target="_blank">here</a> – I just thought I would capture here what I did to update our TFS instance to solve this issue.</p>
<p>Find this file: </p>
<p>[drive]:/Program Files\Microsoft Visual Studio 2008 Team Foundation Server\Web Services\Services\v1.0\Transforms\WorkItemChangedEvent.xsl</p>
<p>Change this:</p>
<pre>&lt;xsl:value-of select="DisplayUrl" /&gt;</pre>
<p>To this:</p>
<pre>&lt;xsl:value-of select="concat('http://[my_tfs_url]/wi.aspx?id=',substring-after(DisplayUrl,'artifactMoniker='))" /&gt;</pre>
<p>That’s it – the only thing you may have to do is reset the web application that this is running from – which you can do by opening and saving the web.config in this folder: [drive]:\Program Files\Microsoft Visual Studio 2008 Team Foundation Server\Web Services\Services.</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Load jQuery Dynamically]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>Sometimes you have to load jQuery, but you don’t know if it has already been referenced somewhere else in the website.  </p>
<p>This tends to happen if you have a custom web control, delivered in an assembly, that relies on jQuery.</p>
<p>This code has been ripped out of my application, and may have a typo or three, but it gives you the general idea.</p>
<pre>var jQueryScriptOutputted = false; function initJQuery() { //if the jQuery object isn't available if (typeof(jQuery) == 'undefined') { if (! jQueryScriptOutputted) { //only output the script once.. jQueryScriptOutputted = true; //output the script (load it from google api) document.write("&lt;scr" + "ipt type=\"text/javascript\" src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js\"&gt;&lt;/scr" + "ipt&gt;"); } setTimeout("initJQuery()", 50); } else { $(function() { //do anything that needs to be done on document.ready }); } }</pre>
<pre>initJQuery();</pre>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Agility Shared Content Preview Settings]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Just a reminder to the Agility developers and power users about how to set the Preview settings on a shared content list.  If the settings are not correct, the list and items in the list will not preview correctly.</p>
<p>To configure the preview settings:</p>
<ol>
    <li>Open a Shared Content list </li>
    <li>Click on the 'Advanced' tab </li>
    <li>Enter the URL for the List Preview page starting from the site root (e.g. ~/pressreleases.aspx) </li>
    <li>Enter the URL for the Item Preview page starting from the site root (e.g. ~/pressreleasedetails.aspx)
    <ul>
        <li>Note that these URLs can be the same page </li>
    </ul>
    </li>
    <li>Enter the value for the Item Preview Query String Parameter (e.g. PressReleaseID) </li>
</ol>
<p>You can test that these settings are correct as follows:</p>
<ol>
    <li>Click on the Shared Content list </li>
    <li>Click Preview -&gt; the preview window should show the content in a list </li>
    <li>Close the Preview window </li>
    <li>Open an individual item from the list </li>
    <li>Click Preview -&gt; the preview window should show the specific item that you were editing </li>
</ol>
<p>Email <a href="mailto:support@agilitycms.com" target="_blank">support@agilitycms.com</a> for more info!</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Can a Website Keep you Fit?]]></title><author><![CDATA[Steve Pontisso]]></author><description><![CDATA[Well, not exactly, but it can give you tools to help you start a fitness habit!  That's the goal of our latest Agility managed website <a href="http://www.fitin15.ca/" target="_blank">http://www.fitin15.ca/</a> (or <a href="http://www.faitesle15.ca/" target="_blank">http://www.faitesle15.ca/</a> in French). <br />
<br />
Developed by the Canadian Chiropractic Association (CCA), Fit-in 15 has a comprehensive set of exercise plans, motivational ideas, reminder communications, and a personal log feature all designed to help you  fit in 15 minutes of physical activity a day to get a fitness habit started.  <br />
<br />
During the development of this site the Edentity staff became very familiar with all the content and I have to say it's very motivational indeed!  It's not uncommon to find us now doing Doorway Stretches and Free Squats right here in the office from time to time!  <br />
<br />
Being fit can be very addictive, and this site makes it easy to get started.  Speaking of easy, the Agility modules we built for this site give the CCA the flexibility to keep the content "fresh" and relevant while keeping the same layout and effects consistent as it grows.  After all, keeping a website "fit" is essential to its overall well-being too!]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Google Analytics API Now Available]]></title><author><![CDATA[David Luu]]></author><description><![CDATA[The much anticipated announcement of Google's launch of their Analytics API has become reality.  Prior to the API release, people who required their analytics data to be displayed elsewhere had to resort to screen scraping hacks, emailing reports to yourself, using the Export to Excel functionality, which aren't even close to ideal.  Now there's a clean and clear route.
<p>This provides an opportunity for companies to easily integrate their data or client data into existing applications or perhaps even build a new business around it.  Heck, there's already a mobile version (<a href="http://www.analyticsmarket.com/mobileapps/mobile-ga/android" target="_blank">here</a>).  I thought this was just released?!</p>
<p>There are certain parts of Google Analytics data that I've found confusing.  Although they are presented in beautiful pie charts and line graphs, I need a dumb-downed version of some of these measurements.  Some sort of interpretation or just show me what I need to know.  There's definitely a market for this!</p>
<p>Anyway, here's the announcement on their blog:<br />
<a href="http://analytics.blogspot.com/2009/04/attention-developers-google-analytics.html" target="_blank">http://analytics.blogspot.com/2009/04/attention-developers-google-analytics.html</a></p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Using the Generic Dictionary with JSON Web Services…]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>If you want to pass a name/value collection of untyped data to a webservice with JSON, do it like this guys, Joost van Schaik, says:</p>
<p><a href="http://dotnetbyexample.blogspot.com/2008/03/json-services-revisited-using.html" title="http://dotnetbyexample.blogspot.com/2008/03/json-services-revisited-using.html" target="_blank">http://dotnetbyexample.blogspot.com/2008/03/json-services-revisited-using.html</a></p>
<p>Here’s the meat of it really – how do you initialize the Dictionary object as a parameter?</p>
<p>Check it out – this is from the blog entry, but basically you just load the object up with values using strings as indexes, and you’re rocking.</p>
<pre>&lt;script type="text/javascript"&gt; function LoadDict() { var dict = new Object(); dict["test1"] = "Joost"; dict["test2"] = 21; dict["test3"] = true; dict["test4"] = 9999999999; dict["test5"] = new Date(2008,09,12,13,14,00); DictService.DictMethod( dict, ProcessResult ); } function ProcessResult( WebServiceResult ) { document.write( WebServiceResult ); } &lt;/script&gt;</pre>
<p>The data types are interpretted by .net on the server side, and usually make sense (21 becomes an int, the Date becomes a DateTime etc).</p>
<p>More later - Joel</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Detect a Security Exception When Using FormsAuthentication]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>If you are using the web.config to determine security for aspx pages, you may have noticed that you don’t get the chance to determine whether a security exception has been thrown.  The user will simply be return to the login page with a ReturnUrl query string pointing back to the url they were trying to access.</p>
<p>If you want to show the user a different screen (like an Access Denied screen or something like that), you need to add an HttpModule to the application and add a handler to the EndRequest event.  In there, you can check the Request has been authenticated and if the Response.RedirectLocation points back the login page with a ReturnUrl.</p>
<p>Here is some code for the EndRequest event that should help you out:</p>
<pre>void context_EndRequest(object sender, EventArgs e) { HttpContext Context = HttpContext.Current; HttpRequest Request = Context.Request; HttpResponse Response = Context.Response; if (Request.Url.AbsolutePath.EndsWith(".aspx", StringComparison.CurrentCultureIgnoreCase)) { if (Request.IsAuthenticated &amp;&amp; ! string.IsNullOrEmpty(Response.RedirectLocation) &amp;&amp; Response.RedirectLocation.IndexOf("login.aspx?ReturnUrl=", StringComparison.CurrentCultureIgnoreCase) != -1) { //they are logged in and getting redirected to the login page - this means that they don't have access to something Response.RedirectLocation = Response.RedirectLocation.ToLowerInvariant().Replace("login.aspx", "Errors/AccessDenied.aspx"); } } }</pre>
<p>Hope that helps!</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Easy Access for your Amazon S3 Data]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Now that Agility CMS supports Amazon S3, we will start storing more and more data on this cloud storage environment.&nbsp; Here are some useful tools to help access your S3 data.&nbsp; You can use any of these tools&nbsp;alone or with your your Agility account.</p>
<p>s3fox is a tool that plugs into FireFox.&nbsp; It allows you to manage your files on S3 using an FTP like client:</p>
<p><a href="https://addons.mozilla.org/en-US/firefox/addon/3247" target="_blank">https://addons.mozilla.org/en-US/firefox/addon/3247</a></p>
<p>CloudBerry is a similar service that doesn't require FireFox:</p>
<p><a href="http://cloudberrylab.com/?page=cloudberry-explorer-amazon-s3" target="_blank">http://cloudberrylab.com/?page=cloudberry-explorer-amazon-s3</a></p>
<p>If you feel like paying for this capability, you could try JungleDisk which also works with Rackspace:</p>
<p><a href="http://www.jungledisk.com/" target="_blank">http://www.jungledisk.com/</a></p>
<p>We'll keep you posted as more of these handy tools surface.</p>]]></description><pubDate>5/19/2009 3:18:01 PM</pubDate></item><item><title><![CDATA[Team System Quick Tip: Use HTML in the History Field for Work Items]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>I have just been editing the project templates to enable HTML in the description field.  As it turns out, the description field is locked down as plain text.</p>
<p>This history field <i>is</i> HTML though, and if you want to add formatting to it, just enable the formatting toolbar in Visual Studio.</p>
<p>You can this by right clicking anywhere in the toolbar area and selecting “Formatting” from the list of toolbars.</p>
<p>Nice!</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[LINQ-SQL: Why I Love it and Why I Hate it]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>Love it:</p>
<ul>
    <li>Generate a class structure based on database tables. </li>
    <li>Makes coding transactions really easy and seamless. </li>
    <li>Makes working with store procedures more like methods. </li>
    <li>Makes it easier to validate database field names at compile-time. </li>
</ul>
<p>Hate it:</p>
<ul>
    <li>Object must be “attached” and “detached” in different situations.  This is silly.  We should be able to get an object, pass it any tier of the app and attach it to any DataContext more easily.  We should NEVER have to leave the DataContext object open. </li>
    <li>Order of operations: if I call a Delete and then an Insert, the generated SQL may not be in that order.  That’s nasty. </li>
    <li>Too easy to use:
    <ul>
        <li>This should be a love it, but is more of a hate it, since now I have to police my developers to make sure they aren’t writing inadvertent database queries that are nasty.  I guess they could always do this, but now it’s even easier, so it happens more often. </li>
    </ul>
    </li>
    <li>Mass delete/update operations: the dynamic sql for this is nasty.  You need to write a stored proc or your own dynamic sql to make this efficient. </li>
    <li>Temp table handling in stored procs.  Stored procs that use temp tables don’t work worth a hoot.  This stinks. </li>
    <li>It’s slower than traditional database querying.  Mind boggling.  I hope it gets a performance boost in 4.0. </li>
</ul>
<p>I have lots of others love/hate things for LINQ-SQL, but these are the ones that stick in my head…</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Agility CMS vs. OpenText WCM (Formally RedDot)]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>How does Agility stack up against OpenText WCM (formally RedDot) - one of the most mature and best known content management systems?  According to Andre Gaulin, Director of Web Operations for Cineplex, very well.<br />
<br />
Jon and I went out for dinner with Andre a few weeks ago to catch up and find out how things are going with Cineplex.com - probably our favourite Agility site.  After discussing the many features of the site, the projects we've worked on and the various details of getting the site set up perfectly for their content editors, I thought it would be fun to ask him about how Agility stacks up to OpenText WCM - the CMS of choice at his previous company.<br />
<br />
Thinking back to the last time Andre and I met, I expected him to enthusiastically support his RedDot platform and the many customizations and extensions he and his team made for a variety of vibrant sites.  Surprisingly, he tipped Agility as the "the better CMS overall" saying "[OpenText WCM] is not as intuitive as Agility and has a higher learning curve to work with" and "[OpenText WCM] is more difficult to upgrade and keep current."  He even confirmed my belief that "it is hard to find developers to work with it because it is completely proprietary", whereas Agility development is based entirely on ASP.NET.</p>
<p>Shocking!</p>
<p>So, if OpenText WCM is an inferior CMS to Agility, why does it cost more than twice as much?  Sure brand recognition goes a long way, and we're probably not charging as much as we should be, but why pay more - especially in a recession.  <br />
<br />
I'm not saying that Agility has all of the features and functions of the OpenText Enterprise Content Management Suite, but 9 out of 10 websites don't need that level of sophistication.  As I mentioned in a previous post, the days of RedDot being a nimble, efficient, easy to use web content management platform are likely coming to a close.</p>
<p>We're happy to take its place.</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[REST vs. SOAP - Feeling RESTful]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p>I just want to share some of my thoughts about the whole REST vs SOAP debate. Previously I never really understood the whole REST philosophy but watching some of the Videos on MIX09 I am starting to feel the love. </p>
<p>Basically it is a mindset change. SOAP is all about "Actions" like "Get Orders", "Create Order", "Delete Order" where REST is all about "Resources" which can have HTTP Verbs apply actions to the resource.</p>
<p ><b>SOAP Pro's:</b></p>
<ul style="list-style-type: disc;">
    <li>Great for the Data Center (communications are strict and structured) </li>
    <li>Can Easily create strongly typed proxies within code from the WSDL </li>
</ul>
<p><b>SOAP Con's:</b></p>
<ul style="list-style-type: disc;">
    <li>Soap Messages are basically not Cachable </li>
    <li>you can't take a SOAP message and use it within JavaScript (where more and more of our code is being placed) </li>
</ul>
<p><b>REST Pro's:</b></p>
<ul style="list-style-type: disc;">
    <li>Governed by the HTTP Specification so Services can act like Resources just like Images or HTML documents </li>
    <li>Data can be either strictly maintained or loosely maintained (not as strict as SOAP) </li>
    <li>The REST Resource is easily called from Client side code (JavaScript) ... THIS is the main benefit in my opinion </li>
    <li>Light Weight .. great for the Internet </li>
    <li>REST can easily be spit out in XML or JSON therefore easily for JavaScript code to parse and work with. (in WCF this is literally a change of 1 attribute on a method) </li>
</ul>
<p><b>REST Con's:</b></p>
<ul style="list-style-type: disc;">
    <li>Hard to make strongly typed objects to work with it in server side code (This is only true now.. the preview releases of some toolkits and WCF will improve this dramatically) </li>
    <li>only works over HTTP (not good for high performance apps like a stock tracker for example) </li>
    <li>Calls to REST are restricted by HTTP Verbs (GET, POST, PUT, DELETE.. etc) </li>
</ul>
<p>Since a lot of our code is moving towards client side rendering REST is going to be the connection that we will use more and more when communicating with the server. REST will also reduce bandwidth with its ability to perform a "Conditional GET" operation thanks to the ability to check if the REST data has changed and return HTTP "Has not changed" status codes to the client like normal web pages function.</p>
<p >REST and SOAP do not replace each other... each of them have their uses but when making high performance and client rich websites it is looking like REST can provide a significant improvement.</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[RESTful Webservice Can Greatly Reduce Repeat Data Downloads]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p>So more info from my MIX09 video watching sessions again.. this time it was about caching RESTful webservices (here is the session: http://sessions.visitmix.com/MIX09/T64M). </p>
<p>I think this is an amazing technique for improving Client side caching of data services.</p>
<p>Here is the basic idea of the concept presented:</p>
<p>1) REST services are essentially XML Streams <br />
2) The XML streams can have HTTP headers that tell a browser if anything has changed<br />
3) If the user first visits a site that uses REST Data it can download that xml stream<br />
4) on all responses from the service the stream can apply a unique ETag header (basically a unique content hash of "contentID + last modified date" for example) which a browser can send to the service when making future requests<br />
5) when the user visits the site again and makes a request to get the xml stream the ETag that was previously download in the first request is sent to the services<br />
6) if the Etag matches (confirming the content is the same) the service can send down an HTTP 304 response saying "the data hasn't  changed" therefore the client doesn't have to re-download the data and can just generate the page with their already downloaded version of the xml stream. </p>
<p>This is the same concept that is used with Pictures and HTML content.. why not use it for our Service data as well! This will not only provide a better user experience but also reduce bandwidth from the server... which means the website will be able to handle more traffic.</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Microsoft Velocity - Clustered Caching Service]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p>I have been slowly making my way through the Mix 09 Videos (Some amazing stuff this year!) and I hit the Velocity Talk last night. </p>
<p>We all know that Caching is what makes Websites functional and usable when under load. Velocity is going to take us to the next level. </p>
<p>Basically Velocity is a Memory Caching Service that can span over a group of computers all working together to maintain a single cache store. Each Server just needs to have the velocity service installed and a simple configuration file allows each server to start to communicate with the other servers running velocity. You can then add things to this cache layer in a very similar matter as you add things to local cache in .NET right now. </p>
<p>You are able to group caches in different Regions and apply different policies to different Regions. The Main policy of interest is "High Availability" you can use velocity to store all session data for example.. and because Velocity can be put into High Availability mode for a specific region of cache you can ensure that even if one of the cache servers goes down the session data will not be lost (a backup of all data is stored on at least 1 of the other servers and switched on if a server crashes). Cache data is also balanced between all the servers in the cluster... so if the cache servers are starting to take to much load.. you can add another server and have the data redistributed automatically to balance the load.</p>
<p>Currently MSDN Forums is using Velocity to cache all their data... and the statistic that was presented in the talk I listened to was that their database hits dropped from approximately &nbsp;60% load to 2% load because their cache was more robust. There are many sites out there using "Clustered Caching" or some sort of custom caching model and without these models those sites would surely not function (for example: Facebook). </p>
<p>Velocity is currently in CTP3 right now (or about to be released as a CTP3) and the the RTM V1 is expected to be released in Mid 2009 and get this.. it will be supposedly Free! </p>]]></description><pubDate>5/19/2009 3:14:37 PM</pubDate></item><item><title><![CDATA[ASP.NET Controls Not Displaying Under Safari]]></title><author><![CDATA[David Luu]]></author><description><![CDATA[<p>You may have experienced that certain .NET controls do not display under Safari at all.  For instance, the .NET menu doesn't display and you won't be able to find it in the page source.  Basically it comes down to how .NET categorized browsers by their capabilities.  There's <b>up level</b>, <b>down-level</b>, and I think some <b>web2.0 </b>option.  IE and Firefox are up level browsers and Safari is tagged with a down-level.  So we simply have to change this property and your control <i>should</i> magically appear!</p>
<p>Here's the code to set Safari to up level:</p>
<p><code>// code </code><br />
<code>if (Page.Request.ServerVariables["http_user_agent"].IndexOf("Safari", StringComparison.CurrentCultureIgnoreCase) != -1)</code><br />
<code>     Page.ClientTarget = "uplevel" </code></p>
<p> Now this snippet of code needs to execute before a Page initializes.</p>
<p><code>// PreInit</code><br />
<code>protected override void Page_PreInit(object sender, EventArgs e)</code><br />
<code>{</code><br />
<code>     // insert *code*</code><br />
<code>}</code></p>
<p>An issue for you may be that you would like to insert this code into your MasterPage but there is no PreInit method.  Two possible workarounds:</p>
<p>1) Have your pages inherit from a base page and stick your code in the base page.</p>
<p><code>public class BasePage : System.Web.UI.Page</code><br />
<code>{</code><br />
<code>     // insert *PreInit code*</code><br />
<code>}</code></p>
<p>2) Insert into MasterPage.AddedControl as it's called before Page_PreInit.  There's probably a better method to use but so far just found this one.</p>
<p><code>public partial class DefaultMasterPage : System.Web.UI.MasterPage</code><br />
<code>{</code><br />
<code>     protected override void AddedControl(Control control, int index)</code><br />
<code>     {</code><br />
<code>          // insert *code*</code><br />
<br />
<code>          base.AddedControl(control, index);</code><br />
<code>     }</code><br />
<code>}</code> </p>
<p>Happy coding!</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Force IE7 Compatibility Mode in IE8 with IIS settings]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>There is a ton of examples on the web of how you can force IE8 into IE7 compatibility mode using a meta tag in the header.  </p>
<p>This tag needs to be first in the &lt;head&gt; (before any css):</p>
<pre>&lt;meta http-equiv="X-UA-Compatible" content="IE=7" /&gt;</pre>
<p>That really stinks if you need to add that to a lot of pages or sites.  It’s much easier just to add the header as real HTTP Header via IIS.  This can be done via IIS 6 or 7.</p>
<br />
<br />
<h3>IIS 6</h3>
<p>Go to the website, bring up the properties for it, and click on the HTTP Headers tab.</p>
<br />
<br />
<p><a href="http://weblogs.asp.net/blogs/joelvarty/image_7E90ABD2.png"><img width="318" height="311" title="image" style="border: 0px solid;   " alt="image" src="http://weblogs.asp.net/blogs/joelvarty/image_thumb_6FE5FFED.png" /></a></p>
<p style="text-align: center;"> <i>HTTP Headers tab of an IIS 6 Website</i></p>
<p style="text-align: left;"> </p>
<p>Then, add a new header as below:</p>
<p><a href="http://weblogs.asp.net/blogs/joelvarty/image_542AB412.png"><img width="341" height="242" title="image" style="border: 0px solid;   " alt="image" src="http://weblogs.asp.net/blogs/joelvarty/image_thumb_4F480056.png" /></a><i>Add custom HTTP Header</i> </p>
<br />
<br />
<h3>IIS 7</h3>
<p>IIS 7 is much the same.  Just go to the site and click on “HTTP Response Headers”.</p>
<br />
<br />
<br />
<br />
<p style="text-align: center;"><a href="http://weblogs.asp.net/blogs/joelvarty/image_39EA4AEE.png"><img width="255" height="175" title="image" style="border: 0px solid;   " alt="image" src="http://weblogs.asp.net/blogs/joelvarty/image_thumb_2E548DAF.png" /></a><i>IIS 7 Website Properties – IIS Section</i> </p>
<p>Then, just add the header:</p>
<p style="text-align: center;"><a href="http://weblogs.asp.net/blogs/joelvarty/image23_1D671FB1.png"><img width="281" height="268" title="image" style="border: 0px solid;   " alt="image" src="http://weblogs.asp.net/blogs/joelvarty/image23_thumb_4EF28D46.png" /></a> <i>Add custom HTTP Header</i> </p>
<p style="text-align: left;"><i></i></p>
<p style="text-align: left;">Incidentally, this just sets a value in the web.config, as below:</p>
<p style="text-align: left;"> </p>
<p style="text-align: left;"><a href="http://weblogs.asp.net/blogs/joelvarty/image27_156F7D4F.png"><img width="446" height="99" title="image" style="border: 0px solid;   " alt="image" src="http://weblogs.asp.net/blogs/joelvarty/image27_thumb_42F09D12.png" /></a> </p>
<br />
<br />]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Expression Blend Sketch Flow - Prototyping/IA Mega Tool]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p>Another cool tool announce at Mix09 which might help with Prototyping and information architecture development in the future, Expression Blend Sketch Flow. Basically allows you to take "Sketches" or "IA Diagrams" and apply State Transitions and User flow to the diagrams.</p>
<p>This tool would allow us to make interactive IA functionality which will allow clients and developers to see how a site is supposed to react to different state changes. Definitely a step forward in the Design, Prototyping, Sk and Requirements Gathering workspace.</p>
<p>The Main problems with flat IA documents is not only is it important understand a "screen" or "state" ... it is also just as important to figure out how you get to that "state". Flat IA documents do not always clearly explain the state transitions. Sketch Flow would eliminate this limitation by basically providing Flat "Diagrams" with built in transitions.<br />
<br />
<a href="http://electricbeach.org/?p=145" target="_blank">http://electricbeach.org/?p=145</a></p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Released!!]]></title><author><![CDATA[Jonathan Voigt]]></author><description><![CDATA[<p><b>Compatibility</b></p>
<p>For developers, one of the best features is that it can still run sites in IE7 mode so old sites don't have to be recoded in order for them to work.  To activate this automatically, you can add the following line to your head tags in each page or in a master page.</p>
<p>&lt;meta http-equiv="X-UA-Compatible" content="IE=7" /&gt;</p>
<p>End users can also adjust this manually in IE8 and can list sites that should run in this mode.  Going forward though, IE8 is much more standards compliant and should work much better with sites build for other browsers like Firefox.</p>
<p><b>Back Button</b></p>
<p>Another great feature if the back button enhancements, this allows the back button to work in rich applications that use ajax and prevents it from jumping back to the previous page everytime...</p>
<p><b>Accelerators</b></p>
<p>These allow you to add actions or link routine tasks to areas on the page.  An example would be binding a mapping tool to an address or phone number on a page.  IE8 comes with a number of building in accelerators and you can also build your own to extend functionality of a site.</p>
<p><b>Performance</b></p>
<p>Although there is a few debates on how much faster IE8, one thing for sure, Microsoft is putting a lot of emphasis on the fact that it is much faster.  Time will tell as it is used on different sites and tested in difference scenarios.  The script engine is definitely a lot faster which has been one of the biggest complaints regarding IE7.  This should really help out on those rich clients we're all building now.</p>
<p><b>Favourites and History</b></p>
<p>You can now add favourites with a single click and they can also be listed across the top.  This can really speed up things if you go to three or four sites every day.  The history can also be sorted as well as searched which can really help find sites you've visited easily.</p>
<p><b>Search</b></p>
<p>The new search ties in with a number of providers to include a better view of the results because of know return formats.  For example, results from Wikipedia can be tailored differently.  Also, your search will show the results from searching pages in your history as well in case you want to search for something in the sites you have previously viewed.  Just like IE7, you can add many different search providers.</p>
<p><b>Web Slices</b></p>
<p>This new feature is really exciting for developers.  it will allow them to break up pages differently.  Web Slices define specific areas on the page.  Think of an individual product in ebay or a single recipe in a list of recipes.  These areas can then be added to the favourites bar so you can load just that area of pages.  This standard is in the works of being accepted by other browsers and hopefully will become a full standard so that all browsers can start using this new way of looking at content.</p>
<p>Well, there is a list of some of the new features.  There is much more information out on the web that drills into each of these in more detail so if you're really interested in any of these, do a search and dive in a bit deeper.  </p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Expression Web 3 - Super Preview]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p>I was just watching the Keynote for Mix09 in Las Vegas and they presented a new tool coming out, Expression Web 3. It has a feature called "Super Preview" which will surely fix all our Cross Browser testing problems in the future. It literally will let you see the rendering of a webpage in any browser you want. </p>
<p>From my limited knowledge of it I know that if you have a local copy of the browser on your computer it will talk with that rendering engline (for example Firefox vs IE) and output what it will be displayed like within that browser. Now the COOL thing is if you don't have a browser on your computer that you need to test with For example MAC Safari (not windows Safari) Expression web will call a cloud computer and deliver the rendered result of the website to Expression Web! This will completely eliminate our need to use virtual machines to do cross browser testing!</p>
<p>It also does cool things like Allowing you to overlay different outputs of the page on top of each other.. or even just output a Image Comp on top of your website (Without having to do the fancy transparent div technique we have used in the past).</p>]]></description><pubDate>5/19/2009 3:16:13 PM</pubDate></item><item><title><![CDATA[Easy Client Side html Encode/Decode using jQuery]]></title><author><![CDATA[Osvel Legon]]></author><description><![CDATA[<p>Using jQuery for html encode/decode is easy, just:</p>
<pre>function HtmlEncode(html) {<br /> return $('&lt;div/&gt;').text(html).html();<br />}<br /><br />function HtmlDecode(text) {<br /> return $('&lt;div/&gt;').html(text).text();<br />}</pre>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Latest Agility Release Highlighted on CMS Wire]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>CMS Wire picks up on the new features from the March launch of Agility.</p>
<p><a href="http://www.cmswire.com/cms/hosted-cms/agility-cms-adds-dashboard-cloud-storage-support-004110.php" target="_blank">http://www.cmswire.com/cms/hosted-cms/agility-cms-adds-dashboard-cloud-storage-support-004110.php</a></p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Don’t use Alert() on AJAX Webservice Errors!]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>Even if you want the user to be notified of the fact that an AJAX web service call has errored out, don’t use an alert() to do it. </p>
<p>Why?  Lots of reasons… here are a few:</p>
<p>1.If you have one of more calls that error out before the user can dismiss the popup, this is just weird.  In IE, you’ll get successive popup’s, in Firefox, the alerts will stack up over top of each other.  Nasty either way, I think. </p>
<p>2.If you have a long-running call (and this in an of itself is nasty, but it can happen) and the user browses to another page, you can get into a situation where those error messages popup simply because the calls have been aborted. </p>
<p>3.It’s annoying to get notified of these kinds of things unless the user really needs to know.  This is up to the designer or architect to figure out, and if you are building a system where you aren’t sure whether the user should know about a given error, this is something that should already have been decided and you need to step back and figure that out. </p>
<p>What should you do to handle these errors?</p>
<ul style="list-style-type: disc;">
    <li>If the error only affects a certain portion of the screen, usually you’ll want to disable the affected area and show some kind of error indicator there. </li>
    <li>If you NEED to have a popup, use an HTML overlay or something non-blocking that will allow the user to navigate away without being stopped to click “OK”. </li>
    <li>Always put a try/catch in your web methods with a finally that returns an error specific for the browser to interpret. 
    <ul style="list-style-type: circle;">
        <li>There’s no need to send a server stack trace down to the user.  </li>
        <li>If you do any automated error logging, use that in the web method itself, not from JavaScript. </li>
    </ul>
    </li>
</ul>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[LINQ-SQL – Incorrect Results from Count() from Lambda Expressions]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>Check out the following C# code:</p>
<pre>using (MyDataContext db = new MyDataContext()) { int count1 = db.MyTable.Count(t=&gt; t.IsActive == true); int count2 = db.MyTable.Select(t =&gt; t.IsActive == true).Count(); }</pre>
<p>Judging by you what you see above, both count1 and count2 should have the same value, no?</p>
<p>No!</p>
<p>If there are 10 records in MyTable, count2 will have be 10.  If there are 5 records in the table that fit the IsActive == true lambda expression, than count2 will be 5.  </p>
<p>Can anyone explain this?  </p>
<p>At any rate, if you to use a Lamda expression to get a count, it’s a good idea to put the expression in the Count method itself, and not rely on a previous Select query to do it for you.  </p>
<p>Incidentally, check out this query:</p>
<pre>using (MyDataContext db = new MyDataContext()) { var q = from t in db.MyTable where t.IsActive == true select t.ID; int count3 = q.Count(); }</pre>
<p>Guess what?  The value for count3 is correct (as one would expect).</p>
<p>This is one of those cases where you just have to shake your head, do it the way that works, and move on.</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Publishing Agility Modules]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p>There are a few scenarios that need to be followed when publishing Agility Modules and if you are unaware of how things work in Agility it can be a little confusing.</p>
<p><b>Creating or Modifying a module:<br />
</b><br />
Since Agility wants you to be able to make changes to modules while still maintaining a working live version of a module there is a notion of Staging and Published for modules definitions. If you create a new module in agility or modify a module in Agility you may be required to publish the module definition before you are able to see all the changes on your website. You can think of modules that sit on a page as a piece of content. Modules can store data and that structure of data may change as you update your modules. <br />
<br />
How to publish a Module Definition:</p>
<ol>
    <li>Go to Agility </li>
    <li>Go to the Settings Section </li>
    <li>Select the Module Definitions Option </li>
    <li>Find your Module in the list </li>
    <li>Select the Checkbox and click Publish at the top (you should notice a checkbox appear in the Published column notifying you if your module has been published) </li>
    <li>You can now add this module to a page and it will be using the newest Module Definition </li>
</ol>
<p><b>Publishing Modules on a Page</b></p>
<p>Since everything in Agility is considered a piece of content a Page is also content that needs to be published and the modules that exist on a page are considered part of the pages content. </p>
<p>When you add a module to a page that has already been published you are in fact changing the page structure which will require a page level publish. If, for example, you add a module to a previously published page and go into that module and hit publish the module will be published BUT the Page will still not be aware of the new module addition and not show the newly added module in Live mode.</p>
<p>How to add a module to an Agility Page:</p>
<ol>
    <li>Go to Agility </li>
    <li>Go to Pages and Content </li>
    <li>Select a page or create a new page in the tree structure </li>
    <li>Add a new module to the page and fill in the modules content as required </li>
    <li>Click Save on the module </li>
    <li>Now Click Publish on that module </li>
    <li>Close the module window. You will notice that the Page status bar is in "Staging Mode" (If you were working of an previously published page) </li>
    <li>If you Preview this page you will see that the module is indeed visible in the Preview of the site </li>
    <li>But ...If you Switch to Live mode you will see that the module is not visible on the site yet. </li>
    <li>To make sure this module appears on the Live version of the page click Publish on the page (Page level publish) </li>
    <li>You should now see the page with the added module in Live mode </li>
</ol>
<p>The safest bet, if possible, is to always click publish at the page level which will Publish all the modules on a page as well as the Page itself.</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Thinking about Mambo for your CMS? Might Want to Think Again.]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Chad Auld, former core developer of Mambo and founder of Mambo fork project MiaCMS explains why the new CMS is better than its parent - and how the Mambo Foundation has some soul searching to do.</p>
<p>The candid interview on CMS Critic goes into detail on the issues facing Mambo and explains why it's time "the Mambo Foundation came clean about the state of their project".</p>
<p>According to Auld, "Four of those seven core developers, including myself, left in April of 2008 to form MiaCMS... A fifth former Mambo core developer joined us just a few months later and a sixth developer left the Mambo team... Since that time they also announced a new Project Leader who has since left, had the Foundation’s President resign, and have yet to fulfill their annual general election obligation, which allows foundation members to vote on new board members."</p>
<p>What does this mean if you're a Mambo customer?  Probably that your already weak support is going to get weaker and it will be a long time before you see any new features.  One of the risks of working with open source software is that it is not governed by the same rules that govern proprietary systems.  The code is free, so if a group of people wants to take that code and make it their own, they can - even if they are the core developers from the original system.  We've seen it with Drupal and Joomla, and now we're seeing it with Mambo.  </p>
<p>Something to consider when evaluting open source vs. Software as a Service or other CMS options.</p>
<p>Read the full interview:</p>
<p><a href="http://cmscritic.com/interview-with-chad-auld-of-miacms" target="_blank">http://cmscritic.com/interview-with-chad-auld-of-miacms</a></p>
<p><a href="http://cmscritic.com/interview-with-chad-auld-of-miacms" target="_blank"></a> </p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[LINQ Queries Containing Null Values for Nullable in a Where Clause]]></title><author><![CDATA[Osvel Legon]]></author><description><![CDATA[<p>How does LINQ to SQL handle the nullable type in the where clause? </p>
<p>The current .Where expression does not support the use of <code>==</code> between <code>Nullable</code> types when there is a <code>null</code> value, so here it's a trick to solve that:</p>
<p>Use <code>object.Equals</code> to get 2-value equals semantics (nulls equal nulls).</p>
<p><code>from c in db.ProductCategories</code><br />
<code>where <b>object.Equals</b>(c.ParentProductCategoryID, myID)</code><br />
<code>select c; </code></p>
<p>If the compared value is <code>null</code> LINQ will generate <code>c.ParentProductCategoryID IS NULL</code> otherwise it will generate <code>c.ParentProductCategoryID = myID</code>.</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Agility Tip: Customize Your Agility Lists]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Display the fields that you want to see on your list and change the default sort column in under a minute.</p>
<p>To do this (note that you need Designer or Manager level access):</p>
<ul style="list-style-type: disc;">
    <li>Open any content list (e.g. Shared Content-&gt;My Blog) </li>
    <li>Click on the List Settings tab </li>
    <li>Choose the fields that you would like to have in your list by clicking the 'Include' link beside the field in the Available Fields list </li>
    <li>Remove fields that you do not need by clicking the Exclude link in the Visible Fields list </li>
    <li>Change the order of the fields by clicking the up and down arrows on the fields in the Visible Fields list </li>
    <li>Change the default sort order of the list by choosing the column that you would like to sort by and the direction that it should be sorted </li>
</ul>
<p>Customizing your list allows you to view the fields that is relevant for your particular list.  You can also use the list Search to search any of the fields that are being displayed.  It is a great way to improve productivity!</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Display the fields that you want to see on your list and change the default sort column in under a minute.]]></title><author><![CDATA[Jonathan Voigt]]></author><description><![CDATA[<p>There is case you can get into that shows the module as published but where it won't appear on the site.  This should be known to everyone for debugging reasons.  We're looking to change the modules state from Published to Published - Requires Page Publish.</p>
<p>Case:</p>
<ul>
    <li>Page is Published </li>
    <li>Add a new module to the page. (Page will change to Staging) </li>
    <li>Edit the module, save the module, publish the module (from the module) </li>
    <li>Navigate to the page. </li>
</ul>
<p>You will now notice that the module says "Published" BUT it really isn't going to appear on the page because the page structure with the module hasn't been published.  you then have to publish the page to have the module show up...</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[JavaScript Session Variables Without Cookies]]></title><author><![CDATA[Osvel Legon]]></author><description><![CDATA[<p>Cookie handling in JavaScript - or any language - can easily catch you out. Cookies are limited in number and size and they’re easy to block. However, here’s a fantastic idea that allows you to safely store up to 2Mb of session data without using cookies: <a href="http://www.thomasfrank.se/sessionvars.html" title="website" target="_blank">Session variables without cookies</a>.</p>
<p>It works using the window.name property (or, more specifically, top.name - the top-level parent frame). It appears that name can hold a string of almost any length (depending on the browser) and the value survives between page loads - even if you visit another domain.</p>
<p>This means that you can serialize huge objects and store them on the client. Unlike cookies, you can also do this without sending any data to the server. </p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Content Management Interoperability Services]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>IBM, Microsoft, Open Text and others are pushing a web services specification that will provide a standard way for applications to read data from any content management repository.</p>
<p>The Content Management Interoperability Services or CMIS will open up proprietary systems and allow companies and software vendors to tap into content is currently barricaded in content management systems by proprietary technology.  Here are some of the benefits that are listed on Wikipedia:</p>
<li>Is designed to work over existing repositories enabling customers to build and leverage applications against multiple repositories -- unlocking content they already have </li>
<li>Decouples Web services and content from the content management repository, enabling customers to manage content independently </li>
<li>Provides common Web services and Web 2.0 interfaces to dramatically simplify application development </li>
<li>Is development platform and language agnostic </li>
<li>Supports composite application development and mash-up “on the glass” by the business or IT analyst </li>
<li>Grows the ISV and developer community
<p>Agility was one of the first content management systems to provide web service access to content natively.  Granted, we weren't providing a global standard for this access.  </p>
<p>We will keep our eye on this and make sure that Agility is compliant with the new standard once it is finalized.</p>
<p>More details on Wikipedia:</p>
<p><a href="http://en.wikipedia.org/wiki/Content_Management_Interoperability_Services" target="_blank">http://en.wikipedia.org/wiki/Content_Management_Interoperability_Services</a></p>
</li>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[RedDot is now Fully Digested by Open Text]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Open Text has formally announced the termination of the RedDot brand.  What does this mean for RedDot customers?  Hopefully no more than a little up sell pressure from the ECM vendor.</p>
<p>Unfortunately, this will be disappointing and even shocking to many long time RedDot supporters.  CMS Wire posted an interview with Daniel Kraft, Open Text SVP for Corporate Strategy that addresses the shift.</p>
<p><a href="http://www.cmswire.com/cms/open-text/farewell-reddot-viva-open-text-web-solutions-003961.php" target="_blank">http://www.cmswire.com/cms/open-text/farewell-reddot-viva-open-text-web-solutions-003961.php</a></p>
<p>The tone Daniel takes is very positive, but I can't see how this will be good for their RedDot customers.  It means that current RedDot clients have no upgrade path and no road map for future development, other than to accept the Open Text way which is significantly more complex.  For many clients, the suite of web products that Open Text has will be unnecessary and they will likely seek other pure web content management options when the time comes for a site upgrade.</p>
<p>Daniel makes some good points about Open Text capabilities and the benefits of working with a vendor that manages a suite of solutions.  However, there will always be a place for easy to use, nimble, cost effective tools that are specialized for managing web site content and functionality.  Our queue of projects is evidence of that.  Sometimes I wonder whether 'enterprise software' vendors ever set foot in the real world.</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Secretariat for the World Green Building Council to Set Up Shop at the Earth Rangers Centre]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Great news for Earth Rangers, for Canada, and for the world!  The Toronto Region Conservation Authority won the bid in 2007 to host the international secretariat.<br />
<br />
The amazing facilities at the Earth Rangers Centre provide a green, healthy building for the secretariat to work at, but also provide a fabulous venue for them to show the world the latest in green building technology.</p>
<p>Check out the press release from the Earth Rangers site:</p>
<p><a href="http://www.earthrangers.org/en-us/AboutUs/RangerReportArticles/February2009/GreenHome.aspx" target="_blank">http://www.earthrangers.org/en-us/AboutUs/RangerReportArticles/February2009/GreenHome.aspx</a></p>
<p><a href="http://www.earthrangers.org/en-us/AboutUs/RangerReportArticles/February2009/GreenHome.aspx" target="_blank"></a> </p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Lock Your Web App to 1 Outgoing Web Service Call Across All Threads]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>One of the things we see a lot of these days are web apps that call other web apps via web services, RSS, or REST APIs.</p>
<p>I do this all the time, and often cache the response of the request (especially RSS and stuff like that) so that my high-traffic site doesn't kill RSS host (it's it just makes sense).</p>
<p>First of all, you should be using an Asynchronous Page for this (a new feature as of Asp.Net 2.0, not really new...) since you don't want to be tying up IIS threads with your relatively slow server-to-server calls, but what if that call takes 3 seconds to respond and you have a barrage of traffic (say 1 thousand requests per second) at that point?  </p>
<p>What you really want, is for only 1 request from you server to hit the other server, cache the response, and then have all the other requests on your server wait and use the cached response.  Even if this takes 3 seconds, that's way better then killing the other server and getting timeouts.</p>
<p>The good thing is, this is really easy - watch.</p>
<pre>private static Semaphore _serverClientLockAccess = new Semaphore(1, 1); private static string DoMyServerWork(string url) { _serverClientLockAccess.WaitOne(); WebClient client = new WebClient(); string s = client.DownloadString(url); _serverClientLockAccess.Release(1); return s; }</pre>
<p>As you can see, the Semaphore makes it easy to lock the access to this service to one thread at a time. </p>
<p>Obviously, we need to add more logic to implement the idea of ReaderWriterLock on that Cache object that will hold our data returned from the service... but that's another day.  (hint: go <a href="http://msdn.microsoft.com/en-us/library/system.threading.readerwriterlock.aspx" target="_blank">here</a> to read about this)</p>
<br />
<br />]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[LINQ Paging Extensions]]></title><author><![CDATA[David Luu]]></author><description><![CDATA[<p>The scenario is basically all "items" were being spit out in an XML message.  Let's say these items are Book Requests. As the amount of traffic increased for the website, the number of book requests increased and the XML grew accordingly. <br />
<br />
It became too large and since we only displayed 5 book requests at a time, the practical thing to do was to download those specific items.  So a simple paging solution was needed.  In a nutshell, I needed two functions: 1) to retrieve the correct book requests based on the page and 2) to tell me the total number of pages.</p>
<p><code>
<p>int pageSize = 5;</p>
<p>// Retrieve the Total Number of Pages<br />
int totalPages = (int) Math.Ceiling((decimal)linqQuery.Count() / (decimal)pageSize);</p>
<p>// Retrieve the correct Book Request items based on the given page number<br />
List&lt;BookRequest&gt; BookRequests = linqQuery.Skip((page - 1) * pageSize).Take(pageSize);</p>
</code></p>
<p>This code gets ugly fast when you begin to copy &amp; paste this code in different places.  To clean this up, we just need to place these in Extension Methods.  Here's the gist of it:</p>
<p>&nbsp;</p>
<div><code>// PagingExtensions.cs</code></div>
<div><code></code></div>
<div><code>public static class PagingExtensions </code></div>
<div><code>{ </code></div>
<div><code>     public static IQueryable&lt;T&gt; Page&lt;T&gt; (this IQueryable&lt;T&gt; source, int page, int pageSize)<br />
     {<br />
          return source.Skip((page - 1) * pageSize).Take(pageSize).AsQueryable();<br />
     }</code></div>
<p><code>
<p>&nbsp;</p>
<p>     public static int TotalPages&lt;T&gt; (this IOrderedQueryable&lt;T&gt; source, int pageSize)<br />
     {<br />
          return (int) Math.Ceiling((decimal)source.Count() / (decimal)pageSize);<br />
     }<br />
}</p>
</code></p>
<div></div>
<p>So the previous code would now look like the following:</p>
<p><code>
<p>// Retrieve the Total Number of Pages<br />
int totalPages = linqQuery.TotalPages(pageSize);<br />
<br />
// Retrieve the correct Book Request items based on the given page number<br />
List&lt;BookRequest&gt; BookRequests = linqQuery.Page(page, pageSize);</p>
</code></p>
<p>Just throw PagingExtensions.cs in your project and it will work with all your LINQ to SQL queries.  Remember for the extension methods to be recognize, it must be in scope (namespace imported).</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Agility Tip: Many Tabs Make Light Work]]></title><author><![CDATA[Steve Pontisso]]></author><description><![CDATA[One of the limitations of working in a web application like the Agility Content Manager is that often, moving to another section requires a "page refresh".  For example, if you're working in the Pages and Content view, and you want to switch over to the Documents folder, the page refreshes.  <br />
<br />
This is fine if you're working in a linear fashion, but what if you're doing things in parallel?  Like what if you needed to copy/paste some content from one module on one page, into another module in another page?  It can take a lot of time to copy, close out of that module, go into another one, and paste - especially if you need to click your way back to the original module to keep working with it.<br />
<br />
Here's a little trick that I use to save a bunch of time.<br />
<br />
If I'm copying and pasting, or performing similar functions on a bunch of different modules on a bunch of different pages, I open them all up on separate tabs in my browser.  <br />
<br />
Each tab is almost like another window where I can easily copy and paste things between them.  Opening another tab is easily accomplished by right-clicking on a link in Agility (say the Pages and Content link in the main navigation) and selecting the Open In a New Tab option (the name of that function may vary from browser to browser).<br />
<br />
This isn't a "feature" of Agility, but is a feature of working in most web applications.  For example, when I'm writing email in Gmail, but want to reference something in my address book, instead of saving the email as draft, opening my addressbook, and then going into drafts to re-open and finish the message, I just open the addressbook in a separate tab.  I find it faster and way more efficient. <br />
<br />
I hope you do to!]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Firebug Lite - The Firebug for IE]]></title><author><![CDATA[Osvel Legon]]></author><description><![CDATA[<p>Firebug is an extension for Firefox, but what happens when you need to test your pages in Internet Explorer, Opera, and Safari?</p>
<p>The solution is <a href="http://getfirebug.com/lite.html" target="_blank">Firebug Lite</a>, a JavaScript file you can insert into your pages to simulate some Firebug features in browsers that are not named "Firefox".</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Full Month Event Calendar]]></title><author><![CDATA[Osvel Legon]]></author><description><![CDATA[A calendar control is always useful, and this jQuery plug-in <a href="http://www.bytecyclist.com/projects/jmonthcalendar/" target="_blank">jMonthCalendar</a> looks great. I think that maybe we can extend it to work like this <a href="http://www.backpackit.com/calendar" target="_blank">Backpack Calendar</a>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Uploading Hundreds of Files to Agility, In Just Four Easy Clicks!]]></title><author><![CDATA[Steve Pontisso]]></author><description><![CDATA[<p>It's pretty common for our clients to upload many files to the Documents folder in Agility.  This is typically where linked documents, images, and even Flash files are stored, and used on a variety of different pages throughout their website.  Uploading files to Agility is no different than uploading to any other web application. <br />
<br />
For instance, if you use a web based email service like Hotmail, Gmail, or Yahoo Mail, you've likely uploaded a file or two as attachments to an email message.  Using the Agility Content Manager, the process is very similar.  As elegant as that solution is, it can become very tedious to do for say 5 files.  Imagine how bad it would be if you had 50, or even 500 files to upload.  That's why we introduced the "Upload Zip" feature.  </p>
<p>This magical little feature lets you take a zip file you've created on your desktop and upload it as one file to the Agility documents folder.  During the upload process, Agility will extract the the contents of the zip file for you and establish the exact same file structure for you in the Documents folder.  So if you had folders and subfolders in your zip file, Agility will preserve those for you in the process.</p>
<p>This handy little feature can save you a boat load of time.  The only limitation (and this is a limitation of web based uploading, not Agility) is the file size should be no bigger than 35,600KB.  So if your zip file exceeds that size, you should break it into pieces.  Two or three uploads vs. say hundreds is still exponentially faster!</p>
<p>To find this feature, just look for the "Upload Zip" link in the top right hand corner of the Documents folder.  I've circled it for you in the screen shot below.  After you've clicked on it you'll be prompted to browse for the zip file on your computer, select it, and then click open, and wait for the upload to complete.  See, four clicks and you're done!</p>
<p><a href="http://knowledge.edentity.local/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/steve/ScreenShot_5F00_02-2009_2D00_02_2D00_10.gif"><img width="387" height="128" alt="" style="border: 0px solid;   " src="http://knowledge.edentity.local/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/steve/ScreenShot_5F00_02-2009_2D00_02_2D00_10.gif" /></a></p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[The .d Attribute That Appeared in ASP.NET 3.5 With Web Service Calls]]></title><author><![CDATA[Osvel Legon]]></author><description><![CDATA[<p>When working directly with JSON serialized ASMX services, be it <a href="http://encosia.com/2008/03/27/using-jquery-to-consume-aspnet-json-web-services/" target="_blank">via jQuery</a>, pure XmlHttpRequest calls, or anything else other than the ScriptManager, one question inevitably arises. That question is of the inexplicable <b>.d</b> attribute that appeared in ASP.NET 3.5.</p>
<p><a href="http://encosia.com/2009/02/10/a-breaking-change-between-versions-of-aspnet-ajax/" title="Permanent Link: A breaking change between versions of ASP.NET AJAX" target="_blank" rel="bookmark"><b>A breaking change between versions of ASP.NET AJAX</b></a></p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Batch Convert PSD's to JPG's]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p>So I had a huge list of psds that were given to me for a project. I wanted to convert these suckers to jpg's so I could quickly flip through them.  I decided it was time to actually figure out how to batch convert psd's to jpg's. </p>
<p>Here is a walkthrough I found on how to do it:</p>
<p><a href="http://www.youtube.com/watch?v=DNq3l1FRWD4" title="http://www.youtube.com/watch?v=DNq3l1FRWD4" target="_blank">http://www.youtube.com/watch?v=DNq3l1FRWD4</a></p>
<p>And here is my break down:</p>
<p>1.     Open up Photoshop </p>
<p>2.     Open up a single psd file. </p>
<p>3.     Go to Window &gt; Actions to open up the action panel </p>
<p>4.     At the bottom of this panel click the little "note" icon (beside the trash can) this will let you create a new action </p>
<p>5.     Name the action "Convert to Jpg" or something descriptive </p>
<p>6.     Hit Record (you are now recording a series of steps .. which Photoshop will reproduce when in batch mode) </p>
<p>7.     You can then click File &gt; Save As </p>
<p>8.     Change the file type to JPG </p>
<p>9.     Hit Save.... choose your quality </p>
<p>10.   Then Hit the "Stop" button (square) in your action pane </p>
<p>NOW lets perform this action on a batch of files</p>
<p>1.     Go To File &gt; Automate &gt; Batch </p>
<p>2.     Change Action to your Created action "Convert to Jpg" </p>
<p>3.     Choose your Source folder (folder with all your psds) </p>
<p>4.     Choose your destination folder (folder where you want your jpg's saved) </p>
<p>5.     Check Override Action "save as" commands </p>
<p>6.     Click OK </p>
<p>7.     Photoshop should start to open and perform the Save as Macro on all the psds in your source folder... and when completed all the psds will be converted to jpgs <br />
<br />
You could of course use this technique to perform a series of actions on your image (for example resize) etc.</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Software as a Service - "Transition to SaaS: An ISV Cookbook"]]></title><author><![CDATA[Jonathan Voigt]]></author><description><![CDATA[<p>Software as a Service is definitely getting a lot of attention.  Only now are people starting to understand the benefits and what it really means.</p>
<p>This book goes into the steps necessary to transition to SaaS and touches on the research that has been done around this topic.</p>
<p><a href="http://www.researchandmarkets.com/product/e19881/transition_to_saas_an_isv_cookbook" target="_blank">Here</a> is a brief summary.</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Put Code in Your Blog With Windows Live Writer]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p><a href="http://gallery.live.com/liveitemdetail.aspx?li=1f57bd9b-a692-4593-9e9e-e2962d9c0eee&amp;l=8" target="_blank">This plugin</a> for windows live writer called "Insert Code", lets you do this:</p>
<p><a href="http://weblogs.asp.net/blogs/joelvarty/WindowsLiveWriter/PutcodeinyourblogwithWindowsLiveWriter_D1AB/insertcode.png"><img width="351" height="388" style="border: 0px solid;   " alt="insertcode" src="http://weblogs.asp.net/blogs/joelvarty/WindowsLiveWriter/PutcodeinyourblogwithWindowsLiveWriter_D1AB/insertcode_thumb.png" /></a> </p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[VS Docs for jQuery 1.3.1]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>I am using jQuery for everything these days - it really is an awesome add-on to any web application, and what is even better that you can get intellisense on it for the latest version.</p>
<br />
<br />
<p><img alt="" src="http://weblogs.asp.net/blogs/bleroy/jQueryJsDoc131_13C6BA00.png" /> </p>
<p>Makes it easy to get stuff like this showing up when you are kicking out js code...</p>
<p><img width="265" height="135" alt="" src="http://weblogs.asp.net/blogs/bleroy/jQueryIntelliSenseScriptTag_1BC6382A.png" /> </p>
<p>Via Bertand Le Roy's blog - <a href="http://weblogs.asp.net/bleroy/archive/2009/02/06/vsdoc-for-jquery-1-3-1-now-available.aspx" title="http://weblogs.asp.net/bleroy/archive/2009/02/06/vsdoc-for-jquery-1-3-1-now-available.aspx" target="_blank">http://weblogs.asp.net/bleroy/archive/2009/02/06/vsdoc-for-jquery-1-3-1-now-available.aspx</a></p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[JQuery - Get a Handle On a Server Element in Javascript]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>This is how you get a handle on a server elemment in Javascript without using &lt;%= elem.ClientID %&gt;. </p>
<p>One of the things I see  a lot of is code that looks like this:</p>
<pre>&lt;asp:CheckBox ID="chkEnable" Text="My Checkbox" runat="server" /&gt; &lt;script type="text/javascript"&gt; var chkEnable = $get("&lt;%= chkEnable.ClientID %&gt;"); &lt;/script&gt;</pre>
<p>You can see that the ClientID is being used, which will grab the exact element that .net generates, and will look like <b>ctl00_plcMain_chkEnable</b> or something like that.</p>
<p>jQuery can select an element by looking at what its attribute ends with, as explained <a href="http://docs.jquery.com/Selectors" target="_blank">here</a>.</p>
<p>So we get this instead:</p>
<pre>&lt;asp:CheckBox ID="chkEnable" Text="My Checkbox" runat="server" /&gt; &lt;script type="text/javascript"&gt; $(function() { var checked = $("input[id$=chkEnable]").attr("checked"); if (checked) { alert("It is checked. These are the droids you are looking for."); } }); &lt;/script&gt;</pre>
<p>The code in the selector that gets all of the input elements that have an id attribute that ends with chkEnable.  What really rocks (or sucks, depending on your point of view) is that if you have a repeater full of &lt;asp:checkbox&gt; controls, this will select all of them so you can process them.</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Firebug for Safari for Windows (Not Quite...)]]></title><author><![CDATA[Andre Small]]></author><description><![CDATA[<p>Ran into an issue with Safari for Windows where the CSS rendering  was completely off when compared to IE 7, FF 2 &amp; 3 and even IE 6. With no debug tool quickly available to find out what the problem was (like Firebug), so I resorted to trial-and-error methodology. Still no luck. </p>
<p>Well it turns out that Safari (version I am using is 3.2.1) does have a pretty good dev tool built in called Web Inspector. To access it, you need to go to the <b>Edit</b> menu. Select <b>Preferences</b> -&gt; <b>Advanced</b>. Select the option called "<i>Show Develop menu in menu bar</i>", and close the window. Once done, a new menu item will appear to the left of the Window menu. Now, you have access to a world of options that were not there before, like change the User Agent; disabling images, the cache etc...</p>
<p>Also, you can highlight an item in the web page and right-click on it, at the bottom of the popup menu, the option to Inspect Element will be visible. This option will open up Web Inspector. There you can look at the DOM, view console errors, see the HTML &amp; CSS hierarchy on a element and a whole ton of other information about the page elements. Very Good!!</p>
<p>Take a look you will be impressed! It is not Firebug but it is more like the IE Dev toolbar from MS.</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Safari, Custom 404 Error Pages and Stylesheet Page Links ... Bad News!!!]]></title><author><![CDATA[Andre Small]]></author><description><![CDATA[<p>Here is a weird one, if your web app or web server serves up a custom error  404 HTML page, you could be in world of hurt if the 404 occurs in a style sheet page link. The reason why is, despite the fact the server sent a 404 back to Safari, the web app or web server (IIS 7 for example) returned a HTML page with styling embedded in it. Safari will read the returned page and integrate the 404 page CSS into your page's CSS and that will throw everything related to those elements (H1, H2 ... ) off. </p>
<p>Luckily IE and FF understand that once a 404 is returned, don't process the remaining returned data. A major goof for the WebKit project -- I think.</p>
<p>Best practice to verify that all the style sheet links are available when viewing your page in the browser. Use Firebug, Fiddler, even Safari's Web Inspector to see what is missing before you go live with your pages. And once live remember this problem with Safari!</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[VS 2010 and Deployments Through IIS - MSDeploy Here We Come]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>I saw <a href="http://blogs.msdn.com/webdevtools/archive/2009/02/04/web-deployment-with-vs-2010-and-iis.aspx" target="_blank">this posting</a> on the webdevtools blog and was intrigued by its promise.</p>
<p>Deploying apps across multiple environments really sucks with IIS, especially when you have specialized setting for different servers in a web farm, or you have multiple people that need to be able to crank out different builds on demand.</p>
<p>Right now, we sync out files to different servers using ViceVersa, but it doesn't allow to do things like sql updates and it certainly doesn't help us when we want to rollout separate web.config settings for each different server.</p>
<p>I'm not a believer yet - just calling something 1-click publish gives me shivers of nasty behind the scenes messiness - but I truly hope it works as planned.  With all the fast and agile development going on, anything that makes deployment easiest, more efficient and more reliable is a really good thing.</p>
<br />
<br />]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Changing the Date/time for a Virtual PC Guest]]></title><author><![CDATA[Andre Small]]></author><description><![CDATA[<p>Interesting situation I had, where I needed to change the Date/time on my machine to diagnosis a time issue. Since changing the date/time on a Windows domain connected computer is a big no-no (if you don't mind the domain controller throwing security errors because of the domain security tokens are time sensitive).</p>
<p>Then to find out that changing the date/time on a Virtual PC host (not domain connected) does not work without a mod to the VMC file. By default the VPC guest syncs its time with the host PC every 10-15 sec. The best way is to update the VMC with the line below, under the &lt;integration&gt;/&lt;microsoft&gt; node:</p>
<p>&lt;components&gt;<br />
    &lt;host_time_sync&gt;<br />
     &lt;enabled type="boolean"&gt;false&lt;/enabled&gt;<br />
    &lt;/host_time_sync&gt;<br />
 &lt;/components&gt;</p>
<p>This will disable the time synchronization functionality of Virtual PC for this guest. You will need to stop the guest before you make the change and then restart the guest OS.</p>
<p> Check out: <a href="http://www.nirsoft.net/blog/2008/12/running-operating-system-inside-virtual.html" target="_blank">http://www.nirsoft.net/blog/2008/12/running-operating-system-inside-virtual.html</a> for other ways to change date/time in VPC host.</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[JQuery UI - Out of the Box Beauty]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p>We have been very JQuery addicted lately and maybe it is time to step it up a notch and check out some of the JQuery UI functionality that is available out of the box:</p>
<p>To see a nice example of JQuery UI in action right out of the box check this url out:<br />
<a href="http://ui.jquery.com/themeroller/" title="http://ui.jquery.com/themeroller/" target="_blank">http://ui.jquery.com/themeroller/</a></p>
<p>It basically allows you to style html controls and elements with pre-packaged styles and looks... but of course it is completely customizable.</p>
<p>&nbsp;</p>
<p>I see this being useful for things like Web Forms where clients want their site to apply slicker styling to the form input controls. I also think it would be useful in places like Admins where we generally do our own styling on the interface... jquery ui will just let us step it out a notch without a lot of effort.</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[IE7 AND IE8 Compatibility!]]></title><author><![CDATA[Jonathan Voigt]]></author><description><![CDATA[<p>Well, IE8 is supposed to come out soon and because of it's change in CSS rules (more compatible) it may break some previously build sites that were built for IE7.</p>
<p>To get around this, people can run their site in IE7 compatibility mode.  To do this, just add the following tag between the head tags in each page:</p>
<p><b>&lt;meta http-equiv="X-UA-Compatible" content="IE=7" /&gt;</b></p>
<p>In Agility this is easy to place throughout the entire site by adding this tag to the "Top Script" in the global scripts.  All current Agility sites already incorporate this.  </p>
<p>We're really hoping IE8 comes out in April and with it, IE6 can be pushed off the map with it's major CSS rendering issues.</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Agility CMS Listed on Capterra]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Agility has been listed on the Capterra catalog of software products.  Capterra is a leading source for information about technology vendors across a broad spectrum of categories.</p>
<p>Buyers of technology come to Capterra to learn about software offerings that fit their needs.  Agility has been listed under the Content Management Software category:</p>
<p><a href="http://www.capterra.com/content-management-software" title="Capterra" target="_blank">http://www.capterra.com/content-management-software</a><a href="http://www.capterra.com/content-management-software" title="Capterra" target="_blank"></a></p>
<p>It's great having a name that starts with 'A'!</p>
<p>This listing underscores the continuing rise of the Agility Content Management System as a leading Software-as-a-Service Content Management System.</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[jQuery and PNG fading in IE]]></title><author><![CDATA[Osvel Legon]]></author><description><![CDATA[<p>Using jQuery image fading capabilities for web animations is cool, but when IE is the target browser, we must be careful using it. </p>
<p>If the image you are fading is a PNG, IE will break the image transparency when it's rendering the faded image. It will not happen in FireFox or Safari, they render the transparency properly.</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[ASP.NET 4.0 will allow you to control the ClientID]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p>There is a new property on ASP.NET 4.0 controls called ClientIDMode. This will allow for easier client side coding since we will be able to control how the controls client id is generated instead of seeing something like this: </p>
<p>ctl00_MasterPageBody_ctl01_Textbox1.</p>
<p>This mode has 4 possible values:</p>
<ul style="list-style-type: disc;">
    <li><b>Legacy: </b>The default value if ClientIDMode is not set anywhere in the control hierarchy.  This causes client side IDs to behave the way they did in version 2.0 (3.0 and 3.5 did not change this code path) of the framework. This mode will generate an ID similar to “ctl00_MasterPageBody_ctl01_Textbox1.” </li>
    <li><b>Inherit:</b> This is the default behavior for every control.  This looks to the controls parent to get its value for ClientIDMode.  You do not need to set this on every control as it is the default, this is used only when the ClientIDMode has been changed and the new desired behavior is to inherit from the controls parent. </li>
    <li><b>Static:</b> This mode does exactly what you think it would, it makes the client side ID static. Meaning that what you put for the ID is what will be used for the client side ID.  Warning, this means that if a static ClientIDMode is used in a repeating control the developer is responsible for ensuring client side ID uniqueness. </li>
    <li><b>Predictable:</b> This mode is used when the framework needs to ensure uniqueness but it needs to be done so in a predictable way.  The most common use for this mode is on databound controls.  The framework will traverse the control hierarchy prefixing the supplied ID with it’s parent control ID until it reaches a control in the hierarchy whose ClientIDMode is defined as static.  In the event that the control is placed inside a databound control a suffix with a value that identifies that instance will also be added to the supplied ID.  The ClientIDRowSuffix property is used to control the value that will be used as a suffix (see samples).  This mode will generate an ID similar to “Gridview1_Label1_0” </li>
</ul>
<p>Here is a good read on the new feature (where I copied the above from):<br />
<a href="http://blog.osbornm.com/archive/2009/01/06/asp.net-4.0-clientid-overview-again.aspx" title="http://blog.osbornm.com/archive/2009/01/06/asp.net-4.0-clientid-overview-again.aspx" target="_blank">http://blog.osbornm.com/archive/2009/01/06/asp.net-4.0-clientid-overview-again.aspx</a></p>
<p>Will be Great! no more document.getElementById('&lt;%= TextBox1.ClientID %&gt;'); ... and not having to do this will allow it to be easier to put JavaScript code into script files.</p>
<p>is a PNG, IE will break the image transparency when it's rendering the faded image. It will not happen in FireFox or Safari, they render the transparency properly.</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[innerText property is not supported by FireFox]]></title><author><![CDATA[Henry Ji]]></author><description><![CDATA[<p>IE and Safari support innerText property but FireFox doesn't. In FireFox, you can textContent instead as follows:</p>
<p>if (htmlElement.innerText != undefined) {<br />
   htmlElement.innerText = 'new inner text';<br />
} else {<br />
   htmlElement.textContent = 'new inner text';<br />
} </p>
<p>Or, if this html element is not a span, you can use jQuery's text function:</p>
<p>htmlElement.text('new inner text');</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[IE 6 & 7 Web Page Printing]]></title><author><![CDATA[Andre Small]]></author><description><![CDATA[<p>If you are designing/building a page whose intended purpose is for the user to print, you need to be careful of the content width. Unlike all the other browsers, IE 6 does not support wide page shrinking when printing.</p>
<p>To overcome this limitation, set the width for the content container to ~650px (IE 7) or ~600px (IE 6) and when using DIVs, be sure to clear (style="clear:both") when moving content down. As relying on the browser to move the content down, can have undesired, unpredicatable effects on length of the page in IE6. </p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Ever want to just play with JQuery and Other AJAX Libraries?]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p>Google thinks of everything.</p>
<p><a href="http://code.google.com/apis/ajax/playground/#jquery" target="_blank">http://code.google.com/apis/ajax/playground/#jquery</a> </p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[IIS 5.1 - Increase the concurrent connection limit]]></title><author><![CDATA[Andre Small]]></author><description><![CDATA[<p>When using Windows XP as your primary development box for websites you will quickly hit the IIS concurrent connection limit error message when testing/verifying your work in multiple browsers on your machine. </p>
<p>403.9 "Access Forbidden: Too many users are connected" </p>
<p>Testing your work in IE 6 &amp; 7, Firefox 2 &amp; 3, Safari and now Chrome and IE 8 (on the horizon), running up against the connection limitations of the IIS in Windows XP is nothing short of annoying and a time waster.</p>
<p>After exceeding the limit a dozen times or so during a project, I needed a solution and found one:</p>
<ol>
    <li>Set your default windows script host to console version (cscript) </li>
    <li>Run command:  C:\Inetpub\AdminScripts\adsutil set w3svc/MaxConnections 40 </li>
</ol>
<p><b>Note: 40 concurrent connections is the max in Windows XP IIS.</b></p>
<p><b>Note2:</b> Also changing the connection timeouts for the website: Start -&gt; Run -&gt; Inetmgr. In IIS, find your web site and click on the Properties icon. Under "My Web Site Properties" - "Web Site" tab - Connections, verify that "HTTP Keep-Alives Enabled" is checked and change connection timeout to a low number (like 90 seconds)</p>
<p><b>References:</b></p>
<ul>
    <li><a href="http://www.codinghorror.com/blog/archives/000329.html" target="_blank">http://www.codinghorror.com/blog/archives/000329.html</a> </li>
    <li><a href="http://support.microsoft.com/kb/248074" target="_blank">http://support.microsoft.com/kb/248074</a> </li>
</ul>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Mega Speed up Firefox Page Loading]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p>I found this post on how to improve the performance of Firefox and I must say it really improves page load performance!</p>
<p><a href="http://www.boygeniusreport.com/2009/01/25/a-handful-of-firefox-tweaks-that-will-double-your-browser-speed/" target="_blank">http://www.boygeniusreport.com/2009/01/25/a-handful-of-firefox-tweaks-that-will-double-your-browser-speed/</a></p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[IIS 7, Dynamic Compression and AJAX Web Services Means Massive Performance Increases]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>I work on a product called <a href="http://www.agilitycms.com/" target="_blank">Agility CMS</a>.  Agility CMS is a hosted web content management system - including a web application dedicated to actually editing website content, pages, sitemaps and other good stuff.  </p>
<p>Last week we updated the app moved the whole system to IIS 7 on Windows Server 2008.  We also turned on dynamic compression - which will now work properly on this system since we can now easily limit dynamic compression based on mime-type (not just file extension).  Meaning all of our attachment handlers don't get messed up when delivering zips or other compressed files to silly browsers like IE7.</p>
<p>Dynamic Compression in IIS 7 is dead simple - its available through the IIS Admin, as you might expect.</p>
<p><a href="http://weblogs.asp.net/blogs/joelvarty/compression1.PNG"><img alt="" style="border: 0px solid;   " src="http://weblogs.asp.net/blogs/joelvarty/compression1.PNG" /></a></p>
<p><a href="http://weblogs.asp.net/blogs/joelvarty/compression2.PNG"><img alt="" style="border: 0px solid;   " src="http://weblogs.asp.net/blogs/joelvarty/compression2.PNG" /></a></p>
<br />
<br />
<p>But, behind the scenes, the dynamic content compression setting just tweaks a setting in the system.webServer section of the web.config:</p>
<p><a href="http://weblogs.asp.net/blogs/joelvarty/compression3.PNG"><img alt="" style="border: 0px solid;   " src="http://weblogs.asp.net/blogs/joelvarty/compression3.PNG" /></a></p>
<p>Cool.  Just make sure that you have Dynamic Compression installed...  </p>
<br />
<br />
<p>What does it mean though?  How much real benefit is there to dynamic compression in an AJAX style application?</p>
<p>In my preliminary tests (using Fiddler and FireBug) I was able see close to a <b>40% decrease in bandwidth </b>overall.</p>
<p>The human result is a much more reactive experience on the application, which is suddenly much snappier.  I can tell that people are being WAY more productive, too; my SQL server has jumped from an average 5-6% CPU usage to closer to 8-10%.  I guess that's a good thing... </p>
<p>I shouldn't have been so surprised at this remarkable change in the overall bandwidth of the app, because we use dynamic compression with IIS 6 on our regular websites, but we never seen any thing close to a 40% bandwidth decrease.  I am guessing this is because a regular website relies more on pre-compressed stuff like JPEG and PNG files, as opposed to tons of web forms with copious amount of HTML being sent back and forth to the server as part of the basic CMS operations.</p>
<p>I can't wait to see our hosting bill at the end of the month - I'm hoping to be pleasantly surprised once again!</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Agility Featured in CMS Wire Article]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>CMS Wire is one of my favourite sources for CMS news.  They cover a very broad spectrum of all things content and social networking.  This month, they have continued to provide commentary on our monthly update process.  </p>
<p>Not surprisingly, they weren't blown away by the back-end and performance updates in this release (I guess to have to be an Agility user to appreciate them!).  However, they do point out some highlights of our Software-as-a-Service model.</p>
<p><a href="http://www.cmswire.com/cms/web-cms/agility-web-cms-update-focused-on-performance-003786.php" target="_blank">http://www.cmswire.com/cms/web-cms/agility-web-cms-update-focused-on-performance-003786.php</a></p>
<br />
<br />]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[BLOCKED SCRIPTvoid() Javascript Error]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>This is one of those javascript errors that makes me shake my head a bit, but with more and more Ajax style apps being built in Asp.Net, I have started seeing this quite a bit. </p>
<p>If you have something like this:</p>
<p><b>&lt;a href="BLOCKED SCRIPTvoid()" onclick="doMyFunction()"&gt;Click Here&lt;/a&gt;</b></p>
<p>It will throw the following javascript error (in Firefox, at least).</p>
<p><img width="423" height="241" style="border: 0px solid;   " alt="void" src="http://weblogs.asp.net/blogs/joelvarty/WindowsLiveWriter/javascriptvoidwillthrowajavascripterrory_8C73/void_1.png" /> </p>
<p>The solution is to ALWAYS pass the void function a 0 - like this:</p>
<p><b>&lt;a href="BLOCKED SCRIPTvoid(0)" onclick="doMyFunction()"&gt;Click Here&lt;/a&gt;</b></p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[BLOCKED SCRIPTvoid() Javascript Error]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>This is one of those javascript errors that makes me shake my head a bit, but with more and more Ajax style apps being built in Asp.Net, I have started seeing this quite a bit. </p>
<p>If you have something like this:</p>
<p><b>&lt;a href="BLOCKED SCRIPTvoid()" onclick="doMyFunction()"&gt;Click Here&lt;/a&gt;</b></p>
<p>It will throw the following javascript error (in Firefox, at least).</p>
<p><img width="423" height="241" style="border: 0px solid;   " alt="void" src="http://weblogs.asp.net/blogs/joelvarty/WindowsLiveWriter/javascriptvoidwillthrowajavascripterrory_8C73/void_1.png" /> </p>
<p>The solution is to ALWAYS pass the void function a 0 - like this:</p>
<p><b>&lt;a href="BLOCKED SCRIPTvoid(0)" onclick="doMyFunction()"&gt;Click Here&lt;/a&gt;</b></p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Is Linq To SQL a dead end?]]></title><author><![CDATA[Alexandru Cibotari]]></author><description><![CDATA[<p>Tim Mallalieu, Program Manager, LINQ to SQL and Entity Framework: "We’re making significant investments in the Entity Framework such that as of .NET 4.0 the<b> Entity Framework will be our recommended data access solution for LINQ to relational scenarios</b>. "</p>
<p><a href="http://blogs.msdn.com/adonet/archive/2008/10/29/update-on-linq-to-sql-and-linq-to-entities-roadmap.aspx" target="_blank">http://blogs.msdn.com/adonet/archive/2008/10/29/update-on-linq-to-sql-and-linq-to-entities-roadmap.aspx</a></p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Agility Tip: Adding an Extra Line Feed in the Rich Text Editor]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>You may find a glitch in the Agility Rich Text Module content editor where you can't seem to enter an extra line feed between two paragraphs of text.  Here is the workaround:</p>
<ul>
    <li>Click 'Enter' to create the extra line feed </li>
    <li>Click 'Spacebar' to create a space in the new line feed </li>
    <li>Preview the page to make sure that the extra line feed is sticking </li>
</ul>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[TSQL - Distance in kilometers between 2 points, given the latitude and longitude]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>It's always good to know the distance between 2 points.</p>
<p>Here's the SQL to get you started - notice the @dtor constant - this will get you the return value in kilometers.</p>
<p>DECLARE @dtor float,        <br />
        @lat1 decimal(19,6), <br />
        @lon1 decimal(19,6), <br />
        @lat2 decimal(19,6), <br />
        @lon2 decimal(19,6) <br />
set @dtor = 57.295800</p>
<p>set @lat1 = 44.11451 <br />
set @lon1 = -77.55602 </p>
<p>set @lat2 = 44.12451 <br />
set @lon2 = -78.51602 </p>
<p>--do the actual calculation</p>
<p>select  (6371 * acos(sin(@lat1/@dtor) * sin(@lat2/@dtor) + cos(@lat1/@dtor) * cos(@lat2/@dtor) * cos(@lon2/@dtor - @lon1/@dtor))) </p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Quick way to find problematic queries in sql 2005]]></title><author><![CDATA[Alexandru Cibotari]]></author><description><![CDATA[While reading sql server 2005 documentation I found an easy and quick (not the best) way to find the slowest queries and the queries which consumed most CPU time (total amount of CPU time, in microseconds, that was consumed by executions of this query since it was compiled).
<p>It’s a query that returns the following information: Object Type, Total CPU Time, Average CPU Time, DataBase Name, Object Name, SQL text is encrypted, SQL Text, Query Plan(Yes, you actually can see the query plan but for that you will have to run the query in SQL server Management Studio).</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Query text:</p>
<p>select res.* from </p>
<p>(</p>
<p>      select</p>
<p>            cp.objtype,            </p>
<p>            highest_cpu_queries.total_worker_time as TotalCPUTime,</p>
<p>            highest_cpu_queries.total_worker_time/highest_cpu_queries.execution_count AS AvgCPUTime,</p>
<p>            DB_Name(COALESCE(q.dbid, convert(smallint, plan_attributes.dbid))) as DatabaseName, </p>
<p>            OBJECT_NAME(q.objectid,q.dbid) ObjectName,     </p>
<p>            q.encrypted as SQLTextIsEncrypted, </p>
<p>            q.[text],</p>
<p>            qp.query_plan as QueryPlan</p>
<p>      from </p>
<p>            (</p>
<p>                  select   </p>
<p>                        qs.plan_handle, </p>
<p>                        qs.total_worker_time,</p>
<p>                        qs.execution_count</p>
<p>                  from </p>
<p>                        sys.dm_exec_query_stats qs </p>
<p>            ) as highest_cpu_queries </p>
<p>            cross apply sys.dm_exec_sql_text(plan_handle) as q     </p>
<p>            cross apply sys.dm_exec_query_plan(highest_cpu_queries.plan_handle) qp</p>
<p>            join sys.dm_exec_cached_plans cp on highest_cpu_queries.plan_handle = cp.plan_handle</p>
<p>            join </p>
<p>            (</p>
<p>                  select plan_handle, pvt.dbid, pvt.sql_handle</p>
<p>                  from (</p>
<p>                   select plan_handle, epa.attribute, epa.value </p>
<p>                   from sys.dm_exec_cached_plans </p>
<p>                         outer apply sys.dm_exec_plan_attributes(plan_handle) as epa</p>
<p>                  ) as ecpa </p>
<p>                  pivot (MAX(ecpa.value) for ecpa.attribute in ("dbid", "sql_handle")) as pvt</p>
<p>            ) plan_attributes on highest_cpu_queries.plan_handle = plan_attributes.plan_handle</p>
<p>) as res</p>
<p>where </p>
<p>      res.DatabaseName = 'Newman'</p>
<p>order by </p>
<p>      res.TotalCPUTime desc</p>
<p> </p>
<p>The query is using system views to extract statistics on cashed query plans. So if cashing is disabled, you just cleaned the cashe or there was no activity on the database then you may get no results.  </p>
<p>To indicate what database you want to inspect the query where clause must be modified (res.DataBaseName = ’Newman’).</p>
<p>As a starting point for writing the query I used the query from this article:</p>
<p>Troubleshooting Performance Problems in SQL Server 2005 - Inefficient query plan</p>
<p><a href="http://www.microsoft.com/technet/prodtechnol/sql/2005/tsprfprb.mspx" target="_blank">http://www.microsoft.com/technet/prodtechnol/sql/2005/tsprfprb.mspx</a></p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Control Output Caching and RegisterClientScriptInclude]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>Always remember that if you are using Control output caching, RegisterClientScriptInclude will NOT run if the used control is returning a cached version.</p>
<p>This also goes for any controls (user or custom) nested within your ascx.</p>
<p>The workaround?  You need to add the &lt;script&gt; tage manually in the markup, or, if you want to have the &lt;script&gt; in the header, put it into your aspx or master page.</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Binding an RSS Feed with an XmlDataSource]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>I'm sure this has been blogged on a zillion times before, but this is super easy.  Look!</p>
<p><a href="http://weblogs.asp.net/blogs/joelvarty/WindowsLiveWriter/BindinganRSSFeedwithanXmlDataSource_E8A7/image_2.png"><img width="458" height="158" style="border: 0px solid;   " alt="image" src="http://weblogs.asp.net/blogs/joelvarty/WindowsLiveWriter/BindinganRSSFeedwithanXmlDataSource_E8A7/image_thumb.png" /></a> </p>
<p>Here is the code as text (so you can copy and paste :)</p>
<p>&lt;asp:XmlDataSource ID="xmlRSS"             <br />
    DataFile="http://www.asp.net/community/articles/rss.ashx" <br />
    EnableCaching="true" <br />
    CacheDuration="3600"            <br />
    XPath="rss/channel/item" <br />
    runat="server"/&gt; <br />
&lt;asp:Repeater ID="rptRSS" runat="server" DataSourceID="xmlRSS"&gt; <br />
    &lt;ItemTemplate&gt; <br />
        &lt;p&gt; <br />
            &lt;a href='&lt;%#XPath("link")%&gt;' target="_blank"&gt;&lt;%#XPath("title")%&gt;&lt;/a&gt; <br />
        &lt;/p&gt; <br />
    &lt;/ItemTemplate&gt;        <br />
&lt;/asp:Repeater&gt;</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[For WCF Services hosted in non IIS apps - add permissions for a user to change the IIS namespace reservations]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>If you are hosting a WCF services in a console app, windows service or any other non-IIS application, you need to listen on a particular url address.  A normal user running an app or service doesn't have permission to do this unless that user is an admin (not a good thing for a wcf service).  So in order to grant permission to reserve the namespace, you need to run a little command.</p>
<p><b>For IIS 7 (Vista and Windows Server 2008)</b></p>
<p>netsh http add urlacl url=http://+:80/MyUri user=DOMAIN\user</p>
<p>The other commands are detailed here: <a href="http://msdn.microsoft.com/en-us/library/ms733768.aspx" target="_blank">http://msdn.microsoft.com/en-us/library/ms733768.aspx</a></p>
<p>The error you'll get if the user does not have this right is:</p>
<p>System.ServiceModel.AddressAccessDeniedException: HTTP could not register URL http://+:80/serviceurl/. Your process does not have access rights to this namespace (see <a href="http://go.microsoft.com/fwlink/?LinkId=70353" target="_blank">http://go.microsoft.com/fwlink/?LinkId=70353</a> for details). ---&gt; System.Net.HttpListenerException: Access is denied <br />
   at System.Net.HttpListener.AddAll() <br />
   at System.Net.HttpListener.Start() <br />
   at System.ServiceModel.Channels.SharedHttpTransportManager.OnOpen() <br />
   --- End of inner exception stack trace --- <br />
   at System.ServiceModel.Channels.SharedHttpTransportManager.OnOpen() <br />
   at System.ServiceModel.Channels.TransportManager.Open(TransportChannelListener channelListener) <br />
   at System.ServiceModel.Channels.TransportManagerContainer.Open(SelectTransportManagersCallback selectTransportManagerCallback) <br />
   at System.ServiceModel.Channels.TransportChannelListener.OnOpen(TimeSpan timeout) <br />
   at System.ServiceModel.Channels.HttpChannelListener.OnOpen(TimeSpan timeout) <br />
   at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) <br />
   at System.ServiceModel.Dispatcher.ChannelDispatcher.OnOpen(TimeSpan timeout) <br />
   at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) <br />
   at System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan timeout) <br />
   at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) <br />
   at System.ServiceModel.Channels.CommunicationObject.Open() <br />
   at ...</p>
<p>Incidentally, this is one of the best cases of a stacktrace containing a useful link that will help you solve the problem.</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Great Article on Usability from ComperWorld]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>The premise of the article is that usability is about more than simplicity, consistency and stability - it's about control.  Users are happiest when they are in control of the software and not the other way around.  </p>
<p>Usability is also about emotion.  Quoting from the article:</p>
<p>We've all experienced the full range of emotions while using gadgets, PCs, phones and software. At one end of the spectrum is a kind of thrilling joy, where something "just works." At the other end, there is a consuming rage. The amount of time your emotional state spends at one end of the spectrum rather than the other is the one and only thing that determines how much you "love" the product. </p>
<p>There is no better feeling than when software does what you tell it to or 'just works'. We will continue to give as much control as possible to Agility CMS users with each monthly update.  Let us know if there is something about Agility that puts you in a bad mood and we'll fix it!</p>
<p><a href="http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;taxonomyName=Hardware&amp;articleId=9124740&amp;taxonomyId=12&amp;pageNumber=1" target="_blank">Read the article on ComputerWorld.com</a></p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Why are scripts slow to load in Firefox when using Visual Studio’s built-in development Web server (a.k.a. Cassini)?]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>This is because of the Scripts on the page, and is not related to Agility per-se.</p>
<p><a href="http://weblogs.asp.net/bleroy/archive/2008/12/29/why-are-scripts-slow-to-load-in-firefox-when-using-visual-studio-s-built-in-development-web-server-a-k-a-cassini.aspx" target="_blank">http://weblogs.asp.net/bleroy/archive/2008/12/29/why-are-scripts-slow-to-load-in-firefox-when-using-visual-studio-s-built-in-development-web-server-a-k-a-cassini.aspx</a></p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Running Firefox2 and Firefox3 simultaneously]]></title><author><![CDATA[Osvel Legon]]></author><description><![CDATA[<p>As web developers we need frequently multiple browsers installed on our PC for testing purposes. Here there is one tip about having Firefox2 and Firefox3 on the same PC:</p>
<ol>
    <li>Download and Install Firefox2. </li>
    <li>Create a New Profile: You can create a profile exclusively for Firefox 3 in your Firefox 2 Profile Manager. Name it something like Firefox3. From your command prompt, run <i>c:\Program Files\Mozilla Firefox 2\firefox.exe -ProfileManager.</i> </li>
    <li>Download and Install Firefox 3. You have choose a <i>different installation folder </i>than the default one as choosing the default will overwrite your current Firefox 2. </li>
    <li>Start Firefox 3: Start Firefox 3 with the new Firefox3 profile you created. The key here is the ‘-no-remote’ parameter as it makes Firefox start a second Firefox.exe process with the new profile. From your command prompt, run <i>c:\Program Files\Mozilla Firefox 3\firefox.exe -P Firefox3 -no-remote.</i> </li>
</ol>
<p>You can run now your Firefox 2 simultaneously with Firefox 3 because they are both using different Profiles.</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Agility Tip: FireFox 3 is the Best Browser for Agility]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>In our Agility browser speed tests, FireFox comes out on top.   FireFox 3 in particular is the best bet.</p>
<p>Why?  Because Agility uses AJAX technology which is based on JavaScript, a client-side programming language.  Apparently the folks at Mozilla, the creators of FireFox, have built a better JavaScript processing engine than the competition.</p>
<p>Stuck with Internet Explorer?  Not a problem - it works great - but you might have to wait a second or two longer for some operations.</p>
<p><a href="http://www.mozilla.com/en-US/firefox/" target="_blank">Get FireFox 3 now!</a></p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Photoshop - Unknown data has been encountered reading layer "XXXXX"]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p>Have you ever recievied the error message when opening a PSD file in photoshop??:<br />
Unknow data has been encountered reading layer "XXXXX" and will be discarded. Continue? (Ok, Cancel, Read Composite Data)???</p>
<p>We all have!!!</p>
<p>I saw this message one to many times today.. so I finally googled it... turns out this happens when you are using Older versions of Photoshop with files made in newer versions of Photoshop....I don't think this affects the file at all but you are not able to edit the layers that use newer features.</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Agility Tip: Timed Release - Explained!]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>Timed release in Agility happens in 2 ways:</p>
<ol>
    <li>You can have a list of items and when the release/pull date comes around, different items in the list will be hidden or shown based on those dates. </li>
    <li>With a single item, you can publish it once and have it show up on the site, and the publish it AGAIN with release date in the future.  <br />
    <ul>
        <li>The current item will stay on the site until the most recent timed release item will be  released. </li>
    </ul>
    </li>
</ol>
<p>When previewing timed release, it only works when you are previewing the published version of the page, but it allows you to preview the page as it will appear in the future.</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[A Great Article CMS Usability]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>James Robertson from <a href="http://www.steptwo.com.au/" title="Step Two Designs" target="_blank">Step Two Designs</a> in Australia posted a great article on CMS usability.</p>
<p>Usability is a primary consideration for selecting your content management system.  The usability of a system is key to adoption within your organization and adoption is key to success for your CMS project.</p>
<p>CMS is inherently complex.  It is software that is used in an infinite number of ways to do countless different things for different user types.  It's not like you can buy a CMS system off the shelf, install in, and you're done.  Customization and Training are critical components.</p>
<p>The article highlights that vendor demos and sample accounts are two good ways to assess usability.  Vendor demos should use real world examples so that you see how the system works in reality, rather than oogle over the bells and whistles.  The problem with sample accounts is that they generally don't lead to real world scenarios so clients might get the wrong impression of your solution.  We have wrestled with the decision to post a sample account, but have decided to do so based on the assumption that those who sign up for the account have some idea of what they're getting themselves into.</p>
<p>At Edentity (the creators of Agility), we take the implementation and training of our CMS very seriously.  To me, a proper implementation is 80% of the usability battle because you are ultimately customizing the system for each site.  Also, no matter how simple your CMS system is, in reality it is a new concept for most users and is tailored to specific needs.  Because of this, training and customized documentation are paramount.</p>
<p>Other important factors that we consider is the number of clicks required for each task and the speed with which the system processes commands.  With a hosted model, you are at the mercy of your users' internet connection, so the processing speed is of the utmost importance.</p>
<p>We are constantly searching for ways to make our CMS easier to use.  Agility is unique in that we upgrade the system every month with suggestions from our users.  There is no better way to tune your system than to the needs of your users!</p>
<p>Read James' article here:</p>
<p><a href="http://www.steptwo.com.au/columntwo/practical-ways-to-assess-cms-usability/" target="_blank">http://www.steptwo.com.au/columntwo/practical-ways-to-assess-cms-usability/</a></p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Visual Studio 2008 Tips and Tricks]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[I came across this article on some cool Visual Studio 2008 Tips and Tricks. Basically little short cuts to make all our lives easier and more effiecent:<br />
<br />
<a href="http://smallworkarounds.blogspot.com/2008/12/visual-studio-2008-tips-tricks-for.html" title="http://smallworkarounds.blogspot.com/2008/12/visual-studio-2008-tips-tricks-for.html" target="_blank">http://smallworkarounds.blogspot.com/2008/12/visual-studio-2008-tips-tricks-for.html</a>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Agility Tip: Publish Content Faster]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>The staging and published modes in Agility are a great way to preview changes to the site before they go live.  However, as any Agility user knows, publishing content can sometimes take a few extra precious seconds that could be used for something more productive.</p>
<p>Here are a few tips for speeding up Agility content publishing:</p>
<p><b>Publish from the List</b></p>
<p>For content lists (linked content or shared content), publish content from the list by checking off the items and clicking the 'Publish' link - rather than publishing each individual item.  When you publish the individual items, you have to wait for the item to refresh as well as for the publish to take place.  This can take a particularly long time for modules that have multiple editor controls on them or a long version history.</p>
<p><b>Publish from the Page</b></p>
<p>If you are making changes to multiple modules on a page, complete all of the required changes to the modules, close the module dialog and Publish from the page.  This will simultaneously publish all of the changes to the modules on the page, as well as changes to the page itself.</p>
<p><b>Publish from the Recent Changes Report</b></p>
<p>The Recent Changes report is by far the fastest way to publish content in Agility.  </p>
<ol>
    <li>Make all of the required changes to your site without publishing any of them.  </li>
    <li>Click on the Reports link and choose the 'Recent Changes' report.  </li>
    <li>Use the controls on the report to select the 'Pending Publish' items in the desired time frame.   </li>
    <li>Select the items that you would like to publish and click the Publish link </li>
</ol>
<p>If you have other suggestions for how to speed things up, use the Submit Feedback link at the top of the Agility Content Manager window and we'll build it into a future release!</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[SQL Server 2000: Implicit conversion from data type nvarchar to money is not allowed]]></title><author><![CDATA[Henry Ji]]></author><description><![CDATA[<p><a href="mailto:?subject=Edentity Blog: SQL Server 2000: Implicit conversion from data type nvarchar to money is not allowed&amp;body=http://www.edentity.ca/whoweare/blog.aspx?BlogItemID=276"></a></p>
<p>&nbsp;</p>
<p>Last week there was an "Implicit conversion from data type nvarchar to money is not allowed. Use the CONVERT function to run this query." SQL bug in a web application using SQL Server 2000. The SQL error no is 257. Actually it is a known issue with SQL Server 2000 and it cannot be reproduced in SQL Server 2005. The fix is, as the message indicates, use the convert function to convert the value from data type nvarchar to money whenever you want to compare a nvarchar value with a money value or do something similiar. One example is as below -</p>
<p>Change a where clause</p>
<p>&nbsp;</p>
<p>WHERE </p>
<br />
<br />
<p>cost_nvarchar &gt;= a_money_value </p>
<p>To</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>WHERE</p>
<br />
<br />
<p>CONVERT(MONEY, cost_nvarchar) &gt;= a_money_value</p>
<br />
<br />
<p>.</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[JavaFX: Seriously?]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>When a new web technology is introduced, I always take notice and try to learn as much about it as possible.  Being ahead of the curve on web technology is, after all, our business and competitive advantage.</p>
<p>But when I saw an article about JavaFX on CNET today, all I can think of is "huh?"</p>
<p>JavaFX is positioned as a competitor to Adobe Flash and Microsoft Silverlight.  CEO Jonathan Schwartz claims that we'll be hearing more and more about it in the next 60 to 90 days.  Somehow I doubt it!</p>
<p>Don't get me wrong - Java is a solid platform that has a firm hold in the enterprise and on mobile phones - but I just don't think they get the desktop.  10 or 12 years ago, Java was in style as the platform of choice for writing rich internet applications and was even pegged as the Microsoft Windows killer.  Today, we couldn't be further from that reality with Flash and AJAX dominating and Silverlight posing a significant threat.</p>
<p>Sorry Sun, but you have a very steep hill to climb and I just don't think you have it in you.  I'll check back in 90 days :)</p>
<p><a href="http://news.cnet.com/8301-1001_3-10113196-92.html?tag=nl.e703" target="_blank">Read the CNET Article</a></p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Yahoo Query Language (YQL): Location ID vs WOEID for International Weather]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>OK - so I just started messing about with <a href="http://developer.yahoo.com/yql/" target="_blank">YQL on the Yahoo developer site</a>, using the <a href="http://developer.yahoo.com/yql/console/" target="_blank">YQL console</a> which is pretty awesome - it allows you to use a SQL variant to query the vast XML data sources.</p>
<p>I am interested in weather - in Canada, specifically.  Which sucks - because the weather part of the API is tuned to zip codes (US only), and even the RSS feed for Canadian locations use some other proprietary location code.  For example, here is the RSS for weather in Toronto:  <a href="http://xml.weather.yahoo.com/forecastrss?p=CAXX0504&amp;u=c" title="http://xml.weather.yahoo.com/forecastrss?p=CAXX0504&amp;u=c" target="_blank">http://xml.weather.yahoo.com/forecastrss?p=CAXX0504&amp;u=c</a>.</p>
<p>Why doesn't this use the WOEID (where on earth id) which is returned from THIS call in YQL:</p>
<p><a href="http://weblogs.asp.net/blogs/joelvarty/WindowsLiveWriter/Yah.LocationIDvsWOEIDforInternationalWea_C719/image_4.png"><img width="465" height="447" style="border: 0px solid;   " alt="image" src="http://weblogs.asp.net/blogs/joelvarty/WindowsLiveWriter/Yah.LocationIDvsWOEIDforInternationalWea_C719/image_thumb_1.png" /></a> </p>
<br />
<br />
<p>But you can't use that WOEID to get the weather - you need a zip code or a location id.  That stinks.  The call below works (somewhat) but it is somewhat insufficient, if you ask me.</p>
<br />
<br />
<p><a href="http://weblogs.asp.net/blogs/joelvarty/WindowsLiveWriter/Yah.LocationIDvsWOEIDforInternationalWea_C719/image_2.png"><img width="450" height="346" style="border: 0px solid;   " alt="image" src="http://weblogs.asp.net/blogs/joelvarty/WindowsLiveWriter/Yah.LocationIDvsWOEIDforInternationalWea_C719/image_thumb.png" /></a> </p>
<p>This whole thing is a bit half baked unless they add WOEID support to everything (maybe they did and I missed it...).</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Recursive Linq Functions]]></title><author><![CDATA[Osvel Legon]]></author><description><![CDATA[<p>You might have tried writing a recursive LINQ function and run into problems. For instance, the following doesn’t work because ‘factorial’ isn't defined when the right-hand side of the assignment is being evaluated:<br />
<br />
//Error: Use of unassigned local variable 'factorial'<br />
Func&lt;int, int&gt; factorial = n =&gt; n &lt; 2 ? 1 : n * factorial(n - 1);<br />
<br />
However, because you’re writing a lambda expression with Linq, you can use the Y combinator, a function that takes your code and returns a recursive version. For instance, using the Y combinator, you can write the following code:<br />
 <br />
Func&lt;int, int&gt; factorial = Extensions.YCombinator&lt;int, int&gt;(fact =&gt; n =&gt; n &lt; 2 ? 1 : n * fact(n - 1));</p>
<p>&nbsp;</p>
<p>Intuitively, the Y combinator works by calling your function on itself. For details, you can read either <a href="http://www.dreamsongs.com/Files/WhyOfY.pdf" target="_blank">The Why of Y</a> or <a href="http://en.wikipedia.org/wiki/Y_combinator" target="_blank">Fixed Point Combinator</a>.</p>
<p> </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Who called me?]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p>Ever wonder what method was calling your method and maybe causing an error?</p>
<p>This article describes a way to read the stack trace which could improve some logging scenarios.</p>
<p><a href="http://blogs.microsoft.co.il/blogs/kolbis/archive/2008/12/01/who-called-me.aspx" title="http://blogs.microsoft.co.il/blogs/kolbis/archive/2008/12/01/who-called-me.aspx" target="_blank">http://blogs.microsoft.co.il/blogs/kolbis/archive/2008/12/01/who-called-me.aspx</a></p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Huge Upside for Agility in SaaS Web Content Management Market]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>CMS Watch has posted their trend analysis of Software as a Service Web Content Management (SaaS WCM) Vendors for 2009.  The report focuses on the top three SaaS WCM tools out there: Clickability, CrownPeak and OmniUpdate.  Of the three, the first two compete more directly with Agility.</p>
<p>Overall, the report sounds positive on trends for SaaS in 2009.  Over the year, I have seen a few posts on CMS Wire that get me excited about our prospects as one of the only SaaS WCM systems on the market.</p>
<p>The report states that vendors will have to do more and make changes to keep up with customer demands.  This is good news for us because it means that none of the top three vendors have found the magic formula and no one is running away with the lead.</p>
<p>We will have an opporunity in 2009 to close the gap in public opinion between Agility and the current top 3.  We have better developer tools, better implementation services, and a solid, proven CMS system.  I would consider it a marketing failure if, in 12 months time, the name Agility isn't listed beside the other top vendors.</p>
<p>You can check out a summary of the CMS Watch analysis on the CMS Wire blog:</p>
<p><a href="http://www.cmswire.com/cms/web-cms/2009-trends-in-saas-web-content-management-003583.php" target="_blank">http://www.cmswire.com/cms/web-cms/2009-trends-in-saas-web-content-management-003583.php</a></p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Using the Select LINQ query operator with indexes]]></title><author><![CDATA[Osvel Legon]]></author><description><![CDATA[You can use <i>Select</i> with a two-parameter lambda expression. You know the version of Select that takes a single-parameter lambda well, but its counterpart is less known (and used).<br />
<br />
var books = SampleData.Books.Select((book, index) =&gt; new { index, book.Title })<br />
ObjectDumper.Write(books)<br />
<br />
The compiler automatically determines which version of the <i>Select</i> operator we want to use just by looking at the presence or absence of the <i>index</i> parameter.<br />
<br />
There is no support for this operator using the query expression syntax.]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[More Press for Agility]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>CMS Critic has posted a good summary article about Agility:</p>
<p><a href="http://cmscritic.com/agility-cms-powerful-hosted-cms-solution" target="_blank">http://cmscritic.com/agility-cms-powerful-hosted-cms-solution</a> </p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Google Now provides Geolocation based on users IP Address]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p><a href="" target="_blank"></a>It is starting to become the norm for websites to change their functionality or restrict functionality based on where users are coming from in the world. Google has a javascript API that allows us to figure out where a user is coming from based on their IP address. </p>
<p>Here is the API Reference:<br />
http://code.google.com/apis/ajax/documentation/#ClientLocation</p>
<p>Examples:</p>
<ul>
    <li><code>ClientLocation.latitude</code> — supplies the low resolution latitude associated with the client's IP address </li>
    <li><code>ClientLocation.longitude</code> — supplies the low resolution longitude associated with the client's IP address </li>
    <li><code>ClientLocation.address.city</code> — supplies the name of the city associated with the client's IP address </li>
    <li><code>ClientLocation.address.country</code> — supplies the name of the country associated with the client's IP address </li>
    <li><code>ClientLocation.address.country_code</code> — supplies the name of the <a href="http://www.iso.org/iso/iso-3166-1_decoding_table" target="_blank">ISO 3166-1</a> country code associated with the client's IP address </li>
    <li><code>ClientLocation.address.region</code> — supplies the country specific region name associated with the client's IP address </li>
</ul>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Microsoft Chart Controls]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>Here's something I wasn't expecting: Microsoft has released its own chart control.</p>
<p><a href="http://weblogs.asp.net/scottgu/archive/2008/11/24/new-asp-net-charting-control-lt-asp-chart-runat-quot-server-quot-gt.aspx" target="_blank"><img width="440" height="334" alt="" src="http://www.scottgu.com/blogposts/chart/step1.png" /></a> </p>
<p>Over the past few years, I have used the ComponentArt chart, Dundas chart and a couple others.  I know that the charting the Reporting Services was derived from the Dundas chart (I think) but this is pretty wild, because we now a free alternative to the 3rd party controls.</p>
<p>Scott Guthrie announced it (and discusses its usage ) here:</p>
<p><a href="http://weblogs.asp.net/scottgu/archive/2008/11/24/new-asp-net-charting-control-lt-asp-chart-runat-quot-server-quot-gt.aspx" title="http://weblogs.asp.net/scottgu/archive/2008/11/24/new-asp-net-charting-control-lt-asp-chart-runat-quot-server-quot-gt.aspx" target="_blank">http://weblogs.asp.net/scottgu/archive/2008/11/24/new-asp-net-charting-control-lt-asp-chart-runat-quot-server-quot-gt.aspx</a></p>
<p>This certainly makes the charting world a little more interesting...</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Change View Source application for IE]]></title><author><![CDATA[Osvel Legon]]></author><description><![CDATA[Are you frustrated at Internet Explorer's insistence on using Notepad when you click View Source? This <a href="http://www.iconico.com/download.aspx?app=ViewSourceEditor&amp;type=free" target="_blank">little application</a> let's you use any text editor instead of Notepad. I'm using <a href="http://notepad-plus.sourceforge.net/uk/site.htm" target="_blank">NotePad++</a> with Syntax Highlighting and Brace and Indent guideline Highlighting.]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Use Build Events to rebuild a Windows Service without having to manually stop/start it]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>When you are working on a Windows Service and you have it running locally from the build folder, you need to stop it before you can build it.  </p>
<p>This can be a real pain when you are building often</p>
<p>When you are working on this as part of a solution, it gets even worse, since you may need even need to rebuild the service, but it fails because you changed some dependant reference.</p>
<p>By using build events, we can stop and re-start the service whenever the project is built.</p>
<p><img width="421" height="255" style="border: 0px solid;   " alt="image" src="http://weblogs.asp.net/blogs/joelvarty/WindowsLiveWriter/UseBuildEventstorebuildaWindowsServicewi_D8C7/image_3.png" /> </p>
<p>As you can see above - we access the Build Events tab of the project properties screen.  Then use the "<b>net stop &lt;service name&gt;</b>" command line to stop the service from the Pre-build window.</p>
<p>In the Post-build window, use the "<b>net start &lt;service name&gt;"</b> command line to start the service back up again.</p>
<p>If there are any errors or other messages, you will see them in the output window....</p>
<br />
<br />
<p><a href="http://weblogs.asp.net/blogs/joelvarty/WindowsLiveWriter/UseBuildEventstorebuildaWindowsServicewi_D8C7/image_5.png"><img width="386" height="150" style="border: 0px solid;   " alt="image" src="http://weblogs.asp.net/blogs/joelvarty/WindowsLiveWriter/UseBuildEventstorebuildaWindowsServicewi_D8C7/image_thumb_1.png" /></a> </p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Silverlight Deep Zoom Demo - Obama Cover Images]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p>This is a cool little demo of Silverlights Deep Zoom functionality.</p>
<p><a href="http://bigpicture.vertigo.com/obama/" title="http://bigpicture.vertigo.com/obama/" target="_blank">http://bigpicture.vertigo.com/obama/</a></p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Steps to Enable jQuery Intellisense in VS 2008]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>Scott Guthrie has a blog post on this.  </p>
<p>Read the article, do what it says, then subscribe to his blog via RSS.</p>
<p><a href="http://weblogs.asp.net/scottgu/archive/2008/11/21/jquery-intellisense-in-vs-2008.aspx" target="_blank">http://weblogs.asp.net/scottgu/archive/2008/11/21/jquery-intellisense-in-vs-2008.aspx</a></p>
<p>Normal 0 false false false EN-US X-NONE X-NONE MicrosoftInternetExplorer4 </p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Standalone IE6 with filter support]]></title><author><![CDATA[Osvel Legon]]></author><description><![CDATA[<p>TredoSoft <a href="http://tredosoft.com/Multiple_IE" target="_blank">IE6 standalone</a> is really is a great solution to running both IE6 and IE7 on the same computer. </p>
<p>IE6 does not support PNG images like that, so we need to use filters ( <a href="http://tredosoft.com/Multiple_IE" target="_blank"></a><a href="http://support.microsoft.com/kb/294714" target="_blank">AlphaImageLoader Filter</a>, <a href="http://www.twinhelix.com/css/iepngfix/" target="_blank"></a><a href="http://www.twinhelix.com/css/iepngfix/" target="_blank"></a><a href="http://www.twinhelix.com/css/iepngfix/" target="_blank">Iepngfix.htc</a> ). The standalone version of IE6 lacks of filter support, so how do we fix that ? Upgrading the standalone IE6 to the SP1. Just download the<a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=5f155a7e-111f-4da7-9f14-024bf8fe1187&amp;displaylang=en" target="_blank"></a><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=5f155a7e-111f-4da7-9f14-024bf8fe1187&amp;displaylang=en" target="_blank"></a><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=5f155a7e-111f-4da7-9f14-024bf8fe1187&amp;displaylang=en" target="_blank"></a><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=5f155a7e-111f-4da7-9f14-024bf8fe1187&amp;displaylang=en" target="_blank">IE6 called SP1</a> which changes the behaviour of alphaimageloader and unzip the files to your IE6 standalone installation folder. </p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Response.Redirect Without the Exceptions]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>I was doing some load testing the other year and noticed one of the counters was going off the charts - ASP.Net exceptions.  I couldn't understand why my application, which was behaving fine in every other way, was throwing exceptions.</p>
<p>It turned out that I have been doing a Response.Redirect from the OnInit of a Page that was inheriting from a custom Page class which had a try/catch. The exception was a ThreadAbortException.  I quickly added a catch clause to grab the ThreadAbortException and ignore it, but what could I have done to avoid throwing an exception at all?</p>
<p>One of the most common calls in the whole of ASP.Net is Response.Redirect - which sends an HTTP 302 response back to the browser and does one of the most common things that all multi-threaded system do - throws a ThreadAbortException to exit the current Thread. </p>
<p>It turns out that there is another way to do this, assuming you can handle the conditional logic to ensure the current Response doesn't get mashed up before you send it to the browser.  It involves the little-known CompleteRequest() method, which essentially tells ASP.Net to skip any more events in the Pipeline, Handler or Module and just send the Request straight back to the client.</p>
<p>Here's my example of redirection method that doesn't throw an Exception.</p>
<p><a href="http://weblogs.asp.net/blogs/joelvarty/WindowsLiveWriter/Redirectingwiththeexception_6622/image_2.png"><img width="550" height="203" alt="" style="border: 0px solid;   " src="http://weblogs.asp.net/blogs/joelvarty/WindowsLiveWriter/Redirectingwiththeexception_6622/image_thumb.png" /></a></p>
<p>As you can see - the only "customized" piece of logic is where we set the StatusCode of the Response to 302 (the 300 series of response codes are all different kinds of redirects, but 302 seems to do the trick for whatever you need).  The rest of the method just sets properties of the Response object (like RedirectLocation).</p>
<p>The net effect?  The same as Response.Redirect - except no exception. </p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[ComponentArt Menu item text wrap]]></title><author><![CDATA[Osvel Legon]]></author><description><![CDATA[<p>ComponentArt Menu control automatically includes text in nobr tags, which force each item not to wrap. This can be undesirable with longer category names. To work around this, simply add the following property to the control </p>
<p>DefaultItemTextWrap="true"</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Windows Azure - Table Partitions and Data Structure]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p>The biggest feature of Windows Azure is Scalability. Everything that is built in Windows Azure was built to allow for Performance and Scalability. This is a good thing but it requires us to understand the architecture of the system when we are developing our code. </p>
<p>Windows Azure provides a "Basic" Table functionality so that data can be stored in structured schema's and be queried. With large data sets one might think this might become less scalable and performance might suffer. That would be an incorrect assumption. Windows Azure provides separation using "Partitions" which you define using a "Partition Key". </p>
<p>A quick example:</p>
<p><a href="http://knowledge.edentity.local/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/miskiw/AzurePartitionTable.jpg"><img alt="" style="border: 0px solid;   " src="http://knowledge.edentity.local/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/miskiw/AzurePartitionTable.jpg" /></a></p>
<p>Above is an example of a Table structure that may exist. There are 4 columns that make up the data in this Table structure. The important columns here are "ID" and "Company". In this case "Company" would be marked as the Partition Key on this table and ID would be marked as the Row Key. Row Keys must be unique within their partition, but can be repeated if in different partitions. </p>
<p>The real "Scalability Magic" here is with regards to the "Partitions". The data structure remains the same across both partitions but it is possible for 2 different partitions to exist on 2 different servers within the Windows Azure Cloud. This is how saleability is possible. In addition to allowing different partitions to exist on separate servers, Windows Azure Tables grantee that all data that exists within a table partition always exists on the same server. This allows the data to be scalable and provide maximum performance. See below for 2 possible server configuration scenarios.</p>
<p><a href="http://knowledge.edentity.local/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/miskiw/AzurePartitionServerConfig.jpg"><img alt="" style="border: 0px solid;   " src="http://knowledge.edentity.local/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/miskiw/AzurePartitionServerConfig.jpg" /></a></p>
<p>There is a drawback to this architecture though. Querying data between table partitions is always slower then query within a partition. This is simply due to the fact that the data needs to be merged from potentially one or more servers. But as long as we are aware of such a limitation we should be able to architect solutions that provide the best of both worlds (Choose your partitions wisely).</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Javascript IntelliSense FAQ]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>One of the biggest pain points that I find with Visual Studio 2008 is its inconsistency with IntelliSense (arguably, and ironically, its best feature).</p>
<p>In pages and master pages we can get IntelliSense with (properly) referenced javascript and css files.  We do NOT get this in User Controls.</p>
<p><a href="http://blogs.msdn.com/webdevtools/archive/2008/11/18/jscript-intellisense-faq.aspx" target="_blank"></a><a href="http://blogs.msdn.com/webdevtools/archive/2008/11/18/jscript-intellisense-faq.aspx" target="_blank"></a><a href="http://blogs.msdn.com/webdevtools/archive/2008/11/18/jscript-intellisense-faq.aspx" target="_blank">Here</a> is an FAQ from Jeff King that outlines some of this, and he hints at the notion of dealing with the issue of IntelliSense in User Controls.</p>
<p><a href="http://blogs.msdn.com/webdevtools/archive/2008/11/18/jscript-intellisense-faq.aspx" title="http://blogs.msdn.com/webdevtools/archive/2008/11/18/jscript-intellisense-faq.aspx" target="_blank">http://blogs.msdn.com/webdevtools/archive/2008/11/18/jscript-intellisense-faq.aspx</a></p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Journalists Posting About Agility]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>There's nothing more gratifying than seeing someone else say something about a product you build...</p>
<p>Check it out: <a href="http://www.cmswire.com/cms/web-cms/agility-cms-shoots-for-enhanced-productivity-003470.php" title="http://www.cmswire.com/cms/web-cms/agility-cms-shoots-for-enhanced-productivity-003470.php" target="_blank">http://www.cmswire.com/cms/web-cms/agility-cms-shoots-for-enhanced-productivity-003470.php</a></p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Firefox 3, Flash and the Dotted Border]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p>When you load a flash object in Firefox 3 (doesn't happen in IE7 or even Firefox 2) and click on the flash area in your browser you get a dotted line around the movie area. </p>
<p>To Solve this you can simply do the following:</p>
<pre>&lt;style type="text/css" media="screen"&gt;<br />object { outline:none; }<br />&lt;/style&gt;</pre>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Search Bots and URL Rewriting]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p>Web Search bots are generally stateless and the url rewriting requires state of some sort to be able to perform the switch. The above line ensures the search bots are able to process the rewritten url properly.</p>
<p>When you're doing sites with heavy URL rewriting or HTTP Modules that do funky redirects you need to make sure to include this line in the web.config:</p>
<p>&lt;system.web&gt;<br />
    &lt;authentication&gt;<br />
      &lt;forms cookieless="UseCookies" /&gt;<br />
    &lt;/authentication&gt;<br />
&lt;/system.web&gt;</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Silverlight Databinding – The Observable Collection]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>If you’re coming from the ASP.Net world and you want to start building silverlight controls, databinding is one those things that works somewhat the same, yet somewhat differently from the standard DataSource, DataBind() world that you may be used to.</p>
<p>For one thing, databinding in ASP.Net is done in a stateless way – once that binding operation is completed, it’s a done deal and if you want to change anything, now you have to manipulate the underlying controls that were created as a result of the data binding, or else change the underlying data objects and call DataBind() again.</p>
<p>That’s what we are used to – but it’s certainly not ideal. Enter Silverlight and the <b>ObservableCollection&lt;T&gt;</b>. This is a generic list type that allows you to put any object into it. This list implements <b>INotifyCollectionChanged</b>, such that it specifies and event that automatically notifys an underlying container when anything in the list has changed.</p>
<p>So that’s step 1 – use the <b>ObservableCollection</b> for you business object collection. Take note that by default, a WCF service proxy class in Silverlight will use this type of collection by default.</p>
<p>Then, in your actual data object classes, you need to implement the <b>INotifyPropertyChanged </b>on your data objects – this will allow you to raise the <b>PropertyChanged </b>event whenever the state of you object changes to the point where you want to notify the underlying collection or container that the state has changed.</p>
<p> <a href="http://weblogs.asp.net/blogs/joelvarty/WindowsLiveWriter/SilverlightDatabindingTheObservableColle_10060/personclass.png"><img width="644" height="408" alt="" style="border: 0px solid;   " src="http://weblogs.asp.net/blogs/joelvarty/WindowsLiveWriter/SilverlightDatabindingTheObservableColle_10060/personclass_thumb.png" /></a> </p>
<p>Remember too, that this stuff isn’t really “Silverlight” specific – it was originally designed for databinding in Xaml for WPF, but since Silverlight using Xaml and a subset of WPF, this is really just following along the same paradigm.</p>
<p><i>What does all this really mean?</i></p>
<p>It means that once you have set up your data collections and underlying types, you can now follow the normal databinding rules, but once you change the underlying data objects themselves, either by modifying the collection or a property of an item in the collection, then the UI object will be updated too. This will only happen when the BindingMode is done using OneWay (the default), or TwoWay. The OneTime binding mode ignores any changes to the underlying collections so you can safely change them later without worrying about your UI going all wonky (or which thread you are operating from).</p>
<p>Threading will become very important when you are updating in item in an ObservableCollection – you need to be aware of what thread you are currently running in and possible use the Dispatcher to make that change – since the Notifier events will bubble up to the UI synchronously from the call you are in. Luckily we can trigger the dispatch from an anonymous delegate, so we don’t need to make extraneous methods for these any more.</p>
<p><a href="http://weblogs.asp.net/blogs/joelvarty/WindowsLiveWriter/SilverlightDatabindingTheObservableColle_10060/dispatcher.png"><img width="644" height="239" alt="" style="border: 0px solid;   " src="http://weblogs.asp.net/blogs/joelvarty/WindowsLiveWriter/SilverlightDatabindingTheObservableColle_10060/dispatcher_thumb.png" /></a> </p>
<p>So that’s the basics of the underpinnings of data binding in Silverlight (and thus, in Xaml). I like that it follows a similar front-end markup/code behind model to ASP.Net, but allows us to take advantage of a stateful environment – especially for calling web service and REST APIs asynchronously.</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Windows Azure]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p>I think Windows Azure is going to become an important tool for us in the future as it comes out of development. It provides us with the ability to produce applications and services that have 100% up time, unlimited scalability, unlimited storage potential an unlimited processing power.</p>
<p>The platform is still in it's infancy right now but I think by being able to jump on this new technology we can start building services that will put us ahead of the curve when it becomes a main stream technology.</p>
<p>If your interested in the topic I recommend looking watching some of the presentations that were given this year at PDC:<br />
<a href="http://channel9.msdn.com/tags/pdc2008.azure/" target="_blank">http://channel9.msdn.com/tags/pdc2008.azure/</a></p>
<p>A good intro:<br />
<a href="http://channel9.msdn.com/pdc2008/ES01/" target="_blank">http://channel9.msdn.com/pdc2008/ES01/</a></p>
<p>Also a good RSS Feed to subscribe to with a good grouping of articles from the community:<br />
<a href="http://www.azurefeeds.com/" target="_blank">http://www.azurefeeds.com/</a></p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[LINQ Outer Join]]></title><author><![CDATA[Matthew Quinn]]></author><description><![CDATA[<p>The LINQ outer join is kind of unintuitive, here’s the code in case you ever find yourself needing it: </p>
<p>INNER JOIN:</p>
<p>var storyQuery = from s in pdc.Stories</p>
<p>                 join sa in pdc.StoryAssets on s.StoryID equals sa.StoryID</p>
<p>                 where s.Status == STORY_STATUS_APPROVED &amp;&amp; s.IsDeleted != true &amp;&amp; s.LanguageCode == languageCode</p>
<p>                 orderby s.AddedDate descending</p>
<p>                 select new { s.Property, sa.AnotherProperty };</p>
<p>OUTER JOIN:</p>
<p>var storyQuery = from s in pdc.Stories</p>
<p>                 join sa in pdc.StoryAssets on s.StoryID equals sa.StoryID <b>into outerJoin</b></p>
<p><b>                 from sa in outerJoin.DefaultIfEmpty()</b></p>
<p>                 where s.Status == STORY_STATUS_APPROVED &amp;&amp; s.IsDeleted != true &amp;&amp; s.LanguageCode == languageCode</p>
<p>                 orderby s.AddedDate descending</p>
<p>                 select new { s.Property, sa.AnotherProperty };</p>
<p>SQL OUTPUT:</p>
<p>SELECT [t0].[Property], [t1].[AnotherProperty] AS [AnotherProperty]</p>
<p>FROM [dbo].[Story] AS [t0]</p>
<p>LEFT OUTER JOIN [dbo].[StoryAssets] AS [t1] ON [t0].[StoryID] = [t1].[StoryID]</p>
<p>WHERE ([t0].[Status] = @p0) AND (NOT ([t0].[IsDeleted] = 1)) AND ([t0].[LanguageCode] = @p1)</p>
<p>ORDER BY [t0].[AddedDate] DESC</p>
<p>The resulting anonymous object will return null values where columns are empty.</p>
<p>&nbsp;</p>
<a href="http://edentity.ca/WhoWeAre/Blog.aspx">« Back to Blog Main </a>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[SQL Server 2005 Integration Services and SQL Server 2008 Integration Services]]></title><author><![CDATA[Henry Ji]]></author><description><![CDATA[<p>Recently I have been working on a SQL Server business intelligence project. The client uses SQL Server 2005. I created SSAS and SSIS projects using Visual Studio 2008 with SQL Server 2008 BIDS installed but soon I found out that SSIS packages developed in Visual Studio 2008 cannot be deployed to SQL Server 2005 Integration Services due to an error – “Storing or modifying packages in SQL Server requires the SSIS runtime and database to be the same version. Storing packages in earlier versions is not supported”, although SSAS project developed in Visual Studio 2008 can be deployed to SQL Server 2005 Analysis Services successfully.</p>
<p>As a new feature, SSIS 2008 supports both C# and VB as scripting languages. I used C# for a Script Component in a SSIS 2008 package and therefore I needed to migrate it to a SSIS 2005 project and rewrite the C# code in VB since SSIS 2005 only supports VB. Fortunately, I found a online VB-to-C# converter (<a href="http://www.developerfusion.com/tools/convert/csharp-to-vb/" target="_blank">http://www.developerfusion.com/tools/convert/csharp-to-vb/</a>), which worked very well for me. The problem was solved!</p>
<p>So, I summarized what I found as follows:</p>
<p>(1)    SSIS 2008 packages cannot be deployed to SSIS 2005, although SSAS 2008 project can be deployed to SSAS 2005.</p>
<p>(2)    SSIS 2008 supports both C# and VB as scripting languages but SSIS 2005 only supports VB.</p>
<p>(3)    If you have to migrate a SSIS 2008 package to SSIS 2005, you will find the following online VB-to-C# converter very useful: <a href="http://www.developerfusion.com/tools/convert/csharp-to-vb/" target="_blank">http://www.developerfusion.com/tools/convert/csharp-to-vb/</a>.</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Storage in the Cloud]]></title><author><![CDATA[Jon Voigt]]></author><description><![CDATA[<p>With the increase in file size, bandwidth performance requirements and global sites, new distributed online solutions are required up to ease our hosting pains.</p>
<p>Because web content is getting more and more rich each day, the size of files and the need for larger storage has never grown so quickly.  To add to this, content must be sent across the globe and needs to be lightening fast in order to satisfy clients demands.</p>
<p>One solution to this problem is to offload your large content or streaming files to distributed online storage partners in the cloud.  There hosting fees are normally much cheaper when you consider the cost of drives and bandwidth and they are distributed throughout the globe in order to accommodate end users in all reaches of the internet.  </p>
<p>A few players in this market include Amazon's S3, Akamai, Niranix, FleiScale and Microsoft's SSDS (SQL Server Data Services)...</p>
<p>These all have their pros and cons and are better suited for specific situations but all can greatly help your site if you are willing to build in the architecture to distribute your application.  All of these in general can help with performance, global balancing, redundancy and usually a cost savings.</p>
<p>Next time you have a need to host large files or have a global site with lots of resource files, I recommend you look into these solutions.  In my opinion, all resource files for all sites should be deployed to distributed systems but until the management and integration of these all come together it may be to much work for the average developer.</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[LINQ: Dynamically chaining "or" clauses with PredicateBuilder]]></title><author><![CDATA[Matthew Quinn]]></author><description><![CDATA[<p>Awesome find here. For the search functionality  I'm working on, the user put in keywords and matches were returned if any of the keywords were matched – so “or” clauses were needed. Using standard LINQ stuff, this is really tough to do dynamically. For a while the only results I found required you to sacrifice LINQ’s compile-time type checking </p>
<p>Finally found an awesome solution:</p>
<p><a href="http://www.albahari.com/nutshell/predicatebuilder.aspx">http://www.albahari.com/nutshell/predicatebuilder.aspx</a></p>
<p>It’s a class called PredicateBuilder which helps you assemble And or Or clauses. I gave it a test run and the SQL it outputs is exactly what you would hope. Take a look at PredicateBuilder’s source, it’s a pretty enlightening look at how the Expressions library works in case we want to code anything like this ourselves. The class is included in a set of extensions called LINQKit which may be worth a look as well if you run into other LINQ scenarios: </p>
<p><a href="http://www.albahari.com/nutshell/linqkit.aspx">http://www.albahari.com/nutshell/linqkit.aspx</a></p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Nested lambda expressions for aggregate functions]]></title><author><![CDATA[Matthew Quinn]]></author><description><![CDATA[<p>Today I found another example of LINQ’s potential for tidy and efficient code. In my current project we needed to sort <b>Story</b> objects based on their user rating. </p>
<p>These ratings were stored in another table (<b>StoryRatings</b>, linked by foreign key) in multiple rows which would need to be averaged. Using nested lambda expressions, this can be accomplished in a single line: </p>
<blockquote dir="ltr">
<p>//Instantiate IQueryable</p>
<p>var storyQuery = from s in pdc.Stories</p>
<p>                 where s.Status == STORY_STATUS_APPROVED &amp;&amp; s.LanguageCode == languageCode</p>
<p>                 orderby s.AddedDate descending</p>
<p>                 select s;</p>
<p>//Order the returned Stories based on the chosen sort order</p>
<p>. . .</p>
<p>else if (sort == "ranking")</p>
<p>{</p>
<p>    //Sorting by an aggregate function on a linked table with a nested lambda expression</p>
<p>    storyQuery = storyQuery.OrderByDescending(s =&gt; s.StoryRatings.Average(sr =&gt; sr.Rating));</p>
<p>}</p>
</blockquote>
<p>The SQL code that LINQ generates for this operation once it is enumerated is not only clean, but it also takes into account the original sort that was applied when first instantiating <b>storyQuery</b>. (I’ve removed some of the column names for space, but it selects them all).</p>
<blockquote dir="ltr">
<p>{SELECT [t0].[StoryID], [t0].[Title], ...</p>
<p>FROM [dbo].[Story] AS [t0]</p>
<p>WHERE ([t0].[Status] = @p0) AND ([t0].[LanguageCode] = @p1)</p>
<p>ORDER BY (</p>
<p>    SELECT AVG([t1].[Rating])</p>
<p>    FROM [dbo].[StoryRatings] AS [t1]</p>
<p>    WHERE [t1].[StoryID] = [t0].[StoryID]</p>
<p>    ) DESC, [t0].[AddedDate] DESC</p>
<p>}</p>
</blockquote>
<p>Extremely handy stuff. Yet another way that LINQ’s flexibility can speed up the coding process.</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Software-as-a-Service Going Strong: Gartner]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>This is good news for us as we continue to expand the reach of our hosted Agility CMS software.</p>
<p>We've seen the growth first hand as more and more customers are jumping past the 'hmm.. how does this Software-as-a-Service thing work" conversation and embracing the power of hosted software.</p>
<p>The benefits are a-plenty.  The best known one is the freedom from managing your own software and hardware infrastructure (and the headaches that come with it).  My favourite one though is the ability of the software vendor to make continuous improvements to the software based on feedback from the users.  This is a very powerful thing that is beginning to manifest itself with Agility to the delight of our users.</p>
<p>CMS Wire has some interesting info on Gartner's claims:</p>
<blockquote dir="ltr">
<p>"<a href="http://www.cmswire.com/news/topic/gartner">Gartner</a> predicts [SaaS] will surpass US$ 6.4 billion in 2008, a <b>27% increase</b> from 2007 revenue. Moreover, the market is <b>expected to more than double</b> with SaaS revenue reaching US$ 14.8 billion in 2012."</p>
</blockquote>
<p dir="ltr">You can read their article in full here:</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Connect to VPN with one click]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>For all those VPN connectors, this trick is amazing! Especially helpful for those of you on Vista: </p>
<p><a href="http://weblogs.asp.net/jgalloway/archive/2007/09/05/easier-vpn-connections-from-a-windows-desktop.aspx">http://weblogs.asp.net/jgalloway/archive/2007/09/05/easier-vpn-connections-from-a-windows-desktop.aspx</a></p>
<p>Create a .bat file with the connect command line given and another one with the disconnect call, add them to your Start menu, and you have one-click VPN!</p>
<p>Note that you have to put your user name in “” in the command. E.g.:</p>
<p>Rasdial edentity “michael assad” mikesPassword /domain:Edentity</p>
<p>There is a security issue because the password will be stored in plain text in the .bat file.  To correct this as much as possible, add the line 'echo off' to the top of the .bat file (so the rasdial command doesn't display when the script is run) and save the .bat file to a hidden folder and hide the file itself.</p>
<p>Enjoy!</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[A post on the Agility CMS blog...]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>I thought you might be interested in a post I have on another blog - this one for the Agility CMS that I work on with Edentity.</p>
<p>This post deals with the notion of "Cloud Computing" and talks about how a hosted CMS fits into that model.</p>
<p>You can read this post here: <a href="http://www.agilitycms.com/Blog.aspx?BlogItemID=169">Agility is in the Cloud</a>.</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Linq - Attach an entity that is not new, perhaps having been loaded from another DataContext.]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p>LINQ can be super annoying when being developed in a Multi Layered environment. Until I found this post I thought Passing objects without a data context would make using LINQ in the data access layer basically useless...</p>
<p><a href="http://geekswithblogs.net/michelotti/archive/2007/12/25/117984.aspx">http://geekswithblogs.net/michelotti/archive/2007/12/25/117984.aspx</a></p>
<p> Basically... the problem I was having was I had an object that had foreign keys to other tables. By setting the foreign key on the object outside of a data context When doing an update or even an insert LINQ thinks the associated table object would be populated as well.. eventhough I just want to assign the id to create the link. </p>
<p> You are able to "Detach" these objects though... which saved me in this case:</p>
<pre> 12: public partial class Address</pre>
<pre> 13: {</pre>
<pre> 14: public void Detach()</pre>
<pre> 15: {</pre>
<pre> 16: this._AddressType = default(EntityRef&lt;AddressType&gt;);</pre>
<pre> 17: this._State = default(EntityRef&lt;State&gt;);</pre>
<pre> 18: }</pre>
<pre> 19: }<br /><br /><br /><br /><br /><br /><br />Mike</pre>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[What is Touchless?]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p>This is pretty damn cool. </p>
<p>It’s an sdk to make multi touch applications with a web cam.. all open source… now this could be fun… watch the video </p>
<p> <a href="http://www.codeplex.com/touchless">http://www.codeplex.com/touchless</a></p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Where is the Online Voting?]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Working day in and day out building online tools, technologies and websites makes the voting process seem extremely archaic.</p>
<p>First of all, the address on the voter card for my polling station was wrong.  Thankfully, someone had thought to put a sign on the door of the wrong address directing traffic to the correct place which was a few blocks away.</p>
<p>No biggy.  I don't mind taking a walk around the block.</p>
<p>When I got to the polling station, a kind woman offered to help so I showed her my voter card.  She looked at a peice of paper and send me to "the third desk on the right", motioning with her hand.  </p>
<p>I happily walked over to the third desk on the right and handed the nice man my voter card.  He looked at it and said "because your name starts with 'A', your desk is that one there across the room".</p>
<p>I'm thinking "hmm.. it's 9:15 PM and these people have been directing traffic for about 12 hours now.  You'd think they would know where the right table was for the A's!!".</p>
<p>So I walk over to the desk across the room, hand the nice lady my card and watch as she methodically finds my name on the list and crosses is off with a ruler and pen.  </p>
<p>No wonder so few people go out to vote.</p>
<p>Rather than spend millions of dollars on an election that we didn't need, wouldn't it be neat if the government invested in upgrading the voting system?   Imagine logging into a government website with your social insurance number, a password, and an identity question, clicking a button, and you're done.  With voting that simple, the turnout should easily double providing a huge boost to democracy (and a day of much needed r&amp;r for the hard working election volunteers).</p>
<p>Somehow the world has moved forward 20 years and left the voting process behind.  If I had my say, this should be a huge priority for the next election.  I mean - it's gotta happen sometime... doesn't it?</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Silverlight 2 - Finally a version that can change the world!]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>Yes, folks - that title is not a joke.  Silverlight can completely change how we think about the web.  We're not writing activeX controls anymore, we're not coding "ActionScript" on a "Timeline" - we're talking about something revolutionary here.</p>
<p>If you look at the underlying premises of Asp.Net - Markup with Code-behind, and how well it has been received by the developer community, then the same paradigm in the WPF world has been waiting for Silverlight 2 to explode onto the scene.</p>
<p><em>Why will it succeed?  We've had 1.0 for awhile now, and it hasn't "changed the world."  What gives?</em></p>
<p>This version brings "everything else" that 1.0 forgot.  </p>
<ul>
    <li>We have actual layout managers
    <ul>
        <li>like StackPanel and Grid - we won't talk about how the GridLayout manager doesn’t compare to an HTML table as much as it is purported to. </li>
        <li>and a ton of Controls to work with and extend. </li>
    </ul>
    </li>
    <li>We have real language support -
    <ul>
        <li>C#, boys and girls.  Go play. </li>
        <li>And some other languages too.  Whatever. </li>
    </ul>
    </li>
    <li>Cross Domain Network requests use the same policy file as Flash
    <ul>
        <li>Here's where being just like Flash actually matters - since so many people have this policy file in place to allow for cross-domain requests, using it in Silverlight really makes sense. </li>
        <li>These networks requests can be truly asynchronous.  Not "fake" asynchronous like JavaScript.  </li>
        <li>This doesn't compete with AJAX - it is just way better. </li>
    </ul>
    </li>
    <li>LINQ support.
    <ul>
        <li>This is becoming a staple of .Net development.  I have stopped bothering to follow ActionScript, but I am fairly sure it can't do LINQ.  If you are a Flash developer, and you want to do "real" development, look long and hard at Silverlight 2. </li>
        <li>This is demonstrated by Scott Guthrie in his blog tutorial on Silverlight 2. </li>
    </ul>
    </li>
    <li>We have actual TOOL SUPPORT (I'm getting more excited as I write this - calm down, man.  Calm down.)
    <ul>
        <li>The Visual Studio 2008 add-in works like a charm.  No problems reported from me except for a few Intellisense quirks.  This is a far cry from the crashy crappiness that saw me flounder around with the 1.0 tools for about an hour before I decided to wait for 2.0 to get serious about Silverlight development. </li>
    </ul>
    </li>
    <li>The designer tools allow designers to be designers and developers to be.... developers
    <ul>
        <li>The code-behind model is supplemented with the style-templating mechansim that is not too dissimilar to Asp.Net skins, except it allow more declarative control over how and when certain properties (whether they be style related or Content related) can be set. </li>
    </ul>
    </li>
</ul>
<p>Download the add-on for Visual Studio 2008 <a href="http://msdn.microsoft.com/en-us/silverlight/default.aspx">here</a> - you need SP1 for this, so get that first.</p>
<p>Scott's tutorial post series is <a href="http://weblogs.asp.net/scottgu/pages/silverlight-2-end-to-end-tutorial-building-a-digg-search-client.aspx">here</a>.  Read this first.  Then read it again and think about what it all MEANS.</p>
<p> My final thoughts:</p>
<ul>
    <li>This is the big chance for WPF development to finally supplant Windows Forms and take us out of the Visual Basic style of UI forever. 
    <ul>
        <li>This means that all of the crappy-looking corporate apps that people argue bring so much legacy value to desktop, can finally be re-written in a way that doesn't stink, and in a way that doesn't exclude non-Windows machines.  </li>
    </ul>
    </li>
    <li>We can "sort of" share code between Silverlight and WPF Applications.
    <ul>
        <li>Make this easier, Microsoft.  </li>
        <li>Go back in time and do this yesterday, then tell me how I missed this in the documentation. </li>
    </ul>
    </li>
    <li>Don't follow the examples when you see declarative event binding
    <ul>
        <li>This is my worst pet peave of Asp.Net and I have started seeing it in virtually every XAML demo app out there. </li>
        <li>Declare your events in the code-behind, not the XAML markup, folks.  Think about how hard it will be maintain code that has a ton of this event bindings - you'll go insane with the ctrl-F to locate where your events are referencing, and then you'll wish you'd listened to me. </li>
        <li>I'm guessing the exception to this is where a control that you want to bind an event to is inside a data-bound template.  Then you're allowed to bind the event in the markup.  I guess. </li>
    </ul>
    </li>
</ul>
<p>When will it take over the world?  </p>
<p>In my opinion, as soon as everyone else realizes that the absolute BEST video streaming technology just got paired with the absolute BEST programming support is available in an a cross platform browser extension, this thing will take off big time.  </p>
<p>I'll be putting it into my apps as soon as I can.</p>
<p>Rock on - joel.</p>]]></description><pubDate>5/19/2009 3:12:26 PM</pubDate></item><item><title><![CDATA[Nice LINQ to SQL Command Reference]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p>An easy way to quickly find LINQ properties and methods.</p>
<p><a href="http://msdn.microsoft.com/en-us/vbasic/bb688085.aspx" title="http://msdn.microsoft.com/en-us/vbasic/bb688085.aspx" target="_blank">http://msdn.microsoft.com/en-us/vbasic/bb688085.aspx</a> </p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[URL Rewriting Made Easy with .NET 3.5 SP1]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p>Wallace B. McClure, author of several books on ASP.NET programming, offers this solution for routing with web forms.</p>
<p><a href="http://morewally.com/cs/blogs/wallym/archive/2008/10/08/asp-net-podcast-show-125-routing-with-webforms.aspx">http://morewally.com/cs/blogs/wallym/archive/2008/10/08/asp-net-podcast-show-125-routing-with-webforms.aspx</a></p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[Pluggable ASP.NET CacheManager]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p>This is so simple but you got to love the simple things!</p>
<p><a href="http://john-sheehan.com/blog/index.php/pluggable-aspnet-cachemanager/">http://john-sheehan.com/blog/index.php/pluggable-aspnet-cachemanager/</a><br />
<br />
I particularly like the ability to swap out the providers to perform different actions.. could easily be built to read from anything (file system, db)… </p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[Introducing the Microsoft Web Platform]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>It's now easier than ever to get set up and developing on the Microsoft ASP.NET Platform.</p>
<p>Microsoft has released the Web Platform, a single installer for setting up the .NET runtime, application framework, database server, tools, Silverlight and IIS extensions - everything a developer needs to start building websites and web applications with ASP.NET.</p>
<p>It's great to see Microsoft continuing to push the envelope when it comes to providing the best possible tools for developers.</p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[Back to Earth]]></title><author><![CDATA[Steven Pontisso]]></author><description><![CDATA[<p>In a world where celebrities are going back into orbit for a second time, the Chinese are walking in space, and Investment Banks are going up in smoke, Edentity is turning its attention back to Earth.  </p>
<p>Back in early September, we worked with Earth Rangers on the re-launch of their websites earthrangers.org and earthrangers.com.  This is another Agility CMS deployment we’re particularly proud of.  All the content on the corporate site (earthrangers.org) was 100% entered by Earth Rangers staff (after we delivered the shell of the site) with minimal assistance from us.  </p>
<p>More and more of our clients are taking this option, and Agility is proving to be a user-friendly tool for them to use.  Perhaps more than the site itself, Earth Rangers is a cause we’re proud to support.  Their mission is to ignite passion and motivate kids through their school shows and online programs, to participate in activities that preserve wildlife and our planet.  As a parent to a two-year old, I think setting the right example for kids, and giving them the knowledge and tools they need to preserve their planet is right on the money.  </p>
<p>Speaking of money, we also did a Paypal integration for donations on this site.  So if you like the idea of supporting this cause too, head on over to Earthrangers.org and make a donation! At Edentity, we care a lot about the environment, and we’ve got many more “green” initiatives in the pipeline.  So stay tuned!</p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[Big Brands and Social Media Coming Together]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Our clients are asking for it and so is the public - "93 percent of Americans believe a company should have a presence in social media..." - Boston Globe</p>
<p>For the past year or so, our adverising and interactive marketing clients have been asking for more and more social functionality.  It started out small with tagging, bookmarking, sharing and commenting, and is evolving to include full-fledged social sites that engage and emerse customers in their clients' brand.</p>
<p><a href="http://my.cineplex.com/" target="_blank">Cineplex</a> has added an online community, <a href="http://www.unclebens.ca/" target="_blank">Uncle Ben's</a> is using sharing mechanisms for recipes, <a href="http://www.earthrangers.com/" target="_blank">Earth Rangers</a> is building an environmentally concious community for kids, and there is a lot more in the pipeline.</p>
<p>We have been using tools like <a href="http://www.communityserver.com/" target="_blank">Community Server</a> and <a href="http://www.pluck.com/" target="_blank">Pluck</a> to handle the social media and community aspects, while integrating with <a href="http://www.agilitycms.com/" target="_blank">Agility CMS</a> to handle traditional content management and workflow.</p>
<p>There are countless new ways for brands to communicate with their customers online.  Ad agencies are taking notice and Edentity is putting it together.</p>
<p><a href="http://www.readwriteweb.com/archives/study_social_media_presence.php" target="_blank">Comprehensive article on Read Write Web</a></p>
<p><a href="http://www.kickapps.com/blog/your-customers-want-you-to-be-social/" target="_blank">Comments from KickApps</a></p>
<p><a href="http://www.cmswire.com/cms/enterprise-20/93-of-americans-want-companies-to-be-social-003232.php" target="_blank">Comments from CMS Wire</a></p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[The Evolution of Client Side Data Binding in ASP.NET]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>Client side data binding, where we call a web service method via JavaScript and attach the resulting data to visual elements, is beginning to get a real foothold in this industry.</p>
<p>And its about to take a quantum leap forward in terms of everyday usability in ways that developers can easy understand and implement.</p>
<p>Right now, there are a few controls from the Ajax Toolkit that take advantage of this, and most of the controls and extenders have some sort on "dynamic" capability where a single parameter can be sent to a web service method and another string returned that will be directly placed inside a specified element on the client side.  This is pretty nice,  because it is convenient, but it means that we have to code html inside our web service output - not the kind of separation of data/logic and UI that we may have wanted.</p>
<p>There are also some 3rd party controls that take good advantage of their own proprietary client-side binding.  An excellent example of this is the <a href="http://www.componentart.com/" target="_blank">ComponentArt.Web.UI</a> controls.  Their Tree, Grid, and other controls in the suite have the capability to be put into "Web Service Mode" where you can specify a Web Service (it must be referenced as a Service in the ScriptManager) and a Method for selecting, updating, deleting, etc.  </p>
<p>These methods have specific signatures with custom request/response objects, but in general they allow you to bind regular data objects to the UI controls with a little effort as binding a control using regular code-behind.  </p>
<p>On top of that, they have developed a system of client-side templating that allows us to easily transform the output of the data calls to html markup.</p>
<p>I think ComponentArt broke new ground and this technology, and many other controls suites, like Telerik, have followed with their own implementations.  Personally, I recommend using the ComponentArt controls because they performs beautifully and look fantastic.</p>
<p>What a great idea  - why not build this into the base Asp.Net capabilities?</p>
<p><a href="http://weblogs.asp.net/bleroy" target="_blank">Bertrand Le Roy</a> has blogged on this very capability, which is available in the preview of the ASP.NET 4.  The first one show how client templates can be used to do client side bindings:</p>
<p><a href="http://weblogs.asp.net/bleroy/archive/2008/07/30/using-client-templates-part-1.aspx" target="_blank">http://weblogs.asp.net/bleroy/archive/2008/07/30/using-client-templates-part-1.aspx</a></p>
<p>This next article show the “live bindings” capabilities which is WICKED, and shows how much benefit we'll get from seeing this put into the plumbing of ASP.NET Ajax itself, and not just a proprietary implementation from a 3rd party, however advanced it may be.</p>
<p><a href="http://weblogs.asp.net/bleroy/archive/2008/09/02/using-client-templates-part-2-live-bindings.aspx" target="_blank">http://weblogs.asp.net/bleroy/archive/2008/09/02/using-client-templates-part-2-live-bindings.aspx</a></p>
<p>I believe this kind of technology will take us much further into the realm of rich client apps - where our client side code and can completely and efficiently control the bulk of the user interface without having to reload the main pages except for complete context shifts.</p>
<p>As well, I believe that the more client programming we can do, the better we will be able to support technologies like Silverlight and Flash that tend to have fairly long loading times, but if the page does not reload, can be better utilized for their advanced UI and media capabilities.</p>
<p>More later - joel</p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[JavaScript in 'A' tags: # vs javascript:void(0)]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>Often times when we get a set of html templates from a designer, we tend to see a lot of this:</p>
<p><a href="http://weblogs.asp.net/blogs/joelvarty/WindowsLiveWriter/Javascriptinatagsvsjavascriptvoid0_10232/image_6.png"><img width="499" height="51" style="border: 0px solid;   " alt="image" src="http://weblogs.asp.net/blogs/joelvarty/WindowsLiveWriter/Javascriptinatagsvsjavascriptvoid0_10232/image_thumb.png" /></a> </p>
<p>Moreover, we tend to leave these href="#" attributes in place when we add onclick events to these tags so that we don't have to add an CSS to it in order for the anchor to behave like a normal anchor.</p>
<br />
<br />
<p>We end up with stuff that looks like one of these:</p>
<p><a href="http://weblogs.asp.net/blogs/joelvarty/WindowsLiveWriter/Javascriptinatagsvsjavascriptvoid0_10232/image_4.png"><img width="457" height="145" style="border: 0px solid;   " alt="image" src="http://weblogs.asp.net/blogs/joelvarty/WindowsLiveWriter/Javascriptinatagsvsjavascriptvoid0_10232/image_thumb_1.png" /></a> </p>
<p>So why is this troublesome?</p>
<p>Well, imagine one of these links on a page or element that was scrolled down or to the side - unless you had returned false in the click event, the href="#" is going to behave like it should and scroll to the top left of the scrolled element.  </p>
<p>Oops.  Probably not what we intended for the user.</p>
<p>Easy fix?  Do one the following:</p>
<p><a href="http://weblogs.asp.net/blogs/joelvarty/WindowsLiveWriter/Javascriptinatagsvsjavascriptvoid0_10232/image_8.png"><img width="579" height="113" style="border: 0px solid;   " alt="image" src="http://weblogs.asp.net/blogs/joelvarty/WindowsLiveWriter/Javascriptinatagsvsjavascriptvoid0_10232/image_thumb_3.png" /></a> </p>
<p>The first tag uses the void() method and thus has no affect on the scroll position; even if the myClickHandler() event fails, everything will stay put in terms of the scroll.</p>
<p>The second tag places the event handler directly in the href attribute.  This works, but it isn't very useful if you want to able to change the onclick event programmatically, or to do other client side event binding (using something like jQuery), which rocks.</p>
<p>The third line also will avoid the scroll-jump issue - but <i>only if the myClickHandler() method doesn't fail!</i> Even though we don't write code with intention of it failing, having a page potentially scroll-jump all over the place is not a good example of the kind of graceful degradation that we should be incorporating into our pages....</p>
<p>Hope this helps a bit - joel.</p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[Start using jQuery in your Asp.Net apps!]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>If you were waiting for this to be incorporated into Asp.Net AJAX, you have no more excuses.  Scott Guthrie today announced in his blog that <a href="http://weblogs.asp.net/scottgu/archive/2008/09/28/jquery-and-microsoft.aspx" target="_blank">Microsoft will ship jQuery support with Visual Studio</a>, and they will provide a vanilla and "intellisense-annotated versions,"  allowing for complete cooperation with the usage of the package.</p>
<p>This is a great feature to see supported, but it also another awesome indication of Microsoft's growing support for open source products.  </p>
<p>I have to believe that Scott Guthry is driving this forward, at least with the Asp.Net group, and I can't wait to see what kinds of integration people can come up with in terms of building intermingled jQuery code and Asp.Net Ajax controls and extenders.</p>
<p>Along with that, I want to pass on a link to a set of <a href="http://www.smashingmagazine.com/2008/09/16/jquery-examples-and-best-practices/" target="_blank">jQuery best-practices</a> that I thought was pretty good usage tips, but also highlighted a direct change to how I have personally been coding for quite a while.</p>
<p>Normally, with JavaScript, we tend to declare our client event binding directly in the markup - usually as a by-product of attributes such as OnClientClick and things of that nature,</p>
<p>But if read the best practices for jQuery, it demonstrates how to very easily add a client event from JavaScript code - making the client-side code much easier to work with and also falling closer into line with how I like to bind server events.</p>
<p>Summing up - I believe jQuery use is about to explode on the Asp.Net development scene, and non too soon!</p>
<p> -joel</p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[Baking jQuery into Visual Studio]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Last week Scott Guthrie, the inventor of ASP.NET, announced that jQuery will be built into Visual Studio along with enhancements. </p>
<p>jQuery is an open source JavaScript library developed at MIT that allows web developers to create stunning front-end animations to objects in an HTML page without the tedious, time consuming process of hand-coding JavaScript.  </p>
<p>This is exciting news for all ASP.NET developers because it puts the power of jQuery at their fingertips.  jQuery will be automatically available to ASP.NET development projects along with additions to the library and intellisense.</p>
<p>It also shows that Microsoft is not afraid to tap into the open source community if there is something available to enhance their offering.  </p>
<p><a href="http://jquery.com/" target="_blank">Check out jQuery</a></p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[Visual Studio 2010 and .NET Framework 4.0]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Microsoft has released some information about the latest version of their web platform and flagship development tool.</p>
<p>Visual Studio 2010?  Sounds futuristic!  As always, we'll have our hands on this as soon as they post a beta for download.</p>
<p>Highlights of the latest release include (source MSDN):</p>
<p><strong>Democratizing Application Lifecycle Management</strong><br />
Application Lifecycle Management (ALM) crosses many roles within an organization and traditionally not every one of the roles has been an equal player in the process. Visual Studio Team System 2010 continues to build the platform for functional equality and shared commitment across an organization’s ALM process. <br />
<strong><br />
Enabling emerging trends</strong><br />
Every year the industry develops new technologies and new trends. With Visual Studio 2010, Microsoft delivers tooling and framework support for the latest innovations in application architecture, development and deployment. <br />
<strong><br />
Inspiring developer delight</strong><br />
Ever since the first release of Visual Studio, Microsoft has set the bar for developer productivity and flexibility. Visual Studio 2010 continues to deliver on the core developer experience by significantly improving upon it for roles involved with the software development process. </p>
<p><strong>Riding the next generation platform wave</strong><br />
Microsoft continues to invest in the market leading operating system, productivity application and server platforms to deliver increased customer value in these offerings. With Visual Studio 2010 customers will have the tooling support needed to create amazing solutions around these technologies. </p>
<p><strong>Breakthrough Departmental Applications</strong><br />
Customers continue to build applications that span from department to the enterprise. Visual Studio 2010 will ensure development is supported across this wide spectrum of applications.</p>
<p>More on the MSDN site:</p>
<p><a href="http://msdn.microsoft.com/en-us/vstudio/products/cc948977.aspx" target="_blank">http://msdn.microsoft.com/en-us/vstudio/products/cc948977.aspx</a></p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[Experience Wii on YouTube]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Another "why didn't I think of that?" moment brought to you by Nintendo.</p>
<p> <a href="http://www.youtube.com/experiencewii" target="_blank">http://www.youtube.com/experiencewii</a></p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[LINQ Architectures in 3 Layer, 3 Tier Applications]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>Before I get into the great features and great dangers of LINQ, lets get a couple thing out of the way: </p>
<ul>
    <li>A 3 tier application refers to the physical separation of system in the <strong>database</strong> (in my case, usually SQL 2005), <strong>web application server</strong> (in this case Asp.Net 3.5), and <strong>web browser</strong> (a growing plethora :).  </li>
    <li>A 3 Layer application, in my vernacular, refers to a system that has a <strong>data access layer</strong> (DAL),  <strong>business logic layer</strong> (usually a combination of code-behind and shared assembly code that call the DAL), and the actual <strong>UI layer </strong>(usually a combination of controls and fixed markup). </li>
</ul>
<p>Normally, a data access layer will be a set of data access methods that invoke procedures or dynamic SQL and return a combination of data object collections or DataSets/DataTables.  This system fits well into the stateless model, since it doesn't allow any "leakage" of utility from layer to layer; the business logic layer can't participate in a transaction unless that object is explicitly exposed, either implicitly of explicitly from the DAL.  </p>
<p>Enter LINQ-to-SQL and the whole thing is shot to bits.</p>
<p>Don't get me wrong - I love the fact that I can model a system in a DBML file that be accessed extremely easily from the DAL, and on top of that, it means that the data objects that are moved throughout the system are ready-made for me - but therein lies the catch.</p>
<p>Imagine a system that has a Order table and foreign key to an OrderItem table.  In LINQ we select an Order record by its OrderID.  In our DAL, we could return the Order object - subsequent call to the the OrderItems collection of Order object would, because LINQ interprets the foreign key, end up with a call to the OrderItems table.  </p>
<p>Great! Now our lives are SO much easier; we can let the business logic or even the UI layer decide if they need the OrderItems collection populated or not.  That way, we only get the extra database hit if we need it.  I can see cases where this would make life easier, but also whole lot of cases where this into the equivalent of a data access "goto" statement.</p>
<p>I won't tell you that you shouldn't allow the non-data access layers of your system perform data access via LINQ-SQL.  After all, isn't the DBML file and its auto-generated DataContext a kind of data access layer anyway?  Yep, it is a data access layer - but beyond a fairly simple system, you really ought to lock down the DataContext such that it is <em>internal</em> to your DAL, and ensure that it is disposed at the end of the data access method.  The easiest way to ensure this in your code is a simple <em>using { }</em> block. This will make sure that the database connection is closed, and that any child objects that are not already loaded into memory won't be accessible.</p>
<p>What's the nasty catch?  You won't be able to detect any code that is attempting to access the child collections (such as an Order's OrderItems) when that child collection is not going to be available until <strong>runtime.</strong>  So you'll get a null reference exception at this point.  Which should seem infinitely better than an unexpected call to the database that was not intended.</p>
<p>Also, now you are back to a situation where the DAL can be reliably tested by a series of unit tests that blast the database with all of the possible combinations of calls.</p>
<p>In my opinion, LINQ-SQL is a fantastic step forward, but we shouldn't think of it in a way that takes us too far outside of the nascent limitations of a 3 tier, 3 layer system.</p>
<p>More later - joel.</p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[LINQPad: A Great Way to Test LINQ Queries]]></title><author><![CDATA[Alexandru Cibotari]]></author><description><![CDATA[<p>Having trouble testing your LINQ queries?  Try LINQPad. </p>
<p>Using this tool you can see:</p>
<p><span>1.       </span>Query results<br />
<span>2.       </span>Resulting SQL statement<br />
<span>3.       </span>Resulting lambda expression</p>
<p>General info: <a href="http://www.linqpad.net/" target="_blank">http://www.linqpad.net/</a></p>
<p>Download link: <a href="http://www.linqpadupdates.net/LINQPad.exe" target="_blank">http://www.linqpadupdates.net/LINQPad.exe</a></p>
<p> </p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[Storing Contextual Data in Web and non-Web applications]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>In Asp.Net apps, we are used to storing data in the current context.  Objects that are specific to the currently executing Request, like a User object retrieved a database, or another object that you want to make globally available without requiring multiple database trips, can benefit from this.</p>
<p>But what about this situation in non-web applications?  Or what about situations like an assembly that needs to have this contextual caching logic coded into it, but needs to be used from both web and non-web applications?</p>
<p>Below is an example of a static property that stores a User object, which is retrieved from a database, in the current HttpContext.  If it is already available in Context, it simply returns it.</p>
<p><a href="http://weblogs.asp.net/blogs/joelvarty/WindowsLiveWriter/StoringContextualDatainWebandnonWebappli_F72F/image_6.png"><img width="738" height="236" style="border: 0px solid;   " alt="image" src="http://weblogs.asp.net/blogs/joelvarty/WindowsLiveWriter/StoringContextualDatainWebandnonWebappli_F72F/image_thumb_2.png" /></a> </p>
<br />
<br />
<p>What will happen if this property is accessed from a non-Asp.Net application, such as a windows service?  HttpContext.Current will return null, and we will get an exception.</p>
<p>We could simply store a static field in this class and access that if HttpContext.Current is null. But if that application has more than one thread, such as a Windows Service that is hosting a WCF Service, the static field will be shared across all threads.</p>
<p>Right?</p>
<p>Right - Unless we add the [System.Threading.ThreadStaticAttribute] to it!</p>
<p>Below is the updated property that will work in both kinds of applications:</p>
<br />
<br />
<p><a href="http://weblogs.asp.net/blogs/joelvarty/WindowsLiveWriter/StoringContextualDatainWebandnonWebappli_F72F/image_4.png"><img width="782" height="536" style="border: 0px solid;   " alt="image" src="http://weblogs.asp.net/blogs/joelvarty/WindowsLiveWriter/StoringContextualDatainWebandnonWebappli_F72F/image_thumb_1.png" /></a></p>
<br />
<br />
<p>There you go - a property access to contextual variable that caches for the length of the current thread, and isolated to the current thread.</p>
<p>Awesome!</p>
<p> <b>EDIT: </b>as was pointed out in the comments, I should have assigned the <i>w</i> variable to HttpContext.Items["MyClass.CurrentUser"]. Can you spot where it should go?  Thanks for the heads up, Dave!</p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[The Ubiquitous, Mobile Web: The Final Frontier]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>The web works better when web sites are tailored to the capabilities of the platform.</p>
<p>That's a given, as far as I am concerned.  </p>
<p>I have avoiding dealing with this issue in the past in terms of mobile devices in the hopes that the browsers mobile phones will eventually mature to point of approaching desktop capabilities.  Also, I am sure that there is some amount of push back to browser quirkiness following the Netscape/IE browser quirk wars of the past decades.</p>
<p>But now, as I await delivery of an iPhone 3G, I wonder if I might be doing more to push development for the mobile platform in general.</p>
<p>For example, I have used the Opera 9.5 browser (a leaked beta :) on my HTC TyTN for the past few months and I am amazed by how fluidly and quickly it renders and zooms fairly complex web pages - even on a QVGA (320x240) screen.  I am hoping/assuming that mobile Safari, which Opera is ostensibly attempting to surpass with it's mobile browser efforts, will be even more useful and amazing.</p>
<p>It does beg the question, though, about where the responsibility for the overall mobile browsing experience lies: the browser implementation, or the web developers themselves.  As an architect, it makes perfect sense that we should design and build web controls that will degrade their functionality based on the mobile browser's known capabilities.  This rarely happens.</p>
<p>Most web sites, in my experience, are envisioned by people who haven't had exposure to the Internet on the kinds of mobile browsers, like Safari and Opera, that actually make mobile browser worthwhile.  That being said, it should also be noted that most web site are also envisioned as a set of features that must answer to features on competing web sites.  Far from being able to think about what the user experience ought to be on a handheld platform, we often can't even escape the vertical market that we operate within.</p>
<p>So what is the answer?  </p>
<p>Should a mobile web site come "out of the box" when a developer drops a custom web control on a page?  </p>
<p>Should we be pushing for a second stream of mobile development to complement the "standard" mobile development?</p>
<p>Or should we just let the mobile device handle the page that was designed for the desktop?</p>
<p>Should Flash and Silverlight be expected to run in these environments?</p>
<p>At this point, do we even know what a "mobile device" mean?  Does it include UMPCs, MIDs (Mobile Internet Devices), or the smaller laptops like the Asus EEE PC (and all of its copy cats)?</p>
<p>So many questions, and no answers.</p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[The Upswing of the Downturn]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>For the past few months, I have been trying to reconcile our surge of business with the recent downturn in the economy.  My theory is that as the economy dips, advertising dollars go digital.</p>
<p>In tougher economic times, consumers spend less money on big ticket items and brand names.  As such, brands have stiffer competition when vying for consumer dollars and so they must continue to advertise, despite slashed budgets.</p>
<p>What better way to get more bang for your buck than to advertise online!  Digital advertising is less expensive than print and TV, it reaches an ever growing audience of savvy consumers, and it provides a better platform for interactivity between customers and brands.</p>
<p>The shift of advertising spending from traditional media to online means that companies are looking to expand their Web presence, build online contests and promotions and find creative ways to use the internet as a sales platform.  Really smart people at global advertising agencies are showing brands how to make this happen.  The agencies then turn to us to bring their ideas to life using cutting edge tools and technologies.</p>
<p>Visit <a href="http://www.cineplex.com/" target="_blank">Cineplex.com</a><br />
Visit <a href="http://www.unclebens.ca/" target="_blank">UncleBens.ca</a><br />
Visit <a href="http://www.xfxforce.com/" target="_blank">XFXForce.com</a></p>
<p>Check out this article on AdAge: <a href="http://adage.com/article.php?article_id=127793" target="_blank">http://adage.com/article.php?article_id=127793</a></p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[Any Friend on Any Application on Any Site]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Google, Facebook and Myspace are all vying for ultimate friend-list supremecy with Google Friend Connect, Facebook Connect and MySpace Data Availability. </p>
<p>As far as I can tell, MySpace was first to the punch with their Data Availability initiative.  Facebook and Google quickly followed suit with similar connections to their social networks.  The stakes?  Ownership of the majority of Web interactions.</p>
<p>Before long, you will start to see options popping up on login boxes everywhere prompting you to log in using your social network login of choice.  The site would then contact the social network you logged into, grab your friends list, and show you which friends are also users of the site.  You would then be able to interact with those friends on the site.</p>
<p>For example, in the foreseeable future, you may be able to log into the NewYorkTimes.com using your Facebook login and then start conversations around interesting articles with your Facebook friends.</p>
<p>This is the latest in a the swing toward integrating your 'social graph' into everything you do on the Web.  I definitely thing there are benefits all around.  Web site publishers can easily plug into huge networks of users rather than slowly build up their own user profile database.  End users can interact with the people the know on their favourite sites, and advertisers can laugh all the way to the bank.</p>
<p>It will be interesting to watch this develop!  </p>
<p>Follow the story on TechCrunch:</p>
<p>May 8 - <a href="http://www.techcrunch.com/2008/05/08/myspace-embraces-data-portability-partners-with-yahoo-ebay-and-twitter/" title="Permanent Link to MySpace Embraces DataPortability, Partners With Yahoo, Ebay And Twitter" target="_blank" rel="bookmark">MySpace Embraces DataPortability, Partners With Yahoo, Ebay And Twitter</a></p>
<p>May 9 - <a href="http://www.techcrunch.com/2008/05/09/facebook-responds-to-myspace-with-facebook-connect/" title="Permanent Link to Facebook Responds To MySpace With Facebook Connect" target="_blank" rel="bookmark">Facebook Responds To MySpace With Facebook Connect</a></p>
<p>May 12 - <a href="http://www.techcrunch.com/2008/05/12/google-confirms-friend-connect/" title="Permanent Link to Google Confirms Friend Connect" target="_blank" rel="bookmark">Google Confirms Friend Connect</a></p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[Ruby on Rails is a Risk]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Can you be sure that your application is going to be easy to maintain and will scale to meet demand?  Twitter probably thought so, but their Ruby on Rails site is proving difficult to manage.</p>
<p>Twitter is  a popular site used to continuously inform your friends and colleagues of your thoughts, moods and actions.  Over the past year, surging traffic has lead to an increase in the length and frequency of outages.</p>
<p>The (now former) scaling architect at Twitter, Blain Cook, was confident that he had solved the issues when he presented <a href="http://www.slideshare.net/Blaine/scaling-twitter/" target="_blank">his strategies</a> at last year's Ruby conference, but the latest outages have clearly proved him wrong.</p>
<p>Now, Twitter is scrambling to find a replacement, but where do you look?  How many experts on Ruby on Rails performance scaling are out there?  Where do you go for support when you get stuck?  </p>
<p>Working with open source technologies is fun and feels good, but is it a sound business strategy?  I would have to argue that using unproven technologies with no corporate support is taking unnecessary risks in a world where the proven options are a plenty.</p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[More Widget Tools]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>This spring, Sprout and SpringWidgets help to bring widgets to Web pages and to the desktop.</p>
<p>Widgets are small applications that can be embedded in a Web page and shared via email or through your favourite social network, like Facebook.</p>
<p>Sprout is a platform for creating your own widgets.  Their toolbox allows you to combine text, images and video onto a customized widget which can then be shared.  It looks similar to <a href="http://www.gigya.com/" target="_blank">Gigya</a> and <a href="http://www.clearspring.com/" target="_blank">Clearspring</a>, but also gives non-programmer users the ability to create their own widgets.</p>
<p>SpringWidgets is a platform for creating and distributing widgets in Windows.  Now RSS feeds and customized widgets can easily be run on the desktop.  They offer a developer kit and a free download of the widget distribution platform that can be installed on Windows.</p>
<p>Both of these services have the potential to help our clients.  However, we will likely wait until a clear leader emerges and the services come out of Beta before recommending them.</p>
<p>Check them out:</p>
<p>Sprout - <a href="http://www.sproutbuilder.com/" target="_blank">http://www.sproutbuilder.com</a></p>
<p>SpringWidgets - <a href="http://www.springwidgets.com/">http://www.springwidgets.com/</a></p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[An HTML debugger for Firefox]]></title><author><![CDATA[Jon Sohn]]></author><description><![CDATA[<p>Any serious Mozilla/Firefox developer will want to check out Firebug. It's like IE Developer Tool but with a more expansive interface and some really cool features: such as the ability to modify elements on the fly, a visual representation of each object's padding/border/margin or even a complete breakdown of the loading time for each item on the page.</p>
You can find this nifty tool over <a href="http://www.getfirebug.com/">here</a>.]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[Find/Replace in Visual Studio with Regular Expressions and Variables]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>This can be a major time saver when you want to find some text and perhaps duplicate it or manipulate it throughout a bunch of files in your project.</p>
<p>Read the full article on my asp.net blog <a href="http://weblogs.asp.net/joelvarty/archive/2008/03/25/find-replace-in-visual-studio-with-regular-expressions-and-variables.aspx" target="_blank">here</a>.</p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[Top 10 MySpace Apps]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>The MySpace platform is now live.  Check out the top 10 applications as of Friday March 14, 2008.</p>
<p><a href="http://www.insidefacebook.com/2008/03/14/top-10-myspace-apps-after-day-1/" target="_blank">Top 10 List</a></p>
<p><a href="http://developer.myspace.com/community/" target="_blank">MySpace Platform</a></p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[YouTube + Clearspring: A User Generated Video Dreamteam?]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>The YouTube platform has been available for a few weeks now.  Developers from Clearspring, "the widget platform", have demonstrated how to use their tools to propogate YouTube videos.</p>
<p>The formidable pairing demonstrates the power of both platforms and is probably making KickApps, Filemobile and other user generated content companies a little nervous - YouTube is essentially offering free video hosting.</p>
<p>Clearspring provides viral distribution and tracking of <a href="http://en.wikipedia.org/wiki/Web_widget" target="_blank">widgets</a> (autonomous, modular Flash or Javascript Web elements).  Their controls allow a viewer of a widget to distribute it to social networks, blog sites and other locations with a few clicks (rather than cutting and pasting the 'embed' codes).</p>
<p>This combo (once commercially available) will make it extremely easy and cost effective to add user generated video components to our clients sites.</p>
<p><a href="http://www.clearspring.com/" target="_blank">Clearspring</a></p>
<p><a href="http://www.clearspring.com/blog/2008/03/13/what-youtube-clearspring-might-look-like/" target="_blank">Clearspring YouTube Demo</a> </p>
<p><a href="http://www.techcrunch.com/2008/03/12/youtube-the-platform/" target="_blank">More on the YouTube Platform</a> (TechCrunch)</p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[KickApps and YouTube]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>KickApps has announced tighter integration with YouTube that will allow KickApps users to grab and post videos from YouTube.</p>
<p>KickApps is a turn-key white-label social networking and user generated video platform that has been used by BET and a host of other media sites to instantly enable social networking and video.</p>
<p>Tighter YouTube integration provides a compelling expansion of the KickApps offering for brands and marketers who are looking for ways to connect with their audience.  This is also an interesting example of how the YouTube API can be used to tap into the Web's biggest video source.</p>
<p><a href="http://www.kickapps.com/" target="_blank">Visit KickApps</a></p>
<p><a href="http://www.kickapps.com/blog/2008/03/12/youtube-and-kickapps/" target="_blank">Learn about the KickApps Integration</a></p>
<p><a href="http://www.techcrunch.com/2008/03/12/youtube-the-platform/" target="_blank">More about the YouTube Platform</a></p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[Microsoft Office Live Workspace Now in Public Beta]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>All users of Microsoft Office can now use an software service tool provided by Microsoft to share documents with anyone on the Web.</p>
<p>The service is based on Microsoft SharePoint - the server behind Microsoft Office that is already very popular in the Enterprise.  SharePoint is a great tool for sharing documents, but it requires a significant investment in hardware and the expertise to install and manage the software.  This online tool brings the strengths of SharePoint to small business, schools and consumers.</p>
<p>This is the latest step in Microsoft's effort to combine desktop software with online services to provide the best of both worlds.</p>
<p>Check it out:</p>
<p><a href="http://workspace.officelive.com/" target="_blank">http://workspace.officelive.com/</a></p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[Want 5GB's of Data in the Cloud?]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p>Skydrive is out of public beta and is finally available in Canada. It gives you 5GB of online storage for free. </p>
<p><a href="http://skydrive.live.com/" target="_blank">http://skydrive.live.com</a></p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[Streamline Translation with Clay Tablet]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>One of the most painful parts of building multi-lingual Web sites is managing the translation of content.  Clay Tablet makes software to streamline this process that hooks into your content management system of choice. </p>
<p>If you've ever been part of a multi-language Web site project, you know about the hassles of managing the content translation.  How do you ship content back and forth?  How do you know the progress of the translation?  How does the content get back into the Web site or content management system?</p>
<p>These questions are answered by Clay Tablet and their translation software offered as a licenced product or as a service.</p>
<p>We are looking forward to an opportunity to partner with them and integrate their solution with our Agility CMS.</p>
<p>Check them out:  <a href="http://www.clay-tablet.com/" target="_blank">http://www.clay-tablet.com/</a></p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[Community Server 2008 Beta 1 Released]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p>...and my favorite feature... Full Web Service API. It's a happy day for Community Server integrators!</p>
<p>Community Server 2008 has reached Beta 1 and has a list of great new features. See the link attached for a full list. The Full Web Service API will let us tap into Community Server content from anywhere.  It will also allow us to fully integrate Community Server seamlessly into <a href="http://www.agilitycms.com/" target="_blank">Agility CMS</a> Modules. Happy Day!</p>
<p><a href="http://communityserver.org/blogs/announcements/archive/2008/02/05/community-server-2008-beta-1.aspx" target="_blank">http://communityserver.org/blogs/announcements/archive/2008/02/05/community-server-2008-beta-1.aspx</a></p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[PartnerPoint builds Facebook Application for Microsoft Partners]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>The PartnerPoint FaceBook Application allows Microsoft Partners (and anyone on Facebook) to tap into the partner community via a discussion board, member directory, Microsoft news and more.</p>
<p>Personally, this is something that I would rather see on LinkedIn, but they don't have the platform to do this type of thing yet.</p>
<p>I definitely see value in this.  Facebook is one of my favourite places on the Web and this seems like a great way to network with partners for ideas and new business opportunities.  The application itself seems a little bloated (why would I 'Take the Quiz') and a little buggy (my Screen Shot upload failed), but I will play around with it for a little bit.  Let's see if they can find a way to hold my attention.</p>
<p>Check it out: <a href="http://www.facebook.com/apps/application.php?id=6797353628" target="_blank">http://www.facebook.com/apps/application.php?id=6797353628</a></p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[More Fun with AJAX: The Dojo Javascript Toolkit]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>The Dojo Javascript Toolkit provides javascript code to add funky animations to your Web sites and Web applications.</p>
<p>I'm all for using someone elses code to speed up development - especially when it's for things that brighten up the user interface.</p>
<p>Dojo is open source which means free.  It has an interesting feature set and can be customized by a developer.  The code is small which means quick page-load times.  There is also decent support.</p>
<p>Check them out: <a href="http://dojotoolkit.org/" target="_blank">http://dojotoolkit.org/</a></p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[Text Dimming Bug in Firefox on Mac]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p style="margin: 0in 0in 10pt;">We  were recently working on a project and we were running into problems with random text on the page “Dimming” when a user would hover over items that had an opacity setting less than 100%.</p>
<p style="margin: 0in 0in 10pt;">Doing some research we found that there is a bug in Firefox on the Mac which causes the text to switch from the OS font to the Firefox engine font, which would change the font aliasing. </p>
<p style="margin: 0in 0in 10pt;">Using the following CSS provided the solution:</p>
<p>body <br />
{ <br />
   opacity: 0.99999;<br />
   -moz-opacity: 0.99999; <br />
   -khtml-opacity: 0.99999; <br />
   filter: alpha(opacity=99); <br />
}</p>
<p>This essentially gives every element a slightly reduced opacity which removes the font switching problem when an element with a lower opacity becomes active.</p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[Proof that Windows Server 2003 is more Memory Efficient]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p>Just a little coder-beware note: </p>
<p>Basically I had to select 4 products based on user selected data.</p>
<p>Originally did the following:</p>
<blockquote dir="ltr">
<p><em>List &lt;string&gt; productIDs = &lt;my list of product ID’s to search&gt;</em></p>
<p><em>List&lt;DataRowView&gt; rowsToShow = new list&lt;DataRowView&gt;()</em></p>
<p><em>DataView dvProducts  = &lt;Get All Products Data from API&gt;</em></p>
<p><em>Foreach(string id in productIDs)<br />
{</em></p>
<p><em>               <strong>&lt;filter products by the current ID&gt;</strong></em></p>
<p><em>                rowsToShow.Add(<strong>&lt;Filtered_DataRowView&gt;</strong>);</em></p>
<p><em>}</em></p>
<p><em>Repeater.DataSource = rowsToShow;</em></p>
<p><em>Repeater.DataBind();</em></p>
<p><em>//etc etc</em></p>
</blockquote>
<p>This worked perfectly Locally on my Windows XP Box. (The bolded code above are the problem areas)</p>
<p>The problems occurred when I put this on a server running windows server 2003.  I kept getting a repeated list of the same product. Turns out the reference was changing all my &lt;Filtered_DataRowView&gt;’s to be the same item after applying the filter.</p>
<p>So after scratching my head for a momment or two, I realized what was going on and ended up making a copy of each Product row I found and then added the copy to my rowsToShow List and this fixed my platform problem. </p>
<p>This is proof that Windows Server 2003 is more memory efficient then Windows XP. Instead of Win2003 allocating new memory for an object that was filtered differently it reused the same memory location. This was the complete opposite for XP which allocated new memory for each Filter set I created.</p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[The Server/Client Balance of Power Continues (Part 1)]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>I have had the unique pleasure of dealing with this conundrum countless times of the past eight years while architecting applications that operate in various web server and browser environments.<br />
<br />
The notion of a “rich client” experience has always been balanced with the capabilities of client and the programming prowess of the developers. At one point it was Java applets that allowed us to do calls back to the server without reloading the current webpage. Various other experimentation saw folks using hidden iframes, xml data islands in IE and I’m sure a whole lot of other stuff.</p>
<p>Java applets have been replaced, largely, with Flash controls (and Silverlight, to a lesser but growing extent), but the real pants-kicker for the “rich client” holy grail of web apps has been the AJAX client/server frameworks that allow for a quick ramp-up for fledgling developers to use basic HTML and backend server markup languages to build an application that takes advantage of Javascript for its client-server communication outside of page loads.</p>
<p>Read on: <a href="http://weblogs.asp.net/joelvarty/archive/2008/01/31/the-server-client-balance-of-power-continues.aspx" target="_blank">http://weblogs.asp.net/joelvarty/archive/2008/01/31/the-server-client-balance-of-power-continues.aspx</a></p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[New Blog on Asp.Net]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>I will try not to double-post too much, instead I will keep my Edentity specific stuff in here, and simply link from here to any tech related stuff that might be of interest on this site.</p>
<p>My first post deals with Silverlight 1.0, which we have been evaluating for usage in our projects.  Here is a link to the entry: <a href="http://weblogs.asp.net/joelvarty/archive/2008/01/23/what-is-silverlight-good-for-yet.aspx" target="_blank">Silverlight - What is it good for (yet)?</a></p>
<p>I hope you enjoy it!</p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[Facebook and Microsoft Officially Friends]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Finally, my open source friends can't make fun of us for being locked out a Facebook development.  Microsoft and Facebook officially announce a partnership that ties the Facebook API to Microsoft development tools.  Best of all, it's free!  I guess $240 million dollars (of Microsoft investment money) still goes a long way.</p>
<p>We have already built a few Facebook applications with libraries that various developers in the Microsoft community had put together.  However, for our larger clients, the official status of the partnership goes a long way.</p>
<p><a href="http://msdn2.microsoft.com/en-us/express/bb510381.aspx" target="_blank">Get started here</a></p>
<p>Can't wait to bring more Facebook solutions to our clients in 2008!</p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[ASP.NET on Mac and Linux?]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>I love it when we all get along.  It's especially cool when seemingly arch enemies get along.  Mono makes it possible to develop ASP.NET applications on Mac and deploy them on Linux. </p>
<p>The Mono project is an open source project sponsored by <a href="http://www.novell.com/" target="_blank">Novell</a> that provides the software to develop and run applications on platforms other than Windows.  So, Mac fans can build ASP.NET apps on their shiny new MacBook and then deploy it to their super cheap Linux-based hosting company.</p>
<p>Finally, the best platform for developing Web applications is no longer tied to the Windows operating system and servers - pretty cool - and provides more ammo for my Microsoft vs. Open Source discussions!</p>
<p><a href="http://www.mono-project.com/Main_Page" target="_blank">Check out Mono here</a></p>
<p>Happy New Year!</p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[Fun with AJAX]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Looking for a way to spice up your Web applications?  Getting demands from your users for more AJAX?  The Gaia AJAX Widgets might be for you.</p>
<p>Technically speaking a widget is a peice of content or functionality that can be easily transported from one site to another by cutting and pasting some code.  I would call the Gaia suite a set of ASP.NET controls - but it is definitely very cool.</p>
<p>Popup windows, resizing, fade effects and much much more are all a few lines of code away.  Note that you must be an ASP.NET developer to integrate them into your site, but not a developer to enjoy their functionality.</p>
<p>We're excited about the possibility of using these tools to spice up our Agility sites!</p>
<p>Check out some samples:</p>
<p><a href="http://ajaxwidgets.com/AllControlsSamples/" target="_blank">http://ajaxwidgets.com/AllControlsSamples/</a></p>
<p>Enjoy!</p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[SQL Server 2008 to include Intellisense]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p>The new version of SQL Server Management studio will support Intellisense. This should make coding those difficult queries a little more enjoyable.</p>
<p><a href="http://3poundmass.wordpress.com/2007/11/30/sql-server-2008-will-have-intellisense/">http://3poundmass.wordpress.com/2007/11/30/sql-server-2008-will-have-intellisense/</a></p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[Printing content from the web]]></title><author><![CDATA[Jonathan Voigt]]></author><description><![CDATA[<p>Printing HTML pages from the web can be quite a tricky task.  The way browser printing has been architected, web developers do not have control on so many critical requirements when printing.  Just a few of these items include margins, page breaks, orientation and many more...  </p>
<p>There are some things you can do though to try and get around these limitations.  Have a look at this article I found which discusses a number of things you can do.  Hopefully it can take away a few of your coding blues...</p>
<p><a href="http://css-discuss.incutio.com/?page=PrintStylesheets" target="_blank">http://css-discuss.incutio.com/?page=PrintStylesheets</a></p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[From design to production - HTML that pleases your designer]]></title><author><![CDATA[Jonathan Voigt]]></author><description><![CDATA[<p>How many developers can take a design (psd) and convert it perfectly into HTML.  This sounds like a very simple task but it can be very difficult.  The problem with this is that a few pixels off on your layout can completely ruin the design which could have taken the designer a lot of time to get just right.</p>
<p>A neat little trick is to overlay a transparent version of the original design over your HTML.  To do this, take the psd file and export it as a jpeg.  Then, within your website template file, create a div at the top most element, normally just inside the form tag.  Add the image to this div and the following style: style="position:absolute;opacity:0.5;filter:alpha(opacity=50);top:0px;left:0px;width:100%;height:100%".</p>
<p>This will overlay the image over your HTML and allow you to see through the image.  Depending on your design, you can adjust the opacity to see both you design and your HTML clearly.  Another trick is to add a blue overlay to the image before you save to a jpeg from Photoshop.  When you superimpose the image over your HTML you will now be able to tell which elements are your HTML and which are your original design (in blue).</p>
<p>The nice thing about this trick is that you can adjust your design and continuely compare your adjustments.  You can also do this testing in any browser which helps a lot for cross browser testing.</p>
<p>So, go put a smile on a designer's face now with this new technique.  It will definitely please them!</p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[Facebook Pages: Profiles for Business]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[Facebook Pages will provide businesses with a new home on the social Web.  They are really just Facebook groups that allow applications and friends.<br />
<br />
We see this as yet another channel for our clients to post their Web site content which is stored in the <a href="http://www.agilitycms.com/" target="_blank">Agility Content Management System</a>.<br />
<br />
<a href="http://www.insidefacebook.com/2007/11/06/facebook-pages-give-businesses-profile-pages-in-facebook/" target="_blank">More on Facebook Insider</a>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[What is beauty? (In HTML, that is...)]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>This appeared on digg.com not too long ago, and I though the comments were almost as interesting as the <a href="http://digg.com/tech_news/What_Beautiful_HTML_Code_Looks_Like_2" target="_blank">article</a>. </p>
<p>The article refers to an <a href="http://edentity.ca/WhoWeAre/ecms.aspx/$edentity/Images/fff9652d04.jpg" target="_blank">image</a> that illustrates good coding practice.</p>
<p>It's funny to note that there is an unclosed tag in the source of the HTML, so it wouldn't validate, and the "includes" are a PHP thing (that remind me classic ASP), which we in the Asp.Net world solve with UserControls, or better yet, with Master Pages, depending on the situation.</p>
<p>My biggest quandry when I code HTML is where best to put the sizing for areas that are really situation specific.  If I want to have a box that is 300px wide, I can either put it in a css class called "Left300" or something, or have a style="width:300px".  Sometimes, like in a fixed design or a panel or something, it is obvious to use the class, but other times it seems like we end up making a zillion classes to avoid putting a few characters in a single spot.</p>
<p>So where's the beauty?  In the eye of coder, the designer, the architect, the tester, or the end user?  How does "nice" code actually impact the quality?</p>
<p>Interesting to ponder...</p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[Edentity Representing at Ad Lounge]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>After a hiatus of almost three years, Ad Lounge, a networking organization for Toronto communications professionals, returned with a sold-out launch party Oct. 2.   Edentity was there and Marketing Mag caught me! </p>
<p>It was a great time.  Thanks to Organic, Lifecapture Interactive and Ad Lounge for putting on a great party!</p>
<p><a href="http://www.marketingmag.ca/magazine/current/people/article.jsp?content=20071112_70617_70617" target="_blank">http://www.marketingmag.ca/magazine/current/people/article.jsp?content=20071112_70617_70617</a></p>
<p><a href="http://www.marketingmag.ca/magazine/current/people/article.jsp?content=20071112_70617_70617" target="_blank"></a> </p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[A Scenario-based Approach to Evaluating CMS Vendors]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Tony Burne from CMS Watch provides an excellent framework for deciding on a Content Management System. </p>
<p>No two Web implementations are alike.  Tony discusses the importance of basing your CMS selection on your specific needs rather than the suggestions of vendors or colleagues.</p>
<p>He goes on to provide an excellent framework for matching your vendor selection with your needs.</p>
<p> <a href="http://www.cmswatch.com/Feature/153-Selecting-CMS-Tools">http://www.cmswatch.com/Feature/153-Selecting-CMS-Tools</a></p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[Hosting your website in a facility where "medium trust" is enforced]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>We recently rolled out a website using a hosting provider that enforces Medium Trust in all asp.net web applications.  Fine - we've done this many times before.  Except for one thing: we were using a custom configuration section, and our assembly wasn't allowed to go into the GAC.  What do we do now? </p>
<p>First of all, this is a problem you should always anticipate in a test scenario by setting the trust level in your web.config to "Medium".  Check out this MSDN article for more infor on that: <a href="http://msdn2.microsoft.com/en-us/library/ms998341.aspx" target="_blank">How To: Use Medium Trust in ASP.NET 2.0</a>. </p>
<p>How did we get our configuration section to work?  Well, that was a little tricky.  We had to read the web.config file as an XmlDocument and use XPath queries to populate our configuration object with values from there.  This, in my mind, is a huge annoyance for no reason; if I can read the web.config file as XML in medium, why can't the config engine parse it?  Big oversight, in my opinion, but easily worked around, albeit using a try/catch to do so (which can cause performance issues).  </p>
<p>The really nasty part of this problem was that the Ajax Control Toolkit, which luckily we didn't want to use in this application, needs to be put into the GAC (global assembly cache) in order for its config section to be read in medium trust.  If your hosting provider won't put it into the GAC for you, there might be issues (I say might, because it works "sometimes", or until you access a feature that requires it to read from its configuration section).  Not very nice if you want to use a feature of the Ajax Toolkit and the app ends up in an environment where this isn't possible.</p>
<p>I hope this helps (at least it will serve as a reminder to me to always run my app with medium trust in a test environment!).</p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[Is RSS Syndication the Email Newsletter Killer?]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>By now, we all have about 20 email newsletters coming into our inbox every week.  Some are useful, some are annoying.  Wouldn't it be nice if we could choose what information we consume and when?</p>
<p>Really Simple Syndication (RSS) is a great alternative for delivering information from all of your favorite sources.  Whether you're a stock broker looking for the latest inside tip or a sports fan who wants to stay on top of the trades, there is an RSS feed for you.</p>
<p>Email newsletters are bulky, cluttered and hard to stay on top of.  Most people only read the email that's in the most recent part of their inbox.  On a busy day, how many of us dig down to an email newsletter once it has gone out of view?</p>
<p>With RSS you build up your custom list of 'channels' that tap into news sources, blogs, sports sites and more.  You can dig into your list when you have the spare time.  Getting bored with a feed?  Delete it.  RSS readers are free and are tied into the most popular email clients such as Outlook and GMail.  There are even mobile RSS readers for the road warrior or commuter.</p>
<p>Personally, I think RSS will eventually replace email newsletters.  They're cheaper to produce, easier to consume and more customized to personal preferences.  </p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[.Net Framework 3.5: Open Source]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p><a href="http://weblogs.asp.net/scottgu/archive/2007/10/03/releasing-the-source-code-for-the-n">Scott Guthrie</a> is reporting on his blog that the Framework will be available with source code as of version 3.5 under the <a href="http://www.microsoft.com/resources/sharedsource/licensingbasics/referencelicense.mspx">Microsoft Reference License</a>.  In my mind this makes up for a lot of the flack that has been doled out towards Microsoft in terms of the closed nature of their products and platforms.</p>
<p>I think it is a positive sign of the open (and opening...) nature of software that things like Silverlight (and the framework it is built upon) are being designed and released for multiple platforms - and now with the source code provided.  The "secrets" that are in the codebase of these products will be available to help us build products that better integrate with, and take advantage of, the features of the platform.</p>
<p>In our discussions around the office, we have hotly debated the continuum of HTML to AJAX to Silverlight.  Will this be the natural progression once Silverlight 1.1 springs forth?  Will XAML become the new HTML?</p>
<p>Opening the framework's libraries for our perusal is, in my opinion, Microsoft hoping that it is.</p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[Jaw-dropping Photosynth Demo]]></title><author><![CDATA[Jonathan Voigt]]></author><description><![CDATA[<p>Photosynth is a new technology from Microsoft that allows you to tag and connect photos.  You can walk or fly through them, create collections and connect them to other photos, yours or others around the world.  This technology is simiply amazing and will change the way we view photo galleries.  Just wait till we get this for videos as well...</p>
<p>Check out a demo at: <a href="http://www.ted.com/index.php/talks/view/id/129" target="_blank">http://www.ted.com/index.php/talks/view/id/129</a></p>
<p>Check out the technology preview at: <a href="http://labs.live.com/photosynth/" target="_blank">http://labs.live.com/photosynth/</a></p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[XHTML Compliance]]></title><author><![CDATA[Jonathan Voigt]]></author><description><![CDATA[<p>XHTML compliance has always been important, but it has also kind of been a pain for developers.  It is the developers' responsibility to ensure they stick to these guidelines but how can they keep up with every little detail?</p>
<p>There are some basic standards you can abide by very easily without much hassle.  Have a look at this site which lists 9 simple and effective XHTML compliance tasks.</p>
<p><a href="http://askars.net/2006/12/14/9-requirements-to-make-your-pages-xhtml-compliant/" target="_blank">http://askars.net/2006/12/14/9-requirements-to-make-your-pages-xhtml-compliant/</a></p>
<p>There is also a great tool available from the World Wide Web Consortium for testing a site for compliance:</p>
<p><a href="http://validator.w3.org/" target="_blank">http://validator.w3.org/</a></p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[Search Engine Optimization and AJAX]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>How can search engines properly index a site that uses AJAX to keep everything on one page?  This is a question that has plagued us since our first ASP.NET AJAX sites over a year ago.  Our good friend Nikhil at Microsoft has the answer - and it covers SilverLight too!</p>
<p>Nikhil's blog post:</p>
<p><a href="http://www.nikhilk.net/AjaxSEO.aspx" target="_blank">http://www.nikhilk.net/AjaxSEO.aspx</a></p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[Recap: Profit Hot 50 GrowthCamp 2007]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Another year, another Profit Hot 50 ranking.  This year, I was able to attend the annual GrowthCamp event that congratulates the years winners.  As hard as it was to take three days off from running the business, it was well worth it.</p>
<p>I have to admit that the best elements were the socials ones.  Golf on Friday and hanging out at the bar Friday and Saturday nights.  There is something special about coming together with like-minded individuals who share your pain and pleasure as a fellow entrepreneur.</p>
<p>The sessions were excellent and I have taken some ideas away that I will immediately put into practice.  One thing that really struck me is that we don't celebrate enough!  Here I was, sitting in a 5-star hotel with the CEOs of Canada's hottest company and I hadn't even taken the time out to pat myself on the back for getting there - or more importantly, to show my appreciation to our staff and clients for getting us on the list.</p>
<p>Overall, I am very pleased with the weekend and I would like to thank Ian Portsmouth and the Profit Magazine team, Rogers, Audi, Roynat Capital, BDO and everyone else who participated for a fantastic experience.</p>
<p>Next stop, Profit 100!</p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[CSSVista - Splitting your viewing time in half]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[A nice little program which will let you view your Web pages side by side in both FireFox and Internet Explorer at the same time.  As well as view and modify your CSS classes on-the-fly.<br />
<br />
<a href="http://litmusapp.com/cssvista/" target="_blank">http://litmusapp.com/cssvista/</a>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[Improve your DateTime parsing efficiency by giving a helping hand]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p>An interesting article on the inefficiencies of DataTime.Parse(string) and ways to significantly reduce processing time.</p>
<p><a href="http://www.chiramattel.com/george/blog/2007/09/19/performance-of-datetime-parse.html" target="_blank">http://www.chiramattel.com/george/blog/2007/09/19/performance-of-datetime-parse.html</a></p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[Code: Clicking buttons in FireFox using javascript]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>Sometimes you need to call the "click" event of a button using javascript.  Well, in FireFox, this doesn't always work if the button is &lt;input type="button"&gt;. </p>
<p>It turns out that in Asp.Net 2.0, there is a new property for a Button control called UseSubmitBehavior. Set that to false, and you should be rocking.</p>
<p>One further thing with regards to button clicking - this is how the DefaultButton property of the Panel control works, so if you are having trouble getting the default button to click properly, set the UseSubmitBehaviour = false.</p>
<p>If you are trying to get the default button to work with a Login or a Wizard control, you may have to wrap the control in your own Panel and add the following attribute: onkeypress="javascript:return WebForm_FireDefaultButton(event, 'btnOK')" where btnOK is the full Client ID of your button. </p>
<p>Hope that helps, and happy coding!</p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[LINQ to XML - Building a custom RSS Feed Reader couldn't be easier]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p>Here is another excellent demo/examples of how LINQ to XML can clean up your code when work with XML Files that are located locally or remotely. The ability to query XML data stores in a type safe and EASY way is something I personally have been wanting for a while. Normally it requires significant parsing and lots of code to accomplish what LINQ can do with a single LINQ Query. Check out the Link for some nice code snippets. </p>
<p><a href="http://weblogs.asp.net/scottgu/archive/2007/08/07/using-linq-to-xml-and-how-to-build-a-custom-rss-feed-reader-with-it.aspx" target="_blank">Using LINQ to XML (and how to build a custom RSS Feed Reader with it) </a>- by Scott Guthrie</p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[AJAX Speed: Advantage Firefox]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Being a Microsoft partner, we naturally lean toward Internet Explorer.  Over the past few years, we have cursed Firefox for its different (read standard) way of rendering HTML because of the added work of formatting sites for both it and IE 6, the clear leader of the day.  Now that the latest versions of both browsers are firmly in use, and Web techologies are changing, we are starting to realize that Internet Explorer is no longer the be-all-end-all.</p>
<p>The real difference between the two was revealed to us while developing the latest version of our Agility Content Management System.  Agility 3.0 makes extensive use of the ASP.NET AJAX Toolkit - the ASP.NET way of making those cool embeded popups rather than having to refresh the whole page on every button click.  No matter which technology is behind the scenes, all AJAX interfaces use Javascript to avoid the page refreshes. </p>
<p>In testing Agility across browsers, Firefox came out well on top in terms of speed of rendering AJAX popups and functionality.  Internet Explorer handles AJAX well and has a very stable Javascript parser.  However, in terms of raw speed, Firefox is the clear leader.</p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[An easy way to support styles in both IE and Firefox...]]></title><author><![CDATA[Jonathan Voigt]]></author><description><![CDATA[<p>Trying to convert Photoshop designs to HTML web pages is much more difficult then most people think.  The trick isn't just trying to measure all the pixels and get things lined up exactly like the designer wanted; the trick is to support all the different systems that will view these web pages.  Each system can have a different browser and therefore can interpret what you've coded differently.</p>
<p>There are a number of ways around this and you can spend hours and hours trying to get your CSS to work on all browsers.  Since IE and Firefox are now the most widely used browsers; there are a few tricks you can do to support both these browsers easily.  Check out the link below and use these tricks whenever you need support across IE 7.0, IE 6.0 and Firefox.</p>
<p><a href="http://cmsproducer.com/different-css--firefox-internet-explorer-7-IE-6-5">http://cmsproducer.com/different-css--firefox-internet-explorer-7-IE-6-5</a><a href="http://cmsproducer.com/different-css--firefox-internet-explorer-7-IE-6-5"></a></p>
<p>Happy Coding and may your web pages match your designs exactly!</p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[What is Web 2.0?]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Okay, it's a dated question, but one that still plagues many.  Tim O'Reilly, founder and CEO of O'Reilly Media - the fabled computer book publisher - posts this very concise definition.  I guess he's allowed to have the honours since he helped coin the phrase.</p>
<p><a href="http://www.oreillynet.com/pub/a/oreilly/tim/news/2005/09/30/what-is-web-20.html" target="_blank">http://www.oreillynet.com/pub/a/oreilly/tim/news/2005/09/30/what-is-web-20.html</a><a href="http://www.oreillynet.com/pub/a/oreilly/tim/news/2005/09/30/what-is-web-20.html" target="_blank"></a></p>
<p><a href="http://en.wikipedia.org/wiki/Tim_O'Reilly" target="_blank">Who is Tim O'Reilly?</a></p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[More Cool Silverlight Applications]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Microsoft is bringing sexy back with these fun Silverlight examples.</p>
<p>Note that you will have to install the Silverlight plugin which only takes a couple of minutes.</p>
<p><a href="http://www.tafiti.com/" target="_blank">Tafiti Search</a> - The future of Web search?</p>
<p><a href="http://election.msn.com/podium08.aspx" target="_blank">MSN's Election Portal</a> - Who are these people and why do they bother?</p>
<p>Enjoy!</p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[Content Aware Image Resizing]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[If only images knew what they were pictures of...oh wait these ones do.... check out the video on the link below... amazing concept and technology.<br />
<br />
<a href="http://www.fabiopedrosa.info/2007/08/23/content-aware-image-sizing-wow/" target="_blank">http://www.fabiopedrosa.info/2007/08/23/content-aware-image-sizing-wow/</a>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[The Everything Web]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>I used to ask myself what I wanted my computer to do, but since I am no longer tied to a single computer so much as I am linked to the internet via a plethora of devices, I figure “What do you want from the web?” is a more apt question.</p>
<p>The Jeopardy answer that comes before the question could quite possibly be “Everything.”<span>   </span>We seem to be leaning toward an “everything internet” kind of computing world, where hosted applications like email and calendaring are the beginnings of our connectivity, and mapping, community services, knowledge-based systems, and much more are the extensions of our natural progression towards an “Everything Web” kind of approach.</p>
<p>My biggest challenge for the web? Connect all those services in a natural way that makes sense. And make it make sense tomorrow, too. </p>]]></description><pubDate>7/23/2009 10:08:13 AM</pubDate></item><item><title><![CDATA[ASP.NET is on Facebook's Top Friends List]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>If you aren't one of millions of people spending too much time on Facebook, you've at least heard of it.  It has taken Canada by storm after rapid growth among the American University crowd.  Like any physical or virtual desitination that attracts eyeballs, marketers are taking notice.  Here's a few notes on how ASP.NET can help you capitalize on the latest social networking juggernaut.</p>
<p>The Facebook Platform opens up the social networking site for developers to create custom applications that tap into the Facebook fabric.  Your applications can now piggyback on top of one of the most viral systems of all time.  As Facebook users have discovered, the possibilities are endless!</p>
<p>Some of the more popular applications to date (at least among my friends) are things like SuperPoke, FunWall and TopFriends - mere extensions of the built-in functionality.  iLike is a service that shows your friends what type of music you're into - also very popular.  However, in the next year or so, we'll start to see the really compelling applications as travel sites, e-commerce sites and other well-known brands jump into the fray.</p>
<p>I mentioned in a previous post that we are looking at building Facebook applications for a few clients of ours.  A couple of months on, this has gotten a whole lot easier with a number of toolkits that allow us to build Facebook applications with ASP.NET.  A Facebook purist would tell you that all applications should be built in the Facebook-developed FBML, but I doubt that this limited framework will do the trick for most enterprise scale applications.</p>
<p>Facebook.NET is a toolkit designed by an engineer in the Microsoft Web Platfrom group.  It's open source, easy to get started with and full-featured.  There are a few others that have materialized as well, but they all do pretty much the same thing - make it insanely easy to write Facebook applications.  </p>
<p>We're very excited about the possibilities and we will be sure to keep you posted on our Facebook developments!</p>
<p><a href="http://developers.facebook.com/" target="_blank">Facebook Developers Home</a></p>
<p><a href="http://www.nikhilk.net/Entry.aspx?id=167" target="_blank">Summary of Facebook.NET</a> by Nikhil Kothari (Microsoft Web Platform and Tools Architect)</p>
<p><a href="http://www.nikhilk.net/FacebookNET.aspx" target="_blank">Facebook.NET Toolkit on CodePlex</a> </p>
<p><a href="http://www.codeplex.com/FacebookToolkit" target="_blank">Facebook Developer Kit</a> by Clarity Consulting</p>]]></description><pubDate>7/23/2009 10:07:28 AM</pubDate></item><item><title><![CDATA[Amazon Staking its Claim on the Cloud]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>The king of online retail is throwing its mighty brand name behind another Web services play.  Can they compete on the home turf of eBay, Google and Microsoft?</p>
<p>The World Wide Web Consortium defines a Web service as <em>a software system designed to support interoperable Machine to Machine interaction over a network</em>.  It is basically an autonomous function available on the Internet that a software application can request an action from and then consume the results.  Kind of like you or I would order and consume a pizza.</p>
<p>A bunch of Web services working together can provide the underpinnings for an entire application (like GMail).  With the proliferation of the Web and increasing speed and reliability of Internet connections, it is starting to make business sense to have these underpinnings made accessible for all developers on a global scale.  They become like a toolbox to allow developers to build solutions quicker and thus for a lower price.</p>
<p>Amazon is providing Web services for data storage, e-commerce, and a number of things related to their aquisition of Alexa - the so called "Web information company".  They charge a per transaction usage fee which is very reasonable for small-scale usage, but can get expensive for higher traffic applications.  </p>
<p>Some of these services will go head-to-head with similar offerings from Microsoft (e.g. Windows Live SkyDrive for data storage) and eBay.  Personally, I can't see them leading this market, but I'm sure they'll capture a profitable share.   </p>
<p>Here at Edentity, we're evaluating the offerings from all of the big players as well a lot of smaller ones.  We can realize significant savings for our clients by using a Web service for video storage for example.  </p>
<p>The battle for dominance of Cloud Computing has begun!  </p>
<p><a href="http://www.amazon.com/gp/browse.html?node=3435361" target="_blank">Amazon Web Services Home</a></p>
<p><a href="http://www.amazon.com/Web-Services-AWS-home-page/b/ref=sc_fe_c_2_3435361_2/105-9901906-5979632?ie=UTF8&amp;node=15763381&amp;no=3435361&amp;me=A36L942TSJ2AJA" target="_blank">Browse Amazon Web Services</a></p>
<p><a href="http://solutions.amazonwebservices.com/connect/index.jspa" target="_blank">Amazon Web Services-based Solutions</a></p>
<p><a href="http://skydrive.live.com/" target="_blank">Windows Live SkyDrive</a></p>
<p><a href="http://code.google.com/" target="_blank">Google's Developer Network</a></p>]]></description><pubDate>7/23/2009 10:07:28 AM</pubDate></item><item><title><![CDATA[Coding to the Interface]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p>Why are we always coding to concrete implementations of classes when we can be “Coding to the Interface”. </p>
<p>As a software developer I find coding to be fun and rewarding experience. I love the act of breaking down a problem into small atomic (single step) operations which eventually, when put together in the right order, produces the solution to the larger problem. The question is how to keep on the top of your game in the fast paced world of software development? The fact of the matter is software developers need to explore and grasp new ideas to keep skills sharp and become better coders. Recently I have been reading a book called Interface Oriented Design which has changed my views on the true power of Interfaces and their use with code. </p>
<p>What is an interface? An Interface is a contract that governs how a piece of code (class) should function and gives the code a list of procedures that a concrete implementation must adhere to. Interfaces only work if the programmer adheres to the intended meaning of the property or procedure that is defined within the interface. With interfaces we are given the opportunity to adhere to a contract while providing specific implementation details that suit the needs of our code. </p>
<p>A perfect example of a useful interface would be a data connection interface. There are many data stores out there that are implemented differently, but generally the tasks that an end user will want to perform on the data stores are generally the same. </p>
<ul>
    <li>Make Connection to Data Store </li>
    <li>Request Data from Data Store </li>
    <li>Retrieve Data from data Store </li>
    <li>Update Data within the Data Store </li>
    <li>Etc….
    <ol></ol>
        </li>
    </ul>
    <p>Of course each of these operations may be implemented different depending on the data store that is being used, whether it is a xml document, sql server database, in memory data stream…etc. As long as the interface is the same, code can be reused and swapped in and out with ease. </p>
    <p>This brings me to the purpose of my posting this week. Why are we always coding to concrete implementations of classes when we can be “coding to the interface”. To give another example, when we return a list of objects from a method we are generally using generic Lists (List<myobject /> in the .Net 2.0 World). Generally there is no true reason to return Concrete List classes except for convenience to the developer. What would make the implementation more flexible for the end user would be to return collection interface like an IList or a IEnumerator objects which can then be applied to objects that the developer is currently using. </p>
    <p>Coding to the interface also reduces problems in the future. Using an example from above, say for example your company needs implement a new database server. All the code that connects and uses the old database is now at risk. If a user implemented the data access structure carefully and used classes that all adhere to a specific interface (for example, IDbCommand, IDbConnetion, etc) then we can ensure (hopefully) that our client code will not break when we swap out the database code. Ideally a single database class would change (or in an extreme situation only a configuration value would have to change) to make the switch to the new database. (.NET 2.0 already has this functionality out of the box but if you were unaware of this functionality you could implement this yourself… I just use this example because it is a commonly understood problem) </p>
    <p>After thinking about some of these scenarios I see real value to “Coding to the Interface” and I think that by implementing code this way will make code more flexible, reusable, and maintainable (some of the best –able’s to have in a software solution). So when you write some code today, try to think about how you can code to the interface and make your code more flexible for the future. </p>
    <p>Just my (.NET) 3.5 cents </p>]]></description><pubDate>7/23/2009 10:07:27 AM</pubDate></item><item><title><![CDATA[IIS 7.0: Modules in the Pipeline]]></title><author><![CDATA[Jonathan Voigt]]></author><description><![CDATA[<p>In my last article on IIS 7.0, we dove into a number of the new and exciting features. One of the new features was clearly the ability to program Modules within the pipeline, giving developers greater control and power over the web server itself.</p>
<p>Currently in IIS 6.0, your options for processing requests before your application are with ISAPI filters, HttpHandlers and HttpModules. ISAPI filters can handle many of the needs that are required by most developers but must be programmed using un-managed code (C++) and are very difficult to build and debug. ISAPI filters are also very different to integrate and use with existing managed code. HttpHandlers and HttpModules are great but are only processed when the ASP.NET runtime is loaded so only requests with extensions that are mapped to aspnet_isapi.dll will be processed. For example, any images or other non-ASP.NET file types (.asp, .php, etc.) will never be processed by the HttpHandler or HttpModule unless you specifically map their extensions in IIS. This can be very bothersome, especially in the case of security where it is very common to require security to apply to all files within a folder, no matter their extension.</p>
<p>Modules are processed differently. They are compiled as either managed or unmanaged code and can be placed anywhere within the IIS pipeline. Microsoft has provided 2 APIs as well; one for ASP.NET managed code and one for C++ unmanaged code. The API gives you access to <span>all the high-level objects like Request, Response, Application, Cache and so on,</span> no matter which method of development you choose. This means any code you’ve written in your HttpHandlers or HttpModules can be directly ported into the managed code Modules and any previous ISAPI code that was written in C++ can also be ported with ease as well.</p>
<p>Some people may wonder why C++ Modules are still supported or why people would even write these more complex Modules when managed code is so much easier to write. Well, the answer to this is performance. C++ unmanaged code does have much better performance and this should be considered for any developer when building Modules for their applications.</p>
<p>So now that you understand how Modules can be used; what are some good uses for Modules? Lets start with an example related to security where you require an application with specific secure folders. In IIS 6.0, if you are using forms based authentication, this only secures your .aspx pages within your secure folders. Yes you can work around this by adding every other extension into the ASP.NET mappings is IIS but this would be a huge performance hit on your web server and could introduce a number of other additional issues. With the new Module architecture, you can build a Module that verifies the security on the requested folder for any file type. The Module can then handle the request appropriately. Dynamically created pages or images where the files don’t physically exist on your web-server could be another use for this new architecture. In this example, you can process the requested url and determine if the file is dynamic. If it falls into your scope of files, it can then be generated by the Module and returned in the response directly from the Module. This means no processing within IIS of files on the file system ever need to be even considered.</p>
<p>This all sounds too good to be true for users that want complete control of the IIS pipeline but what are the drawbacks? There are a couple of things this module architecture can introduce that could definitely damage the reputation of developers and even perhaps IIS 7.0.  These are developer error and performance issues. Allowing a developer to build modules and place them anywhere in the pipeline has the ability for them to introduce bugs directly into the pipeline of IIS and has the ability to block all requests to the specific website. On example could be a developer who has written their own security layer, there are no guarantees that they have not left a huge security hole.  There are many opportunities for creating issues in a critical place within application processing. Also, performance is a huge concern when writing managed code Modules as these modules will be much slower and take much more processing power. If your module slows down requests; it slows down all requests on that web server, not just your ASP.NET code. This is something programmers will have to monitor and consider before building any modules for their applications.</p>
<p>Even though there are ways to slow performance and ways a developer can introduce errors directly into the pipeline; the power of Modules and the options they bring to developers if used correctly is very exciting. I can already think of a number of circumstances over the years where we would have greatly benefited from this flexibility. Just remember to use them wisely.  If you do, then I declare good times are in the pipeline! </p>]]></description><pubDate>7/23/2009 10:07:27 AM</pubDate></item><item><title><![CDATA[SaaS: It's Early in the Curve]]></title><author><![CDATA[Justin Lafontaine]]></author><description><![CDATA[<ol>
    <li><span>SaaS applications are hosted web applications that are accessed and use in a browser. SaaS applications can be used in place of traditional executable programs that are installed on a workstation.  </span></li>
</ol>
<p><span>Some applications make more sense as web applications (Ex. collaboration, workflow, CRM), while others don't make much sense (Ex. utilities, media players).  The really interesting segment is the grey area applications that aren't obviously fits for the web, but aren't bad fits either (Ex. word processors, spreadsheets).  The key benefits of SaaS applications are lower upfront costs (subscription based), limited installation and maintenance requirements, instant upgrades, accessibility from anywhere, less piracy and easier sharing of application data.</span></p>
<p><span>The implementation and adoption of SaaS applications has been slow, but steady.  The question is...When will SaaS make the jump?</span></p>
<p><span>One factor that will likely encourage the transition is the service based Linux economic model.  Another factor is the constantly evolving web standards that allow more complex and interactive applications to be realized within the browser. </span></p>
<p><span>Recent events may provide some clues to the future.  Microsoft has spoken about a big move towards software services, but recent announcements have been much more conservative.  At Software 2007 conference Microsoft took a giant half step and slowed down their push towards SaaS.  Steve Ballmer announced a move towards "Software plus services" which means standard executable applications with more web connectivity, instead of true web applications.</span></p>
<p><span>Will the pace of SaaS adoption be affected by Microsoft’s change of pace?  Probably.</span></p>
<p><span>Is the long term adoption of SaaS jeopardized by Microsoft's change of pace?  No.</span></p>
<p><span>Microsoft’s half step shows that it is easy to recognize the coming shift towards SaaS applications, but that it is hard for big companies to make a dramatic move to a new revenue model.  The biggest thing we can learn from recent events is that we a lot earlier in the SaaS adoption curve than we previously thought and that the old software model probably has a little more inertia than anticipated.</span></p>]]></description><pubDate>7/23/2009 10:07:27 AM</pubDate></item><item><title><![CDATA[In the Land of AJAX]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>I have been living in Ajax (the actual city, that is) for almost 10 years. Incidentally, I have been doing AJAX related web development for nearly all of that time. Although it wasn’t called AJAX at the time, I am glad they decided to name it for my hometown ;)</p>
<p>Back in mid 90s, when Internet Explorer was still battling with Netscape for survival, I was coding JavaScript on my pages that talked to Java Applets, which in turn made asynchronous calls to the web server and updated my web pages by calling JavaScript functions on them. I even used the Applets for some interesting animated UI, since Flash had yet to be invented. Have times changed that much? I’ll say they have. Big time.</p>
<p>I have been architecting and coding some applications in the last few months using Asp.Net AJAX and the AJAX Control Toolkit, and I have only this say: why didn’t we think of this before? Of course, we did think of it before, it’s just that we didn’t think of it on a big enough scale. Asp.Net AJAX is a framework of technologies that allows for JavaScript to talk to the server via Web Services in a standardized way. On top of that, it is a set of Web Controls that abstracts all the JavaScript and server code away from the developer so that pieced of an AJAX application can be assembled from basic building blocks. This is a very good thing, especially if you’ve ever tried managing JavaScript files of significant size and complexity.</p>
<p>Aside from the technology itself, the AJAX toolkit, provided and supported by Microsoft is open source. That is a revolutionary statement, which provides us with the flexibility of something we can understand from the bottom up, looking at and tweaking example code for our own uses. Never before (at least in my experience) has a Microsoft product provided us with this opportunity.</p>
<p><span>I, for one, plan on taking full advantage.</span></p>
<p><span>Check it out: <a href="http://ajax.asp.net/" target="_blank">ajax.asp.net</a></span></p>]]></description><pubDate>7/23/2009 10:07:27 AM</pubDate></item><item><title><![CDATA[Our Earth As Art by Google]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Contrary to my last post about Google, here is an excellent Google Web service.  Google Maplets allows you to place pins on the Google map to anything you can think of.  Obvious examples are things like gas stations, restaurants and hotels, but there are some other very creative examples popping up.</p>
<p>The <a href="http://maps.google.com/ig/directory?synd=mpl&amp;pid=mpl&amp;features=sharedmap%2Cgeofeed&amp;backlink=http%3A%2F%2Fmaps.google.com%2Fmaps%2Fmm%3Fmapprev%3D1%26ie%3DUTF8%26ll%3D38.272689%2C-96.240234%26spn%3D36.37011%2C63.457031%26z%3D4%26om%3D1&amp;num=24&amp;url=http://maps.google.com/maps/gx%3Foutput%3Dghapi%26q%3Dhttp://bbs.keyhole.com/ubb/download.php%3FNumber%3D175202" target="_blank">crop circles</a> one is pretty cool.  I didn't know that there were a couple of crop circles in the US!  You can spend ours looking at the <a href="http://maps.google.com/ig/directory?synd=mpl&amp;pid=mpl&amp;features=sharedmap%2Cgeofeed&amp;backlink=http%3A%2F%2Fmaps.google.com%2Fmaps%2Fmm%3Fmapprev%3D1%26ie%3DUTF8%26ll%3D38.272689%2C-96.240234%26spn%3D36.37011%2C63.457031%26z%3D4%26om%3D1&amp;num=24&amp;url=http://maps.google.com/maps/ms%3Fie%3DUTF8%26msa%3D0%26msid%3D103763259662194171141.000001119b4afdeef007c%26ll%3D1.559294,52.914962%26spn%3D179.837563,360%26z%3D0%26om%3D1%26output%3Dghapi" target="_blank">'Our Earth as Art</a>' map.</p>
<p>Maplets are installed to the 'My Maps' tab where you can also create and publish your own maps.  Your maplets can be shown or hidden and viewed in map, satellite or hybrid modes.</p>
<p>We've been building applications using the Google Maps API for a few years now, but Maplets make it easier to add your content and customize the pins.  Can't wait to see what else people think up!</p>
<p><a href="http://maps.google.com/ig/directory?synd=mpl&amp;pid=mpl&amp;features=sharedmap%2Cgeofeed&amp;backlink=http%3A%2F%2Fmaps.google.com%2Fmaps%2Fmm%3Fmapprev%3D1%26ie%3DUTF8%26ll%3D38.272689%2C-96.240234%26spn%3D36.37011%2C63.457031%26z%3D4%26om%3D1&amp;cat=all" target="_blank">Google Maplets Directory</a></p>]]></description><pubDate>7/23/2009 10:07:27 AM</pubDate></item><item><title><![CDATA[Cool Silverlight Samples]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Microsoft® Silverlight™ is a cross-browser, cross-platform plug-in for delivering the next generation of .NET based media experiences and rich interactive applications for the Web. </p>
<p>You can learn all about Silverlight here: </p>
<p><a href="http://silverlight.net/" target="_blank">http://silverlight.net/</a></p>
<p>Here are some cool samples of what people are already doing with it: </p>
<p><a href="http://blogs.msdn.com/tims/archive/2007/07/07/from-a-to-z-50-silverlight-applications.aspx" target="_blank">http://blogs.msdn.com/tims/archive/2007/07/07/from-a-to-z-50-silverlight-applications.aspx</a> </p>]]></description><pubDate>7/23/2009 10:07:26 AM</pubDate></item><item><title><![CDATA[Does the Microsoft 'Cloud OS' have a Silver Lining?]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>I've been running Windows Vista on my home PC for about three months now, and I'm still waiting for the "Wow".  Sure, I can play my MP3s from any file folder that contains them and I can view PC content on my Xbox, but these features are more like "it's about time" than "Wow".  </p>
<p>After using Vista for a few weeks, it seemed to me that Microsoft had completely lost their way.  Why did they invest millions of dollars and five years of development on an operating system that is little more than a re-skinned XP in the gold rush era of the Internet?  </p>
<p>Over the past few months, whispers of a new Microsoft OS strategy have emerged.  Windows Live or the 'Cloud OS' is essentially a suite of back-end systems and tools that developers can use to hook into underpinning services for building Web sites and Web applications.  Some might say Microsoft is taking a page from Google's playbook.  There has been talk for a few years now about Google's strategy of building a Web-based operating system out of peiced together Web applications.   However Microsoft's strategy is slightly different.  Rather than building Web-based calendars and word processors, Microsoft is providing the infrastructure upon which applications are built. </p>
<p>For example, Windows Live Folders is a service for storing and sharing files, Windows Live Photos, is an application for hosting and sharing photos, and Soapbox is a service for hosting and sharing Videos.  With each new Windows Live service, Microsoft is providing a peice of the puzzle for managing the back-end of Web applications, rather than providing the entire application.  </p>
<p>To be sure, Microsoft will pull these services together into their own versions of Web applications as they do with MSN, Hotmail and others.  But the real power of their strategy is that it provides a robust platform for developers to create their own Web applications while removing the low-level work that takes the most time.  Sounds familiar.</p>
<p><a href="http://get.live.com/betas/home" target="_blank">Windows Live Betas</a></p>]]></description><pubDate>7/23/2009 10:07:26 AM</pubDate></item><item><title><![CDATA[Software Design Patterns: The Necessary Guide of Software Development]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p>Design patterns are not a new topic in the computer industry. They have been around for decades, but these techniques never seem to be taught to software developers directly. Generally software design patterns need to be studied for a developer to apply them in their own solutions. We shouldn’t be reinventing the wheel when fundamental solutions to problems have already been developed and verified in the form of a design pattern. </p>
<p>Sometimes it can take significant upfront work to implement design patterns. Generally, development requires a lot of plumbing classes and interfaces to get things rolling. Some developers will just want to dive into core system functionality and forget about the patterns. But after the upfront work is completed, the code will be a better long term solution to the problem if patterns are used. It doesn't always make much business sense to waste time developing structure. But are you just digging yourself a hole by not using patterns? </p>
<p>Personally I feel that taking the time to learn a few primary patterns (for example Provider, Factory, and Strategy to name a few) and use them in everyday development will produce cleaner, more reusable code that is easier to maintain. In the end hopefully these attributes result in code that lasts longer, is easier to modify/use, and saves money in the long run. </p>
<p>The problem with design patterns is that they are generally explained with a very general Unified Modeling Language (UML) diagram. This UML diagram generally doesn’t supply the developer with the necessary insight into where they can apply these patterns. Being able to see situations where design patterns can be used is a skill that comes with experience but may never come if you don't study the design patterns in the first place. Sometimes, a good solid example of real world scenarios is the only way to really grasp the concepts and see the power of these patterns. I recently watched a series of dnrTV episodes showcasing some great design patterns (developed in .Net 2.0). If you’re looking for a software design pattern eye opener, check out the series links below. </p>
<p>&nbsp;</p>
<p><strong>Jean-Paul Boodhoo on Demystifying Design Patterns</strong><br />
Part 1: <a href="http://www.dnrtv.com/default.aspx?showNum=63" target="_blank">http://www.dnrtv.com/default.aspx?showNum=63</a><br />
Part 2: <a href="http://www.dnrtv.com/default.aspx?showNum=65" target="_blank">http://www.dnrtv.com/default.aspx?showNum=65</a><br />
Part 3: <a href="http://www.dnrtv.com/default.aspx?showNum=68" target="_blank">http://www.dnrtv.com/default.aspx?showNum=68</a><br />
Part 4: <a href="http://www.dnrtv.com/default.aspx?showNum=71" target="_blank">http://www.dnrtv.com/default.aspx?showNum=71</a> </p>
<p>Also a nice site with some core design patterns with sample code (in C#)<br />
<a href="http://www.dofactory.com/Patterns/Patterns.aspx" target="_blank">http://www.dofactory.com/Patterns/Patterns.aspx </a></p>]]></description><pubDate>7/23/2009 10:07:26 AM</pubDate></item><item><title><![CDATA[IIS 7.0 – Microsoft’s First Web Server Built from a Developers Perspective]]></title><author><![CDATA[Jonathan Voigt]]></author><description><![CDATA[<p><span>With the release of Windows Server 2008 Beta 3, comes another long awaited version of Internet Information Services (IIS) 7.0. Although IIS 6.0 was a huge step forward, it still lacks true integration with ASP.NET and has carried many features forward that are either no longer needed or are a pain to set up. Are the new features of IIS 7.0 really going to be helpful or will they just add onto the pile of features that have been added version to version in IIS’s history?  </span> </p>
<p><span>Let’s start with the core of IIS 7.0; the architecture. Perhaps I should say platform, because IIS 7.0 has taken on a completely new modular approach from IIS 6.0. You can now build components that will be used throughout the request-handling pipeline. Not only can you build new components but you can also choose which built in components are loaded and used so as to only load the specific modules that your application requires. You also get the granularity of choosing the sequence of these modules; enabling you to intercept the request early on in the request pipeline process. Can anyone actually say they will miss ISAPI filters?</span></p>
<p><span>Having the ability to pick and choose your pipeline modules allows you to also pick which security model you wish to use. This allows you to load the appropriate modules for your security model and therefore allows you to streamline the security of your application and therefore keep a better understanding of where your application may have security hole. You may also add the built in security modules or custom security modules at different positions in the request pipeline, allowing you to reject invalid requests or handle these requests in whatever fashion you desire.</span></p>
<p><span>Another benefit to this architecture is the performance increases your applications will see. Imagine you are building a web application that uses Basic Authentication. Why should IIS load the modules for Windows or Digest Authentication if you are only interested in Basic Authentication? Well, it shouldn’t have to and because IIS 7.0 allows you to pick and choose which modules to use, by adding only the Basic Authentication module you gain the benefits of not loading other unnecessary security modules.  This is the case for many other features of IIS 7.0 as well, not just security.</span></p>
<p><span>So it looks like the new modular architecture will give us lots of benefits but will this be harder to configure and manage. Luckily, they’ve made a few changes to the UI as well. Actually, they’ve made a few changes to the whole administration of IIS 7.0. With a completely new management UI, users should be able to set up their sites with much greater ease as well as have the option to customize the UI themselves. New features like .NET configuration, creating new users and many other settings are now directly accessible from the IIS interface. Security is also tied tightly to the new UI allowing you to assign certain areas of the configuration UI to specific users. This allows the delegation of control for website configuration to others while keeping certain security features centralized. Remove Management is also available with a new Remove Manager application.   If this isn’t enough, IIS 7.0 has also cleaned up the application pool setup by using a new automatic application pool isolation architecture which creates new application pools automatically. Hopefully this will eliminate the dreaded “Service Unavailable” screen when you forget to place ASP.NET 1.1 and ASP.NET 2.0 applications on different application pools.</span></p>
<p><span>So with this new architecture, and these new features; I’m already thinking of new ways to develop applications and make use of this new platform. Perhaps, you will hear of some of these concepts in the months to come...</span></p>]]></description><pubDate>7/23/2009 10:07:26 AM</pubDate></item><item><title><![CDATA[Google Garbage]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Is it me, or is the Google logo popping up way too much lately.  Don't get me wrong - I'm a huge Google fan.  But I also believe that a company should focus on what it does best.  In Google's case, that is clearly search (and search related things).  To me, anything Google does that stretches beyond their core search offering is awkward, boring and competing against much better alternatives.</p>
<p><strong>Google Stars</strong></p>
<p>The following applications are great innovations and deserving of the Google brand:</p>
<ul>
    <li>Google Web Search </li>
    <li>Google Groups Search </li>
    <li>Google Image Search </li>
    <li>Google Analytics </li>
    <li>Google Maps </li>
    <li>Google Earth </li>
    <li>Google Mars </li>
</ul>
<p><strong>Google Garbage</strong></p>
<p>This list of Google applications was probably best left on the Google Labs Floor:</p>
<p>
<table cellspacing="0" cellpadding="3" border="1">
    <tbody>
        <tr>
            <td><strong>Application</strong></td>
            <td><strong>Superior Alternative</strong></td>
        </tr>
        <tr>
            <td>Google Video</td>
            <td>
            <p><a href="http://www.youtube.com/" target="_blank">YouTube</a> (yeah, I know Google owns this)</p>
            </td>
        </tr>
        <tr>
            <td>GMail  </td>
            <td><a href="http://mail.yahoo.com/" target="_blank">Yahoo! Mail</a></td>
        </tr>
        <tr>
            <td>Blogger</td>
            <td><a href="http://www.typepad.com/" target="_blank">TypePad</a>, <a href="http://www.wordpress.com/" target="_blank">WordPress</a></td>
        </tr>
        <tr>
            <td>Google Calendar</td>
            <td><a href="http://calendar.yahoo.com/" target="_blank">Yahoo! Calendar</a></td>
        </tr>
        <tr>
            <td>Picasa</td>
            <td><a href="http://www.flickr.com/" target="_blank">Flickr</a></td>
        </tr>
        <tr>
            <td>Orkut</td>
            <td><a href="http://www.facebook.com/" target="_blank">Facebook</a></td>
        </tr>
    </tbody>
</table>
</p>
<p>The list goes on and on. Disagree with me?  Frustrated with another piece of Google Garbage?  <a href="mailto:mike@edentity.ca">Email me</a>.</p>]]></description><pubDate>7/23/2009 10:07:26 AM</pubDate></item><item><title><![CDATA[Making Sense of Web Application Bombardment]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Web-based applications are launching at an alarming rate.  We all hear about the new Google services, but for every Google Web application, there are 20 independent companies doing the same thing.  </p>
<p>Granted most of them will end up in the "dead pool" within the first six months; however the ease of creating Web applications and the sheer volume of new application launches is creating a paradigm shift that must be taken seriously by entrenched software and Web application vendors.</p>
<p>Whereas most software companies try to differentiate their product by jamming as many features into them as they can, the next generation of software will harness the best-of- breed Web applications by integrating them with their offering.  We're seeing this already with the <a href="http://developers.facebook.com/" target="_blank">Facebook Platform</a>, <a href="http://desktop.google.com/plugins/" target="_blank">Google Gadgets</a> and <a href="http://pipes.yahoo.com/pipes/" target="_blank">Yahoo Pipes</a>.  In the very early stages, these services are showing tremendous potential for aggregating a myriad of Web applications.  <a href="http://www.popfly.ms/" target="_blank">Microsoft Popfly</a> will allow users to create their own applications by tying in popular Web applications in a customized way - all without writing a single line of code.</p>
<p>As a content management vendor, why would we try to build blogging tools that are better than TypePad or Analytics tools that are better than the free Google Analytics?  These services are designed to be plugged into other software and are focused on being the best at what they are.</p>
<p>Of course there are important questions associated with this strategy.  </p>
<p>What happens if a Web application partner goes down for a day or goes out of business?  <br />
What is the revenue model?  <br />
Who is going to support the components of your offering that are provided by a third part? <br />
How do you sync new product releases?  <br />
How do you ensure proper testing of the product?</p>
<p>As with any new strategy or paradigm, there are paths that need to be carved and hits that need to be taken before the ideal approach takes shape.   But it's clear that now, more than ever, software and Web applications vendors will have to adapt to survive.</p>
<p><a href="http://www.techcrunch.com/" target="_blank">TechCrunch</a> - up-to-the-second Web news<br />
<a href="http://www.webware.com/" target="_blank">WebWare</a> - commentary on Web applications</p>]]></description><pubDate>7/23/2009 10:07:16 AM</pubDate></item><item><title><![CDATA[KickApps: Social Networking in a Can]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>KickApps has a great concept:  Plug social networking and user generated content into your branded site.  Users can upload videos, create their own blogs, and interact with other users - all within an interface that mixes your brand with a Facebook/YouTube hybrid. </p>
<p>Their hosted solution takes care of the pumbing for managing user profiles, uploading content and converting various video formats to Flash.  Users can create their own "personal space" within your site and can rate other users' submitted content.   Widgets can then be created which are snippets of code that can be added to any Web site or blog to direct users to their KickApps site.</p>
<p>There are a number of compelling implementations in place (although none in Canada that I can find), but my favourite is the site for the <a href="http://www.bet.com/static/betawardscontest/" target="_blank">BET Awards</a>. Users are encouraged to sign up (for free) and upload a video of their best hip hop performance.  Other users can rate performances and blog about the development of the awards.  With cross-promotion on BET Television, the network has created a tremendous buzz and a distinct bond with their audience.</p>
<p>On the downside, I find the KickApps sites to be very "temporary" feeling.  You can change the look-and-feel of your KickApps site, but you can tell that it is very templated, and the templates themselves are a little awkward.  The Widgets are a great idea, but again, the Flash looks a little hokey.</p>
<p>Overall, we are very excited about this technology.  Our clients in the Media and Entertainment space will find immediate value for adding this type of draw to their sites.  Imagine a "personal short films" section for Cineplex.com or "my country music videos" section on CMT.ca.  Best of all, our KickApps modules allow you to plug this service into your <a href="http://www.agilitycms.com/" target="_blank">Agility</a> managed Web site with ease.</p>
<p>Check them out:</p>
<p><a href="http://www.kickapps.com/">www.kickapps.com</a> </p>
<p>Their competition:</p>
<p><a href="http://www.ning.com/">www.ning.com</a><br />
<a href="http://www.pluck.com/">www.pluck.com</a><br />
<a href="http://www.pringo.com/">www.pringo.com</a></p>
<p>Give us a call to learn how to integrate a social network into your site!</p>]]></description><pubDate>7/23/2009 10:07:16 AM</pubDate></item><item><title><![CDATA[Bring Business into the Social Networks]]></title><author><![CDATA[Justin Lafontaine]]></author><description><![CDATA[<p>Whether or not you use social and business networking websites such as facebook.com and myspace.com, there is no disputing that a tremendous number of people around the world do.  Facebook.com boasts over 24 million members, while myspace.com claims over 100 million accounts.  These are not trivial numbers.</p>
<p>With so many people from different parts of the world and different demographics using these networking sites opportunities abound for businesses to reach their target market.<span>   </span>The real issue is identifying the opportunities.</p>
<em>Tap into an existing social network</em>
<p>Having a presence within a community site can be a valuable addition to a company’s web presence and can strength and increase traffic to an existing traditional web presence.<span>   </span>One successful strategy is to launch campaigns within communities.  For example, Burger King created a campaign that included a MySpace page for their mascot/spokesman “The King”.  The King’s page and the campaign became very popular, in large part because of the viral nature of content within the site's community.</p>
<p>Another strategy is to creating community applications that provide value and tie into a service or product. Facebook.com has a public API that can be used to develop small applications that can be incorporated into Facebook pages and tied to external services. This allows tools and games to be created which provide value or entertainment to the user and ultimately relate back to the business and the product.</p>
<p>There are of course pitfalls associated with businesses venturing into the social networking environment. If they are not careful they will be perceived as an unwelcome corporate trespassers.  There is no blueprint for being cool or fitting in, but if you know your market well you should be able to determine what appeals to them.</p>
<p><em>Community</em></p>
<p>Perhaps the most import thing that can be learned from the success of social networking sites is the importance of community for drawing and holding web user interest.  For years people have been preaching this, but social networking sites have confirmed it beyond a shadow of a doubt. People flock to, and return to, communities that provide interaction, entertainment and value.</p>
<p>People are drawn to dynamic content and community interaction. Adding networking and community features to your business’ web site will strengthen your web presence.  Depending on the target market you can start small by incorporating blogs and discussion forums and expand to include perks and ‘insider’ access for members, contests, loyalty programs, collaboration groups, interactive services and more.</p>]]></description><pubDate>7/23/2009 10:07:16 AM</pubDate></item><item><title><![CDATA[Who's Your PollDaddy?]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>PollDaddy is a great new tool for adding polls anywhere on your site or blog in minutes.  I created this poll while I was waiting for people to gather for a meeting this morning.  Add polls to your Web site, Blogs, MySpace and more with ease! </p>
<p>Polls can be created in JavaScript, Flash or as a simple link, so you are guaranteed to find a method that works for you. Widgets can be set up that act as a placeholder on your site for polls that you control in the PollDaddy interface.  This option is the best way to add a PollDaddy poll to your <a href="http://www.agilitycms.com/" target="_blank">Agility</a> powered site. </p>
<p>Set up your poll here: <a href="http://www.polldaddy.com/" target="_blank">www.polldaddy.com</a>. </p>
<p><embed name="beta3" pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://www.polldaddy.com/poll.swf" width="252" height="355" type="application/x-shockwave-flash" scale="autoscale" salign="tl" bgcolor="#ffffff" wmode="transparent" quality="high" FlashVars="p=60503" saveEmbedTags="true" allowScriptAccess="never" /></p>]]></description><pubDate>7/23/2009 10:07:15 AM</pubDate></item><item><title><![CDATA[Demofuse: Innovative Web Site and Application Demo Tool]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Demofuse is the first non-Flash based demo / tutorial tool that I have seen and I really like it.  It uses overlays to highlight areas of a page and describe what's going on.  Demofuse is far less expensive than Flash for creating Web demos of either a site or an application.  Best of all, if you change the content of your site or application, your Demofuse demo automatically updates because it's completely decoupled.</p>
<p>Two immediate applications jump to mind.  One, for our client Cineplex Entertainment, is to train end-users on the new Cineplex.com interface.  It's a little late for them since they have recently completed a Flash-based tutorial, but as their Web site evolves, it might be worth looking at.  The second is training new users of <a href="http://www.agilitycms.com/" target="_blank">Agility CMS </a>on how the software works.  We have been toying with the idea of building a Flash demo for new users, but Demofuse seems to be a lot easier and cheaper to work with.</p>
<p>Demofuse is based in rural Southwestern Ontario.  You may have seen their "15 minutes of fame" at <a href="http://www.meshconference.com/" target="_blank">Mesh 07</a>, or the subsequent <a href="http://www.techcrunch.com/2007/06/01/demofuse-embedded-website-tours/" target="_blank">coverage that they received on TechCrunch</a>.</p>
<p>Congratulations on a great product folks.  Looking forward to trying it out!</p>
<p><a href="http://www.demofuse.com/" target="_blank">Demofuse Home</a> (click on 'Sample Tour' to see it in action)</p>]]></description><pubDate>7/23/2009 10:07:15 AM</pubDate></item><item><title><![CDATA[This Year's Coolest Web Applications]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Over the course of 20 days in May and June, the community of Webware.com users voted for its favorite Web applications. These are the results: the top 100 Web apps, 10 in each of 10 categories, determined by Webware readers and the fans of the sites that made the final cut.</p>
<p>I'm like a kid in a candy store on this site :)</p>
<p><a href="http://www.webware.com/html/ww/100.html" target="_blank">http://www.webware.com/html/ww/100.html</a></p>]]></description><pubDate>7/23/2009 10:07:15 AM</pubDate></item><item><title><![CDATA[Good Article on CMS Implementation Patterns]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>Our <a href="http://www.agilitycms.com/" target="_blank">Agility Content Management System</a> falls under the 'Structured Publishing' paradigm according to Seth Gottlieb, a <a href="http://www.cmprofessionals.org/" target="_blank">CM Professionals</a> board member and authority on the topic.  This makes it ideal for applications where sites where the presentation is very customized or your content is being broadcast to different media such as Web, Mobile and Social Networking Widgets (e.g. Facebook applications).</p>
<p>Says Seth:</p>
<blockquote dir="ltr" style="margin-right: 0px;">
<p>"Structured Publishing is when your CMS publishes content as XML or rows in a relational database rather than pages on a website. A totally decoupled presentation tier then reads from this "presentation repository" to deliver the website."</p>
</blockquote>
<p dir="ltr">This 'decoupling' of the presentation layer from the content repository provides a tremendous amount of control over the layout and behaviour of your site.  Whereas some Content Management Systems force you to build the presentation layer as they see fit according to their templating rules, Agility provides unlimited freedom to build your Web site to your creative vision. </p>
<p dir="ltr">Seth's articles discuss this topic in detail:</p>
<p dir="ltr"><a href="http://contenthere.blogspot.com/2007/06/cms-deployment-patterns.html" target="_blank">CMS Deployment Patterns</a></p>
<p dir="ltr"><a href="http://contenthere.blogspot.com/2006/12/area-architect-dreams-of-model.html" target="_blank">Area Architect Dreams of Model Architecture</a></p>
<p dir="ltr">Other relevant links: </p>
<p><a href="http://www.cmprofessionals.org/" target="_blank">CM Professionals</a></p>
<p><a href="http://www.cmswatch.com/" target="_blank">CMS Watch Home</a></p>]]></description><pubDate>7/23/2009 10:07:15 AM</pubDate></item><item><title><![CDATA[What do You Expect from the Web?]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>It used to be when we designed applications for the web, my boss at the time would nearly always look at the architecture and say “but where is this feature, can’t we do this on the web yet?” or “why can’t I do this like a <i>normal</i> application?” My answer was usually something along the lines of “what do you expect from the web?” That was how I thought about the web 10 years ago, when every new challenge was an attempt to bring more richness and responsiveness to the user interface.</p>
<p>At some point, though, I think we’ve stopped looking at the web in terms of what it is capable of, indeed, we don’t even try to define what the ”web” is anymore, since it can mean anything from a blog, to google.com, to Xbox Live Marketplace, to email and a ton of other things. Personally, I don’t even bother to try and understand the terminology anymore; I stopped doing that after <a href="http://en.wikipedia.org/wiki/Web_2" target="_blank">Web 2.0</a> and <a href="http://en.wikipedia.org/wiki/Electronic_business" target="_blank">e-Business</a>. We know what the web is capable of – anything we can imagine.</p>
<p>What happened? What <i>is</i> happening with web? I like <a href="http://www.youtube.com/watch?v=6gmP4nk0EOE" target="_blank">this</a>, from YouTube – it leads me to believe that, as a software architect, I am no longer in control of the web as a bunch of web applications, but rather that it is the responsibility of an architect to organize the building of structures that “normal” people can “live in.” By “live in,” I mean just that, in web terminology, of course ;) We live out our web lives in a constant flux of search, browse, comment, blog, upload, download, install, listen, watch, etc.</p>
<p>When I look at the most popular sites/applications out there, they all seem to find a way to get the end user involved in creating themselves. Let’s look at a few:</p>
<ul>
    <li><b>Search</b>:
    <ul>
        <li>One of the main criteria for the search indexes that we rely on are the searches themselves, the act of searching is, itself, adding weight to the pages that other people will find. </li>
    </ul>
    </li>
    <li><b>Email</b>
    <ul>
        <li>Maybe the most obvious user generated platform, since email means nothing without the actual content created by its users, but when you look at how Hotmail, Yahoo and Google are targeting ads to users based on content demographics, you stop seeing just email and start seeing an entire business model take shape </li>
    </ul>
    </li>
    <li><b>YouTube/MySpace/FaceBook/Live Spaces</b>
    <ul>
        <li>These "community" sites are completely user driven, and in some cases, designed by the end user. Even better, they are targeted at the lowest common denominator in terms of user demographics: kids. Once kids become users, the ways that the platform can be leveraged always seem to grow in ways we don’t expect. </li>
    </ul>
    </li>
    <li><b>Blogs/News</b>
    <ul>
        <li>These kinds of sites are now becoming one of the main, and I think, best sources of news and knowledge available. Blogs can be written by anyone on any topic and accessed via browser or RSS feeds on myriad devices. </li>
    </ul>
    </li>
</ul>
<p>When I first began programming, and then architecting, solutions for the web, I always dreamed about the possibilities of the platform itself – the amount of available bandwidth, browser technologies like CSS, XML and Javascript.   I feel that we have seen those technologies adhere into a environment that is ripe with opportunity for expansive platforms to enable the kinds of organic (some say “viral,” which is ironic, in my opinion) growth that takes web applications and makes them something more – something much more compelling and powerful. </p>
<p>Now, we say to each other, “What do <i>you </i>expect from web?” And it has become an expression of liberation, as opposed to limitation.</p>
<p>What do I expect from the web? I don’t know – but I expect that people like you will go and create it.</p>]]></description><pubDate>7/23/2009 10:07:15 AM</pubDate></item><item><title><![CDATA[Brightcove is Winning an Audience]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<p>When you think of Internet TV or video, the first site that jumps to mind is YouTube.  Rightly so given the huge number of movies and users that they have amassed.</p>
<p>YouTube, however, is not without is not without it's problems.  Quality is bad, most of the content is annoying at best, and there are no easy ways to tap into channels.  Worst of all, users are constantly posting copyrighted material which YouTube must diligently remove to avoid the wrath of hungry lawyers.  Google's ownership provides the deep pockets that makes them an enormous target.</p>
<p>For our clients, one of the frustrating things about YouTube is that it's not designed as a commercial solution.  Branding channels is hard, you can't customize the player easily and syndication is next to impossible.</p>
<p>Brightcove is an emerging solution that promises to address some of YouTube's shortcomings.  It is both an aggregator of video content and a commercial service to help you add your content into the mix.  The player is customizable, syndication is built in and your Brightcove account can even accept user generated videos which can be filtered and added to your channel.  No budget for video hosting?  No problem - use their free solution and take a share of the ad revenue.</p>
<p>A number of other similar solutions are available but with a flurry of recent content provider signings such as Fox, Brightcove has become the clear leader.</p>
<p><a href="http://www.edentity.ca/WhoWeAre/Contact.aspx">Contact us</a> to learn how you can use Brightcove to publish your video content and integrate it with your <a href="http://www.agilitycms.com/" target="_blank">Agility</a> managed Web site.</p>
<p><a href="http://www.brightcove.com/" target="_blank">Visit the Brightcove site</a></p>
<p><a href="http://corp.brightcove.com/about_brightcove/press_releases.cfm" target="_blank">Recent Press for Brightcove</a></p>
<p><a href="javascript:var target=window.open('http://link.brightcove.com/services/player/bcpid987453514','Agility','scrollbars=no,resizable=no,status=no,width=486,height=412');">Agility Promotional Video</a> hosted by Brightcove</p>]]></description><pubDate>7/23/2009 10:07:15 AM</pubDate></item><item><title><![CDATA[Update on Visual Studio 2008: LINQ to improve reliability and speed of software solutions while lowering costs]]></title><author><![CDATA[Michael Iskiw]]></author><description><![CDATA[<p>Data Access is the foundation of all data driven applications. Generally a developer has to start from scratch modeling Objects to reference their database schema (in a perfect world). The developer then has to develop all the "piping" required to create, update, and populate these modeled objects against the database. Most developers would say that this “piping” is boring simple code that takes a long time to develop for their clients and brings little or no value to the features of the solution being developed. </p>
<p><strong>Along comes LINQ...</strong><br />
LINQ stands for .NET Language Integrated Query and is a new language feature being released with Visual Studio “Orcas” (aka Visual Studio 2008). LINQ provides many features that reduce the need to writing “plumbing code” or code that communicates with the database layer from scratch. </p>
<p><strong>Object Relational Mapping</strong><br />
LINQ to SQL provides tools to generate mappings to a database and instantly create Objects from the schemas provided by the database tables. Not only will the objects be created (with appropriate data types) but relationships between objects will be automatically generated, allowing quick and easy development of application object frameworks. Oh and most importantly, you are not locked down to the code that is generated for you! Everything can be configured and tweaked to come out the way you want it to. </p>
<p><strong>Data Querying</strong><br />
LINQ allows users to query a database with inline code (C#/VB.NET) using its new query syntax. The queries developed allow for Type safe execution and compile time error checking. Querying with LINQ removes the need to write the “piping” code that had to be done in the past. A few neat features of LINQ that help developers out: </p>
<ul>
    <li>Running a LINQ Query returns Objects and not tabular data (DataSets and DataTables) </li>
    <li>LINQ Queries can shape data for you without having to write complicated SQL </li>
    <li>You can run LINQ Queries against regular objects and xml data sources, so you are not limited to a dedicated database. This means one syntax fits all! </li>
    <li>LINQ automatically generates the appropriate SQL query required to gather and update data on the database. </li>
    <li>If automatic query generation is not your cup of tea, LINQ allows for users to define stored procedures and have LINQ transform these stored procedures into type safe Methods to call from within code. Generally developers would use this technique but would have to write large chunks of code for each stored procedure they wanted to call. </li>
</ul>
<p>Overall, LINQ provides a way for users to get access and update their data without the need to produce all the structured plumbing that is usually required to get at their data. Generally LINQ will provide improved productivity, Improved compile time support (so bugs can be found earlier rather than later), and an overall improved database API layer for all users who normally would just work with DataSets and DataTables. </p>
<p>LINQ will allow us to build applications faster and more reliably which will help us to provide better quality solutions at a lower price.</p>
<p>For more information about LINQ:</p>
<p><a href="http://msdn2.microsoft.com/en-us/netframework/aa904594.aspx" target="_blank">The LINQ Project</a><br />
<a href="http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspx" target="_blank">Using LINQ to SQL (Part 1) - By Scott Guthrie</a> <br />
<a href="http://weblogs.asp.net/scottgu/archive/2007/05/29/linq-to-sql-part-2-defining-our-data-model-classes.aspx" target="_blank">LINQ to SQL (Part 2 - Defining our Data Model Classes) - By Scott Guthrie</a> <br />
<a href="http://weblogs.asp.net/scottgu/archive/2007/06/29/linq-to-sql-part-3-querying-our-database.aspx" target="_blank">LINQ to SQL (Part 3 - Querying our Database) - by Scott Guthrie</a></p>]]></description><pubDate>7/23/2009 10:07:15 AM</pubDate></item><item><title><![CDATA[Microsoft Silverlight to Change the Face of the Web]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[<div>Many people think of Microsoft as the glasses-and-pocket-protector nerd from the Mac vs PC commercials.  Their focus on business software and operating systems has left them in the wake of companies like Apple and Adobe who aways seem to be on the cutting edge of cool. </div>
<div>The launch of Silverlight hopes to change all that.
<p>Silverlight is essentially Microsoft's version of <a href="http://en.wikipedia.org/wiki/Macromedia_Flash" target="_blank">Adobe Flash</a>.  However, whereas Flash is geared almost entirely to the designer, Microsoft, as usual, has the developer top of mind.  Not only does Silverlight make design tasks easier and more intuitive, it makes it much easier to integrate Flash-like elements into a Web site or Web application.</p>
<p>The success of Silverlight will depend on how quickly it is adopted by end users, designers and developers.  With Internet Explorer accounting for 75%+ of the browser market and plugins available for Firefox and Safari, I don't expect the end users to be the bottleneck.  Microsoft has always had immense support from developers.  So its going to come down to the designer community and whether enough designers will switch to an entirely new alternative.</p>
<p>We see a huge opportunity for improving our clients' solutions with Silverlight.  Integrating animation, video and other interactive elements into Web sites has never been easier, combining interactive elements with back-end logic is a snap, and of course, our clients will be able to update Silverlight elements on their site with Agility - something that is possible, but difficult with Flash.</p>
<p>Silverlight is currently in Beta, but there are already plenty of amazing demos out there.  It is scheduled to be released in the second half of this year.</p>
<p>For more information:</p>
<p><a href="http://weblogs.asp.net/jezell/archive/2007/05/03/silverlight-vs-flash-the-developer-story.aspx" target="_blank">Great writeup on Flash vs. Silverlight</a> from Jesse Ezell of the ASP.NET Community site</p>
<p><a href="http://www.techcrunch.com/2007/05/01/take-time-to-understand-silverlight-its-important/" target="_blank">Review of Silverlight on TechCrunch</a></p>
<p><a href="http://www.microsoft.com/silverlight/default01.aspx" target="_blank">Silverlight Main Page (with good samples)</a></p>
<p><a href="http://silverlight.net/Default.aspx" target="_blank">Silverlight Community Site</a></p>
</div>]]></description><pubDate>7/23/2009 10:07:14 AM</pubDate></item><item><title><![CDATA[New Ideas from Mesh 07]]></title><author><![CDATA[Michael Assad]]></author><description><![CDATA[This year's <a href="http://www.meshconference.com/" target="_blank">Mesh conference</a> was another success.  Highlights included panel discussions with Jim Buckmaster, CEO of <a href="http://toronto.craigslist.org/" target="_blank">Craigslist</a> and and Michael Arrington, founder of <a href="http://www.techcrunch.com/" target="_blank">TechCrunch</a>.
<p>Not surprisingly, the best ideas of the conference came from speaking with attendees who ranged from young CEOs to press people to established venture capitalists.</p>
<p>Overall, there were two new things that stood out as having value for our clients.</p>
<p><strong>Facebook API</strong></p>
<p>The Facebook API (application programming interface) has been opened up to allow anyone and their dog to write applications for Facebook.  Applications can be added to Facebook profiles by users in a couple of clicks.  This is going to be huge!  The best part is that we can populate Facebook applications from our Agility Content Management System.  I'm looking forward to speaking with our clients about how to use this new functionality to enhance their Web sites.</p>
<p><a href="http://developers.facebook.com/" target="_blank">Facebook Developer Site</a></p>
<p><strong>Viigo</strong></p>
<p>The folks at Virtual Reach have finally figured out how to bring Web content to mobile devices.  The mobile Web has been a mess of kludgey browsers and half-baked text interfaces for years.  Viigo takes a page from DoCoMo Japan's play book in bringing the Web to mobile devices in a much more usable way.  The genius is its simplicity.  RSS feeds are read into a simple user interface and grouped by category so the user can scroll through them and get to the information they want with a single click.  Best of all, we can already populate Viigo from Agility!  Stay tuned because they have a lot more coming.</p>
<p><a href="http://www.virtualreach.com/" target="_blank">Viigo from Virtual Reach</a></p>
<p>Overall, Mesh was another worthwhile conference and a highlight of Tech Week 2007.</p>]]></description><pubDate>7/23/2009 10:07:13 AM</pubDate></item><item><title><![CDATA[Resizing images from the server using WPF/WIC instead of GDI+]]></title><author><![CDATA[Joel Varty]]></author><description><![CDATA[<p>Bertrand Le Roy has this on his blog today: <a target="_blank" title="http://weblogs.asp.net/bleroy/archive/2009/12/10/resizing-images-from-the-server-using-wpf-wic-instead-of-gdi.aspx" class="ApplyClass" href="http://weblogs.asp.net/bleroy/archive/2009/12/10/resizing-images-from-the-server-using-wpf-wic-instead-of-gdi.aspx">http://weblogs.asp.net/bleroy/archive/2009/12/10/resizing-images-from-the-server-using-wpf-wic-instead-of-gdi.aspx</a></p>
<p>I’ve had issues in the past about clients complaining of the default thumbnailing capabilities of apps written in .net.&nbsp; The argument is that they can do a better themselves in photoshop (which is true…)</p>
<p>I haven’t tried Bertrand’s code out yet, but it looks promising.</p>
<p>more later - jv</p>
<img alt="" height="1" width="1" src="http://weblogs.asp.net/aggbug.aspx?PostID=7276668" />
<div style="clear: both;"></div>
<p><em>Read the complete post at <a target="_blank" href="http://weblogs.asp.net/joelvarty/archive/2009/12/11/resizing-images-from-the-server-using-wpf-wic-instead-of-gdi.aspx">http://weblogs.asp.net/joelvarty/archive/2009/12/11/resizing-images-from-the-server-using-wpf-wic-instead-of-gdi.aspx</a></em></p>]]></description><pubDate>12/14/2009 8:19:15 PM</pubDate></item><item><title><![CDATA[Using hash in Firefox version 3.0 and below]]></title><author><![CDATA[Osvel Legon]]></author><description><![CDATA[<p>The safest way to clear the hash is location.hash = '#'.</p>
<p>Because our web pages are giving more rich client interaction we are using the location.hash to save client data. </p>
<p>But we must be careful in Firefox versions 3.0 and under because there is an error when you assign an empty value to the hash. The error makes the current page to reload. </p>
<p>The safest way to clear the hash is location.hash = '#'.</p>]]></description><pubDate>12/17/2009 10:59:06 AM</pubDate></item></channel></rss>