<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>DevCentral Weblogs</title><link>http://devcentral.f5.com/weblogs/MainFeed.aspx</link><description>weblogs on DevCentral</description><generator>Subtext Version 1.9.5.176</generator><item><title>Governance: Service Catalogs and the Cloud</title><link>http://devcentral.f5.com/weblogs/macvittie/archive/2009/07/02/governance-service-catalogs-and-the-cloud.aspx</link><pubDate>Thu, 02 Jul 2009 09:39:34 GMT</pubDate><guid isPermaLink="true">http://devcentral.f5.com/weblogs/macvittie/archive/2009/07/02/governance-service-catalogs-and-the-cloud.aspx</guid><wfw:comment>http://devcentral.f5.com/weblogs/macvittie/comments/4257.aspx</wfw:comment><wfw:commentRss>http://devcentral.f5.com/weblogs/macvittie/comments/commentRss/4257.aspx</wfw:commentRss><comments>http://devcentral.f5.com/weblogs/macvittie/archive/2009/07/02/governance-service-catalogs-and-the-cloud.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://devcentral.f5.com/weblogs/macvittie/services/trackbacks/4257.aspx</trackback:ping><source url="http://devcentral.f5.com/weblogs/macvittie/rss.aspx">Governance: Service Catalogs and the Cloud</source><description>&lt;p&gt;&lt;em&gt;Can the inherent abstraction of virtualization succeed where &lt;a title="Service Oriented Architecture definition " href="http://www.f5.com/glossary/soa.html" rel="" target="_blank"&gt;SOA&lt;/a&gt; did not? &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;My first read through &lt;a href="http://www.cloudfrontoffice.com/2009/06/emergent-consensus-private-cloud-needs-a-front-office-part-1.html?35a87a90" target="_blank"&gt;a post&lt;/a&gt; on the &lt;a href="http://www.cloudfrontoffice.com/" target="_blank"&gt;Cloud Front Office&lt;/a&gt; led me to scoff disdainfully at the re-emergence of a concept central to a successful &lt;a title="Service Oriented Architecture definition " href="http://www.f5.com/glossary/soa.html" rel="" target="_blank"&gt;SOA&lt;/a&gt; implementation: the service catalog. Oh, we called it "registry" and then "registry/repository (reg/rep)" and finally "governance" but the concept behind it was exactly the same. Take a gander at the description of a cloud service catalog apparently growing out of discussions that began at Structure 09: &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Last week I attended Structure 09, one of the better cloud computing conferences. Everyone I could hear the echo of the need for a service catalog; often it was implicit. &lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;For example, everyone spoke about the need for standardization and multi-tenancy, about the need to abstract computing resources from the application to enable moving workloads as needed.  Which in my mind requires you to a) know what the workload is, b) know the SLA of that workload, c) have well defined underpinning technical services that compose that application service, and therefore d) Have a SERVICE CATALOG to track all of that!&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Now, interestingly enough &lt;a title="Service Oriented Architecture definition " href="http://www.f5.com/glossary/soa.html" rel="" target="_blank"&gt;SOA&lt;/a&gt; governance utilized standards-based metadata like &lt;a href="http://www.f5.com/glossary/soa.html" target="_blank"&gt;WSDL&lt;/a&gt; and &lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-wsilspec.html" target="_blank"&gt;WSIL&lt;/a&gt; to describe services. These descriptions included the endpoint (the physical location) of the service as well as the operations available and how to invoke them. In a full &lt;a title="Service Oriented Architecture definition " href="http://www.f5.com/glossary/soa.html" rel="" target="_blank"&gt;SOA&lt;/a&gt; implementation, the registry was at the heart of the architecture; if you wanted to invoke a service you queried the registry (usually via &lt;a href="http://www.uddi.org/pubs/uddi_v3.htm" target="_blank"&gt;UDDI&lt;/a&gt;), retrieved the description (WSDL, WSIL), and then gathered the information necessary to invoke the service. This abstraction allowed services, ostensibly, to &lt;em&gt;move&lt;/em&gt; and &lt;em&gt;change &lt;/em&gt;over time without, allegedly, negatively impacting the client (consumers). &lt;/p&gt;  &lt;p&gt;So while I was ready to excoriate this idea at first, a quiet hour trying to get a restless toddler back to sleep in the dark o'night led me to reconsider what appears to have been a rather hasty judgment. Might not this notion of a service catalog be more apposite than I first believed? &lt;/p&gt;  &lt;p&gt;Absolutely. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;&lt;strong&gt;ABSTRACTION AND MANAGEMENT (GOVERNANCE) &lt;/strong&gt;  &lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;Let us assume that we can, in some standard way, describe a virtual machine such as is often the foundational building block of an on-demand data center. Perhaps we could even assume that &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/04/21/ovf-a-few-layers-short-of-a-full-stack.aspx" target="_blank"&gt;OVF&lt;/a&gt; might suffice for this purpose. Imagine then, if you will, that these descriptors are stored in a central repository. A repository that is used not necessarily for &lt;em&gt;developers&lt;/em&gt; but for &lt;em&gt;administrators &lt;/em&gt;attempting to automate the provisioning &lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/GoverningtheCloud_26C7/smiley-policeman_2.jpg"&gt;&lt;img title="smiley-policeman" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin: 5px 10px 5px 0px; border-right-width: 0px" height="230" alt="smiley-policeman" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/GoverningtheCloud_26C7/smiley-policeman_thumb.jpg" width="240" align="left" border="0" /&gt;&lt;/a&gt; and management processes that are the basis for so many benefits of on-demand computing. If these descriptors, this &lt;em&gt;metadata&lt;/em&gt;, contains the appropriate &lt;em&gt;management &lt;/em&gt;endpoints rather than just the endpoints of the actual service (application), it would then be possible to easily automate the launch and tear-down of such virtual machines.   &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Furthermore, the inherent chaos that could be caused by virtual machine movement within an on-demand infrastructure could be soothed. When a virtual machine (service) was launched, the descriptor could be updated to include its new physical location. In fact, assuming such services were launched in multiple locations (dare I suggest even across multiple clouds, as might be the case with intercloud) the descriptor could be updated to include &lt;em&gt;all &lt;/em&gt;locations, perhaps even prioritized. &lt;/p&gt;  &lt;p&gt;One of the interesting things virtualization brings to the table that &lt;a title="Service Oriented Architecture definition " href="http://www.f5.com/glossary/soa.html" rel="" target="_blank"&gt;SOA&lt;/a&gt; did not is the ability to abstract &lt;em&gt;management&lt;/em&gt; of services. While WSDL abstracted a service and its operations away from the underlying implementation, that underlying implementation was still very much relevant in that managing the service required an understanding of the platform (.NET, Java EE, etc...) on which the service was deployed. You could not use WSDL or WSIL, for example, to actually manage the service - that was the &lt;em&gt;raison d'être &lt;/em&gt;for &lt;a title="Service Oriented Architecture definition " href="http://www.f5.com/glossary/soa.html" rel="" target="_blank"&gt;SOA&lt;/a&gt; management solutions. &lt;/p&gt;  &lt;p&gt;But virtualization solutions - likely because of many cloud implementations heavy reliance - provide management endpoints (APIs) through which virtual machine instances can be managed. VMs can be started and stopped and monitored through these endpoints (APIs) and the APIs are almost universally &lt;em&gt;web-based&lt;/em&gt;, meaning the endpoint is the equivalent of a URI. That fits nicely into a service catalog and could easily be automated by any number of existing solutions (BPM systems come to mind immediately) or incorporated into custom solutions with relative ease. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;&lt;strong&gt;IS THIS THE BEGINNING OF A CNS (Cloud Naming Service)? &lt;/strong&gt;  &lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;When you start looking at the usefulness of a service catalog it immediately appears that this is more than just an internal governance solution. By stepping back and looking at the bigger picture and the potential implementation of &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/09/18/3627.aspx" target="_blank"&gt;cloudbursting&lt;/a&gt; and &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/30/intercloud-the-evolution-of-global-application-delivery.aspx" target="_blank"&gt;intercloud&lt;/a&gt; solutions in the future, you begin to suspect that perhaps the service catalog and &lt;a href="http://www.f5.com/products/big-ip/product-modules/global-traffic-manager.html" target="_blank"&gt;DNS&lt;/a&gt; need to merge, somehow. Perhaps this is where global &lt;a href="http://www.f5.com/glossary/load-balancing.html" target="_blank"&gt;load balancing&lt;/a&gt; can really shine. On the innertubes today if we want to find a site we use DNS to look up the IP address. In a cloudbursting or intercloud scenario we can't be sure exactly where a service may be residing. Using a system similar to DNS we might (a) lookup the service, (b) retrieve its current location and management endpoints, and (c) manage/invoke at will.   &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Perhaps this is an extension to DNS? Perhaps it's something completely different. While many of the core concepts of cloud computing and virtualization are not new at all and, in fact, appear to be heavily borrowed from programmatic models of the past (distributed systems, &lt;a title="Service Oriented Architecture definition " href="http://www.f5.com/glossary/soa.html" rel="" target="_blank"&gt;SOA&lt;/a&gt;, object-oriented programming) some of the solutions that will be created to help manage cloud and virtualization &lt;em&gt;will &lt;/em&gt;be new, because we have a completely new set of problems and issues to address caused by the convergence of a variety of programmatic and architectural models. &lt;/p&gt;  &lt;p&gt;The use of &lt;a title="Service Oriented Architecture definition " href="http://www.f5.com/glossary/soa.html" rel="" target="_blank"&gt;SOA&lt;/a&gt; governance solutions never truly took the world by storm, and that may be in part that the metadata it carried wasn't "meta" enough given the level of abstraction used by &lt;a title="Service Oriented Architecture definition " href="http://www.f5.com/glossary/soa.html" rel="" target="_blank"&gt;SOA&lt;/a&gt;. Virtualization and cloud computing take that abstraction far enough to be useful both in invocation and management. &lt;a title="Service Oriented Architecture definition " href="http://www.f5.com/glossary/soa.html" rel="" target="_blank"&gt;SOA&lt;/a&gt;, too, was hampered by the fact that automation of processes - while nice - was not a necessary piece of the value equation. For cloud computing (on-demand) automation is one of &lt;em&gt;the &lt;/em&gt;key variables in the benefit equation, making abstraction of management a necessity. &lt;/p&gt;  &lt;p&gt;The more I think about this concept, the more I am liking where it may be going. Service catalogs may, in fact, be one of the "movers" of cloud in the enterprise, as it would offer a firm foundation on which automation and management solutions could be more easily built and deployed. &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://twitter.com/lmacvittie"&gt;&lt;img height="18" alt="Follow me on Twitter" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_twitt-twoo-icon.png" width="18" border="0" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/Rss.aspx"&gt;&lt;img src="http://devcentral.f5.com/Portals/0/images/Icons/icon_xml_18.gif" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.slideshare.net/lmacvittie"&gt;&lt;img height="18" alt="View Lori's profile on SlideShare" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_slideshare.png" width="18" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lmacvittie.tumblr.com" border="0"&gt;&lt;img title="Follow me on Tumblr" height="18" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_tumblr.gif" width="18" border="0" /&gt;&lt;/a&gt; &lt;a href="http://lmacvittie.posterous.com/"&gt;&lt;img title="Posterous" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_posterous.png" border="0" /&gt;&lt;/a&gt; &lt;a href="http://www.linkedin.com/in/lmacvittie"&gt;&lt;img src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_linkedin_16.png" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.friendfeed.com/lmacvittie"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="16" alt="friendfeed" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/friendfeed_3.jpg" width="16" border="0" /&gt;&lt;/a&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/icon_facebook_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="16" alt="icon_facebook" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/icon_facebook_4.png" width="16" border="0" /&gt;&lt;/a&gt; &lt;a title="Subscribe using any feed reader!" href="http://www.addthis.com/feed.php?pub=lmacvittie&amp;amp;h1=http%3A%2F%2Fdevcentral.f5.com%2Fweblogs%2Fmacvittie%2FRss.aspx&amp;amp;t1="&gt;&lt;img height="18" alt="AddThis Feed Button" src="http://s9.addthis.com/button1-fd.gif" width="125" border="0" /&gt;&lt;/a&gt; &lt;a title="Bookmark and Share" onclick="window.open('http://www.addthis.com/bookmark.php?wt=nw&amp;amp;pub=lmacvittie&amp;amp;url='+encodeURIComponent(location.href)+'&amp;amp;title='+encodeURIComponent(document.title), 'addthis', 'scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no,screenX=200,screenY=100,left=200,top=100'); return false;" href="http://www.addthis.com/bookmark.php" target="_blank"&gt;&lt;img height="18" alt="Bookmark and Share" src="http://s9.addthis.com/button1-share.gif" width="125" border="0" /&gt;&lt;/a&gt; &lt;script type="text/javascript" src="http://track.mybloglog.com/js/jsserv.php?mblID=2008070914270355"&gt;&lt;/script&gt;&lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:52059a2c-6ecb-43f0-959e-82659177ea7b" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/MacVittie" rel="tag"&gt;MacVittie&lt;/a&gt;,&lt;a href="http://technorati.com/tags/F5" rel="tag"&gt;F5&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SOA" rel="tag"&gt;SOA&lt;/a&gt;,&lt;a href="http://technorati.com/tags/cloud" rel="tag"&gt;cloud&lt;/a&gt;,&lt;a href="http://technorati.com/tags/virtualization" rel="tag"&gt;virtualization&lt;/a&gt;,&lt;a href="http://technorati.com/tags/infrastructure" rel="tag"&gt;infrastructure&lt;/a&gt;,&lt;a href="http://technorati.com/tags/architecture" rel="tag"&gt;architecture&lt;/a&gt;,&lt;a href="http://technorati.com/tags/service+catalog" rel="tag"&gt;service catalog&lt;/a&gt;,&lt;a href="http://technorati.com/tags/registry" rel="tag"&gt;registry&lt;/a&gt;,&lt;a href="http://technorati.com/tags/governance" rel="tag"&gt;governance&lt;/a&gt;,&lt;a href="http://technorati.com/tags/WSDL" rel="tag"&gt;WSDL&lt;/a&gt;,&lt;a href="http://technorati.com/tags/OVF" rel="tag"&gt;OVF&lt;/a&gt;,&lt;a href="http://technorati.com/tags/intercloud" rel="tag"&gt;intercloud&lt;/a&gt;,&lt;a href="http://technorati.com/tags/management" rel="tag"&gt;management&lt;/a&gt;,&lt;a href="http://technorati.com/tags/web" rel="tag"&gt;web&lt;/a&gt;,&lt;a href="http://technorati.com/tags/internet" rel="tag"&gt;internet&lt;/a&gt;,&lt;a href="http://technorati.com/tags/blog" rel="tag"&gt;blog&lt;/a&gt;&lt;/div&gt;  &lt;p&gt;Related blogs &amp;amp; articles: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/30/intercloud-the-evolution-of-global-application-delivery.aspx"&gt;Intercloud: The Evolution of Global Application Delivery&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.cloudfrontoffice.com/2009/06/emergent-consensus-private-cloud-needs-a-front-office-part-1.html?35a87a90" target="_blank"&gt;Emergent Consensus: Private Cloud Needs a Front Office Part 1&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/01/13/building-an-elastic-environment-requires-elastic-infrastructure.aspx"&gt;Building an elastic environment requires elastic infrastructure&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/09/18/3627.aspx"&gt;Building a Cloudbursting Capable Infrastructure&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://devcentral.f5.com/weblogs/macvittie/aggbug/4257.aspx" width="1" height="1" /&gt;</description><dc:creator>Lori MacVittie</dc:creator></item><item><title>To Boldly Go Where No Production Application Has Gone Before</title><link>http://devcentral.f5.com/weblogs/macvittie/archive/2009/07/01/to-boldly-go-where-no-production-application-has-gone-before.aspx</link><pubDate>Wed, 01 Jul 2009 10:14:25 GMT</pubDate><guid isPermaLink="true">http://devcentral.f5.com/weblogs/macvittie/archive/2009/07/01/to-boldly-go-where-no-production-application-has-gone-before.aspx</guid><wfw:comment>http://devcentral.f5.com/weblogs/macvittie/comments/4256.aspx</wfw:comment><wfw:commentRss>http://devcentral.f5.com/weblogs/macvittie/comments/commentRss/4256.aspx</wfw:commentRss><comments>http://devcentral.f5.com/weblogs/macvittie/archive/2009/07/01/to-boldly-go-where-no-production-application-has-gone-before.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://devcentral.f5.com/weblogs/macvittie/services/trackbacks/4256.aspx</trackback:ping><source url="http://devcentral.f5.com/weblogs/macvittie/rss.aspx">To Boldly Go Where No Production Application Has Gone Before</source><description>&lt;p&gt;&lt;em&gt;The importance of stress-testing in production &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Everyone is still a-twitter over the problems the web experienced last week right after the news of Michael Jackson’s death. There have been &lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:8747F07C-CDE8-481f-B0DF-C6CFD074BF67:0f8bee67-b4eb-4be1-ac03-af5aec08578c" style="padding-right: 0px; display: inline; padding-left: 0px; float: left; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/ToBoldlyGoWhereNoProductionApplicationHa_3A48/originalseries-8x6.jpg" title="Is your team ready to explore the unknown? (Uniforms optional, but cool.)" rel="thumbnail"&gt;&lt;img border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/ToBoldlyGoWhereNoProductionApplicationHa_3A48/originalseries_44253.png" /&gt;&lt;/a&gt;&lt;/div&gt;  &lt;p&gt;numerous stories on the fact that the Internet nearly fell over itself and died under the strain of trying to support the rush of millions of users as they queried, clicked, watched video, read blogs and news reports on the subject. &lt;/p&gt;  &lt;p&gt;The Internet itself, of course, was just fine. The infrastructure comprising our electronic highway was humming along, routing packets happily here and there. What fell down were &lt;em&gt;web applications &lt;/em&gt;and servers, overwhelmed with more concurrent connections than they could possibly handle despite their (I assume) high-availability infrastructure. &lt;/p&gt;  &lt;p&gt;Obviously this is a difficult scenario to test for – or at least it appears to be. No organization is really able to test its production environment against an onrush of such a magnitude. The cost in software or hardware alone just to &lt;em&gt;generate &lt;/em&gt;that much traffic would break most budgets even in normal economic times. &lt;/p&gt;  &lt;p&gt;But to avoid the embarrassment of being “unavailable” it’s a necessity. Organizations need to test against worst case scenarios, i.e. an onslaught of visitors of a magnitude most sites can only dream of seeing, to ensure not only that their web applications can handle the load but to work out any kinks that may be lurking in their infrastructure, waiting for a heavy load to appear. &lt;/p&gt;  &lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;&lt;strong&gt;CONDITIONAL ERRORS&lt;/strong&gt;   &lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;  &lt;p&gt;Developers know that sometimes defects only show up under certain conditions. Sometimes it’s extended use (memory leaks) and sometimes it’s high capacity (out of memory, artificial limits on arrays, etc…). Those conditions are hard to simulate let alone find in a test environment because all too often organizations don’t have the means to adequately force those conditions. Time and traffic cost money, and any one who has worked inside an enterprise organization knows that QA and testing often have more limited budgets than most IT departments. &lt;/p&gt;  &lt;p&gt;And sometimes, just sometimes, it’s not even the applications’ fault. Sometimes a problem will appear when an application is under heavy load in the &lt;em&gt;infrastructure; &lt;/em&gt;a configuration choice or scripting error can appear suddenly at higher loads. It may have never have impacted the &lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/ToBoldlyGoWhereNoProductionApplicationHa_3A48/caution-loadlimit_2.jpg"&gt;&lt;img title="caution-loadlimit" style="border-right: 0px; border-top: 0px; display: inline; margin: 5px 0px 5px 10px; border-left: 0px; border-bottom: 0px" height="138" alt="caution-loadlimit" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/ToBoldlyGoWhereNoProductionApplicationHa_3A48/caution-loadlimit_thumb.jpg" width="190" align="right" border="0" /&gt;&lt;/a&gt; availability or performance of an application at “normal” load but brings it right to its knees at high load. For example, I was testing some application network infrastructure some years ago that exhibited strange behavior &lt;em&gt;only&lt;/em&gt; when the device reached 48,000 concurrent users. I could reproduce the issue at will, and it led to the discovery that the device was not freeing up connections from its session state table. It was full and couldn’t handle any more. Once the engineers knew that they could fix it and it was able to handle hundreds of thousands of concurrent users. But it wasn’t a problem with the application, it was the &lt;em&gt;infrastructure. &lt;/em&gt;Without the ability to stress that infrastructure beyond its typical usage we would have never found the problem and it would have been discovered, unhappily, by a real customer in a real situation. &lt;/p&gt;  &lt;p&gt;I was chatting with an old colleague who is now with a startup, &lt;a href="http://www.soasta.com/" target="_blank"&gt;SOASTA&lt;/a&gt;, that offers cloud-based stress testing of web applications. They’ve seen the same types of problems in production environments. Spinning up a web application for a very busy seasonal rush an organization called on SOASTA to perform some stress testing. All was going well until the application hit heavy load – 80,0000 or more transactions a second – and then suddenly things went wonky (that’s official testing terminology there, really, trust me ;-)). The load balancer began sending all the requests to one pool, overwhelming it with connections and causing performance and availability to rapidly degrade. They quickly discovered the source of the problem (a conditional configuration error), addressed it and tried again the next night. Voila! The application and its supporting infrastructure performed as expected: supporting hundreds of thousands of users and transactions per second at a more than acceptable performance rate. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;&lt;strong&gt;ENGAGE, NO. 1&lt;/strong&gt;   &lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;I can’t stress enough (sorry, pun intended) the importance today of stress-testing web applications &lt;em&gt;in production. &lt;/em&gt;If your business whether because of revenue or presence requires high availability and well-performing applications then you can’t afford &lt;em&gt;not &lt;/em&gt;to stress test your application before the inevitable occurs. It’s expensive to do it yourself, which is why so many web applications haven’t been tested to their full limits, but an increasing number of cloud-based services are making it not only affordable, but a no-brainer. &lt;/p&gt;  &lt;p&gt;There are many other “EVENTS” which can occur that will drive usage of your web application to its limits. There are many other “EVENTS” that will drive your &lt;em&gt;infrastructure &lt;/em&gt;past its limits, too, and those two limits may not be the same after all. It behooves any organization that depends on web applications to test both its application &lt;em&gt;and &lt;/em&gt;infrastructure capacity before it buckles under the load of some “event” – the timing of which cannot be foreseen. &lt;/p&gt;  &lt;p&gt;So get out there, take a deep breath, and boldly go where no production application has gone before: stressed to its limits purposefully just to see if – and when - it will break. &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;em&gt;P.S. You get +8 geek points if you know the reference for EVENTS being capitalized.&lt;a title="Tweet your answer" href="http://twitter.com/home?status=@lmacvittie re: EVENTS is from..." target="_blank"&gt;Tweet me&lt;/a&gt; if you think you know the answer. &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://twitter.com/lmacvittie"&gt;&lt;img height="18" alt="Follow me on Twitter" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_twitt-twoo-icon.png" width="18" border="0" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/Rss.aspx"&gt;&lt;img src="http://devcentral.f5.com/Portals/0/images/Icons/icon_xml_18.gif" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.slideshare.net/lmacvittie"&gt;&lt;img height="18" alt="View Lori's profile on SlideShare" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_slideshare.png" width="18" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lmacvittie.tumblr.com" border="0"&gt;&lt;img title="Follow me on Tumblr" height="18" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_tumblr.gif" width="18" border="0" /&gt;&lt;/a&gt; &lt;a href="http://lmacvittie.posterous.com/"&gt;&lt;img title="Posterous" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_posterous.png" border="0" /&gt;&lt;/a&gt; &lt;a href="http://www.linkedin.com/in/lmacvittie"&gt;&lt;img src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_linkedin_16.png" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.friendfeed.com/lmacvittie"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="16" alt="friendfeed" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/friendfeed_3.jpg" width="16" border="0" /&gt;&lt;/a&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/icon_facebook_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="16" alt="icon_facebook" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/icon_facebook_4.png" width="16" border="0" /&gt;&lt;/a&gt; &lt;a title="Subscribe using any feed reader!" href="http://www.addthis.com/feed.php?pub=lmacvittie&amp;amp;h1=http%3A%2F%2Fdevcentral.f5.com%2Fweblogs%2Fmacvittie%2FRss.aspx&amp;amp;t1="&gt;&lt;img height="18" alt="AddThis Feed Button" src="http://s9.addthis.com/button1-fd.gif" width="125" border="0" /&gt;&lt;/a&gt; &lt;a title="Bookmark and Share" onclick="window.open('http://www.addthis.com/bookmark.php?wt=nw&amp;amp;pub=lmacvittie&amp;amp;url='+encodeURIComponent(location.href)+'&amp;amp;title='+encodeURIComponent(document.title), 'addthis', 'scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no,screenX=200,screenY=100,left=200,top=100'); return false;" href="http://www.addthis.com/bookmark.php" target="_blank"&gt;&lt;img height="18" alt="Bookmark and Share" src="http://s9.addthis.com/button1-share.gif" width="125" border="0" /&gt;&lt;/a&gt; &lt;script type="text/javascript" src="http://track.mybloglog.com/js/jsserv.php?mblID=2008070914270355"&gt;&lt;/script&gt;&lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:5b543383-6243-45e5-93a0-ae0c87a4424f" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/MacVittie" rel="tag"&gt;MacVittie&lt;/a&gt;,&lt;a href="http://technorati.com/tags/F5" rel="tag"&gt;F5&lt;/a&gt;,&lt;a href="http://technorati.com/tags/testing" rel="tag"&gt;testing&lt;/a&gt;,&lt;a href="http://technorati.com/tags/performance+testing" rel="tag"&gt;performance testing&lt;/a&gt;,&lt;a href="http://technorati.com/tags/capacity" rel="tag"&gt;capacity&lt;/a&gt;,&lt;a href="http://technorati.com/tags/performance" rel="tag"&gt;performance&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SOASTA" rel="tag"&gt;SOASTA&lt;/a&gt;,&lt;a href="http://technorati.com/tags/load+impact" rel="tag"&gt;load impact&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Michael+Jackson" rel="tag"&gt;Michael Jackson&lt;/a&gt;,&lt;a href="http://technorati.com/tags/deluge" rel="tag"&gt;deluge&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Internet" rel="tag"&gt;Internet&lt;/a&gt;,&lt;a href="http://technorati.com/tags/load" rel="tag"&gt;load&lt;/a&gt;,&lt;a href="http://technorati.com/tags/stress" rel="tag"&gt;stress&lt;/a&gt;,&lt;a href="http://technorati.com/tags/cloud" rel="tag"&gt;cloud&lt;/a&gt;,&lt;a href="http://technorati.com/tags/cloud-based" rel="tag"&gt;cloud-based&lt;/a&gt;,&lt;a href="http://technorati.com/tags/cloud+computing" rel="tag"&gt;cloud computing&lt;/a&gt;,&lt;a href="http://technorati.com/tags/production" rel="tag"&gt;production&lt;/a&gt;,&lt;a href="http://technorati.com/tags/services" rel="tag"&gt;services&lt;/a&gt;,&lt;a href="http://technorati.com/tags/web" rel="tag"&gt;web&lt;/a&gt;,&lt;a href="http://technorati.com/tags/blog" rel="tag"&gt;blog&lt;/a&gt;&lt;/div&gt;  &lt;p&gt;Related blogs &amp;amp; articles: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.cnn.com/2009/TECH/06/26/michael.jackson.internet/index.html" target="_blank"&gt;Jackson dies, almost takes Internet with him&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://news.cnet.com/8301-1023_3-10273325-93.html?part=rss&amp;amp;subj=news&amp;amp;tag=2547-1_3-0-20" target="_blank"&gt;News sites swamped following Michael Jackson’s death&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://news.cnet.com/8301-1023_3-10273854-93.html?part=rss&amp;amp;subj=news&amp;amp;tag=2547-1_3-0-20" target="_blank"&gt;Debate: Can the Internet handle big breaking news?&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/10/infrastructure-matters-challenges-of-cloud-based-testing.aspx"&gt;Infrastructure Matters: Challenges of Cloud-based Testing&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/03/20/load-testing-as-a-service-a-look-at-load-impact.aspx"&gt;Load Testing as a Service: A Look at Load Impact (beta)&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://devcentral.f5.com/weblogs/macvittie/aggbug/4256.aspx" width="1" height="1" /&gt;</description><dc:creator>Lori MacVittie</dc:creator></item><item><title>Intercloud: The Evolution of Global Application Delivery</title><link>http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/30/intercloud-the-evolution-of-global-application-delivery.aspx</link><pubDate>Tue, 30 Jun 2009 09:25:40 GMT</pubDate><guid isPermaLink="true">http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/30/intercloud-the-evolution-of-global-application-delivery.aspx</guid><wfw:comment>http://devcentral.f5.com/weblogs/macvittie/comments/4254.aspx</wfw:comment><wfw:commentRss>http://devcentral.f5.com/weblogs/macvittie/comments/commentRss/4254.aspx</wfw:commentRss><comments>http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/30/intercloud-the-evolution-of-global-application-delivery.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://devcentral.f5.com/weblogs/macvittie/services/trackbacks/4254.aspx</trackback:ping><source url="http://devcentral.f5.com/weblogs/macvittie/rss.aspx">Intercloud: The Evolution of Global Application Delivery</source><description>&lt;p&gt;The concept of an “intercloud” is floating around the tubes and starting to gather some attention. According to &lt;a href="http://www.infra20.com/post.cfm/the-intercloud-makes-networks-sexy-again#ixzz0Ju9L7jVB&amp;amp;D" target="_blank"&gt;Greg Ness&lt;/a&gt; you can “&lt;em&gt;Think of the intercloud as an elastic mesh of on demand processing power deployed across multiple data centers. The payoff is massive scale, efficiency and flexibility.” &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Basically, the intercloud is the natural evolution of global application delivery. The intercloud is about delivering applications (services) from one of many locations based on a variety of parameters that will be, one assumes, user/organization defined. Some of those parameters could be traditional ones: application availability, performance, or user-location. Others could be more business-focused and based on such tangibles as cost of processing. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.infra20.com/post.cfm/hoff-s-metastructure-and-the-intercloud#ixzz0Jrpb6uV8&amp;amp;D" target="_blank"&gt;Greg, playing off Hoff, explains&lt;/a&gt;: &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;For example, services could be delivered from one location over another because of short term differentials in power and/or labor costs. It would also give enterprises more viable options for dealing with localized tax or regulatory changes.&lt;/p&gt;    &lt;p&gt;The intercloud doesn’t yet exist, however---It has at least one missing piece: the automation of manual tasks at the core of the network. The intercloud requires automation of network services, the arcane collection of manual processes required today to keep networks and applications available.&lt;/p&gt;    &lt;p&gt;Until there is network service automation, all intercloud bets are off. &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;What I find eminently exciting about the intercloud concept is that it requires a level of intelligence, of &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/12/02/the-context-aware-cloud.aspx" target="_blank"&gt;contextual awareness&lt;/a&gt;, that is the &lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/IntercloudistheUltimateDestinationforCon_F0C5/context_2.jpg"&gt;&lt;img title="context" style="border-right: 0px; border-top: 0px; display: inline; margin: 10px 0px 5px 10px; border-left: 0px; border-bottom: 0px" height="279" alt="context" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/IntercloudistheUltimateDestinationforCon_F0C5/context_thumb.jpg" width="306" align="right" border="0" /&gt;&lt;/a&gt;purview of application delivery. We’re calling them services again, like we did when &lt;a title="Service Oriented Architecture definition " href="http://www.f5.com/glossary/soa.html" rel="" target="_blank"&gt;SOA&lt;/a&gt; was all the rage, but in the end even a service can be considered an application – it’s a self-contained piece of code that executes a specific function for a specific business purpose. If it makes it  easier to grab onto, just call “application delivery” “&lt;em&gt;service delivery” &lt;/em&gt;because there really isn’t too much of a difference there. But intercloud requires a bit more awareness than global application delivery; specifically it requires more business and data center specific awareness than we have available. &lt;/p&gt;  &lt;p&gt;On the surface intercloud sounds a lot like what we do today in a globally load balanced environment: application services are delivered from the data center that makes the most sense based on variables (context) surrounding the request including the user, the state of the data center, the networks involved, and the applications themselves. Global application delivery decisions are often made based on availability or location, but when the &lt;a href="http://www.f5.com/products/big-ip/product-modules/global-traffic-manager.html" target="_blank"&gt;global application delivery infrastructure&lt;/a&gt; is able to collaborate with the &lt;a href="http://www.f5.com/products/big-ip/product-modules/local-traffic-manager.html" target="_blank"&gt;local application delivery infrastructure&lt;/a&gt; the decision making process is able to get a lot more granular. Application performance, network conditions, capacity – all can be considered as part of the decision regarding which data center should service any given request. &lt;/p&gt;  &lt;p&gt;I rarely disagree with Greg and, on the surface at least, he is absolutely right in that we need to automate processes before the intercloud can come to fruition. But we are &lt;em&gt;also &lt;/em&gt;missing one other piece: the variables that are peculiar to the business and data centers comprising the intercloud and the integration/automation that will allow global application delivery infrastructure to take advantage of those variables in an efficient manner. That data, likely, is assumed in the need to automate as without that data there’s not nearly enough to automate decisions across data centers in the way in which Greg and Hoff expect such systems to do. &lt;/p&gt;  &lt;p&gt;   &lt;/p&gt;&lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;&lt;strong&gt;WHAT’S DIFFERENT ABOUT INTERCLOUD?&lt;/strong&gt;    &lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;What makes the intercloud differ from today’s global application delivery architectures is the ability to base the data-center decision on &lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/IntercloudistheUltimateDestinationforCon_F0C5/intercloud_2.jpg"&gt;&lt;img title="intercloud" style="border-right: 0px; border-top: 0px; display: inline; margin: 5px 10px 5px 0px; border-left: 0px; border-bottom: 0px" height="222" alt="intercloud" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/IntercloudistheUltimateDestinationforCon_F0C5/intercloud_thumb.jpg" width="240" align="left" border="0" /&gt;&lt;/a&gt; businessy-type (non IT) data. This data is necessary to construct the appropriate rules against which request decision making processes can be evaluated. While global application delivery systems today are capable of understanding a great many variables, there are a few more nascent data points it doesn’t have such as cost to serve up an application (service) or labor costs or a combination of time of day and any other variable.   &lt;p&gt;Don’t get me wrong – an intelligent global application delivery system can be configured with such information &lt;em&gt;today&lt;/em&gt;, but it’s a manual process and manual processes don’t scale well. This is why Greg insists (correctly) that automation is the key to the intercloud. Assuming that the cost of power, for example, changes throughout the day and, in fact, might be volatile in general means that manually reconfiguring the global application delivery system would be necessary. That simply wouldn’t be feasible. A system for providing that information – and any other information which would become the basis for request routing across distributed data centers – needs to be constructed and subsequently able to be integrated into the massive management system that will drive the intercloud. &lt;/p&gt;  &lt;p&gt;It makes a certain amount of sense, if you think about it, that &lt;em&gt;global &lt;/em&gt;application delivery would also need to evolve into something more; capable of context awareness at a higher point of view than local application delivery. Global application delivery will be the foundation for intercloud because it’s already performing the basic function – we just lack the variables and the automation necessary for global application delivery solutions to take the next step and become intercloud controllers. &lt;/p&gt;  &lt;p&gt;But they will get there. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://twitter.com/lmacvittie"&gt;&lt;img height="18" alt="Follow me on Twitter" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_twitt-twoo-icon.png" width="18" border="0" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/Rss.aspx"&gt;&lt;img src="http://devcentral.f5.com/Portals/0/images/Icons/icon_xml_18.gif" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.slideshare.net/lmacvittie"&gt;&lt;img height="18" alt="View Lori's profile on SlideShare" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_slideshare.png" width="18" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lmacvittie.tumblr.com" border="0"&gt;&lt;img title="Follow me on Tumblr" height="18" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_tumblr.gif" width="18" border="0" /&gt;&lt;/a&gt; &lt;a href="http://lmacvittie.posterous.com/"&gt;&lt;img title="Posterous" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_posterous.png" border="0" /&gt;&lt;/a&gt; &lt;a href="http://www.linkedin.com/in/lmacvittie"&gt;&lt;img src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_linkedin_16.png" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.friendfeed.com/lmacvittie"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="16" alt="friendfeed" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/friendfeed_3.jpg" width="16" border="0" /&gt;&lt;/a&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/icon_facebook_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="16" alt="icon_facebook" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/icon_facebook_4.png" width="16" border="0" /&gt;&lt;/a&gt; &lt;a title="Subscribe using any feed reader!" href="http://www.addthis.com/feed.php?pub=lmacvittie&amp;amp;h1=http%3A%2F%2Fdevcentral.f5.com%2Fweblogs%2Fmacvittie%2FRss.aspx&amp;amp;t1="&gt;&lt;img height="18" alt="AddThis Feed Button" src="http://s9.addthis.com/button1-fd.gif" width="125" border="0" /&gt;&lt;/a&gt; &lt;a title="Bookmark and Share" onclick="window.open('http://www.addthis.com/bookmark.php?wt=nw&amp;amp;pub=lmacvittie&amp;amp;url='+encodeURIComponent(location.href)+'&amp;amp;title='+encodeURIComponent(document.title), 'addthis', 'scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no,screenX=200,screenY=100,left=200,top=100'); return false;" href="http://www.addthis.com/bookmark.php" target="_blank"&gt;&lt;img height="18" alt="Bookmark and Share" src="http://s9.addthis.com/button1-share.gif" width="125" border="0" /&gt;&lt;/a&gt; &lt;script type="text/javascript" src="http://track.mybloglog.com/js/jsserv.php?mblID=2008070914270355"&gt;&lt;/script&gt;&lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:26f4972a-a556-4420-a45c-43a0c885f3e0" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/MacVittie" rel="tag"&gt;MacVittie&lt;/a&gt;,&lt;a href="http://technorati.com/tags/F5" rel="tag"&gt;F5&lt;/a&gt;,&lt;a href="http://technorati.com/tags/application+delivery" rel="tag"&gt;application delivery&lt;/a&gt;,&lt;a href="http://technorati.com/tags/global+application+delivery" rel="tag"&gt;global application delivery&lt;/a&gt;,&lt;a href="http://technorati.com/tags/intercloud" rel="tag"&gt;intercloud&lt;/a&gt;,&lt;a href="http://technorati.com/tags/cloud" rel="tag"&gt;cloud&lt;/a&gt;,&lt;a href="http://technorati.com/tags/greg+Ness" rel="tag"&gt;greg Ness&lt;/a&gt;,&lt;a href="http://technorati.com/tags/christofer+Hoff" rel="tag"&gt;christofer Hoff&lt;/a&gt;,&lt;a href="http://technorati.com/tags/context-aware" rel="tag"&gt;context-aware&lt;/a&gt;,&lt;a href="http://technorati.com/tags/infrastructure+2.0" rel="tag"&gt;infrastructure 2.0&lt;/a&gt;,&lt;a href="http://technorati.com/tags/automation" rel="tag"&gt;automation&lt;/a&gt;,&lt;a href="http://technorati.com/tags/context" rel="tag"&gt;context&lt;/a&gt;,&lt;a href="http://technorati.com/tags/web" rel="tag"&gt;web&lt;/a&gt;,&lt;a href="http://technorati.com/tags/internet" rel="tag"&gt;internet&lt;/a&gt;,&lt;a href="http://technorati.com/tags/blog" rel="tag"&gt;blog&lt;/a&gt;&lt;/div&gt;  &lt;p&gt;Related blogs &amp;amp; articles: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/09/the-infrastructure-2.0-trifecta.aspx"&gt;The Infrastructure 2.0 Trifecta&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/01/28/infrastructure-2.0-as-a-matter-of-fact-that-isnt-what.aspx"&gt;Infrastructure 2.0: As a matter of fact that isn't what it means&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/12/02/the-context-aware-cloud.aspx"&gt;The Context-Aware Cloud&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.infra20.com/post.cfm/the-intercloud-makes-networks-sexy-again" target="_blank"&gt;The Intercloud Makes Networks Sexy Again&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.infra20.com/post.cfm/hoff-s-metastructure-and-the-intercloud" target="_blank"&gt;Hoff’s Metastructure and the Intercloud&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.rationalsurvivability.com/blog/?p=1070" target="_blank"&gt;Cloudanatomy: Infrastructure, Metastructure &amp;amp; Infostructure&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;img src="http://devcentral.f5.com/weblogs/macvittie/aggbug/4254.aspx" width="1" height="1" /&gt;</description><dc:creator>Lori MacVittie</dc:creator></item><item><title>Being first to do something doesn&amp;rsquo;t automatically make it proprietary even if the first is Microsoft</title><link>http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/29/being-first-to-do-something-doesnrsquot-automatically-make-it-proprietary.aspx</link><pubDate>Mon, 29 Jun 2009 09:15:26 GMT</pubDate><guid isPermaLink="true">http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/29/being-first-to-do-something-doesnrsquot-automatically-make-it-proprietary.aspx</guid><wfw:comment>http://devcentral.f5.com/weblogs/macvittie/comments/4252.aspx</wfw:comment><wfw:commentRss>http://devcentral.f5.com/weblogs/macvittie/comments/commentRss/4252.aspx</wfw:commentRss><comments>http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/29/being-first-to-do-something-doesnrsquot-automatically-make-it-proprietary.aspx#comment</comments><slash:comments>1</slash:comments><trackback:ping>http://devcentral.f5.com/weblogs/macvittie/services/trackbacks/4252.aspx</trackback:ping><source url="http://devcentral.f5.com/weblogs/macvittie/rss.aspx">Being first to do something doesn&amp;rsquo;t automatically make it proprietary even if the first is Microsoft</source><description>&lt;p&gt;&lt;em&gt;Somebody has to be first&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Recently &lt;a href="http://www.microsoft.com" target="_blank"&gt;Microsoft&lt;/a&gt; came up with a solution, supported natively in IE8, to protect against clickjacking attempts. Apparently some folks have &lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/AreCustomHTTPHeadersaProprietarySolution_42D2/einstein-duh_2.jpg"&gt;&lt;img title="einstein-duh" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin: 5px 10px 0px 0px; border-right-width: 0px" height="127" alt="einstein-duh" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/AreCustomHTTPHeadersaProprietarySolution_42D2/einstein-duh_thumb.jpg" width="240" align="left" border="0" /&gt;&lt;/a&gt; decided that because Microsoft has a history of implementing proprietary solutions that this one, too, must be proprietary. These same folks must also have very little understanding of today’s web application architectures, as they declared the solution pretty much useless based on some pretty poor assumptions regarding the implementation of said solution.  &lt;/p&gt;  &lt;p&gt;As noted in the &lt;a href="http://www.theregister.co.uk/2009/02/13/twitter_clickjack_attack/"&gt;Register&lt;/a&gt;, “some critics have contended the &lt;a href="http://www.theregister.co.uk/2009/01/27/internet_explorer_clickjacking_block/"&gt;protection [X-FRAME-OPTIONS custom HTTP header] will be ineffective&lt;/a&gt; because it will require millions of websites to update their pages with proprietary code.”  &lt;/p&gt;  &lt;p&gt;Where to start, oh where to start…&lt;/p&gt;  &lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;&lt;strong&gt;JUST WHAT DICTIONARY WERE THEY USING? &lt;/strong&gt;  &lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;  &lt;p&gt;Proprietary implies usable only by a certain subset of products: those endorsed by the creator of the “proprietary” solution. Proprietary implies peculiar to a specific technology. Proprietary implies closed. Proprietary means things like ActiveX, which only work properly on a Windows &lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/AreCustomHTTPHeadersaProprietarySolution_42D2/ie8-logo_2.jpg"&gt;&lt;img title="ie8-logo" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin: 5px 0px 5px 10px; border-right-width: 0px" height="138" alt="ie8-logo" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/AreCustomHTTPHeadersaProprietarySolution_42D2/ie8-logo_thumb.jpg" width="138" align="right" border="0" /&gt;&lt;/a&gt;platform. Proprietary means keeping the implementation secret so no one else can implement it. Microsoft implemented a solution &lt;em&gt;based on a custom HTTP header. &lt;/em&gt;A header, I might add, that anyone using any browser running on any platform is quite capable of seeing. A header that  can be easily handled by any other browser developer, if they so choose, to implement similar behavior. A header based on &lt;a href="http://www.w3.org/Protocols/rfc2616/rfc2616.html" target="_blank"&gt;accepted standards&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;A custom HTTP header can be interpreted by any browser if it so chooses as well as intermediaries capable of intelligently handling HTTP. The speedy support via NoScript for X-FRAME-OPTIONS proves the solution is hardly “proprietary” and not applicable to just Microsoft’s solution. &lt;/p&gt;  &lt;p&gt;The term proprietary is often considered synonymous with Microsoft but in this case calling the solution proprietary is simply the result of a bad habit apparently difficult for some to break. &lt;/p&gt;  &lt;p&gt;Unlike the use of other truly proprietary solutions in the browser – like &lt;a href="http://www.w3.org/TR/XMLHttpRequest/" target="_blank"&gt;XMLHTTPRequest&lt;/a&gt; object before it was widely adopted as a “standard” – custom HTTP headers are about as innocuous as you can get. Their existence neither hinders nor helps browsers that don’t support it and it does absolutely no harm to applications or the user-experience to carry it along even to clients that will see no benefit from it. And if the developers of those browsers/clients decide to support it, the existence of such headers will immediately provide a benefit. &lt;/p&gt;  &lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;&lt;strong&gt;OH YEAH – ABOUT THAT OTHER ASSUMPTION YOU MADE…&lt;/strong&gt;   &lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;  &lt;p&gt;&lt;em&gt;“…it will require millions of websites to update their pages with proprietary code.”&lt;/em&gt;  &lt;/p&gt;  &lt;p&gt;Excuse me while I decide whether to laugh or have a conniption fit at this one. &lt;/p&gt;  &lt;p&gt;This assumption shows a decided lack of understanding of architecture. While it’s certainly true that &lt;em&gt;one way &lt;/em&gt;to support the use of X-FRAME-OPTIONS is to update web applications (let us not fall into the trap of digressing into an argument over the use of the term “pages” and “code” to describe an application…) there are are other, less disruptive, solutions. &lt;/p&gt;  &lt;p&gt;The organizations that are most likely to be the subject of a clickjacking attack are financial institutions, retailers, and perhaps social networking sites. It seems likely that these folks have built out an architecture capable of scaling and assuring availability of their sites. If you think not true, consider how often you’ve attempted to visit one of those sites and &lt;em&gt;not &lt;/em&gt;been able to do so. Exactly. They’re smart people; they’ve built out an environment that almost certainly involves intermediaries (load balancers, &lt;a href="http://www.f5.com/solutions/security" target="_blank"&gt;application firewalls&lt;/a&gt;, application switches, &lt;a href="http://www.f5.com/products/big-ip/" target="_blank"&gt;application delivery controllers&lt;/a&gt;, proxies, etc…) that do other forms of application layer inspection and, perhaps, manipulation. They have &lt;em&gt;other &lt;/em&gt;things to worry about, after all, like data leak prevention and content filtering and stopping SQLi and other nasty attacks from destroying their critical applications. So they’ve likely already got an intermediary in place that’s capable of easily adding a custom HTTP header on the way out the door. &lt;/p&gt;  &lt;p&gt;As I previously noted in &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/23/clickjacking-protection-using-x-frame-options-available-for-firefox.aspx"&gt;Clickjacking Protection Using X-FRAME-OPTIONS Available for Firefox&lt;/a&gt; folks can use network-side scripting solutions to effortlessly insert the custom header as necessary without modifying code. If an application is comprised of say, an average of ten pages (I’m low-balling the estimate, I know that, but you can do the math on your own applications yourself), then this solution is 10 times more efficient than modifying the associated code. And &lt;a href="http://devcentral.f5.com/iRules" target="_blank"&gt;network-side scripting solutions&lt;/a&gt; are likely already in place at most organizations that are likely to be targeted by clickjacking attacks. So all they have to do is write a little script and voila! This “proprietary, ineffective” solution starts working. Then they encourage customers to upgrade to IE8 or install the proper version of NoScript and, well, the Internet is safe again (at least for about 2.71828182845904523536 or “&lt;em&gt;e” &lt;/em&gt;seconds). &lt;/p&gt;  &lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;&lt;strong&gt;FIRST DOESN’T MAKE IT PROPRIETARY, IT JUST MAKES IT FIRST&lt;/strong&gt;   &lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;  &lt;p&gt;Just because an organization comes out with a solution &lt;em&gt;first &lt;/em&gt;doesn’t automatically make it proprietary, unless they’ve already patented it and in that case, well it’s a whole different ball game. Microsoft saw a problem, decided on a solution, and implemented it. &lt;/p&gt;  &lt;p&gt;What should be noted is that they did it in a way that made it possible for other browser vendors to take advantage of the same constructs to implement a similar solution. They used a custom HTTP header that’s portable and browser and operating system agnostic when they could have found any number of other, truly proprietary ways to solve this problem. &lt;/p&gt;  &lt;p&gt;I’ve been down on Microsoft and its products in the past but in this case the software giant doesn’t deserve the negativity involved with calling this a proprietary solution. This is a far sight better than the framekiller options available today and it certainly doesn’t require the amount of work implied by these “critics” to leverage the solution. &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://twitter.com/lmacvittie"&gt;&lt;img height="18" alt="Follow me on Twitter" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_twitt-twoo-icon.png" width="18" border="0" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/Rss.aspx"&gt;&lt;img src="http://devcentral.f5.com/Portals/0/images/Icons/icon_xml_18.gif" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.slideshare.net/lmacvittie"&gt;&lt;img height="18" alt="View Lori's profile on SlideShare" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_slideshare.png" width="18" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lmacvittie.tumblr.com" border="0"&gt;&lt;img title="Follow me on Tumblr" height="18" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_tumblr.gif" width="18" border="0" /&gt;&lt;/a&gt; &lt;a href="http://lmacvittie.posterous.com/"&gt;&lt;img title="Posterous" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_posterous.png" border="0" /&gt;&lt;/a&gt; &lt;a href="http://www.linkedin.com/in/lmacvittie"&gt;&lt;img src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_linkedin_16.png" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.friendfeed.com/lmacvittie"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="16" alt="friendfeed" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/friendfeed_3.jpg" width="16" border="0" /&gt;&lt;/a&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/icon_facebook_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="16" alt="icon_facebook" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/icon_facebook_4.png" width="16" border="0" /&gt;&lt;/a&gt; &lt;a title="Subscribe using any feed reader!" href="http://www.addthis.com/feed.php?pub=lmacvittie&amp;amp;h1=http%3A%2F%2Fdevcentral.f5.com%2Fweblogs%2Fmacvittie%2FRss.aspx&amp;amp;t1="&gt;&lt;img height="18" alt="AddThis Feed Button" src="http://s9.addthis.com/button1-fd.gif" width="125" border="0" /&gt;&lt;/a&gt; &lt;a title="Bookmark and Share" onclick="window.open('http://www.addthis.com/bookmark.php?wt=nw&amp;amp;pub=lmacvittie&amp;amp;url='+encodeURIComponent(location.href)+'&amp;amp;title='+encodeURIComponent(document.title), 'addthis', 'scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no,screenX=200,screenY=100,left=200,top=100'); return false;" href="http://www.addthis.com/bookmark.php" target="_blank"&gt;&lt;img height="18" alt="Bookmark and Share" src="http://s9.addthis.com/button1-share.gif" width="125" border="0" /&gt;&lt;/a&gt; &lt;script type="text/javascript" src="http://track.mybloglog.com/js/jsserv.php?mblID=2008070914270355"&gt;&lt;/script&gt;&lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:b0ab3a9f-4f68-4bea-8ff3-38d863b0d792" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/MacVittie" rel="tag"&gt;MacVittie&lt;/a&gt;,&lt;a href="http://technorati.com/tags/F5" rel="tag"&gt;F5&lt;/a&gt;,&lt;a href="http://technorati.com/tags/proprietary" rel="tag"&gt;proprietary&lt;/a&gt;,&lt;a href="http://technorati.com/tags/clickjacking" rel="tag"&gt;clickjacking&lt;/a&gt;,&lt;a href="http://technorati.com/tags/IE8" rel="tag"&gt;IE8&lt;/a&gt;,&lt;a href="http://technorati.com/tags/firefox" rel="tag"&gt;firefox&lt;/a&gt;,&lt;a href="http://technorati.com/tags/noscript" rel="tag"&gt;noscript&lt;/a&gt;,&lt;a href="http://technorati.com/tags/solutions" rel="tag"&gt;solutions&lt;/a&gt;,&lt;a href="http://technorati.com/tags/english" rel="tag"&gt;english&lt;/a&gt;,&lt;a href="http://technorati.com/tags/definition" rel="tag"&gt;definition&lt;/a&gt;,&lt;a href="http://technorati.com/tags/browsers" rel="tag"&gt;browsers&lt;/a&gt;,&lt;a href="http://technorati.com/tags/HTTP" rel="tag"&gt;HTTP&lt;/a&gt;,&lt;a href="http://technorati.com/tags/headers" rel="tag"&gt;headers&lt;/a&gt;,&lt;a href="http://technorati.com/tags/intermediaries" rel="tag"&gt;intermediaries&lt;/a&gt;,&lt;a href="http://technorati.com/tags/web+application" rel="tag"&gt;web application&lt;/a&gt;,&lt;a href="http://technorati.com/tags/architecture" rel="tag"&gt;architecture&lt;/a&gt;,&lt;a href="http://technorati.com/tags/application+delivery" rel="tag"&gt;application delivery&lt;/a&gt;,&lt;a href="http://technorati.com/tags/web" rel="tag"&gt;web&lt;/a&gt;,&lt;a href="http://technorati.com/tags/internet" rel="tag"&gt;internet&lt;/a&gt;,&lt;a href="http://technorati.com/tags/blog" rel="tag"&gt;blog&lt;/a&gt;,&lt;a href="http://technorati.com/tags/web+2.0" rel="tag"&gt;web 2.0&lt;/a&gt;&lt;/div&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Related blogs &amp;amp; articles: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/23/clickjacking-protection-using-x-frame-options-available-for-firefox.aspx"&gt;Clickjacking Protection Using X-FRAME-OPTIONS Available for Firefox&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.w3.org/Protocols/rfc2616/rfc2616.html" target="_blank"&gt;Hypertext Transfer Protocol – HTTP/1.1 RFC 2616&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/04/30/picard-and-dathon-at-el-adrel.aspx"&gt;Picard and Dathon at El-Adrel&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/04/23/jedi-mind-tricks-http-request-smuggling.aspx"&gt;Jedi Mind Tricks: HTTP Request Smuggling&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/04/14/why-not-network-side-pre-fetching.aspx"&gt;Why not network-side pre-fetching?&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/02/11/how-to-brandalize-your-content-with-network-side-scripting.aspx"&gt;How to brandalize your content with network-side scripting&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/01/15/i-am-in-your-http-headers-attacking-your-application.aspx"&gt;I am in your HTTP headers, attacking your application&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://devcentral.f5.com/weblogs/macvittie/aggbug/4252.aspx" width="1" height="1" /&gt;</description><dc:creator>Lori MacVittie</dc:creator></item><item><title>Forklifts, Rip and Replace, and Other IT Fairy Tales</title><link>http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/26/forklifts-rip-and-replace-and-other-it-fairy-tales.aspx</link><pubDate>Fri, 26 Jun 2009 08:50:14 GMT</pubDate><guid isPermaLink="true">http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/26/forklifts-rip-and-replace-and-other-it-fairy-tales.aspx</guid><wfw:comment>http://devcentral.f5.com/weblogs/macvittie/comments/4251.aspx</wfw:comment><wfw:commentRss>http://devcentral.f5.com/weblogs/macvittie/comments/commentRss/4251.aspx</wfw:commentRss><comments>http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/26/forklifts-rip-and-replace-and-other-it-fairy-tales.aspx#comment</comments><slash:comments>1</slash:comments><trackback:ping>http://devcentral.f5.com/weblogs/macvittie/services/trackbacks/4251.aspx</trackback:ping><source url="http://devcentral.f5.com/weblogs/macvittie/rss.aspx">Forklifts, Rip and Replace, and Other IT Fairy Tales</source><description>&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/72ae695008e1_8697/image_2.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: inline; margin: 0px 10px 0px 0px; border-left: 0px; border-bottom: 0px" height="267" alt="image" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/72ae695008e1_8697/image_thumb.png" width="291" align="left" border="0" /&gt;&lt;/a&gt;I was chatting with my mother a couple weeks ago about cloud (&lt;em&gt;she’s a used-to-be programmer turned project manager for a Fortune 500. Don’t look at me like that, I keep telling you it runs in the family&lt;/em&gt;) and one of the problems she lamented about was that folks don’t seem to understand how entrenched COBOL and the mainframe is in the organization. It’s so entrenched that given the choice between a client-server application and a COBOL application that did the same thing they chose the COBOL program because it was less expensive &lt;em&gt;and &lt;/em&gt;they had the knowledge on staff (COBOL, mainframe skills) to deal with it.   &lt;p&gt;This was recently. Like, this year. Like in the past couple of weeks. &lt;/p&gt;  &lt;p&gt;So when folks start preaching about moving applications and, in some cases, the entire infrastructure to “the cloud”, I laugh. Ruefully. Cause the core of their critical systems run on the mainframe and are written in COBOL, and they’re not going anywhere. &lt;/p&gt;  &lt;p&gt;As &lt;a href="http://twitter.com/jamesurquhart" target="_blank"&gt;@jamesurquhart&lt;/a&gt; points out not-so-delicately via &lt;a href="http://twitter.com" target="_blank"&gt;Twitter&lt;/a&gt;, forklift replacement approaches have never worked. Neither has “rip and replace” or any other approach that advocates “all or nothing” approaches to change in IT. &lt;/p&gt;  &lt;p&gt;Rather &lt;em&gt;new &lt;/em&gt;technology is often used for new applications where it makes sense, just as &lt;a href="http://twitter.com/monkchips" target="_blank"&gt;@monkchips&lt;/a&gt; explains was his initial intent. So yes, this Fortune 500 company is going to experiment with cloud bursting, and it has a wide variety of web services, leverages Java and COBOL at the same time, and implements some web applications using .NET. There’s something for everyone in their data center. &lt;/p&gt;  &lt;p&gt;   &lt;/p&gt;&lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;&lt;strong&gt;THE ABSTRACT INFRASTRUCTURE MODEL &lt;/strong&gt;    &lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;  &lt;p&gt;The reality is that, like the Fortune 500 my mother works for, organizations have a dizzying array of architectures and technologies mashed up together to support their business. COBOL applications, client-server, web applications, web services, and cloud are going to continue to work together in the same data center for the foreseeable. The prediction that no one will need to run their own data centers in the future due to cloud is simply a pipe-dream. &lt;/p&gt;  &lt;p&gt;That means network and application network infrastructure has to support a wide variety of technology and architectures, and it must do it simultaneously. Even organizations who plan to move everything to a cloud environment – internal or external – aren’t going to do so “overnight.” There is no rip-and-replace for cloud, and even if there were it wouldn’t likely be a painless transition. So organizations are going to move slowly, as they are always wont to do, and need an infrastructure that is flexible enough to support whatever is thrown at it. &lt;/p&gt;  &lt;p&gt;Unified application delivery and data services is one of the ways in which an organization can gain the agility necessary to move toward a hybrid – or pure if that’s the goal, though I doubt it – environment. The ability to integrate (collaborate) with applications and other systems in the overall IT ecosystem mean that a unified infrastructure solution can allow IT to benefit both traditional and emerging data center models at the same time. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/72ae695008e1_8697/internal-cloudbursting_2.jpg"&gt;&lt;img title="internal-cloudbursting" style="border-right: 0px; border-top: 0px; display: inline; margin: 10px 10px 10px 0px; border-left: 0px; border-bottom: 0px" height="144" alt="internal-cloudbursting" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/72ae695008e1_8697/internal-cloudbursting_thumb.jpg" width="290" align="left" border="0" /&gt;&lt;/a&gt; As organizations try to move toward a more efficient, virtual infrastructure there needs to be a layer of abstraction in the infrastructure that insulates users and in some cases systems from the rapid rate of change that occurs as architecture is changed. Unified application delivery provides that abstraction by supporting both virtual application services at the same time as it supports traditional application services. indeed, unified application delivery can support an application comprised of both virtual and physical services at the same time in sort of an “internal &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/09/18/3627.aspx" target="_blank"&gt;cloudbursting&lt;/a&gt;” architecture. &lt;/p&gt;  &lt;p&gt;Consider that you may have a dedicated set of physical resources for an application, but need to meet seasonal or event-based demand. A &lt;a href="http://www.f5.com/products/big-ip/v10.html" target="_blank"&gt;unified application delivery solution&lt;/a&gt; provides the “interface” to the customer/user for the application on the physical resources, but can also just as easily handle additionally provisioned virtual resources necessary to meet that demand. &lt;/p&gt;  &lt;p&gt;That’s just one niche case where the traditional architecture mingles freely with emerging data center models and needs to be supported as a single, unified resource. Imagine this now as a step toward a fully on-demand architecture. Without interruption to clients/customers/partners you can easily replace the traditional resources with on-demand, without disruption of service. Folks familiar with &lt;a title="Service Oriented Architecture definition " href="http://www.f5.com/glossary/soa.html" rel="" target="_blank"&gt;SOA&lt;/a&gt; will recognize this concept, as will developers familiar with polymorphic methods: abstraction in the infrastructure works the same way and provides many of the same benefits. &lt;/p&gt;  &lt;p&gt;It is not realistic to expect that &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/03/10/please-fasten-your-seatbelts-therersquos-turbulence-in-that-there-cloud.aspx" target="_blank"&gt;existing data centers will ever fully move to an external cloud nor will they internally ever become fully “cloudized”.&lt;/a&gt; It’s just not feasible given the vast array of technology and architectures that have been put into place over the past fifty years. But certainly some aspects of the data center will move to new models, and the infrastructure must be able to support both at the same time. Even better if the infrastructure can abstract resources of any kind to provide a unified view of the applications which IT is tasked with delivering and securing. &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://twitter.com/lmacvittie"&gt;&lt;img height="18" alt="Follow me on Twitter" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_twitt-twoo-icon.png" width="18" border="0" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/Rss.aspx"&gt;&lt;img src="http://devcentral.f5.com/Portals/0/images/Icons/icon_xml_18.gif" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.slideshare.net/lmacvittie"&gt;&lt;img height="18" alt="View Lori's profile on SlideShare" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_slideshare.png" width="18" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lmacvittie.tumblr.com" border="0"&gt;&lt;img title="Follow me on Tumblr" height="18" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_tumblr.gif" width="18" border="0" /&gt;&lt;/a&gt; &lt;a href="http://lmacvittie.posterous.com/"&gt;&lt;img title="Posterous" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_posterous.png" border="0" /&gt;&lt;/a&gt; &lt;a href="http://www.linkedin.com/in/lmacvittie"&gt;&lt;img src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_linkedin_16.png" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.friendfeed.com/lmacvittie"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="16" alt="friendfeed" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/friendfeed_3.jpg" width="16" border="0" /&gt;&lt;/a&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/icon_facebook_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="16" alt="icon_facebook" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/icon_facebook_4.png" width="16" border="0" /&gt;&lt;/a&gt; &lt;a title="Subscribe using any feed reader!" href="http://www.addthis.com/feed.php?pub=lmacvittie&amp;amp;h1=http%3A%2F%2Fdevcentral.f5.com%2Fweblogs%2Fmacvittie%2FRss.aspx&amp;amp;t1="&gt;&lt;img height="18" alt="AddThis Feed Button" src="http://s9.addthis.com/button1-fd.gif" width="125" border="0" /&gt;&lt;/a&gt; &lt;a title="Bookmark and Share" onclick="window.open('http://www.addthis.com/bookmark.php?wt=nw&amp;amp;pub=lmacvittie&amp;amp;url='+encodeURIComponent(location.href)+'&amp;amp;title='+encodeURIComponent(document.title), 'addthis', 'scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no,screenX=200,screenY=100,left=200,top=100'); return false;" href="http://www.addthis.com/bookmark.php" target="_blank"&gt;&lt;img height="18" alt="Bookmark and Share" src="http://s9.addthis.com/button1-share.gif" width="125" border="0" /&gt;&lt;/a&gt; &lt;script type="text/javascript" src="http://track.mybloglog.com/js/jsserv.php?mblID=2008070914270355"&gt;&lt;/script&gt;&lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:cb1dbb11-4106-4683-8f2e-c4536e9a86a5" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/MacVittie" rel="tag"&gt;MacVittie&lt;/a&gt;,&lt;a href="http://technorati.com/tags/F5" rel="tag"&gt;F5&lt;/a&gt;,&lt;a href="http://technorati.com/tags/cloud" rel="tag"&gt;cloud&lt;/a&gt;,&lt;a href="http://technorati.com/tags/cloud+computing" rel="tag"&gt;cloud computing&lt;/a&gt;,&lt;a href="http://technorati.com/tags/infrastructure" rel="tag"&gt;infrastructure&lt;/a&gt;,&lt;a href="http://technorati.com/tags/architecture" rel="tag"&gt;architecture&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SOA" rel="tag"&gt;SOA&lt;/a&gt;,&lt;a href="http://technorati.com/tags/abstraction" rel="tag"&gt;abstraction&lt;/a&gt;,&lt;a href="http://technorati.com/tags/virtualization" rel="tag"&gt;virtualization&lt;/a&gt;,&lt;a href="http://technorati.com/tags/unified+application+delivery+and+data+services" rel="tag"&gt;unified application delivery and data services&lt;/a&gt;,&lt;a href="http://technorati.com/tags/unified+application+delivery" rel="tag"&gt;unified application delivery&lt;/a&gt;,&lt;a href="http://technorati.com/tags/application+delivery" rel="tag"&gt;application delivery&lt;/a&gt;,&lt;a href="http://technorati.com/tags/scalaiblity" rel="tag"&gt;scalaiblity&lt;/a&gt;,&lt;a href="http://technorati.com/tags/on-demand" rel="tag"&gt;on-demand&lt;/a&gt;,&lt;a href="http://technorati.com/tags/internet" rel="tag"&gt;internet&lt;/a&gt;,&lt;a href="http://technorati.com/tags/blog" rel="tag"&gt;blog&lt;/a&gt;,&lt;a href="http://technorati.com/tags/data+center" rel="tag"&gt;data center&lt;/a&gt;&lt;/div&gt;  &lt;p&gt;Related blogs &amp;amp; articles: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/05/21/how-reality-blew-the-cloud-away-at-interop.aspx"&gt;How Reality Blew the Cloud Away at Interop&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://gigaom.com/2009/06/25/facebooks-jonathan-heiliger-talks-infrastructure-and-usernames/" target="_blank"&gt;Structure 09: Facebook’s Jonathan Heiliger Talks Infrastructure and Usernames&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/05/26/f5-and-the-cloud.aspx"&gt;F5 and the Cloud&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/05/14/3262.aspx"&gt;Silos belong on farms, not in IT&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/05/05/your-load-balancer-wants-to-take-a-level-of-fighter.aspx"&gt;Your load balancer wants to take a level of fighter and wizard&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/04/08/the-revolution-begins-arming-the-data-center.aspx"&gt;The Revolution Begins: Arming the Data Center&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/05/14/the-revolution-continues-let-them-eat-cloud.aspx"&gt;The Revolution Continues: Let Them Eat Cloud&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/09/18/3627.aspx"&gt;Building a Cloudbursting Capable Infrastructure&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/03/10/please-fasten-your-seatbelts-therersquos-turbulence-in-that-there-cloud.aspx"&gt;Please fasten your seatbelts, there’s turbulence in that there cloud &lt;/a&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://devcentral.f5.com/weblogs/macvittie/aggbug/4251.aspx" width="1" height="1" /&gt;</description><dc:creator>Lori MacVittie</dc:creator></item><item><title>Five questions you need to ask about load balancing and the cloud</title><link>http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/25/five-questions-you-need-to-ask-about-load-balancing-and.aspx</link><pubDate>Thu, 25 Jun 2009 09:14:10 GMT</pubDate><guid isPermaLink="true">http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/25/five-questions-you-need-to-ask-about-load-balancing-and.aspx</guid><wfw:comment>http://devcentral.f5.com/weblogs/macvittie/comments/4250.aspx</wfw:comment><wfw:commentRss>http://devcentral.f5.com/weblogs/macvittie/comments/commentRss/4250.aspx</wfw:commentRss><comments>http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/25/five-questions-you-need-to-ask-about-load-balancing-and.aspx#comment</comments><slash:comments>3</slash:comments><trackback:ping>http://devcentral.f5.com/weblogs/macvittie/services/trackbacks/4250.aspx</trackback:ping><source url="http://devcentral.f5.com/weblogs/macvittie/rss.aspx">Five questions you need to ask about load balancing and the cloud</source><description>&lt;p&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/Whatyouneedtoaskyourcloudprovideraboutlo_A1A3/balancing_act_2.jpg"&gt;&lt;img title="balancing_act" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin: 5px 0px 5px 10px; border-right-width: 0px" height="226" alt="balancing_act" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/Whatyouneedtoaskyourcloudprovideraboutlo_A1A3/balancing_act_thumb.jpg" width="180" align="right" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Whether you are aware of it or not, if you’re deploying applications in the cloud or building out your own “enterprise class” cloud, you’re going to be using load balancing. &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/11/25/cloud-computing-vertical-scalability-is-still-your-problem.aspx" target="_blank"&gt;Horizontal scaling&lt;/a&gt; of applications is a fairly well understood process that involves (old skool) &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/08/07/3522.aspx" target="_blank"&gt;server virtualization&lt;/a&gt; of the network kind: making many servers (instances) look like one to the outside world. When you start adding instances to increase capacity for your application, load balancing necessarily gets involved as it’s the way in which horizontal scalability is implemented today. &lt;/p&gt;  &lt;p&gt;The fact that you may have already deployed an application in the cloud and scaled it up without recognizing this basic fact may lead you to believe you don’t &lt;em&gt;need &lt;/em&gt;to care about load balancing options. But nothing could be further from the truth. If you haven’t asked already, you should. But more than that you need to understand the importance of load balancing and its implications to the application. That’s even more true if you’re considering an enterprise cloud, because it will most assuredly be your problem in the long run. Do not be fooled; the options available for load balancing and assuring availability of your application in the cloud will affect your application – if not right now, then later. &lt;/p&gt;  &lt;p&gt;So let’s start with the five most important things you need to ask about load balancing and cloud environments regardless of where they may reside. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;/p&gt;    &lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;&lt;strong&gt;#5 DIRECT SERVER RETURN&lt;/strong&gt;     &lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;If you’re going to be serving up video or audio – real-time streaming media – you should definitely be interested in whether or not the load balancing solution is capable of supporting &lt;em&gt;direct server return (DSR)&lt;/em&gt;. While there are &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/07/03/3423.aspx" target="_blank"&gt;pros and cons to using DSR&lt;/a&gt;, for video and audio content it’s nearly an untouchable axiom of application delivery that you should enable this capability. DSR basically allows the server to return content &lt;em&gt;directly&lt;/em&gt; to the client without being processed by any intermediary (other than routers/switches/etc… which of course &lt;em&gt;need &lt;/em&gt;to process individual packets). In most load balancing situations the responses from the server are returned via the same path they took to get to the server, notably through the load balancer. DSR allows responses to return outside the path of the load balancer or, if still returning through it, to do so unmolested. In the latter scenario the load balancer basically acts as a simple packet forwarder and does no additional processing on the packets. &lt;/p&gt;    &lt;p&gt;The advantage to DSR is that it removes any additional latency imposed by additional processing by intermediaries. Because real-time streaming media is very sensitive to the effects of latency (jitter), DSR is often suggested as a best practice when load balancing servers responsible for serving such content. &lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Question: Is it supported?&lt;/strong&gt; &lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;&lt;strong&gt;#4 HEALTH CHECKING&lt;/strong&gt;     &lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;One of the ways in which load balancers/&lt;a href="http://www.f5.com/products/big-ip" target="_blank"&gt;application delivery controllers&lt;/a&gt; make decisions regarding which server should handle which request is to understand the current status of the application. It’s part of being context-aware, and it provides information about the application that is invaluable not just to the load balancing decision but to the overall availability of the application. Health checking allows a load balancing solution to determine whether a server/instance is “available” based on a variety of factors. At the simplest level an ICMP ping can be used to determine whether the &lt;em&gt;server &lt;/em&gt;is available. But that tells it nothing of the &lt;em&gt;state &lt;/em&gt;of the application. &lt;/p&gt;    &lt;p&gt;A three-way TCP handshake is the next “step” up the ladder, and this will tell the load balancing solution whether an application is capable of accepting connections, but still tells it nothing of the state of the application. A simple HTTP GET takes it one step further, but what’s really necessary is the ability of the load balancing solution to retrieve actual data and ensure it is valid in order to consider an application “available”. &lt;/p&gt;    &lt;p&gt;As the availability of an application may be (and should be if it is not) one way to &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/10/29/infrastructure-2.0-the-feedback-loop-must-include-applications.aspx" target="_blank"&gt;determine whether new instances are necessary or not&lt;/a&gt;, the ability to determine whether the actual application is available &lt;em&gt;and responding appropriately &lt;/em&gt;are important in keeping costs down in a cloud environment lest instances be launched for no reason or – more dangerously – instances are &lt;em&gt;not &lt;/em&gt;launched when necessary due to an outage or failure. &lt;/p&gt;    &lt;p&gt;In an external cloud environment it is important to understand how the infrastructure determines when an application is “available” or “not”, based on such monitoring, as the subtle differences in what is actually being monitored/tested can impact application availability. &lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Question: What determines when an application (instance) is available and responding as expected? &lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;&lt;strong&gt;#3 PERSISTENCE&lt;/strong&gt;     &lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;Persistence is one of the most important facets of load balancing that every application developer, architect, and network professional needs to understand. Nearly every application today makes heavy use of application sessions to maintain state, but not every application utilizes a shared database model for its session management. If you’re using standard application or web server session features to manage state in your application, you will need to understand whether the load balancing solutions available supports persistence and how that persistence is implemented. &lt;/p&gt;    &lt;p&gt;Persistence basically ensures that once a user has been “assigned” a server/instance that &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/11/19/cloud-computing-is-your-cloud-sticky-it-should-be.aspx" target="_blank"&gt;all subsequent requests go to that same server/instance&lt;/a&gt; in order to preserve access to the application session. Persistence can be based on just about anything depending on the load balancing solution available, but most commonly takes the form of either &lt;em&gt;source ip address &lt;/em&gt;or &lt;em&gt;cookie-based. &lt;/em&gt;In the case of the former there’s very little for you to do, though you should be somewhat concerned over the use of such a rudimentary method of enabling persistence as it is quite possible – probable, in fact – that many users will be sharing the same source IP address based on NAT and masquerading at the edge of corporate and shared networks. &lt;/p&gt;    &lt;p&gt;If the persistence is cookie-based then you’ll need to understand whether you have the ability to determine what data is used to enable that persistence. For example, many applications used PHPSESSIONID or ASPSESSIONID as it is routine for those environments to ensure that these values are inserted into the HTTP header and are available for such use. But if you can’t configure the option yourself, you’ll need to understand what values are used for persistence and to ensure your application can support that value in order to match up users with their application state. &lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Question: How is persistence implemented? &lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;&lt;strong&gt;#2 QUIESCING (BLEEDING) CONNECTIONS&lt;/strong&gt;     &lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;Part of the allure of a cloud architecture is the ability to provision resources on-demand. With that comes the assumption that you can also de-provision resources when they are no longer needed. One would further hope this process is automated and based on a policy configurable by the user, but we are still in the early days of cloud so that may be just a goal at this point. &lt;/p&gt;    &lt;p&gt;Load balancers and clustering solutions can usually be told to begin quiescing (bleeding off) connections. This means that they stop distributing requests to the specified servers/instances but allow existing users to continue using the application until they are finished. It basically takes a server/instance out of the “rotation” but keeps it online until all users have finished and the server/instance is no longer needed. At that point either through a manual or automated process the server/instance can be de-provisioned or taken offline. This is often used in traditional data centers to enable maintenance such as patching/upgrades to occur without interrupting application availability. By taking one server/instance at a time offline the other servers/instances remain in service, serving up requests. In an on-demand environment this is of course used to keep costs controlled by only keeping the instances necessary for current capacity online. &lt;/p&gt;    &lt;p&gt;What you need to understand is whether that process is manual, i.e. you need to push a button to begin the process of bleeding off connections, or automated. If the latter, then you’ll need to ask about what variables you can use to create a policy to trigger the process. Variables might be number of total connections, requests, users, or bandwidth. It could also, if the load balancing solution is “smart enough” include application performance (response time) or even time of day variables. &lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Question: How do connections quiesce (bleed) off – manually or automatically based on thresholds? &lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;&lt;strong&gt;#1 FAILOVER&lt;/strong&gt;     &lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;We talk a lot about the cloud as a means to scale applications, but we don’t very often mention &lt;em&gt;availability. &lt;/em&gt;Availability usually means there needs to be in place some sort of “failover” mechanism, in case an application or server fails. Applications crash, hardware fails, these things happen. What should not happen, however, is that the application becomes unavailable because of these types of inevitable problems. If one instance suddenly becomes unavailable, what happens? &lt;/p&gt;    &lt;p&gt;That’s the question you need to ask. If there is more than one instance running at that time, then any load balancing solution worth its salt will direct subsequent requests to the remaining available instances. But if there are no other instances running, what happens? If the provisioning process is manual, you may need to push a button and wait for the new instance to come online. If the provisioning process is not manual, then you need to understand how long it will take for the automated system to bring a new instance online, and perhaps ask about the ability to serve up customized “apology” pages that reassure visitors that the site will return shortly. &lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Question: What kind of failover options are available (if any)? &lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;&lt;strong&gt;THERE ARE NO STUPID QUESTIONS&lt;/strong&gt;   &lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;  &lt;p&gt;Folks seem to talk and write as if cloud computing relieves IT staff (customers) of the need to understand the infrastructure and architecture of the environments in which applications will be deployed. Because there is an increasingly symbiotic relationship between applications and its infrastructure – both network and application network – this fallacy needs to be exposed for the falsehood it is. It is &lt;em&gt;more &lt;/em&gt;important today, with cloud computing, than it ever has been for all of IT – application, network, and security – to understand the infrastructure and how it works together to deliver applications. &lt;/p&gt;  &lt;p&gt;That means there are &lt;em&gt;no &lt;/em&gt;stupid questions when it comes to cloud computing infrastructure. There are certainly other questions you can – and should – ask a potential provider or vendor in order to make the right decision about where to deploy your applications. Because when it comes down to it it’s &lt;em&gt;your &lt;/em&gt;application and your customers, partners, and users are not going to be calling/e-mailing/tweeting the cloud provider; they’re going to be gunning for &lt;em&gt;you &lt;/em&gt;if things don’t work as expected. &lt;/p&gt;  &lt;p&gt;Getting the answers to these five questions will provide a better understanding of how your application will handle unexpected failures, allow you to plan appropriately for maintenance/upgrades/patches, and formulate the proper policies for dealing with the nuances of a load balanced application environment. &lt;/p&gt;  &lt;p&gt;Don’t just ask about product/vendor and hope that will answer your questions. Sure, your cloud provider may be using &lt;a href="http://www.f5.com" target="_blank"&gt;F5&lt;/a&gt; or another advanced application delivery platform, but that doesn’t mean that they’re utilizing the product in a way that would offer the features you need to ensure your application is always available. So dig deeper and ask questions. It’s your application, it’s your responsibility, no matter where it ends up running. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://twitter.com/lmacvittie"&gt;&lt;img height="18" alt="Follow me on Twitter" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_twitt-twoo-icon.png" width="18" border="0" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/Rss.aspx"&gt;&lt;img src="http://devcentral.f5.com/Portals/0/images/Icons/icon_xml_18.gif" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.slideshare.net/lmacvittie"&gt;&lt;img height="18" alt="View Lori's profile on SlideShare" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_slideshare.png" width="18" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lmacvittie.tumblr.com" border="0"&gt;&lt;img title="Follow me on Tumblr" height="18" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_tumblr.gif" width="18" border="0" /&gt;&lt;/a&gt; &lt;a href="http://lmacvittie.posterous.com/"&gt;&lt;img title="Posterous" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_posterous.png" border="0" /&gt;&lt;/a&gt; &lt;a href="http://www.linkedin.com/in/lmacvittie"&gt;&lt;img src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_linkedin_16.png" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.friendfeed.com/lmacvittie"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="16" alt="friendfeed" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/friendfeed_3.jpg" width="16" border="0" /&gt;&lt;/a&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/icon_facebook_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="16" alt="icon_facebook" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/icon_facebook_4.png" width="16" border="0" /&gt;&lt;/a&gt; &lt;a title="Subscribe using any feed reader!" href="http://www.addthis.com/feed.php?pub=lmacvittie&amp;amp;h1=http%3A%2F%2Fdevcentral.f5.com%2Fweblogs%2Fmacvittie%2FRss.aspx&amp;amp;t1="&gt;&lt;img height="18" alt="AddThis Feed Button" src="http://s9.addthis.com/button1-fd.gif" width="125" border="0" /&gt;&lt;/a&gt; &lt;a title="Bookmark and Share" onclick="window.open('http://www.addthis.com/bookmark.php?wt=nw&amp;amp;pub=lmacvittie&amp;amp;url='+encodeURIComponent(location.href)+'&amp;amp;title='+encodeURIComponent(document.title), 'addthis', 'scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no,screenX=200,screenY=100,left=200,top=100'); return false;" href="http://www.addthis.com/bookmark.php" target="_blank"&gt;&lt;img height="18" alt="Bookmark and Share" src="http://s9.addthis.com/button1-share.gif" width="125" border="0" /&gt;&lt;/a&gt; &lt;script type="text/javascript" src="http://track.mybloglog.com/js/jsserv.php?mblID=2008070914270355"&gt;&lt;/script&gt;&lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:ffc127e2-263a-4c58-be74-c19f32a83266" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/MacVittie" rel="tag"&gt;MacVittie&lt;/a&gt;,&lt;a href="http://technorati.com/tags/F5" rel="tag"&gt;F5&lt;/a&gt;,&lt;a href="http://technorati.com/tags/load+balancing" rel="tag"&gt;load balancing&lt;/a&gt;,&lt;a href="http://technorati.com/tags/cloud" rel="tag"&gt;cloud&lt;/a&gt;,&lt;a href="http://technorati.com/tags/cloud+computing" rel="tag"&gt;cloud computing&lt;/a&gt;,&lt;a href="http://technorati.com/tags/application+delivery" rel="tag"&gt;application delivery&lt;/a&gt;,&lt;a href="http://technorati.com/tags/persistence" rel="tag"&gt;persistence&lt;/a&gt;,&lt;a href="http://technorati.com/tags/cookies" rel="tag"&gt;cookies&lt;/a&gt;,&lt;a href="http://technorati.com/tags/applications" rel="tag"&gt;applications&lt;/a&gt;,&lt;a href="http://technorati.com/tags/virtualization" rel="tag"&gt;virtualization&lt;/a&gt;,&lt;a href="http://technorati.com/tags/fail" rel="tag"&gt;fail&lt;/a&gt;,&lt;a href="http://technorati.com/tags/web" rel="tag"&gt;web&lt;/a&gt;,&lt;a href="http://technorati.com/tags/internet" rel="tag"&gt;internet&lt;/a&gt;,&lt;a href="http://technorati.com/tags/blog" rel="tag"&gt;blog&lt;/a&gt;&lt;/div&gt;  &lt;p&gt;Related blogs &amp;amp; articles: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/08/and-the-killer-app-for-private-cloud-computing-ishellip.aspx"&gt;And the Killer App for Private Cloud Computing Is…&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/15/not-all-virtual-servers-are-created-equal.aspx"&gt;Not All Virtual Servers are Created Equal&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/10/29/infrastructure-2.0-the-feedback-loop-must-include-applications.aspx"&gt;Infrastructure 2.0: The Feedback Loop Must Include Applications&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/11/19/cloud-computing-is-your-cloud-sticky-it-should-be.aspx"&gt;Cloud Computing: Is your cloud sticky? It should be&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/07/03/3423.aspx"&gt;The Disadvantages of DSR (Direct Server Return)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/11/25/cloud-computing-vertical-scalability-is-still-your-problem.aspx"&gt;Cloud Computing: Vertical Scalability is Still Your Problem&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/08/07/3522.aspx"&gt;Server Virtualization versus Server Virtualization&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://devcentral.f5.com/weblogs/macvittie/aggbug/4250.aspx" width="1" height="1" /&gt;</description><dc:creator>Lori MacVittie</dc:creator></item><item><title>Clickjacking Protection Using X-FRAME-OPTIONS Available for Firefox</title><link>http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/23/clickjacking-protection-using-x-frame-options-available-for-firefox.aspx</link><pubDate>Tue, 23 Jun 2009 09:27:10 GMT</pubDate><guid isPermaLink="true">http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/23/clickjacking-protection-using-x-frame-options-available-for-firefox.aspx</guid><wfw:comment>http://devcentral.f5.com/weblogs/macvittie/comments/4249.aspx</wfw:comment><wfw:commentRss>http://devcentral.f5.com/weblogs/macvittie/comments/commentRss/4249.aspx</wfw:commentRss><comments>http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/23/clickjacking-protection-using-x-frame-options-available-for-firefox.aspx#comment</comments><slash:comments>2</slash:comments><trackback:ping>http://devcentral.f5.com/weblogs/macvittie/services/trackbacks/4249.aspx</trackback:ping><source url="http://devcentral.f5.com/weblogs/macvittie/rss.aspx">Clickjacking Protection Using X-FRAME-OPTIONS Available for Firefox</source><description>&lt;p&gt;&lt;em&gt;But browser support is only half the solution, don’t forget to implement the server-side, too. &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.sectheory.com/clickjacking.htm" target="_blank"&gt;Clickjacking&lt;/a&gt;, unlike more well-known (and understood) web application vulnerabilities, has been given scant amount of attention despite its risks and its usage. Earlier this year, for example, it &lt;a href="http://www.dslreports.com/forum/r21912383-Clickjacking-Attacks-TwitterAll-Browsers-Sites-Vulnerable" target="_blank"&gt;was used as an attack&lt;/a&gt; on &lt;a href="http://twitter.com" target="_blank"&gt;Twitter&lt;/a&gt;, but never really discussed as being a clickjacking attack. Maybe because aside from &lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/StoppingClickJackingwithXFRAMEOPTIONSand_7C97/bandaid_2.jpg"&gt;&lt;img title="bandaid" style="border-right: 0px; border-top: 0px; display: inline; margin: 0px; border-left: 0px; border-bottom: 0px" height="239" alt="bandaid" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/StoppingClickJackingwithXFRAMEOPTIONSand_7C97/bandaid_thumb.jpg" width="240" align="right" border="0" /&gt;&lt;/a&gt; rewriting applications to prevent CSRF (adding nonces and validation of the same to every page) or adding &lt;a href="http://en.wikipedia.org/wiki/Framekiller" target="_blank"&gt;framekillers&lt;/a&gt; there just haven’t been many other options to prevent the attack technique from being utilized against users. Too, it is one of the more convoluted attack methods out there so it would be silly to expect non-technical media to understand it let alone explain how it works to their readers. &lt;/p&gt;  &lt;p&gt;There is, however, a solution on the horizon. &lt;a href="http://blogs.msdn.com/ie/archive/2009/01/27/ie8-security-part-vii-clickjacking-defenses.aspx" target="_blank"&gt;IE8 has introduced an opt-in measure&lt;/a&gt; that allows developers – or whomever might be in charge of network-side scripting implementations – to prevent clickjacking on vulnerable pages using a custom HTTP header to prevent them from being “framed” inappropriately: &lt;strong&gt;X-FRAME-OPTIONS&lt;/strong&gt;. &lt;/p&gt;  &lt;p&gt;The behavior is described in the aforementioned article as:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;If the X-FRAME-OPTIONS value contains the token &lt;b&gt;DENY&lt;/b&gt;, IE8 will prevent the page from rendering if it will be contained within a frame. If the value contains the token &lt;b&gt;SAMEORIGIN&lt;/b&gt;, IE will block rendering only if the origin of the top level-browsing-context is different than the origin of the content containing the X-FRAME-OPTIONS directive. For instance, if http://shop.example.com/confirm.asp contains a DENY directive, that page will not render in a subframe, no matter where the parent frame is located. In contrast, if the X-FRAME-OPTIONS directive contains the SAMEORIGIN token, the page may be framed by any page from the exact http://shop.example.com origin.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;But that’s only IE8, right? Well, natively, yes. But a development version of &lt;a href="http://noscript.net/getit#devel" target="_blank"&gt;NoScript has been released&lt;/a&gt; that &lt;a href="http://hackademix.net/2009/01/29/x-frame-options-in-firefox/" target="_blank"&gt;supports the X-FRAME-OPTIONS&lt;/a&gt; header and will provide the same protections as are natively achieved in IE8. &lt;/p&gt;  &lt;p&gt;The problem is that this is only half the equation: the X-FRAME-OPTIONS header needs to exist before the browser can act on it and the preventive measure for clickjacking completed. As noted in the &lt;a href="http://www.theregister.co.uk/2009/02/13/twitter_clickjack_attack/" target="_blank"&gt;Register&lt;/a&gt;, “some critics have contended the &lt;a href="http://www.theregister.co.uk/2009/01/27/internet_explorer_clickjacking_block/"&gt;protection will be ineffective&lt;/a&gt; because it will require millions of websites to update their pages with proprietary code.”&lt;/p&gt;  &lt;p&gt;That’s not entirely true as there is another option that will provide support for X-FRAME-OPTIONS without updating pages/applications/sites with proprietary code: network-side scripting. The “proprietary” nature of custom HTTP headers is also debatable, as support for Firefox was provided quickly via NoScript and if the technique is successful will likely be adopted by other browser creators. &lt;/p&gt;  &lt;p&gt;   &lt;/p&gt;&lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;  &lt;p&gt;&lt;strong&gt;HOW-TO ADD X-FRAME-OPTIONS TO YOUR APPLICATION – WITH or WITHOUT CODE CHANGES&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;   &lt;/p&gt;&lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;  &lt;p&gt;Step 1: Add the custom HTTP header “X-FRAME-OPTIONS” with a value of “DENY” or “SAMEORIGIN” before returning a response to the client&lt;/p&gt;  &lt;p&gt;Really, that’s it. The browser takes care of the rest for you. OWASP has a great article on how to implement a &lt;a href="http://www.owasp.org/index.php/ClickjackFilter_for_Java_EE" target="_blank"&gt;ClickjackFilter for JavaEE&lt;/a&gt; and there are sure to be many more blogs and articles popping up describing how one can implement such functionality in their language-of-choice. Even without such direct “how-to” articles and code samples, it is merely a matter of adding a new custom HTTP header – examples of which ought to be easy enough to find. &lt;/p&gt;  &lt;p&gt;Similarly a solution can be implemented using &lt;a href="http://devcentral.f5.com/iRules" target="_blank"&gt;network-side scripting&lt;/a&gt; that requires no modification to applications. &lt;/p&gt;  &lt;p&gt;In fact, this can be accomplished via &lt;a href="http://devcentral.f5.com/iRules" target="_blank"&gt;iRules&lt;/a&gt; in just one line of code: &lt;/p&gt;  &lt;pre&gt;when HTTP_RESPONSE { 
    &lt;a href="http://devcentral.f5.com/Wiki/default.aspx/iRules/HTTP__header.html"&gt;HTTP::header&lt;/a&gt; insert "X-FRAME-OPTIONS" “(DENY || SAMEORIGIN)”
}&lt;/pre&gt;

