<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://ajax.sys-con.com"  xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
 <title>Latest News from AJAX &amp; RIA Journal</title>
 <link>http://ajax.sys-con.com/</link>
 <description>Latest News from AJAX &amp; RIA Journal</description>
 <language>en</language>
 <copyright>Copyright 2010 Ulitzer.com</copyright>
 <generator>Ulitzer.com</generator>
 <lastBuildDate>Tue, 09 Feb 2010 09:37:22 EST</lastBuildDate>
 <docs>http://backend.userland.com/rss</docs>
 <ttl>360</ttl>
 <image> <title>Latest News from AJAX &amp; RIA Journal</title>
 <url>http://gemsres.com/section/108/adj-mag-logo-145.gif</url>
 <link>http://ajax.sys-con.com/</link>
</image>
<item>
 <title>Progressive Enhancement with JSF</title>
 <link>http://ajax.sys-con.com/node/1275633</link>
 <description>Progressive Enhancement&lt;/a&gt; is a philosophy of web design - start with simple pages, and build them up based on the capabilities of the browser viewing the page. It&amp;rsquo;s related to (and in some ways, the opposite of) the idea of Graceful Degradation, starting with a nice, fancy page, and dealing with any browser faults in an elegant manner.&lt;/p&gt;
&lt;p&gt;Perhaps the simplest example to see this in action is the case of JavaScript being disabled in the browser - this is occasionally true for certain corporate clients concerned about security, and sometimes the case for very old browsers.&lt;/p&gt;
&lt;p&gt;JSF handles this usecase pretty well - consider the following code:&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; 1 &lt;br /&gt;
&amp;nbsp;&amp;nbsp; 2 &amp;lt;f:ajax render=&amp;quot;grace :text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp; &amp;lt;h:selectBooleanCheckbox value=&amp;quot;#{grace.checked}&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; 4 &amp;lt;/f:ajax&amp;gt;&lt;br /&gt;
&amp;nbsp;&lt;/p&gt;
&lt;p&gt;This creates a checkbox input with an onclick event handler registered. If there&amp;rsquo;s no JavaScript enabled, it will continue to function as thought the ajax tag wasn&amp;rsquo;t there at all. But the user will need to submit the form with a button press...&lt;/p&gt;
&lt;p&gt;There is another way to handle this: we could instead create a link, which uses view parameters:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre&gt;
   1 &amp;lt;f:metadata&amp;gt;
   2     &amp;lt;f:viewParam name=&amp;quot;checked&amp;quot; value=&amp;quot;#{grace.checked}&amp;quot;/&amp;gt;
   3 &amp;lt;/f:metadata&amp;gt;
   4 &amp;lt;h:link value=&amp;quot;check me&amp;quot;&amp;gt;
   5     &amp;lt;f:param name=&amp;quot;checked&amp;quot; value=&amp;quot;#{!grace.checked}&amp;quot;/&amp;gt;
   6 &amp;lt;/h:link&amp;gt;
&lt;/pre&gt;
&lt;p&gt;That works, but isn&amp;rsquo;t as clean looking as the first, ajax method. Combining these approachs should provide a better user experience - and doing so isn&amp;rsquo;t especially difficult:&lt;/p&gt;
&lt;pre&gt;
   1 &amp;lt;f:metadata&amp;gt;
   2     &amp;lt;f:viewParam name=&amp;quot;checked&amp;quot; value=&amp;quot;#{grace.checked}&amp;quot;/&amp;gt;
   3 &amp;lt;/f:metadata&amp;gt;
   4 &amp;lt;h:outputText id=&amp;quot;text&amp;quot; value=&amp;quot;Checked: #{grace.checked}&amp;quot;/&amp;gt;
   5 &amp;lt;h:form id=&amp;quot;form&amp;quot;&amp;gt;
   6     &amp;lt;h:panelGroup id=&amp;quot;grace&amp;quot; layout=&amp;quot;block&amp;quot;&amp;gt;
   7         &amp;lt;h:panelGroup id=&amp;quot;default&amp;quot;&amp;gt;
   8             &amp;lt;h:link value=&amp;quot;check me&amp;quot;&amp;gt;
   9                 &amp;lt;f:param name=&amp;quot;checked&amp;quot; value=&amp;quot;#{!grace.checked}&amp;quot;/&amp;gt;
  10             &amp;lt;/h:link&amp;gt;
  11         &amp;lt;/h:panelGroup&amp;gt;
  12         &amp;lt;h:panelGroup id=&amp;quot;enhanced&amp;quot; style=&amp;quot;display: none&amp;quot;&amp;gt;
  13             &amp;lt;f:ajax render=&amp;quot;grace :text&amp;quot;&amp;gt;
  14                 &amp;lt;h:selectBooleanCheckbox value=&amp;quot;#{grace.checked}&amp;quot;/&amp;gt;
  15             &amp;lt;/f:ajax&amp;gt;
  16         &amp;lt;/h:panelGroup&amp;gt;
  17         &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;
  18             var def = document.getElementById(&amp;quot;form:default&amp;quot;);
  19             var enh = document.getElementById(&amp;quot;form:enhanced&amp;quot;); 
  20             def.style.display = &amp;quot;none&amp;quot;;
  21             enh.style.display = &amp;quot;block&amp;quot;;
  22         &amp;lt;/script&amp;gt;
  23     &amp;lt;/h:panelGroup&amp;gt;
  24 &amp;lt;/h:form&amp;gt;
&lt;/pre&gt;
&lt;p&gt;First, create two divs, one with the link and the other with the checkbox, which is hidden by default. If JavaScript is enabled, then hide the link and show the checkbox. This is the basic idea behind Progressive Enhancement - first, create something that you&amp;rsquo;ll be happy with in any browser, then add features (in this case, an Ajaxified checkbox) as needed.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s all for today. One personal note: Today is my last day officially employed by Sun Microsystems - I wasn&amp;rsquo;t offered a position at Oracle, and I&amp;rsquo;m currently actively looking for something. Please feel free to checkout &lt;a href=&quot;http://jamesgdriscoll.com&quot;&gt;my resume&lt;/a&gt;, and let me know if you know of any openings that you think might be a fit for me.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1275633&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Sun, 07 Feb 2010 07:35:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1275633</guid>
 <comments>http://ajax.sys-con.com/node/1275633#feedback</comments>
</item>
<item>
 <title>Dear Apple...So?</title>
 <link>http://ajax.sys-con.com/node/1266404</link>
 <description>Here&#039;s yet another well written blog by Rachel Luxemburg that looks like a petition to Steve Jobs. So?

Such write-ups won&#039;t have any effect on Apple&#039;s decision about Flash Player. 

It&#039;s a cold blooded decision, and if the real reason for not letting FP on iPhone OS is to keep control of the applications and have a cut from the iStore, writing blogs and I&#039;m also a big fan of Adobe software typing this comment on MBP and want Flash Player to be on iPhone and iPad. So?

Open letters won&#039;t help.&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1266404&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Sat, 06 Feb 2010 14:30:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1266404</guid>
 <comments>http://ajax.sys-con.com/node/1266404#feedback</comments>
</item>
<item>
 <title>Ulitzer - iPad for Business?</title>
 <link>http://ajax.sys-con.com/node/1274607</link>
 <description>Of course, there are the cynics along with skeptics (not to be confused with being one and the same). Some are cynics and discount anything from Apple like their counter parts who discount anything from Microsoft or others that are not part of their preference. However there also seems to be some skepticism among traditional Apple or iSomething fans regarding the iPad, needless to say, they are not doing iCartwheels over the announcement.

I think there is an even larger audience out there waiting to see, hear and learn if there is a play for the iPad, or, if new markets and opportunities will evolve around it for example as an alternative to Kindle, as an alternative to PCs for schools, or as a cloud content on-ramp. In other words, for markets where a PC is not needed. I think that there will be custom applications written for it, similar to those seen on custom platforms used by FedEx, UPS and many others.

There is also going to be the giveaway market where vendors will use iPad as a GUI display for their systems to be more hip that the PC or alternative to giving away Kindles.&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1274607&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Fri, 05 Feb 2010 11:00:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1274607</guid>
 <comments>http://ajax.sys-con.com/node/1274607#feedback</comments>
</item>
<item>
 <title>DrupalCon 2010 San Francisco Venue Announced</title>
 <link>http://ajax.sys-con.com/node/1072665</link>
 <description>Orchestra is excited at the possibility of having DrupalCon 2010 in San Francisco, CA.

If you think it would be a good idea to have DrupalCon here on the West Coast, sign up for the site updates and check out the proposal. 

Leave the team feedback and let them know your thoughts on the City by the Bay.
 
To check out the proposal, go here: DrupalConSF 2010&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1072665&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Thu, 04 Feb 2010 20:15:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1072665</guid>
 <comments>http://ajax.sys-con.com/node/1072665#feedback</comments>
</item>
<item>
 <title>Not So Green Hawaii</title>
 <link>http://ajax.sys-con.com/node/1270934</link>
 <description>I look out of my high rise condo window, and see around 100 rooftops scattered around the neighborhood below.  An unscientific count of the area gives me a tally of about 65% of Waikiki/Honolulu rooftops within my line of sight have black, tarred, asphalt, or dark colored tiling.&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1270934&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Tue, 02 Feb 2010 22:15:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1270934</guid>
 <comments>http://ajax.sys-con.com/node/1270934#feedback</comments>
</item>
<item>
 <title>Apple iPad Reminds Us How Brands Succeed by Transforming Experiences</title>
 <link>http://ajax.sys-con.com/node/1263324</link>
 <description>To borrow a line from Scrooge, “I’m as giddy as a drunken man.” With today’s Apple iPad intro, it feels like Christmas.
 
I was glued to Engadget’s live blogfeed of the announcement. Apple is leveraging its iPhone technology in a new tablet format, adding bells and whistles like unlocked, no contract, and cheap 3G data plans, a keyboard dock and the iBookstore.
 
But once again, as we’ve seen in the past with Apple, the whole is larger than the sum of the parts.&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1263324&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Wed, 27 Jan 2010 22:30:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1263324</guid>
 <comments>http://ajax.sys-con.com/node/1263324#feedback</comments>
</item>
<item>
 <title>The Competition: iPad + Mobile Hotspot on webOS = Awesome</title>
 <link>http://ajax.sys-con.com/node/1263332</link>
 <description>Our pals over at TiPb are rocking all sorts of iPad coverage today, as you might expect. Our quick take from a webOS perspective: it looks like a pretty cool device, but not the revolution much of the pre-release hype made it out to be.

The one thought we can’t get out of our heads: the iPad combined with Mobile Hotspot on webOS sounds like a match made in heaven, doesn’t it?

Actually, the thought that’s really in our head mirrors some of the twitter responses we’re seeing, namely: the iPad doesn’t look like it handles multitasking, which means a door has been left open for a webOS tablet that can do multiple apps, have non-annoying notifications, and generally fit the “next generation of user interface” that we know some people have been hoping for in a device of this kind. Heck, a webOS Tablet would even be able to do Flash someday – just saying.&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1263332&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Wed, 27 Jan 2010 22:00:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1263332</guid>
 <comments>http://ajax.sys-con.com/node/1263332#feedback</comments>
</item>
<item>
 <title>Secure File Transfer Software Protects Data Center</title>
 <link>http://ajax.sys-con.com/node/1250878</link>
 <description>Washington Business Services needed a solution to automate the secure transfer of files between its own internal companies and global partners via secure FTP. GoAnywhere Director was selected for its multiple security protocols, including OpenPGP and XML translation capabilities. When WBS started finding other uses for GoAnywhere Director, it just made sense.&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1250878&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Tue, 19 Jan 2010 14:08:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1250878</guid>
 <comments>http://ajax.sys-con.com/node/1250878#feedback</comments>
</item>
<item>
 <title>The Proactivity of Troubleshooting </title>
 <link>http://ajax.sys-con.com/node/1250517</link>
 <description>Troubleshooting of performance problems is very often - if not almost always - viewed as a reactive activity. Frankly, I have often seen it done in such a reactive fashion as a firefight; however, effective troubleshooting should build upon a solid diagnostic process. If you handle troubleshooting as if firefighting rather than based on solid diagnosis, this inevitably is a sign you have failed to take the right proactive measures.&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1250517&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Mon, 18 Jan 2010 11:00:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1250517</guid>
 <comments>http://ajax.sys-con.com/node/1250517#feedback</comments>
</item>
<item>
 <title>Case-Study on Secure SaaS</title>
 <link>http://ajax.sys-con.com/node/1249639</link>
 <description>Security and data protection are key concerns for any cloud solution. I truly believe that this is also one aspect that you cannot just improve over time. No matter how agile you are security needs to be there by design.
Unfortunately most cloud vendors/SaaS-providers still don&amp;#8217;t tell enough about the way they protect customer data &amp;#8211; [...]&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=cloudenterprise.info&amp;blog=4988729&amp;post=344&amp;subd=cloudenterprise&amp;ref=&amp;feed=1&quot; /&gt;&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1249639&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Sun, 17 Jan 2010 12:30:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1249639</guid>
 <comments>http://ajax.sys-con.com/node/1249639#feedback</comments>
</item>
<item>
 <title>No New Skills or Training Required</title>
 <link>http://ajax.sys-con.com/node/1247853</link>
 <description>&quot;The ease of designing a web page in Visual WebGui is unmatched to any other web solution I have evaluated… Visual WebGui was easy to get acquainted and got me started with building an architectural plan within few working days.&quot; ISG always looks to update and upgrade its ERP solutions to the latest technologies available. Dhruv is a tour costing system that was designed for a tour operator which provides custom-designed holidays to their clients. The product has been developed using Visual WebGui and uses MS SQL 2005 as the database. The solution integrates into the client&#039;s CRM that was developed by another vendor and uses PHP and MySQL. Most of the application is in 3-tier and uses NHibernate. &lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1247853&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Thu, 14 Jan 2010 13:45:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1247853</guid>
 <comments>http://ajax.sys-con.com/node/1247853#feedback</comments>
</item>
<item>
 <title>Standardize HMAC, OAuth RESTful Authentication Schemes</title>
 <link>http://ajax.sys-con.com/node/1236623</link>
 <description>As the enterprise is increasingly taking notice of WOA (Web Oriented Architecture) these days, the need for security guidelines and standards for RESTful Web services is becoming more pressing. Sure, RESTful Web services are meant to borrow existing security mechanisms from the web and HTTP Basic over SSL, when done right, is a great way [...]&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=flascelles.wordpress.com&amp;blog=11244066&amp;post=4&amp;subd=flascelles&amp;ref=&amp;feed=1&quot; /&gt;&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1236623&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Mon, 04 Jan 2010 18:09:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1236623</guid>
 <comments>http://ajax.sys-con.com/node/1236623#feedback</comments>
</item>
<item>
 <title>Chrome Netbook OS; Tablet PCs; LBS; Open Source</title>
 <link>http://ajax.sys-con.com/node/1233371</link>
 <description>2010 will undoubtedly be a year of technology innovation. In 2009, Twitter revolutionized the way we get news, it brought us closer to those who were a part of the news, almost making traditional media irrelevant.  I don&amp;#8217;t know who (or what) will be the Twitter of 2010, but below are a few predictions.&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1233371&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Fri, 01 Jan 2010 23:15:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1233371</guid>
 <comments>http://ajax.sys-con.com/node/1233371#feedback</comments>
</item>
<item>
 <title>Do You Have What it Takes to be a Citizen Journalist?</title>
 <link>http://ajax.sys-con.com/node/1232734</link>
 <description>If you’re seeking wealth and fame, journalism might not be your best choice. No one enters the field to get rich, and only a few ever become famous.
An entry-level journalist will barely earn enough to survive if a job is even available in today’s shrinking journalism job market. Even experienced beat reporters don’t live in the rich part of town. The only people receiving truly handsome wages in the news media today are celebrity journalists seen on network and cable television news stations.&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1232734&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Wed, 30 Dec 2009 14:15:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1232734</guid>
 <comments>http://ajax.sys-con.com/node/1232734#feedback</comments>
