tag:blogger.com,1999:blog-191635452009-07-06T02:35:56.911-03:00leovernazza [at] himalia.net//community blogsleovernazzahttp://www.blogger.com/profile/15048846503206922462noreply@blogger.comBlogger57125tag:blogger.com,1999:blog-19163545.post-29865886099390849572008-06-19T16:19:00.000-03:002008-06-29T18:20:23.915-03:00We Are Up Again<p>WE had the server down during two weeks thanks to Yahoo (please do NOT register your domain with Yahoo Small Business at least you don't need it). Now, it's up again.</p> <p>&nbsp;</p> <p>Keep tuned, news are coming... (slowly, but coming).</p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19163545-2986588609939084957?l=www.himalia.net%2Fblogs%2Fleovernazza%2Findex.php'/></div>leovernazzahttp://www.blogger.com/profile/15048846503206922462noreply@blogger.com1tag:blogger.com,1999:blog-19163545.post-81505318097541928652008-02-11T01:58:00.000-02:002008-02-11T02:59:40.565-02:00Can UX be a Boomerang?<p>I kept thinking about the <a href="http://www.uie.com/brainsparks/2008/01/30/did-i-get-13-wrong-do-all-sites-need-similar-security/">Jared's point of view</a> about another <strong>security -vs- user experience</strong> trade off. </p> <p>&nbsp;</p> <p><img style="margin: 0px 0px 0px 35px" height="232" src="http://klaatu.anastrophe.com/wp-images/postit.jpg" width="240" align="right"></p> <p>In this case, Jared stands that you can't require the same security for a "<em>Magic tricks Forum</em>" and for a "<em>Bank website</em>". I agree with that. I&nbsp; <strong>really hated</strong> when <a href="http://studios.thoughtworks.com/mingle-project-intelligence">Mingle</a> asked me for an <strong>ultra secure password </strong>for a trial version I wanted to use in my network. Everyday I wanted to login into the system I had to try several password... Well, at least I was <em>feeling lucky</em>® they decided no to block my account in the process :)</p> <p>&nbsp;</p> <p>However, I think you can't put everything in the same bag. He was using this argument to say that applications should specify what was wrong when the login has failed (was it the username or the password?). The usual behavior is a message similar to this one: <em>"Either your username or password is wrong, try again! Did you forget your password? ".</em></p> <p>&nbsp;</p> <p><strong>This kind of messages goes against the UX</strong> because it's imprecise. If you are <em>more precise you can help him (and others trying to log in) to solve the problem</em>. But, it's also true what <em><a href="http://www.uie.com/brainsparks/2008/01/30/did-i-get-13-wrong-do-all-sites-need-similar-security/#comment-105581">me</a> </em>and <em><a href="http://www.uie.com/brainsparks/2008/01/30/did-i-get-13-wrong-do-all-sites-need-similar-security/#comment-105520">others</a></em> argued about how we -as users- manage <em>usernames</em> and <em>passwords</em> everyday. To make it short, <strong>users have the same passwords and usernames all over web, in different sites</strong>. I do that and many people I know do also. Ok, my bank web site password is not the same that the blogger's one.. but I cannot be sure about other "not-critical" sites. I can't even remember all the sites I am registered in!!! Can you? </p> <p>&nbsp;</p> <p><img style="margin: 0px 20px 0px 0px" height="240" src="http://cache.eb.com/eb/image?id=95159&amp;rendTypeId=4" width="231" align="left">The point is: can you forget security issues if you are designing the "<em>Magic tricks Forum</em>" when <em>you know </em>it is the actual behavior of your users? Lets put it in another way. What happen if some of your user's account is hacked (sometimes all they need is the username because it's a valid email), and this information is used to steal <em>more important data</em> of him in other site? Ok, it's not <em>totally</em> your guilt, but, couldn't you avoid it? <strong>Can you just blame your user because of his uninformed behavior? </strong>I don't think so. <strong>How will your user feel about your site?</strong> Do you think he will just guilt himself or will your site also pay the penalty? The second one is more probable and for sure your team will look incompetent.</p> <p>&nbsp;</p> <p>You know, sometimes UX is <em>indirect.</em> You can just try to improve it but you may end provoking a terrible headache for your <em>user </em>in name of it. Although in this case you may share the guilt with your user, if something happens, you can be sure you will pay for it because -as always- <em>bad UX has more publicity</em>.&nbsp; </p> <p>&nbsp;</p> <p>If I were you, I would stay defensive to avoid <strong>boomerangs</strong>.</p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19163545-8150531809754192865?l=www.himalia.net%2Fblogs%2Fleovernazza%2Findex.php'/></div>leovernazzahttp://www.blogger.com/profile/15048846503206922462noreply@blogger.com0tag:blogger.com,1999:blog-19163545.post-37837518168164070082008-01-31T00:55:00.001-02:002008-01-31T00:56:10.814-02:00ENSO, MIX08, Usernames-vs-UX and Aggregated UX<p>I downloaded <a href="http://www.humanized.com/enso">Enso</a> last week and now I can't live without it. I have to say that I loved it from the website description.</p> <p>They guys from <a href="http://humanized.com/weblog/2008/01/16/joining-mozilla/">Humanized were bought by Mozilla</a> and will be working in their Labs. It's highly probable that you start seeing these kind of things in the next version of the open source browser.</p> <p>&nbsp;</p> <p>I am happy. They share my vision about how web/desktop software must inter-operate, putting <strong>users first</strong>. Will browsers start to be a little more semantic? I will take the bet.</p> <p>----</p> <p>If you are a good observer (see the right pane, stupid!), you may have discovered I am going to MIX'08 in Las Vegas. If you are going there, I will be glad to met you to talk about any topic, if you drop me a line. I can't believe I will see <a href="http://www.guykawasaki.com/">Guy Kawasaki</a> and <a href="http://www.youtube.com/watch?v=8To-6VIJZRE">Steve Ballmer</a>. I just bought two of his books last week. It was a signal :)</p> <p>----</p> <p>I know that the <a href="http://www.himalia.net/blogs/leovernazza/2007/12/bad-changes-in-new-gmail-version.html">second part of the GMail review</a> is pending. I have already written it (actually, I wrote it with the first part), but I am just waiting to post it with a little surprise ;)</p> <p>----</p> <p>I <a href="http://www.uie.com/brainsparks/2008/01/14/uietips-article-8-more-design-mistakes-with-account-sign-in/">started a discussion</a> in the Jared Spool's blog. This is a honor for me :)</p> <p>He responded with <a href="http://www.uie.com/brainsparks/2008/01/30/did-i-get-13-wrong-do-all-sites-need-similar-security/">another post</a>. What do you think about usernames and the user experience? Can we really improve it? </p> <p>Do you believe in the <strong>global/aggregated user experience </strong>concept? Who should care about it?</p> <p>----</p> <p>This is an atypical post.</p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19163545-3783751816816407008?l=www.himalia.net%2Fblogs%2Fleovernazza%2Findex.php'/></div>leovernazzahttp://www.blogger.com/profile/15048846503206922462noreply@blogger.com2tag:blogger.com,1999:blog-19163545.post-62599680630922300132007-12-09T16:15:00.001-02:002007-12-09T16:35:32.990-02:00Bad Changes In The New GMail Version<p>Google has launched a <a href="https://mail.google.com/mail/?ui=2">new version of GMail</a> with some good new features.&nbsp; However, what really surprised me were the very bad changes in the user interface of the contacts "subsystem". Google has a very deserved prestige in providing dead simple <em>and </em>very well designed user interfaces. However, I think they couldn't repeat themselves this time. Luckily <a href="http://groups.google.com/group/Gmail-Problem-solving/msg/63233555308ee894">I am not the only</a>&nbsp;<a href="http://www.mydigitallife.info/2007/11/17/how-to-switch-back-and-open-gmail-in-old-versionformat-as-default/">one this time</a>; users care about usability and as always, problems have more repercussion.</p> <p>&nbsp;</p> <p>I was not going to post about this, but then I thought it could be a very interesting example to show how the right models/tools can help to avoid this kind of errors. Last but not least, I strongly believe you have to fall into a lot of mistakes in the process of creating a great user interface, but if you use the right tools and you are describing things at the right abstraction level, they become evident, and you can quickly walk through the <a href="http://www.himalia.net/blogs/leovernazza/2007/10/continuous-prototyping.html">continuous prototyping</a> process to achieve a successful design.</p> <p>&nbsp;</p> <h4>What's Wrong With The Contacts Design In The New Version Of GMail ?</h4> <p>The main problem is it has a <strong>bad layout.</strong> Layouts should be simple and Google knows it more than anybody. Not only simple, they have also to be familiar, recognizable (yes, copy them from other user interfaces). Layouts aren't an innovation area and simple layouts have been <em>all </em>already invented. </p> <p>&nbsp;</p> <h4>So, What's Wrong With The GMail Layout?</h4> <p>Well, first of all it has <strong>too many areas</strong>. An area is the part of the screen <em>where</em> you will present a UI concept. Actually, you should have so many areas as concepts you want to present on screen at the same time. And you don't want to expose your user with dozen of concepts at the same time, so you don't want too many areas. In the new version of the contacts subsystem they have 5 areas (just in that part).</p> <p>&nbsp;</p> <p>However, five areas wouldn't be a problem is they weren't so <strong>poorly orchestrated</strong>. Area orchestration, or Layout Behavior (as I lately redefined it) is the way you assign a hierarchy to the different areas on the screen. The main pattern you should know in this field is called <a href="http://designinginterfaces.com/Visual_Framework">Visual Framework</a>. I will translate it in this way: "Try to keep the area hierarchy always, never mind which concepts are you presenting at each time in each area".&nbsp; </p> <p>&nbsp;</p> <p>The Layout Behavior can be defined using with transitions that are represented as arrows (<a href="http://help.sap.com/saphelp_nw04s/helpdata/en/cc/1f6f3ee3c33f7ce10000000a114084/content.htm">this is a very natural representation</a>). Each arrow means that the target will be refreshed when any action is fired in the source. Typically you expect that <em>top menus</em> refresh <em>second layer menus</em>, <em>left or right bars</em> refresh <em>the content area </em>and so on. This approach is very interesting because you don't need to think it in terms of events and other programming-related stuff. Just answer: when an action is fired in one specific area, which area(s) will be refreshed? If you can find a simple and recognizable orchestration for your areas, it will be good enough. </p> <p>&nbsp;</p> <p>Back to GMail, have you seen this kind of orchestration in some other place?</p> <p>&nbsp;</p> <table cellspacing="0" cellpadding="2" width="800" border="0"> <tbody> <tr> <td valign="top" width="200"><a href="http://www.himalia.net/blogs/leovernazza/images/BadChangesInTheNewGMailVersion_13D79/GMailcontactsnew.jpg"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="185" alt="GMail contacts new" src="http://www.himalia.net/blogs/leovernazza/images/BadChangesInTheNewGMailVersion_13D79/GMailcontactsnew_thumb.jpg" width="380" border="0"></a></td> <td valign="top" width="200"><a href="http://www.himalia.net/blogs/leovernazza/images/BadChangesInTheNewGMailVersion_13D79/GMailLayoutBehavior.jpg"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="185" alt="GMailLayoutBehavior" src="http://www.himalia.net/blogs/leovernazza/images/BadChangesInTheNewGMailVersion_13D79/GMailLayoutBehavior_thumb.jpg" width="380" border="0"></a></td></tr></tbody></table> <p>&nbsp;&nbsp;&nbsp; </p> <p>Other problem with the chosen transitions are the <strong>transition jumps</strong>. The one from FirstTopArea to the RightArea is anti-natural because broke the logic sequence. The same happens with the transition from LeftArea to RightArea, but in this case you should add that it provokes a a little inconsistence because there is another transition from LeftArea to CenterArea. </p> <p>&nbsp;</p> <p>Other good advice to take when possible is to define the transitions targeting contiguous areas, in order to facilitate the <strong>focus flow </strong>of your user. Why jumping to the other side of the screen?&nbsp; Users don't want to guess where to look after clicking something. In this case, the user is forced to jump his focus from the left to the right in one jump. When you press something, the refreshed area should be the one the user is expecting to be, and users don't expect to move their heads all around like playing <a href="http://www.freegames.ws/games/kidsgames/simon/mysimon.htm">Simon</a> in a big wall.</p> <p>&nbsp;</p> <p>Also, there is a very ironic problem, the <strong>very strange behavior in the search box</strong>. When you search a contact, a new item is <em>added </em>in the left list (<em>groups and other stuff list</em>), while the results are added in the center list at the same time. Why? What's the purpose of the left list with two fixed items, all the groups and an intermittent <em>search result item</em>? Why adding that item there? Why just not showing the results as Google taught us in a dead simple way?</p> <p>&nbsp;</p> <p>Finally, probably the most annoying error is the <strong>inconsistence</strong>. Consistence is THE fundamental behind all great designed user interfaces. When you press the "New contact" button you are directed to the RightArea, but when you press the "New Group" button (placed just at it side) a popup appears on the <em>top left corner </em>of the screen, while&nbsp; other popup's appear centered on the screen. Added up, it provides a baffling experience for the user. </p> <p>&nbsp;</p> <p>Random isn't a good friend of user interfaces. Actions presented in the <em>same </em>style and grouped together, are expected to produce the <em>same</em> kind of feedback in the user interface. If they are going to provide different experience they should be separated or presented with a different style (see examples below).</p> <table cellspacing="0" cellpadding="2" width="800" border="0"> <tbody> <tr> <td valign="top" width="400"><a href="http://www.himalia.net/blogs/leovernazza/images/BadChangesInTheNewGMailVersion_13D79/GMailSearch.jpg"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="54" alt="GMailSearch" src="http://www.himalia.net/blogs/leovernazza/images/BadChangesInTheNewGMailVersion_13D79/GMailSearch_thumb.jpg" width="500" border="0"></a></td> <td valign="top" width="400"><a href="http://www.himalia.net/blogs/leovernazza/images/BadChangesInTheNewGMailVersion_13D79/WinXPStartMenu.jpg"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="29" alt="WinXPStartMenu" src="http://www.himalia.net/blogs/leovernazza/images/BadChangesInTheNewGMailVersion_13D79/WinXPStartMenu_thumb.jpg" width="286" border="0"></a></td></tr></tbody></table> <p>&nbsp;</p> <p>So, now you may be thinking: <em>ok, user interface guru-wannabe, how would you improve this? </em>But I will answer it the next post, because it is already quite long ;)</p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19163545-6259968063092230013?l=www.himalia.net%2Fblogs%2Fleovernazza%2Findex.php'/></div>leovernazzahttp://www.blogger.com/profile/15048846503206922462noreply@blogger.com2tag:blogger.com,1999:blog-19163545.post-73518738128144857802007-12-06T00:30:00.000-02:002007-12-06T01:21:32.878-02:00Lets Build An API<p>Are you feeling a <a href="http://en.wikipedia.org/wiki/D%C3%A9j%C3%A0_vu">déjù vu</a>? As always, we need to watch not only the picture but the full movie to understand what is going on.</p> <p>As Jared Spool <a href="http://www.uie.com/brainsparks/2007/07/17/the-market-maturity-framework-is-still-important/">said</a>, every market goes through four steps (in this order): Technology, Features, Experience and Integration.</p> <p>&nbsp;</p> <p>We are now in the <strong>Experience</strong> phase. Web 2.0 is all about user experience, tell that to <a href="https://gettingreal.37signals.com/">37Signals</a>. However, in the software industry there is an always subjacent war about <a href="http://www.himalia.net/blogs/leovernazza/2007/09/what-platform-is.html">platforms</a>. Windows, Mac, Office, Google, SAP, Facebook, Data, Html, Browsers... everyone want to be the winner platform, and in this way, they have to open the doors for developers to empower their position, and so, they make a public API. Each day, someone else is entering in the API game, and this is good for all of us.</p> <p>&nbsp;</p> <p>But the real interesting point are the assumptions in the background.</p> <p>&nbsp;</p> <p>If you build an API and someone else can replicate your software... which is your competitive advantage? You get the database, the raids, the data center, and the 24x7 problem and the third party the advertisement?&nbsp; Actually, in my modest opinion, there are two very interesting assumptions: the <strong>URL fidelity</strong> and that <strong>data remains in your side</strong>. And you know, Facebook is living from its three-tables-database (Users, Friends and Applications) and the <a href="http://dondodge.typepad.com/the_next_big_thing/2007/10/microsoft-acqui.html">gift-card</a> they received from Microsoft to send a message to Google. For this reason, you and many engineers in these companies may think: "<em>we won't put this data available through the API because this is our key data</em>". </p> <p>&nbsp;</p> <p>The URL fidelity is a very interesting topic. 15 years ago nobody knew about urls and now you can't get a decent one. What will happen in 10 years with urls? Who cares? In 10 years we will be in Web 7.0.</p> <p>&nbsp;</p> <p>However, the point about the data isn't so clear anymore. This was ok <a href="http://www.kapowtech.com/media/BP_Demo.html">until someone wrote a robot capable of stealing all your data</a> (<a href="http://www.slideshare.net/AndreasKrohn/build-apis-with-kapow-mashup-server">slides</a>), and now, you can steal and then store it somewhere (it would be very funny to take amazon data and save it back in the <a href="http://www.amazon.com/gp/browse.html?node=201590011">EC2</a>, would you join the project?). </p> <p>&nbsp;</p> <p>But here is the funniest part of the history: they don't need a public API. They are using <strong>HTML as your public API</strong> and taking all the data they need, to do whatever they want. You can also use this robot and be sure I will be doing it in the future. <strong>Hey! It should be illegal! </strong>Don't tell me, and what do you think <a href="http://www.himalia.net/blogs/leovernazza/2007/08/pay-per-crawl.html">Google has been doing</a> from the beginning? Ok, they call it crawl (not steal) and don't save it in a relational database but in a home-made File System, but this is just tech-stuff. </p> <p>&nbsp;</p> <p>You know my point of view, users should own the data, or at least, <a href="http://dondodge.typepad.com/the_next_big_thing/2007/11/who-owns-your-d.html">not just</a> [Put Your Favorite Company Here]. I would love to hear your opinion...</p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19163545-7351873812814485780?l=www.himalia.net%2Fblogs%2Fleovernazza%2Findex.php'/></div>leovernazzahttp://www.blogger.com/profile/15048846503206922462noreply@blogger.com0tag:blogger.com,1999:blog-19163545.post-45009466565121222222007-11-09T13:20:00.001-02:002007-11-10T15:56:02.488-02:00Models @ Runtime<p>Talking with <a href="http://www.zmmi.de/wcms/224.html">Daniel Görlich</a>&nbsp;during the&nbsp;<a href="http://www.zmmi.de/MDUCDE2007">MDUCDE 2007</a>, he&nbsp;told me about the new workshop he was organizing in the context of MODELS,&nbsp;"<a href="http://planetmde.org/mddaui2007/">Model Driven Development of Advanced User Interfaces</a>". Digging into the conference, I found this other workshop that also sounds interesting: <strong><a href="http://www.comp.lancs.ac.uk/~bencomo/MRT07/">Models @ Runtime</a></strong>. For me, it's funny because every time I present Himalia, the question about <strong>code generation -vs- runtime interpretation</strong> is on the table. </p> <p>&nbsp;</p> <p>What I actually think is that it shouldn't be a public discussion. The user need to obtain good response times, fair processor consumption, etc. but how you provide that <em>shouldn't be his problem</em>. For example, I don't care if SQL Server or Oracle&nbsp;are <em>generating specific code</em> for each database definition&nbsp;or if they are interpreting each DB model in each query. And that's good, it should behaves as a <strong>black box</strong> for me.&nbsp;</p> <p>&nbsp;</p> <p>I think there are basically&nbsp;4 things to take into account:</p> <blockquote> <p><strong>1. </strong>It is really one <strong><em>faster</em></strong> than the other one?&nbsp;People would usually think that the interpretation strategy is slower, but&nbsp;I think it highly depends on the quality of the generated code versus the quality of the runtime and the performance advantages you could take of having the model live&nbsp;@ runtime (for example, DBMS use optimization techniques as learning&nbsp;from the queries at runtime to obtain better response times).</p></blockquote> <blockquote> <p><strong>2. </strong>In the&nbsp;<strong><em>resources consumption </em></strong>field I think interpretation is better, because you don't need to replicate everything each time, and so, you can&nbsp;let the underlying layers do their optimization work&nbsp;in a better way.&nbsp;</p></blockquote> <blockquote> <p><strong>3. <em>Extensibility/Flexibility</em></strong>&nbsp;is the only field -as far as I can see- where generating code could be the better approach. In the <a href="http://www.amazon.com/exec/obidos/ASIN/0321398203/metacaseconsu-20">DSL Tools book</a> there is a very interesting discussion about what they called the <strong>"Customization Pit"</strong> and what kind of things you need to take into account when you support code-generation scenarios. Basically, if you are not providing <em>the right hooks </em>in your high-abstraction language, you should provide the ability to inject the customization somewhere in the process, and so, code-generation and partial classes could be the answer if you don't know which customization scenarios would you need to provide. </p></blockquote> <blockquote> <p><strong>4.</strong> Before of partial classes, <strong>maintainability</strong> was a big problem for code-generation tools.&nbsp;Nowadays&nbsp;I think there is no big difference between both approaches.</p></blockquote> <p>Finally, sometimes, you just <strong>need </strong>the model&nbsp;live @&nbsp;runtime, and&nbsp;so, if you decide to generate code you are at least duplicating&nbsp;the effort. For example, you may need it to modify it, to learn from it, adapt it, etc.</p> <p>&nbsp;</p> <p>With Himalia, I followed the <a href="http://www.himalia.net/docs_productVision.html">runtime approach</a>. Why? Because I think that in the long run, having the model live @ runtime will be far better in order to: let the end-user modify <em><strong>his</strong> </em>user interface, learn from&nbsp;the model, etc. Obviously, as I don't want to be <em>hoisted by my own petard</em>, I have to dig very well into the customization scenarios and support the required hooks. </p> <p>&nbsp;</p> <p>Luckily, this is the first time in a long time I found many&nbsp;people converging into this point, as more and more frameworks are being interpreted, and now, there is a conference about the topic&nbsp;:)&nbsp;</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19163545-4500946656512122222?l=www.himalia.net%2Fblogs%2Fleovernazza%2Findex.php'/></div>leovernazzahttp://www.blogger.com/profile/15048846503206922462noreply@blogger.com3tag:blogger.com,1999:blog-19163545.post-65130540831602426232007-10-24T21:58:00.001-02:002007-10-24T23:50:30.665-02:00Usability Cookie - Did Hamilton lose the F1 Championship because of bad user interaction?<p>There are <a href="http://www.pitpass.com/fes_php/pitpass_news_item.php?fes_art_id=33292">rumors out there saying</a> that Lewis Hamilton lose the F1 Championship, last weekend in Sao Paulo, because he pressed the "wrong" button (the <em>Start button</em>) that "restarted the system".</p> <p><embed src="http://www.youtube.com/v/MqHZ_xaB4Es&amp;rel=" width="425" height="366" type="application/x-shockwave-flash" wmode="transparent" border="0"></embed></p> <p>I prefer to believe that is just a Hamilton's perception, maybe he pressed the button while another error was taking place in the background... </p> <p></p> <p><strong></strong>&nbsp;</p> <p><strong>I can't believe such a terrible user interaction design in a F1 car! </strong>Why would someone want to restart the system during a F1 race? In any case, it should be a very-very-very-difficult-to-press button, something you should press very hard during 30 seconds with both hands and your head, not a yellow one in the steering wheel.</p> <p><img height="153" src="http://files.splinder.com/83d5bf3272cca09baf1cb4ab3a4d298b.jpeg" width="240"> </p> <p></p> <p>What is sure, is that all the F1 fanatics are talking about this yellow button all around the globe. So, we should take this lesson: good interaction has no publicity, bad interaction does, and you should avoid it.</p> <p></p> <p>&nbsp;</p> <p>Apparently, the team is <a href="http://www.timesonline.co.uk/tol/sport/formula_1/article2726609.ece">now denying this information</a> and assigns the episode to an hydraulic fault. Anyway, do you believe are they going to admit such a design error? Who knows?</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19163545-6513054083160242623?l=www.himalia.net%2Fblogs%2Fleovernazza%2Findex.php'/></div>leovernazzahttp://www.blogger.com/profile/15048846503206922462noreply@blogger.com0tag:blogger.com,1999:blog-19163545.post-4301435393652100232007-10-15T23:17:00.001-02:002007-10-16T00:03:29.505-02:00Continuous prototyping<p>From a long time ago I wanted to post about this topic because it is one of the features I love about the way we can build the user interfaces with <strong><a href="http://himalia.net">Himalia</a></strong>.</p> <p>&nbsp;</p> <h6>Iterating From Paper</h6> <p>Many studies have shown the importance of <strong>early</strong> <strong>prototypes</strong>. Actually, <a href="http://www.uie.com/articles/looking_back_on_paper_prototyping/">recent articles</a>&nbsp;point to&nbsp;<strong>paper prototyping</strong> as one of the best tools for the development of user interfaces, in a cost-benefit point of view, because it helps to point the UI in the right direction from the beginning at a very low cost (if you don't use it, you may be very wrong, too late).</p> <p>&nbsp;</p> <p>But paper prototyping has some problems, most of them related to accuracy and imagination: </p> <ol> <li>you can't test interaction in a reliable way <li>what you see is not what your get; but mainly, is not what&nbsp;<strong>the user </strong>see <li>once you have started with the development, paper-prototyping becomes more and more expensive <li>once you have prototyped, you have to translate it to code (and you know that <a href="http://www.himalia.net/blogs/leovernazza/2007/10/abstraction-vs-testing.html">translations produce errors</a>)</li></ol> <p>I think it's similar to the problem we used to have with integration of software&nbsp;before <a href="http://martinfowler.com/articles/continuousIntegration.html">Continuous Integration</a>, so, a similar solution could make sense also here. Note that what makes <strong>continuous integration </strong>possible, is the fact we have a tool who knows the process used to create software. That is, our <em>integration server</em> knows about <em>check-ins</em>, <em>tests</em>, <em>fails</em>, <em>people</em>, etc and use them as first-class citizens in the process. I think that more and more tasks in software development should be made as frequent as you can, and automatically when it's possible.</p> <p>&nbsp;</p> <p>If we wanted to take this approach in the user interface field, I would like to have a tool who knows about prototypes, and let me:</p> <ol> <li>start with a little one <li>load most used layouts and patterns from a repository <li>change the initial prototype&nbsp;through many steps <li>test interactivity from the beginning and in each step <li>iterate <em>in seconds</em> from the changes to the user-feedback <li>build the final version as an evolution of the initial prototype (<a href="http://news.google.com/news?hl=en&amp;ned=us&amp;ie=UTF-8&amp;q=pulpmill+uruguay+argentina">I don't want to throw more paper to the bin</a>)</li></ol> <h6>Getting feedback</h6> <p>One main aspect that should be considered, is that the prototyping task is not finished once you release your application. In other words, <strong>usage analysis </strong>and <strong>statistics</strong> have changed the way <em>web applications</em> are built today (and probably part of the commerce' history), turning <strong>marketing</strong> into a tangible discipline.&nbsp; World-class web enterprises are already doing "continuous prototyping", regardless if they use this term or a specific tool in the process. Sites like <strong><a href="http://www.uie.com/articles/fast_iterations/">Netflix</a></strong>, <strong><a href="http://amazon.com/gp/events/gno/002-9721352-2908830">Amazon</a></strong> and <strong><a href="http://www.uie.com/articles/facebook_mini_feed/">Facebook</a></strong> are continually modifying the user interface in order to better adapt it&nbsp;to the user needs or/and add new functionalities.&nbsp;</p> <p>&nbsp;</p> <p>I think it is obvious, but I will say it anyway: <em>not only web user interfaces should adapt itself&nbsp;from users</em>. The user is the same, regardless he is watching the application <strong>inside a browser</strong> or not. However, while in the web we can just add a simple javascript&nbsp;to all the pages and get a good analysis, you can't achieve it easily in the desktop (mainly&nbsp;because it lacks of the "addressability" concept).</p> <p>&nbsp;</p> <h6>Putting All Together&nbsp;</h6> <p>So, in order to accomplish both things, we need not only a good tool in the <strong>developer side</strong> but also a good framework in the <strong>user side</strong> to make the full story available for us, because feedback is -at least- as important as early-prototypes.</p> <p>&nbsp;</p> <p><strong>Prototyping</strong> should not be seen as the task involved in building an artifact, but as the continuous&nbsp;process of adapting the user interface to the users needs. </p> <p>&nbsp;</p> <p>In this way, everything we can do to reduce the time from the development to the user feedback, is going to give us more time to do more iterations, and as with continuous integration,&nbsp;each iteration will increase the quality of our "final" product.&nbsp;</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19163545-430143539365210023?l=www.himalia.net%2Fblogs%2Fleovernazza%2Findex.php'/></div>leovernazzahttp://www.blogger.com/profile/15048846503206922462noreply@blogger.com2tag:blogger.com,1999:blog-19163545.post-20967169017129795572007-10-02T18:52:00.001-03:002007-10-02T19:21:20.040-03:00Abstraction -vs- Testing<p>During the <a href="http://www.zmmi.de/mducde2007">MDUCDE 2007</a> in Seoul, just before my presentation, <a href="http://ti.arc.nasa.gov/people/asaf/">Asaf Degani</a>&nbsp;did a great presentation about his work on <strong>UI correctness</strong>. Basically,&nbsp;he exposed how inconsistencies between the user model (what the user thinks about what the application does) and the user interface&nbsp;model can produce very frightening problems. The example he&nbsp;presented&nbsp;was a inconsistence in the aircraft autopilot... (I have the full paper in my notebook but <a href="http://ase.arc.nasa.gov/news/story.php?id=443">I couldn't find it online</a>).</p> <blockquote> <p><em>"The conceptual approach for generating correct and succinct user-models is based on the fact that not all the system’s internal states need to be individually presented to the user"</em>. </p></blockquote> <p>That is, the user interface is a projection/view of the application. So, the <strong>user model&nbsp;</strong>is different from the&nbsp;<strong>user interface</strong> that is also different&nbsp;from the&nbsp;<strong>application/machine</strong>. Asaf modeled the user model from the <em>user manual</em> and he found that with the aim of reducing information overhead sometimes what the manual <em>teach</em> is not what the application/machine actually does. </p> <p>&nbsp;</p> <p>&nbsp;<a href="http://www.himalia.net/blogs/leovernazza/images/AbstractionvsTesting_10B85/usermodel_vs_uimodel.png" atomicselection="true"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" alt="usermodel_vs_uimodel" src="http://www.himalia.net/blogs/leovernazza/images/AbstractionvsTesting_10B85/usermodel_vs_uimodel_thumb.png" border="0"></a> </p> <p>&nbsp;</p> <p>Suppose the plane is&nbsp;planning at 5000ft, if the pilot enters 10000ft in the autopilot interface, then the plane will climb until that height.</p> <p>Then if the pilot set a new lower height after the airplane has passed a <em>special point</em>, then the airplane&nbsp;turns into an undetermined state, and continues climbing indefinitely. The problem arises because&nbsp;the pilot thinks (because the user manual tells him)&nbsp;this <em>special point </em>is calculated in a way that is not the real way. From the pilot point of view, the machine is behaving&nbsp;in a non-deterministic way: sometimes it works as expected, sometimes it doesn't but he doesn't know why. Why did they write the manual in this way? &nbsp;Well... because with the information available in the user interface, the pilot couldn't calculate the real <em>special point</em>, so they decided to avoid "the details" [1].</p> <p>&nbsp;</p> <p>&nbsp;<a href="http://www.himalia.net/blogs/leovernazza/images/AbstractionvsTesting_10B85/aircraft_autopilot.jpg" atomicselection="true"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="299" alt="aircraft_autopilot" src="http://www.himalia.net/blogs/leovernazza/images/AbstractionvsTesting_10B85/aircraft_autopilot_thumb.jpg" width="640" border="0"></a></p> <p>&nbsp;</p> <p>Obviously,&nbsp;Asaf concluded that&nbsp;<strong>the UI is incorrect</strong>&nbsp;because it doesn't give the user all the&nbsp;information he needs to do the task. Maybe the <em>manual </em>is incorrect too, but what actually matters is that they are inconsistent.</p> <p>&nbsp;</p> <p>From my point of view, this is a particular case of a wider&nbsp;topic that came again and again during the conference, in all the forms you can imagine (from cars to aircraft autopilots and <a href="http://www.dfki.uni-kl.de/smartfactory/index.en.html">smart factories</a>). When you use <strong>different languages</strong> for each world you have to do a lot of extra work in testing to ensure you are keeping it consistent, because&nbsp;basically, what you are doing is to add <strong>more translations</strong>.&nbsp;The bigger the difference between the languages, the bigger is the probability to produce translation errors between them.&nbsp;In some fields, it may be still too difficult to unify both worlds in one only language, but in others, we are just not taking the right approach to solve the problems.</p> <p>&nbsp;</p> <p>However it also happens in other models: software design, implementation, etc. If we were able to merge them, we could avoid testing the translations. </p> <p>&nbsp;</p> <p><a href="http://www.himalia.net/blogs/leovernazza/images/AbstractionvsTesting_10B85/ReducingTranslations.jpg" atomicselection="true"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" alt="ReducingTranslations" src="http://www.himalia.net/blogs/leovernazza/images/AbstractionvsTesting_10B85/ReducingTranslations_thumb.jpg" border="0"></a> </p> <p>&nbsp;</p> <p>Some time ago I had a similar conversation with <a href="http://weblogs.asp.net/aaguiar/">Andrés</a> about this topic (he had written a <a href="http://weblogs.asp.net/aaguiar/archive/2005/12/05/Test-Driven-Development-vs-working-at-the-right-level-of-abstraction.aspx">post about it</a>). We agreed that when you express things <strong>at the right abstraction level, testing is useless</strong>, because it becomes a tautology. Would you test that&nbsp;the <strong>+= operator </strong>is working properly in C# or Java?. I wouldn't.&nbsp;</p> <p>&nbsp;</p> <p>To put this in the context of Asaf's work, if the aircraft autopilot and the manual are made <em>with the same language</em>, his work would be useless. You wouldn't need to prove the UI <em>correctness</em> because it will always be consistent with the user model [2].</p> <p>&nbsp;</p> <p>Obviously, taking this approach ought you to test your <em>high-abstraction language...</em> it is a trade-off,&nbsp;but in <strong>most of the cases</strong> this is a far simpler and <strong>better limited task </strong>than testing&nbsp;all the user interfaces, and sometimes it can also be <em>"outsourced for free"</em> as we do with the <strong>+= operator</strong>.</p> <p>&nbsp;</p> <p>I think <a href="http://blogs.msdn.com/eugeniop/">Eugenio Pace</a>&nbsp;said exactly&nbsp;this in a different way a week ago, <a href="http://www.genexus.com/portal/hgxpp001.aspx?2,47,731,O,E,0,MNU;E;160;3;MNU;,">talking about SaaS in the Genexus Meeting</a>. He proposed something like the <a href="http://en.wikipedia.org/wiki/Conservation_of_mass">Law of Conservation of Mass</a> for <em>complexity</em> and <em>software</em>. He said: <strong>you can't avoid complexity, but you can redistribute responsibilities</strong> and&nbsp;that is what SaaS is about. </p> <p>&nbsp;</p> <p>I think it is also what DSLs are about, translating complexity until some day, when magically a lot of testing and translations disappear and you can focus on what is really important for your business.</p> <p>&nbsp;</p> <p>&nbsp;</p> <p><font size="2">[1]&nbsp;Yes, this is how an aircraft autopilot works today, but don't panic, it is a very strange situation and I&nbsp;believe they can&nbsp;take the airplane control again in any case. </font><font size="2">I can't remember the special point name, and the exact calculation, but it's not the important thing here.</font></p> <p><font size="2"></font>&nbsp;</p> <p><font size="2">[2] Asaf is currently working on how to automatically generate the UI from a reduced user model and avoid the testing by producing correct user interface by design.</font></p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19163545-2096716901712979557?l=www.himalia.net%2Fblogs%2Fleovernazza%2Findex.php'/></div>leovernazzahttp://www.blogger.com/profile/15048846503206922462noreply@blogger.com0tag:blogger.com,1999:blog-19163545.post-41347001846627336702007-10-02T14:18:00.001-03:002007-10-02T14:18:57.637-03:00How To Solve A Conditioned-Air Bug?<p><a href="http://www.himalia.net/blogs/leovernazza/images/HowToSolveAConditionedAirBug_AB1E/DSC02539.jpg" atomicselection="true"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="480" alt="DSC02539" src="http://www.himalia.net/blogs/leovernazza/images/HowToSolveAConditionedAirBug_AB1E/DSC02539_thumb.jpg" width="640" border="0"></a>&nbsp;</p> <p>Ingredients: An elastic eyes-cover and food aluminum paper. </p> <p>It worked for 10 hours avoiding the cold air directly in my face ;)&nbsp;</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19163545-4134700184662733670?l=www.himalia.net%2Fblogs%2Fleovernazza%2Findex.php'/></div>leovernazzahttp://www.blogger.com/profile/15048846503206922462noreply@blogger.com0tag:blogger.com,1999:blog-19163545.post-71801534044271806242007-09-27T02:01:00.001-03:002007-09-27T02:05:08.326-03:00Update your feed<p>Please, update your feed to point to <a title="http://feeds.feedburner.com/leovernazza" href="http://feeds.feedburner.com/leovernazza">http://feeds.feedburner.com/leovernazza</a>.</p> <p>&nbsp;</p> <p>I also categorized all my old posts and added a "Labels" menu on the right pane.</p> <p>I would like to put it as a <strong>tag cloud</strong> but I will need to fight against Blogger or move to another publisher. </p> <p>(It's not so easy when you are publishing via FTP from Blogger as I am... probably I should change something there)</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19163545-7180153404427180624?l=www.himalia.net%2Fblogs%2Fleovernazza%2Findex.php'/></div>leovernazzahttp://www.blogger.com/profile/15048846503206922462noreply@blogger.com0tag:blogger.com,1999:blog-19163545.post-20253854667626704562007-09-20T15:49:00.001-03:002007-09-21T13:43:56.168-03:00What Is A Platform?*<p>Probably, you have read the <a href="http://blog.pmarca.com/2007/09/the-three-kinds.html">Marc Andreessen' post</a> about the three kinds of platforms, and&nbsp;the <a href="http://visitmix.com/Blogs/Joshua/response-to-quotthree-platforms-you-meetquot/">interesting answer from Joshua Allen</a>. If you don't, I recommend both. </p> <p>&nbsp;</p> <p>First, I don't believe&nbsp;<a href="http://en.wikipedia.org/wiki/Marc_Andreessen">Marc Andreessen</a>&nbsp;is using&nbsp;his argument to advertise <a href="http://www.ning.com/">Ning</a>. It makes no sense, he doesn't <em>need</em> it. From my point of view, he has an obviously strong conviction about where the platforms should go, and <em>that is the reason why </em>he founded it. </p> <p>&nbsp;</p> <p>He proposes basically two things:&nbsp;something can be called a platform if you can <strong>program it</strong>; and that&nbsp;you can classify all the platforms in three levels depending on <strong>where the code runs </strong>(remote code that uses an <em>API</em> to communicate with the platform, a <em>plugin</em> attached to the platform, an <em>application</em>&nbsp;inside of the platform).</p> <p>&nbsp;</p> <p>Then, Joshua responded that his analysis has some problems because <strong>the data </strong><em>is</em> the platform, not the software. That is clearly <em>part of </em>the vision of <a href="http://en.wikipedia.org/wiki/Tim_Berners-Lee">Tim Berners-Lee</a> for the <a href="http://en.wikipedia.org/wiki/Semantic_web">semantic web</a>.</p> <p>&nbsp;</p> <p>But, my question is: <strong>is data enough</strong>? </p> <p>I don't think so. I think we need a Marc Andreessen' style platform to make the Joshua's data accessible in a massive and new way for everyone, something very close to the&nbsp;<a href="http://www.joelonsoftware.com/items/2007/09/18.html">Strategy Letter IV</a> that <a href="http://www.joelonsoftware.com/AboutMe.html">Joel</a> wrote a few days ago. With <strong>that conviction</strong> I founded Himalia two years ago, to give the&nbsp;developers something they <strong>can program </strong>to <strong>give their users much more data </strong>available, in an <a href="http://www.himalia.net/docs_semanticUI.html">easy and interoperable</a> way. This is a very long way, but I am convinced that it is where we should go, because we have the technology to do that.</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>(*) I added this post to my software redefinition series, <em>What Is A X?.</em> We need to rethink many of the definition of the main concept of our still young industry.</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19163545-2025385466762670456?l=www.himalia.net%2Fblogs%2Fleovernazza%2Findex.php'/></div>leovernazzahttp://www.blogger.com/profile/15048846503206922462noreply@blogger.com0tag:blogger.com,1999:blog-19163545.post-67846494991040646512007-09-09T10:56:00.001-03:002007-09-10T09:20:23.375-03:00Usability Cookie - Airplane entertainment system<p>I get very frustrated using the <a href="http://www.lan.com/">LAN</a> entertainment system because of a stupid failure in the design of its <a href="http://www.himalia.net/docs_navigationModel.html">Navigation Model</a>. I want to share it with you, because little things like this are the ones that make the difference between great and bad experiences. In this case, the difference between entertainment and a post with bad-publicity for the company ;)</p> <p align="center"><embed src="http://www.youtube.com/v/06on0bHtsto" width="425" height="350" type="application/x-shockwave-flash"> </p> <p align="center"><font size="2">Interaction with the entertainment system.</font></p> <p>I was just looking for some music to&nbsp;help me overtake the 11-hours&nbsp;flight from Los Angeles to Santiago, so I turned on the individual entertainment system I had in front of me. It presented a friendly menu where&nbsp;I selected <em>Audio</em> and&nbsp;then <em>Library</em>. Then it showed an index of <em>categories</em>, and the <em>albums by category</em> at the right pane. As the&nbsp;display wasn't&nbsp;too big (around 10'') the right pane just presented 6 albums, and you had to use the page controls to explore each category in depth. I selected a <a href="http://en.wikipedia.org/wiki/Massive_Attack">Massive Attack</a> album that was in the 13th (of 24) page, so, I had to pass 12 pages... </p> <blockquote> <p><font color="#0000a0">Suggestion #1: The average category had 10 pages and the only way of exploring them was just with a next/previous page control. A scrollbar&nbsp;was best suited for that case (a user that knows where is going can move faster); other solution could be to add a page index (like the one in the Google result page).</font></p></blockquote> <p>But I couldn't listen to the music because&nbsp;after my choice I received a "<strong>This selection is currently unavailable. Try again later</strong>" error message.&nbsp;</p> <blockquote> <p><font color="#000080">Rule&nbsp;#1: Be proactive; don't wait for the selection to show the "unavailable" message. If you can, remove (or disable) the unavailable elements before the user have to try them. </font></p></blockquote> <p>After such an imprecise <a href="http://www.useit.com/alertbox/20010624.html">error message</a> I couldn't realize what the problem was, but anyway I was ready to try with another album. But for my surprise, after the message I had to start from scratch again because I was redirected to the&nbsp;<em>Home</em> <em>screen</em>!!! Why? Is this a kind of penalty for trying to listen to Massive Attack? Well... ok, I made the whole process again and selected the <a href="http://www.jackjohnsonmusic.com/">Jack Johnson</a>'s album <a href="http://www.amazon.com/Between-Dreams-Jack-Johnson/dp/B0007GAEVW">In Between Dreams</a>... but I had the same problem again. So, I desisted and continued with <a href="http://www.himalia.net/blogs/leovernazza/2007/08/i-have-dsl-book.html">the book</a>.</p> <blockquote> <p><font color="#000080">Rule #2: Never redirect&nbsp;your user to the home page unless there is no other choice. Try to conserve the context always.</font></p></blockquote> <p>It this case, the obvious&nbsp;decision is redirecting the user back to the album selection screen <strong>remembering </strong>the category and the page (that is, doing a good BACK). I didn't count the clicks I needed to get frustrated but they were surely around 30.&nbsp;In this case, 15&nbsp;clicks in average each time&nbsp;you want to pick a song added to a intriguingly high response time... seems a little&nbsp;expensive for an application with a so bounded functionality. </p> <p align="center"><a href="http://www.himalia.net/blogs/leovernazza/images/UsabilityTip1Airplaneentertainmentsystem_7E52/AirplaneEntertainmentSystem_NavModels.jpg" atomicselection="true"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="329" alt="AirplaneEntertainmentSystem_NavModels" src="http://www.himalia.net/blogs/leovernazza/images/UsabilityTip1Airplaneentertainmentsystem_7E52/AirplaneEntertainmentSystem_NavModels_thumb.jpg" width="503" border="0"></a> </p> <p align="center"><font size="2">Navigation Modes.&nbsp;Above is the suggested, below the current.</font></p> <p>From my point of view, the problem that derived the current design of the system is obvious: it is a clear case of a <em>stupidly-use-case-driven-application</em>. I can see the analyst writing the <strong>Play Album </strong>Use Case<em>:</em> "<em>...if I can't play the album, show error. Then, end</em>". </p> <blockquote> <p><font color="#000080">Rule #3: Think always in the step <em>after </em>the end of a use case, both in success and failure scenarios.</font></p></blockquote> <p>Actually, this rule is the <a href="http://www.designpattern.lu.unisi.ch/PatternsRepository/Pattern/pattern.asp?id=27">opportunistic link pattern</a>&nbsp;put in other words. For instance, after you complete the buy process in Amazon, they provide you similar items to continue buying. The opposite is to present a "Thank you for buying in Amazon message" where the only choice for the user is to close the browser, that is what the entertainment system does. </p> <p>&nbsp;</p> <p>There are many examples out there of <em>stupidly-use-case-driven-applications</em>, one that always surprised me during my university days was the <a href="http://www.bedelias.edu.uy">Beadleship's site</a> where you had to log into the system <strong>twice</strong> if you wanted to&nbsp;inscribe&nbsp;for <strong>two</strong> courses... the use case should be something like: <em>the user select Inscriptions from the menu, then enters his user and password, then select the course,&nbsp;end</em>.</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19163545-6784649499104064651?l=www.himalia.net%2Fblogs%2Fleovernazza%2Findex.php'/></div>leovernazzahttp://www.blogger.com/profile/15048846503206922462noreply@blogger.com2tag:blogger.com,1999:blog-19163545.post-88282675465016094362007-08-31T00:55:00.001-03:002007-08-31T01:48:26.160-03:00I have the DSL Tools book!<p>It's&nbsp;very strange to see part of your work in someone else book... </p> <p>Thank you <a href="http://weblogs.asp.net/aaguiar/">Andrés</a>&nbsp;for the book!</p> <p>&nbsp;</p> <p><a href="http://www.himalia.net/blogs/leovernazza/images/IhaveDSLbook_C9F/fotoLibro.jpg" atomicselection="true"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="179" alt="fotoLibro" src="http://www.himalia.net/blogs/leovernazza/images/IhaveDSLbook_C9F/fotoLibro_thumb.jpg" width="240" border="0"></a> </p> <p>&nbsp;</p> <p>I will take the book to <a href="http://www.himalia.net/blogs/leovernazza/2007/08/i-going-to-mducde2007-in-seoul.html">the conference</a> to read during my loooong flight to Seoul. I will post some thoughts about it when I come back home.</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19163545-8828267546501609436?l=www.himalia.net%2Fblogs%2Fleovernazza%2Findex.php'/></div>leovernazzahttp://www.blogger.com/profile/15048846503206922462noreply@blogger.com0tag:blogger.com,1999:blog-19163545.post-31605633184673718642007-08-30T19:11:00.001-03:002007-09-24T01:20:36.631-03:00MIT Sketching<p>Take a look to <a href="http://www.youtube.com/watch?v=NZNTgglPbUA">this video</a>. I am wondering why I didn't have this tool during my physics classes in the university.</p> <p>The video's comments don't seem to agree with me ;)</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19163545-3160563318467371864?l=www.himalia.net%2Fblogs%2Fleovernazza%2Findex.php'/></div>leovernazzahttp://www.blogger.com/profile/15048846503206922462noreply@blogger.com0tag:blogger.com,1999:blog-19163545.post-75037889965421814802007-08-28T22:40:00.001-03:002007-08-28T22:42:18.492-03:00Pay-per-crawl<p>One of the first things I understood after I created this blog was that Google is using their power (position) in&nbsp;a very insane way. To say in their words, they are being a little <strong><em><a href="http://www.google.com/corporate/tenthings.html">evil</a></em></strong>.</p> <p>&nbsp;</p> <p>People think Google indexes the web, but really, they don't make too much (after they created the brand and the PageRank algorithm). Some studies say 30% of the web isn't indexed. That is, 1 of&nbsp;3 pages you are looking for, is not present in <em>any</em> search engine.</p> <p>&nbsp;</p> <p>Believe me, you have to work hard just <strong>to enter </strong>in a search engine (one month or more from your submission), and then, if some day they decide to include your website, you have&nbsp;to hire a SEO to make Google work properly, and appear in the first page when the user type your name...&nbsp;Google should be indexing the web in the <em>right </em>way, not you (by hiring a SEO for them), or Google should pay for it.</p> <p>&nbsp;</p> <p><img style="margin: 0px 15px 0px 0px" src="http://www.google.com/intl/en_ALL/images/logo.gif" align="left">It is a vicious circle, you pay a SEO and Google get more people working for them to get the top-5 positions for the "britney spears" search entry. Then, that word becomes more competitive and you need another SEO to keep your position. It is ironic, everybody doing the Google's work while they give 20% to their employees to create Orkut for Brazilians and play ping-pong ;)</p> <p>&nbsp;</p> <p>But if it is not enough,&nbsp;Google consumes your bandwidth (money)&nbsp;every time they crawl your site. Ok, you may think it isn't too much waste, they are just using a little part of your bandwidth... but, what would you think if 1 million of companies start crawling the web and <em>your site</em>, just like Google does. Clearly, that is different, because the abuse becomes obvious.&nbsp;On the other hand, you can't&nbsp;use&nbsp;a robot to consume their money&nbsp;(i.e. writing a program to auto-click adSense advertisements) because they may sue you. So, why can they waste my&nbsp;money but I can't&nbsp;waste theirs? Do you think it is fair? I know, I can write a robot.txt file to avoid the crawler, but why should I waste my time for them? Why are they assuming&nbsp;they can use my bandwidth?</p> <p>&nbsp;</p> <p>I think it&nbsp;will be&nbsp;a problem in the long run. But don't panic, it won't happen for a while. Some day, if everything continues as it goes, people will notice that Google is not producing accurate results for their searches, because SEO's are manipulating them, and a fairer search engine will emerge. Google is becoming a <strong>advertised menu</strong>, and&nbsp;I don't want to search stuff there.</p> <p>&nbsp;</p> <p>Let be sincere, Google is not producing the web, they are just getting money from <strong>your production </strong>and using <strong>your resources </strong>to do that! It could be a fair model when they were a start-up, but nowadays, that they are earning billions of&nbsp;dollars with your customers and your bandwidth, and you have to outsource a SEO for them, I think it can be considered <strong>evil</strong>, don't you?.</p> <p>&nbsp;</p> <p>I can think in two solutions to this problem on the top of my mind:&nbsp;Google should pay-per-crawl your site, and they should crawl&nbsp;your site only if you specifically allow them (crawler should be disabled by default).&nbsp; But I will keep thinking, in Internet you always can do something to avoid the use of the power.</p> <p>&nbsp;</p> <p>What do you think? May be, I am the only one thinking that this model is wrong.</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19163545-7503788996542181480?l=www.himalia.net%2Fblogs%2Fleovernazza%2Findex.php'/></div>leovernazzahttp://www.blogger.com/profile/15048846503206922462noreply@blogger.com0tag:blogger.com,1999:blog-19163545.post-12211881519554815592007-08-16T15:21:00.001-03:002007-08-16T15:22:56.755-03:00I'm going to the MDUCDE2007 in Seoul<p>I am traveling to Seoul (South Korea)&nbsp;to present "<strong>HIMALIA: Model-Driven User Interfaces Using Hypermedia, Controls And Patterns</strong>" in the first workshop on Model-Driven User-Centered Engineering 2007. The presentation <a href="http://www.zmmi.de/mducde2007/">is programmed</a> to be on September&nbsp;5 at 14:00hs, after the launch. I am expecting to meet interesting people there, and have some&nbsp;productive interchange with other similar-fields researchers to enrich ourselves.</p> <p>&nbsp;</p> <table cellspacing="0" cellpadding="2" width="730" border="0" unselectable="on"> <tbody> <tr> <td valign="top" width="383"><img height="200" src="http://www.excelloz.com/imagedata/Travel_guide/ma060800881.jpg" width="266">&nbsp;</td> <td valign="top" width="339">&nbsp;<img height="200" src="http://i1.trekearth.com/photos/22517/seoul_sungnyemun_gate.jpg" width="302"></td> <td valign="top" width="6"><img height="200" src="http://www.urbanphoto.net/blog/wp-content/uploads/2006/11/seoul.jpg" width="265"></td></tr></tbody></table> <p>&nbsp;</p> <p>I made <a href="http://maps.google.com/maps/ms?hl=en&amp;ie=UTF8&amp;msa=0&amp;ll=8.05923,-126.210937&amp;spn=127.404701,326.953125&amp;t=k&amp;z=2&amp;om=1&amp;msid=115097592639863061943.000437c9f935904f5e9e9">this map</a> to show the straight and <strong>VERY&nbsp;LONG</strong> flight. It is difficult to measure the amount of time on-the-fly because of the different time zones, but in any case, it isn't less than 30 hours!!! I hope not to experience very much jet lag, but I think it will be impossible to&nbsp;distinguish&nbsp;between <em>jet lag</em> and&nbsp;<em>30 hours of flight</em> ;)&nbsp;</p> <p>&nbsp;</p> <p>So, don't expect very much activity in this blog from 1st to 9th September. I will share the photos and surely some comments when I came back home. </p> <p>&nbsp;</p> <p>BTW, if someone knows the people in the <a href="http://www.dicyt.gub.uy/">DICyT</a>, could you&nbsp;hurry up them? I sent them an one-page-letter&nbsp;three weeks ago, but they didn't have enough time to see it <strong>yet</strong>... came on! it's one page! They should be receiving like 1000 letters a day to argue that, and I don't think it's the case.</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19163545-1221188151955481559?l=www.himalia.net%2Fblogs%2Fleovernazza%2Findex.php'/></div>leovernazzahttp://www.blogger.com/profile/15048846503206922462noreply@blogger.com0tag:blogger.com,1999:blog-19163545.post-4848800712420302052007-08-09T14:45:00.001-03:002007-09-24T01:19:44.077-03:00Navigation != Presentation<p><a href="http://browsegoods.com/">BrowseGoods</a>&nbsp;(via <a href="http://www.elabra.org/archivos/2007/08/browse-goods/">elAbra</a>, via dirk) presents the same navigation model than an usual e-commerce shopping, but, with a different presentation approach.</p> <p>&nbsp;</p> <p>For both cases the <strong>Navigation Model</strong>&nbsp;should look like a traditional hierarchy composed of menus and indexes of goods. But this time,&nbsp;it is presented in an only zoom-in-out control, instead of using traditional controls as does -for example- Amazon (i.e. menus, grids, search boxes, etc.). </p> <p>&nbsp;</p> <p>The <strong>Navigation Model </strong>exposes the navigation paths the user have to follow to reach each concept; the <strong>Presentation Model </strong>just&nbsp;defines where and when <em>render</em> each concept and specifies which control to use for each case.</p> <p>&nbsp;</p> <p>It can be a good example to show the power of the <a href="http://www.himalia.net/docs_modelOverview.html">separation of concerns</a> exposed in the Himalia's meta-model (that was taken from&nbsp;older <strong>hypermedia</strong> methods). I will add it to our <a href="http://studios.thoughtworks.com/mingle-project-intelligence">Mingle</a>.</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19163545-484880071242030205?l=www.himalia.net%2Fblogs%2Fleovernazza%2Findex.php'/></div>leovernazzahttp://www.blogger.com/profile/15048846503206922462noreply@blogger.com0tag:blogger.com,1999:blog-19163545.post-79298705417099015182007-08-06T16:58:00.001-03:002007-09-24T01:17:18.039-03:00Plastic figurine as input<p>Fisher-Price has launched the <a href="http://www.fisher-price.com/fp.aspx?st=2622&amp;e=commercial&amp;pid=41685&amp;acccat=easylinkacc&amp;mainid=41685">Easy Link Internet Launch Pad</a>. The kid can interact with the computer <strong>safely</strong> by introducing different figurines in a&nbsp;USB hub. For each character a different website is loaded into the browser.</p> <p>&nbsp;</p> <p>It is another case of reducing the power of a platform for a very focused niche, or the <em>less is more</em> principle.</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19163545-7929870541709901518?l=www.himalia.net%2Fblogs%2Fleovernazza%2Findex.php'/></div>leovernazzahttp://www.blogger.com/profile/15048846503206922462noreply@blogger.com0tag:blogger.com,1999:blog-19163545.post-49983879054718453562007-08-05T16:44:00.001-03:002007-09-24T01:15:50.581-03:00New user interface for search engines!<p>I am really tired of listening&nbsp;about&nbsp;"new user interfaces paradigms" when people is just <strong>adding tabs</strong> to the existing and old paradigm (i.e. Mozilla, Internet Explorer, etc.). But I know, I can still understand the difference between promotion and paradigms...</p> <p>&nbsp;</p> <p><a href="http://nofoodhere.com/">No Food Here</a>&nbsp;is a "futuristic search engine" that changes the old search engine user interfaces, incorporating (guess what) tabbed searching...</p> <p>&nbsp;</p> <p>Anyway, adding tabs looks like a good idea <strong>also</strong> here.</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19163545-4998387905471845356?l=www.himalia.net%2Fblogs%2Fleovernazza%2Findex.php'/></div>leovernazzahttp://www.blogger.com/profile/15048846503206922462noreply@blogger.com2tag:blogger.com,1999:blog-19163545.post-37314454559948954132007-07-27T14:37:00.001-03:002007-09-24T01:14:32.246-03:00Book-Driven Development<p>Watching <a href="http://www.infoq.com/interviews/chris-anderson-wpf">this</a> Chris Anderson's interview, he explains the new development methodology they are using in the Connected Systems team. </p> <p>He says they are going beyond Testing-Driven Development (and <a href="http://www.himalia.net/blogs/leovernazza/2007/05/name-and-conquer.html">obviously</a> Behavior-Driven Development), they are not thinking how to test the code they are writing, they are thinking <strong>how to write the book that explains the technology </strong>while they write it!!! </p> <p>&nbsp;</p> <p>Really, I don't know if it is true, but it sounds good.</p> <p>&nbsp;</p> <p><strong>TDD </strong>and <a href="http://www.himalia.net/blogs/leovernazza/2007/05/name-and-conquer.html">BDD</a> are based on how your consumer will use your technology, and in this kind of team, their consumers usually read the book while they use the technology. I don't believe you can rigorously follow this methodology, but it could be an interesting principle to have in mind while creating new stuff.&nbsp;</p> <p>&nbsp;</p> <p>P.S: BTW, he also thinks that WPF is a&nbsp;"tipping point" for model-driven development. May be the start for model-driven user interfaces? Who knows..</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19163545-3731445455994895413?l=www.himalia.net%2Fblogs%2Fleovernazza%2Findex.php'/></div>leovernazzahttp://www.blogger.com/profile/15048846503206922462noreply@blogger.com0tag:blogger.com,1999:blog-19163545.post-29797986896368155532007-07-19T20:16:00.001-03:002007-09-24T01:12:18.714-03:00What Is An Operating System?<p>We all&nbsp;know that Windows, Linux, OS/2, Unix, etc&nbsp;are Operating Systems.. but how do you define them concretely? </p> <p>Is it&nbsp;a set of drivers? Is it a <strong>platform to run applications</strong>? Is it just&nbsp;a set of applications? </p> <p>I remember the OS's teacher trying to answer this question the first day of classes... but he couldn't find the right answer.</p> <p>&nbsp;</p> <p><a href="www.facebook.com">Facebook</a> <a href="http://www.techcrunch.com/2007/07/19/breaking-facebook-has-acquired-parakey/">has acquired</a>&nbsp;<a href="http://www.parakeyos.com">Parakey</a>, a company that promote themselves as a Web Operating System.. </p> <p>So, this question came to my mind again: is Parakey really an Operating System?&nbsp; What do you think?</p> <p>&nbsp;</p> <p>But, who cares? I am&nbsp;sure that Facebook has&nbsp;paid it as if they were ;)</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19163545-2979798689636815553?l=www.himalia.net%2Fblogs%2Fleovernazza%2Findex.php'/></div>leovernazzahttp://www.blogger.com/profile/15048846503206922462noreply@blogger.com3tag:blogger.com,1999:blog-19163545.post-70728960130141679312007-07-05T13:22:00.001-03:002007-09-24T01:10:44.768-03:00iPhone? No, Simon!<p>If you think the iPhone was the first multi-touch user interface phone, you are wrong.</p> <p><a href="http://www.billbuxton.com/">Bill Buxton</a>, the man behind Microsoft Surface explains the multi-touch history <a href="http://www.billbuxton.com/multitouchOverview.html">here</a>&nbsp;(and his history with multi-touch user interfaces). </p> <p>Please, don't forget to scroll down to see the <strong>Simon </strong>phone&nbsp;launched for IBM and Bell South in <strong>1992</strong>!!!! </p> <p>&nbsp;</p> <p>The reasons why nobody know it: </p> <ol> <li>launched too early? <li>technology adoption curve is longer than people believe? <li>marketing is SO important?</li></ol> <p>What do you think?</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19163545-7072896013014167931?l=www.himalia.net%2Fblogs%2Fleovernazza%2Findex.php'/></div>leovernazzahttp://www.blogger.com/profile/15048846503206922462noreply@blogger.com2tag:blogger.com,1999:blog-19163545.post-86801665526897165462007-06-28T13:05:00.001-03:002007-06-28T13:13:28.354-03:00Himalia on Acropolis<p>Some people believe Himalia and Acropolis may overlap in some zones. And they are right! Himalia and Acropolis overlap in the zones where Himalia doesn't want to be... Yes, some time ago we had to build our own service schema and now we were thinking about a composite strategy for large teams... but it isn't our real focus. We just want to have more time to show you how we can build semantic user interface in minutes... this is <a href="http://www.himalia.net/about.html">our mission</a>!!! (BTW, we will need this services schema anyway for the other platforms: asp.net&nbsp;and .net&nbsp;2.0. Keep in mind that Acropolis requires .net 3.0)</p> <p>&nbsp;</p> <p>Now that&nbsp;the first Acropolis CTP is public, our composite strategy will be far easier: we should put just on top of Acropolis. </p> <p>So, I spent a couple of hours trying my&nbsp;first approach... (there are other two methods we are discussing right now and will attack in the near future).</p> <p>&nbsp;</p> <p>****&nbsp;Disclaimer: This code doesn't work with the public version available from December. ****</p> <p>&nbsp;</p> <p>1. Create a Part Library, and name it Himalia.Acropolis</p> <p>2. Add a new Part (HimaliaPart)&nbsp;and a new PartView (HimaliaPartView)</p> <p>3. Add a new connection point to the Himalia Part: RootElement</p> <blockquote> <p><span style="color: rgb(163,21,21)">&nbsp; </span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(163,21,21)">AcropolisComponent</span><span style="color: rgb(0,0,255)">.</span><span style="color: rgb(255,0,0)">ConnectionPoints</span><span style="color: rgb(0,0,255)">&gt;<br></span><span style="color: rgb(163,21,21)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(163,21,21)">ComponentProperty</span><span style="color: rgb(255,0,0)"> Name</span><span style="color: rgb(0,0,255)">="RootElement" /&gt;<br></span><span style="color: rgb(163,21,21)">&nbsp; </span><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(163,21,21)">AcropolisComponent</span><span style="color: rgb(0,0,255)">.</span><span style="color: rgb(255,0,0)">ConnectionPoints</span><span style="color: rgb(0,0,255)">&gt;</span></p></blockquote> <p>4. Override the <strong>OnFactoryCreationComplete</strong> method on the HimaliaPart</p><pre class="code"> <span style="color: rgb(0,0,255)">protected</span> <span style="color: rgb(0,0,255)">override</span> <span style="color: rgb(0,0,255)">void</span> OnFactoryCreationComplete()<br /> {<br /> <span style="color: rgb(0,0,255)">base</span>.OnFactoryCreationComplete();<br /><br /> <span style="color: rgb(0,128,0)">// Creates the Himalia Session in the WPF Runtime<br /></span> <span style="color: rgb(43,145,175)">WinFxUISession</span> session = <span style="color: rgb(0,0,255)">new</span> <span style="color: rgb(43,145,175)">WinFxUISession</span>(<span style="color: rgb(0,0,255)">this</span>.Name);<br /> session.StandAlone = <span style="color: rgb(0,0,255)">false</span>;<br /> <span style="color: rgb(0,0,255)">this</span>.Title = session.Title;<br /><br /> <span style="color: rgb(0,128,0)">// Set the root element to the connection component property<br /></span> <span style="color: rgb(0,0,255)">this</span>.RootElement.Value = session.Start&lt;<span style="color: rgb(43,145,175)">FrameworkElement</span>&gt;();<br /> }</pre><br /><p>5. Override the <strong>OnPartAttachedmethod</strong> on the HimaliaPartView</p><pre class="code"> <span style="color: rgb(0,0,255)">protected</span> <span style="color: rgb(0,0,255)">override</span> <span style="color: rgb(0,0,255)">void</span> OnPartAttached()<br /> {<br /> <span style="color: rgb(0,0,255)">base</span>.OnPartAttached();<br /><br /> <span style="color: rgb(0,128,0)">// Add the root element to the control<br /></span> <span style="color: rgb(0,0,255)">this</span>.Children.Clear();<br /> <span style="color: rgb(0,0,255)">this</span>.Children.Add(<span style="color: rgb(0,0,255)">this</span>.Part.RootElement.Value <span style="color: rgb(0,0,255)">as</span> <span style="color: rgb(43,145,175)">UIElement</span>);<br /> }</pre><br /><p>6. Now, in your Acropolis application, you can use HimaliaPart's, like this</p><pre class="code"><span style="color: rgb(163,21,21)"> </span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(163,21,21)">AcropolisApplication</span><span style="color: rgb(0,0,255)">.</span><span style="color: rgb(255,0,0)">ChildParts</span><span style="color: rgb(0,0,255)">&gt;<br /></span><span style="color: rgb(163,21,21)"> </span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(163,21,21)">Him</span><span style="color: rgb(0,0,255)">:</span><span style="color: rgb(255,0,0)">HimaliaPart Name</span><span style="color: rgb(0,0,255)">="C:\\PetShop.hui" /&gt;<br /></span><span style="color: rgb(163,21,21)"> </span><span style="color: rgb(0,0,255)">&lt;</span><span style="color: rgb(163,21,21)">Him</span><span style="color: rgb(0,0,255)">:</span><span style="color: rgb(255,0,0)">HimaliaPart Name</span><span style="color: rgb(0,0,255)">="C:\\Invoices.hui" /&gt;<br /></span><span style="color: rgb(163,21,21)"> </span><span style="color: rgb(0,0,255)">&lt;/</span><span style="color: rgb(163,21,21)">AcropolisApplication</span><span style="color: rgb(0,0,255)">.</span><span style="color: rgb(255,0,0)">ChildParts</span><span style="color: rgb(0,0,255)">&gt;</span></pre><br /><p>7. Replace the OnActivated method of the Application (it throws a null exception because the MainWindow is bad set, I don't know why)</p><pre class="code"> <span style="color: rgb(0,0,255)">protected</span> <span style="color: rgb(0,0,255)">override</span> <span style="color: rgb(0,0,255)">void</span> OnActivated(<span style="color: rgb(43,145,175)">EventArgs</span> e)<br /> {<br /> <span style="color: rgb(0,0,255)">foreach</span> (<span style="color: rgb(43,145,175)">Window</span> w <span style="color: rgb(0,0,255)">in</span> <span style="color: rgb(0,0,255)">this</span>.Windows)<br /> {<br /> <span style="color: rgb(0,0,255)">if</span> (w <span style="color: rgb(0,0,255)">is</span> <span style="color: rgb(43,145,175)">Window1</span>)<br /> {<br /> <span style="color: rgb(0,0,255)">base</span>.MainWindow = w;<br /> <span style="color: rgb(0,0,255)">break</span>;<br /> }<br /> }<br /> <span style="color: rgb(0,0,255)">base</span>.OnActivated(e);<br /> }</pre><br /><p>8. T<font face="Tahoma" color="#454545">his is how it should looks like:</font></p><br /><p><a href="http://www.himalia.net/blogs/leovernazza/images/HimaliaonAcropolis_10150/HimaliaOnAcropolisInvoices.jpg" atomicselection="true"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="444" alt="HimaliaOnAcropolisInvoices" src="http://www.himalia.net/blogs/leovernazza/images/HimaliaonAcropolis_10150/HimaliaOnAcropolisInvoices_thumb.jpg" width="519" border="0"></a> <a href="http://www.himalia.net/blogs/leovernazza/images/HimaliaonAcropolis_10150/HimaliaOnAcropolisPetShop.jpg" atomicselection="true"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="442" alt="HimaliaOnAcropolisPetShop" src="http://www.himalia.net/blogs/leovernazza/images/HimaliaonAcropolis_10150/HimaliaOnAcropolisPetShop_thumb.jpg" width="519" border="0"></a> </p><br /><p>&nbsp;</p><br /><p><strong>Conclusion</strong></p><br /><p>You can integrate Himalia and Acropolis points of view nicely. In one side, Acropolis allow you to better segment the desktop application in divisible parts. On the other side, Himalia allow you to better create each part, focusing in the most important things for your&nbsp;users. Remember, Himalia focuses on usability and is a modeling tool. Acropolis focuses on composability and extensibility and isn't a modeling tool.</p><br /><p>&nbsp;</p><br /><p>But&nbsp;soon, you will see how these developer-side separated user interfaces could be user-side integrated again... just give us some time.</p><br /><p>&nbsp;</p><br /><p></p><br /><div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:0ab782f1-62b9-46cf-bb18-f3f71b3f193a" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati tags: <a href="http://technorati.com/tags/Acropolis" rel="tag">Acropolis</a>, <a href="http://technorati.com/tags/Himalia" rel="tag">Himalia</a>, <a href="http://technorati.com/tags/Semantic%20UIs" rel="tag">Semantic UIs</a>, <a href="http://technorati.com/tags/WPF" rel="tag">WPF</a>, <a href="http://technorati.com/tags/Orcas" rel="tag">Orcas</a></div><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19163545-8680166552689716546?l=www.himalia.net%2Fblogs%2Fleovernazza%2Findex.php'/></div>leovernazzahttp://www.blogger.com/profile/15048846503206922462noreply@blogger.com0tag:blogger.com,1999:blog-19163545.post-81522062057474016062007-06-20T14:35:00.001-03:002007-09-24T01:09:28.312-03:00Multi Touch User Interfaces<p>I found this "open source multi touch" group (<a title="http://nuigroup.com/" href="http://nuigroup.com/">http://nuigroup.com/</a>)&nbsp;and the free&nbsp;C++ library (<a href="http://www.whitenoiseaudio.com/touchlib/">TouchLib</a>)&nbsp;including the Visual Studio solution.</p> <p>I would like to have enough time to give it a try!!!</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19163545-8152206205747401606?l=www.himalia.net%2Fblogs%2Fleovernazza%2Findex.php'/></div>leovernazzahttp://www.blogger.com/profile/15048846503206922462noreply@blogger.com0