<?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>Über Software &#187; Uncategorized</title>
	<atom:link href="http://www.uebersoftware.com/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.uebersoftware.com</link>
	<description>Opinions and thoughts on Software and Technology.</description>
	<lastBuildDate>Thu, 29 Apr 2010 06:04:30 +0000</lastBuildDate>
	
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>UX and App Design at Google &#8211; Takeaways</title>
		<link>http://www.uebersoftware.com/2010/02/ux-and-app-design-at-google-takeaways/</link>
		<comments>http://www.uebersoftware.com/2010/02/ux-and-app-design-at-google-takeaways/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 13:32:36 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Web2.0]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[UX]]></category>

		<guid isPermaLink="false">http://www.uebersoftware.com/?p=206</guid>
		<description><![CDATA[Yesterday I was at an interesting UX knowledgeshare event where Simon Raess spoke about user experience and application design at Google. Google being an engineering company at heart they arguably only put in the recent years more weight on Ux and Design. Also nowadays Google employs only 200 designers. Being an engineer myself, I expected [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday I was at an interesting <a href="http://internet-briefing.ch/index.cfm?page=119770&amp;cfid=39657541&amp;cftoken=82013183">UX knowledgeshare event</a> where <a href="http://www.google.co.uk/search?q=Simon+Raess">Simon Raess</a> spoke about user experience and application design at Google. Google being an engineering company at heart they arguably only put in the recent years more weight on Ux and Design. Also nowadays Google employs only 200 designers. Being an engineer myself, I expected to get some new insights from another perspective.</p>
<p>The talk was built around the first principle of Googles <a href="http://www.lgoogle.com/intl/en/corporate/tenthings.html">corporate philosophy</a> &#8220;Focus on the user and all else will follow&#8221;. Being the first principle it is the most important one, and prioritised in favor of other conflicting aspects when making a product. Among other things, this means that the first thougth when starting with a product is not how to make money but what do users want.</p>
<p>The execution of this philosophy was explained with an outline how the product process works.<br />
<a rel="attachment wp-att-208" href="http://www.uebersoftware.com/2010/02/ux-and-app-design-at-google-takeaways/dad/"><img class="alignnone size-medium wp-image-208" title="Focus on the user" src="http://www.uebersoftware.com/wp-content/uploads/2010/02/dad-300x207.png" alt="Focus on the user" width="300" height="207" /></a></p>
<p>Specifically for UX and design there are 4 interation phases Google follows:</p>
<p>1 Define                 4 Validate<br />
2 Research            3 Design</p>
<p>The first thing is the definition of the product, and gathering of ideas. This comes from various sources, like their 20% time, Market Needs, and others.</p>
<p>After there&#8217;s a clear product idea the research phase starts. Research here does most importantly mean: Going out to the user, talk to the user and get feedback. So very early in the process of creating a product Google already starts to gather feedback for a rough idea. It is important to get feedback from a representative group of users, the type of users that should use the product in the end. Later in the research phase they create abstract personas. Personas are a way to classify typical user groups with their interest, habits, jobs, daily activities, emotions etc.</p>
<p>The next phase is the Design phase, where the actual design happens in the following sequence: Information Architecture, Layout/Workflow, Interaction Model, Visual Design. The design and research phase is lead by a designer and a researcher which are in tight collaboration. The design and research goes over many interations until feedback from users start to get positive.</p>
<p>Only when the feedback from users is positive detail planning starts. Finally the Design is validated by users and Google employees when the product is first internally launched.</p>
<p>Some tools they use to gather user feedback are: eye tracking, Labs, before and after experience questions.</p>
<p>Quite interesting to me was: no single line of code is written until detail design is finished. However engineers are involved during the design process but it was not so clear to what level and for what tasks. For me it would have been interesting to get some more information on the collaboration between engineers and designers in the process. Other than that, great talk!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.uebersoftware.com/2010/02/ux-and-app-design-at-google-takeaways/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Initialise External Javascript in Page Fragments</title>
		<link>http://www.uebersoftware.com/2009/10/initialise-external-javascript-in-page-fragments/</link>
		<comments>http://www.uebersoftware.com/2009/10/initialise-external-javascript-in-page-fragments/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 19:03:27 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.uebersoftware.com/?p=136</guid>
		<description><![CDATA[In the last couple of hours I was contemplating around maintainable, performant and non-obstrusive Javascript on a project I am working on.
Following situation:
- Much Inline Javascript
- Many JS and CSS files referenced
- No Frontend Deployment/Build Process in place
- Some Javascript values are set at page generation time by Server Side code
- Webserver is not configured [...]]]></description>
			<content:encoded><![CDATA[<p>In the last couple of hours I was contemplating around maintainable, performant and non-obstrusive Javascript on a project I am working on.</p>
<p><strong>Following situation:</strong><br />
- Much Inline Javascript<br />
- Many JS and CSS files referenced<br />
- No Frontend Deployment/Build Process in place<br />
- Some Javascript values are set at page generation time by Server Side code<br />
- Webserver is not configured yet correctly for setting expires &amp; compression headers</p>
<p><strong>Problems with this:</strong><br />
- Maintainability and separation of concerns is an issue with lots of inline JS<br />
- Long Pageload because of many HTTP request<br />
- Webserver takes big hit for all the static content loading<br />
- Network is being stressed as well<br />
- Javascript Logic is unobfuscated/not minimised and visible to the world</p>
<p><strong>Tasks:</strong></p>
<ul>
<li>Externalize JS</li>
<li>Modularisation of JS Dependency Loading vs. all in one</li>
<li>Configuration of HTTP headers in Webserver</li>
<li>Identify Scripts / static content for CDN</li>
<li>Seamless Deployment/Build process from comfortable JS dev to the production code</li>
</ul>
<p>The &#8220;challenge&#8221; was to externalise the inline Javascript.</p>
<p>For modularisation there are <a href="http://getsprockets.org" target="_blank">several</a> <a href="http://www.nczonline.net/blog/2009/09/22/introducing-combiner-a-javascriptcss-concatenation-tool/" target="_blank">tools </a>to handle the dependency combination of Javascript files. Depending on the amount of Javascript and the usage metrics  you can as well just pack all in one. Of course there are <a href="http://www.hunlock.com/blogs/Supercharged_Javascript" target="_blank">many</a> <a href="http://carsonified.com/blog/features/webapps/serving-javascript-fast/" target="_blank">other</a> methods for combination and modularisation and you can as well just run your own method. So this is bascially just a matter of choosing the right tool / method and not that difficult. For compressing / minimisation the <a href="http://developer.yahoo.com/yui/compressor">YUI compressor</a> seems like state of the art.</p>
<p>Configuration of the correct headers is also just a &#8211; well &#8211; configuration task of setting meanigful caching control and expires headers and deflate compression for Apache2, so that the documents get compressed over the network. As for deploment and build process sprockets, ant or others are a valiable solution.</p>
<p>What I would like to share here is the solution for externalize Javascript that was initialised by server side code.</p>
<p>The basic idea builds upon<a href="http://www.dustindiaz.com/namespace-your-javascript/" target="_blank"> this post</a> by dustin diaz. So I am not gonna repeat his content instead if you are not familiar with private, public and privileged Objects in Javascript you might read his post first. As a starting point when combining multiple inline Javascript files we have to take care about namespaces.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">//just namespacing</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">function</span> registerNS<span style="color: #009900;">&#40;</span>ns<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
 <span style="color: #003366; font-weight: bold;">var</span> nsParts <span style="color: #339933;">=</span> ns.<span style="color: #660066;">split</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #003366; font-weight: bold;">var</span> root <span style="color: #339933;">=</span> window<span style="color: #339933;">;</span>
&nbsp;
 <span style="color: #000066; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i<span style="color: #339933;">=</span><span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i</pre></div></div>

<p>Ok so far so good, now we need to have a way initialise those external Javascript files with dynamic server-side variables:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">//initialise a namespaced object</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> MY <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> private_var<span style="color: #339933;">;</span>
	<span style="color: #003366; font-weight: bold;">function</span> private_method<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #006600; font-style: italic;">// do stuff here</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #009900;">&#123;</span>
                init <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>var1<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    private_var<span style="color: #339933;">=</span>var1<span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
		method_1 <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;method 1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
		method_2 <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span>private_var<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
MY.<span style="color: #660066;">init</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;hey you!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
MY.<span style="color: #660066;">method_1</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
MY.<span style="color: #660066;">method_2</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>That worked out as well. But there&#8217;s a but. Our javascript will be referenced externally and along with the <a href="http://developer.yahoo.com/performance/rules.html#external" target="_blank">YUI Performance rules</a> the script include tags will be at the bottom of the page. The initialisation code on the other hand is at the top of every page fragment/widget and might be executed at rendering time. To prevent timing problems the initialisation code therfore needs to configure an object that is already live:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">//global js config obj</span>
<span style="color: #003366; font-weight: bold;">var</span> runcfg <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Array<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//within html</span>
<span style="color: #003366; font-weight: bold;">var</span> a <span style="color: #339933;">=</span> runcfg<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;details&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Array<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
a<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;url&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;http://uebersoftware.com&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//external js</span>
<span style="color: #003366; font-weight: bold;">var</span> MY <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> private_var<span style="color: #339933;">;</span>
        <span style="color: #003366; font-weight: bold;">var</span> myconfig <span style="color: #339933;">=</span> runcfg<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;details&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #003366; font-weight: bold;">function</span> private_method<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #006600; font-style: italic;">// do stuff here</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #009900;">&#123;</span>
                init <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>var1<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    private_var<span style="color: #339933;">=</span>var1<span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
		method_1 <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span>myconfig <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;url&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">// usage</span>
MY.<span style="color: #660066;">method_1</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>This method allows us easy externalized the Javascript without much refactoring. The script code is namespaced and is still dynamically configurable.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.uebersoftware.com/2009/10/initialise-external-javascript-in-page-fragments/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