</item>
<item>
 <title>Elastra to Support Sun’s GlassFish Application Server</title>
 <link>http://ajax.sys-con.com/node/1221031</link>
 <description>Elastra Corporation, the leading provider of application infrastructure automation software, today announced support for Sun Microsystems GlassFish application server in Elastra Cloud Server Enterprise Edition and Elastra for Amazon Web Services. In this release, ECS lets customers compose, orchestrate and deploy application infrastructure consisting of the GlassFish application server. ECS already supports popular application servers like JBoss from RedHat and WebLogic from Oracle as well as servlet containers like Apache Tomcat.&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1221031&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Mon, 21 Dec 2009 13:15:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1221031</guid>
 <comments>http://ajax.sys-con.com/node/1221031#feedback</comments>
</item>
<item>
 <title>Build Flex Applications For iPhone? </title>
 <link>http://ajax.sys-con.com/node/1227460</link>
 <description>ELIPS Studio 3 is a cross-platform mobile application SDK based on Adobe&amp;#8217;s Flex Builder. But it only works on Windows, so I&amp;#8217;m wondering how that is going to work.
Check it out: &lt;a href=&quot;http://developer.openplug.com/index.php/learn/elips-studio-3-flex-for-mobile&quot; title=&quot;http://developer.openplug.com/index.php/learn/elips-studio-3-flex-for-mobile&quot;&gt;http://developer.openplug.com/index.php/learn/elips-studio-3-flex-for-mo...&lt;/a&gt;&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1227460&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Sun, 20 Dec 2009 21:12:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1227460</guid>
 <comments>http://ajax.sys-con.com/node/1227460#feedback</comments>
</item>
<item>
 <title>Should Our Business Tweet in the Cloud?</title>
 <link>http://ajax.sys-con.com/node/1117367</link>
 <description>Your company’s online popularity, reputation and ultimately success is derived from two core things – what you say, and what others say about you. Let’s address these communication elements as “attributed source information” (ASI). “Attributed” from the perspective that there is in fact a known source (though it may be an anonymous ID), “source” from the perspective that it’s the very first sincere representation of the communication or concept actually published online, and “information” in that it’s not just some data or graphic fragments, it’s actually a message or concept with enough context to drive interest.&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1117367&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Fri, 18 Dec 2009 07:00:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1117367</guid>
 <comments>http://ajax.sys-con.com/node/1117367#feedback</comments>
</item>
<item>
 <title>Analysis - SAP&#039;s Emerging Mobility Strategy - Not for the Faint of Heart</title>
 <link>http://ajax.sys-con.com/node/1222359</link>
 <description>SAP has announced this week that one of their strategic focuses for the next 5 years is mobile computing and mobile software applications according to SAP chief technology officer Vishal Sikka said. The pervasiveness of mobile computing and social networking also have SAP developing applications and extensions, which will allow wireless users to collaborate and utilize SAP and non-SAP related data for on the fly computing.&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1222359&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Wed, 16 Dec 2009 09:45:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1222359</guid>
 <comments>http://ajax.sys-con.com/node/1222359#feedback</comments>
</item>
<item>
 <title>Let Your ENUMs Do the Talking with CSS</title>
 <link>http://ajax.sys-con.com/node/1220453</link>
 <description>&lt;p&gt;&lt;em&gt;When you’re dealing with conditional formatting of objects based on enumerated values you can eliminate conditional assignments by directly mapping your ENUMs to CSS classes. &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;There are many cases where enumerated values are used to describe values, especially in the world of infrastructure 2.0. Availability status, for example, is a commonly used enumeration to indicate whether a &lt;a href=&quot;http://www.f5.com/glossary/load-balancing.html&quot;&gt;load balancing&lt;/a&gt; related object – a virtual server, a pool, a node (server) – is available, unavailable, or in some unknown state. When building web-based dashboards or management interfaces for such solutions, the server-side code often ends up with a lot of conditional formatting statements as developers map enumerated status codes to HTML to make it look, well, a lot more attractive. I’m using iControl and infrastructure as an example – any application that requires formatting based on enumerated values may find this technique useful in reducing the amount of code (and time) spent on conditional formatting. &lt;/p&gt;  &lt;p&gt;By directly mapping enumerated values to CSS classes, you can eliminate the conditional formatting statements in the code which reduces the overall footprint and execution time but also has the added benefit of making it easier to hand off the styling and CSS chores to a web designer without having to worry about CSS class names and documentation around formatting. This also eliminates the need for a mapping via an associative array or other dictionary-style structures in which statuses are mapped to classes. &lt;/p&gt;  &lt;p /&gt;  &lt;hr width=&quot;100%&quot; color=&quot;#680000&quot; noshade=&quot;noshade&quot; /&gt;  &lt;div style=&quot;background: #ebd3d3; width: 100%&quot;&gt;&lt;strong&gt;A QUICK EXAMPLE&lt;/strong&gt;&lt;/div&gt;  &lt;hr width=&quot;100%&quot; color=&quot;#680000&quot; noshade=&quot;noshade&quot; /&gt;As an example I’ve grabbed the availability status values possible for various objects on a &lt;a href=&quot;http://www.f5.com/big-ip/&quot;&gt;BIG-IP&lt;/a&gt; as defined in the &lt;a href=&quot;http://devcentral.f5.com/iControl&quot;&gt;iControl&lt;/a&gt; WSDL:   &lt;br /&gt;  &lt;ul&gt;   &lt;li&gt;AVAILABILITY_STATUS_GREEN&lt;/li&gt;    &lt;li&gt;AVAILABILITY_STATUS_RED&lt;/li&gt;    &lt;li&gt;AVAILABILITY_STATUS_BLUE&lt;/li&gt;    &lt;li&gt;AVAILABILITY_STATUS_YELLOW&lt;/li&gt;    &lt;li&gt;AVAILABILITY_STATUS_GRAY&lt;/li&gt;    &lt;li&gt;AVAILABILITY_STATUS_NONE&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I’ve defined a couple of classes to differentiate between a virtual server status (highest level) and component (pools, nodes) statuses, and then further defined a style for each availability status that sets the background color of the HTML element to the corresponding status “color”. I’ve made these specifically DIV classes rather than global classes, but that’s just me – you could just define a global CSS class for each availability status if you want. Flexibility is fun! &lt;/p&gt;  &lt;div id=&quot;codeSnippetWrapper&quot;&gt;   &lt;div id=&quot;codeSnippet&quot; style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none&quot;&gt;     &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #cc6633&quot;&gt;.statusbar&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none&quot;&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;width&lt;/span&gt;: &lt;span style=&quot;color: #006080&quot;&gt;350px;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none&quot;&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;margin&lt;/span&gt;-&lt;span style=&quot;color: #0000ff&quot;&gt;bottom&lt;/span&gt;: &lt;span style=&quot;color: #006080&quot;&gt;20px;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none&quot;&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;padding&lt;/span&gt;: &lt;span style=&quot;color: #006080&quot;&gt;5px;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none&quot;&gt;}&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #cc6633&quot;&gt;.poolstatusbar&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none&quot;&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;width&lt;/span&gt;: &lt;span style=&quot;color: #006080&quot;&gt;250px;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none&quot;&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;border&lt;/span&gt;: &lt;span style=&quot;color: #006080&quot;&gt;thin solid white;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none&quot;&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;margin&lt;/span&gt;-&lt;span style=&quot;color: #0000ff&quot;&gt;left&lt;/span&gt;: &lt;span style=&quot;color: #006080&quot;&gt;50px;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none&quot;&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;margin&lt;/span&gt;-&lt;span style=&quot;color: #0000ff&quot;&gt;top&lt;/span&gt;: &lt;span style=&quot;color: #006080&quot;&gt;10px;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none&quot;&gt;}&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none&quot;&gt; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #cc6633&quot;&gt;.AVAILABILITY_STATUS_GREEN&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none&quot;&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;background&lt;/span&gt;: &lt;span style=&quot;color: #006080&quot;&gt;green;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none&quot;&gt;}&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none&quot;&gt; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #cc6633&quot;&gt;.AVAILABILITY_STATUS_RED&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none&quot;&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;background&lt;/span&gt;: &lt;span style=&quot;color: #006080&quot;&gt;red;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none&quot;&gt;}&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none&quot;&gt; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;color: #cc6633&quot;&gt;.AVAILABILITY_STATUS_BLUE&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none&quot;&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;background&lt;/span&gt;: &lt;span style=&quot;color: #006080&quot;&gt;blue;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none&quot;&gt;}&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;You can see that the style class names map directly to the enumerated values used by iControl (not all options are shown in sample code). In the past the PHP code to retrieve the status of virtual servers and their associated pools relied upon conditional statements to format each component based on the value of the &lt;em&gt;availability_status &lt;/em&gt;property. &lt;/p&gt;

&lt;div id=&quot;codeSnippetWrapper&quot; style=&quot;border-right: silver 1px solid; padding-right: 4px; border-top: silver 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: visible; border-left: silver 1px solid; width: 97.25%; cursor: text; direction: ltr; max-height: 250px; line-height: 12pt; padding-top: 4px; border-bottom: silver 1px solid; font-family: &#039;Courier New&#039;, courier, monospace; height: 238px; background-color: #f4f4f4; text-align: left&quot;&gt;
  &lt;div id=&quot;codeSnippet&quot; style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none&quot;&gt;
    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none&quot;&gt;&lt;span id=&quot;lnum1&quot; style=&quot;color: #606060&quot;&gt;   1:&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;foreach&lt;/span&gt; ($member &lt;span style=&quot;color: #0000ff&quot;&gt;as&lt;/span&gt; $item) {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none&quot;&gt;&lt;span id=&quot;lnum2&quot; style=&quot;color: #606060&quot;&gt;   2:&lt;/span&gt;    $color = &lt;span style=&quot;color: #006080&quot;&gt;&quot;green&quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none&quot;&gt;&lt;span id=&quot;lnum3&quot; style=&quot;color: #606060&quot;&gt;   3:&lt;/span&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; ($member-&amp;gt;availability_status == &lt;span style=&quot;color: #006080&quot;&gt;&#039;AVAILABILITY_STATUS_RED&#039;&lt;/span&gt;)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none&quot;&gt;&lt;span id=&quot;lnum4&quot; style=&quot;color: #606060&quot;&gt;   4:&lt;/span&gt;        $color = &lt;span style=&quot;color: #006080&quot;&gt;&quot;red&quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none&quot;&gt;&lt;span id=&quot;lnum5&quot; style=&quot;color: #606060&quot;&gt;   5:&lt;/span&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;else&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none&quot;&gt;&lt;span id=&quot;lnum6&quot; style=&quot;color: #606060&quot;&gt;   6:&lt;/span&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; ($member-&amp;gt;availability_status == &lt;span style=&quot;color: #006080&quot;&gt;&#039;AVAILABILITY_STATUS_BLUE&#039;&lt;/span&gt;)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none&quot;&gt;&lt;span id=&quot;lnum7&quot; style=&quot;color: #606060&quot;&gt;   7:&lt;/span&gt;        $color = &lt;span style=&quot;color: #006080&quot;&gt;&quot;blue&quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none&quot;&gt;&lt;span id=&quot;lnum8&quot; style=&quot;color: #606060&quot;&gt;   8:&lt;/span&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;else&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none&quot;&gt;&lt;span id=&quot;lnum9&quot; style=&quot;color: #606060&quot;&gt;   9:&lt;/span&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; ($member-&amp;gt;availability_status == &lt;span style=&quot;color: #006080&quot;&gt;&#039;AVAILABILITY_STATUS_GRAY&#039;&lt;/span&gt;)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none&quot;&gt;&lt;span id=&quot;lnum10&quot; style=&quot;color: #606060&quot;&gt;  10:&lt;/span&gt;        $color = &lt;span style=&quot;color: #006080&quot;&gt;&quot;gray&quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none&quot;&gt;&lt;span id=&quot;lnum11&quot; style=&quot;color: #606060&quot;&gt;  11:&lt;/span&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #006080&quot;&gt;&quot;&amp;lt;div style=\&quot;background: $color; width: 350px; padding: 5px;\&quot;&amp;gt;&quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none&quot;&gt;&lt;span id=&quot;lnum12&quot; style=&quot;color: #606060&quot;&gt;  12:&lt;/span&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #006080&quot;&gt;&quot;&amp;lt;b&amp;gt;$item-&amp;gt;address:$item-&amp;gt;port&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;&quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none&quot;&gt;&lt;span id=&quot;lnum13&quot; style=&quot;color: #606060&quot;&gt;  13:&lt;/span&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #006080&quot;&gt;&quot;&amp;lt;/div&amp;gt;&quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none&quot;&gt;&lt;span id=&quot;lnum14&quot; style=&quot;color: #606060&quot;&gt;  14:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;I’ve now removed all that code and replaced it by simply assigning the enumerated value to the class on each DIV containing the components. &lt;/p&gt;

&lt;div id=&quot;codeSnippetWrapper&quot; style=&quot;border-right: silver 1px solid; padding-right: 4px; border-top: silver 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: hidden; border-left: silver 1px solid; width: 97.5%; cursor: text; direction: ltr; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: silver 1px solid; font-family: &#039;Courier New&#039;, courier, monospace; background-color: #f4f4f4; text-align: left&quot;&gt;
  &lt;div id=&quot;codeSnippet&quot; style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none&quot;&gt;
    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none&quot;&gt;&lt;span id=&quot;lnum1&quot; style=&quot;color: #606060&quot;&gt;   1:&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;foreach&lt;/span&gt; ($member &lt;span style=&quot;color: #0000ff&quot;&gt;as&lt;/span&gt; $item) {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none&quot;&gt;&lt;span id=&quot;lnum2&quot; style=&quot;color: #606060&quot;&gt;   2:&lt;/span&gt;    $status = $member-&amp;gt;availability_status;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none&quot;&gt;&lt;span id=&quot;lnum3&quot; style=&quot;color: #606060&quot;&gt;   3:&lt;/span&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #006080&quot;&gt;&quot;&amp;lt;div class=\&quot;poolstatusbar $status\&quot;&amp;gt;&quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none&quot;&gt;&lt;span id=&quot;lnum4&quot; style=&quot;color: #606060&quot;&gt;   4:&lt;/span&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #006080&quot;&gt;&quot;&amp;lt;b&amp;gt;$item-&amp;gt;address:$item-&amp;gt;port&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;&quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; text-align: left; border-bottom-style: none&quot;&gt;&lt;span id=&quot;lnum5&quot; style=&quot;color: #606060&quot;&gt;   5:&lt;/span&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;echo&lt;/span&gt; &lt;span style=&quot;color: #006080&quot;&gt;&quot;&amp;lt;/div&amp;gt;&quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: &#039;Courier New&#039;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none&quot;&gt;&lt;span id=&quot;lnum6&quot; style=&quot;color: #606060&quot;&gt;   6:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/LetYourENUMsDotheTalkingwithCSS_4D2D/image_4.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin-left: 0px; margin-right: 0px; border-right-width: 0px&quot; height=&quot;240&quot; alt=&quot;image&quot; src=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/LetYourENUMsDotheTalkingwithCSS_4D2D/image_thumb_1.png&quot; width=&quot;238&quot; align=&quot;right&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;The result is what you’d expect: each component is properly formatted based on its availability status. Much cleaner. Even using a &lt;em&gt;switch &lt;/em&gt;statement wouldn’t have cleaned up as nicely as directly mapping the enumerations to CSS classes. The resulting HTML is not very exciting but then I’m not a GUI design specialist and it just turns out that all the component statuses match up with the virtual server statuses at the moment. &lt;/p&gt;

&lt;p&gt;What this does is remove the need to code specifically for special formatting and style and lets me (and you) focus on meaty coding rather than on the more tedious formatting code. It’s obviously very easy to do this with enumerated values but any property whose values are constrained could be used in the same way to map directly to CSS classes for formatting. I chose enums because in general they’re (1) static, (2) have a very constrained set of values, and (3) used in just about every language there is, which makes this technique very portable. &lt;/p&gt;

&lt;p /&gt;

