<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Bits And Buzz, by @JeremyChone &#187; Architecture</title>
	<atom:link href="http://www.bitsandbuzz.com/article/category/architecture/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bitsandbuzz.com</link>
	<description>Technology, trends, and opportunities.</description>
	<lastBuildDate>Sat, 03 Sep 2011 00:39:55 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>To Flash or to Open Web</title>
		<link>http://www.bitsandbuzz.com/article/to-flash-or-to-open-web/</link>
		<comments>http://www.bitsandbuzz.com/article/to-flash-or-to-open-web/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 15:10:19 +0000</pubDate>
		<dc:creator>Jeremy Chone</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[Web2.0]]></category>

		<guid isPermaLink="false">http://www.bitsandbuzz.com/?p=305</guid>
		<description><![CDATA[Nowadays, building [rich] Web applications can be quite  challenging, as the proliferation of Web technologies has become overwhelming and  confusing. The real challenge is that many interesting new Web technologies are  being promoted by various groups, and it can be quite difficult for a developer  or architect to filter the practical [...]]]></description>
			<content:encoded><![CDATA[<p><img class="imgPostIntro" src="/images/img-flash-open-web.png" alt="" align="left" />Nowadays, building [rich] Web applications can be quite  challenging, as the <strong>proliferation of Web technologies has become overwhelming and  confusing</strong>. The real challenge is that many interesting new Web technologies are  being promoted by various groups, and it can be quite difficult for a developer  or architect to filter the practical and future-proof ones from the cool and  volatile ones.</p>
<p>As a rule of thumb, open technologies tend to be more  pervasive and longer lasting (especially for the Internet) than proprietary  technologies, which tend to bring more advanced capabilities early on.  Consequently, <strong>Web application developers need to be pragmatically-open</strong>, by choosing  open technologies whenever possible, but also by  not hesitating to use proprietary  ones when required. It is not about being religious about openness or anything  else, but rather about being diligent so that one is able to choose the right  technology to maximize the chances of success of the target application. In other  words, it should not be a personal and emotional decision, but rather a  business and rational one.</p>
<p><span id="more-305"></span></p>
<p>Today, for mainstream rich Web applications, there are two  main technologies: <strong>Flash</strong> and <strong>Open Web</strong> (i.e., HTML, CSS, JavaScript, SVG, etc…). While  SilverLight and JavaFX are definitely interesting upcoming technologies, they are  still unproven Web entities, and, for the sake of simplicity, this article will  focus on Flash and Open Web.</p>
<p>Having worked for many years on the subject, and having  spent time in both camps, I can honestly state that they both have their pros  and cons and, depending on your rich Web application requirements, you might even  need to use both. The trick to making a good business decisions is to have an  objective look at each technology and to strip out all preconceived emotional  opinions.</p>
<p>To help answer the question of what to use when, here is a technology-capability  matrix, followed by short explanations.</p>
<p align="center"><img src="/images/img-flash-open-web-matrix.png" alt="" width="458" height="378" /></p>
<h3>SEO <small>(Open Web)</small></h3>
<p>While Google is making some good progress at <a href="http://googlewebmastercentral.blogspot.com/2009/06/flash-indexing-with-external-resource.html">indexing  Flash content</a>, SEO for Flash is still in <a href="http://blog.ineedhits.com/tips-advice/4-major-reasons-why-seo-and-flash-still-dont-mix-30005764.html">its  infancy</a>, and, if your application depends on SEO to succeed, you better  stick with well known URLs and HTML best practices.<strong> SEO is hard enough </strong>with regular  page-based HTML content without adding unproven SEO-technologies to the mix. Even  adding Ajax the wrong way could be extremely damaging to SEO. For example, the  “#” URL trick that is used by many single-page Web applications might not be as  SEO-friendly as it seems (Ajax and SEO will probably be the subject of a future  post).</p>
<h3>Mobile Web <small>(Open Web)</small></h3>
<p>Mobile Web is another place where Flash is still behind. Although  Adobe is making <a href="http://www.pcworld.com/article/167165/"> promising progress</a> in this area, if your  are not building a 2D game or  video/media  centric application, there are very few reasons to encumber the overhead and uncertainty  of another virtual machine on top of the already very capable modern mobile Web  browsers. Nowadays, most of the <strong>new high-end devices have desktop-like browser  capabilities</strong> (often based on WebKit) which allow developers to take full  advantage of Open Web technologies such as Ajax and CSS 2.1+. Consequently, the  best way to maximize your mobile application reach is to stick with Open Web  technologies and architect your Web user interface in such a way that it  progressively degrades for simpler mobile browsers. Alternatively, developers  can to take advantage of the current mobile app stores trend that promotes  device specific applications, but this is outside the Web scope of this  article.</p>
<h3>Rich HTML Display &amp; Editing <small>(Open Web)</small></h3>
<p>While Flash 10 has some technologies which ease the  development of HTML layout and editing components, it is still nowhere near the  browser’s native capabilities. It is probably a fair guess that Flash 11 will  have even better HTML capabilities, perhaps even embedding WebKit, but, for  today, if you want to display and edit rich HTML, not surprisingly, the Web  browser is your best friend.</p>
<h3>On-Demand Performance <small>(Open Web)</small></h3>
<p>On-demand performance is the experience a user gets when  <strong>accessing a Web application for the first time</strong> (i.e., when none of the  application assets are in the browser’s cache). The common expectation for  consumer Web applications is usually sub-second responsiveness. As outlined in a  previous post about <a href="http://www.bitsandbuzz.com/article/compiled-web-vs-interpreted-web/">Compiled  vs. Interpreted Web</a>, the interpreted nature of the Web makes it very  efficient for executing on-demand content &amp; interaction, whereas the  compiled nature of the Flash application model is more optimized for post-load  execution. So, for applications requiring Web-fast first-time interaction  experiences, the Open Web model is the best one.</p>
<h3>Post-Load Performance <small>(Flash)</small></h3>
<p>Conversely, the compiled approach of Flash and frameworks  such as Flex makes it much more optimized for post-load interactions. So, if  you <strong>do not mind having a “loading-bar”</strong> on your application and have a very high  logic execution performance requirement, then Flash might be a good solution. Note  that new JavaScript VM such as Google Chrome V8 and Mozilla Firefox  SpiderMonkey with TraceMonkey are really breaking the barrier of interpreted  language performance. Unfortunately, Microsoft Internet Explorer is still  behind (even IE 8) in terms of JavaScript execution speed. While we may suspect  that Microsoft is going to work on optimizing their JavaScript engine soon, for  now, the best way to have high execution logic performance across browsers is  with Flash ActionScript 3.</p>
<h3>Animation <small>(Flash)</small></h3>
<p>If you want to make pixel flies, then Flash is your best  friend. While this statement is still true today, it is also important to note  that, with modern browsers (including IE-8-) and Ajax toolkits such as jQuery,  applications have access to some decent sets of animation capabilities using  100% Open Web technologies. So, unless animation is a cornerstone of your  application, <strong>animation alone should not be a critical or decisive factor</strong> one  way or  the other.</p>
<h3>2D &amp; 3D <small>(Flash)</small></h3>
<p>This is definitely a stronger one in favor of Flash. While  Open Web is promoting some 2D standards and implementations (e.g., Canvas and  SVG), <strong>nothing beats Flash performance and capabilities</strong> in reference to pixel  and vector graphic creation and manipulation. While Canvas and some SVG are  pretty well supported by Firefox and WebKit based browsers (i.e., Safari and  Google Chrome), Microsoft IE is still not implementing those. Developers can  circumvent this Microsoft limitation by using compatibilities such as JavaScript  or even Flash libraries, but this usually comes at the cost of features and  performance. In other words, while it is possible to do an online Photoshop or  Visio-like applications in SVG/Canvas/VML, the investment required to do it  with flash technology is definitely worthwhile. Unfortunately, Flash does not  support the interpreted model, so Web developers will have to fully jump into  the Flash development model and tools, which can be relatively high barriers of  entry, especially for small visual components (e.g., Charting). There are some  interesting Flash SVG libraries (e.g., <a href="http://code.google.com/p/sgweb/">sgweb</a>) which allow Web developers to  use Flash to rendSVG renderer and the browser JavaScript VM to run the scripts, however this comes at a performance cost.</p>
<h3>File handling <small>(Flash)</small></h3>
<p><strong>File handling has always been completely left-out</strong> by the different  Open Web standardization and implementer groups. Building an effective  experience for accessing local files through a Web browser has always been  challenging, to say the least. Even the most modern browsers still have the 1995  simple file-input component which allows for the selection of only one file at  a time. Flash, while far from being perfect, does add some nice features in terms  of this realm, such as multiple file selections and, more importantly, a way to  read selected files of clients before sending them to the server.  Unfortunately, enterprise Web applications would really benefit from file drag  &amp; drop support from and to the desktop (and File Explorer), but, somehow,  this feature is always given a very low priority by the various decision makers  (or is somehow labeled as a security hazard). Alternatively, you can use Java  technology, as does Facebook for their photo uploader, which gives almost  complete file-system control for signed applets (note: somehow, it feels kind  of strange to write the word “applet” in 2009). Advanced clipboard support is  also another neglected requirement.</p>
<h3>Video &amp; Audio Playback <small>(Flash)</small></h3>
<p>Two of HTML 5’s big new features, besides off-line support, are  the video and audio tags. However, there still lot of discussion about the  support format of video tags. One of the biggest issues is that the <strong>best video  formats are not royalty free</strong>, and, while commercial vendors such as Adobe, Microsoft,  and Google are willing to pay the video tax for their users, the open source  community finds itself in a catch-22 situation. So, from an application  developer standpoint, Flash is by far the best option to bring high quality  video and audio to your application. With the latest support of H.264/mp4 video  support of Flash, there is no good reason to really look elsewhere for now.</p>
<h3>Video &amp; Audio Recording <small>(Flash)</small></h3>
<p>I am splitting out media playback from recordings because,  if they are not split, the later tends to be forgotten. It’s difficult to  believe, but, in the 2-way Web era, the big promoters of <strong>Open Web technologies  have no implementations or plans to support Web Video and Audio recording and  uploading</strong>. Luckily, Adobe Flash has a pretty mature solution to this need, and  while they have not opened the code, they have <a href="http://www.adobe.com/devnet/rtmp/">opened the APIs and protocol</a>s to  allow developers to freely use the Flash player as a video recording device  (see <a href="http://osflash.org/red5">Red5</a> for an open source alternative  to Adobe Flash Media server).</p>
<p>So, as can be seen, there is no one size fits all  technology. It depends on the application requirements you might need to use multiple  technology sets. Obviously, as a technology vendor or advocate your goal is to build  and promote your technology for as many scenarios as possible, however, <strong>as an  application developer</strong>, your only goal should be to ensure the success of your  application, <strong>no matter the technology</strong> you end up using or switching to. Developers  should rationally and objectively evaluate each of the technologies before  investing too much time and money in any one of them. Also, avoiding over-hyped  terms such as RIA and Social Network when defining application requirements  will go a long way to help in terms of focusing on what really matters to  users.</p>
<p>If you liked this article, a <a href="http://twitter.com/?status=To%20Flash%20or%20to%20Open%20Web%20http://bit.ly/BqcA9">re-tweet</a> is greatly appreciated.</p>
<p><small>If you are in the midst of choosing your technologies for  your next rich Web application, do not hesitate to contact me at <a href="mailto:jeremy.chone@gmail.com">jeremy.chone@gmail.com</a>. (I provide  everything from free advice to complete rich Web architecture and strategy consulting  and services.)</small></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.bitsandbuzz.com%2Farticle%2Fto-flash-or-to-open-web%2F&amp;linkname=To%20Flash%20or%20to%20Open%20Web"><img src="http://www.bitsandbuzz.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.bitsandbuzz.com/article/to-flash-or-to-open-web/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Compiled Web vs. Interpreted Web</title>
		<link>http://www.bitsandbuzz.com/article/compiled-web-vs-interpreted-web/</link>
		<comments>http://www.bitsandbuzz.com/article/compiled-web-vs-interpreted-web/#comments</comments>
		<pubDate>Thu, 30 Apr 2009 17:57:01 +0000</pubDate>
		<dc:creator>Jeremy Chone</dc:creator>
				<category><![CDATA[Architecture]]></category>

		<guid isPermaLink="false">http://www.bitsandbuzz.com/?p=168</guid>
		<description><![CDATA[Software  technologists tend to learn by oscillating. We never arrive directly at the  right solution; we just come closer to it by going back and forth. We always  think (or like to think) that our current solution is correct; only to realize,  some years later, that we overshot and need to [...]]]></description>
			<content:encoded><![CDATA[<p>Software  technologists tend to <strong>learn by oscillating</strong>. We never arrive directly at the  right solution; we just come closer to it by going back and forth. We always  think (or like to think) that our current solution is correct; only to realize,  some years later, that we overshot and need to take a few steps back. The evolution  of the software application model is a great example of this syndrome. Every  technologist knows about the three main application model phases—Mainframe, Client/Server,  and Web [1.0]—and many of them think they know what the next phase will be. In  fact, two models are currently being promoted. In order to better understand the  current trend, it is important to first understand the three original model  phases. </p>
<h3>1) Mainframe</h3>
<div title="Compiled vs. Interpreted web" style="background-image:url(/images/img-compiled-vs-interpreted-web.png);background-position:7px -10px;height:280px;width:250px;float:right"></div>
<p>The first  application model was the mainframe;  the  <strong>client was simply a screen</strong> (typically green) and a keyboard that could display  and send characters back and forth through a network. The server had all the definitions  of the screens (i.e. User Interface), application logic, and data, and was  communicating with the client by sending characters (which represented the UI  and data) back and forth. </p>
<p>This approach  had the benefit of being relatively simple, cost effective to scale, and was easy  to manage because the application could be centrally managed. The limitation  was obviously that the client’s lack of richness limited the type of  application that could be offered. For example, a Google Map on a green screen  would have been a challenge to implement. </p>
<p><span id="more-168"></span></p>
<h3>2) Client/Server</h3>
<div title="Compiled vs. Interpreted web" style="background-image:url(/images/img-compiled-vs-interpreted-web.png);background-position:-252px -10px;height:280px;width:250px;float:right"></div>
<p>The second  application model came with the popularization of personal computers by IBM,  Microsoft, and Apple. Now that users were able to have actual processing and  display power on their desktop, the application UI and the logic could reside  on the client side, while the data could reside either locally or remotely on  servers. <strong>The application UI and logic were usually packaged and optimized (i.e.  compiled), and had to be physically installed on the client side</strong>. When the user  needed a new application or a new version of the application, s/he had to  explicitly acquire and install the new application or upgrade package. In this  scenario, the server’s responsibility was to synchronize data. </p>
<p>The benefit was  that new applications could take advantage of Moore’s law on both ends of the  network, which consequently allowed for a wide variety of applications, such as  word processing, CAD/3D tools, and games, just to name a few. </p>
<p>The downside was  that the application life cycle (e.g., installs and upgrades) required the user’s  intervention, making some application scenarios relatively expensive to deploy  and manage. </p>
<h3>3) Web</h3>
<div title="Compiled vs. Interpreted web" style="background-image:url(/images/img-compiled-vs-interpreted-web.png);background-position:-515px -10px;height:280px;width:250px;float:right"></div>
<p>Then came the  Web; at first, it was mostly used to access (i.e. browse) content. However,  through its simplicity and network-centric characteristics, it quickly became a  very effective way to deploy networked-based applications. The model was  similar to that of the Mainframe, where <strong>the server sent UI instructions to the client</strong>.  But this time, the client could do much more; although still relatively  primitive, the Web model had some extended UI elements that included image,  text, and input fields, and even allowed the payload to carry some logic (i.e.  JavaScript) that would be interpreted and run on the client side. </p>
<p>Although not as  rich as the Client/Server application, the benefits of the Web were  unparalleled when it came to deploying applications over the network. The fact  that <strong>the server had complete control of all aspects of the application—UI, logic,  and data—</strong>made this application model a genuine standard for Internet  applications. </p>
<p>However, there were  two disadvantages to this model. First, the UI primitives were not as rich as  its Client/Server counterpart, making the appearance and interaction of Web  applications less competitive. Luckily, the Web had a very inclusive  architecture, and allowed plug-ins vendors, such as Sun and Adobe, to extend  the Web primitives with capabilities such as video and audio. Second, the  application granularity was the screen (i.e. page), meaning that each user  interaction required a screen refresh that updated the UI, logic, and data simultaneously.  While the single screen model was easy for developers to understand, it made  highly interactive applications quite a challenge to build, and often resulted  in a poor or confusing user interface experience. </p>
<h3>4) ???</h3>
<p>So, where are  we now? What is the fourth phase? Currently, there are two possible directions:  the Compiled Web and the Interpreted Web. </p>
<p> </p>
<div title="Compiled vs. Interpreted web" style="background-image:url(/images/img-compiled-vs-interpreted-web.png);background-position:-107px -334px;height:336px;width:500px;"></div>
</p>
<h4>4.1) Compiled Web</h4>
<p>The <strong>Compiled  Web model</strong> is, in a way, the <strong>Client/Server model inside a browser</strong>. First  introduced by Java, with Applets, and now being revived with Adobe Flash/Flex,  the concept is to <strong>compile all the application user interfaces and logic</strong> into one  or more packages (.jar for Java, .swf/.swc for Flash) that will be downloaded  and run by the client; this time, inside a Web browser. This model is often  based on browser plug-ins such as Sun Java or Adobe Flash, and usually relies on  typed and object-oriented languages like Java or ActionScript 3. Such  applications <strong>communicate mainly with servers</strong>, as the Client/Server did, <strong>in  order to synchronize data or to call Web services</strong>. </p>
<p>The advantage of  this approach is that it offers Client/Server developers a very familiar  application model while allowing the end-result application to leverage some of  the Web deployment characteristics. The other significant benefit is that  browser plug-ins such as Java, Flash, and Microsoft SilverLight extend a browser’s  capabilities with video, audio, 2D/3D apis, and threading (for Java/<a href="http://javafx.com/">JavaFX</a>), allowing  applications to take full advantage of the client’s computer processing and  display power. </p>
<p>However, the <strong>Compiled  Web model does not fully take advantage of the dynamic characteristics of the Web</strong>. By  fixing the UI definition and behavior at the time of compilation (i.e., design  time), the Compiled Web model <strong>removes the server’s ability to fully participate  in the UI generation and orchestration</strong>, which could be limit many Web  applications, such as model-driven applications. Also, this packaging phase  reduces the application’s life-cycle flexibility since any update or  enhancement will require a large part of the application, if not all of it, to  be rebuilt and redeployed. While modularization is possible, modules have to be  carefully thought-out; once designed, they are relatively fixed.</p>
<p>There is also a  <strong>misunderstanding about performance</strong>, which asserts that because a compiled code  runs faster than an interpreted code, a Compiled Web application performance  must be greater than a regular Interpreted Web application. While theoretically  correct, this reasoning does not take into consideration the on-demand nature  of the <strong>Web</strong>, whose <strong>applications are expected to be instantly accessible</strong> from several  entry points. The compiled approach is not suitable for this requirement because  it requires the entire application (or large parts of it) to be downloaded  before anything can be displayed to the user. This is retrograde from the Web application  model, which allows a more organic interaction in which only the required  resources for a specific interface (i.e. a screen) need to be downloaded. As a  result of this limitation, loading progress animation has become a very common  experience for many Compiled Web-style applications.</p>
<h4>4.2) Interpreted Web</h4>
<p>On the other  hand, the Interpreted Web, is just the natural evolution of the traditional Web  application model with an <strong>extended</strong> set of <strong>user interface</strong> constructs and  <strong>capabilities</strong>, as well as an <strong>asynchronous way</strong> (i.e., AJAX) <strong>to send requests</strong> and to  recover resources over the network without requiring a screen refresh. This  AJAX capability, coupled with the complete dynamicity of Web technologies,  where any part of the application such as UI structure, UI style, logic, and  data can be dynamically updated, offering limitless architecture possibilities. </p>
<p>This approach still  leverages all the benefits of the Web model, while extending the user interface  richness and breaking down the page granularity to virtually any piece (UI, logic,  and data) of the application. This allows a wide spectrum of application styles,  from a single page style (<a href="http://docs.google.com/">Google Docs</a>) to a page-based style with highly interactive  components (Facebook or SalesForce.com). By allowing the server to be a  complete part of all aspects of the application (UI, logic, and data), this  model is an ideal approach for model-driven applications that require the user  interface to be dynamically generated from the server, as well as large suites  of applications such as Google Apps or Facebook. Also, <strong>the extended granularity  offers unparalleled application life cycle agility</strong>. Upgrading or enhancing an  application only requires updating of the necessary pages or resources of the  application, and the user will only download these modified resources when he  requests the updated interface. </p>
<p>The <strong>downside</strong> to  all of this is that browsers <strong>still have a limited set of UI capabilities</strong>. For  example, video and audio still require third party plug-ins (which usually rely  on a different application model); and 2D/drawing apis are still cumbersome (no  DOM for Canvas and not-as-HTML-friendly SVG). Thanks to the Web-inclusive  architecture, it is relatively easy to embed plug-in components for these  advanced functionalities (i.e. charting, video, audio, and drawing), although  they do not always blend very well with the Web model.</p>
<p></p>
<p>Now, to add some  confusion to the mix, it is possible to implement Compiled Web framework with  interpreted technologies and vice versa. <a href="http://en.wikipedia.org/wiki/Google_Web_Toolkit">Google GWT</a> is a perfect example of such hybrid model by exposing a Swing API to the developer and deploying HTML/Javascript code. The reverse can also  be done in Java/JavaFx by interpreting XML UI elements (e.g., <a href="http://www.nexaweb.com/home/us/index.html@cid=2295.html">Nexaweb XAL technology</a>) and using a scripting language like Groovy or  JavaScript/Rhino. Interestingly enough, <strong>SilverLight is</strong> already a <strong>hybrid</strong> of the  two models because it supports dynamic and compiled languages via the .Net CLR  technologies and allows XAML to be dynamically evaluated. Unfortunately, it is harder  to have an Interpreted Web architecture using Flash technology since, for  business and performance reasons, Adobe seems to have rejected the interpreted model  by making most of their technologies—ActionScript 3, Flex, FXG—compiled centric:  no evaluations and no runtime MXML (you can build your own, but you are up for a ride). (see also: <a href="http://www.andersblog.com/archives/2008/09/flash_on_the_be.html">Why FXG is not based on SVG</a>).</p>
<h3>Which one?</h3>
<p>So, which one  is better? Which one should you base your application on? Well, it depends on what  type of application you want to build and what skills you have available. </p>
<p>If you want to  make a <strong>desktop application</strong> and deploy it over the web, the <strong>Compiled Web  approach might be a good solution</strong>. This is also true if your engineering team has  strong Client/Server development expertise (i.e. Windows MFC, Swing, etc.). Using  a modern Compiled Web framework, such as Flash/Flex, might be a good path, because  Open Web (i.e. Html/CSS/Javascript/SVG/Canvas) development could be frustrating  for non-Web developers.</p>
<p>On the other  hand, if you want to do a <strong>rich Web application</strong> that leverages as many Web  characteristics as possible, and <strong>most of the logic needs to be on the server</strong> side, the <strong>Interpreted Web approach will give you unparalleled flexibility and  functionality</strong>.</p>
<p>The good news  is that if you choose the Interpreted Web model as your main framework, you can  always add compiled-based components. YouTube or SalesForce.com are good  example of such an approach. However, the reverse is much harder, if not  impossible. </p>
<p>This  was a relatively long post, but was the reflection of many years working on the  subject. </p>
<p>If you are in the midst of designing  your rich Web application architecture and would like <strong>third-party validation  and advice, I would be more than happy to offer an hour or so</strong> (free of charge) over  the phone (i.e. Skype). Just email me at <a href="mailto:jeremy.chone@gmail.com">jeremy.chone@gmail.com</a> </p>
<p></p>
<div class="update">
<h3>Updates</h3>
<ul>
<li><span class='date'>2009-05-28:<span> <a href="http://www.theregister.co.uk/2009/05/28/google_on_web_development/">Google: &#8220;The Internet is the right programming model&#8221;</a></li>
</ul>
</div>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.bitsandbuzz.com%2Farticle%2Fcompiled-web-vs-interpreted-web%2F&amp;linkname=Compiled%20Web%20vs.%20Interpreted%20Web"><img src="http://www.bitsandbuzz.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.bitsandbuzz.com/article/compiled-web-vs-interpreted-web/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>Flying Pixels</title>
		<link>http://www.bitsandbuzz.com/article/flying-pixels/</link>
		<comments>http://www.bitsandbuzz.com/article/flying-pixels/#comments</comments>
		<pubDate>Wed, 13 Aug 2008 16:33:41 +0000</pubDate>
		<dc:creator>Jeremy Chone</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[Web2.0]]></category>

		<guid isPermaLink="false">http://www.bitsandbuzz.com/?p=43</guid>
		<description><![CDATA[


  
    

  With the emergence of new technologies such as AJAX, Flash,  and Silverlight, and popular applications such as Google Map and iPhone, the  temptation for developers to fully and deeply animate their upcoming  applications has become almost irresistible. 



While slick animations and transitions are certainly [...]]]></description>
			<content:encoded><![CDATA[<table>
<tr>
<td valign="top">
  <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" width="150" height="100" hspace="0" vspace="0" align="left"><param name="movie" value="/images/Flying-Pixel.swf" /><param name="quality" value="high" /><embed src="/images/Flying-Pixel.swf" width="150" height="100" hspace="0" vspace="0" align="left" quality="high" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash"></embed></object><br />
  <img src="images/Flying-Pixel.png"  width="150" height="100" class="notv" />  </td>
<td valign="top">
  With the emergence of new technologies such as AJAX, Flash,  and Silverlight, and popular applications such as Google Map and iPhone, the  temptation for developers to fully and deeply animate their upcoming  applications has become almost irresistible. </p>
</td>
</tr>
</table>
<p>While slick animations and transitions are certainly useful  for emotionally driven applications, such as car configurators, and some  applications or components such as Google Map and charting, they should not be  used as a substitute for a good interactive design. Application developers need  to realize that these animations and transitions come at an extra design and  development cost (no matter what tool they are using).  </p>
<p><span id="more-43"></span></p>
<p>In fact, the most successful and influential Internet  consumer applications (e.g. <a href="http://www.yahoo.com/" target="bb">Yahoo</a>, <a href="http://www.ebay.com/" target="bb">eBay</a>, <a href="http://www.amazon.com/" target="bb">Amazon</a>, <a href="http://www.craigslist.com/" target="bb">Craigslist</a>, <a href="http://www.facebook.com/" target="bb">Facebook</a>,  <a href="http://www.friendfeed.com/" target="bb">FriendFeed</a>, and <a href="http://www.yokway.com/" target="bb">YokWay</a>) use animations and transitions relatively lightly.</p>
<p>In the desktop and mobile arena, <strong>Apple</strong> has become (and probably always has been) the most famous and  admired <strong>pixel maestro</strong>. However, it  is important to note that <strong>screen  orchestration is a new art</strong> and comes at a cost. Even in Apple’s case,  flying pixels come with a feature cost, whereas iPhone users can very elegantly  scroll their contacts but cannot search them, and can slide from application to  application but cannot cut and past between them. </p>
<p>Obviously, the point here is not that including animations  and transitions is a bad practice, but that the animations and transitions need  to be carefully and thoughtfully considered and planned. So, here are the good,  the bad, and the five rules about flying [your pixels]: </p>
<h3>The good </h3>
<ul>
<li><strong>Natural  Feel:</strong> In the real world, things do not disappear and reappear as they used  to do on computer and mobile screens. As shade and gradient are making shapes  easier on the eye, animations and transitions are useful techniques to bring a  more natural feel to the application.</li>
<li><strong>Visual Continuity:</strong> Good animations and transitions for some types of information can dramatically  improve their access (e.g., maps and multi-level charting). </li>
<li><strong>Perception:</strong> Perception is everything, and nowadays a couple of flying pixels can go a long  way toward obtaining some good marketing/user buzz and management visibility.  iPhone without the flying pixels would not be iPhone.<strong></strong></li>
</ul>
<h3>The bad</h3>
<ul>
<li><strong>Distraction:</strong> Users can be overwhelmed by too many flying and flashing pixels, and developers  can spend too much time animating them. The order of priorities should be:  first, interaction design; second, visual design; and finally, “orchestration  design.”</li>
<li><strong>Perception:</strong> Cool flying pixels might give a false sense of design quality when, in fact, they  can hide some serious design flaws or even deteriorate the real use of the  application.</li>
<li><strong>Costs:</strong> Flying is not free. First you need your team to learn new APIs, tools, and,  sometimes, languages, and secondly, you need to acquire good screen  orchestration design skills. Making moving parts feel natural is not as easy at  it might seem (even with the right tools and APIs)</li>
</ul>
<h3>5 rules about flying [your pixels]:</h3>
<ul type="disc">
<li>Hire a pilot</li>
<li>Fly when you       need to, not when you can. </li>
<li>Fly from A to B,       not A to A. </li>
<li>Don’t fly too       high &#8212; it might suck out all your oxygen.</li>
<li>Don’t forget to       land.</li>
</ul>
<p>&nbsp;</p>
<p>My belief is that animations and transitions are like  lipstick; the good ones are the ones you do not notice… except if you are  selling lipstick, I guess. </p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.bitsandbuzz.com%2Farticle%2Fflying-pixels%2F&amp;linkname=Flying%20Pixels"><img src="http://www.bitsandbuzz.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.bitsandbuzz.com/article/flying-pixels/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Service Oriented Platform: 4 Modes</title>
		<link>http://www.bitsandbuzz.com/article/service-oriented-platform-4-modes/</link>
		<comments>http://www.bitsandbuzz.com/article/service-oriented-platform-4-modes/#comments</comments>
		<pubDate>Fri, 22 Feb 2008 19:19:32 +0000</pubDate>
		<dc:creator>Jeremy Chone</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Concept]]></category>

		<guid isPermaLink="false">http://www.bitsandbuzz.com/2008/02/22/service-oriented-platform-4-modes/</guid>
		<description><![CDATA[Over the last few years, we have witnessed the emergence of a new type  of software platform &#8211; the Service Oriented Platform (SOP). The SOP concept is to offer an application platform as a network service  (inside or outside an enterprise firewall), providing a centralized runtime to  execute and manage distributed or [...]]]></description>
			<content:encoded><![CDATA[<p>Over the last few years, we have witnessed the emergence of a new type  of software platform &#8211; the Service Oriented Platform (SOP). The SOP concept is to offer an application platform as a network service  (inside or outside an enterprise firewall), providing a centralized runtime to  execute and manage distributed or centralized applications. </p>
<p>SOP services can range from application aggregation, presentation,  linking (e.g, Mashup), provisioning, componentization, and context augmentation  (e.g., Social Graph and common application data). As SOPs mature, it would not  be surprising to see these platforms offer most, if not all, of the traditional  application platform services in a service-oriented manner, such as application  testing, versioning, data migration, and much more. </p>
<p>In the consumer space, the best SOP examples would be <a href="http://developer.facebook.com/" target="bb">Facebook</a>,  <a href="http://code.google.com/apis/opensocial/" target="bb">OpenSocial</a>, and <a href="http://www.ning.com/about/features.html" target="bb">Ning</a>. In the enterprise, a good example would be <a href="http://www.salesforce.com/developer/" target="bb">SalesForce.com</a>  (including their latest <a href="http://www.salesforce.com/platform/" target="bb">Force.com</a> addition) and some of the newer smaller  players such as <a href="http://www.techcrunch.com/2006/10/11/coghead-goes-live-build-applications-visually/" target="bb">Coghead</a>, <a href="http://www.techcrunch.com/2006/03/11/dabbledb-online-app-building-for-everyone/" target="bb">DabbleDB</a>, and <a href="http://www.techcrunch.com/2008/02/18/bungee-connect-launches-ambitious-new-online-development-product/" target="b">BungeeConnect</a>. Note that SOP solutions  can be offered as a hosted service (<strong>Platform as a Service</strong>, aka <strong>PaaS</strong>), or can be  packaged as a product (not as common yet). In many ways, enterprise portal  architecture can be considered the SOP ancestor.</p>
<p>We can identify four distinct but complementary main SOP access modes.  Most SOP providers (such as Facebook and SalesForce.com) offer more than one  access mode. Others, like OpenSocial, have thus far focused only on one. </p>
<p>Below is a simplified visualization of these modes and their  corresponding descriptions.</p>
<p align="center"><img src="/images/imgSOP4Modes.png" alt="SOP 4 Modes" width="513" height="1011" /></p>
<p><span id="more-35"></span></p>
<h3>A) Proxy Mode:</h3>
<p>In this mode, the SOP is in  between the user-browser and the application, and proxies all browser requests  to the applications. The best known example of this model is the <a href="http://wiki.developers.facebook.com/index.php/FBML" target="bb">Facebook FBML</a>  application model. </p>
<p>Here is the simplified application  lifecycle for the SOP Proxy mode: </p>
<ol>
<li>Each page request goes through the SOP server, which  forwards the request to the application with some additional SOP context (e.g.,  Identification and Social Graph information). </li>
<li>The application then returns the requested page to the  SOP server in a specific presentation format (e.g., FBML for Facebook). The SOP  server then translates the “SOP-formatted page” into a standard HTML/AJAX  format for the browser to read. </li>
</ol>
<p>&nbsp;</p>
<p>This mode allows developers to focus  on the content of the application while <strong>reusing</strong> pre-built SOP <strong>components</strong> and  <strong>delegating presentation</strong> to the SOP server.</p>
<p>The main caveat of this approach is  performance, since each page request [usually] requires an additional  http-request to get the result back to the user. Another caveat is the SOP  dependence. Usually, this model also requires applications to output a proprietary  XML (e.g., FBML and SNML), which <strong>limits application portability</strong>. </p>
<h3>B) iFrame Mode:</h3>
<p>In this mode, the SOP server is  between the browser and the application only at initialization time, and all  subsequent application users’ interactions are forwarded directly to the  application (usually <strong>using the browser’s iFrame client-sandboxing </strong>mechanism).  This is commonly known as the Facebook “iFrame mode,” or the not-yet-released  Google OpenSocial “<a href="http://code.google.com/apis/gadgets/docs/fundamentals.html#URL" target="bb">type=URL.</a>” This mode also requires the SOP server to have a  strong set of REST/SOAP APIs, since this will be the only way for the  application to access SOP context information (e.g., Social Graph). </p>
<p>  Here is the simplified application  lifecycle for the iFrame mode: </p>
<ol>
<li>When a user clicks on the application page, the SOP server  initializes the application and returns an HTML page to the browser with an  iFrame pointing directly to the application. </li>
<li>Every subsequent user’s interaction with the  application will be in the context of the applications, as if the application  had its own browser window. </li>
</ol>
<p>This mode enables full user interface  control and maximum application portability. However, developers will not be  able to use the SOP presentation and component services, and will have to  <strong>re-implement common components and look &amp; feel</strong>. </p>
<p>Note: To my knowledge, most Facebook  applications are using the Proxy mode mainly for to avoid these two caveats. </p>
<p>&nbsp;</p>
<h3>C) Client-Mashup Mode:</h3>
<p>Another mode similar to the iFrame  mode is the Mashup mode, which executes the application on the client side (in  JavaScript) by providing AJAX APIs to get data from the SOP server (i.e., SOP  Context) and the application server. </p>
<p>Here is the simplified application  lifecycle for the Client-Mashup mode: </p>
<ol>
<li>&nbsp;When a user clicks on the application page or  component, the SOP server initializes the application and returns the HTML and  JavaScript content for the browser to execute. </li>
<li>The application (JavaScript) code can make AJAX calls  to the applicationaccess content and methods. </li>
<li>A JavaScript API is also provided to the application to  access SOP data and methods. </li>
</ol>
<p>For heavy JavaScript developers, this  approach can be very attractive. It also forces the application to take maximum  advantage of the AJAX  model and offer a consistent way to access SOP and application data and  methods. It is a <strong>common and convenient means for developing widgets</strong> (note:  OpenSocial is based on the Google Gadgets application model).</p>
<p>However, for full applications, this  approach can be a little too <strong>JavaScript-heavy and limits portability</strong>. It also  requires the developer to re-implement some basic browser functionalities, such  as page navigation, since each user click will need to be handled in  JavaScript. </p>
<h3>D) Server-Embedded Mode </h3>
<p>The Server-Embedded SOP mode is probably the  most involved from an SOP implementation standpoint. In this mode, the SOP  server stores, manages, and executes the application codes and data. This  approach usually requires the SOP server to provide a browser interface to  develop, test, and manage the application. In the consumer market, <a href="http://www.ning.com/" target="bb">Ning</a>,  <a href="http://www.coghead.com" target="bb">Coghead</a>, <a href="http://dabbledb.com/" target="bb">DabbleDB</a>, and <a href="http://www.bungeeconnect.com/" target="bb">BungeeConnect</a> are good examples of such a model, as well  as Force.com on the enterprise side. </p>
<p>This mode works very similarly to the  Proxy mode, except that now the application runs in the process (theoretically  speaking) of the SOP server. </p>
<p>&nbsp;</p>
<p>So, here is a first pass at the Service Oriented Platform concepts. SOP  has already made a significant impact on the software industry, as we have seen  with Facebook and SalesForce.com. It is probably safe to assume that <strong>SOP will become  even more relevant</strong> to the consumer and enterprise software market as time goes  on. From a theoretical architecture point of view, it is interesting to see the  <strong>lines between online, hosted, distributed, and centralized being blurred</strong>. </p>
<p>Note to self: Probably a good time to update my  <a href="http://www.bitsandbuzz.com/2006/01/04/buzzpad-20-beta/">Buzzpad</a>.</p>
<p>Related Links: </p>
<ul>
<li><a href="http://blog.widgetbox.com/2007/11/facebook-v-open.html" target="bb">Facebook v. OpenSocial from <strong>Widget Box</strong></a></li>
<li><a href="http://www.iosart.com/blog/2007/11/03/opensocial-and-facebook-platform-side-by-side-comparison/" target="bb">OpenSocial and Facebook Platform side by side comparison from <strong>Iosart blog</strong></a></li>
<li><a href="http://blogs.zdnet.com/BTL/?p=8023" target="bb">Bungee Labs opens developer platform-as-a-service from <strong>Larry Dignan</strong></a></li>
</ul>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.bitsandbuzz.com%2Farticle%2Fservice-oriented-platform-4-modes%2F&amp;linkname=Service%20Oriented%20Platform%3A%204%20Modes"><img src="http://www.bitsandbuzz.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.bitsandbuzz.com/article/service-oriented-platform-4-modes/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

