<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
  <channel xmlns:blog="http://www.dotnetnuke.com/blog/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
    <title>Antonio Chagoury</title>
    <description>Antonio Chagoury's Blog on DotNetNuke </description>
    <link>http://www.dotnetnuke.com/Resources/Blogs/BlogId/199.aspx</link>
    <language>en-US</language>
    <webMaster>antonio@inspectorit.com</webMaster>
    <pubDate>Thu, 09 Feb 2012 08:11:23 GMT</pubDate>
    <lastBuildDate>Thu, 09 Feb 2012 08:11:23 GMT</lastBuildDate>
    <docs>http://backend.userland.com/rss</docs>
    <generator>Blog RSS Generator Version 4.0.0.0</generator>
    <item>
      <title>Chicago Day of DotNetNuke Recap, Slides and Code</title>
      <link>http://www.dotnetnuke.com/Resources/Blogs/EntryId/2825/Chicago-Day-of-DotNetNuke-Recap-Slides-and-Code.aspx</link>
      <description>&lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;It’s 8:15am on Sunday, October 3rd, I am at O’hare International Airport waiting to board my flight and begin the journey back home. As I sit here, I think, in admiration, of the people that made yesterday’s event a success. Their hard work and dedication is inspiring. Trust me folks, organizing such an event is NOT a piece of cake, its tough work. So with that said, I would like to personally &lt;strong&gt;thank all the organizers, volunteers, sponsors, and other supporters that contributed to making this event happen&lt;/strong&gt;.&lt;/p&gt;&lt;div class="tags"&gt;Tags: dayofdnn,slides,code,jqtouch,jquery&lt;/div&gt;&lt;div class="category"&gt;Category: &lt;a href=http://www.dotnetnuke.com/Resources/Blogs/CatID/14.aspx&gt;Events&lt;/a&gt;&lt;/div&gt;</description>
      <author>antonio@inspectorit.com</author>
      <category domain="http://www.dotnetnuke.com/Resources/Blogs/CatID/14.aspx">Events</category>
      <comments>http://www.dotnetnuke.com/Resources/Blogs/EntryId/2825/Chicago-Day-of-DotNetNuke-Recap-Slides-and-Code.aspx#Comments</comments>
      <slash:comments>1</slash:comments>
      <guid isPermaLink="true">http://www.dotnetnuke.com/Resources/Blogs/EntryId/2825/Chicago-Day-of-DotNetNuke-Recap-Slides-and-Code.aspx</guid>
      <pubDate>Fri, 08 Oct 2010 12:47:00 GMT</pubDate>
      <trackback:ping>http://www.dotnetnuke.comDesktopModules/BlogTrackback.aspx?id=2825</trackback:ping>
      <blog:tag blog:url="http://www.dotnetnuke.com/Resources/Blogs/TagID/125.aspx">dayofdnn</blog:tag>
      <blog:tag blog:url="http://www.dotnetnuke.com/Resources/Blogs/TagID/126.aspx">slides</blog:tag>
      <blog:tag blog:url="http://www.dotnetnuke.com/Resources/Blogs/TagID/127.aspx">code</blog:tag>
      <blog:tag blog:url="http://www.dotnetnuke.com/Resources/Blogs/TagID/128.aspx">jqtouch</blog:tag>
      <blog:tag blog:url="http://www.dotnetnuke.com/Resources/Blogs/TagID/129.aspx">jquery</blog:tag>
    </item>
    <item>
      <title>Extra! Extra! Blog 04.00.00 Officially Released</title>
      <link>http://www.dotnetnuke.com/Resources/Blogs/EntryId/2588/Extra-Extra-Blog-04-00-00-Officially-Released.aspx</link>
      <description>&lt;p&gt;I am happy to announce the anticipated Blog 04.00.00 module. The module packages have been posted for &lt;a href="http://dnnblog.codeplex.com/releases/view/44339" target="_blank"&gt;download&lt;/a&gt; on CodePlex.&lt;/p&gt; </description>
      <author>antonio@inspectorit.com</author>
      <comments>http://www.dotnetnuke.com/Resources/Blogs/EntryId/2588/Extra-Extra-Blog-04-00-00-Officially-Released.aspx#Comments</comments>
      <slash:comments>10</slash:comments>
      <guid isPermaLink="true">http://www.dotnetnuke.com/Resources/Blogs/EntryId/2588/Extra-Extra-Blog-04-00-00-Officially-Released.aspx</guid>
      <pubDate>Tue, 27 Apr 2010 13:28:32 GMT</pubDate>
      <trackback:ping>http://www.dotnetnuke.comDesktopModules/BlogTrackback.aspx?id=2588</trackback:ping>
    </item>
    <item>
      <title>Blog 04.00.00 Is On Its Way</title>
      <link>http://www.dotnetnuke.com/Resources/Blogs/EntryId/2582/Blog-04-00-00-Is-On-Its-Way.aspx</link>
      <description>&lt;p&gt;Did you know that the Blog Module was officially in the &lt;a href="http://www.dotnetnuke.com/Development/ReleaseManagement/ProjectReleaseTracking/tabid/997/ctl/History/mid/3337/ItemID/443/Default.aspx" target="_blank"&gt;Release Tracker&lt;/a&gt;? &lt;/p&gt;  &lt;p&gt;As a matter of fact, that is the 3rd submission to the tracker thus far, as we had to fail the prior two submission due to some minor issues found during the QA process. The last submission occurred on April 16th.&lt;/p&gt;  &lt;p&gt;At this point the only thing between YOU and this FINAL release is just a little more testing. &lt;/p&gt; </description>
      <author>antonio@inspectorit.com</author>
      <comments>http://www.dotnetnuke.com/Resources/Blogs/EntryId/2582/Blog-04-00-00-Is-On-Its-Way.aspx#Comments</comments>
      <slash:comments>1</slash:comments>
      <guid isPermaLink="true">http://www.dotnetnuke.com/Resources/Blogs/EntryId/2582/Blog-04-00-00-Is-On-Its-Way.aspx</guid>
      <pubDate>Fri, 23 Apr 2010 13:24:48 GMT</pubDate>
      <trackback:ping>http://www.dotnetnuke.comDesktopModules/BlogTrackback.aspx?id=2582</trackback:ping>
    </item>
    <item>
      <title>DotNetNuke Blog 4.0 Release Candidate on CodePlex</title>
      <link>http://www.dotnetnuke.com/Resources/Blogs/EntryId/2493/DotNetNuke-Blog-4-0-Release-Candidate-on-CodePlex.aspx</link>
      <description>&lt;p&gt;This is just a quick post to let you know that the RC (Release Candidate) of the Blog Module version 04.00.00 has been posted on &lt;a href="http://dnnblog.codeplex.com/releases/view/40189" target="_blank"&gt;here&lt;/a&gt;, on CodePlex.</description>
      <author>antonio@inspectorit.com</author>
      <comments>http://www.dotnetnuke.com/Resources/Blogs/EntryId/2493/DotNetNuke-Blog-4-0-Release-Candidate-on-CodePlex.aspx#Comments</comments>
      <slash:comments>7</slash:comments>
      <guid isPermaLink="true">http://www.dotnetnuke.com/Resources/Blogs/EntryId/2493/DotNetNuke-Blog-4-0-Release-Candidate-on-CodePlex.aspx</guid>
      <pubDate>Fri, 12 Feb 2010 15:56:32 GMT</pubDate>
      <trackback:ping>http://www.dotnetnuke.comDesktopModules/BlogTrackback.aspx?id=2493</trackback:ping>
    </item>
    <item>
      <title>Upgrading Child Blogs to Categories in Blog Beta 3</title>
      <link>http://www.dotnetnuke.com/Resources/Blogs/EntryId/2448/Upgrading-Child-Blogs-to-Categories-in-Blog-Beta-3.aspx</link>
      <description>&lt;p&gt;&lt;a href="http://www.dotnetnuke.com/Portals/25/Blog/Files/199/2448/WLW-UpgradingChildBlogstoCategoriesinBlogBet_11A2E-UpgradeChildBlogs_2.png"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Last week &lt;a href="http://www.dotnetnuke.com/Community/Blogs/tabid/825/EntryId/2443/Announcing-Beta-Release-of-DNN-Blog-04-00-00.aspx" target="_blank"&gt;I announced&lt;/a&gt; the release of the &lt;a href="http://dnnblog.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=38531" target="_blank"&gt;BETA of DNN Blog&lt;/a&gt;. Since then there has been a “silent” release of BETA 3, which included some fixes to bugs, and issues found by beta testers as well as some that we found ourselves internally.&lt;/p&gt;  &lt;p&gt;In this blog post I want to share a SQL script that we included in the Beta releases, one that received very little press, and as a result probably one that you never (rightfully so) paid attention to. The SQL script in question is located in the following folder: &lt;strong&gt;&lt;em&gt;“DesktopModules/Blog/Upgrade/03.05.02_category_conversion.sql”.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; </description>
      <author>antonio@inspectorit.com</author>
      <comments>http://www.dotnetnuke.com/Resources/Blogs/EntryId/2448/Upgrading-Child-Blogs-to-Categories-in-Blog-Beta-3.aspx#Comments</comments>
      <slash:comments>1</slash:comments>
      <guid isPermaLink="true">http://www.dotnetnuke.com/Resources/Blogs/EntryId/2448/Upgrading-Child-Blogs-to-Categories-in-Blog-Beta-3.aspx</guid>
      <pubDate>Tue, 12 Jan 2010 01:35:36 GMT</pubDate>
      <trackback:ping>http://www.dotnetnuke.comDesktopModules/BlogTrackback.aspx?id=2448</trackback:ping>
    </item>
    <item>
      <title>Announcing Beta Release of DNN Blog 04.00.00</title>
      <link>http://www.dotnetnuke.com/Resources/Blogs/EntryId/2443/Announcing-Beta-Release-of-DNN-Blog-04-00-00.aspx</link>
      <description>&lt;p&gt;&lt;a href="http://www.dotnetnuke.com/Portals/25/Blog/Files/199/2443/WLW-AnnouncingBetaReleaseofDNNBlog04.00.00_EE26-post-1-1201633454_2.jpg"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Hello folks and happy new year!&lt;/p&gt;  &lt;p&gt;A ton of progress has been made on this module since my last &lt;a href="http://www.dotnetnuke.com/Community/Blogs/tabid/825/EntryId/2347/DotNetNuke-Blog-Module-Roadmap.aspx" target="_blank"&gt;blog post&lt;/a&gt; back in September ‘09. That being said, I know how you feel, and that unless you have a functional version running on your own DotNetNuke instance you are bound to be a skeptic. Hey, I sit on the other side of the fence too, when it comes to modules that I am not involved in -  so believe me, I understand. &lt;/p&gt; </description>
      <author>antonio@inspectorit.com</author>
      <comments>http://www.dotnetnuke.com/Resources/Blogs/EntryId/2443/Announcing-Beta-Release-of-DNN-Blog-04-00-00.aspx#Comments</comments>
      <slash:comments>12</slash:comments>
      <guid isPermaLink="true">http://www.dotnetnuke.com/Resources/Blogs/EntryId/2443/Announcing-Beta-Release-of-DNN-Blog-04-00-00.aspx</guid>
      <pubDate>Thu, 07 Jan 2010 17:46:22 GMT</pubDate>
      <trackback:ping>http://www.dotnetnuke.comDesktopModules/BlogTrackback.aspx?id=2443</trackback:ping>
    </item>
    <item>
      <title>DotNetNuke Blog Module Roadmap</title>
      <link>http://www.dotnetnuke.com/Resources/Blogs/EntryId/2347/DotNetNuke-Blog-Module-Roadmap.aspx</link>
      <description>&lt;p&gt;Hello folks!&lt;/p&gt;  &lt;p&gt;Yep, it has been a while since I’ve blogged around here, but rest assured, despite this silence a lot of work has been done on the blog module behind the scenes.&lt;/p&gt;  &lt;p&gt;Our original plans for the Blog module was to make a really big release, pack it full of new features and bug fixes, and publish it as version 04.00.00. This plan turned out to be more ambitious than we thought.    &lt;br /&gt;By the time we realized the scope of our grandiose plan and matched it against the realistic time and effort that the team could actually dedicate to it we realized that it would probably be to long before a release is published; much longer than you would have been pleased with, believe me.&lt;/p&gt;  &lt;p&gt;The result of this reality-check is a compromise, and this compromise is version &lt;a href="http://support.dotnetnuke.com/project/RoadMap.aspx?PROJID=29" target="_blank"&gt;03.05.02&lt;/a&gt;.     &lt;br /&gt;As you can see from our &lt;a href="http://support.dotnetnuke.com/project/RoadMap.aspx?PROJID=29" target="_blank"&gt;Roadmap&lt;/a&gt;, although we scaled down our ambitions, we’re still planning to include features that will certainly be welcome additions to the current functionality, and ones that have been selected as the most requested by our community of users. Some features that I am particularly pleased to announce are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Project code-base upgrade to .NET Framework 3.5 &lt;/li&gt;    &lt;li&gt;Performance Improvements through data caching &lt;/li&gt;    &lt;li&gt;Twitter integration &lt;/li&gt;    &lt;li&gt;New module: Latest Blog Posts (Templatable) &lt;/li&gt;    &lt;li&gt;New module: Latest Comments (Templatable) &lt;/li&gt;    &lt;li&gt;Categories &amp; Tags + New Tag Cloud Module &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I am just as eager to make this new release as you are to download it; I can assure you that we are doing our best to make that happen.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:77a88c06-bcad-4136-adee-a245d7d311ca" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/DotNetNuke" rel="tag"&gt;DotNetNuke&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN" rel="tag"&gt;DNN&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN+Blog+Module" rel="tag"&gt;DNN Blog Module&lt;/a&gt;,&lt;a href="http://technorati.com/tags/03.05.02" rel="tag"&gt;03.05.02&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href=http://www.dotnetnuke.com/Resources/Blogs/EntryId/2347/DotNetNuke-Blog-Module-Roadmap.aspx&gt;More ...&lt;/a&gt;</description>
      <author>antonio@inspectorit.com</author>
      <comments>http://www.dotnetnuke.com/Resources/Blogs/EntryId/2347/DotNetNuke-Blog-Module-Roadmap.aspx#Comments</comments>
      <slash:comments>17</slash:comments>
      <guid isPermaLink="true">http://www.dotnetnuke.com/Resources/Blogs/EntryId/2347/DotNetNuke-Blog-Module-Roadmap.aspx</guid>
      <pubDate>Wed, 02 Sep 2009 12:34:00 GMT</pubDate>
      <trackback:ping>http://www.dotnetnuke.comDesktopModules/BlogTrackback.aspx?id=2347</trackback:ping>
    </item>
    <item>
      <title>One Function to Rule All URLs</title>
      <link>http://www.dotnetnuke.com/Resources/Blogs/EntryId/2248/One-Function-to-Rule-All-URLs.aspx</link>
      <description>&lt;p&gt;&lt;em&gt;(This is a &lt;/em&gt;&lt;a href="http://www.cto20.com/home/entryid/104/one-function-to-rule-all-urls.aspx" target="_blank"&gt;&lt;em&gt;cross-post&lt;/em&gt;&lt;/a&gt;&lt;em&gt; from my &lt;/em&gt;&lt;a href="http://www.cto20.com" target="_blank"&gt;&lt;em&gt;personal blog&lt;/em&gt;&lt;/a&gt;&lt;em&gt;…)&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;I was recently working on implementing &lt;a href="http://www.twitter.com" target="_blank"&gt;Twitter&lt;/a&gt; integration features to the &lt;a href="http://dnnblog.codeplex.com" target="_blank"&gt;DotNetNuke Blog Module&lt;/a&gt; (I’ll write up the details about these features in another blog entry) when I quickly ran into the requirement of having to shorten the blog entries’ URLs. As you may or may not know, Twitter requires that messages be less than 140 characters in length and when you include a link and a title, among other things, character real estate  quickly becomes precious. &lt;/p&gt;  &lt;p&gt;As it turns out, there are several services out there that provide just this service, for example &lt;a href="http://www.tinyurl.com" target="_blank"&gt;TinyURL.com&lt;/a&gt;. Almost all URL shrinking services also provide APIs that enable developers to gain access to the URL shrinking function. &lt;/p&gt;  &lt;p&gt;As I began researching the multitude of URL shrinking services in order to select my provider of choice I found that they all pretty much exposed the shrinking method the same way. Well, since that was the case, then why restrict myself to just one service? Why not just write one function to rule them all?&lt;/p&gt;  &lt;p&gt;With that thought in mind, I built this function, that while it does not include ALL URL shrinking services (I don’t think I could possibly find all of them – you can help though, read through the end) it does include 3 of the most popular ones out there: &lt;a href="http://www.tinyurl.com" target="_blank"&gt;TinyURL&lt;/a&gt;, &lt;a href="http://is.gd" target="_blank"&gt;Is.gd&lt;/a&gt;, and &lt;a href="http://zi.ma" target="_blank"&gt;zi.ma&lt;/a&gt;; here it is: &lt;/p&gt;  &lt;pre class="csharpcode"&gt;        &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; ShrinkURL(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; Url &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; Provider &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;) &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;
            &lt;span class="kwrd"&gt;Try&lt;/span&gt;
                &lt;span class="rem"&gt;'TinyUrl's minimum url lenght is 25&lt;/span&gt;
                &lt;span class="rem"&gt;'We should shrink our url only is legth is more that 25 charachters&lt;/span&gt;
                &lt;span class="kwrd"&gt;If&lt;/span&gt; Url.Length &lt;= 25 &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                    &lt;span class="kwrd"&gt;Return&lt;/span&gt; Url
                &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;

                &lt;span class="kwrd"&gt;Dim&lt;/span&gt; strServiceUrl &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt; = &lt;span class="kwrd"&gt;String&lt;/span&gt;.Empty
                &lt;span class="kwrd"&gt;Select&lt;/span&gt; &lt;span class="kwrd"&gt;Case&lt;/span&gt; Provider.ToLower
                    &lt;span class="kwrd"&gt;Case&lt;/span&gt; &lt;span class="str"&gt;"tinyurl"&lt;/span&gt;
                        strServiceUrl = &lt;span class="str"&gt;"http://tinyurl.com/api-create.php?url="&lt;/span&gt;
                    &lt;span class="kwrd"&gt;Case&lt;/span&gt; &lt;span class="str"&gt;"isgd"&lt;/span&gt;
                        strServiceUrl = &lt;span class="str"&gt;"http://is.gd/api.php?longurl="&lt;/span&gt;
                    &lt;span class="kwrd"&gt;Case&lt;/span&gt; &lt;span class="str"&gt;"zima"&lt;/span&gt;
                        strServiceUrl = &lt;span class="str"&gt;"http://zi.ma/?module=ShortURL&amp;file=Add&amp;mode=API&amp;url="&lt;/span&gt;
                    &lt;span class="kwrd"&gt;Case&lt;/span&gt; &lt;span class="kwrd"&gt;Else&lt;/span&gt;
                        strServiceUrl = &lt;span class="str"&gt;"http://tinyurl.com/api-create.php?url="&lt;/span&gt;
                &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Select&lt;/span&gt;

                &lt;span class="kwrd"&gt;If&lt;/span&gt; &lt;span class="kwrd"&gt;Not&lt;/span&gt; Url.ToLower().StartsWith(&lt;span class="str"&gt;"http"&lt;/span&gt;) &lt;span class="kwrd"&gt;AndAlso&lt;/span&gt; &lt;span class="kwrd"&gt;Not&lt;/span&gt; Url.ToLower().StartsWith(&lt;span class="str"&gt;"ftp"&lt;/span&gt;) &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                    Url = &lt;span class="str"&gt;"http://"&lt;/span&gt; + Url
                &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;

                &lt;span class="kwrd"&gt;Dim&lt;/span&gt; UrlShrinkRequest &lt;span class="kwrd"&gt;As&lt;/span&gt; WebRequest = WebRequest.Create(strServiceUrl + Url)
                &lt;span class="kwrd"&gt;Dim&lt;/span&gt; UrlShrinkResponse &lt;span class="kwrd"&gt;As&lt;/span&gt; WebResponse = UrlShrinkRequest.GetResponse()

                Using reader &lt;span class="kwrd"&gt;As&lt;/span&gt; StreamReader = &lt;span class="kwrd"&gt;New&lt;/span&gt; StreamReader(UrlShrinkResponse.GetResponseStream())
                    &lt;span class="kwrd"&gt;Return&lt;/span&gt; reader.ReadToEnd()
                &lt;span class="kwrd"&gt;End&lt;/span&gt; Using

            &lt;span class="kwrd"&gt;Catch&lt;/span&gt; ex &lt;span class="kwrd"&gt;As&lt;/span&gt; Exception
                &lt;span class="rem"&gt;'If there was an exception, &lt;/span&gt;
                &lt;span class="rem"&gt;'then just return the original url&lt;/span&gt;
                &lt;span class="kwrd"&gt;Return&lt;/span&gt; Url
            &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Try&lt;/span&gt;

        &lt;span class="kwrd"&gt;End&lt;/span&gt; Function&lt;/pre&gt;