&lt;p&gt;Happy coding! &lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://twitter.com/lmacvittie&quot;&gt;&lt;img height=&quot;18&quot; alt=&quot;Follow me on Twitter&quot; src=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_twitt-twoo-icon.png&quot; width=&quot;18&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a title=&quot;Follow F5 Networks on Twitter&quot; href=&quot;http://tweepml.org/F5-Networks-Tweeple/&quot;&gt;&lt;img height=&quot;18&quot; src=&quot;http://tweepml.org/s/tweepml16.png&quot; width=&quot;18&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a title=&quot;Follow F5 DevCentral on Twitter&quot; href=&quot;http://tweepml.org/F5-DevCentral/&quot;&gt;&lt;img height=&quot;18&quot; src=&quot;http://tweepml.org/s/tweepml16.png&quot; width=&quot;18&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/Rss.aspx&quot;&gt;&lt;img src=&quot;http://devcentral.f5.com/Portals/0/images/Icons/icon_xml_18.gif&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.slideshare.net/lmacvittie&quot;&gt;&lt;img height=&quot;18&quot; alt=&quot;View Lori&#039;s profile on SlideShare&quot; src=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_slideshare.png&quot; width=&quot;18&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.linkedin.com/in/lmacvittie&quot;&gt;&lt;img src=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_linkedin_16.png&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.friendfeed.com/lmacvittie&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;18&quot; alt=&quot;friendfeed&quot; src=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/friendfeed_3.jpg&quot; width=&quot;18&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.facebook.com/lmacvittie&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;18&quot; alt=&quot;icon_facebook&quot; src=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/icon_facebook_4.png&quot; width=&quot;18&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;a title=&quot;Subscribe using any feed reader!&quot; href=&quot;http://www.addthis.com/feed.php?pub=lmacvittie&amp;amp;h1=http%3A%2F%2Fdevcentral.f5.com%2Fweblogs%2Fmacvittie%2FRss.aspx&amp;amp;t1=&quot;&gt;&lt;img height=&quot;18&quot; alt=&quot;AddThis Feed Button&quot; src=&quot;http://s9.addthis.com/button1-fd.gif&quot; width=&quot;125&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a title=&quot;Bookmark and Share&quot; onclick=&quot;window.open(&#039;http://www.addthis.com/bookmark.php?wt=nw&amp;amp;pub=lmacvittie&amp;amp;url=&#039;+encodeURIComponent(location.href)+&#039;&amp;amp;title=&#039;+encodeURIComponent(document.title), &#039;addthis&#039;, &#039;scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no,screenX=200,screenY=100,left=200,top=100&#039;); return false;&quot; href=&quot;http://www.addthis.com/bookmark.php&quot; target=&quot;_blank&quot;&gt;&lt;img height=&quot;18&quot; alt=&quot;Bookmark and Share&quot; src=&quot;http://s9.addthis.com/button1-share.gif&quot; width=&quot;125&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;script type=&quot;text/javascript&quot; src=&quot;http://track.mybloglog.com/js/jsserv.php?mblID=2008070914270355&quot;&gt;&lt;/script&gt;&lt;/p&gt;

&lt;p&gt;Related blogs &amp;amp; articles: &lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2009/12/09/xajax-sajax-web-applications-cloud-compuiting.aspx&quot;&gt;XAJAX Perfect Choice to Build Scalable Web Applications for Cloud Computing Environments&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2009/09/16/ajax-and-network-side-scripting.aspx&quot;&gt;AJAX and Network-Side Scripting&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2008/12/15/putting-the-network-back-in-social-networking.aspx&quot;&gt;Putting the network back in social networking&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2008/06/02/3323.aspx&quot;&gt;Using &quot;X-Forwarded-For&quot; in Apache or &lt;b&gt;PHP&lt;/b&gt;&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2008/05/09/3250.aspx&quot;&gt;iControl and &lt;b&gt;PHP&lt;/b&gt;: Updated&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2009/09/03/if-your-users-see-an-http-error-code-yoursquore-doing.aspx&quot;&gt;If Your Users See an HTTP Error Code You’re Doing It Wrong&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2009/07/21/i-can-has-ur-.htaccess-file.aspx&quot;&gt;I Can Has UR .htaccess File&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2009/07/08/automatically-removing-cookies.aspx&quot;&gt;Automatically Removing Cookies&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/23/clickjacking-protection-using-x-frame-options-available-for-firefox.aspx&quot;&gt;Clickjacking Protection Using X-FRAME-OPTIONS Available for Firefox&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;wlWriterEditableSmartContent&quot; id=&quot;scid:0767317B-992E-4b12-91E0-4F059A8CECA8:17e76233-0acd-410b-ac08-a2f48995b3f1&quot; style=&quot;padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px&quot;&gt;Technorati Tags: &lt;a href=&quot;http://technorati.com/tags/MacVittie&quot; rel=&quot;tag&quot;&gt;MacVittie&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/F5&quot; rel=&quot;tag&quot;&gt;F5&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/PHP&quot; rel=&quot;tag&quot;&gt;PHP&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/BIG-IP&quot; rel=&quot;tag&quot;&gt;BIG-IP&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/iControl&quot; rel=&quot;tag&quot;&gt;iControl&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/CSS&quot; rel=&quot;tag&quot;&gt;CSS&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/styles&quot; rel=&quot;tag&quot;&gt;styles&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/enumerators&quot; rel=&quot;tag&quot;&gt;enumerators&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/WSDL&quot; rel=&quot;tag&quot;&gt;WSDL&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Web+2.0&quot; rel=&quot;tag&quot;&gt;Web 2.0&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/GUI&quot; rel=&quot;tag&quot;&gt;GUI&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/HTML&quot; rel=&quot;tag&quot;&gt;HTML&lt;/a&gt;&lt;/div&gt;&lt;img src=&quot;http://devcentral.f5.com/weblogs/macvittie/aggbug/6234.aspx&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/f5/XOwx/~4/Gla7rgcObT0&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1220453&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Tue, 15 Dec 2009 07:15:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1220453</guid>
 <comments>http://ajax.sys-con.com/node/1220453#feedback</comments>
</item>
<item>
 <title>Actuate Extends Community Collaboration with BIRT Performance Scorecard 9</title>
 <link>http://ajax.sys-con.com/node/1219122</link>
 <description>Actuate Corporation has announced BIRT Performance Scorecard 9, the latest iteration of its Performance Management solution. BIRT Performance Scorecard 9 is a Rich Information Application (RIA) that fully integrates BIRT to bring the simplicity and collaboration of consumer internet applications to the Performance Management process. With Version 9 comes BIRT Scorecard Exchange, a pioneering business to business site that grants BIRT Performance Management practitioners no cost access to best practices, frameworks, prebuilt measurement criteria and community links. BIRT Performance Scorecard 9 offers customers a completely new user interface, flash-based dashboard charts and an expanding number of newly designed out-of-the-box BIRT reports.&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1219122&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Mon, 14 Dec 2009 11:00:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1219122</guid>
 <comments>http://ajax.sys-con.com/node/1219122#feedback</comments>
</item>
<item>
 <title>Mixing AJAX and Full Requests in JSF 2.0</title>
 <link>http://ajax.sys-con.com/node/1129619</link>
 <description>JSF 2.0 makes AJAX pretty easy - but it can&#039;t hide everything from you... It&#039;s tempting to just add a few AJAX tags into your page, and not worry too much about interactions - here&#039;s one example of a problem you may run into.&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1129619&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Thu, 10 Dec 2009 13:30:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1129619</guid>
 <comments>http://ajax.sys-con.com/node/1129619#feedback</comments>
</item>
<item>
 <title>Cloud Computing and Virtual Images</title>
 <link>http://ajax.sys-con.com/node/1211590</link>
 <description>A look at several different cloud computing solutions will reveal a technological enabler present in almost each one. The enabler I&#039;m talking about is the use of virtual images. I cannot think of many, if any, cloud computing solutions that provide software elements (i.e. more than just servers, storage, memory, etc.) that do not use virtual images in some form or fashion. Of course, one of the reasons virtual images form the backbone of many cloud solutions is obvious. Virtual images provide the benefits of server virtualization. We can activate many virtual images on the same physical machine, thus allowing us to achieve multi-tenancy (multiple operating systems and software stacks installed on the same physical machine). Besides driving higher hardware utilization rates, it also provides us the capability to run heterogeneous software environments on the same piece of hardware. This both enables and encourages the creation of a shared pool of compute resources which is a key characteristic of cloud computing environments.&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1211590&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Mon, 07 Dec 2009 13:00:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1211590</guid>
 <comments>http://ajax.sys-con.com/node/1211590#feedback</comments>
</item>
<item>
 <title>Social Networks for Rural India</title>
 <link>http://ajax.sys-con.com/node/1211377</link>
 <description>A few weeks back, I participated in the net.works case study competition of IIMA’s Confluence along with 3 of my classmates in SJMSOM, IIT Bombay. As a part of the competition, we were asked to prepare a report on what a social network with 500 million users in India would look like. To this end, [...]&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=abaditya.com&amp;blog=62550&amp;post=317&amp;subd=abaditya&amp;ref=&amp;feed=1&quot; /&gt;&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1211377&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Mon, 07 Dec 2009 09:45:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1211377</guid>
 <comments>http://ajax.sys-con.com/node/1211377#feedback</comments>
</item>
<item>
 <title>Will Your Business Survive the Communications Revolution?</title>
 <link>http://ajax.sys-con.com/node/1202365</link>
 <description>We stand at a transition point in business. As the global economy starts to work its way out of recession CEOs and management teams around the world are beginning to plan for growth. But they won’t do that by simply taking back into their businesses the bottom line costs they just spent 18 painful months getting rid of. The enlightened are looking for a new ways of working, how to unlock the people power in their organization in a secure and focused manner, to accelerate speed of decision making, reduce costs, and drive productivity. &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=john-savageau.com&amp;blog=5631482&amp;post=826&amp;subd=johnsavageau&amp;ref=&amp;feed=1&quot; /&gt;&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1202365&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Wed, 02 Dec 2009 12:15:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1202365</guid>
 <comments>http://ajax.sys-con.com/node/1202365#feedback</comments>
</item>
<item>
 <title>FCC Moving on “White Spaces” to  Make More Spectrum Usable</title>
 <link>http://ajax.sys-con.com/node/1208344</link>
 <description>Harold Feld has a great post on movement at the FCC to make more spectrum available. According to Harold, the FCC has requested proposals for databases to manage access to the &quot;white spaces&quot;  between the frequencies assigned to TV stations. Those frequencies were left unused because analog TV originally needed ...&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1208344&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Wed, 02 Dec 2009 09:39:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1208344</guid>
 <comments>http://ajax.sys-con.com/node/1208344#feedback</comments>
</item>
<item>
 <title>Twitter for Entrepreneurs</title>
 <link>http://ajax.sys-con.com/node/1204467</link>
 <description>I wrote an article for the Missouri Venture Forum’s monthly newsletter with this subject, mentioning some of the useful things that new business owners can do with Twitter. Given that many retailers are now calling this year the “Twitter Christmas” it is worth reading. You can download the entire PDF, my article is towards the end of the issue.     &lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1204467&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Mon, 30 Nov 2009 13:09:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1204467</guid>
 <comments>http://ajax.sys-con.com/node/1204467#feedback</comments>
</item>
<item>
 <title>GDS International: Global Warming Scam?</title>
 <link>http://ajax.sys-con.com/node/1202077</link>
 <description>Operates in over 170 countries and is one of the world’s leading providers of communications solutions and services. Richard Tarboton talks for MeettheBoss.TV on his role as Head of Energy &amp; Carbon for BT and what they are doing towards reducing carbon emissions.&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1202077&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Fri, 27 Nov 2009 14:45:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1202077</guid>
 <comments>http://ajax.sys-con.com/node/1202077#feedback</comments>
</item>
<item>
 <title>New ePortfolio, Skills and Competency Management Solutions</title>
 <link>http://ajax.sys-con.com/node/1202143</link>
 <description>Standards, tools and techniques for competency and skills based learning content personalisation are beginning to emerge – which is just as well because they can help organisations perform better in the increasingly competitive global labour marketplace and world economy. &lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1202143&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Fri, 27 Nov 2009 13:30:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1202143</guid>
 <comments>http://ajax.sys-con.com/node/1202143#feedback</comments>
