<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Andy Li’s Blog - web usability design and engineering</title><link href="https://blog.onthewings.net/" rel="alternate"></link><link href="http://feeds.feedburner.com/tag/web-usability-design-and-engineering/feed/atom.xml" rel="self"></link><id>https://blog.onthewings.net/</id><updated>2010-02-19T20:55:00+08:00</updated><entry><title>Colorblink - An AIR app that simulates how color blind people see Flash and images</title><link href="https://blog.onthewings.net/2010/02/19/colorblink-an-air-app-that-simulates-how-color-blind-people-see-flash-and-images/" rel="alternate"></link><published>2010-02-19T20:55:00+08:00</published><updated>2010-02-19T20:55:00+08:00</updated><author><name>Andy Li</name></author><id>tag:blog.onthewings.net,2010-02-19:/2010/02/19/colorblink-an-air-app-that-simulates-how-color-blind-people-see-flash-and-images/</id><summary type="html">&lt;p&gt;&lt;img alt="Select color blind type from the menu." src="/files/2010/colorblink-demo.png"/&gt;&lt;/p&gt;
&lt;p&gt;Accessibility is a an important part of both web and game design. And
for web and game design, one of the popular tool is Flash. That means
very often you need to ensure accessibility in Flash. However there are
still not many tools available even for simple things like color …&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;img alt="Select color blind type from the menu." src="/files/2010/colorblink-demo.png"/&gt;&lt;/p&gt;
&lt;p&gt;Accessibility is a an important part of both web and game design. And
for web and game design, one of the popular tool is Flash. That means
very often you need to ensure accessibility in Flash. However there are
still not many tools available even for simple things like color blind
simulation… so I write my own:)&lt;/p&gt;
&lt;p&gt;&amp;gt;&amp;gt; &lt;a href="http://github.com/andyli/Colorblink/raw/master/Colorblink.air"&gt;download installer (.air)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It’s a very simple &lt;span class="caps"&gt;AIR&lt;/span&gt; app. You open it, drop a swf file on its window,
select the color blind type and that’s it.&lt;/p&gt;
&lt;p&gt;The inner of Colorblink is using a Pixel Bender filter, applying to the
whole application. The algorithm is just a color transform matrix, found
in &lt;a href="http://homepage.mac.com/lpetrich/ColorBlindnessSim/ColorBlindnessSim.html"&gt;a Java Color-Blindness Simulators&lt;/a&gt;. That simulator have more
simulation config, which I used only the simplest one.&lt;/p&gt;
&lt;p&gt;This is also my first time using a git repo. So &lt;a href="http://github.com/andyli/Colorblink"&gt;go to have a look&lt;/a&gt;,
see if you can fork it for more features.&lt;/p&gt;
&lt;p&gt;&lt;del&gt;One thing is, there is
problem loading Flex applications into Colorblink… I don’t know how to
read the loaded app’s default width and height and then resize it… So,
if you want to test your Flex app, &lt;a href="http://github.com/andyli/Colorblink/tree/master/src/net/onthewings/filters/"&gt;get the filter&lt;/a&gt; and apply it to
your app manually (can’t be easier).&lt;/del&gt;&lt;br/&gt;
Now you can load Flex swf or even html file! But the app wouldn’t
resize automatically since the size cannot be determined. If Colorblink
does not work for you, you can still always &lt;a href="http://github.com/andyli/Colorblink/tree/master/src/net/onthewings/filters/"&gt;get the filter&lt;/a&gt; and apply
it to your app manually (can’t be easier).&lt;/p&gt;
&lt;p&gt;Oh, yes, there is a simulation of what a dog sees… So, design some
game for your dogs in your free time…&lt;/p&gt;</content><category term="Flash"></category><category term="Flex"></category><category term="Pixel Bender"></category><category term="web usability design and engineering"></category></entry><entry><title>Deep Linking for AJAX</title><link href="https://blog.onthewings.net/2009/04/08/deep-linking-for-ajax/" rel="alternate"></link><published>2009-04-08T10:28:00+08:00</published><updated>2009-04-08T10:28:00+08:00</updated><author><name>Andy Li</name></author><id>tag:blog.onthewings.net,2009-04-08:/2009/04/08/deep-linking-for-ajax/</id><summary type="html">&lt;p&gt;I have just made a independent study on “deep linking for &lt;span class="caps"&gt;AJAX&lt;/span&gt;” for the
course Web 2.0 technology. Seems that most of the info on the web about
deep linking implementation are for Flash web site but not &lt;span class="caps"&gt;AJAX&lt;/span&gt;’s, so I
release my report and presentation slide here …&lt;/p&gt;</summary><content type="html">&lt;p&gt;I have just made a independent study on “deep linking for &lt;span class="caps"&gt;AJAX&lt;/span&gt;” for the
course Web 2.0 technology. Seems that most of the info on the web about
deep linking implementation are for Flash web site but not &lt;span class="caps"&gt;AJAX&lt;/span&gt;’s, so I
release my report and presentation slide here hoping can help somebody.&lt;/p&gt;
&lt;iframe allowfullscreen="" frameborder="0" height="356" marginheight="0" marginwidth="0" scrolling="no" src="//www.slideshare.net/slideshow/embed_code/1262036" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" width="427"&gt; &lt;/iframe&gt;
&lt;p&gt;&lt;div style="margin-bottom:5px"&gt; &lt;strong&gt; &lt;a href="https://www.slideshare.net/andy_li/deep-linking-for-ajax-presentation" target="_blank" title="Deep Linking For Ajax Presentation"&gt;Deep Linking For Ajax Presentation&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href="http://www.slideshare.net/andy_li" target="_blank"&gt;Andy Li&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;&lt;/p&gt;
&lt;hr/&gt;
&lt;h2&gt;What is Deep Linking&lt;/h2&gt;
&lt;p&gt;Deep Linking is a &lt;span class="caps"&gt;URL&lt;/span&gt; that point to a specific resource like a web page
or a file. User can access the resource directly through the &lt;span class="caps"&gt;URL&lt;/span&gt; without
further navigation (i.e.. bypassing “home” or “portal” page).&lt;/p&gt;
&lt;h2&gt;Why is Deep Linking Important&lt;/h2&gt;
&lt;p&gt;Deep linking is originally a build-in function of the web, enabling the
web pages to be interconnected, letting the users go to a specific
resource easily by clicking on the links from any web page. Without deep
linking, the web sites will become too separated and cannot be called as
a “web”.&lt;/p&gt;
&lt;p&gt;Moreover, deep linking is the basic requirement for bookmarking. Since
bookmarking is keeping the &lt;span class="caps"&gt;URL&lt;/span&gt; of a specific web page (or any other
resources), if the page itself do not have its own &lt;span class="caps"&gt;URL&lt;/span&gt;, there is no way
to bookmark it.&lt;/p&gt;
&lt;p&gt;Search engines, which index the web pages like we bookmark them, require
heavily on deep linking too. Search engines find the links on a page and
follow the links to index the pages. Texts or other resources that can
only be triggered to shown by script will be ignored by (most of the)
search engines. So deep linking has its value of &lt;span class="caps"&gt;SEO&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;To conclude, it is the matter of usability. Wherever the deep links are
presented, e.g.. bookmark menu, search results, they are more usable since
they are more likely to satisfy users’ needs and nearly all web-related
software works with deep links since it is the architecture of the web.&lt;/p&gt;
&lt;h2&gt;The Situation of &lt;span class="caps"&gt;AJAX&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Since the contents of &lt;span class="caps"&gt;AJAX&lt;/span&gt; sites are loaded by script in client side,
they do not own a &lt;span class="caps"&gt;URL&lt;/span&gt; by default. i.e.. There is no deep link to that
loaded content. It is a product of what &lt;span class="caps"&gt;AJAX&lt;/span&gt; intended to do: to prevent
reloading of the whole page.&lt;/p&gt;
&lt;p&gt;What is worse is when the user click the back button in the browser, the
page would not reload the previous content but go the page before
visiting the site. It is because the back button is implemented to track
the change of &lt;span class="caps"&gt;URL&lt;/span&gt; but not the change of content.&lt;/p&gt;
&lt;p&gt;Most of the time it does not matter since the loaded content is very
small and subtle, for example validation of forms or log in result or
hot posts. They are not the main content of the page so no deep link is
reasonable. But if there are some cases that the main content is loaded
by &lt;span class="caps"&gt;AJAX&lt;/span&gt;, deep linking should be implemented.&lt;/p&gt;
&lt;hr/&gt;
&lt;h2&gt;How to Implement Deep Linking for &lt;span class="caps"&gt;AJAX&lt;/span&gt;&lt;/h2&gt;
&lt;h3&gt;Low Level Concept&lt;/h3&gt;
&lt;p&gt;There is a trick that use ‘#’ in the &lt;span class="caps"&gt;URL&lt;/span&gt;. The ‘#’ is known as a hash,
which is originally used for links that link to the same page. For example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&amp;amp;lt;a href="#C4"&amp;amp;gt;See also Chapter 4.&amp;amp;lt;/a&amp;amp;gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The above link will link to the anchor tag with attribute ‘name’ equals
to ‘C4’. When clicked, the page will scrolled to the element.&lt;/p&gt;
&lt;p&gt;It is used for implementing deep linking for &lt;span class="caps"&gt;AJAX&lt;/span&gt; because the browser
would not refresh the page when the link is clicked.&lt;/p&gt;
&lt;p&gt;What we need to do is when the page loaded, check the &lt;span class="caps"&gt;URL&lt;/span&gt; to see if
there is any hash value, do the loading if needed. After that, listen
for the change of the hash in the navigation bar. When it is changed,
get the value and do the according operation.&lt;/p&gt;
&lt;p&gt;For the links, simply append some hash like ‘http://someURL/#info’ to
let JavaScript to detect the values.&lt;/p&gt;
&lt;p&gt;The above actions can be done trivially by using the following property:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;window.location.hash
&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;Use of Libraries&lt;/h3&gt;
&lt;p&gt;There are quite a few libraries for deep linking. They are already
stable and widely used in commercial projects. We can use these
libraries to avoid reinventing the wheel.&lt;/p&gt;
&lt;p&gt;I coded two minimal demos for the two libraries (which are different
from below), which can be viewed at
&lt;a href="/files/2009/deep-linking-for-ajax-demo/"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;SWFAddress (&lt;a href="http://www.asual.com/swfaddress/"&gt;http://www.asual.com/swfaddress/&lt;/a&gt;)&lt;/h4&gt;
&lt;p&gt;It is originally made for Flash, since Flash is facing the same deep
linking problem. The library is supporting both Flash and &lt;span class="caps"&gt;AJAX&lt;/span&gt;, sharing
the same core JavaScript to detect and change hash values.&lt;/p&gt;
&lt;p&gt;The most simple example is first link the library in head:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&amp;amp;lt;script type="text/javascript" src="swfaddress/swfaddress.js"&amp;amp;gt;&amp;amp;lt;/script&amp;amp;gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And then declare a function to handle the change of hash value and add
the listener.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;lt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nx"&gt;script&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"text/javascript"&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;gt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;handleChange&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;evt&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;evt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pathNames&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;'info'&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="c1"&gt;//load info page&lt;/span&gt;
&lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;evt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pathNames&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;'contact'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="c1"&gt;//load contact page&lt;/span&gt;
&lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="c1"&gt;//load default page&lt;/span&gt;
&lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;SWFAddress&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;SWFAddressEvent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CHANGE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;handleChange&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;lt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="err"&gt;/script&amp;amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;More examples can be found on
&lt;a href="http://www.asual.com/swfaddress/samples/"&gt;http://www.asual.com/swfaddress/samples/&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;History, JQuery plug-in (&lt;a href="http://plugins.jquery.com/project/history"&gt;http://plugins.jquery.com/project/history&lt;/a&gt;)&lt;/h4&gt;
&lt;p&gt;This is a the plug-ins written for jQuery.&lt;/p&gt;
&lt;p&gt;To use it, similar to SWFAddress, first link to the JavaScript file
after jQuery:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&amp;amp;lt;script type="text/javascript" src="jquery.js"&amp;amp;gt;&amp;amp;lt;/script&amp;amp;gt;
&amp;amp;lt;script type="text/javascript" src="jquery.history.js"&amp;amp;gt;&amp;amp;lt;/script&amp;amp;gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And then declare a function to handle the change of hash value. This
plug-in unlike SWFAddress, it do not auto listen the change of &lt;span class="caps"&gt;URL&lt;/span&gt;. So
we need to set up our own function to do so or as below bind the
function to the anchor tags.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;lt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nx"&gt;script&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"text/javascript"&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;gt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;pageload&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="c1"&gt;//load some page&lt;/span&gt;
&lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="c1"&gt;//load default page&lt;/span&gt;
&lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;ready&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
&lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="c1"&gt;// Initialize history plugin.&lt;/span&gt;
&lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;history&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pageload&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"a"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;live&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"click"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
&lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;attr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"href"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;charAt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;'#'&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;hash&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;attr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"href"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="nx"&gt;hash&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/^.*#/&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;history&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt;   &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="err"&gt;  &lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;lt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="err"&gt;/script&amp;amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;hr/&gt;
&lt;h2&gt;Limitation&lt;/h2&gt;
&lt;p&gt;Note that although using the above technique, the user can now bookmark
the deep link and using the ‘back button’ as normal, &lt;span class="caps"&gt;SEO&lt;/span&gt; problem is
still not solved. It is because the technique require use of JavaScript,
which is ignored by most of the search engines.&lt;/p&gt;
&lt;p&gt;The workaround is making a non-&lt;span class="caps"&gt;AJAX&lt;/span&gt; version of the web site. Not only it
can solve the &lt;span class="caps"&gt;SEO&lt;/span&gt; problem, it can provide a fall-back when JavaScript is disabled.&lt;/p&gt;
&lt;hr/&gt;
&lt;h2&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span class="dquo"&gt;“&lt;/span&gt;Deep Linking” in the World Wide Web, &lt;span class="caps"&gt;W3C&lt;/span&gt;&lt;br/&gt;
&lt;a href="http://www.w3.org/2001/tag/doc/deeplinking.html"&gt;http://www.w3.org/2001/tag/doc/deeplinking.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Deep Linking is Good Linking, useit.com&lt;br/&gt;
&lt;a href="http://www.useit.com/alertbox/20020303.html"&gt;http://www.useit.com/alertbox/20020303.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Deep Linking in Flash and &lt;span class="caps"&gt;AJAX&lt;/span&gt; Applications, Christian Cantrell&lt;br/&gt;
&lt;a href="http://weblogs.macromedia.com/cantrell/archives/2005/06/deep_linking_in.html"&gt;http://weblogs.macromedia.com/cantrell/archives/2005/06/deep_linking_in.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Unique URLs - Ajax Patterns&lt;br/&gt;
&lt;a href="http://ajaxpatterns.org/Unique_URLs"&gt;http://ajaxpatterns.org/Unique_URLs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;SWFAddress, Asual&lt;br/&gt;
&lt;a href="http://www.asual.com/swfaddress/"&gt;http://www.asual.com/swfaddress/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;History, JQuery Plug-in&lt;br/&gt;
&lt;a href="http://plugins.jquery.com/project/history"&gt;http://plugins.jquery.com/project/history&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Deep Linking, Wikipedia&lt;br/&gt;
&lt;a href="http://en.wikipedia.org/wiki/Deep_linking"&gt;http://en.wikipedia.org/wiki/Deep_linking&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="web 2.0"></category><category term="web usability design and engineering"></category></entry><entry><title>Meanings behind the fancy transition effects</title><link href="https://blog.onthewings.net/2009/03/02/meanings-behind-the-fancy-transition-effects/" rel="alternate"></link><published>2009-03-02T22:59:00+08:00</published><updated>2009-03-02T22:59:00+08:00</updated><author><name>Andy Li</name></author><id>tag:blog.onthewings.net,2009-03-02:/2009/03/02/meanings-behind-the-fancy-transition-effects/</id><summary type="html">&lt;p&gt;It is quite popular that websites have more and more “&lt;span class="caps"&gt;AJAX&lt;/span&gt; animation
effects”(which should be JavaScript animation effects actually…). Many
&lt;span class="caps"&gt;AJAX&lt;/span&gt; learners are obsessed with adding fancy animated effects on there
web page, and sometimes, adding it without thinking the particular
effect’s meaning, will actually confuse or disturb …&lt;/p&gt;</summary><content type="html">&lt;p&gt;It is quite popular that websites have more and more “&lt;span class="caps"&gt;AJAX&lt;/span&gt; animation
effects”(which should be JavaScript animation effects actually…). Many
&lt;span class="caps"&gt;AJAX&lt;/span&gt; learners are obsessed with adding fancy animated effects on there
web page, and sometimes, adding it without thinking the particular
effect’s meaning, will actually confuse or disturb the end users.&lt;/p&gt;
&lt;p&gt;In the following, I will follow &lt;a href="http://script.aculo.us/"&gt;script.aculo.us&lt;/a&gt;‘s effect naming. You
may see the live effects in its &lt;a href="http://wiki.github.com/madrobby/scriptaculous/combination-effects-demo"&gt;wiki&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There are quite a few animation effects that are common, like fade
in/out, blind up/down, slide up/down. They can be seen easily over the
web and their meanings are obvious: to bring things in or out. But there
is still some different among them.&lt;/p&gt;
&lt;p&gt;For &lt;em&gt;fade&lt;/em&gt;, the transition is much smoother then the others since there
is no moving part. It should be applied on things that do not need much
attention, like changing top banner’s background image, just let the
users focus on what they are reading.&lt;/p&gt;
&lt;p&gt;For &lt;em&gt;blinding/sliding&lt;/em&gt;, the sense of changing is stronger. One of their
special usages is to resize things, like panels. Since resizing panels
often leads to change of layout, if there is no transition, the user may
not be able to catch up with the movement of the page elements.&lt;/p&gt;
&lt;p&gt;Some less popular effects like puff, shake are more easily to be used wrong.&lt;/p&gt;
&lt;p&gt;For &lt;em&gt;puff&lt;/em&gt;, since the animation ends with zero alpha, some developers
may use it as disappearing effect, but that’s wrong. Since Mac &lt;span class="caps"&gt;OSX&lt;/span&gt; is
using puff for a visual effect on opening files/programs, many Mac user
may be confused if you use it on removing elements.&lt;/p&gt;
&lt;p&gt;For &lt;em&gt;shake&lt;/em&gt;, some developers may think that it can draw user’s attention
effectively. Really, but we should use it carefully since shaking will
cause the user not able to see the elements inside the shaking area
easily. So, it takes time to let the shake stop and refocus on the
element’s details and it may disturb the user’s work.&lt;/p&gt;</content><category term="web 2.0"></category><category term="web usability design and engineering"></category></entry><entry><title>Some research on JavaScript benchmark</title><link href="https://blog.onthewings.net/2009/02/16/some-research-on-javascript-benchmark/" rel="alternate"></link><published>2009-02-16T14:02:00+08:00</published><updated>2009-02-16T14:02:00+08:00</updated><author><name>Andy Li</name></author><id>tag:blog.onthewings.net,2009-02-16:/2009/02/16/some-research-on-javascript-benchmark/</id><summary type="html">&lt;p&gt;Since I am going to make a benchmark for ActionScript performance across
different browser/platform, I take a look into the JavaScript benchmark
to see if I can simply port one to be used in ActionScript.&lt;/p&gt;
&lt;p&gt;The most famous ones should be Apple’s &lt;a href="http://www2.webkit.org/perf/sunspider-0.9/sunspider.html"&gt;SunSpider&lt;/a&gt;, Google’s &lt;a href="http://v8.googlecode.com/svn/data/benchmarks/v3/run.html"&gt;V8
Benchmark Suite …&lt;/a&gt;&lt;/p&gt;</summary><content type="html">&lt;p&gt;Since I am going to make a benchmark for ActionScript performance across
different browser/platform, I take a look into the JavaScript benchmark
to see if I can simply port one to be used in ActionScript.&lt;/p&gt;
&lt;p&gt;The most famous ones should be Apple’s &lt;a href="http://www2.webkit.org/perf/sunspider-0.9/sunspider.html"&gt;SunSpider&lt;/a&gt;, Google’s &lt;a href="http://v8.googlecode.com/svn/data/benchmarks/v3/run.html"&gt;V8
Benchmark Suite&lt;/a&gt;, Mozilla’s &lt;a href="http://dromaeo.com/"&gt;Dromaeo&lt;/a&gt;. All the benchmarks are
compose of several test areas, basically including some basic JavaScript
operation test like Array manipulations, some more practical based test
like regular expression, ray-tracing etc.&lt;/p&gt;
&lt;p&gt;V8 Benchmark Suite consist 6 tests which has the least tests among the
three. But when I take a look into the source code, the testes are very
long. It even overrides Math.random() to a seeded random generator.&lt;/p&gt;
&lt;p&gt;SunSpider’s structure seems to be more simple and the tests inside are
more easy to read (although less documented compares to V8’s). I think
it should be not that hard to port to &lt;span class="caps"&gt;AS&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;I still do not have time to look into Dromaeo’s source but it has quite
a lot of tests. And some of the tests includes &lt;span class="caps"&gt;DOM&lt;/span&gt; and use of library
like jQuery and Prototype, which is not quite appropriate to be ported.&lt;/p&gt;
&lt;p&gt;My target should be porting SunSpider. But there is still some things to
be considered like whether to use &lt;span class="caps"&gt;AS&lt;/span&gt;’s build-in library, coverage of
Graphic manipulation etc. More researches are needed ;-) .&lt;/p&gt;</content><category term="web 2.0"></category><category term="web usability design and engineering"></category></entry><entry><title>Some free tools for usability/accessibility testing</title><link href="https://blog.onthewings.net/2008/11/15/some-free-tools-for-usabilityaccessibility-testing/" rel="alternate"></link><published>2008-11-15T01:15:00+08:00</published><updated>2008-11-15T01:15:00+08:00</updated><author><name>Andy Li</name></author><id>tag:blog.onthewings.net,2008-11-15:/2008/11/15/some-free-tools-for-usabilityaccessibility-testing/</id><summary type="html">&lt;p&gt;Web usability/accessibility testing is always a troublesome work for web
designers/developers. But with good tools, testing can be made much
faster, easier and cheaper. Here below are some tools I found useful:&lt;/p&gt;
&lt;h2&gt;&lt;span class="caps"&gt;HTML&lt;/span&gt; &lt;span class="caps"&gt;VALIDATOR&lt;/span&gt; (Firefox add-on)&lt;/h2&gt;
&lt;p&gt;&lt;img alt="HTML Validator in action" src="/files/2008/tidy80_preview.png"/&gt;&lt;/p&gt;
&lt;p&gt;Homepage: &lt;a href="http://users.skynet.be/mgueury/mozilla/"&gt;http://users.skynet.be/mgueury/mozilla/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It can let you validate …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Web usability/accessibility testing is always a troublesome work for web
designers/developers. But with good tools, testing can be made much
faster, easier and cheaper. Here below are some tools I found useful:&lt;/p&gt;
&lt;h2&gt;&lt;span class="caps"&gt;HTML&lt;/span&gt; &lt;span class="caps"&gt;VALIDATOR&lt;/span&gt; (Firefox add-on)&lt;/h2&gt;
&lt;p&gt;&lt;img alt="HTML Validator in action" src="/files/2008/tidy80_preview.png"/&gt;&lt;/p&gt;
&lt;p&gt;Homepage: &lt;a href="http://users.skynet.be/mgueury/mozilla/"&gt;http://users.skynet.be/mgueury/mozilla/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It can let you validate your website (and any pages you browse) at the
time Firefox loads it. Since the validation engines are built into the
add-on, there is close to no delay in validation. Also, when you double
click its icon, all the errors and warnings (optional accessibility
issues too!) are shown up with html source. It is real handy!&lt;/p&gt;
&lt;p&gt;Note that there are two available validation engines in &lt;span class="caps"&gt;HTML&lt;/span&gt; Validator,
Tiny and OpenSP. OpenSP is the one running behind &lt;span class="caps"&gt;W3C&lt;/span&gt; Validation Service.&lt;/p&gt;
&lt;h2&gt;&lt;span class="caps"&gt;ATRC&lt;/span&gt; Web Accessibility Checker&lt;/h2&gt;
&lt;p&gt;&lt;span class="caps"&gt;URL&lt;/span&gt;: &lt;a href="http://checker.atrc.utoronto.ca/"&gt;http://checker.atrc.utoronto.ca/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Actually there are many online accessibility checkers. You may easily
find one by searching “accessibility checker”. I have not test them all
but I found this one is quite good since it let you select which
accessibility guideline you want you site to check against.&lt;/p&gt;
&lt;h2&gt;Firefox accessibility extension&lt;/h2&gt;
&lt;p&gt;&lt;span class="caps"&gt;URL&lt;/span&gt;: &lt;a href="http://firefox.cita.uiuc.edu/"&gt;http://firefox.cita.uiuc.edu/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It is developed for people with disabilities, but web developer should
find this very useful. Despite of trying to navigate your web site as
people with disabilities, the quick links on the toolbar can let you
validate/check your site’s accessibility issues easily.&lt;/p&gt;
&lt;h2&gt;Firefox Web developer Toolbar&lt;/h2&gt;
&lt;p&gt;&lt;span class="caps"&gt;URL&lt;/span&gt;: &lt;a href="http://chrispederick.com/work/web-developer/"&gt;http://chrispederick.com/work/web-developer/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here is yet another Firefox extension. Actually this toolbar is a
must-have for web developers. The functions are too many, I try to name
a few: button to resize your window to 800*600 (or any other presets),
button for &lt;span class="caps"&gt;W3C&lt;/span&gt; validation service, disable cache, disable JavaScript etc.&lt;/p&gt;</content><category term="web usability design and engineering"></category></entry><entry><title>CityU’s Usability Testing Lab</title><link href="https://blog.onthewings.net/2008/11/08/cityus-usability-testing-lab/" rel="alternate"></link><published>2008-11-08T23:01:00+08:00</published><updated>2008-11-08T23:01:00+08:00</updated><author><name>Andy Li</name></author><id>tag:blog.onthewings.net,2008-11-08:/2008/11/08/cityus-usability-testing-lab/</id><summary type="html">&lt;p&gt;Just a few days ago, I went to CityU’s brand new Usability Testing Lab
to do usability testing for my assignment. It is located in InnoCentre
(Kowloon Tong), on the 5th floor, inside Department of Media and
Communication. I searched around InnoCentre for so long since Dr. Andy
Chun …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Just a few days ago, I went to CityU’s brand new Usability Testing Lab
to do usability testing for my assignment. It is located in InnoCentre
(Kowloon Tong), on the 5th floor, inside Department of Media and
Communication. I searched around InnoCentre for so long since Dr. Andy
Chun (Yup, another Andy) forgot to say which room the lab is located…&lt;/p&gt;
&lt;p&gt;For the lab, I am a little bit disappointed, since it is actually only a
little room. But the Department of Media and Communication is great.
There are many other special rooms (or labs) for recording, broadcasting
etc. And the technician who guided me through using the equipment is
really nice.&lt;/p&gt;
&lt;p&gt;The special computer used for usability testing:
&lt;img alt="The special computer used for usability testing." src="/files/2008/img_0003.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;My site has been tested two times while I also help testing another
group’s web site. What we have got were some heatmaps, eye-tracking
videos, and some simple software analysis (interesting areas on pages
etc.). I think it seems to be too little data for me, but there were no
time and people left to do more testing.&lt;/p&gt;
&lt;p&gt;Actually what I am interested is booking the lab for testing games…
There was already a XBox 360 located in the room and the technician kept
asking us to play… It will be good to let me try testing my
forthcoming games, but may be I will never have a chance to come back
since the lab is not opened for students normally…&lt;/p&gt;</content><category term="CityU"></category><category term="web usability design and engineering"></category></entry><entry><title>SEO, a path to web 3.0: helping machines to understand us</title><link href="https://blog.onthewings.net/2008/10/11/seo-a-path-to-web-3.0-helping-machines-to-understand-us/" rel="alternate"></link><published>2008-10-11T02:51:00+08:00</published><updated>2008-10-11T02:51:00+08:00</updated><author><name>Andy Li</name></author><id>tag:blog.onthewings.net,2008-10-11:/2008/10/11/seo-a-path-to-web-3.0-helping-machines-to-understand-us/</id><summary type="html">&lt;p&gt;In these few weeks I keep reading articles on search engine optimization
(&lt;span class="caps"&gt;SEO&lt;/span&gt;) and the development of the Internet (mostly Google related, but
Google’s is a big part of the Internet right?). More I read &lt;span class="caps"&gt;SEO&lt;/span&gt;, more I
realize the similarities between web 3.0 and the concept of …&lt;/p&gt;</summary><content type="html">&lt;p&gt;In these few weeks I keep reading articles on search engine optimization
(&lt;span class="caps"&gt;SEO&lt;/span&gt;) and the development of the Internet (mostly Google related, but
Google’s is a big part of the Internet right?). More I read &lt;span class="caps"&gt;SEO&lt;/span&gt;, more I
realize the similarities between web 3.0 and the concept of &lt;span class="caps"&gt;SEO&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="W3C Semantic Web" src="/files/2008/sw-horz-w3c.png"/&gt;&lt;/p&gt;
&lt;p&gt;One of the proposed key concept
of web 3.0 is machines will understand our web contents, or let say our
contents will be formatted to be understood by machines. Nowadays there
is a technology “&lt;a href="http://www.w3.org/2001/sw/"&gt;semantic web&lt;/a&gt;” that introduces similar ideas. The
idea is like improving usability of our web contents, not only to humans
but to machines too. And that is what we are doing for &lt;span class="caps"&gt;SEO&lt;/span&gt; propose: one
of the reasons we use div and &lt;span class="caps"&gt;CSS&lt;/span&gt; instead of table to build navigation
menus, is to make sure Google understand which is menu and which is content.&lt;/p&gt;
&lt;p&gt;Maybe this will become one more reason why we should learn &lt;span class="caps"&gt;SEO&lt;/span&gt;.&lt;/p&gt;</content><category term="web usability design and engineering"></category></entry><entry><title>The heat of layout redesign</title><link href="https://blog.onthewings.net/2008/10/06/the-heat-of-layout-redesign/" rel="alternate"></link><published>2008-10-06T21:40:00+08:00</published><updated>2008-10-06T21:40:00+08:00</updated><author><name>Andy Li</name></author><id>tag:blog.onthewings.net,2008-10-06:/2008/10/06/the-heat-of-layout-redesign/</id><summary type="html">&lt;p&gt;In the past year, web designers/developers seem busy with web layout
redesign. Here were several popular web site that were redesigned to be
named: Yahoo Mail (and &lt;a href="http://biz.yahoo.com/allthingsd/080918/a_first_look_at_the_new_yahoo_homepage_redesign_apps_rule_id.html"&gt;Yahoo’s homepage is in progress&lt;/a&gt;), Xanga,
Facebook, Wordpress (in progress) etc.&lt;/p&gt;
&lt;p&gt;It is interesting to me that I really found some …&lt;/p&gt;</summary><content type="html">&lt;p&gt;In the past year, web designers/developers seem busy with web layout
redesign. Here were several popular web site that were redesigned to be
named: Yahoo Mail (and &lt;a href="http://biz.yahoo.com/allthingsd/080918/a_first_look_at_the_new_yahoo_homepage_redesign_apps_rule_id.html"&gt;Yahoo’s homepage is in progress&lt;/a&gt;), Xanga,
Facebook, Wordpress (in progress) etc.&lt;/p&gt;
&lt;p&gt;It is interesting to me that I really found some of them are using
methods/techniques I learned from class. For example, Wordpress is using
wire-frames (&lt;a href="http://wordpress.org/development/2008/10/wordpress-27-wireframes/"&gt;here&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Redesign is a important process which web designer/developer should
handle it carefully. Redesign can make web sites stay competitive and
meeting requirements of continuously updating user profiles/scenarios.
But if the website has already lots of old visitors, redesign may make
them unfamiliar with the web site and cause problems. For instance,
Facebook had token a lot of efforts to make users comfortable with the
new design like its &lt;a href="http://blog.facebook.com/blog.php?post=29205447130"&gt;new design &lt;span class="caps"&gt;FAQ&lt;/span&gt;&lt;/a&gt;, but still, there are drawbacks
brought by the new design like devaluing some type of Facebook app
(blogged by Dare Obasanjo &lt;a href="http://www.25hoursaday.com/weblog/2008/10/05/DeathToSelfExpressionFacebookRedesignFavorsApplicationsOverWidgets.aspx"&gt;here&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Actually I am working on redesigning a web site too. But you know,
student’s life is always filled with homework and projects. Hope I can
finish it fast and show it to you soon.&lt;/p&gt;</content><category term="web usability design and engineering"></category></entry><entry><title>Why paper is still being used in paper prototyping?!</title><link href="https://blog.onthewings.net/2008/09/25/why-paper-is-still-used-in-paper-prototyping/" rel="alternate"></link><published>2008-09-25T02:31:00+08:00</published><updated>2008-09-25T02:31:00+08:00</updated><author><name>Andy Li</name></author><id>tag:blog.onthewings.net,2008-09-25:/2008/09/25/why-paper-is-still-used-in-paper-prototyping/</id><summary type="html">&lt;p&gt;In the last two weeks, from both the lessons of “Web usability design
and engineering” and “Multimodel interface design”, I learnt about paper
prototyping. It is a technique that used to test a interface design
before building the interface out. It is widely used in the industry
because it do …&lt;/p&gt;</summary><content type="html">&lt;p&gt;In the last two weeks, from both the lessons of “Web usability design
and engineering” and “Multimodel interface design”, I learnt about paper
prototyping. It is a technique that used to test a interface design
before building the interface out. It is widely used in the industry
because it do not cause much and easy to do. If you have no idea what
paper prototype is, here is a video demonstrating it:&lt;/p&gt;
&lt;iframe allowfullscreen="" frameborder="0" height="390" src="//www.youtube.com/embed/GrV2SZuRPv0" width="640"&gt;&lt;/iframe&gt;
&lt;p&gt;I was surprised when I first know what they are… Testing cyber things
in such a old-school way (and still be widely used) is just
unbelievable… It make me think of why there do not exist a better,
more “cyber” way to do this.&lt;/p&gt;
&lt;p&gt;We do not directly use computer software to make prototypes just because
the interface of computer has its limitations. With mouse cursor we can
only interact directly with one object in a time while we have two
hands,ten fingers and use to interact with multiple objects simultaneously.&lt;/p&gt;
&lt;p&gt;Maybe the rise of multitouch will solve this problem. Just like we move
the paper in paper prototypes, we can move the virtual papers with our
fingers when multi-touch is used. This is also the point why multitouch is
so welcomed by end-users.&lt;/p&gt;
&lt;p&gt;Furthermore, if you are still not satisfied, a 3D presentation of the
virtual paper may help. I am not talking about those &lt;a href="http://en.wikipedia.org/wiki/Head-mounted_display"&gt;&lt;span class="caps"&gt;HMD&lt;/span&gt;&lt;/a&gt; things, but
something like &lt;a href="http://en.wikipedia.org/wiki/Windows_Flip#Windows_Flip_and_Flip_3D"&gt;windows flip&lt;/a&gt;. We can get a specific paper easily
without accidentally selecting other paper on top.&lt;/p&gt;
&lt;p&gt;To conclude, it seems it is a fundamental interface problem of
computers. Maybe we should redesign the interface of computer before we
redesign the interface of websites…&lt;/p&gt;</content><category term="web usability design and engineering"></category></entry><entry><title>Usability, accessibility and SEO of Flash-only website</title><link href="https://blog.onthewings.net/2008/09/16/usability-and-accessibility-of-flash-only-website/" rel="alternate"></link><published>2008-09-16T03:08:00+08:00</published><updated>2008-09-16T03:08:00+08:00</updated><author><name>Andy Li</name></author><id>tag:blog.onthewings.net,2008-09-16:/2008/09/16/usability-and-accessibility-of-flash-only-website/</id><summary type="html">&lt;p&gt;I wanna blog about this because I always use Flash and building websites.&lt;/p&gt;
&lt;p&gt;Usability, accessibility and &lt;span class="caps"&gt;SEO&lt;/span&gt; of a website are becoming a great
concern these days while Flash/Flex technology is becoming a big big
part of the web. Flash contents are always said to be bad for usability …&lt;/p&gt;</summary><content type="html">&lt;p&gt;I wanna blog about this because I always use Flash and building websites.&lt;/p&gt;
&lt;p&gt;Usability, accessibility and &lt;span class="caps"&gt;SEO&lt;/span&gt; of a website are becoming a great
concern these days while Flash/Flex technology is becoming a big big
part of the web. Flash contents are always said to be bad for usability,
accessibility and &lt;span class="caps"&gt;SEO&lt;/span&gt;, e.g. not search engine friendly, can’t be easily
read by other programs that even making a lot of browser functions dead,
large file size… But wait, are all of these still be true &lt;span class="caps"&gt;NOW&lt;/span&gt;?&lt;/p&gt;
&lt;p&gt;Here are some misunderstanding or not-updated thoughts on Flash content
(especially Flash-only website):&lt;/p&gt;
&lt;h4&gt;Flash contents cannot be crawled and indexed by search engines&lt;/h4&gt;
&lt;p&gt;Wrong! Google has already announced that they can now index Flash
contents (including those dynamic text fields!).&lt;br/&gt;
Ref: Official Google Webmaster Central Blog:
&lt;a href="http://googlewebmastercentral.blogspot.com/2008/06/improved-flash-indexing.html"&gt;http://googlewebmastercentral.blogspot.com/2008/06/improved-flash-indexing.html&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Flash-only websites make browser’s back button not usable&lt;/h4&gt;
&lt;p&gt;The back buttons (also history and bookmark) are still alive on
Flash-only websites as the website use SWFAddress - using a technique
called deep-linking (also can be used in &lt;span class="caps"&gt;AJAX&lt;/span&gt;).&lt;br/&gt;
Ref: SWFAddress official website: &lt;a href="http://www.asual.com/swfaddress/"&gt;http://www.asual.com/swfaddress/&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Flash contents are having large file size&lt;/h4&gt;
&lt;p&gt;The large file size is mostly cause by embedding images or other media
files, not the swf itself. If you use many images in your html site, it
still needs plenty of time to load. Actually, comparing to JavaScript,
the file size of the scripting part may be even smaller and load/run
faster when we use &lt;span class="caps"&gt;AS3&lt;/span&gt;, since they are all complied.&lt;/p&gt;</content><category term="Flash"></category><category term="web usability design and engineering"></category></entry></feed>