&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;As you can see from the “select case” you can pass it the &lt;em&gt;service name (tinyurl, isgd, or zima)&lt;/em&gt;, and it will shrink the URL using the appropriate service. You can also augment this function, of course, with any other service that exposes a RESTFUL API that takes a string as input (the original URL), and returns a string back (the shortened URL). &lt;/p&gt;

&lt;p&gt;I will continue updating this function by adding additional services as time goes on. If you find any service that you think should make it to this list, please let me by posting a comment below. &lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:46f14886-2282-477f-94a6-55e3b36b0616" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/TinyURL" rel="tag"&gt;TinyURL&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Zi.Ma" rel="tag"&gt;Zi.Ma&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Is.GD" rel="tag"&gt;Is.GD&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Twitter" rel="tag"&gt;Twitter&lt;/a&gt;,&lt;a href="http://technorati.com/tags/.net" rel="tag"&gt;.net&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Visual+Basic" rel="tag"&gt;Visual Basic&lt;/a&gt;,&lt;a href="http://technorati.com/tags/URL+Shrinking+Services" rel="tag"&gt;URL Shrinking Services&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href=http://www.dotnetnuke.com/Resources/Blogs/EntryId/2248/One-Function-to-Rule-All-URLs.aspx&gt;More ...&lt;/a&gt;</description>
      <author>antonio@inspectorit.com</author>
      <comments>http://www.dotnetnuke.com/Resources/Blogs/EntryId/2248/One-Function-to-Rule-All-URLs.aspx#Comments</comments>
      <slash:comments>14</slash:comments>
      <guid isPermaLink="true">http://www.dotnetnuke.com/Resources/Blogs/EntryId/2248/One-Function-to-Rule-All-URLs.aspx</guid>
      <pubDate>Mon, 11 May 2009 18:00:54 GMT</pubDate>
      <trackback:ping>http://www.dotnetnuke.comDesktopModules/BlogTrackback.aspx?id=2248</trackback:ping>
    </item>
    <item>
      <title>SEO, Permalink, URL Friendliness, oh my!</title>
      <link>http://www.dotnetnuke.com/Resources/Blogs/EntryId/2087/SEO-Permalink-URL-Friendliness-oh-my.aspx</link>
      <description>&lt;p&gt;Rip Rowan has recently published a great post outlining the improvements the blog module underwent with respect to the "Permalink" link in an effort to improve SEO for the Blog Module.&lt;/p&gt; &lt;p&gt;Take a look at comprehensive &lt;a href="http://riprowan.com/Blog/tabid/36/EntryId/41/Putting-the-Perma-Back-in-Permalink.aspx" target="_blank"&gt;post&lt;/a&gt; and let us know what you think. This is a great opportunity for you to chime in and to let us know your thoughts about the whole URL Friendliness charade before we begin hacking up version 04.00.00. &lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:46a830de-2f7f-4532-925d-be92ad8fcdb9" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/DotNetNukeetNuke" rel="tag"&gt;DotNetNukeetNuke&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN%20Blog" rel="tag"&gt;DNN Blog&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SLUG" rel="tag"&gt;SLUG&lt;/a&gt;,&lt;a href="http://technorati.com/tags/FURL" rel="tag"&gt;FURL&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Permalink" rel="tag"&gt;Permalink&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href=http://www.dotnetnuke.com/Resources/Blogs/EntryId/2087/SEO-Permalink-URL-Friendliness-oh-my.aspx&gt;More ...&lt;/a&gt;</description>
      <author>antonio@inspectorit.com</author>
      <comments>http://www.dotnetnuke.com/Resources/Blogs/EntryId/2087/SEO-Permalink-URL-Friendliness-oh-my.aspx#Comments</comments>
      <slash:comments>10</slash:comments>
      <guid isPermaLink="true">http://www.dotnetnuke.com/Resources/Blogs/EntryId/2087/SEO-Permalink-URL-Friendliness-oh-my.aspx</guid>
      <pubDate>Tue, 18 Nov 2008 02:34:26 GMT</pubDate>
      <trackback:ping>http://www.dotnetnuke.comDesktopModules/BlogTrackback.aspx?id=2087</trackback:ping>
    </item>
    <item>
      <title>Streaming Live Sessions From OpenForce</title>
      <link>http://www.dotnetnuke.com/Resources/Blogs/EntryId/2077/Streaming-Live-Sessions-From-OpenForce.aspx</link>
      <description>&lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 10px 0px 0px; border-right-width: 0px" height="241" alt="OpenForce Live Video Stream" src="http://www.cto20.com/Portals/24/Blog/Files/7/80/WLW-StreamingLiveSessionsFromOpenForce_98CF-OF_LiveStream_6.gif" width="250" align="left" border="0"&gt; I just wanted to drop you all a quick note to let you know that I have figured out a great way to stream live videos from OpenForce '08.&lt;/p&gt; &lt;p&gt;If you want to be notified of when the stream will be active, follow me on twitter: &lt;a href="http://www.twitter.com/antoniochagoury"&gt;http://www.twitter.com/antoniochagoury&lt;/a&gt;&lt;/p&gt; &lt;p&gt;I will be tweeting when the shows begin. Once they begin you can view the shows here: &lt;a title="http://www.cto20.com/OpenForceLIVE.aspx" href="http://www.cto20.com/OpenForceLIVE.aspx"&gt;http://www.cto20.com/OpenForceLIVE.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;I will be streaming my presentation today at 11:45 PST: &lt;a href="http://www.devconnections.com/openforce/default.asp?c=1&amp;s=126" target="_blank"&gt;Done In 60 Minutes: Building a Customer Membership Provider&lt;/a&gt;. Come on over an watch me live!&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:dcb43841-24c3-4f89-94f0-425acf79d169" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/OpenForce08" rel="tag"&gt;OpenForce08&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Twitter" rel="tag"&gt;Twitter&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Antonio%20Chagoury" rel="tag"&gt;Antonio Chagoury&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Live" rel="tag"&gt;Live&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href=http://www.dotnetnuke.com/Resources/Blogs/EntryId/2077/Streaming-Live-Sessions-From-OpenForce.aspx&gt;More ...&lt;/a&gt;</description>
      <author>antonio@inspectorit.com</author>
      <comments>http://www.dotnetnuke.com/Resources/Blogs/EntryId/2077/Streaming-Live-Sessions-From-OpenForce.aspx#Comments</comments>
      <slash:comments>3</slash:comments>
      <guid isPermaLink="true">http://www.dotnetnuke.com/Resources/Blogs/EntryId/2077/Streaming-Live-Sessions-From-OpenForce.aspx</guid>
      <pubDate>Wed, 12 Nov 2008 18:53:10 GMT</pubDate>
      <trackback:ping>http://www.dotnetnuke.comDesktopModules/BlogTrackback.aspx?id=2077</trackback:ping>
    </item>
  </channel>
</rss>