</item>
<item>
 <title>Success with a Sitemap!</title>
 <link>http://ajax.sys-con.com/node/1200414</link>
 <description>&lt;br&gt;&lt;p&gt;Four or five years ago if you said to your web guru, &quot;let&#039;s make a&lt;a href=&quot;http://www.scholesmarketing.com/internet-marketing-essentials-website-optimization-ebook/&quot; mce_href=&quot;http://www.scholesmarketing.com/internet-marketing-essentials-website-optimization-ebook/&quot;&gt;&lt;img src=&quot;http://www.scholesmarketing.com/Portals/52640/images//sitemapblog.jpg&quot; mce_src=&quot;http://www.scholesmarketing.com/Portals/52640/images//sitemapblog.jpg&quot; alt=&quot;get my website found &quot; title=&quot;&quot; style=&quot;&quot; align=&quot;right&quot; border=&quot;0&quot; hspace=&quot;&quot; vspace=&quot;&quot;&gt;&lt;/a&gt; site map!&quot;  You&#039;d probably end up with a quaint-looking single web page that had a list of links and categories indexing your site.  You can still find these from time to time.  As it turns out, &lt;a href=&quot;http://www.apple.com/sitemap/&quot; mce_href=&quot;http://www.apple.com/sitemap/&quot;&gt;Apple still has one&lt;/a&gt;, go figure.  As you may recall, this was yet another alternative to a search engine, to help visitors find your content.  Not your grandfather&#039;s web code, the &quot;site map&quot; of the 21st century, however, is something a bit different but with the same goal of helping visitors find your content, albeit in a bit more &quot;high tech&quot; fashion.&lt;br&gt;&lt;/p&gt;&lt;h4&gt;It&#039;s XML not HTML&lt;/h4&gt;So we are talking &lt;a href=&quot;http://en.wikipedia.org/wiki/Sitemap#XML_Sitemaps&quot; mce_href=&quot;http://en.wikipedia.org/wiki/Sitemap#XML_Sitemaps&quot;&gt;XML sitemaps&lt;/a&gt;.   These sitemaps are &lt;i&gt;somewhat&lt;/i&gt; similar to the old-fashioned kind, they are a list of links and web pages, but in a special structured format, one that Yahoo! and Google know how to scoop right up.  It takes search engines time to spider through your regular site menu, and you&#039;ve just given them an easy shortcut, and they like you for that.   Also, these files include time stamps and change frequency, this meta data also tells search bots how frequently they should revisit your site to check for updates.  Pardon me while I sample a bit for you:&lt;br&gt;&lt;br&gt;&lt;img src=&quot;http://www.scholesmarketing.com/Portals/52640/images//code.gif&quot; mce_src=&quot;http://www.scholesmarketing.com/Portals/52640/images//code.gif&quot; alt=&quot;sample sitemap code&quot; title=&quot;&quot; style=&quot;&quot; align=&quot;left&quot; border=&quot;0&quot; hspace=&quot;&quot; vspace=&quot;&quot;&gt;&lt;br&gt;&lt;h4&gt;&lt;br&gt;&lt;br&gt;&lt;/h4&gt;&lt;p&gt;You are probably thinking, &quot;yikes, does my techie guru have to keep that stuff updated?&quot;  The answer is yes, but the good news is really that no one need keep up your entire sitemap &lt;i&gt;manually&lt;/i&gt;.  There are many tools out there to generate these for you.  Really -- don&#039;t ever even &lt;i&gt;think&lt;/i&gt; about coding it manually!&lt;/p&gt;&lt;h4&gt;&lt;/h4&gt;&lt;h4&gt;Creating Sitemaps&lt;/h4&gt;If you are using blog software like Typepad or Wordpress, it&#039;s typically a &lt;a href=&quot;http://everything.typepad.com/blog/2009/11/add-google-sitemap-typepad.html&quot; mce_href=&quot;http://everything.typepad.com/blog/2009/11/add-google-sitemap-typepad.html&quot;&gt;built-in feature&lt;/a&gt; or an easy &lt;a href=&quot;http://wordpress.org/extend/plugins/google-sitemap-generator/&quot; mce_href=&quot;http://wordpress.org/extend/plugins/google-sitemap-generator/&quot;&gt;plug-in&lt;/a&gt;.  Many hosted services like &lt;a href=&quot;http://www.scholesmarketing.com/hubspot-inbound-marketing-certified-partner/&quot; mce_href=&quot;http://www.scholesmarketing.com/hubspot-inbound-marketing-certified-partner/&quot;&gt;Hubspot&lt;/a&gt; provide this automatically, but if not, there is software that will generate the XML tags for you.  After which, just upload the &quot;sitemap.xml&quot; to the root of your site.  That&#039;s right, search engines are looking for &quot;sitemap.xml&quot; in the root of your web site.  So when you are done, you should see: &lt;a href=&quot;http://www.yourdomain.com/sitemap.xml&quot; title=&quot;www.yourdomain.com/sitemap.xml&quot;&gt;www.yourdomain.com/sitemap.xml&lt;/a&gt; which will yield a file that looks somewhat like the paste-in above.   Google has &lt;a href=&quot;http://code.google.com/p/sitemap-generators/wiki/SitemapGenerators&quot; mce_href=&quot;http://code.google.com/p/sitemap-generators/wiki/SitemapGenerators&quot;&gt;a fabulous listing of sitemap resources&lt;/a&gt;, something I&#039;ve returned to again and again.   If you do have access to a web guru, he or she may want to look at programmatically automating using any of those items list in the &quot;Server side programs&quot; grouping.  However, most running a small static site, without the benefit of automatic generation of sitemap.xml, may find any of the &quot;Downloadable Tools&quot; or &quot;Online Generators&quot; useful.  In the past, I&#039;ve had pretty good luck with &lt;a href=&quot;http://gsitecrawler.com/&quot; mce_href=&quot;http://gsitecrawler.com/&quot;&gt;GsiteCrawler&lt;/a&gt;, but don&#039;t take my word for it, try others and see what works for you.  Also don&#039;t forget:  if you are managing a static site, you&#039;ll want to submit your sitemap to Google via &quot;&lt;a href=&quot;https://www.google.com/accounts/ServiceLogin?service=sitemaps&amp;amp;passive=true&amp;amp;nui=1&amp;amp;continue=https%3A%2F%2Fwww.google.com%2Fwebmasters%2Ftools%2F&amp;amp;followup=https%3A%2F%2Fwww.google.com%2Fwebmasters%2Ftools%2F&amp;amp;hl=en&quot; mce_href=&quot;https://www.google.com/accounts/ServiceLogin?service=sitemaps&amp;amp;passive=true&amp;amp;nui=1&amp;amp;continue=https%3A%2F%2Fwww.google.com%2Fwebmasters%2Ftools%2F&amp;amp;followup=https%3A%2F%2Fwww.google.com%2Fwebmasters%2Ftools%2F&amp;amp;hl=en&quot;&gt;Web Master Tools&lt;/a&gt;,&quot; a service that is a MUST for marketing and web professionals alike.&lt;br&gt; &lt;br&gt;&lt;h4&gt;Sitemaps and SEO&lt;/h4&gt;It can take many days for a search engine to locate all the pages in a large site.  Especially if your site employs Flash or fancy javascript drop-down menus.  By creating a sitemap you can do quite a lot to address this challenge.  But, having the sitemap in hand is also a chance to analyze your site in terms of Search Engine Optimization and your &lt;a href=&quot;http://www.google.com/sktool/#&quot; mce_href=&quot;http://www.google.com/sktool/#&quot;&gt;marketing keywords&lt;/a&gt;.  So, once your site map has been generated, take a good look at it.  Do you see any of your keywords as part of the URL&#039;s?  Your marketing keywords should be part of your web link schema, and if not you are missing an opportunity.  Think of it this way, if you&#039;ve never seen that web page before, does the URL at least give a &lt;i&gt;hint&lt;/i&gt; of what the web page is about?  So the quick lesson here is that site maps should be presenting the search engine with your most important marketing keywords, as they will also contribute to your ranking and to the goal of &lt;a href=&quot;http://www.scholesmarketing.com/internet-marketing-essentials-website-optimization-ebook/&quot; mce_href=&quot;http://www.scholesmarketing.com/internet-marketing-essentials-website-optimization-ebook/&quot;&gt;helping visitors find your content&lt;/a&gt;. &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/TheScholesKnowsMarketingBlog/~4/SEB3yY9daUo&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1200414&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Wed, 25 Nov 2009 15:45:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1200414</guid>
 <comments>http://ajax.sys-con.com/node/1200414#feedback</comments>
</item>
<item>
 <title>How To Make LinkedIn Even Better</title>
 <link>http://ajax.sys-con.com/node/1200639</link>
 <description>I like LinkedIn. I am spending more of my time using it to promote myself, to connect to people that I know, and to build up value for my community and myself. With the help of the local chamber of commerce, I now manage a group called the St. Louis Job Angels, where we have listed more than 80 different jobs over the past couple of months and more than 500 job seekers and recruiters have signed up to share tips and support each other’s efforts. So as a long-time frequent user, I offer some advice of where they should be going in 2010 – not that anyone will listen to my humble suggestions.&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1200639&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Wed, 25 Nov 2009 11:00:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1200639</guid>
 <comments>http://ajax.sys-con.com/node/1200639#feedback</comments>
</item>
<item>
 <title>WILS: Client IP or Not Client IP, SNAT Is the Question</title>
 <link>http://ajax.sys-con.com/node/1200549</link>
 <description>&lt;p&gt;&lt;em&gt;Ever wonder why requests coming through proxy-based solutions, particularly load balancers, end up with an IP address other than the &lt;/em&gt;real &lt;em&gt;client? It’s not just a network administrator having fun at your expense. SNAT is the question – and the answer. &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;SNAT is the common abbreviation for Secure NAT, so-called because the configured address will not accept inbound connections and is, therefore, supposed to be secure. It is also sometimes (more accurately in the opinion of many) referred to as Source NAT, however, because it acts on source IP address instead of the destination IP address as is the case for NAT usage. &lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/WILSNATvsSNAT_93CD/snat-lb_2.png&quot;&gt;&lt;img title=&quot;snat-lb&quot; style=&quot;border-right: 0px; border-top: 0px; display: inline; margin: 0px 10px 0px 0px; border-left: 0px; border-bottom: 0px&quot; height=&quot;357&quot; alt=&quot;snat-lb&quot; src=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/WILSNATvsSNAT_93CD/snat-lb_thumb.png&quot; width=&quot;498&quot; align=&quot;left&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;In &lt;a title=&quot;&quot; href=&quot;http://www.f5.com/glossary/load-balancing.html&quot; rel=&quot;&quot;&gt;load balancing&lt;/a&gt; scenarios SNAT is used to change the source IP of incoming requests to that of the &lt;a title=&quot;&quot; href=&quot;http://www.f5.com/glossary/load-balancer.html&quot; rel=&quot;&quot;&gt;Load balancer&lt;/a&gt;. Now you’re probably thinking this is the  reason we end up having to jump through hoops like &lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2008/06/02/3323.aspx&quot;&gt;X-FORWARDED-FOR&lt;/a&gt; to get the &lt;em&gt;real &lt;/em&gt;client IP address and you’d be right. But the use of SNAT for this purpose isn’t intentionally malevolent. Really. In most cases it’s used to force the return path for responses &lt;em&gt;through&lt;/em&gt; the load balancer, which is important when network routing from the server (virtual or physical) to the client would bypass the load balancer. This is often true because servers need a way to access the Internet for various reasons including automated updates and when the application hosted on the server needs to call out to a third-party application, such as integrating with a Web 2.0 site via an API call. In these situations it is desirable for the server to bypass the load balancer because the traffic is initiated by the server, and is not usually being managed by the load balancer. &lt;/p&gt;  &lt;p&gt;In the case of a request coming from a client the response needs to return through the load balancer because incoming requests are usually destination NAT’d in most load balancing configurations, so the traffic has to traverse the same path, in reverse, in order to undo &lt;em&gt;that &lt;/em&gt;translation and ensure the response is delivered to the client. &lt;/p&gt;  &lt;p&gt;Most land balancing solutions offer the ability to specify, on a per-IP address basis, the SNAT mappings as well as providing an “auto map” feature which uses the IP addresses assigned to load balancer (often called “self-ip” addresses) to perform the SNAT mappings. Advanced load balancers have additional methods of assigning SNAT mappings including assigning a “pool” of addresses to a virtual (network) server to be used automatically as well as intelligent SNAT capabilities that allow the use of network-side scripting to manipulate on a case-by-case basis the SNAT mappings. Most configurations can comfortably use the auto map feature to manage SNAT, by far the least complex of the available configurations. &lt;/p&gt;  &lt;p style=&quot;text-transform: uppercase&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;strong&gt;WILS&lt;/strong&gt;: &lt;em&gt;Write It Like Seth&lt;/em&gt;. &lt;a href=&quot;http://sethgodin.typepad.com/&quot;&gt;Seth Godin&lt;/a&gt; always gets his point across with brevity and wit. WILS is an ATTEMPT TO BE concise about application delivery TOPICS AND just get straight to the point. NO DILLY DALLYING AROUND. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://twitter.com/lmacvittie&quot;&gt;&lt;img height=&quot;18&quot; alt=&quot;Follow me on Twitter&quot; src=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_twitt-twoo-icon.png&quot; width=&quot;18&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a title=&quot;Follow F5 Networks on Twitter&quot; href=&quot;http://tweepml.org/F5-Networks-Tweeple/&quot;&gt;&lt;img height=&quot;18&quot; src=&quot;http://tweepml.org/s/tweepml16.png&quot; width=&quot;18&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a title=&quot;Follow F5 DevCentral on Twitter&quot; href=&quot;http://tweepml.org/F5-DevCentral/&quot;&gt;&lt;img height=&quot;18&quot; src=&quot;http://tweepml.org/s/tweepml16.png&quot; width=&quot;18&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/Rss.aspx&quot;&gt;&lt;img src=&quot;http://devcentral.f5.com/Portals/0/images/Icons/icon_xml_18.gif&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.slideshare.net/lmacvittie&quot;&gt;&lt;img height=&quot;18&quot; alt=&quot;View Lori&#039;s profile on SlideShare&quot; src=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_slideshare.png&quot; width=&quot;18&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.linkedin.com/in/lmacvittie&quot;&gt;&lt;img src=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_linkedin_16.png&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.friendfeed.com/lmacvittie&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;18&quot; alt=&quot;friendfeed&quot; src=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/friendfeed_3.jpg&quot; width=&quot;18&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.facebook.com/lmacvittie&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;18&quot; alt=&quot;icon_facebook&quot; src=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/icon_facebook_4.png&quot; width=&quot;18&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a title=&quot;Subscribe using any feed reader!&quot; href=&quot;http://www.addthis.com/feed.php?pub=lmacvittie&amp;amp;h1=http%3A%2F%2Fdevcentral.f5.com%2Fweblogs%2Fmacvittie%2FRss.aspx&amp;amp;t1=&quot;&gt;&lt;img height=&quot;18&quot; alt=&quot;AddThis Feed Button&quot; src=&quot;http://s9.addthis.com/button1-fd.gif&quot; width=&quot;125&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a title=&quot;Bookmark and Share&quot; onclick=&quot;window.open(&#039;http://www.addthis.com/bookmark.php?wt=nw&amp;amp;pub=lmacvittie&amp;amp;url=&#039;+encodeURIComponent(location.href)+&#039;&amp;amp;title=&#039;+encodeURIComponent(document.title), &#039;addthis&#039;, &#039;scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no,screenX=200,screenY=100,left=200,top=100&#039;); return false;&quot; href=&quot;http://www.addthis.com/bookmark.php&quot; target=&quot;_blank&quot;&gt;&lt;img height=&quot;18&quot; alt=&quot;Bookmark and Share&quot; src=&quot;http://s9.addthis.com/button1-share.gif&quot; width=&quot;125&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;script type=&quot;text/javascript&quot; src=&quot;http://track.mybloglog.com/js/jsserv.php?mblID=2008070914270355&quot;&gt;&lt;/script&gt;&lt;/p&gt;  &lt;p&gt;Related blogs &amp;amp; articles: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2008/06/02/3323.aspx&quot;&gt;Using &quot;X-Forwarded-For&quot; in Apache or PHP&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://www.thef5guru.com/ltm/snat-translation-overflow/&quot;&gt;SNAT Translation Overflow&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2008/08/06/3519.aspx&quot;&gt;Working around client-side limitations on custom HTTP headers&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2009/10/22/wils-why-does-load-balancing-improve-application-performance.aspx&quot;&gt;WILS: Why Does Load Balancing Improve Application Performance?&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2009/09/23/concise-guide-to-load-balancing.aspx&quot;&gt;WILS: The Concise Guide to *-Load Balancing&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2009/09/15/network-application-load-balancing.aspx&quot;&gt;WILS: Network Load Balancing versus Application Load Balancing&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/category/4335.aspx&quot;&gt;All WILS Topics on DevCentral&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2009/09/17/load-balancers-are-dead-or-are-they.aspx&quot;&gt;If Load Balancers Are Dead Why Do We Keep Talking About Them?&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;div class=&quot;wlWriterEditableSmartContent&quot; id=&quot;scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e4425faf-34c5-4d4a-9a26-141d3211e6c9&quot; style=&quot;padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px&quot;&gt;Technorati Tags: &lt;a href=&quot;http://technorati.com/tags/MacVittie&quot; rel=&quot;tag&quot;&gt;MacVittie&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/F5&quot; rel=&quot;tag&quot;&gt;F5&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/application+delivery&quot; rel=&quot;tag&quot;&gt;application delivery&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/load+balancing&quot; rel=&quot;tag&quot;&gt;load balancing&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/SNAT&quot; rel=&quot;tag&quot;&gt;SNAT&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/NAT&quot; rel=&quot;tag&quot;&gt;NAT&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/load+balancer&quot; rel=&quot;tag&quot;&gt;load balancer&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/X-FORWARDED-FOR&quot; rel=&quot;tag&quot;&gt;X-FORWARDED-FOR&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/IP&quot; rel=&quot;tag&quot;&gt;IP&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/routing&quot; rel=&quot;tag&quot;&gt;routing&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/WILS&quot; rel=&quot;tag&quot;&gt;WILS&lt;/a&gt;&lt;/div&gt;&lt;img src=&quot;http://devcentral.f5.com/weblogs/macvittie/aggbug/6224.aspx&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/f5/XOwx/~4/50yNbhe6WtY&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1200549&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Wed, 25 Nov 2009 10:15:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1200549</guid>
 <comments>http://ajax.sys-con.com/node/1200549#feedback</comments>