&lt;p&gt;I believe the &lt;a href="http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html" target="_blank"&gt;mod_rewrite&lt;/a&gt; network-side script would be as simple, but as I am not an expert in &lt;em&gt;mod_rewrite&lt;/em&gt; I will hope someone who is will leave an appropriate example as a comment or write up a blog/article and leave a pointer to it. &lt;/p&gt;

&lt;p&gt;A good reason to utilize the agility of network-side scripting solutions in this case is that it is not necessary to modify each application requiring protection, which takes time to implement, test, and deploy. An even better reason is that a single network-side script can protect &lt;em&gt;all &lt;/em&gt;applications, regardless of language and deployment platform, without a lengthy development and deployment cycle. &lt;/p&gt;

&lt;p&gt;Regardless of &lt;em&gt;how &lt;/em&gt;you add the header, it would be a wise idea to add it as a standard part of your secure-code deployment requirements (you do have those, don’t you?) because &lt;u&gt;it doesn’t hurt anything for the custom HTTP header to exist&lt;/u&gt; and visitors using X-FRAME-OPTIONS enabled browsers/solutions will be a lot safer than without it. &lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="http://twitter.com/lmacvittie"&gt;&lt;img height="18" alt="Follow me on Twitter" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_twitt-twoo-icon.png" width="18" border="0" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/Rss.aspx"&gt;&lt;img src="http://devcentral.f5.com/Portals/0/images/Icons/icon_xml_18.gif" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.slideshare.net/lmacvittie"&gt;&lt;img height="18" alt="View Lori's profile on SlideShare" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_slideshare.png" width="18" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lmacvittie.tumblr.com" border="0"&gt;&lt;img title="Follow me on Tumblr" height="18" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_tumblr.gif" width="18" border="0" /&gt;&lt;/a&gt; &lt;a href="http://lmacvittie.posterous.com/"&gt;&lt;img title="Posterous" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_posterous.png" border="0" /&gt;&lt;/a&gt; &lt;a href="http://www.linkedin.com/in/lmacvittie"&gt;&lt;img src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_linkedin_16.png" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.friendfeed.com/lmacvittie"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="16" alt="friendfeed" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/friendfeed_3.jpg" width="16" border="0" /&gt;&lt;/a&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/icon_facebook_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="16" alt="icon_facebook" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/icon_facebook_4.png" width="16" border="0" /&gt;&lt;/a&gt; &lt;a title="Subscribe using any feed reader!" href="http://www.addthis.com/feed.php?pub=lmacvittie&amp;amp;h1=http%3A%2F%2Fdevcentral.f5.com%2Fweblogs%2Fmacvittie%2FRss.aspx&amp;amp;t1="&gt;&lt;img height="18" alt="AddThis Feed Button" src="http://s9.addthis.com/button1-fd.gif" width="125" border="0" /&gt;&lt;/a&gt; &lt;a title="Bookmark and Share" onclick="window.open('http://www.addthis.com/bookmark.php?wt=nw&amp;amp;pub=lmacvittie&amp;amp;url='+encodeURIComponent(location.href)+'&amp;amp;title='+encodeURIComponent(document.title), 'addthis', 'scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no,screenX=200,screenY=100,left=200,top=100'); return false;" href="http://www.addthis.com/bookmark.php" target="_blank"&gt;&lt;img height="18" alt="Bookmark and Share" src="http://s9.addthis.com/button1-share.gif" width="125" border="0" /&gt;&lt;/a&gt; &lt;script type="text/javascript" src="http://track.mybloglog.com/js/jsserv.php?mblID=2008070914270355"&gt;&lt;/script&gt;&lt;/p&gt;

&lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:0ca0b232-1a90-467a-93f7-b3caf4c75853" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/MacVittie" rel="tag"&gt;MacVittie&lt;/a&gt;,&lt;a href="http://technorati.com/tags/F5" rel="tag"&gt;F5&lt;/a&gt;,&lt;a href="http://technorati.com/tags/security" rel="tag"&gt;security&lt;/a&gt;,&lt;a href="http://technorati.com/tags/web+application+security" rel="tag"&gt;web application security&lt;/a&gt;,&lt;a href="http://technorati.com/tags/network-side+scripting" rel="tag"&gt;network-side scripting&lt;/a&gt;,&lt;a href="http://technorati.com/tags/HTTP" rel="tag"&gt;HTTP&lt;/a&gt;,&lt;a href="http://technorati.com/tags/headers" rel="tag"&gt;headers&lt;/a&gt;,&lt;a href="http://technorati.com/tags/clickjacking" rel="tag"&gt;clickjacking&lt;/a&gt;,&lt;a href="http://technorati.com/tags/IE8" rel="tag"&gt;IE8&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Web+2.0" rel="tag"&gt;Web 2.0&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Firefox" rel="tag"&gt;Firefox&lt;/a&gt;,&lt;a href="http://technorati.com/tags/No-Script" rel="tag"&gt;No-Script&lt;/a&gt;,&lt;a href="http://technorati.com/tags/prevention" rel="tag"&gt;prevention&lt;/a&gt;,&lt;a href="http://technorati.com/tags/OWASP" rel="tag"&gt;OWASP&lt;/a&gt;,&lt;a href="http://technorati.com/tags/iRules" rel="tag"&gt;iRules&lt;/a&gt;,&lt;a href="http://technorati.com/tags/application+delivery" rel="tag"&gt;application delivery&lt;/a&gt;,&lt;a href="http://technorati.com/tags/web" rel="tag"&gt;web&lt;/a&gt;,&lt;a href="http://technorati.com/tags/internet" rel="tag"&gt;internet&lt;/a&gt;,&lt;a href="http://technorati.com/tags/blog" rel="tag"&gt;blog&lt;/a&gt;&lt;/div&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Related blogs &amp;amp; articles: &lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/01/05/stop-brute-force-listing-of-http-options-with-network-side-scripting.aspx"&gt;Stop brute force listing of HTTP OPTIONS with network-side scripting&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/04/23/jedi-mind-tricks-http-request-smuggling.aspx"&gt;Jedi Mind Tricks: HTTP Request Smuggling&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/01/15/i-am-in-your-http-headers-attacking-your-application.aspx"&gt;I am in your HTTP headers, attacking your application&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/10/31/understanding-network-side-scripting.aspx"&gt;Understanding network-side scripting&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/12/11/9-ways-to-use-network-side-scripting-to-architect-faster-scalable.aspx"&gt;9 ways to use network-side scripting to architect faster, scalable, more secure applications&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://devcentral.f5.com/weblogs/macvittie/aggbug/4249.aspx" width="1" height="1" /&gt;</description><dc:creator>Lori MacVittie</dc:creator></item><item><title>You are the new number 3ffe:1900:4545:3:200:f8ff:fe21:67cf</title><link>http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/22/you-are-the-new-number-3ffe190045453200f8fffe2167cf.aspx</link><pubDate>Mon, 22 Jun 2009 09:54:08 GMT</pubDate><guid isPermaLink="true">http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/22/you-are-the-new-number-3ffe190045453200f8fffe2167cf.aspx</guid><wfw:comment>http://devcentral.f5.com/weblogs/macvittie/comments/4248.aspx</wfw:comment><wfw:commentRss>http://devcentral.f5.com/weblogs/macvittie/comments/commentRss/4248.aspx</wfw:commentRss><comments>http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/22/you-are-the-new-number-3ffe190045453200f8fffe2167cf.aspx#comment</comments><slash:comments>5</slash:comments><trackback:ping>http://devcentral.f5.com/weblogs/macvittie/services/trackbacks/4248.aspx</trackback:ping><source url="http://devcentral.f5.com/weblogs/macvittie/rss.aspx">You are the new number 3ffe:1900:4545:3:200:f8ff:fe21:67cf</source><description>&lt;p&gt;&lt;em&gt;I am not a number, I am a free man! – "&lt;a href="javascript:void(0);/*1245688677938*/"&gt;The Prisoner&lt;/a&gt;", sampled by Iron Maiden &lt;span style="color: rgb(255, 0, 0);"&gt;(edited because geeks are picky and well, they're right even though I always think of Maiden and Eddie first before getting to the actual origins) &lt;/span&gt;&lt;br /&gt;
&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/5f64ce0156ac_9965/eddie_2.jpg"&gt;&lt;img width="175" height="240" border="0" align="left" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/5f64ce0156ac_9965/eddie_thumb.jpg" alt="eddie" style="border: 0px none ; margin: 0px 10px 0px 0px; display: inline;" title="eddie" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;We, meaning everyone who deals with technology for a living, know that the move to IPv6 is inevitable. We simply must migrate in order to maintain the scalability of the Internet and its infrastructure. Well, we &lt;em&gt;could &lt;/em&gt;continue to use technologies like NAT and SNAT in order to conserve IPv4 addresses, but really that’s just not practical in the long run. Eventually even doing &lt;em&gt;that &lt;/em&gt;we are likely to “run out” of IP addresses, so it’s about time we started doing something about it. &lt;/p&gt;
&lt;p&gt;The migration has already begun, quietly, but as more consumer facing services begin to make the move expect to see more coverage and analysis of IPv6 in general, such as is the case with &lt;a target="_blank" href="http://www.enterprisenetworkingplanet.com/news/article.php/3825811"&gt;Comcast’s recent announcement it was beginning the transition&lt;/a&gt;. &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Comcast is making a move to IPv6, making IPv6 transit services available to its wholesale customers.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;This a significant development because in less than two years, the &lt;/em&gt;&lt;a href="http://networking.webopedia.com/SHARED/search_action.asp?Term=IPv4&amp;amp;Template_Name=networking.webopedia.com"&gt;&lt;em&gt;IPv4&lt;/em&gt;&lt;/a&gt;&lt;em&gt; address space will be exhausted, but it doesn't mean there won't be any more Internet addresses. IPv4 has a 32-bit address size, allowing for only 4.3 billion addresses. In contrast, IPv6 is a 128-bit address space allowing for a staggering 340,282,366,920,938,463,463,374,607,431,768,211,456 possible addresses.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Staggering, indeed. Remember not too recently we looked at statistics regarding the number of Internet users across the globe, with the &lt;a target="_blank" href="http://www.internetworldstats.com/stats.htm"&gt;estimates from Nielsen&lt;/a&gt; coming in around 1,596,270,108. That number, while large, seems incredibly insignificant next to the number of addresses possible with IPv6. &lt;/p&gt;
&lt;p&gt;So what are we going to do with all those addresses? &lt;/p&gt;
&lt;hr width="100%" noshade="noshade" style="color: rgb(192, 192, 192);" /&gt;
&lt;strong&gt;CONGRATULATIONS, MR &amp;amp; MRS CUSTOMER! YOU ARE NOW THE PROUD PARENTS OF… AN IP ADDRESS&lt;/strong&gt;  &lt;hr width="100%" noshade="noshade" style="color: rgb(192, 192, 192);" /&gt;
&lt;p&gt;The number of IPv6 addresses available makes it possible, and probable, that every device – mobile, fixed, dynamic – connected to the Internet could have its &lt;em&gt;own &lt;/em&gt;IPv6 address. This would, of course, solve all sorts of problems with IPv4 and NAT (Network Address Translation) that has to worked around every day just so things on the Internet work as expected. &lt;/p&gt;
&lt;p&gt;Along with this possibility comes another possibility; one that is both promising and petrifying at the same time: individually assigned IP addresses. &lt;/p&gt;
&lt;p&gt;Think about it – if every person had an IP address assigned to them for their personal use, security would get a whole lot easier. Tracking down an attacker would be a simple case of looking up the IP address in a database. The Internet would, possibly, become a much nicer place, too, as the “anonymity” assumed by many would immediately disappear. If I know your IP address, I know who you are, &lt;a target="_blank" href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/08/15/3543.aspx"&gt;Mr. Internet Tough Guy&lt;/a&gt;, and it would be simple to call you on your rude behavior. Assigning individual IP addresses could, ostensibly, solve some of the economic issues with publication and media. Advertising rates on the web are abysmal primarily because of the lack of qualification of visitors. If a site &lt;em&gt;knows &lt;/em&gt;who you are and what you do for a living, it can actually charge a premium for advertising of products and solutions targeted toward specific audiences if it can prove a high enough percentage of its visitors are qualified and not just random teenagers out looking for elf porn. &lt;/p&gt;
&lt;p&gt;The technical necessity of IPv6 could drastically change a lot of behavior and markets, whether individuals were assigned IPv6 addresses or not. Given the plethora of addresses available, ISPs can assign static addresses to each customer rather than leasing out IPv4 addresses. That IPv6 address being tied to your Internet activity is &lt;em&gt;priceless &lt;/em&gt;in its value to marketing and advertisers. &lt;/p&gt;
&lt;hr width="100%" noshade="noshade" style="color: rgb(192, 192, 192);" /&gt;
&lt;strong&gt;THE GOOD SIDE&lt;/strong&gt;  &lt;hr width="100%" noshade="noshade" style="color: rgb(192, 192, 192);" /&gt;
&lt;p&gt;But let’s look at the good side of IPv6 for a minute. If there are infinitely more IP addresses available, the costs of obtaining one or even a few of them should certainly decrease – dramatically. IP addresses will no longer be a “precious resource” for which customers must pay a high premium to obtain. Cloud providers, too, should be able to more freely hand out IP addresses without charging (as much) for their use and can actually manage them more effectively. &lt;/p&gt;
&lt;p&gt;Remember that &lt;a target="_blank" href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/10/infrastructure-matters-challenges-of-cloud-based-testing.aspx"&gt;sharing of IP addresses&lt;/a&gt; could be detrimental to the &lt;a target="_blank" href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/04/27/wersquore-sorry.-the-ipv4-address-you-are-trying-to-reach.aspx"&gt;availability of applications in the cloud&lt;/a&gt;. And even if that’s not the case, there’s still the little issue of IP address/domain propagation across the Internet. Getting an IP address associated with a host and domain is easy. Propagating that information such that customers and users can access the application takes time, and that time varies based on the configuration of a long chain of servers across the Internet over which you, as a cloud customer, have no control. &lt;/p&gt;
&lt;p&gt;Being able to assign “fresh” IP addresses to cloud-based applications should solve this problem. If providers have a pool of IP addresses that have effectively “timed out” of cached DNS across the Internet, they can reassign them and get around all the little niggling problems that could crop up today. &lt;/p&gt;
&lt;p&gt;As for Mr. &amp;amp; Mrs. Customer, hey, there’s &lt;em&gt;good &lt;/em&gt;for you too. If an IP address was tied to an identity, wouldn’t it be possible to get rid of login and identity verification systems? Couldn’t we just leave a comment on a blog or a post in a forum and &lt;em&gt;not &lt;/em&gt;have to remember which of our 30 passwords goes with the site (you do have more than one password on the Internet, right?). &lt;/p&gt;
&lt;hr width="100%" noshade="noshade" style="color: rgb(192, 192, 192);" /&gt;
&lt;strong&gt;REALITY&lt;/strong&gt;  &lt;hr width="100%" noshade="noshade" style="color: rgb(192, 192, 192);" /&gt;
&lt;p&gt;None of the above is likely to happen (at least any time soon). The technical challenges inherent in having an IP address follow a user around the Internet are not insurmountable, but they would put unnecessary strain on the infrastructure. The security risks of making every device a consumer might own accessible via the Internet (cause that’s one of the potential results of everything IPv6) certainly outweighs the potential that we can more easily track attackers. Routing tables are big enough, and trying to dynamically modify them because a user moved from point A to point B is just not feasible, nor are the “benefits” tangible enough to entice someone to try. It’s an interesting exercise in exploring the possibilities that’s fun but not very helpful in terms of figuring out what a move to IPv6 means for organizations. &lt;/p&gt;
&lt;p&gt;The reality is that even though ISPs and service providers may be moving to IPv6, inside the enterprise data center it is likely to remain IPv4 for quite some time. In some cases, that’s because of the cost of replacing legacy equipment not capable of supporting IPv6 – older routers, switches, servers, operating systems, mainframes, etc… – would be prohibitive, particularly today, and without much benefit &lt;em&gt;internally, &lt;/em&gt;where there is no lack of IP addresses stemming from the use of IPv4. &lt;/p&gt;
&lt;p&gt;Also prohibitive internally would be the need to rewrite hundreds or thousands of security and access policies based on IP addresses and networks and subnets. Testing such a massive change alone would require hundreds of man hours and, in the process, likely render the network and the applications it delivers unavailable. &lt;/p&gt;
&lt;p&gt;What’s going to be necessary, at least in the short term, is a way to insulate internal architectures from external changes catalyzed by a migration to IPv6. An &lt;a target="_blank" href="http://www.f5.com/products/big-ip/feature-modules/ipv6-gateway.html"&gt;IPv6 &amp;lt;—&amp;gt; IPv4 gateway&lt;/a&gt;, for example, allows organizations to retain their internal IPv4 based architectures while supporting the external move to IPv6. Such technology will be necessary for some time while providers move to IPv6 and organizations can formulate a rational, sane strategy for moving its internal architectures to IPv6 without “rebooting” their data center. &lt;/p&gt;
&lt;p&gt;Devices that typically reside at the “edge” of the network: routers, firewalls, &lt;a target="_blank" href="http://www.f5.com/products/big-ip"&gt;application delivery&lt;/a&gt;, WAN optimization, need to support both IPv6 and IPv4. Initially they’ll need to present IPv6 externally and support IPv4 internally, but one day that, too, will move to full IPv6 support. When you’re out looking at solutions &lt;em&gt;today&lt;/em&gt;, then, it’s important that IPv6 support end up higher on the list than perhaps it was yesterday. &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://twitter.com/lmacvittie"&gt;&lt;img width="18" height="18" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_twitt-twoo-icon.png" alt="Follow me on Twitter" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/Rss.aspx"&gt;&lt;img border="0" src="http://devcentral.f5.com/Portals/0/images/Icons/icon_xml_18.gif" alt="" /&gt;&lt;/a&gt;&lt;a href="http://www.slideshare.net/lmacvittie"&gt;&lt;img width="18" height="18" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_slideshare.png" alt="View Lori's profile on SlideShare" /&gt;&lt;/a&gt;&lt;a border="0" href="http://lmacvittie.tumblr.com"&gt;&lt;img width="18" height="18" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_tumblr.gif" title="Follow me on Tumblr" alt="" /&gt;&lt;/a&gt; &lt;a href="http://lmacvittie.posterous.com/"&gt;&lt;img border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_posterous.png" title="Posterous" alt="" /&gt;&lt;/a&gt; &lt;a href="http://www.linkedin.com/in/lmacvittie"&gt;&lt;img border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_linkedin_16.png" alt="" /&gt;&lt;/a&gt;&lt;a href="http://www.friendfeed.com/lmacvittie"&gt;&lt;img width="16" height="16" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/friendfeed_3.jpg" alt="friendfeed" style="border-width: 0px;" /&gt;&lt;/a&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/icon_facebook_2.png"&gt;&lt;img width="16" height="16" border="0" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/icon_facebook_4.png" alt="icon_facebook" style="border-width: 0px;" /&gt;&lt;/a&gt; &lt;a href="http://www.addthis.com/feed.php?pub=lmacvittie&amp;amp;h1=http%3A%2F%2Fdevcentral.f5.com%2Fweblogs%2Fmacvittie%2FRss.aspx&amp;amp;t1=" title="Subscribe using any feed reader!"&gt;&lt;img width="125" height="18" border="0" src="http://s9.addthis.com/button1-fd.gif" alt="AddThis Feed Button" /&gt;&lt;/a&gt; &lt;a target="_blank" href="http://www.addthis.com/bookmark.php" onclick="window.open('http://www.addthis.com/bookmark.php?wt=nw&amp;amp;pub=lmacvittie&amp;amp;url='+encodeURIComponent(location.href)+'&amp;amp;title='+encodeURIComponent(document.title), 'addthis', 'scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no,screenX=200,screenY=100,left=200,top=100'); return false;" title="Bookmark and Share"&gt;&lt;img width="125" height="18" border="0" src="http://s9.addthis.com/button1-share.gif" alt="Bookmark and Share" /&gt;&lt;/a&gt; &lt;script type="text/javascript" src="http://track.mybloglog.com/js/jsserv.php?mblID=2008070914270355"&gt;&lt;/script&gt;&lt;/p&gt;
&lt;div style="margin: 0px; padding: 0px; display: inline; float: none;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e1508c3e-9358-4d43-90f8-b50c82708167" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a rel="tag" href="http://technorati.com/tags/MacVittie"&gt;MacVittie&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/F5"&gt;F5&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/comcast"&gt;comcast&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/IPv6"&gt;IPv6&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/IPv4"&gt;IPv4&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/migration"&gt;migration&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/network"&gt;network&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/architecture"&gt;architecture&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/standards"&gt;standards&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/gateway"&gt;gateway&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/strategy"&gt;strategy&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/web"&gt;web&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/internet"&gt;internet&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/blog"&gt;blog&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Related blogs &amp;amp; articles: &lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a target="_blank" href="http://www.breakingpointsystems.com/community/blog/6-surprising-facts-about-ipv6"&gt;Six Surprising Facts About IPv6&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a target="_blank" href="http://www.enterprisenetworkingplanet.com/news/article.php/3825811"&gt;Comcast Begins Move to IPv6&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/04/27/wersquore-sorry.-the-ipv4-address-you-are-trying-to-reach.aspx"&gt;We’re sorry. The IPv4 address you are trying to reach has been disconnected.&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/02/19/the-days-of-ip-based-management-are-numbered.aspx"&gt;The Days of IP-based Management are Numbered&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://www.oreillynet.com/onlamp/blog/2003/06/what_ever_happened_to_ipv5.html"&gt;What ever happened to IPv5?&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/etherealmind.com/2009/02/17/what-was-ipv5-version-5-ip/"&gt;IPv5 – What was it?&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://www.snopes.com/holidays/aprilfools/cleaning.asp"&gt;Internet Spring Cleaning&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a target="_blank" href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/08/15/3543.aspx"&gt;Congratulations! You are a moron&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://devcentral.f5.com/weblogs/macvittie/aggbug/4248.aspx" width="1" height="1" /&gt;</description><dc:creator>Lori MacVittie</dc:creator></item><item><title>My Site Is Faster Than Your Site</title><link>http://devcentral.f5.com/weblogs/dawn/archive/2009/06/19/my-site-is-faster-than-your-site.aspx</link><pubDate>Fri, 19 Jun 2009 19:20:01 GMT</pubDate><guid isPermaLink="true">http://devcentral.f5.com/weblogs/dawn/archive/2009/06/19/my-site-is-faster-than-your-site.aspx</guid><wfw:comment>http://devcentral.f5.com/weblogs/dawn/comments/4247.aspx</wfw:comment><wfw:commentRss>http://devcentral.f5.com/weblogs/dawn/comments/commentRss/4247.aspx</wfw:commentRss><comments>http://devcentral.f5.com/weblogs/dawn/archive/2009/06/19/my-site-is-faster-than-your-site.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://devcentral.f5.com/weblogs/dawn/services/trackbacks/4247.aspx</trackback:ping><source url="http://devcentral.f5.com/weblogs/dawn/rss.aspx">My Site Is Faster Than Your Site</source><description>&lt;p&gt;Earlier this week the &lt;a href="http://www.fastwebrace.com"&gt;Fast Web Race&lt;/a&gt; announced that the &lt;a href="http://investor.keynote.com/phoenix.zhtml?c=78522&amp;amp;p=irol-newsArticle&amp;amp;ID=1299454&amp;amp;highlight="&gt;rules for the contest&lt;/a&gt; have changed slightly.  There are now two categories – one for sites looking for improvement and one for sites that want to brag about how they’ve achieved performance improvements.  The rules of category one haven’t changed so if you’re looking for some free advice on how to improve your web sites performance sign up now.  &lt;/p&gt;  &lt;p&gt;For those looking to brag about all the hard work that was devoted to improving their web applications here’s what you have to do.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Download the KITE software and record a transaction through your application. &lt;/li&gt;    &lt;li&gt;Describe all the hard work, techniques, or &lt;a href="http://www.f5.com/solutions/acceleration/ "&gt;acceleration solutions&lt;/a&gt; you used to achieve these goals.  Don’t forget to talk about what the performance was like before implementing these improvements.   &lt;/li&gt;    &lt;li&gt;Submit your entry. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;The deadline for submitting to both contests is July 15th.  What are you waiting for?  &lt;/p&gt;&lt;img src="http://devcentral.f5.com/weblogs/dawn/aggbug/4247.aspx" width="1" height="1" /&gt;</description><dc:creator>Dawn Parzych</dc:creator></item><item><title>Shrink-Url &amp;ndash; Use PowerShell To Shrink Your Urls</title><link>http://devcentral.f5.com/weblogs/Joe/archive/2009/06/19/shrink-url-ndash-use-powershell-to-shrink-your-urls.aspx</link><pubDate>Fri, 19 Jun 2009 17:04:07 GMT</pubDate><guid isPermaLink="true">http://devcentral.f5.com/weblogs/Joe/archive/2009/06/19/shrink-url-ndash-use-powershell-to-shrink-your-urls.aspx</guid><wfw:comment>http://devcentral.f5.com/weblogs/Joe/comments/4246.aspx</wfw:comment><wfw:commentRss>http://devcentral.f5.com/weblogs/Joe/comments/commentRss/4246.aspx</wfw:commentRss><comments>http://devcentral.f5.com/weblogs/Joe/archive/2009/06/19/shrink-url-ndash-use-powershell-to-shrink-your-urls.aspx#comment</comments><slash:comments>1</slash:comments><trackback:ping>http://devcentral.f5.com/weblogs/Joe/services/trackbacks/4246.aspx</trackback:ping><source url="http://devcentral.f5.com/weblogs/Joe/rss.aspx">Shrink-Url &amp;ndash; Use PowerShell To Shrink Your Urls</source><description>&lt;p&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/Joe/WindowsLiveWriter/ShrinkUrlUsePowerShellToShrinkYourUrls_9B84/poshShrink_2.jpg"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 10px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="poshShrink" border="0" alt="poshShrink" align="right" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/Joe/WindowsLiveWriter/ShrinkUrlUsePowerShellToShrinkYourUrls_9B84/poshShrink_thumb.jpg" width="240" height="240" /&gt;&lt;/a&gt;Shrinking your Url’s is all the rage nowadays.  If you are on Twitter, then odds are you have used one.  Despite CodingHorror’s distaste for them in his recent blog post on &lt;a href="http://www.codinghorror.com/blog/archives/001276.html"&gt;Url Shorteners: Destroying the Web since 2002&lt;/a&gt;, they are a fact of life when we live in a world of 140 character status updates.&lt;/p&gt;  &lt;p&gt;So what’s a URL shrinking service anyway?  Well, to put it simply, you supply them with a URL, they then supply you with a shorter URL containing a lookup “key”.  When future requests are made to this shorter URL, connections are routed to that services website where they convert the short URL to the original URL and issue a HTTP Redirect back to your browser to send you off to the original long url website.&lt;/p&gt;  &lt;p&gt;So, what’s a guy, or gal, to do if they want to set their status programmatically on Twitter, Facebook, FriendFeed, or the other gazillion social networking sites out there today and need to post a very long URL?  Most of these shrinking services offer API’s to access their “shrinking” services so it’s just a matter of digging into the various APIs to get them implemented.  In my original PowerShell Twitter library &lt;a href="http://devcentral.f5.com/weblogs/Joe/archive/2008/12/30/introducing-poshtweet---the-powershell-twitter-script-library.aspx"&gt;PoshTweet&lt;/a&gt;, I included support for a couple for shrinking URL’s through a couple of shrinking services but I figured it would be good to separate that functionality out into it’s own library.  &lt;/p&gt;  &lt;p&gt;So, here’s my first stab at a generic URL shortening library for PowerShell.  I’ve included the following services:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://is.gd/"&gt;is.gd&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://tinyurl.com"&gt;tinyurl&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://snurl.com"&gt;snurl&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://digg.com"&gt;digg&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://tr.im/"&gt;tr.im&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://bit.ly"&gt;bit.ly&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Some of these services have advanced features such as statistical reporting on all your submitted links.  Those services require users to create accounts and register for API keys.  Bit.ly is one of them, so if you want to use that service, you will have to supply this script with your bit.ly username and API key with the Set-BitlyServiceInfo function.&lt;/p&gt;  &lt;p&gt;So, here’s the script, hope you all enjoy!&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; param(&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;   [&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;]$longurl = $&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;,&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;   [&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;]$provider = &lt;span style="color: #006080"&gt;"tinyurl"&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt; );&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt; $script:DIGG_APPKEY = &lt;span style="color: #006080"&gt;"http://devcentral.f5.com/PoshShrink"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt; $script:BITLY_LOGIN = &lt;span style="color: #006080"&gt;""&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt; $script:BITLY_KEY = &lt;span style="color: #006080"&gt;""&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt; #----------------------------------------------------------------------------&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt; # function Set-BitlyServiceInfo&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt;  12:&lt;/span&gt; #----------------------------------------------------------------------------&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt;  13:&lt;/span&gt; function Set-BitlyServiceInfo()&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum14"&gt;  14:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum15"&gt;  15:&lt;/span&gt;   param(&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum16"&gt;  16:&lt;/span&gt;     [&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;]$login = $&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;,&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum17"&gt;  17:&lt;/span&gt;     [&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;]$key = $&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum18"&gt;  18:&lt;/span&gt;   );&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum19"&gt;  19:&lt;/span&gt;   &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ( $login -and $key )&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum20"&gt;  20:&lt;/span&gt;   {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum21"&gt;  21:&lt;/span&gt;     $script:BITLY_LOGIN = $login;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum22"&gt;  22:&lt;/span&gt;     $script:BITLY_KEY = $key;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum23"&gt;  23:&lt;/span&gt;   }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum24"&gt;  24:&lt;/span&gt;   &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum25"&gt;  25:&lt;/span&gt;   {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum26"&gt;  26:&lt;/span&gt;     Write-Error &lt;span style="color: #006080"&gt;"Usage: Set-BitlyServiceInfo -login login -key key"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum27"&gt;  27:&lt;/span&gt;   }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum28"&gt;  28:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum29"&gt;  29:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum30"&gt;  30:&lt;/span&gt; #----------------------------------------------------------------------------&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum31"&gt;  31:&lt;/span&gt; # function Shrink-Url&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum32"&gt;  32:&lt;/span&gt; #----------------------------------------------------------------------------&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum33"&gt;  33:&lt;/span&gt; function Shrink-Url()&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum34"&gt;  34:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum35"&gt;  35:&lt;/span&gt;   param(&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum36"&gt;  36:&lt;/span&gt;     [&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;]$longurl = $&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;,&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum37"&gt;  37:&lt;/span&gt;     [&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;]$provider = &lt;span style="color: #006080"&gt;"tinyurl"&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum38"&gt;  38:&lt;/span&gt;   );&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum39"&gt;  39:&lt;/span&gt;   &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum40"&gt;  40:&lt;/span&gt;   $shorturl = $&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum41"&gt;  41:&lt;/span&gt;   &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ( $longurl )&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum42"&gt;  42:&lt;/span&gt;   {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum43"&gt;  43:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;switch&lt;/span&gt; ($provider.ToLower())&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum44"&gt;  44:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum45"&gt;  45:&lt;/span&gt;       &lt;span style="color: #006080"&gt;"is.gd"&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum46"&gt;  46:&lt;/span&gt;         $shorturl = Execute-HTTPGetCommand &lt;span style="color: #006080"&gt;"http://is.gd/api.php?longurl=$longurl"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum47"&gt;  47:&lt;/span&gt;       }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum48"&gt;  48:&lt;/span&gt;       &lt;span style="color: #006080"&gt;"tinyurl"&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum49"&gt;  49:&lt;/span&gt;         $shorturl = Execute-HTTPGetCommand &lt;span style="color: #006080"&gt;"http://tinyurl.com/api-create.php?url=$longurl"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum50"&gt;  50:&lt;/span&gt;       }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum51"&gt;  51:&lt;/span&gt;       &lt;span style="color: #006080"&gt;"snurl"&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum52"&gt;  52:&lt;/span&gt;         $shorturl = Execute-HTTPGetCommand &lt;span style="color: #006080"&gt;"http://snipr.com/site/snip?r=simple&amp;amp;link=$longurl"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum53"&gt;  53:&lt;/span&gt;       }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum54"&gt;  54:&lt;/span&gt;       &lt;span style="color: #006080"&gt;"digg"&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum55"&gt;  55:&lt;/span&gt;         [xml]$results = Execute-HTTPGetCommand `&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum56"&gt;  56:&lt;/span&gt;           &lt;span style="color: #006080"&gt;"http://services.digg.com/url/short/create?url=${longurl}&amp;amp;appkey=${script:DIGG_APPKEY}"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum57"&gt;  57:&lt;/span&gt;         $shorturl = $results.shorturls.shorturl.short_url;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum58"&gt;  58:&lt;/span&gt;       }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum59"&gt;  59:&lt;/span&gt;       &lt;span style="color: #006080"&gt;"tr.im"&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum60"&gt;  60:&lt;/span&gt;         [xml]$results = Execute-HTTPGetCommand &lt;span style="color: #006080"&gt;"http://api.tr.im/api/trim_url.xml?url=$longurl"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum61"&gt;  61:&lt;/span&gt;         $shorturl = $results.trim.url;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum62"&gt;  62:&lt;/span&gt;       }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum63"&gt;  63:&lt;/span&gt;       &lt;span style="color: #006080"&gt;"bit.ly"&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum64"&gt;  64:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ( !$BITLY_LOGIN -or !$BITLY_KEY )&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum65"&gt;  65:&lt;/span&gt;         {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum66"&gt;  66:&lt;/span&gt;           Write-Error &lt;span style="color: #006080"&gt;"ERROR: You must configure your bit.ly LOGIN and APIKEY!"&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum67"&gt;  67:&lt;/span&gt;           exit;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum68"&gt;  68:&lt;/span&gt;         }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum69"&gt;  69:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum70"&gt;  70:&lt;/span&gt;         {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum71"&gt;  71:&lt;/span&gt;           $results = Execute-HTTPGetCommand `&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum72"&gt;  72:&lt;/span&gt;             &lt;span style="color: #006080"&gt;"http://api.bit.ly/shorten?version=2.0.1&amp;amp;longUrl=$longurl&amp;amp;login=$script:BITLY_LOGIN&amp;amp;apiKey=$script:BITLY_KEY"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum73"&gt;  73:&lt;/span&gt;           $shorturl = $results.Split(&lt;span style="color: #006080"&gt;"`n"&lt;/span&gt;)[7].Split(&lt;span style="color: #006080"&gt;""&lt;/span&gt;&lt;span style="color: #006080"&gt;""&lt;/span&gt;)[3];&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum74"&gt;  74:&lt;/span&gt;         }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum75"&gt;  75:&lt;/span&gt;       }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum76"&gt;  76:&lt;/span&gt;       &lt;span style="color: #0000ff"&gt;default&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum77"&gt;  77:&lt;/span&gt;         $shorturl = Execute-HTTPGetCommand &lt;span style="color: #006080"&gt;"http://tinyurl.com/api-create.php?url=$longurl"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum78"&gt;  78:&lt;/span&gt;       }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum79"&gt;  79:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum80"&gt;  80:&lt;/span&gt;   }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum81"&gt;  81:&lt;/span&gt;   &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum82"&gt;  82:&lt;/span&gt;   {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum83"&gt;  83:&lt;/span&gt;     Write-Host &lt;span style="color: #006080"&gt;"ERROR: Usage: Shrink-Url -longurl http://www.foo.com"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum84"&gt;  84:&lt;/span&gt;   }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum85"&gt;  85:&lt;/span&gt;   $shorturl;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum86"&gt;  86:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum87"&gt;  87:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum88"&gt;  88:&lt;/span&gt; #----------------------------------------------------------------------------&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum89"&gt;  89:&lt;/span&gt; # function Execute-HTTPGetCommand&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum90"&gt;  90:&lt;/span&gt; #----------------------------------------------------------------------------&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum91"&gt;  91:&lt;/span&gt; function Execute-HTTPGetCommand()&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum92"&gt;  92:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum93"&gt;  93:&lt;/span&gt;   param([&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;] $url = $&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum94"&gt;  94:&lt;/span&gt;   &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum95"&gt;  95:&lt;/span&gt;   $user_agent = &lt;span style="color: #006080"&gt;"PoshShrink"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum96"&gt;  96:&lt;/span&gt;   &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum97"&gt;  97:&lt;/span&gt;   &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ( $url )&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum98"&gt;  98:&lt;/span&gt;   {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum99"&gt;  99:&lt;/span&gt;     $request = [System.Net.HttpWebRequest]::Create($url);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum100"&gt; 100:&lt;/span&gt;     $request.UserAgent = $user_agent;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum101"&gt; 101:&lt;/span&gt;     $request.Credentials = [System.Net.CredentialCache]::DefaultCredentials;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum102"&gt; 102:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ( $request.Proxy )&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum103"&gt; 103:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum104"&gt; 104:&lt;/span&gt;       $request.Proxy.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum105"&gt; 105:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum106"&gt; 106:&lt;/span&gt;     $response = $request.GetResponse();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum107"&gt; 107:&lt;/span&gt;     $rs = $response.GetResponseStream();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum108"&gt; 108:&lt;/span&gt;     [System.IO.StreamReader]$sr = New-Object System.IO.StreamReader -argumentList $rs;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum109"&gt; 109:&lt;/span&gt;     $sr.ReadToEnd();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum110"&gt; 110:&lt;/span&gt;   }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum111"&gt; 111:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum112"&gt; 112:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum113"&gt; 113:&lt;/span&gt; Shrink-Url -longurl $longurl -provider $provider;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;You can download the full contents for this script here: &lt;a href="http://devcentral.f5.com/downloads/joe/PowerShell/Shrink-Url.ps1.txt"&gt;Shrink-Url.ps1&lt;/a&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:b5a68bcc-6924-47ee-bbab-ca3a3036f8ff" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/F5" rel="tag"&gt;F5&lt;/a&gt;, &lt;a href="http://technorati.com/tags/DevCentral" rel="tag"&gt;DevCentral&lt;/a&gt;, &lt;a href="http://technorati.com/tags/PowerShell" rel="tag"&gt;PowerShell&lt;/a&gt;, &lt;a href="http://technorati.com/tags/URL" rel="tag"&gt;URL&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/tinyurl" rel="tag"&gt;tinyurl&lt;/a&gt;, &lt;a href="http://technorati.com/tags/snurl" rel="tag"&gt;snurl&lt;/a&gt;, &lt;a href="http://technorati.com/tags/digg" rel="tag"&gt;digg&lt;/a&gt;, &lt;a href="http://technorati.com/tags/tr.im" rel="tag"&gt;tr.im&lt;/a&gt;, &lt;a href="http://technorati.com/tags/bit.ly" rel="tag"&gt;bit.ly&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Joe+Pruitt" rel="tag"&gt;Joe Pruitt&lt;/a&gt;&lt;/div&gt;&lt;img src="http://devcentral.f5.com/weblogs/Joe/aggbug/4246.aspx" width="1" height="1" /&gt;</description><dc:creator>Joe Pruitt</dc:creator></item><item><title>Opera Unite Cuts out the Middleman</title><link>http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/19/opera-unite-cuts-out-the-middleman.aspx</link><pubDate>Fri, 19 Jun 2009 09:56:47 GMT</pubDate><guid isPermaLink="true">http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/19/opera-unite-cuts-out-the-middleman.aspx</guid><wfw:comment>http://devcentral.f5.com/weblogs/macvittie/comments/4245.aspx</wfw:comment><wfw:commentRss>http://devcentral.f5.com/weblogs/macvittie/comments/commentRss/4245.aspx</wfw:commentRss><comments>http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/19/opera-unite-cuts-out-the-middleman.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://devcentral.f5.com/weblogs/macvittie/services/trackbacks/4245.aspx</trackback:ping><source url="http://devcentral.f5.com/weblogs/macvittie/rss.aspx">Opera Unite Cuts out the Middleman</source><description>&lt;p&gt;&lt;em&gt;The inclusion of a web server gives attackers clear line-of-sight to their targets&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;There’s been a few articles on &lt;a href="http://www.opera.com/" target="_blank"&gt;Opera Unite&lt;/a&gt; that have called into question the security of the decision to include a web server with the browser. Most of those discussions have centered around the ability to muck with files not intended by the host to be shared, but given current infection techniques there’s a far greater danger to Opera: mass injection attacks. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/TheRealDangerofOperaUnite_2C33/hacker_2.jpg"&gt;&lt;img title="hacker" style="border-right: 0px; border-top: 0px; display: inline; margin: 5px 10px 5px 0px; border-left: 0px; border-bottom: 0px" height="160" alt="hacker" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/TheRealDangerofOperaUnite_2C33/hacker_thumb.jpg" width="240" align="left" border="0" /&gt;&lt;/a&gt; As is often pointed out, current attack techniques are not necessarily targeting web sites per se, but are intended to infect the &lt;em&gt;users&lt;/em&gt; of such websites. Attacks like &lt;a href="http://www.networkworld.com/news/2009/061609-nineball-websense-attack.html?t51hb" target="_blank"&gt;NineBall&lt;/a&gt;, &lt;a href="http://news.cnet.com/8301-1009_3-10244529-83.html" target="_blank"&gt;Gumblar&lt;/a&gt;, and &lt;a href="http://voices.washingtonpost.com/securityfix/2009/06/beladen_loads_hacked_web_sites.html" target="_blank"&gt;Beladen&lt;/a&gt; infect web sites but only as a means to create a distribution network for its user-targeted malware. &lt;/p&gt;  &lt;p&gt;Opera’s decision to include a web server removes the middleman, as it were, and gives miscreants the opportunity to go right to the source. A source that may very well be less protected than most web sites. After all, users rarely have the security infrastructure in place to detect let alone stop such attacks, and while turning on Window’s firewall may be helpful in stopping unsolicited traffic one cannot argue that purposefully running and advertising web services on your PC via Opera’s integrated web server is soliciting traffic. You &lt;em&gt;want &lt;/em&gt;people to access your personal machine if you’re offering services on it, which means you’re opening yourself up to a variety of potential attacks. &lt;/p&gt;  &lt;p&gt;Both &lt;a href="http://www.w3schools.com/browsers/browsers_stats.asp" target="_blank"&gt;W3CSchools&lt;/a&gt; and &lt;a href="http://my.opera.com/haavard/blog/2008/09/07/opera-beats-chrome" target="_blank"&gt;Haavard&lt;/a&gt; web analytics place Opera’s market share at about 2.2% of users. That number is somewhat meaningless without total Internet user statistics, which we’ll pull from Nielsen via &lt;a href="http://www.internetworldstats.com/stats.htm" target="_blank"&gt;InternetWorldStats&lt;/a&gt;. Current estimates put the total number of Internet users at 1,596,270,108. Assuming this is at accurate, that would mean Opera is currently in use by about 35,117,942. We’ll call it 35 million to make it easier. Not every Opera user will upgrade, so let’s say half of them will upgrade to Unite, about 17 million. Let’s further assume that not all of &lt;em&gt;them &lt;/em&gt;will actually enable the services: figure that about half of those running Unite will actually do so, about 8 million. &lt;/p&gt;  &lt;p&gt;That’s still a target rich environment. Imagine 8 million fairly unprotected users – miscreants intended targets – running services on their machines that are begging to be attacked. But don’t worry, &lt;a href="http://www.thetechherald.com/article.php/200925/3890/Opera-Unite-A-Great-idea-or-horrible-security-risk" target="_blank"&gt;unless someone is a “hacker” they won’t be able to get at anything&lt;/a&gt;. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;a spokesperson from Opera told both ZDNet and CNET, when asked if the Unite platform would offer the ability for someone to access data on a host PC that the host didn’t intend to share, “Definitely not,” the spokesperson said, “unless they’re a hacker.”&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Well, that answers &lt;em&gt;that&lt;/em&gt;, doesn’t it? I’ll give the Opera spokesperson this: s/he’s honest about it, at least. &lt;/p&gt;  &lt;p&gt;So we have 8 million target rich environments without any real security to prevent exploitation of vulnerabilities experts &lt;a href="http://www.thetechherald.com/article.php/200925/3890/Opera-Unite-A-Great-idea-or-horrible-security-risk" target="_blank"&gt;say is inevitable&lt;/a&gt;. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;“Should vulnerabilities in Opera be discovered which permit code execution, an attacker would be able to turn on the file sharing capabilities of Opera Unite and share arbitrary content. Looking at the security &lt;/em&gt;&lt;a href="http://secunia.com/advisories/product/10615/?task=advisories"&gt;&lt;em&gt;track record of Opera&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, it's not a matter of if but when such a vulnerability will be discovered,” Sutton said.&lt;/em&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I am not feeling good about this one at all. &lt;/p&gt;  &lt;p&gt;   &lt;/p&gt;&lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;&lt;strong&gt;STRAIGHT TO THE SOURCE&lt;/strong&gt;    &lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;The potential for miscreants to easily go straight to the source, as it were, should cause alarm bells to be ringing a lot louder than they are simply because the user can enable access to a potentially vulnerable server without any real security in place to prevent exploitation.   &lt;p&gt;Given the ease with which attackers have been able to infect websites with NineBall and Gumblar and a variety of other malware-focused hacks, it would not be difficult to imagine an infection which simply gathers information about the browser and sends that information off to a bot net for further exploitation. Such an infection would be infinitely more difficult to detect, as there would be no real evidence that the information was being gathered. Infections today are noticed because users are redirected or malware is introduced into their systems and it’s &lt;em&gt;noticed &lt;/em&gt;by someone. Simply gathering the browser agent as a means to compile a list of targets is not necessarily going to include redirection or the download of anything. And once such a list is compiled the targets can be directly attacked. &lt;/p&gt;  &lt;p&gt;Assuming a common vulnerability is discovered in Opera Unite, the attacks could potentially then turn 8 million (assuming our calculations and statistics are correct) unprotected users into a bot net capable of, well, just about anything. &lt;/p&gt;  &lt;p&gt;Web site vulnerabilities are discovered almost by accident these days, with miscreants creating a generic attack and then blindly throwing it out against thousands of potentially vulnerable sites and hoping one of them will stick. That’s because the would-be attackers don’t have private access to the sites and applications they are attacking. But with Opera Unite, they can and will have private access to twiddle and muck and hack until they find what they need. &lt;/p&gt;  &lt;p&gt;Web applications are traditionally deployed in an environment with additional security solutions in place to prevent attack and infection. While web applications acting as a “middleman” are generally better protected and therefore are almost an additional layer of security against client-infection, the infections out there today suggest it’s little better than nothing. But still better than nothing. The solutions available for a &lt;em&gt;user&lt;/em&gt; to prevent such attacks and infections don’t even really exist, and even if they did the general user should not be expected to know how to configure something like &lt;em&gt;mod_security&lt;/em&gt; or an IPS/IDS or a &lt;a href="http://www.f5.com/solutions/security" target="_blank"&gt;web application firewall&lt;/a&gt;. These users are completely at the mercy of Opera to ensure the safety of their environments against what certainly appears to be an imminent exploitation of the environment. &lt;/p&gt;  &lt;p&gt;Given company responses to security concerns and Opera’s track record, thus far that’s not a comforting thought. &lt;/p&gt;  &lt;p&gt;Unless you’re a hacker. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://twitter.com/lmacvittie"&gt;&lt;img height="18" alt="Follow me on Twitter" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_twitt-twoo-icon.png" width="18" border="0" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/Rss.aspx"&gt;&lt;img src="http://devcentral.f5.com/Portals/0/images/Icons/icon_xml_18.gif" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.slideshare.net/lmacvittie"&gt;&lt;img height="18" alt="View Lori's profile on SlideShare" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_slideshare.png" width="18" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lmacvittie.tumblr.com" border="0"&gt;&lt;img title="Follow me on Tumblr" height="18" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_tumblr.gif" width="18" border="0" /&gt;&lt;/a&gt; &lt;a href="http://lmacvittie.posterous.com/"&gt;&lt;img title="Posterous" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_posterous.png" border="0" /&gt;&lt;/a&gt; &lt;a href="http://www.linkedin.com/in/lmacvittie"&gt;&lt;img src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_linkedin_16.png" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.friendfeed.com/lmacvittie"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="16" alt="friendfeed" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/friendfeed_3.jpg" width="16" border="0" /&gt;&lt;/a&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/icon_facebook_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="16" alt="icon_facebook" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/icon_facebook_4.png" width="16" border="0" /&gt;&lt;/a&gt; &lt;a title="Subscribe using any feed reader!" href="http://www.addthis.com/feed.php?pub=lmacvittie&amp;amp;h1=http%3A%2F%2Fdevcentral.f5.com%2Fweblogs%2Fmacvittie%2FRss.aspx&amp;amp;t1="&gt;&lt;img height="18" alt="AddThis Feed Button" src="http://s9.addthis.com/button1-fd.gif" width="125" border="0" /&gt;&lt;/a&gt; &lt;a title="Bookmark and Share" onclick="window.open('http://www.addthis.com/bookmark.php?wt=nw&amp;amp;pub=lmacvittie&amp;amp;url='+encodeURIComponent(location.href)+'&amp;amp;title='+encodeURIComponent(document.title), 'addthis', 'scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no,screenX=200,screenY=100,left=200,top=100'); return false;" href="http://www.addthis.com/bookmark.php" target="_blank"&gt;&lt;img height="18" alt="Bookmark and Share" src="http://s9.addthis.com/button1-share.gif" width="125" border="0" /&gt;&lt;/a&gt; &lt;script type="text/javascript" src="http://track.mybloglog.com/js/jsserv.php?mblID=2008070914270355"&gt;&lt;/script&gt;&lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:0e38364e-6792-49df-bf3b-a3bd42f7dc74" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/MacVittie" rel="tag"&gt;MacVittie&lt;/a&gt;,&lt;a href="http://technorati.com/tags/security" rel="tag"&gt;security&lt;/a&gt;,&lt;a href="http://technorati.com/tags/F5" rel="tag"&gt;F5&lt;/a&gt;,&lt;a href="http://technorati.com/tags/application+security" rel="tag"&gt;application security&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Opera" rel="tag"&gt;Opera&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Unite" rel="tag"&gt;Unite&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Gumblar" rel="tag"&gt;Gumblar&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Nine+Ball" rel="tag"&gt;Nine Ball&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Beladen" rel="tag"&gt;Beladen&lt;/a&gt;,&lt;a href="http://technorati.com/tags/web+application" rel="tag"&gt;web application&lt;/a&gt;,&lt;a href="http://technorati.com/tags/application+delivery" rel="tag"&gt;application delivery&lt;/a&gt;,&lt;a href="http://technorati.com/tags/users" rel="tag"&gt;users&lt;/a&gt;,&lt;a href="http://technorati.com/tags/browsers" rel="tag"&gt;browsers&lt;/a&gt;,&lt;a href="http://technorati.com/tags/attack" rel="tag"&gt;attack&lt;/a&gt;,&lt;a href="http://technorati.com/tags/web" rel="tag"&gt;web&lt;/a&gt;,&lt;a href="http://technorati.com/tags/internet" rel="tag"&gt;internet&lt;/a&gt;,&lt;a href="http://technorati.com/tags/blog" rel="tag"&gt;blog&lt;/a&gt;&lt;/div&gt;  &lt;p&gt;Related blogs &amp;amp; articles: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/03/the-secret-of-the-security-safety-dance.aspx"&gt;The Secret of the Security Safety Dance&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/05/21/the-it-security-flowchart.aspx"&gt;The IT Security Flowchart&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/03/26/why-you-must-dive-into-the-breach.aspx"&gt;Why you must dive Into the Breach&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://news.cnet.com/8301-1009_3-10244529-83.html" target="_blank"&gt;‘Gumblar’ attacks spreading quickly&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://voices.washingtonpost.com/securityfix/2009/06/beladen_loads_hacked_web_sites.html" target="_blank"&gt;Beladen Loads Hacked Web Sites With Badness&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.networkworld.com/news/2009/061609-nineball-websense-attack.html?t51hb" target="_blank"&gt;Nine Ball attack strikes 40,000 Web sites&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;img src="http://devcentral.f5.com/weblogs/macvittie/aggbug/4245.aspx" width="1" height="1" /&gt;</description><dc:creator>Lori MacVittie</dc:creator></item><item><title>The List: iControl Languages, Libraries, and IDEs</title><link>http://devcentral.f5.com/weblogs/JeffB/archive/2009/06/18/4243.aspx</link><pubDate>Thu, 18 Jun 2009 20:07:54 GMT</pubDate><guid isPermaLink="true">http://devcentral.f5.com/weblogs/JeffB/archive/2009/06/18/4243.aspx</guid><wfw:comment>http://devcentral.f5.com/weblogs/JeffB/comments/4243.aspx</wfw:comment><wfw:commentRss>http://devcentral.f5.com/weblogs/JeffB/comments/commentRss/4243.aspx</wfw:commentRss><comments>http://devcentral.f5.com/weblogs/JeffB/archive/2009/06/18/4243.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://devcentral.f5.com/weblogs/JeffB/services/trackbacks/4243.aspx</trackback:ping><source url="http://devcentral.f5.com/weblogs/JeffB/rss.aspx">The List: iControl Languages, Libraries, and IDEs</source><description>&lt;p&gt;Back in 2001 (wow – seems like yesterday!), F5 introduced the first-ever, open/Web services API for network devices called &lt;a href="http://devcentral.f5.com/Default.aspx?tabid=76" target="_blank"&gt;iControl&lt;/a&gt;. With it, it sparked a major shift in the way companies could look at integrating network devices with applications. Leading &lt;a href="http://www.f5.com/solutions/applications/" target="_blank"&gt;software vendors&lt;/a&gt; figured it out. And, thousands of companies since then have &lt;a href="http://devcentral.f5.com/wiki/default.aspx/iControl.CodeShare" target="_blank"&gt;used iControl&lt;/a&gt; to build custom monitoring apps, management solutions that more closely fit their internal processes, and even automate some cool stuff including enabling applications to tell the network how to deliver them.&lt;/p&gt;  &lt;p&gt;While all fine and dandy (and fun to be a part of personally), the most important decision and event was the willingness to embrace SOAP/XML. By doing this (kudos to Joe Pruitt, BTW, for this call… it wasn’t without some feisty internal debate, truth be told), it opened up API access to our gear from virtually any SOAP stack or development tool and language a customer or partner wanted to use.&lt;/p&gt;  &lt;p&gt;Why so cool, you ask? It’s simple – you know Perl? Great. Use it. You don’t need to learn SNMP. Has your organization trained everyone to use Java as a standard app language? No worries – go for it. Same for Ruby, Python, C#, and more. And, even new scripting approaches like PowerShell.&lt;/p&gt;  &lt;p&gt;By choosing an open standard, it opens the doors for any customer or vendor to use whatever they want without having to swallow yet another vendor-mandated technology just to make something work.&lt;/p&gt;  &lt;p&gt;So, this brings me to the payoff. We get this question often: “what are the supported dev tools/languages/toolkits/etc for iControl?” &lt;/p&gt;  &lt;p&gt;Well, here you have it. This is both the “F5-supported” stuff plus what we know folks in the community have used successfully. We’ll turn this into a wiki doc too, so that if you have something you’ve used successfully, you can post it as well. In the meantime, add yours to the comments below.&lt;/p&gt;  &lt;p&gt;Go forth and build your apps for iControl your way. (looking for some examples? &lt;a href="http://devcentral.f5.com/wiki/default.aspx/iControl.CodeShare" target="_blank"&gt;You can find a ton of them here&lt;/a&gt; for free in the Codeshare.)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;b&gt;Perl:&lt;/b&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Library: SOAP::Lite (&lt;a href="http://www.soaplite.com"&gt;www.soaplite.com&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;IDE's: ActivePerl, Eclipse EPIC Perl, Open Perl IDE, and others.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;b&gt;C#/VB/.NET:&lt;/b&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Library: iControl Assembly for .Net (&lt;a href="http://devcentral.f5.com/Default.aspx?tabid=68"&gt;devcentral.f5.com/Default.aspx?tabid=68&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;IDE's: Visual Studio 2003, VS 2005, VS 2008, VS 2010&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;b&gt;PowerShell:&lt;/b&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Library: iControl PowerShell Cmdlets (&lt;a href="http://devcentral.f5.com/Default.aspx?tabid=71"&gt;devcentral.f5.com/Default.aspx?tabid=71&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;IDE's: PowerShell Console Host, PowerShell ISE, PowerGUI, Sapien PrimalScript, PowerShell Analyzer, PowerShell Plus, and various others.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;b&gt;Java:&lt;/b&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Library: iControl Library for Java (&lt;a href="http://devcentral.f5.com/Default.aspx?tabid=68"&gt;devcentral.f5.com/Default.aspx?tabid=68&lt;/a&gt;), Apache SOAP, kSOAP&lt;/p&gt;  &lt;p&gt;IDE's: Eclipse, Borland JBuilder, IBM Websphere, Oracle JDeveloper, BEA WebLogic Workshop, IntelliJ IDEA, Blackberry MDS, plus others...&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;b&gt;Python:&lt;/b&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Library: pyControl (&lt;a href="http://devcentral.f5.com/Default.aspx?tabid=149"&gt;devcentral.f5.com/Default.aspx?tabid=149&lt;/a&gt;), ZSI, SOAPpy, Suds&lt;/p&gt;  &lt;p&gt;IDE's: Komodo, Eclipse PyDev, and others.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;b&gt;PHP:&lt;/b&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Library: PHP SOAP (&lt;a href="http://us3.php.net/soap"&gt;us3.php.net/soap&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;IDE's: Eclipse PHP IDE, PHPEclipse, Komodo, Zen Studio, and others.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;b&gt;Ruby:&lt;/b&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Library: iControl Assembly for .Net, SOAP4R&lt;/p&gt;  &lt;p&gt;IDE's: IronRuby (.Net support), NetBeans, Idea, RadRails, and others.&lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f831ef1d-5cdd-4b0c-bbe0-d38d8d6e976a" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/f5" rel="tag"&gt;f5&lt;/a&gt;, &lt;a href="http://technorati.com/tags/devcentral" rel="tag"&gt;devcentral&lt;/a&gt;, &lt;a href="http://technorati.com/tags/soap" rel="tag"&gt;soap&lt;/a&gt;, &lt;a href="http://technorati.com/tags/xml" rel="tag"&gt;xml&lt;/a&gt;, &lt;a href="http://technorati.com/tags/icontrol" rel="tag"&gt;icontrol&lt;/a&gt;, &lt;a href="http://technorati.com/tags/perl" rel="tag"&gt;perl&lt;/a&gt;, &lt;a href="http://technorati.com/tags/c%23" rel="tag"&gt;c#&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/powershell" rel="tag"&gt;powershell&lt;/a&gt;, &lt;a href="http://technorati.com/tags/java" rel="tag"&gt;java&lt;/a&gt;, &lt;a href="http://technorati.com/tags/python" rel="tag"&gt;python&lt;/a&gt;, &lt;a href="http://technorati.com/tags/php" rel="tag"&gt;php&lt;/a&gt;, &lt;a href="http://technorati.com/tags/ruby" rel="tag"&gt;ruby&lt;/a&gt;, &lt;a href="http://technorati.com/tags/jeff+browning" rel="tag"&gt;jeff browning&lt;/a&gt;&lt;/div&gt;&lt;img src="http://devcentral.f5.com/weblogs/JeffB/aggbug/4243.aspx" width="1" height="1" /&gt;</description><dc:creator>Jeff Browning</dc:creator></item><item><title>Your Cloud is Not a Precious Snowflake (But it Could Be)</title><link>http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/18/your-cloud-is-not-a-precious-snowflake-but-it-could.aspx</link><pubDate>Thu, 18 Jun 2009 08:40:29 GMT</pubDate><guid isPermaLink="true">http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/18/your-cloud-is-not-a-precious-snowflake-but-it-could.aspx</guid><wfw:comment>http://devcentral.f5.com/weblogs/macvittie/comments/4242.aspx</wfw:comment><wfw:commentRss>http://devcentral.f5.com/weblogs/macvittie/comments/commentRss/4242.aspx</wfw:commentRss><comments>http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/18/your-cloud-is-not-a-precious-snowflake-but-it-could.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://devcentral.f5.com/weblogs/macvittie/services/trackbacks/4242.aspx</trackback:ping><source url="http://devcentral.f5.com/weblogs/macvittie/rss.aspx">Your Cloud is Not a Precious Snowflake (But it Could Be)</source><description>&lt;p&gt;&lt;em&gt; &lt;img title="cloudsnowflake" style="border-right: 0px; border-top: 0px; display: inline; margin: 10px 15px 0px 0px; border-left: 0px; border-bottom: 0px" height="240" alt="cloudsnowflake" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/d49e6d6a2623_87C7/cloudsnowflake_thumb.jpg" width="240" align="left" border="0" /&gt;You can’t differentiate until you do something different&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.gartner.com" target="_blank"&gt;Gartner&lt;/a&gt; analyst and cloud pundit Lydia Leong reminds us that &lt;a href="http://cloudpundit.com/2009/06/16/enterprise-class-cloud/" target="_blank"&gt;without differentiation, all clouds look pretty much the same&lt;/a&gt;.  &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;“These are traits that it doesn’t take a genius to think of. Most are known requirements established through a decade and a half of hosting industry experience. &lt;u&gt;If you want to differentiate, you need to get beyond them&lt;/u&gt;.” [emphasis added] &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;She lists traits common to most cloud providers: premium equipment, &lt;a href="http://www.vmware.com" target="_blank"&gt;VMWare&lt;/a&gt;-based, private &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/11/07/virtualization-how-to-isolate-application-traffic.aspx" target="_blank"&gt;VLANs&lt;/a&gt;, private connectivity, and co-located dedicated gear but doesn’t really get into what really is – or should be – the focus of cloud offerings: services. To be more specific, &lt;em&gt;infrastructure &lt;/em&gt;services. &lt;/p&gt;  &lt;p&gt;A cloud provider of course wants a solid, reliable infrastructure. That’s why they tend to use the same set of “premium” equipment. But as Lydia points out differentiation requires &lt;em&gt;services &lt;/em&gt;above and beyond simple hosting of applications in somebody else’s backyard. &lt;/p&gt;  &lt;p&gt;Cloud providers need to differentiate based on what kinds of infrastructure services they can provide including but certainly not limited to management. Going above and beyond the basics, however, requires investment and some roll-up-your-sleeves coding at this point because the management and process automation systems simply don’t exist. The means to build those systems &lt;em&gt;do&lt;/em&gt; exist – that’s part of the allure and value of dynamic infrastructure, a.k.a. Infrastructure 2.0. &lt;/p&gt;  &lt;p&gt;Using the tools available it is wholly possible to build out the “self-service” for infrastructure services that folks have been led to believe will one day, hopefully, maybe be part and parcel of a cloud computing offering. &lt;strong&gt;Building this out is not trivial,&lt;/strong&gt; but it’s certainly worth it if you’re trying to (a) differentiate from your competitors and (b) find yet another revenue stream on which you can ride smoothly into the next round of technology advances. &lt;/p&gt;  &lt;p&gt;Lydia mentions that most cloud providers are built atop premium equipment and cites &lt;a href="http://www.cisco.com" target="_blank"&gt;Cisco&lt;/a&gt; networks and &lt;a href="http://www.f5.com" target="_blank"&gt;F5&lt;/a&gt; &lt;a href="http://www.f5.com/products/big-ip" target="_blank"&gt;application delivery infrastructure&lt;/a&gt; among others. There are more than enough “services” that can be abstracted via both companies’ &lt;a href="http://devcentral.f5.com/iControl" target="_blank"&gt;APIs&lt;/a&gt; to keep cloud computing providers differentiating their hearts out. There’s presence and location, application acceleration, application security, commonly used web application functions like rewriting URIs and customized “apology” pages via network-side scripting just to name a few. There’s a veritable cornucopia of specialized functionality above and beyond simple network and application network functionality that simply isn’t being exploited to its full potential, both in terms of the technological capabilities and the ability to differentiate for a cloud computing provider. &lt;/p&gt;  &lt;p&gt;There’s no reason why such differentiation of cloud providers cannot be achieved through &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/05/07/cloud-computing-is-not-burger-king.-you-canrsquot-have-it.aspx" target="_blank"&gt;infrastructure services&lt;/a&gt; and, in fact, its about the only way to differentiate aside from better management/control over design and maintenance of the deployment. The rest is simply price wars – competing based on cost per mega or kilo or peda or tera byte of &lt;em&gt;something&lt;/em&gt;. The problem may very well be that we’re just too early in the game for such large-scale differentiation; that not enough customers are even sure what to do with the basics let alone advanced infrastructure service offerings. Problem is that many times customers won’t sign on to anything – a service or a product – without the promise that they can do more, either right now or in the future. Whether they want to – or will use those services – is irrelevant. The fact that they exist tells the customer that the provider is serious, dedicated, and ready to do business. &lt;/p&gt;  &lt;p&gt;It’s kind of a Catch-22. Without the demand there’s no reason for a provider to invest in such an undertaking, but without investing in such an undertaking there may well continue to be a lack of demand. Remember that in many organizations data center infrastructure is the underlying foundation for their competitive advantage. If you can’t offer tit-for-tat you’re simply not a good replacement no matter how much “cheaper” you may be in the short term or long run. &lt;/p&gt;  &lt;p&gt;Differentiation of cloud services will eventually come down to management and infrastructure services because there’s really no where else for it to go. What and how those services are packaged and offered to customers will go a long way toward cloud providers differentiating amongst their offerings. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://twitter.com/lmacvittie"&gt;&lt;img height="18" alt="Follow me on Twitter" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_twitt-twoo-icon.png" width="18" border="0" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/Rss.aspx"&gt;&lt;img src="http://devcentral.f5.com/Portals/0/images/Icons/icon_xml_18.gif" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.slideshare.net/lmacvittie"&gt;&lt;img height="18" alt="View Lori's profile on SlideShare" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_slideshare.png" width="18" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lmacvittie.tumblr.com" border="0"&gt;&lt;img title="Follow me on Tumblr" height="18" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_tumblr.gif" width="18" border="0" /&gt;&lt;/a&gt; &lt;a href="http://lmacvittie.posterous.com/"&gt;&lt;img title="Posterous" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_posterous.png" border="0" /&gt;&lt;/a&gt; &lt;a href="http://www.linkedin.com/in/lmacvittie"&gt;&lt;img src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_linkedin_16.png" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.friendfeed.com/lmacvittie"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="16" alt="friendfeed" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/friendfeed_3.jpg" width="16" border="0" /&gt;&lt;/a&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/icon_facebook_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="16" alt="icon_facebook" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/icon_facebook_4.png" width="16" border="0" /&gt;&lt;/a&gt; &lt;a title="Subscribe using any feed reader!" href="http://www.addthis.com/feed.php?pub=lmacvittie&amp;amp;h1=http%3A%2F%2Fdevcentral.f5.com%2Fweblogs%2Fmacvittie%2FRss.aspx&amp;amp;t1="&gt;&lt;img height="18" alt="AddThis Feed Button" src="http://s9.addthis.com/button1-fd.gif" width="125" border="0" /&gt;&lt;/a&gt; &lt;a title="Bookmark and Share" onclick="window.open('http://www.addthis.com/bookmark.php?wt=nw&amp;amp;pub=lmacvittie&amp;amp;url='+encodeURIComponent(location.href)+'&amp;amp;title='+encodeURIComponent(document.title), 'addthis', 'scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no,screenX=200,screenY=100,left=200,top=100'); return false;" href="http://www.addthis.com/bookmark.php" target="_blank"&gt;&lt;img height="18" alt="Bookmark and Share" src="http://s9.addthis.com/button1-share.gif" width="125" border="0" /&gt;&lt;/a&gt; &lt;script type="text/javascript" src="http://track.mybloglog.com/js/jsserv.php?mblID=2008070914270355"&gt;&lt;/script&gt;&lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:7e1ca387-f450-4c28-963f-1364a4852106" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/MacVittie" rel="tag"&gt;MacVittie&lt;/a&gt;,&lt;a href="http://technorati.com/tags/F5" rel="tag"&gt;F5&lt;/a&gt;,&lt;a href="http://technorati.com/tags/cloud+computing" rel="tag"&gt;cloud computing&lt;/a&gt;,&lt;a href="http://technorati.com/tags/infrastructure" rel="tag"&gt;infrastructure&lt;/a&gt;,&lt;a href="http://technorati.com/tags/network" rel="tag"&gt;network&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Cisco" rel="tag"&gt;Cisco&lt;/a&gt;,&lt;a href="http://technorati.com/tags/application+delivery" rel="tag"&gt;application delivery&lt;/a&gt;,&lt;a href="http://technorati.com/tags/infrastructure+services" rel="tag"&gt;infrastructure services&lt;/a&gt;,&lt;a href="http://technorati.com/tags/cloud" rel="tag"&gt;cloud&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Lydia+Leong" rel="tag"&gt;Lydia Leong&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Gartner" rel="tag"&gt;Gartner&lt;/a&gt;,&lt;a href="http://technorati.com/tags/infrastructure+2.0" rel="tag"&gt;infrastructure 2.0&lt;/a&gt;,&lt;a href="http://technorati.com/tags/dynamic+infrastructure" rel="tag"&gt;dynamic infrastructure&lt;/a&gt;&lt;/div&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Related blogs &amp;amp; articles: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://cloudpundit.com/2009/06/16/enterprise-class-cloud/" target="_blank"&gt;“Enterprise class” cloud&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/09/the-infrastructure-2.0-trifecta.aspx"&gt;The Infrastructure 2.0 Trifecta&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/05/14/the-revolution-continues-let-them-eat-cloud.aspx"&gt;The Revolution Continues: Let Them Eat Cloud&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/05/07/cloud-computing-is-not-burger-king.-you-canrsquot-have-it.aspx"&gt;Cloud computing is not Burger King. You can’t have it your way. Yet.&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/03/18/control-choice-and-cost-the-conflict-in-the-cloud.aspx"&gt;Control, choice, and cost: The Conflict in the Cloud&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/11/07/virtualization-how-to-isolate-application-traffic.aspx"&gt;Virtualization: How to Isolate Application Traffic&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;img src="http://devcentral.f5.com/weblogs/macvittie/aggbug/4242.aspx" width="1" height="1" /&gt;</description><dc:creator>Lori MacVittie</dc:creator></item><item><title>Introducing PoshTwitPic &amp;ndash; Use PowerShell To Post Your Images To Twitter Via TwitPic</title><link>http://devcentral.f5.com/weblogs/Joe/archive/2009/06/17/introducing-poshtwitpic-ndash-use-powershell-to-post-your-images-to.aspx</link><pubDate>Wed, 17 Jun 2009 23:31:15 GMT</pubDate><guid isPermaLink="true">http://devcentral.f5.com/weblogs/Joe/archive/2009/06/17/introducing-poshtwitpic-ndash-use-powershell-to-post-your-images-to.aspx</guid><wfw:comment>http://devcentral.f5.com/weblogs/Joe/comments/4240.aspx</wfw:comment><wfw:commentRss>http://devcentral.f5.com/weblogs/Joe/comments/commentRss/4240.aspx</wfw:commentRss><comments>http://devcentral.f5.com/weblogs/Joe/archive/2009/06/17/introducing-poshtwitpic-ndash-use-powershell-to-post-your-images-to.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://devcentral.f5.com/weblogs/Joe/services/trackbacks/4240.aspx</trackback:ping><source url="http://devcentral.f5.com/weblogs/Joe/rss.aspx">Introducing PoshTwitPic &amp;ndash; Use PowerShell To Post Your Images To Twitter Via TwitPic</source><description>&lt;p&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/Joe/WindowsLiveWriter/IntroducingPoshTwitPicUsePowerShellToPos_F63C/PowerShell-twitpic_2.jpg"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 10px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="PowerShell-twitpic" border="0" alt="PowerShell-twitpic" align="right" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/Joe/WindowsLiveWriter/IntroducingPoshTwitPicUsePowerShellToPos_F63C/PowerShell-twitpic_thumb.jpg" width="229" height="121" /&gt;&lt;/a&gt;Twitter, for those who don’t know about it, is a status updating service that is all the rage nowadays.  It’s popularity is primarily due to it’s simplistic nature.  You post a 140 character status (known as a “tweet”) about what you are doing.  You can also friend other folks to see what they are doing.  If you are still lost, read up on the entry in &lt;a href="http://en.wikipedia.org/wiki/Twitter" target="_blank"&gt;Wikipedia&lt;/a&gt; and you should get the gist of it.  &lt;/p&gt;  &lt;p&gt;The downside to this minimalistic approach is that it does not allow for rich multimedia content such as images or videos to be associated with your “tweets”.  Let’s face it, posting a tweet about an awesome dinner you just had isn’t as good as posting a picture you took of it.  To account for this, various services have arisen to offload the image or video storage for twitter and many of the Twitter clients out there have incorporated these services into their apps.  &lt;a href="http://twitpic.com" target="_blank"&gt;TwitPic&lt;/a&gt; was an early entry into this category of services.  They allow you to post an image to their site while posting a “tweet” to Twitter including a link to the image.  Fortunately for us, TwitPic exposes their &lt;a href="http://twitpic.com/api.do" target="_blank"&gt;API&lt;/a&gt; to allow applications to integrate their features.&lt;/p&gt;  &lt;p&gt;Since I’ve already tackled the PowerShell Twitter functionality with my &lt;a href="http://devcentral.f5.com/weblogs/Joe/archive/2008/12/30/introducing-poshtweet---the-powershell-twitter-script-library.aspx" target="_blank"&gt;PoshTweet&lt;/a&gt; library, I figured the next logical step would be to write a TwitPic library to enable posting images to TwitPic through their API.&lt;/p&gt;  &lt;p&gt;The biggest challenge in writing this library was getting the multipart/form-data POST format working correctly.  Luckily I stumbled across a post by Martin Normark on his blog containing &lt;a href="http://www.dnknormark.net/post/C-TwitPic-API-client.aspx" target="_blank"&gt;a C# TwitPic API client&lt;/a&gt;.  It was fairly straightforward coming up with a PowerShell conversion of his C# code.&lt;/p&gt;  &lt;p&gt;My library includes the following functions&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Get-EncodedDataFromFile – Encode a local image file into a string. &lt;/li&gt;    &lt;li&gt;Get-ImageContentType – Get the Content Type for a given image file (ie. image/jpeg). &lt;/li&gt;    &lt;li&gt;Execute-HTTPPostCommand – Send a HTTP POST command containing the multipart/form-data request. &lt;/li&gt;    &lt;li&gt;Post-TwitPic – The main function that takes an image, posts it to TwitPic and optionally posts a Tweet to Twitter. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Without further ado, here’s the code:&lt;/p&gt;  &lt;div id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; param(&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt;   [System.IO.FileInfo]$file = $&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;,&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;   [&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;]$twitteruser = $&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;,&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;   [&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;]$twitterpass = $&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;,&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;   [&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;]$message = $&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt; );&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt; $CODEPAGE = &lt;span style="color: #006080"&gt;"iso-8859-1"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt; $TWITPIC_API_UPLOAD = &lt;span style="color: #006080"&gt;"http://twitpic.com/api/upload"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt; $TWITPIC_API_UPLOADANDPOST = &lt;span style="color: #006080"&gt;"http://twitpic.com/api/uploadAndPost"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt;  12:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt;  13:&lt;/span&gt; #--------------------------------------------------------------------------------------------&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum14"&gt;  14:&lt;/span&gt; # function Get-EncodedDataFromFile&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum15"&gt;  15:&lt;/span&gt; #--------------------------------------------------------------------------------------------&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum16"&gt;  16:&lt;/span&gt; function Get-EncodedDataFromFile()&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum17"&gt;  17:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum18"&gt;  18:&lt;/span&gt;   param(&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum19"&gt;  19:&lt;/span&gt;     [System.IO.FileInfo]$file = $&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;,&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum20"&gt;  20:&lt;/span&gt;     [&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;]$codePageName = $CODEPAGE&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum21"&gt;  21:&lt;/span&gt;   );&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum22"&gt;  22:&lt;/span&gt;   &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum23"&gt;  23:&lt;/span&gt;   $data = $&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum24"&gt;  24:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum25"&gt;  25:&lt;/span&gt;   &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ( $file -and [System.IO.File]::Exists($file.FullName) )&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum26"&gt;  26:&lt;/span&gt;   {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum27"&gt;  27:&lt;/span&gt;     $bytes = [System.IO.File]::ReadAllBytes($file.FullName);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum28"&gt;  28:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ( $bytes )&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum29"&gt;  29:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum30"&gt;  30:&lt;/span&gt;       $enc = [System.Text.Encoding]::GetEncoding($codePageName);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum31"&gt;  31:&lt;/span&gt;       $data = $enc.GetString($bytes);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum32"&gt;  32:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum33"&gt;  33:&lt;/span&gt;   }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum34"&gt;  34:&lt;/span&gt;   &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum35"&gt;  35:&lt;/span&gt;   {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum36"&gt;  36:&lt;/span&gt;     Write-Host &lt;span style="color: #006080"&gt;"ERROR; File '$file' does not exist"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum37"&gt;  37:&lt;/span&gt;   }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum38"&gt;  38:&lt;/span&gt;   $data;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum39"&gt;  39:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum40"&gt;  40:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum41"&gt;  41:&lt;/span&gt; #--------------------------------------------------------------------------------------------&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum42"&gt;  42:&lt;/span&gt; # function Get-ImageContentType&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum43"&gt;  43:&lt;/span&gt; #--------------------------------------------------------------------------------------------&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum44"&gt;  44:&lt;/span&gt; function Get-ImageContentType()&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum45"&gt;  45:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum46"&gt;  46:&lt;/span&gt;   param([System.IO.FileInfo]$file = $&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum47"&gt;  47:&lt;/span&gt;   $contentType = $&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum48"&gt;  48:&lt;/span&gt;   $contentTypeMap = @{&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum49"&gt;  49:&lt;/span&gt;     &lt;span style="color: #006080"&gt;".jpg"&lt;/span&gt;  = &lt;span style="color: #006080"&gt;"image/jpeg"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum50"&gt;  50:&lt;/span&gt;     &lt;span style="color: #006080"&gt;".jpeg"&lt;/span&gt; = &lt;span style="color: #006080"&gt;"image/jpeg"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum51"&gt;  51:&lt;/span&gt;     &lt;span style="color: #006080"&gt;".gif"&lt;/span&gt;  = &lt;span style="color: #006080"&gt;"image/gif"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum52"&gt;  52:&lt;/span&gt;     &lt;span style="color: #006080"&gt;".png"&lt;/span&gt;  = &lt;span style="color: #006080"&gt;"image/png"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum53"&gt;  53:&lt;/span&gt;     &lt;span style="color: #006080"&gt;".tiff"&lt;/span&gt; = &lt;span style="color: #006080"&gt;"image/tiff"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum54"&gt;  54:&lt;/span&gt;   }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum55"&gt;  55:&lt;/span&gt;   &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum56"&gt;  56:&lt;/span&gt;   &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ( $file )&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum57"&gt;  57:&lt;/span&gt;   {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum58"&gt;  58:&lt;/span&gt;     $contentType = $contentTypeMap[$file.Extension.ToLower()];&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum59"&gt;  59:&lt;/span&gt;   }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum60"&gt;  60:&lt;/span&gt;   $contentType;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum61"&gt;  61:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum62"&gt;  62:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum63"&gt;  63:&lt;/span&gt; #----------------------------------------------------------------------------&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum64"&gt;  64:&lt;/span&gt; # function Execute-HTTPPostCommand&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum65"&gt;  65:&lt;/span&gt; #----------------------------------------------------------------------------&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum66"&gt;  66:&lt;/span&gt; function Execute-HTTPPostCommand()&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum67"&gt;  67:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum68"&gt;  68:&lt;/span&gt;   param(&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum69"&gt;  69:&lt;/span&gt;     [&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;] $url = $&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;,&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum70"&gt;  70:&lt;/span&gt;     [&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;] $data = $&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;,&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum71"&gt;  71:&lt;/span&gt;     [System.Net.NetworkCredential]$credentials = $&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;,&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum72"&gt;  72:&lt;/span&gt;     [&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;] $contentType = &lt;span style="color: #006080"&gt;"application/x-www-form-urlencoded"&lt;/span&gt;,&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum73"&gt;  73:&lt;/span&gt;     [&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;] $codePageName = &lt;span style="color: #006080"&gt;"UTF-8"&lt;/span&gt;,&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum74"&gt;  74:&lt;/span&gt;     [&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;] $userAgent = $&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum75"&gt;  75:&lt;/span&gt;   );&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum76"&gt;  76:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum77"&gt;  77:&lt;/span&gt;   &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ( $url -and $data )&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum78"&gt;  78:&lt;/span&gt;   {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum79"&gt;  79:&lt;/span&gt;     [System.Net.WebRequest]$webRequest = [System.Net.WebRequest]::Create($url);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum80"&gt;  80:&lt;/span&gt;     $webRequest.ServicePoint.Expect100Continue = $&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum81"&gt;  81:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ( $credentials )&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum82"&gt;  82:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum83"&gt;  83:&lt;/span&gt;       $webRequest.Credentials = $credentials;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum84"&gt;  84:&lt;/span&gt;       $webRequest.PreAuthenticate = $&lt;span style="color: #0000ff"&gt;true&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum85"&gt;  85:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum86"&gt;  86:&lt;/span&gt;     $webRequest.ContentType = $contentType;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum87"&gt;  87:&lt;/span&gt;     $webRequest.Method = &lt;span style="color: #006080"&gt;"POST"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum88"&gt;  88:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ( $userAgent )&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum89"&gt;  89:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum90"&gt;  90:&lt;/span&gt;       $webRequest.UserAgent = $userAgent;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum91"&gt;  91:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum92"&gt;  92:&lt;/span&gt;     &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum93"&gt;  93:&lt;/span&gt;     $enc = [System.Text.Encoding]::GetEncoding($codePageName);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum94"&gt;  94:&lt;/span&gt;     [&lt;span style="color: #0000ff"&gt;byte&lt;/span&gt;[]]$bytes = $enc.GetBytes($data);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum95"&gt;  95:&lt;/span&gt;     $webRequest.ContentLength = $bytes.Length;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum96"&gt;  96:&lt;/span&gt;     [System.IO.Stream]$reqStream = $webRequest.GetRequestStream();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum97"&gt;  97:&lt;/span&gt;     $reqStream.Write($bytes, 0, $bytes.Length);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum98"&gt;  98:&lt;/span&gt;     $reqStream.Flush();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum99"&gt;  99:&lt;/span&gt;     &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum100"&gt; 100:&lt;/span&gt;     $resp = $webRequest.GetResponse();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum101"&gt; 101:&lt;/span&gt;     $rs = $resp.GetResponseStream();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum102"&gt; 102:&lt;/span&gt;     [System.IO.StreamReader]$sr = New-Object System.IO.StreamReader -argumentList $rs;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum103"&gt; 103:&lt;/span&gt;     $sr.ReadToEnd();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum104"&gt; 104:&lt;/span&gt;   }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum105"&gt; 105:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum106"&gt; 106:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum107"&gt; 107:&lt;/span&gt; #--------------------------------------------------------------------------------------------&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum108"&gt; 108:&lt;/span&gt; # function Post-TwitPic&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum109"&gt; 109:&lt;/span&gt; #--------------------------------------------------------------------------------------------&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum110"&gt; 110:&lt;/span&gt; function Post-TwitPic()&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum111"&gt; 111:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum112"&gt; 112:&lt;/span&gt;   param&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum113"&gt; 113:&lt;/span&gt;   (&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum114"&gt; 114:&lt;/span&gt;     [System.IO.FileInfo]$file = $&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;,&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum115"&gt; 115:&lt;/span&gt;     [&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;]$twitteruser = $&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;,&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum116"&gt; 116:&lt;/span&gt;     [&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;]$twitterpass = $&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;,&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum117"&gt; 117:&lt;/span&gt;     [&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;]$message = $&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum118"&gt; 118:&lt;/span&gt;   );&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum119"&gt; 119:&lt;/span&gt;   &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum120"&gt; 120:&lt;/span&gt;   &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ( $file -and $twitteruser -and $twitterpass )&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum121"&gt; 121:&lt;/span&gt;   {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum122"&gt; 122:&lt;/span&gt;     $boundary = [System.Guid]::NewGuid().ToString();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum123"&gt; 123:&lt;/span&gt;     $header = &lt;span style="color: #006080"&gt;"--{0}"&lt;/span&gt; -f $boundary;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum124"&gt; 124:&lt;/span&gt;     $footer = &lt;span style="color: #006080"&gt;"--{0}--"&lt;/span&gt; -f $boundary;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum125"&gt; 125:&lt;/span&gt;   &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum126"&gt; 126:&lt;/span&gt;     [System.Text.StringBuilder]$contents = New-Object System.Text.StringBuilder;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum127"&gt; 127:&lt;/span&gt;     [&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;]$contents.AppendLine($header);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum128"&gt; 128:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum129"&gt; 129:&lt;/span&gt;     $filedata = Get-EncodedDataFromFile -file $file -codePageName $CODEPAGE;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum130"&gt; 130:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ( $filedata )&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum131"&gt; 131:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum132"&gt; 132:&lt;/span&gt;       $fileContentType = Get-ImageContentType -file $file;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum133"&gt; 133:&lt;/span&gt;       $fileHeader = &lt;span style="color: #006080"&gt;"Content-Disposition: file; name="&lt;/span&gt;&lt;span style="color: #006080"&gt;"{0}"&lt;/span&gt;&lt;span style="color: #006080"&gt;"; filename="&lt;/span&gt;&lt;span style="color: #006080"&gt;"{1}"&lt;/span&gt;&lt;span style="color: #006080"&gt;""&lt;/span&gt; -f &lt;span style="color: #006080"&gt;"media"&lt;/span&gt;, $file.Name;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum134"&gt; 134:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum135"&gt; 135:&lt;/span&gt;       [&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;]$contents.AppendLine($fileHeader);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum136"&gt; 136:&lt;/span&gt;       [&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;]$contents.AppendLine(&lt;span style="color: #006080"&gt;"Content-Type: {0}"&lt;/span&gt; -f $fileContentType);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum137"&gt; 137:&lt;/span&gt;       [&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;]$contents.AppendLine();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum138"&gt; 138:&lt;/span&gt;       [&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;]$contents.AppendLine($fileData);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum139"&gt; 139:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum140"&gt; 140:&lt;/span&gt;       [&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;]$contents.AppendLine($header);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum141"&gt; 141:&lt;/span&gt;       [&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;]$contents.AppendLine(&lt;span style="color: #006080"&gt;"Content-Disposition: form-data; name="&lt;/span&gt;&lt;span style="color: #006080"&gt;"username"&lt;/span&gt;&lt;span style="color: #006080"&gt;""&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum142"&gt; 142:&lt;/span&gt;       [&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;]$contents.AppendLine();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum143"&gt; 143:&lt;/span&gt;       [&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;]$contents.AppendLine($twitteruser);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum144"&gt; 144:&lt;/span&gt;       &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum145"&gt; 145:&lt;/span&gt;       [&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;]$contents.AppendLine($header);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum146"&gt; 146:&lt;/span&gt;       [&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;]$contents.AppendLine(&lt;span style="color: #006080"&gt;"Content-Disposition: form-data; name="&lt;/span&gt;&lt;span style="color: #006080"&gt;"password"&lt;/span&gt;&lt;span style="color: #006080"&gt;""&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum147"&gt; 147:&lt;/span&gt;       [&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;]$contents.AppendLine();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum148"&gt; 148:&lt;/span&gt;       [&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;]$contents.AppendLine($twitterpass);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum149"&gt; 149:&lt;/span&gt;       &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum150"&gt; 150:&lt;/span&gt;       $url = $TWITPIC_API_UPLOAD;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum151"&gt; 151:&lt;/span&gt;       &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ( $message )&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum152"&gt; 152:&lt;/span&gt;       {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum153"&gt; 153:&lt;/span&gt;         [&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;]$contents.AppendLine($header);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum154"&gt; 154:&lt;/span&gt;         [&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;]$contents.AppendLine(&lt;span style="color: #006080"&gt;"Content-Disposition: form-data; name="&lt;/span&gt;&lt;span style="color: #006080"&gt;"message"&lt;/span&gt;&lt;span style="color: #006080"&gt;""&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum155"&gt; 155:&lt;/span&gt;         [&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;]$contents.AppendLine();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum156"&gt; 156:&lt;/span&gt;         [&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;]$contents.AppendLine($message);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum157"&gt; 157:&lt;/span&gt;         &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum158"&gt; 158:&lt;/span&gt;         $url = $TWITPIC_API_UPLOADANDPOST;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum159"&gt; 159:&lt;/span&gt;       }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum160"&gt; 160:&lt;/span&gt;       &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum161"&gt; 161:&lt;/span&gt;       [&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;]$contents.AppendLine($footer);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum162"&gt; 162:&lt;/span&gt;       &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum163"&gt; 163:&lt;/span&gt;       $contents.ToString() &amp;gt; &lt;span style="color: #006080"&gt;".\out.txt"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum164"&gt; 164:&lt;/span&gt;       &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum165"&gt; 165:&lt;/span&gt;       $postContentType = &lt;span style="color: #006080"&gt;"multipart/form-data; boundary={0}"&lt;/span&gt; -f $boundary;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum166"&gt; 166:&lt;/span&gt;       &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum167"&gt; 167:&lt;/span&gt;       [xml]$resp = Execute-HTTPPostcommand -url $url -data $contents.ToString() `&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum168"&gt; 168:&lt;/span&gt;         -contentType $postContentType -codePageName $CODEPAGE -userAgent &lt;span style="color: #006080"&gt;"PoshTwitPic"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum169"&gt; 169:&lt;/span&gt;       &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum170"&gt; 170:&lt;/span&gt;       &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ( $resp )&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum171"&gt; 171:&lt;/span&gt;       {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum172"&gt; 172:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;switch&lt;/span&gt; ($resp.rsp.stat)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum173"&gt; 173:&lt;/span&gt;         {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum174"&gt; 174:&lt;/span&gt;           &lt;span style="color: #006080"&gt;"ok"&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum175"&gt; 175:&lt;/span&gt;             $obj = 1 | select mediaid, mediaurl;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum176"&gt; 176:&lt;/span&gt;             $obj.mediaid = $resp.rsp.mediaid;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum177"&gt; 177:&lt;/span&gt;             $obj.mediaurl = $resp.rsp.mediaurl;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum178"&gt; 178:&lt;/span&gt;             $obj;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum179"&gt; 179:&lt;/span&gt;           }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum180"&gt; 180:&lt;/span&gt;           &lt;span style="color: #006080"&gt;"fail"&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum181"&gt; 181:&lt;/span&gt;             $errcode = $resp.rsp.err.code;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum182"&gt; 182:&lt;/span&gt;             $errmsg = $resp.rsp.err.msg;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum183"&gt; 183:&lt;/span&gt;             Write-Host &lt;span style="color: #006080"&gt;"Post Error: Code = '$errcode'; Message = '$errmsg'"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum184"&gt; 184:&lt;/span&gt;           }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum185"&gt; 185:&lt;/span&gt;         }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum186"&gt; 186:&lt;/span&gt;       }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum187"&gt; 187:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum188"&gt; 188:&lt;/span&gt;   }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum189"&gt; 189:&lt;/span&gt;   &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum190"&gt; 190:&lt;/span&gt;   {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum191"&gt; 191:&lt;/span&gt;     Write-Host &lt;span style="color: #006080"&gt;"USAGE: Post-TwitPic.ps1 -file file -twitteruser user -twitterpass pass"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum192"&gt; 192:&lt;/span&gt;   }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum193"&gt; 193:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum194"&gt; 194:&lt;/span&gt;  &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum195"&gt; 195:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ( $file -and $twitteruser -and $twitterpass )&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum196"&gt; 196:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum197"&gt; 197:&lt;/span&gt;   Post-TwitPic -file $file -twitteruser $twitteruser -twitterpass $twitterpass -message $message;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum198"&gt; 198:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum199"&gt; 199:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum200"&gt; 200:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum201"&gt; 201:&lt;/span&gt;   Write-Host &lt;span style="color: #006080"&gt;"USAGE: Post-TwitPic.ps1 -file file -twitteruser user -twitterpass pass"&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum202"&gt; 202:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;The entire script can be downloaded from here: &lt;a href="http://devcentral.f5.com/downloads/joe/powershell/Post-TwitPic.ps1.txt" target="_blank"&gt;Post-TwitPic.ps1&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Happy Tweeting!&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:9bab6a7a-2750-428b-9ed9-7db476a2dc0c" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/F5" rel="tag"&gt;F5&lt;/a&gt;, &lt;a href="http://technorati.com/tags/DevCentral" rel="tag"&gt;DevCentral&lt;/a&gt;, &lt;a href="http://technorati.com/tags/PowerShell" rel="tag"&gt;PowerShell&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/TwitPic" rel="tag"&gt;TwitPic&lt;/a&gt;, &lt;a href="http://technorati.com/tags/POST" rel="tag"&gt;POST&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Joe+Pruitt" rel="tag"&gt;Joe Pruitt&lt;/a&gt;&lt;/div&gt;&lt;img src="http://devcentral.f5.com/weblogs/Joe/aggbug/4240.aspx" width="1" height="1" /&gt;</description><dc:creator>Joe Pruitt</dc:creator></item><item><title>What is server offload and why do I need it?</title><link>http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/17/what-is-server-offload-and-why-do-i-need-it.aspx</link><pubDate>Wed, 17 Jun 2009 10:07:37 GMT</pubDate><guid isPermaLink="true">http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/17/what-is-server-offload-and-why-do-i-need-it.aspx</guid><wfw:comment>http://devcentral.f5.com/weblogs/macvittie/comments/4239.aspx</wfw:comment><wfw:commentRss>http://devcentral.f5.com/weblogs/macvittie/comments/commentRss/4239.aspx</wfw:commentRss><comments>http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/17/what-is-server-offload-and-why-do-i-need-it.aspx#comment</comments><slash:comments>1</slash:comments><trackback:ping>http://devcentral.f5.com/weblogs/macvittie/services/trackbacks/4239.aspx</trackback:ping><source url="http://devcentral.f5.com/weblogs/macvittie/rss.aspx">What is server offload and why do I need it?</source><description>&lt;p&gt;One of the tasks of an enterprise architect is to design a framework atop which developers can implement and deploy applications consistently and easily. The consistency is important for internal business continuity and reuse; common objects, operations, and processes can be reused across applications to make development and integration with other applications and systems easier. &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/12/11/9-ways-to-use-network-side-scripting-to-architect-faster-scalable.aspx" target="_blank"&gt;Architects also often decide where functionality resides&lt;/a&gt; and design the base application infrastructure framework. Application server, identity management, messaging, and integration are all often a part of such architecture designs. &lt;/p&gt;  &lt;p&gt;Rarely does the architect concern him/herself with the network infrastructure, as that is the purview of “&lt;em&gt;that&lt;/em&gt; group”; the “you know who I’m talking about” group. And for the most part there’s no need for architects to concern themselves with network-oriented architecture. Applications should not need to know on which VLAN they will be deployed or what their default gateway might be. But what architects might need to know – and probably should know – is whether the network infrastructure supports “server offload” of some application functions or not, and how that can benefit their enterprise architecture and the applications which will be deployed atop it.  &lt;/p&gt;  &lt;p&gt;   &lt;/p&gt;&lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;&lt;strong&gt;WHAT IT IS&lt;/strong&gt;    &lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;&lt;em&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/WhatisserveroffloadandwhydoIneedit_2841/relayracebaton_2.jpg"&gt;&lt;img title="relayracebaton" style="border-right: 0px; border-top: 0px; display: inline; margin: 0px 0px 0px 10px; border-left: 0px; border-bottom: 0px" height="170" alt="relayracebaton" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/WhatisserveroffloadandwhydoIneedit_2841/relayracebaton_thumb.jpg" width="170" align="right" border="0" /&gt;&lt;/a&gt; Server offload &lt;/em&gt;is a generic term used by the networking industry to indicate some functionality designed to improve the performance or security of applications. We use the term “offload” because the functionality is “offloaded” from the server and moved to an &lt;a href="http://www.f5.com/products/big-ip" target="_blank"&gt;application network infrastructure&lt;/a&gt; device instead. &lt;em&gt;Server offload &lt;/em&gt;works because the application network infrastructure is almost always these days deployed &lt;em&gt;in front of &lt;/em&gt;the web/application servers and is in fact acting as a broker (proxy) between the client and the server. &lt;em&gt;Server offload &lt;/em&gt;is generally offered by load balancers and application delivery controllers.   &lt;p&gt;You can think of &lt;em&gt;server offload &lt;/em&gt;like a relay race. The application network infrastructure device runs the first leg and then hands off the baton (the request) to the server. When the server is finished, the application network infrastructure device gets to run another leg, and then the race is done as the response is sent back to the client. &lt;/p&gt;  &lt;p&gt;There are basically two kinds of &lt;em&gt;server offload &lt;/em&gt;functionality: &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;Protocol processing offload&lt;/strong&gt;       &lt;br /&gt;Protocol processing offload includes functions like SSL termination and TCP optimizations. Rather than enable SSL communication on the web/application server, it can be “offloaded” to an application network infrastructure device and shared across all applications requiring secured communications. Offloading SSL to an application network infrastructure device improves application performance because the device is generally optimized to handle the complex calculations involved in encryption and decryption of secured data and web/application servers are not.       &lt;br /&gt;      &lt;br /&gt;TCP optimization is a little different. We say TCP session management is “offloaded” to the server but that’s really not what happens as obviously TCP connections are still opened, closed, and managed on the server as well. Offloading TCP session management means that the application network infrastructure is managing the connections between itself and the server in such a way as to reduce the total number of connections needed without impacting the capacity of the application. This is more commonly referred to as &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/10/14/3-really-good-reasons-you-should-use-tcp-multiplexing.aspx" target="_blank"&gt;TCP multiplexing&lt;/a&gt; and it “offloads” the overhead of TCP connection management from the web/application server to the application network infrastructure device by effectively giving up control over those connections. By allowing an application network infrastructure device to decide how many connections to maintain and which ones to use to communicate with the server, it can manage thousands of client-side connections using merely hundreds of server-side connections. Reducing the overhead associated with opening and closing TCP sockets on the web/application server improves application performance and actually increases the user capacity of servers. TCP offload is beneficial to all TCP-based applications, but is particularly &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/02/21/3086.aspx" target="_blank"&gt;beneficial for Web 2.0 applications&lt;/a&gt; making use of AJAX and other near real-time technologies that maintain one or more connections to the server for its functionality.       &lt;br /&gt;      &lt;br /&gt;Protocol processing offload does not require any modifications to the applications.       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Application-oriented offload &lt;/strong&gt;      &lt;br /&gt;Application-oriented offload includes the ability to implement shared services on an application network infrastructure device. This is often accomplished via a &lt;a href="http://devcentral.f5.com/iRules" target="_blank"&gt;network-side scripting&lt;/a&gt; capability, but some functionality has become so commonplace that it is now built into the core features available on application network infrastructure solutions.       &lt;br /&gt;      &lt;br /&gt;Application-oriented offload can include functions like cookie encryption/decryption, &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/05/27/i-am-wondering-why-not-all-websites-enabling-this-great.aspx" target="_blank"&gt;compression&lt;/a&gt;, caching, URI rewriting, HTTP redirection, DLP (Data Leak Prevention), selective data encryption, application security functionality, and data transformation. When &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/10/31/understanding-network-side-scripting.aspx" target="_blank"&gt;network-side scripting&lt;/a&gt; is available, virtually any kind of pre or post-processing can be offloaded to the application network infrastructure and thereafter &lt;em&gt;shared&lt;/em&gt; with all applications.       &lt;br /&gt;      &lt;br /&gt;&lt;img title="network-side-scripting" style="border-right: 0px; border-top: 0px; display: inline; margin: 0px 10px 0px 0px; border-left: 0px; border-bottom: 0px" height="108" alt="network-side-scripting" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/WhatisserveroffloadandwhydoIneedit_2841/network-side-scripting_thumb.jpg" width="447" align="left" border="0" /&gt;Application-oriented offload works because the application network infrastructure solution is mediating between the client and the server and it has the ability to inspect and manipulate the application data.       &lt;br /&gt;      &lt;br /&gt;The benefits of application-oriented offload are that the services implemented can be shared across multiple applications and in many cases the functionality removes the need for the web/application server to handle a specific request. For example, HTTP redirection can be fully accomplished on the application network infrastructure device. HTTP redirection is often used as a means to handle application upgrades, commonly mistyped URIs, or as part of the application logic when certain conditions are met.       &lt;br /&gt;      &lt;br /&gt;Application security offload usually falls into this category because it is application – or at least application data – specific. Application security offload can include scanning URIs and data for malicious content, validating the existence of specific cookies/data required for the application, etc… This kind of offload improves server efficiency and performance but a bigger benefit is consistent, shared security across all applications for which the service is enabled.       &lt;br /&gt;      &lt;br /&gt;Some application-oriented offload can require modification to the application, so it is important to design such features into the application architecture before development and deployment. While it is certainly possible to add such functionality into the architecture after deployment, it is always easier to do so at the beginning.       &lt;br /&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;&lt;strong&gt;WHY YOU NEED IT&lt;/strong&gt;  &lt;hr style="color: #c0c0c0" width="100%" noshade="noshade" /&gt;  &lt;p&gt;&lt;em&gt;Server offload &lt;/em&gt;is a way to increase the efficiency of servers and improve application performance and security. &lt;em&gt;Server offload &lt;/em&gt;increases efficiency of servers by alleviating the need for the web/application server to consume resources performing tasks that can be performed more efficiently on an application network infrastructure solution. The two best examples of this are SSL encryption/decryption and compression. Both are CPU intense operations that can consume 20-40% of a web/application server’s resources. By offloading these functions to an application network infrastructure solution, servers “reclaim” those resources and can use them instead to execute application logic, serve more users, handle more requests, and do so &lt;em&gt;faster&lt;/em&gt;. &lt;/p&gt;  &lt;p&gt;&lt;em&gt;Server offload &lt;/em&gt;improves application performance by allowing the web/application server to concentrate on what it is designed to do: serve applications and putting the onus for performing ancillary functions on a platform that is more optimized to handle those functions. &lt;em&gt;Server offload &lt;/em&gt;provides these benefits whether you have a traditional client-server architecture or have moved (or are moving) toward a virtualized infrastructure. Applications deployed on virtual servers still use TCP connections and SSL and run applications and therefore will benefit the same as those deployed on traditional servers. &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://twitter.com/lmacvittie"&gt;&lt;img height="18" alt="Follow me on Twitter" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_twitt-twoo-icon.png" width="18" border="0" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/Rss.aspx"&gt;&lt;img src="http://devcentral.f5.com/Portals/0/images/Icons/icon_xml_18.gif" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.slideshare.net/lmacvittie"&gt;&lt;img height="18" alt="View Lori's profile on SlideShare" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_slideshare.png" width="18" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lmacvittie.tumblr.com" border="0"&gt;&lt;img title="Follow me on Tumblr" height="18" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_tumblr.gif" width="18" border="0" /&gt;&lt;/a&gt; &lt;a href="http://lmacvittie.posterous.com/"&gt;&lt;img title="Posterous" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_posterous.png" border="0" /&gt;&lt;/a&gt; &lt;a href="http://www.linkedin.com/in/lmacvittie"&gt;&lt;img src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_linkedin_16.png" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.friendfeed.com/lmacvittie"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="16" alt="friendfeed" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/friendfeed_3.jpg" width="16" border="0" /&gt;&lt;/a&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/icon_facebook_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="16" alt="icon_facebook" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/icon_facebook_4.png" width="16" border="0" /&gt;&lt;/a&gt; &lt;a title="Subscribe using any feed reader!" href="http://www.addthis.com/feed.php?pub=lmacvittie&amp;amp;h1=http%3A%2F%2Fdevcentral.f5.com%2Fweblogs%2Fmacvittie%2FRss.aspx&amp;amp;t1="&gt;&lt;img height="18" alt="AddThis Feed Button" src="http://s9.addthis.com/button1-fd.gif" width="125" border="0" /&gt;&lt;/a&gt; &lt;a title="Bookmark and Share" onclick="window.open('http://www.addthis.com/bookmark.php?wt=nw&amp;amp;pub=lmacvittie&amp;amp;url='+encodeURIComponent(location.href)+'&amp;amp;title='+encodeURIComponent(document.title), 'addthis', 'scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no,screenX=200,screenY=100,left=200,top=100'); return false;" href="http://www.addthis.com/bookmark.php" target="_blank"&gt;&lt;img height="18" alt="Bookmark and Share" src="http://s9.addthis.com/button1-share.gif" width="125" border="0" /&gt;&lt;/a&gt; &lt;script type="text/javascript" src="http://track.mybloglog.com/js/jsserv.php?mblID=2008070914270355"&gt;&lt;/script&gt;&lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:26cdb934-b5b0-4eed-8025-56cbfd61bd05" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/MacVittie" rel="tag"&gt;MacVittie&lt;/a&gt;,&lt;a href="http://technorati.com/tags/F5" rel="tag"&gt;F5&lt;/a&gt;,&lt;a href="http://technorati.com/tags/server+offload" rel="tag"&gt;server offload&lt;/a&gt;,&lt;a href="http://technorati.com/tags/virtualization" rel="tag"&gt;virtualization&lt;/a&gt;,&lt;a href="http://technorati.com/tags/security" rel="tag"&gt;security&lt;/a&gt;,&lt;a href="http://technorati.com/tags/web+2.0" rel="tag"&gt;web 2.0&lt;/a&gt;,&lt;a href="http://technorati.com/tags/TCP" rel="tag"&gt;TCP&lt;/a&gt;,&lt;a href="http://technorati.com/tags/optimization" rel="tag"&gt;optimization&lt;/a&gt;,&lt;a href="http://technorati.com/tags/acceleration" rel="tag"&gt;acceleration&lt;/a&gt;,&lt;a href="http://technorati.com/tags/network-side+scripting" rel="tag"&gt;network-side scripting&lt;/a&gt;,&lt;a href="http://technorati.com/tags/transformation" rel="tag"&gt;transformation&lt;/a&gt;,&lt;a href="http://technorati.com/tags/inspection" rel="tag"&gt;inspection&lt;/a&gt;,&lt;a href="http://technorati.com/tags/proxy" rel="tag"&gt;proxy&lt;/a&gt;,&lt;a href="http://technorati.com/tags/broker" rel="tag"&gt;broker&lt;/a&gt;,&lt;a href="http://technorati.com/tags/performance" rel="tag"&gt;performance&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SSL" rel="tag"&gt;SSL&lt;/a&gt;,&lt;a href="http://technorati.com/tags/architecture" rel="tag"&gt;architecture&lt;/a&gt;,&lt;a href="http://technorati.com/tags/architect" rel="tag"&gt;architect&lt;/a&gt;,&lt;a href="http://technorati.com/tags/services" rel="tag"&gt;services&lt;/a&gt;,&lt;a href="http://technorati.com/tags/web" rel="tag"&gt;web&lt;/a&gt;,&lt;a href="http://technorati.com/tags/internet" rel="tag"&gt;internet&lt;/a&gt;,&lt;a href="http://technorati.com/tags/blog" rel="tag"&gt;blog&lt;/a&gt;,&lt;a href="http://technorati.com/tags/load+balancing" rel="tag"&gt;load balancing&lt;/a&gt;,&lt;a href="http://technorati.com/tags/application+delivery" rel="tag"&gt;application delivery&lt;/a&gt;&lt;/div&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Related blogs &amp;amp; articles: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/05/27/i-am-wondering-why-not-all-websites-enabling-this-great.aspx"&gt;I am wondering why not all websites enabling this great feature GZIP?&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/10/14/3-really-good-reasons-you-should-use-tcp-multiplexing.aspx"&gt;3 Really good reasons you should use TCP multiplexing&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/02/21/3086.aspx"&gt;SOA &amp;amp; Web 2.0: The Connection Management Challenge&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/10/31/understanding-network-side-scripting.aspx"&gt;Understanding network-side scripting&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/01/15/i-am-in-your-http-headers-attacking-your-application.aspx"&gt;I am in your HTTP headers, attacking your application&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2009/01/28/infrastructure-2.0-as-a-matter-of-fact-that-isnt-what.aspx"&gt;Infrastructure 2.0: As a matter of fact that isn't what it means&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;img src="http://devcentral.f5.com/weblogs/macvittie/aggbug/4239.aspx" width="1" height="1" /&gt;</description><dc:creator>Lori MacVittie</dc:creator></item></channel></rss>