</item>
<item>
 <title>The Application Delivery Spell Book</title>
 <link>http://ajax.sys-con.com/node/1198798</link>
 <description>&lt;p&gt;&lt;em&gt;&lt;font color=&quot;#000080&quot; /&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;The long, lost application delivery spell compendium has been found! Its once hidden, arcane knowledge is slowly being translated for the good of all web applications. Luckily, you don’t have to be Elminster or Gandalf or &amp;lt;insert powerful wizard you know here&amp;gt; to cast &lt;/em&gt;this &lt;em&gt;spell over your infrastructure&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Detect Invisible (Application) Stalkers &lt;a href=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/ItIsHardToDefendWhenYouDontKnowYoureBein_3562/image_2.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin-left: 0px; margin-right: 0px; border-right-width: 0px&quot; height=&quot;271&quot; alt=&quot;image&quot; src=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/ItIsHardToDefendWhenYouDontKnowYoureBein_3562/image_thumb.png&quot; width=&quot;210&quot; align=&quot;right&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;   &lt;strong&gt;School of Magic:&lt;/strong&gt; Abjuration (Protective Spells) &lt;/p&gt;  &lt;p&gt;   &lt;strong&gt;Components&lt;/strong&gt;: Somatic (requires gestures), Material (requires physical component) &lt;/p&gt;  &lt;p&gt;   &lt;strong&gt;Casting Time: &lt;/strong&gt;special &lt;/p&gt;  &lt;p&gt;   &lt;strong&gt;Range: &lt;/strong&gt;Layers 3-7&lt;/p&gt;  &lt;p&gt;   &lt;strong&gt;Area: &lt;/strong&gt;global &lt;/p&gt;  &lt;p&gt;   &lt;strong&gt;Duration: &lt;/strong&gt;Until discharged &lt;/p&gt;  &lt;p&gt;   &lt;strong&gt;Saving Throw: &lt;/strong&gt;Special&lt;/p&gt;  &lt;p&gt;   &lt;strong&gt;Spell Resistance: &lt;/strong&gt;No&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/ItIsHardToDefendWhenYouDontKnowYoureBein_3562/invisiblestalker_2.jpg&quot;&gt;&lt;img title=&quot;invisiblestalker&quot; style=&quot;border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 10px 0px 0px; border-right-width: 0px&quot; height=&quot;161&quot; alt=&quot;invisiblestalker&quot; src=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/ItIsHardToDefendWhenYouDontKnowYoureBein_3562/invisiblestalker_thumb.jpg&quot; width=&quot;161&quot; align=&quot;left&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; Invisible (application) stalkers are creatures native to the Internet. They sometimes serve miscreants, corporate spies, and script kiddies, who summon them to perform attacks against specific targets. A summoned invisible stalker undertakes the form of a legitimate application request, pretending to be a real user, and will tirelessly undertake whatever task the caster commands, even if the task sends packets hundreds or thousands of miles away. The creature follows a command until the task is completed and obeys only the caster. &lt;/p&gt;    &lt;p&gt;Invisible (application) stalkers operate only at layer 7 and eschew the use of forms commonly recognized as being of evil intent. Thus an &lt;em&gt;invoke firewall log &lt;/em&gt;spell will show only multiple requests over time from similar agents, and &lt;em&gt;intrusion detection &lt;/em&gt;spells have no effect on the creatures. Only a &lt;em&gt;detect invisible (application) stalker &lt;/em&gt;spell can recognize and subsequently dismiss these agents of evil. &lt;/p&gt;    &lt;p&gt;This spell inserts into the path of the invisible (application) stalker a wall which cannot be avoided, blocking them or reporting to the caster their proximity, as determined by the caster. The material component for this spell is a &lt;a href=&quot;http://www.f5.com/products/big-ip/product-modules/application-security-manager.html&quot;&gt;web application firewall&lt;/a&gt;, which must be placed between the invisible (application) stalker and its intended target. The somatic component requires the caster to complete a series of mouse clicks and keyboard strokes that deploy an application security policy including the ability to prevent &lt;a href=&quot;http://en.wikipedia.org/wiki/Web_scraping&quot;&gt;web scraping&lt;/a&gt;. The casting time for this spell varies based on the complexity of the existing environment, and how many victims are being targeted by the invisible (application) stalkers. &lt;/p&gt;    &lt;p&gt;Once completed, the spell will last until the caster discharges it by disabling the policy created by the somatic gestures. &lt;/p&gt;    &lt;p&gt;The invisible (application) stalker may attempt a saving throw (Will) to realize it is being blocked. If it makes the save, it may attempt to figure out how the wall is blocking it. It must then make a second Will save or discorporate immediately. If the spell is cast as a reporting only mechanism, there is no saving throw allowed and the invisible (application) stalker will never be aware it has been detected. &lt;/p&gt; &lt;/blockquote&gt;  &lt;hr width=&quot;100%&quot; color=&quot;#680000&quot; noshade=&quot;noshade&quot; /&gt;   &lt;div style=&quot;background: #ebd3d3; width: 100%&quot;&gt;&lt;strong&gt;THE FIRST STEP IN ANY SOLUTION IS ALWAYS RECOGNIZING THERE IS A PROBLEM &lt;/strong&gt;&lt;/div&gt;  &lt;hr width=&quot;100%&quot; color=&quot;#680000&quot; noshade=&quot;noshade&quot; /&gt;There are a few attacks today that just can’t be detected by applications. &lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2008/07/08/3429.aspx&quot;&gt;Layer 7 DoS&lt;/a&gt; can’t be detected from within an application because the code that executes does so in the context of a &lt;em&gt;single request&lt;/em&gt; and a DoS implies many requests from many sources. The only way for a developer to detect this attack is to be able to view the single request that is typical of an application in the context of &lt;em&gt;all &lt;/em&gt;requests across &lt;em&gt;all &lt;/em&gt;instances of the application – even across machines – and that’s simply not possible from within the application.   &lt;p&gt;Similarly, web scraping attacks are nearly impossible for a developer to detect because there is nothing in the request that would indicate anything is out of the ordinary. Nothing. No special code, no special characters, no odd manifestations within the headers or network data. In order for the developer to detect such an attack s/he would need to be able to determine whether the client is manned by a human being or is a script/bot. And no, using User-Agent headers isn’t going to work on this one because miscreants have figured out that too many security devices are able to block their attacks based on that value and thus have learned to circumvent it by scripting real browsers or manipulating the HTTP headers such that their bots/scripts appear to be valid user-driven browsers. &lt;/p&gt;  &lt;p&gt;But that’s what a &lt;a href=&quot;http://www.f5.com/products/big-ip/product-modules/application-security-manager.html&quot;&gt;web application firewall (WAF)&lt;/a&gt; was designed to do: to watch, to evaluate requests in context, across all instances and all requests. It has the visibility, it has the capability, and it can detect attacks that are not easily if at all detected from within the application. Even if the WAF isn’t blocking the attacks, it can at least tell you they are happening, which is something the developers need to know if they’re going to put in place solutions to prevent them. &lt;/p&gt;  &lt;p&gt;&lt;em&gt;“Security manager, ‘J.F. Rice,’ whose name and employer have been disguised for obvious reasons” &lt;/em&gt;explains his need to “see” inside connections and understand what is happening in his environment. &lt;/p&gt; &lt;fieldset style=&quot;padding-right: 5px; padding-left: 5px; padding-bottom: 5px; padding-top: 5px&quot;&gt;&lt;legend&gt;&lt;font color=&quot;#000080&quot;&gt;&lt;a href=&quot;http://news.idg.no/cw/art.cfm?id=08DFD829-1A64-67EA-E4996B477BBCB6D3&quot;&gt;We’ve been blind to attacks on our Web sites&lt;/a&gt;&lt;/font&gt;&lt;/legend&gt;    &lt;p&gt;&lt;font color=&quot;#000080&quot;&gt;I installed a Web application firewall in my company&#039;s DMZ to tell us about active attacks that may not be identified by our other devices. I set the device up in monitor mode, though it can be set up to block attacks, because my goal was just to see what was going on. I wanted to know more about what&#039;s inside the connections to those Web servers.&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color=&quot;#000080&quot;&gt;What I discovered is that our Web sites are being &quot;scraped&quot; by other companies -- our competitors! Some of the information on our sites is valuable intellectual property. It is provided online, in a restricted manner (passwords and such), to our customers. Such restrictions aren&#039;t very difficult to overcome for the Web crawlers that our competitors are using, because webmasters usually don&#039;t know much about security. They make a token attempt to put passwords and restrictions on sensitive files, but they often don&#039;t do a very good job.&lt;/font&gt;&lt;/p&gt; &lt;/fieldset&gt;   &lt;p&gt;&lt;a href=&quot;http://www.f5.com/solutions/security/&quot;&gt;Web application security&lt;/a&gt; requires visibility as well as the expected defensive capabilities. A &lt;a href=&quot;http://www.f5.com/products/big-ip/product-modules/application-security-manager.html&quot;&gt;web application firewall&lt;/a&gt; can provide both capabilities even though you may not leverage both at the same time or at all. Using a WAF as a mechanism to determine what kind of attacks are being directed at your web applications is just as valuable a proposition as enabling its preventative capabilities. &lt;/p&gt;  &lt;p&gt;Either way, knowing is the first step to moving forward on a strategy to address it. &lt;/p&gt;  &lt;p&gt; &lt;a href=&quot;http://twitter.com/lmacvittie&quot;&gt;&lt;img height=&quot;18&quot; alt=&quot;Follow me on Twitter&quot; src=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_twitt-twoo-icon.png&quot; width=&quot;18&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a title=&quot;Follow F5 Networks on Twitter&quot; href=&quot;http://tweepml.org/F5-Networks-Tweeple/&quot;&gt;&lt;img height=&quot;18&quot; src=&quot;http://tweepml.org/s/tweepml16.png&quot; width=&quot;18&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a title=&quot;Follow F5 DevCentral on Twitter&quot; href=&quot;http://tweepml.org/F5-DevCentral/&quot;&gt;&lt;img height=&quot;18&quot; src=&quot;http://tweepml.org/s/tweepml16.png&quot; width=&quot;18&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/Rss.aspx&quot;&gt;&lt;img src=&quot;http://devcentral.f5.com/Portals/0/images/Icons/icon_xml_18.gif&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.slideshare.net/lmacvittie&quot;&gt;&lt;img height=&quot;18&quot; alt=&quot;View Lori&#039;s profile on SlideShare&quot; src=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_slideshare.png&quot; width=&quot;18&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.linkedin.com/in/lmacvittie&quot;&gt;&lt;img src=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_linkedin_16.png&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.friendfeed.com/lmacvittie&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;16&quot; alt=&quot;friendfeed&quot; src=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/friendfeed_3.jpg&quot; width=&quot;16&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/icon_facebook_2.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;16&quot; alt=&quot;icon_facebook&quot; src=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/icon_facebook_4.png&quot; width=&quot;16&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a title=&quot;Subscribe using any feed reader!&quot; href=&quot;http://www.addthis.com/feed.php?pub=lmacvittie&amp;amp;h1=http%3A%2F%2Fdevcentral.f5.com%2Fweblogs%2Fmacvittie%2FRss.aspx&amp;amp;t1=&quot;&gt;&lt;img height=&quot;18&quot; alt=&quot;AddThis Feed Button&quot; src=&quot;http://s9.addthis.com/button1-fd.gif&quot; width=&quot;125&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a title=&quot;Bookmark and Share&quot; onclick=&quot;window.open(&#039;http://www.addthis.com/bookmark.php?wt=nw&amp;amp;pub=lmacvittie&amp;amp;url=&#039;+encodeURIComponent(location.href)+&#039;&amp;amp;title=&#039;+encodeURIComponent(document.title), &#039;addthis&#039;, &#039;scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no,screenX=200,screenY=100,left=200,top=100&#039;); return false;&quot; href=&quot;http://www.addthis.com/bookmark.php&quot; target=&quot;_blank&quot;&gt;&lt;img height=&quot;18&quot; alt=&quot;Bookmark and Share&quot; src=&quot;http://s9.addthis.com/button1-share.gif&quot; width=&quot;125&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;script type=&quot;text/javascript&quot; src=&quot;http://track.mybloglog.com/js/jsserv.php?mblID=2008070914270355&quot;&gt;&lt;/script&gt;&lt;/p&gt;  &lt;p&gt;Related blogs &amp;amp; articles: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/f5news/archive/2009/11/20/innovative-web-protection-and-compliance.aspx&quot;&gt;Innovative Web Protection and Compliance&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://www.slideshare.net/DSorensenCPR/f5-offers-advanced-web-security-with-bigip-v101&quot;&gt;BIG-IP v10.1 Security &lt;/a&gt; [Slideshare Presentation] &lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2009/10/01/the-gazebo-on-your-web-site.aspx&quot;&gt;Excuse Me But Is That a Gazebo On Your Site?!&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2009/09/28/web-application-security-at-the-edge-is-more-efficient-than.aspx&quot;&gt;Web Application Security at the Edge is More Efficient Than In the Application&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2009/07/21/i-can-has-ur-.htaccess-file.aspx&quot;&gt;I Can Has UR .htaccess File&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2009/07/08/automatically-removing-cookies.aspx&quot;&gt;Automatically Removing Cookies&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/23/clickjacking-protection-using-x-frame-options-available-for-firefox.aspx&quot;&gt;Clickjacking Protection Using X-FRAME-OPTIONS Available for Firefox&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2009/01/05/stop-brute-force-listing-of-http-options-with-network-side-scripting.aspx&quot;&gt;Stop brute force listing of HTTP OPTIONS with network-side scripting&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2009/04/23/jedi-mind-tricks-http-request-smuggling.aspx&quot;&gt;Jedi Mind Tricks: HTTP Request Smuggling&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2009/01/15/i-am-in-your-http-headers-attacking-your-application.aspx&quot;&gt;I am in your HTTP headers, attacking your application&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;div class=&quot;wlWriterEditableSmartContent&quot; id=&quot;scid:0767317B-992E-4b12-91E0-4F059A8CECA8:38d5e35c-78cc-47bd-be06-c8e9ff41e36f&quot; style=&quot;padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px&quot;&gt;Technorati Tags: &lt;a href=&quot;http://technorati.com/tags/MacVittie&quot; rel=&quot;tag&quot;&gt;MacVittie&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/F5&quot; rel=&quot;tag&quot;&gt;F5&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/web+application+security&quot; rel=&quot;tag&quot;&gt;web application security&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/security&quot; rel=&quot;tag&quot;&gt;security&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/web+2.0&quot; rel=&quot;tag&quot;&gt;web 2.0&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/web+scraping&quot; rel=&quot;tag&quot;&gt;web scraping&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/ASM&quot; rel=&quot;tag&quot;&gt;ASM&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/web+application+firewall&quot; rel=&quot;tag&quot;&gt;web application firewall&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/WAF&quot; rel=&quot;tag&quot;&gt;WAF&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/D%26D&quot; rel=&quot;tag&quot;&gt;D&amp;amp;D&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/ADSB&quot; rel=&quot;tag&quot;&gt;ADSB&lt;/a&gt;&lt;/div&gt;&lt;img src=&quot;http://devcentral.f5.com/weblogs/macvittie/aggbug/6222.aspx&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/f5/XOwx/~4/lxUJyY7D-YI&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1198798&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Tue, 24 Nov 2009 12:30:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1198798</guid>
 <comments>http://ajax.sys-con.com/node/1198798#feedback</comments>
</item>
<item>
 <title>SEO Tips from a Guy Who Doesn’t Know SEO</title>
 <link>http://ajax.sys-con.com/node/1199084</link>
 <description>Aside from not blogging recently, I have been spending alot of time speaking with folks in the online marketing space as I work on building the go-to-market strategy and machinery for VMTurbo.  One area which I knew little about when I started having these discussions (although now I do know a little bit [...]&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1199084&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Tue, 24 Nov 2009 11:00:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1199084</guid>
 <comments>http://ajax.sys-con.com/node/1199084#feedback</comments>
</item>
<item>
 <title>Personal Branding Mistakes Gen Y Frequently Makes</title>
 <link>http://ajax.sys-con.com/node/1200417</link>
 <description>Having a strong, consistent personal brand will help you land an entry-level job and build the foundation for your career. Gen Y has mastered the cheap and effective Internet medium to network with peers and share ideas through social networking platforms such as Facebook and blogs. But when it comes time to search for a job, personal branding becomes much more important and mistakes can be costly. The most obvious mistake Gen Y makes is a lack of professionalism on their social networking profiles. It is no secret that employers check candidates’ social networking profiles and are apt to make decisions based on what they find. Inappropriate photographs and conversations are the most commonly cited blunders Gen Yers make that hurt their personal brands.&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1200417&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Tue, 24 Nov 2009 09:35:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1200417</guid>
 <comments>http://ajax.sys-con.com/node/1200417#feedback</comments>
</item>
<item>
 <title>Performance Analysis of Dynamic JavaScript Menus</title>
 <link>http://ajax.sys-con.com/node/1197673</link>
 <description>In my previous article I talked about the impact of jQuery Selectors on a page that I analyzed. The page took 4.8 seconds in the onLoad event handler. 2 seconds were mainly caused by the selectors as described in the blog. The other 2.8 seconds were caused by a dynamic JavaScript menu – in that particular case it was the superfish jQuery plugin. A closer analysis showed why it takes so long and this also got me to do some research on these menus. &lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1197673&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Mon, 23 Nov 2009 13:00:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1197673</guid>
 <comments>http://ajax.sys-con.com/node/1197673#feedback</comments>
</item>
<item>
 <title>Visual WebGui to Reveal Cloud Application Platform</title>
 <link>http://ajax.sys-con.com/node/1190983</link>
 <description>Gizmox, the developer of  Visual WebGui, today announced that it will reveal  its  application platform atop Windows Azure and its development framework,  VWG platforms offers a push-button .NET desktop legacy application migration path to Windows Azure. With VWG enterprises will be able to migrate to Windows Azure, by reusing their existing Windows software code on Windows Azure without re-write or re-engineering. &lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1190983&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Wed, 18 Nov 2009 13:15:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1190983</guid>
 <comments>http://ajax.sys-con.com/node/1190983#feedback</comments>
</item>
<item>
 <title>Microsoft to Open Source the .NET Micro Framework</title>
 <link>http://ajax.sys-con.com/node/1191765</link>
 <description>Today, at the Microsoft Professional Developer Conference (PDC) here Los Angeles, Microsoft announced not only the release of version 4.0 of the.NET Micro Framework, but also that they are open sourcing the product and making it available under the Apache 2.0 license, which is already being used by the community within the embedded space.
The .NET Micro Framework, [...]


Related posts:&lt;ul&gt;&lt;li&gt;&lt;a href=&#039;http://www.azurejournal.com/2008/10/net-micro-framework-for-embedded-developers/&#039; rel=&#039;bookmark&#039; title=&#039;Permanent Link: .NET Micro Framework for Embedded Developers&#039;&gt;.NET Micro Framework for Embedded Developers&lt;/a&gt; &lt;small&gt;Today at the Embedded Systems Conference Boston, Microsoft Corp. announced...&lt;/small&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&#039;http://www.azurejournal.com/2009/01/microsoft-web-sandbox-goes-open-source/&#039; rel=&#039;bookmark&#039; title=&#039;Permanent Link: Microsoft Web Sandbox Goes Open Source&#039;&gt;Microsoft Web Sandbox Goes Open Source&lt;/a&gt; &lt;small&gt;We talked before about Microsoft&amp;#8217;s web sandbox here. Web Sandbox is...&lt;/small&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&#039;http://www.azurejournal.com/2009/01/open-source-clouds/&#039; rel=&#039;bookmark&#039; title=&#039;Permanent Link: Open-Source Clouds&#039;&gt;Open-Source Clouds&lt;/a&gt; &lt;small&gt; Joyent Inc. today announced the signing of an agreement to acquire...&lt;/small&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1191765&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Wed, 18 Nov 2009 12:45:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1191765</guid>
 <comments>http://ajax.sys-con.com/node/1191765#feedback</comments>
</item>
<item>
 <title>Google SPDY Protocol Would Require Mass Change in Infrastructure</title>
 <link>http://ajax.sys-con.com/node/1191641</link>
 <description>&lt;p&gt;&lt;em&gt;Google’s desire to speed up the web via a new protocol is laudable, but the SPDY protocol would require massive changes across networks to support&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/e4ce6cd5d41f_63B8/google-logo_2.jpg&quot;&gt;&lt;img title=&quot;google-logo&quot; style=&quot;border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 20px 0px 0px; border-right-width: 0px&quot; height=&quot;54&quot; alt=&quot;google-logo&quot; src=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/e4ce6cd5d41f_63B8/google-logo_thumb.jpg&quot; width=&quot;134&quot; align=&quot;left&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://www.arstechnica.com&quot;&gt;ArsTechnica&lt;/a&gt; had an interesting article on one of &lt;a href=&quot;http://www.google.com&quot;&gt;Google’s&lt;/a&gt; latest projects, &lt;a href=&quot;http://arstechnica.com/web/news/2009/11/spdy-google-wants-to-speed-up-the-web-by-ditching-http.ars&quot;&gt;a new web protocol designed to replace HTTP called SPDY&lt;/a&gt;. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/e4ce6cd5d41f_63B8/blockquote_2.gif&quot;&gt;&lt;img title=&quot;blockquote&quot; style=&quot;border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin-left: 0px; margin-right: 0px; border-right-width: 0px&quot; height=&quot;28&quot; alt=&quot;blockquote&quot; src=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/e4ce6cd5d41f_63B8/blockquote_thumb.gif&quot; width=&quot;46&quot; align=&quot;left&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; SPDY uses a single SSL-encrypted session between a browser and a client, and then compresses all the request/response overhead. The requests, responses, and data are all put into frames that are multiplexed over the one connection. This makes it possible to send a higher-priority small file without waiting for the transfer of a large file that&#039;s already in progress to terminate. Compressing the requests is helpful in typical ADSL/cable setups, where uplink speed is limited. For good measure, unnecessary and duplicated headers in requests and responses are done away with. SPDY also includes real server push and a &quot;server hint&quot; feature.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Having recently emerged from a trip into the world of service-providers and its associated protocols, the description of SPDY immediately brought to mind other asynchronous, message-oriented protocols such as SIP and DIAMETER. It therefore made me seriously consider the kind of massive changes that would be required to support such a protocol across all data center components: security, &lt;a title=&quot;&quot; href=&quot;http://www.f5.com/glossary/load-balancing.html&quot; rel=&quot;&quot;&gt;load balancing&lt;/a&gt;, acceleration, web servers, application servers, caches. Basically any network intermediary based on the premise of a strict request-reply, synchronous behavior would likely need radical changes to its core protocol handling systems. &lt;/p&gt;  &lt;p /&gt;  &lt;hr style=&quot;color: #c0c0c0&quot; width=&quot;100%&quot; noshade=&quot;noshade&quot; /&gt;&lt;strong&gt;MAJOR DIFFERENCES BETWEEN SPDY and HTTP &lt;/strong&gt;  &lt;hr style=&quot;color: #c0c0c0&quot; width=&quot;100%&quot; noshade=&quot;noshade&quot; /&gt;  &lt;p /&gt;  &lt;p&gt;SPDY, as described, is asynchronous and message-oriented. Like DIAMETER, SPDY would allow multiple requests per connection, effectively turning a single connection designed to be used and then closed into a long-lived connection. This is more along the lines of a SIP connection which is initiated and held open until the session is terminated.This is very different from the HTTP model in which connections are opened and closed within fairly short time intervals and are not expected to be held open for exceedingly long periods of time. SPDY thus eliminates the overhead associated with opening and closing many connections and the negative impact that has on application performance. &lt;/p&gt;  &lt;p&gt;The current &lt;a href=&quot;http://dev.chromium.org/spdy/spdy-protocol&quot;&gt;draft of the SPDY protocol&lt;/a&gt; states that “from the perspective of the server business logic or application API, nothing has changed”. But from the perspective of the infrastructure that needs to process the protocol, &lt;em&gt;everything&lt;/em&gt; changes. &lt;/p&gt;  &lt;blockquote&gt;   &lt;hr width=&quot;100%&quot; color=&quot;#680000&quot; noshade=&quot;noshade&quot; /&gt;     &lt;div style=&quot;background: #ebd3d3; width: 100%&quot;&gt;&lt;strong&gt;KEY CHANGES TO HTTP HEADERS&lt;/strong&gt;&lt;/div&gt;    &lt;hr width=&quot;100%&quot; color=&quot;#680000&quot; noshade=&quot;noshade&quot; /&gt;The following  are directly from the draft of the SPDY protocol and document the changes from HTTP to SPDY&lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;REQUEST CHANGES&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;ul&gt;   &lt;ul&gt;     &lt;li&gt;The first line of the request is unfolded into name/value pairs like other HTTP headers.  The names of the first line fields are &lt;code&gt;method&lt;/code&gt;, &lt;code&gt;url&lt;/code&gt;, and &lt;code&gt;version&lt;/code&gt;.  These keys are required to be present.  The &#039;url&#039; is the fully-qualified URL, containing protocol, host, port, and path.&lt;/li&gt;      &lt;li&gt;HTTP request headers are compressed.  This is accomplished by compressing all data sent by the client with gzip encoding.&lt;/li&gt;      &lt;li&gt;&lt;code&gt;Content-length&lt;/code&gt; is not a valid header. &lt;/li&gt;      &lt;li&gt;Chunked encoding is no longer valid.&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;RESPONSE CHANGES&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;ul&gt;   &lt;ul&gt;     &lt;li&gt;The response status line is unfolded into name/value pairs like other HTTP headers.  The names of the status line are &lt;code&gt;status &lt;/code&gt;and &lt;code&gt;version&lt;/code&gt;.  These keys are required to be present&lt;/li&gt;      &lt;li&gt;&lt;code&gt;Content-length&lt;/code&gt; is no longer valid. &lt;/li&gt;      &lt;li&gt;Chunked encoding is no longer valid.&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;These changes would have a huge impact on infrastructure solutions, many of which rely on URI or HTTP headers (custom and standardized) to perform specific actions such as blocking, scanning, persistence (server affinity), or routing. The requirement that SPDY be transported via SSL has its own, well understood impact on infrastructure and is already dealt with by most devices, but SPDY also requires that headers are compressed via gzip. This means every intermediary requiring to perform some action based on the headers will need to decompress, process, and then likely &lt;em&gt;recompress&lt;/em&gt; the headers before sending it on to the next hop. Coupling required compression with SSL would not only require support on all relevant infrastructure but will also likely reintroduce latency that could offset some of the performance gains claimed by testing of SPDY thus far. &lt;/p&gt; &lt;/blockquote&gt;  &lt;ul&gt;   &lt;ul /&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;hr width=&quot;100%&quot; color=&quot;#680000&quot; noshade=&quot;noshade&quot; /&gt;    &lt;div style=&quot;background: #ebd3d3; width: 100%&quot;&gt;&lt;strong&gt;SINGLE-CONNECTION: LONG LIVED SESSIONS&lt;/strong&gt; &lt;/div&gt;    &lt;hr width=&quot;100%&quot; color=&quot;#680000&quot; noshade=&quot;noshade&quot; /&gt;    &lt;p&gt;That all communication would essentially flow between the client and server over a single connection also poses a challenge for intermediaries that perform any kind of analysis or are required to act on the data exchanged. Load balancers, for example, are not generally designed to handle switching of messages in what becomes a 1:N connection:server scenario. The protocol could likely be supported as is by most load balancing solutions on a strictly layer 4 load balancing basis but advanced features that take advantage of application-aware capabilities such as message header and payload value routing (content-based routing) as well as egress functionality like Data Leak Prevention (DLP) would be much more difficult to implement, if not impossible for some solutions. This capability actually sounds a lot like HTTP pipelining on the request side. &lt;/p&gt;    &lt;p&gt;The single, long-lived connection would have more of an impact on the overall architecture and capacity planning. In some respects it would be easier, as there would be an easy 1:1 ratio between users and connections. But because each user is effectively being handed dedicated compute resources, this would actually change the resource consumption model on servers and make it more difficult to support high volumes of users without building out a scalable infrastructure.  &lt;/p&gt;    &lt;hr width=&quot;100%&quot; color=&quot;#680000&quot; noshade=&quot;noshade&quot; /&gt;    &lt;div style=&quot;background: #ebd3d3; width: 100%&quot;&gt;&lt;strong&gt;ASYNCHRONOUS EXCHANGE OF MESSAGES&lt;/strong&gt;&lt;/div&gt;    &lt;hr width=&quot;100%&quot; color=&quot;#680000&quot; noshade=&quot;noshade&quot; /&gt;    &lt;p&gt; Further complicating the ability of infrastructure solutions to handle SPDY is its definition as asynchronous. Essentially asynchronous protocols do not enforce order of replies. That means a client could send three requests in a row without waiting for a response and the server could send back the response in a completely different order. Again, from the draft SPDY protocol: &lt;/p&gt;    &lt;p&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/e4ce6cd5d41f_63B8/blockquote_4.gif&quot;&gt;&lt;img title=&quot;blockquote&quot; style=&quot;border-right: 0px; border-top: 0px; display: inline; margin-left: 0px; border-left: 0px; margin-right: 0px; border-bottom: 0px&quot; height=&quot;28&quot; alt=&quot;blockquote&quot; src=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/e4ce6cd5d41f_63B8/blockquote_thumb_1.gif&quot; width=&quot;46&quot; align=&quot;left&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;em&gt;Because TCP provides a single stream of data on which SPDY multiplexes multiple logical streams, it is important for &lt;font color=&quot;#ff0000&quot;&gt;clients and servers to interleave data messages&lt;/font&gt; for concurrent sessions.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;This may not sound like a problem, but for infrastructure that is optimized to handle HTTP and has been built around its implicit behavior this would require changes to the core networking stacks on most devices. In a typical HTTP scenario a request is received, the infrastructure solution processes any applicable ingress policies, and then initiates a connection to the appropriate server and waits for a response. It  appears that with SPDY, like DIAMETER, the infrastructure still processes any applicable ingress policies and initiates a connection but does not necessarily wait for a reply as it might need to act upon the next incoming message. &lt;/p&gt;    &lt;p&gt;This means a single network “session” would need to carefully track multiple incoming requests and outgoing responses at the same time on a per connection basis. This is not something most infrastructure is typically prepared to handle. Combined with the possibility that different requests may need to be routed to different servers within the infrastructure, this complicates the nature of application delivery and load balancing and could have a huge impact on the costs associated with cloud computing. Long lived sessions/connections initiated on secondary or tertiary servers launched to handle temporary capacity increases &lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2009/10/16/putting-a-price-on-uptime.aspx&quot;&gt;could hold open those connections long enough to incur excess charges&lt;/a&gt; that are unnecessary. &lt;/p&gt;    &lt;p&gt; &lt;/p&gt;    &lt;p&gt;Also similar to DIAMETER is the inclusion of a “real server push” feature. The ability of a server to act like a client and vice-versa is inherent in DIAMETER and this reverse flow of traffic is not something most infrastructure is prepared to process. &lt;/p&gt; &lt;/blockquote&gt;  &lt;hr style=&quot;color: #c0c0c0&quot; width=&quot;100%&quot; noshade=&quot;noshade&quot; /&gt;&lt;strong&gt;THE IMPACT ON INFRASTRUCTURE&lt;/strong&gt;   &lt;hr style=&quot;color: #c0c0c0&quot; width=&quot;100%&quot; noshade=&quot;noshade&quot; /&gt;  &lt;p&gt;Any infrastructure solution that is heavily focused on application layer (HTTP) processing for any purpose would likely need to make radical changes to its core networking and processing engines. Some solutions, particularly those tasked with load balancing and scaling existing message-based protocols may already be capable of supporting a protocol like SPDY. Whether the &lt;a href=&quot;http://www.f5.com/solutions/industry/telecom/&quot;&gt;solutions that support DIAMETER and SIP load balancing&lt;/a&gt; and scalability could support SPDY without modification is highly dependent on whether support for the service-provider focused protocols is based on an underlying generic &lt;a href=&quot;http://www.f5.com/pdf/white-papers/message-based-load-balancing-wp.pdf&quot;&gt;message-based implementation&lt;/a&gt; [PDF] or a protocol-specific implementation. The latter would be difficult to adapt to a new protocol while the former would be more easily extended to specifically support the requirements of new message-oriented protocols. &lt;/p&gt;  &lt;p&gt;But that’s only &lt;a href=&quot;http://www.f5.com/glossary/load-balancing.html&quot;&gt;load balancing&lt;/a&gt; and scalability. There are many other infrastructure devices that are used to secure, monitor, accelerate, and otherwise manage HTTP that would need to be updated to handle such a new protocol. The upheaval across data centers would likely be on par with the anticipated challenges associated with &lt;a href=&quot;http://devcentral.f5.com/weblogs/f5news/archive/2009/11/09/no-ipv4-for-you.aspx&quot;&gt;mass migration from IPv4 to IPv6&lt;/a&gt;. Like that migration, however, support for both SPDY and HTTP could be achieved through the use of translating gateways; infrastructure capable of supporting both SPDY and HTTP or able to translate between the two could be utilized to enable a smoother transition. &lt;/p&gt;  &lt;p&gt;While it’s a fascinating and exciting notion, the introduction of a completely new protocol to replace HTTP seems more academic than realistic. More realistic would be for gradual implementation through adaptation of SPDY’s core concepts into the next generations of HTTP until HTTP is indistinguishably from a protocol such as SPDY. Making modifications and improvements to HTTP would be an evolutionary step rather than the revolutionary change implied with SPDY that would be almost &lt;em&gt;too&lt;/em&gt; disruptive to adopt. &lt;/p&gt;  &lt;p&gt;That said, not everything that comes out of Google Labs is adopted as an industry wide solution. It’s an experimental environment and a good one at that. What may come out of the SPDY project may well in fact be changes to HTTP rather than the presentation of a new, radically different protocol. Regardless, SDPY and Google’s efforts have people talking about what’s wrong with HTTP and how it might be fixed and that conversation is one we’ve probably needed to have for quite some time now. &lt;/p&gt;  &lt;p&gt;You can read more about the tools Google offers and general problems with web performance at &lt;a href=&quot;http://code.google.com/speed/&quot;&gt;Google’s “Let’s Make the Web Faster” site&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://twitter.com/lmacvittie&quot;&gt;&lt;img height=&quot;18&quot; alt=&quot;Follow me on Twitter&quot; src=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_twitt-twoo-icon.png&quot; width=&quot;18&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a title=&quot;Follow F5 Networks on Twitter&quot; href=&quot;http://tweepml.org/F5-Networks-Tweeple/&quot;&gt;&lt;img height=&quot;18&quot; src=&quot;http://tweepml.org/s/tweepml16.png&quot; width=&quot;18&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a title=&quot;Follow F5 DevCentral on Twitter&quot; href=&quot;http://tweepml.org/F5-DevCentral/&quot;&gt;&lt;img height=&quot;18&quot; src=&quot;http://tweepml.org/s/tweepml16.png&quot; width=&quot;18&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/Rss.aspx&quot;&gt;&lt;img src=&quot;http://devcentral.f5.com/Portals/0/images/Icons/icon_xml_18.gif&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.slideshare.net/lmacvittie&quot;&gt;&lt;img height=&quot;18&quot; alt=&quot;View Lori&#039;s profile on SlideShare&quot; src=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_slideshare.png&quot; width=&quot;18&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.linkedin.com/in/lmacvittie&quot;&gt;&lt;img src=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_linkedin_16.png&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.friendfeed.com/lmacvittie&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;18&quot; alt=&quot;friendfeed&quot; src=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/friendfeed_3.jpg&quot; width=&quot;18&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.facebook.com/lmacvittie&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;18&quot; alt=&quot;icon_facebook&quot; src=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/icon_facebook_4.png&quot; width=&quot;18&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a title=&quot;Subscribe using any feed reader!&quot; href=&quot;http://www.addthis.com/feed.php?pub=lmacvittie&amp;amp;h1=http%3A%2F%2Fdevcentral.f5.com%2Fweblogs%2Fmacvittie%2FRss.aspx&amp;amp;t1=&quot;&gt;&lt;img height=&quot;18&quot; alt=&quot;AddThis Feed Button&quot; src=&quot;http://s9.addthis.com/button1-fd.gif&quot; width=&quot;125&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a title=&quot;Bookmark and Share&quot; onclick=&quot;window.open(&#039;http://www.addthis.com/bookmark.php?wt=nw&amp;amp;pub=lmacvittie&amp;amp;url=&#039;+encodeURIComponent(location.href)+&#039;&amp;amp;title=&#039;+encodeURIComponent(document.title), &#039;addthis&#039;, &#039;scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no,screenX=200,screenY=100,left=200,top=100&#039;); return false;&quot; href=&quot;http://www.addthis.com/bookmark.php&quot; target=&quot;_blank&quot;&gt;&lt;img height=&quot;18&quot; alt=&quot;Bookmark and Share&quot; src=&quot;http://s9.addthis.com/button1-share.gif&quot; width=&quot;125&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;script type=&quot;text/javascript&quot; src=&quot;http://track.mybloglog.com/js/jsserv.php?mblID=2008070914270355&quot;&gt;&lt;/script&gt;&lt;/p&gt;  &lt;p&gt;Related blogs &amp;amp; articles: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href=&quot;http://arstechnica.com/web/news/2009/11/spdy-google-wants-to-speed-up-the-web-by-ditching-http.ars&quot;&gt;SPDY: Google wants to speed up the web by ditching HTTP&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2009/05/27/i-am-wondering-why-not-all-websites-enabling-this-great.aspx&quot;&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=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2009/10/07/long-lived-ajax.aspx&quot;&gt;Long Live(d) AJAX&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://www.f5.com/pdf/white-papers/message-based-load-balancing-wp.pdf&quot;&gt;Message-Based Load Balancing: Scaling Diameter, RADIUS, and Message-Oriented Protocols&lt;/a&gt; [White Paper, PDF] &lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://www.slideshare.net/DSorensenCPR/f5-networks-scaling-mobile-infrastructures-with-bigip&quot;&gt;Scaling Mobile Infrastructures with BIG-IP Solutions&lt;/a&gt; [SlideShare presentation] &lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2009/04/23/jedi-mind-tricks-http-request-smuggling.aspx&quot;&gt;Jedi Mind Tricks: HTTP Request Smuggling&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2009/04/02/http-pipelining-a-security-risk-without-real-performance-benefits.aspx&quot;&gt;HTTP Pipelining: A security risk without real performance benefits&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2009/10/22/wils-why-does-load-balancing-improve-application-performance.aspx&quot;&gt;WILS: Why Does Load Balancing Improve Application Performance?&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2009/09/23/concise-guide-to-load-balancing.aspx&quot;&gt;WILS: The Concise Guide to *-Load Balancing&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;   &lt;/p&gt;&lt;div class=&quot;wlWriterEditableSmartContent&quot; id=&quot;scid:0767317B-992E-4b12-91E0-4F059A8CECA8:67c9bbb7-4281-414f-8c88-8d6d2ec00d3f&quot; style=&quot;padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px&quot;&gt;Technorati Tags: &lt;a href=&quot;http://technorati.com/tags/MacVittie&quot; rel=&quot;tag&quot;&gt;MacVittie&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/F5&quot; rel=&quot;tag&quot;&gt;F5&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Google&quot; rel=&quot;tag&quot;&gt;Google&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/SPDY&quot; rel=&quot;tag&quot;&gt;SPDY&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/HTTP&quot; rel=&quot;tag&quot;&gt;HTTP&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/infrastructure&quot; rel=&quot;tag&quot;&gt;infrastructure&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/DIAMETER&quot; rel=&quot;tag&quot;&gt;DIAMETER&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/protocols&quot; rel=&quot;tag&quot;&gt;protocols&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/web&quot; rel=&quot;tag&quot;&gt;web&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/internet&quot; rel=&quot;tag&quot;&gt;internet&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/IPv4&quot; rel=&quot;tag&quot;&gt;IPv4&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/IPv6&quot; rel=&quot;tag&quot;&gt;IPv6&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/acceleration&quot; rel=&quot;tag&quot;&gt;acceleration&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/security&quot; rel=&quot;tag&quot;&gt;security&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/load+balancing&quot; rel=&quot;tag&quot;&gt;load balancing&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/application+delivery&quot; rel=&quot;tag&quot;&gt;application delivery&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/application+security&quot; rel=&quot;tag&quot;&gt;application security&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/architecture&quot; rel=&quot;tag&quot;&gt;architecture&lt;/a&gt;&lt;/div&gt;&lt;img src=&quot;http://devcentral.f5.com/weblogs/macvittie/aggbug/6211.aspx&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/f5/XOwx/~4/6kaARgFaWpM&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1191641&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Wed, 18 Nov 2009 09:15:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1191641</guid>
 <comments>http://ajax.sys-con.com/node/1191641#feedback</comments>
</item>
<item>
 <title>UN’s Internet Governance Forum Censors a Mild Mention of Censorship</title>
 <link>http://ajax.sys-con.com/node/1189140</link>
 <description>Holy cow! The Open Net Initiative, a group that monitors government filtering (= censorship) of the Internet held a book launch at the United Nations-sponsored Internet Governance Forum  in Sharm El Sheik. A poster for the book —  Access Controlled — contained the sentence: &quot;The first generation of Internet ...&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1189140&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Mon, 16 Nov 2009 08:55:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1189140</guid>
 <comments>http://ajax.sys-con.com/node/1189140#feedback</comments>
</item>
<item>
 <title>Zend Teams with Varien</title>
 <link>http://ajax.sys-con.com/node/1186045</link>
 <description>Zend has gotten Varien, apparently a hot e-commerce platform, to ship the free Community Edition of Zend Server, the PHP web application server with the free Community Edition of its open source Magento e-commerce software. Varien, in turn, will contribute a number of native e-commerce features such as payment gateways and shipping calculation modules to the open source PHP framework, Zend Framework, which is an integrated part of Zend Server. 
&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1186045&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Fri, 13 Nov 2009 15:30:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1186045</guid>
 <comments>http://ajax.sys-con.com/node/1186045#feedback</comments>
</item>
<item>
 <title>Cloud, Standards, and Pants</title>
 <link>http://ajax.sys-con.com/node/1185332</link>
 <description>&lt;p&gt;&lt;em&gt;These three things have a lot more in common than you might think and all three tend to evoke similar levels of frustration. &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;A very real problem women face when shopping is &lt;a href=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/TheCloudIsLikeWomensPants_43A2/image_8.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin: 10px 10px 5px 0px; border-right-width: 0px&quot; height=&quot;240&quot; alt=&quot;image&quot; src=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/TheCloudIsLikeWomensPants_43A2/image_thumb_3.png&quot; width=&quot;201&quot; align=&quot;left&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;this: no two brands define a size the same. If you usually wear a size 8 in “Brand X” you might actually wear a size 10 or 6 in “Brand Y”, depending on how the brand decided to define its sizing. Customers, women in this case, cannot count on consistency in sizes across brands. This makes shopping annoying because every time you change brands you’re never quite sure what you need and if the size &lt;em&gt;increases&lt;/em&gt; across brands, well, it becomes obvious that perhaps brand lock-in is in part the reasoning behind these differences in sizing. &lt;/p&gt;  &lt;p&gt;Now, consider the &lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2009/10/21/the-cloud-is-not-a-synonym-for-cloud-computing.aspx&quot;&gt;differences in the definition of “The Cloud”&lt;/a&gt;. We have IaaS (Infrastructure as a Service). We have PaaS (Platform as a Service). We have SaaS (Software as a Service). All three have very different definitions of what makes it “a cloud” and there is very little consistency across those definitions. Oh, there are vague similarities: elasticity, automation, easy provisioning. But those are nebulous terms that are about as useful as slapping a “Size 8” on a pair of jeans and expecting a woman to know what that means. She doesn’t, and neither does the consumer of “cloud.” &lt;/p&gt;  &lt;p&gt;Dig into “cloud computing” and “intercloud” and standards efforts and you’ll see this is true at the &lt;em&gt;infrastructure &lt;/em&gt;layer, as well. The challenge of defining standards around intercloud computing and cloudbalancing and just collaboration within a single cloud computing environment is made infinitely more challenging because infrastructure Vendor X “size 8” doesn’t match up with Vendor Y “size 8.” Features, naming, resource models, capabilities – all different. Yet all must be able to communicate and collaborate to not only provide the basic foundation for &lt;em&gt;a &lt;/em&gt;cloud computing environment, but to be able to migrate from one provider to another. &lt;/p&gt;  &lt;hr style=&quot;color: #c0c0c0&quot; width=&quot;100%&quot; noshade=&quot;noshade&quot; /&gt;&lt;strong&gt;API versus RESOURCE MODEL&lt;/strong&gt;   &lt;hr style=&quot;color: #c0c0c0&quot; width=&quot;100%&quot; noshade=&quot;noshade&quot; /&gt;  &lt;p&gt;This is what’s going to make defining standards more challenging than ever: we’ve got to not only standardize protocols but common industry and market definitions as well. The former will likely turn out to be much easier than the latter because it’s more abstract; it’s about management and control without regard to implementation. It is the resource model that will be difficult to nail down. &lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://stage.vambenepe.com/&quot;&gt;William Vambenepe&lt;/a&gt; writes in &lt;a href=&quot;http://stage.vambenepe.com/archives/943&quot;&gt;Separating model from protocol in Cloud APIs&lt;/a&gt;:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href=&quot;file:///C:/Documents and Settings/macvittie/Local Settings/Temp/WindowsLiveWriter-429641856/supfiles10B75249/blockquote[3].gif&quot;&gt;&lt;img title=&quot;blockquote_thumb12[2]&quot; style=&quot;border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;28&quot; alt=&quot;blockquote_thumb12[2]&quot; src=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/TheCloudIsLikeWomensPants_43A2/blockquote_thumb12%5B2%5D_3fa6ed5b-4dfb-4df1-893e-7dfc3409deba.gif&quot; width=&quot;46&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; Things become a lot more sensitive when you touch the resource model, which reflects the actual capabilities of the Cloud management infrastructure. How much flexibility in the network setup? What kind of application provisioning? What affinity/anti-affinity control level? Can I get block-level storage? Etc. Having to implement the other guy’s interface in these matters is not just a matter of glue code, it’s a major product feature. As a result, the resource model is a much more strategic control point than the protocol.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;William nails the problem with his assessment of the differences between the resource model and protocols. Given his obviously intimate knowledge of web services standards and thus &lt;a title=&quot;Service Oriented Architecture definition &quot; href=&quot;http://www.f5.com/glossary/soa.html&quot; rel=&quot;&quot; target=&quot;_blank&quot;&gt;SOA&lt;/a&gt;, this is no surprise. One of the core tenets of SOA is the separation of these two very different but very vital components. The interface should be separate from the implementation. In InterCloud, we must separate resource model (data protocol implementation) from interface (command and control protocol) in order to achieve standardization. &lt;/p&gt;  &lt;p&gt;Interestingly enough at the last &lt;a href=&quot;http://gregness.wordpress.com/2009/09/04/welcome-to-the-it-revolution/&quot;&gt;Infrastructure 2.0 Working Group&lt;/a&gt;, which is focusing on this problem, Vint Cerf mentioned out of hand that the separation of IP from routing “in the beginning” was actually accidental. If you read the &lt;a href=&quot;http://www.faqs.org/rfcs/rfc791.html&quot;&gt;IP RFC&lt;/a&gt; you’ll note that it ends up being just a “resource model”; it describes the format of information being exchanged and mentions how packets should flow across internetworks, but it defines no API-style protocol for doing so. It offers only minimal guidance on the higher level interfaces that might be used to transmit and receive Internet Datagrams. That accidental omission turned out to be the best thing since sliced bread. Routing protocols have come and gone since then, but IP remains at the heart of the Internet. Basically we need to duplicate that, but at a higher layer in the stack. &lt;/p&gt;  &lt;p&gt;Any InterCloud protocol will almost certainly be easier to develop than the resource model. While there already exists some commonality across components and concepts in the infrastructure, still there are many more resources for which every vendor has their &lt;em&gt;own &lt;/em&gt;definition. It is that disparity that needs to be addressed independently and codified in a common set of resource models that at the same time allows for extensibility on a per vendor basis to account for uncommon resources. &lt;/p&gt;  &lt;p&gt;This is no easy task. Consider a very simple example – persistence in &lt;a href=&quot;http://www.f5.com/glossary/load-balancing.html&quot;&gt;load balancing&lt;/a&gt; solutions. &lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2008/06/04/3329.aspx&quot;&gt;Persistence is a commonly implemented feature in all load balancers&lt;/a&gt; that can be achieved in a number of ways. Among the most common are: source IP, destination IP, Cookie, and SSL session ID. Now take a look at the difference in definition of these - from a purely naming standpoint – between Citrix Netscaler and &lt;a title=&quot;F5 Networks&quot; href=&quot;http://www.f5.com/&quot; rel=&quot;&quot; target=&quot;_blank&quot;&gt;F5&lt;/a&gt; BIG-IP: &lt;/p&gt;  &lt;table cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; width=&quot;996&quot; border=&quot;0&quot;&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;538&quot;&gt;&lt;strong&gt;&lt;a href=&quot;http://www.citrix.com&quot;&gt;Citrix&lt;/a&gt; &lt;a href=&quot;http://www.citrix.com/netscaler&quot;&gt;Netscaler&lt;/a&gt; &lt;a href=&quot;http://www.f5.com/glossary/xml.html&quot; target=&quot;_blank&quot;&gt;XML&lt;/a&gt; &lt;a href=&quot;http://support.citrix.com/article/ctx115839&quot;&gt;API&lt;/a&gt; “Size 8”&lt;/strong&gt;&lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;659&quot;&gt;&lt;strong&gt;&lt;a href=&quot;http://www.f5.com/&quot;&gt;F5&lt;/a&gt; &lt;a href=&quot;http://www.f5.com/big-ip/&quot;&gt;BIG-IP&lt;/a&gt; &lt;a href=&quot;http://devcentral.f5.com/iControl&quot;&gt;iControl&lt;/a&gt; “Size 8” &lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;538&quot;&gt;         &lt;p&gt; &lt;a href=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/TheCloudIsLikeWomensPants_43A2/image_2.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px&quot; height=&quot;266&quot; alt=&quot;image&quot; src=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/TheCloudIsLikeWomensPants_43A2/image_thumb.png&quot; width=&quot;436&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;       &lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;659&quot;&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/TheCloudIsLikeWomensPants_43A2/image_4.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;262&quot; alt=&quot;image&quot; src=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/TheCloudIsLikeWomensPants_43A2/image_thumb_1.png&quot; width=&quot;460&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;           &lt;br /&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;Looking at both implementations – and remember this is just &lt;em&gt;naming –&lt;/em&gt; you’ll notice&lt;em&gt; &lt;/em&gt;that the most common methods of persistence exist in both solutions, but use very different naming conventions. Netscaler defines source IP-based persistence as “SOURCEIP” while F5 uses “PERSISTENCE_MODE_SOURCE_ADDRESS_AFFINITY”; same concept, different terminology. Once you get beyond the common methods you find even more disparity and it becomes more difficult to map between the two without a firm foundation of knowledge of &lt;em&gt;both &lt;/em&gt;systems. For example, is the Citrix “CALLID” the same as the “PERSISTENCE_MODE_SIP” definition? Perhaps they are, perhaps they aren’t. You can imagine that at the &lt;em&gt;operation &lt;/em&gt;level, the API, the naming conventions used there are so drastically difference that attempting to map the two would drive even the most experienced integration developer a bit insane. &lt;/p&gt;  &lt;hr style=&quot;color: #c0c0c0&quot; width=&quot;100%&quot; noshade=&quot;noshade&quot; /&gt;&lt;strong&gt;STANDARDS TAKE TIME&lt;/strong&gt;   &lt;hr style=&quot;color: #c0c0c0&quot; width=&quot;100%&quot; noshade=&quot;noshade&quot; /&gt;  &lt;p&gt;Just as cloud computing providers continue to roll out new services over time, behaving in a manner similar to Web 2.0 applications that never quite come out of beta, so, too, will the standards of InterCloud need to evolve. It’s going to take a lot of comparisons, discussions, and mappings to figure out what is an acceptable common resource model for each infrastructure component and in the process we’re going to have to abstract quite a bit. Less challenging will be the need for a common namespace for this resource model across &lt;em&gt;all &lt;/em&gt;infrastructure components. After all, an IP address is the same whether it’s used by a virtual machine, an IPS, a &lt;a href=&quot;http://www.f5.com/glossary/load-balancer.html&quot;&gt;load balancer&lt;/a&gt;, or a firewall. But these are easier to discover and define than elements unique to a particular solution space and once we get the ball rolling one can hope that the momentum keeps it rolling. &lt;/p&gt;  &lt;p&gt;The Internet wasn’t built in a day – really, it took the ‘founding fathers’ quite a bit of discussion and hard work to get the standards defined that allowed mass interoperability and collaboration. But I am willing to bet that we’ll see InterCloud standards long before the fashion industry decides to standardize its sizing for women. &lt;/p&gt;  &lt;p&gt;Long before then, I’m sure. &lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://twitter.com/lmacvittie&quot;&gt;&lt;img height=&quot;18&quot; alt=&quot;Follow me on Twitter&quot; src=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_twitt-twoo-icon.png&quot; width=&quot;18&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a title=&quot;Follow F5 Networks on Twitter&quot; href=&quot;http://tweepml.org/F5-Networks-Tweeple/&quot;&gt;&lt;img height=&quot;18&quot; src=&quot;http://tweepml.org/s/tweepml16.png&quot; width=&quot;18&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a title=&quot;Follow F5 DevCentral on Twitter&quot; href=&quot;http://tweepml.org/F5-DevCentral/&quot;&gt;&lt;img height=&quot;18&quot; src=&quot;http://tweepml.org/s/tweepml16.png&quot; width=&quot;18&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/Rss.aspx&quot;&gt;&lt;img src=&quot;http://devcentral.f5.com/Portals/0/images/Icons/icon_xml_18.gif&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.slideshare.net/lmacvittie&quot;&gt;&lt;img height=&quot;18&quot; alt=&quot;View Lori&#039;s profile on SlideShare&quot; src=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_slideshare.png&quot; width=&quot;18&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.linkedin.com/in/lmacvittie&quot;&gt;&lt;img src=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_linkedin_16.png&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.friendfeed.com/lmacvittie&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;16&quot; alt=&quot;friendfeed&quot; src=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/friendfeed_3.jpg&quot; width=&quot;16&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/icon_facebook_2.png&quot;&gt;&lt;img style=&quot;border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px&quot; height=&quot;16&quot; alt=&quot;icon_facebook&quot; src=&quot;http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/InfrastructureasaServiceHowcontextawares_69CD/icon_facebook_4.png&quot; width=&quot;16&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a title=&quot;Subscribe using any feed reader!&quot; href=&quot;http://www.addthis.com/feed.php?pub=lmacvittie&amp;amp;h1=http%3A%2F%2Fdevcentral.f5.com%2Fweblogs%2Fmacvittie%2FRss.aspx&amp;amp;t1=&quot;&gt;&lt;img height=&quot;18&quot; alt=&quot;AddThis Feed Button&quot; src=&quot;http://s9.addthis.com/button1-fd.gif&quot; width=&quot;125&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a title=&quot;Bookmark and Share&quot; onclick=&quot;window.open(&#039;http://www.addthis.com/bookmark.php?wt=nw&amp;amp;pub=lmacvittie&amp;amp;url=&#039;+encodeURIComponent(location.href)+&#039;&amp;amp;title=&#039;+encodeURIComponent(document.title), &#039;addthis&#039;, &#039;scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no,screenX=200,screenY=100,left=200,top=100&#039;); return false;&quot; href=&quot;http://www.addthis.com/bookmark.php&quot; target=&quot;_blank&quot;&gt;&lt;img height=&quot;18&quot; alt=&quot;Bookmark and Share&quot; src=&quot;http://s9.addthis.com/button1-share.gif&quot; width=&quot;125&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;script type=&quot;text/javascript&quot; src=&quot;http://track.mybloglog.com/js/jsserv.php?mblID=2008070914270355&quot;&gt;&lt;/script&gt;&lt;/p&gt;  &lt;div class=&quot;wlWriterEditableSmartContent&quot; id=&quot;scid:0767317B-992E-4b12-91E0-4F059A8CECA8:a4f20c03-63fa-49ab-bb84-67522e428d6a&quot; style=&quot;padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px&quot;&gt;Technorati Tags: &lt;a href=&quot;http://technorati.com/tags/MacVittie&quot; rel=&quot;tag&quot;&gt;MacVittie&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/F5&quot; rel=&quot;tag&quot;&gt;F5&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/cloud&quot; rel=&quot;tag&quot;&gt;cloud&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/cloud+computing&quot; rel=&quot;tag&quot;&gt;cloud computing&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/resource+model&quot; rel=&quot;tag&quot;&gt;resource model&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/API&quot; rel=&quot;tag&quot;&gt;API&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/integration&quot; rel=&quot;tag&quot;&gt;integration&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/standards&quot; rel=&quot;tag&quot;&gt;standards&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/InterCloud&quot; rel=&quot;tag&quot;&gt;InterCloud&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/infrastructure+2.0&quot; rel=&quot;tag&quot;&gt;infrastructure 2.0&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/William+Vambenepe&quot; rel=&quot;tag&quot;&gt;William Vambenepe&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/SOA&quot; rel=&quot;tag&quot;&gt;SOA&lt;/a&gt;,&lt;a href=&quot;http://technorati.com/tags/Web+2.0&quot; rel=&quot;tag&quot;&gt;Web 2.0&lt;/a&gt;&lt;/div&gt;  &lt;p&gt;Related bogs &amp;amp; articles: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2009/11/04/the-api-is-the-new-cli.aspx&quot;&gt;The API Is the New CLI&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2009/09/25/infrastructure-integration-metadata-versus-api.aspx&quot;&gt;Infrastructure Integration: Metadata versus API&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2009/09/14/the-cloud-metastructure-hubub.aspx&quot;&gt;The Cloud Metastructure Hubub&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2009/10/21/the-cloud-is-not-a-synonym-for-cloud-computing.aspx&quot;&gt;The Cloud Is Not A Synonym For Cloud Computing&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2008/11/05/cloud-computing-the-last-definition-youll-ever-need.aspx&quot;&gt;Cloud Computing: The Last Definition You&#039;ll Ever Need&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2009/08/24/we-donrsquot-know-what-cloud-is-but-what-wersquore-doing.aspx&quot;&gt;We Don’t Know What Cloud Is But What We’re Doing It&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2009/05/11/get-your-saas-off-my-cloud.aspx&quot;&gt;Get your SaaS off my cloud&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2009/08/10/cloud-is-not-a-big-switch.aspx&quot;&gt;Cloud is Not a Big Switch&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2009/06/30/intercloud-the-evolution-of-global-application-delivery.aspx&quot;&gt;Intercloud: The Evolution of Global Application Delivery&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href=&quot;http://devcentral.f5.com/weblogs/macvittie/archive/2009/07/09/cloud-balancing-cloud-bursting-and-intercloud.aspx&quot;&gt;Cloud Balancing, Cloud Bursting, and Intercloud&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;img src=&quot;http://devcentral.f5.com/weblogs/macvittie/aggbug/6201.aspx&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/f5/XOwx/~4/Yr2a2tlMmiU&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1185332&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Fri, 13 Nov 2009 14:30:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1185332</guid>
 <comments>http://ajax.sys-con.com/node/1185332#feedback</comments>
</item>
<item>
 <title>When Not to Try Data Recovery on Your Own</title>
 <link>http://ajax.sys-con.com/node/1183351</link>
 <description>The hard disk drive, which stores all of your professional, personal and intimate data, is a pretty fragile component of your computer system. While the hard disk might see like an uncompromising piece of equipment, but it may fail any point of time and result into critical data loss circumstances.&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1183351&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Fri, 13 Nov 2009 14:15:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1183351</guid>
 <comments>http://ajax.sys-con.com/node/1183351#feedback</comments>
</item>
<item>
 <title>When to Automate the Billing Process</title>
 <link>http://ajax.sys-con.com/node/1185974</link>
 <description>Most businesses have an accounting system that makes sense for them. However, an accounting system by itself is far from an efficiently automated billing process. Because the accounting system usually is a silo that is wholly separate from other operational activities of the company, keeping its information current often creates the need for multiple redundant entries of the same data, inefficiencies and sources of error.&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1185974&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Fri, 13 Nov 2009 13:30:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1185974</guid>
 <comments>http://ajax.sys-con.com/node/1185974#feedback</comments>
</item>
<item>
 <title>When to Automate the Fulfillment Process </title>
 <link>http://ajax.sys-con.com/node/1185968</link>
 <description>Businesses provide many different types of fulfillment. Some fulfill by keeping shelves properly stocked, and then delivering from that stock. Some businesses go a step further and manufacture or assemble those products. Others provide professional services such as engineering, case management, analysis or legal services.&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1185968&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Fri, 13 Nov 2009 13:30:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1185968</guid>
 <comments>http://ajax.sys-con.com/node/1185968#feedback</comments>
</item>
<item>
 <title>Five Common Backup and Recovery Mistakes </title>
 <link>http://ajax.sys-con.com/node/1185916</link>
 <description>Server backup and recovery isn’t rocket surgery, but you would be surprised by the number of IT organizations that can’t get it right. Here are five of the most common mistakes that I have seen. Don’t worry, it’s Back Up” Famous last words! Is it really? Prove it! Just because you have run a backup procedure, throw in a fresh tape into the drive doesn’t necessarily mean that the server(s) are protected. Over confidence or misconceptions about backup are common mistakes. It’s like having a plan without ever testing.&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1185916&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Fri, 13 Nov 2009 12:30:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1185916</guid>
 <comments>http://ajax.sys-con.com/node/1185916#feedback</comments>
</item>
<item>
 <title>Top Five Considerations When Retiring Legacy Applications</title>
 <link>http://ajax.sys-con.com/node/1185818</link>
 <description>As organizations modernize to meet computing demands, they face enormous challenges when it comes the topic of retiring old applications. Consigning old applications to the backburner in favor of newer, safer, more stable, and more user-friendly systems is never as easy as it sounds. Most CIOs and tech department heads share this challenge – and the problem is more pronounced when the confines of regulatory, budget, and time requirements are taken into consideration.&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1185818&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Fri, 13 Nov 2009 11:30:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1185818</guid>
 <comments>http://ajax.sys-con.com/node/1185818#feedback</comments>
</item>
<item>
 <title>The Biggest Website Mistake - You Mean I Need to Put Gas in This Thing?</title>
 <link>http://ajax.sys-con.com/node/1185179</link>
 <description>So you’re ready to redesign your website.  Or maybe you’ve launched a new business and are designing a new site from the ground up.  Congratulations, while this is going to take some effort and involvement on your part &amp;#8212; whether you work with an internal team or bring in a firm or specialist as a [...]&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1185179&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Fri, 13 Nov 2009 10:30:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1185179</guid>
 <comments>http://ajax.sys-con.com/node/1185179#feedback</comments>
</item>
<item>
 <title>Intel Pays AMD $1.25 Billion To Settle</title>
 <link>http://ajax.sys-con.com/node/1184204</link>
 <description>Intel is paying AMD $1.25 billion to settle the massive private antitrust suit AMD has lodged in Delaware. AMD will also drop two cases against Intel it has pending in Japan and withdraw all of its regulatory complaints worldwide.Intel has also agreed to abide by a “set of business practices” that has yet to detailed. The US suit, which reportedly resulted the exchange of hundreds of millions of pages of documents and thousands of hours of depositions involved most OEMs, was to go to trial in March and promised to be highly entertaining. 
&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1184204&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Thu, 12 Nov 2009 15:00:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1184204</guid>
 <comments>http://ajax.sys-con.com/node/1184204#feedback</comments>
</item>
<item>
 <title>Inheritance Patterns in JavaScript</title>
 <link>http://ajax.sys-con.com/node/1181738</link>
 <description>&lt;a href=&quot;http://bolinfest.com/javascript/inheritance.php&quot;&gt;Inheritance Patterns in JavaScript&lt;/a&gt;: &lt;p&gt;Interesting points on using pseudo-classical inheritance pattern vs the functional pattern.  SproutCore is pseudo-classical based, just like Closure, primarily because of memory concerns.  Nice to see folks at Google went down the same direction.&lt;/p&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/Sproutcore-BlogPosts/~4/bjNZBfOgBgM&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1181738&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Wed, 11 Nov 2009 09:15:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1181738</guid>
 <comments>http://ajax.sys-con.com/node/1181738#feedback</comments>
</item>
<item>
 <title>ConnectWise Outage a Cautionary Tale for Channel</title>
 <link>http://ajax.sys-con.com/node/1181597</link>
 <description>For folks living in the IT Channel world it was impossible to miss the headline-grabbing news about the big ConnectWise cloud failure late last month.  I have only very limited knowledge of the outage itself from a handful of upset customers and unfortunately the various pundits and reporters that covered the story painted very sketchy [...]&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=6fusion.wordpress.com&amp;blog=5121661&amp;post=120&amp;subd=6fusion&amp;ref=&amp;feed=1&quot; /&gt;&lt;p&gt;&lt;a href=&quot;http://ajax.sys-con.com/node/1181597&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <pubDate>Wed, 11 Nov 2009 05:30:00 EST</pubDate>
 <guid isPermaLink="true">http://ajax.sys-con.com/node/1181597</guid>
 <comments>http://ajax.sys-con.com/node/1181597#feedback</comments>
</item>
</channel>
</rss>
