tag:blogger.com,1999:blog-57370791206556869202009-07-14T19:10:29.025-07:00Atomeothe open web, web development, ubuntu, and moreRonald Schoutenhttp://www.blogger.com/profile/07626978777105658191noreply@blogger.comBlogger39125tag:blogger.com,1999:blog-5737079120655686920.post-73780855161607076962009-07-08T02:51:00.000-07:002009-07-12T01:02:43.536-07:00Better Objects Using jQuery<p>I've been working almost exclusively with JavaScript building single page applications recently. <a href="http://www.jquery.com">jQuery</a> has made developing the apps enjoyable but one area I find a bit awkward is creating complex objects.</p><p>Classes work well but can be cumbersome when creating a user interface since the object reference returned from the constructor is not a DOM node but a JavaScript object. Therefore, in order to insert the user interface component into the page, a special method like <code>getHTML</code> must be available for that object. This isn't terrible but creates more complicated code. Here's an example user interface widget - a simple box displaying a name:</p><pre>function Widget(name) {<br /> var container = $("<div/>");<br /><br /> function setName(newName) {<br /> name = newName;<br /> container.html(name);<br /> }<br /><br /> this.getHTML = function () {<br /> setName(name);<br /> return container;<br /> };<br /><br /> this.getName = function () {<br /> return name;<br /> };<br /><br /> this.setName = function (newName) {<br /> setName(name);<br /> };<br />}</pre><p>And the code that uses it:</p><pre>var nameWidget = new Widget("Dave");<br />var widgetNode = nameWidget.getHTML();<br />$(document.body).append(widgetNode);</pre><p>This isn't too bad but gets a bit ugly when you need the ability to hide, show, animate, or do anything interesting. The choice is either to attach more methods to the <code>Widget</code> class or work with the jQuery object returned by <code>getHTML</code>. Pattern-wise, adding more methods to <code>Widget</code> is the cleanest but could require creating a lot of methods. Working with the jQuery object returned by <code>getHTML</code> is easy but leads to managing two objects in your code: <code>nameWidget</code> and <code>widgetNode</code></p><p>What would be really nice is the ability to call any jQuery method on the <code>nameWidget</code> object PLUS all the methods specific to the <code>Widget</code> class. It occurred to me that this could be possible with the addition of a small jQuery Plugin I've dubbed <strong>Methods</strong>.</p><pre>(function ($) {<br /><br /> $.fn.methods = function (arg0) {<br /> if (arg0)<br /> {<br /> return this.each(function (i) {<br /> $(this).data("methods", arg0);<br /> });<br /> }<br /> else<br /> {<br /> return $(this).data("methods");<br /> }<br /> };<br /><br />})(jQuery);</pre><p>This plugin adds the <code>methods</code> method to jQuery. A collection of functions can be passed to <code>methods</code> to attach it to a specific jQuery object. Calling <code>methods</code> then returns the collection of functions. Here's a rewrite of the <code>Widget</code> class to explain this better:</p><pre>function widget(tag, name) {<br /> var container;<br /><br /> container = $(tag)<br /> .html(name)<br /> .methods({<br /> getName: function () {<br /> return name;<br /> },<br /><br /> // Return "this" for chainability<br /> setName: function (newName) {<br /> name = newName;<br /> container.html(name);<br /> return this;<br /> },<br /><br /> // Add the end method for chainability<br /> end: function () {<br /> return container;<br /> }<br /> });<br /> return container;<br />}</pre><p>And the code that uses this:</p><pre>var nameWigdet = widget("<div/>", "Dave");<br />$(document.body).append(nameWidget);<br /></pre><p>Now we have a <code>nameWidget</code> that directly corresponds to the user interface component and, using jQuery, can be inserted anywhere in the page. To access the object's specific methods, you simply call <code>methods</code>. Here's an example that shows the combination of the methods and chaining:</p><pre>nameWidget<br /> .hide()<br /> .methods()<br /> .setName("Bob")<br /> .end()<br /> .show()<br /> .addClass("widget");</pre><p>Since the <strong>Methods</strong> plugin uses <a href="http://docs.jquery.com/Core/data">jQuery's data method</a> behind the scenes, the nameWidget can actually be retrieved through a DOM lookup.</p><pre>var nameWidget = $(".widget")<br /> .hide()<br /> .methods()<br /> .setName("Sally")<br /> .end()<br /> .show();</pre><p>And that's it. In the end, Methods is a simple jQuery plugin that lets you create complex objects with custom methods and closures and can still be used like a regular jQuery object.</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5737079120655686920-7378085516160707696?l=www.atomeo.com'/></div>Ronald Schoutenhttp://www.blogger.com/profile/07626978777105658191noreply@blogger.com0tag:blogger.com,1999:blog-5737079120655686920.post-10351213539675645622008-11-16T13:29:00.000-08:002008-11-16T21:48:54.448-08:00Upgrading Dell Mini to Ubuntu 8.10 + Netbook RemixSince I want to upgrade to Ubuntu 8.10 and install the Netbook Remix, the first hurdle to overcome was the lack of a built-in optical. The folks at the <a href="http://www.ubuntumini.com">Ubuntu Mini blog</a> have a great post about <a href="http://www.ubuntumini.com/2008/10/installing-ubuntu-on-dell-inspiron-mini.html">upgrading the mini to Ubuntu 8.10</a> and provide details on installing Ubuntu from a USB Drive.<br /><br />Unfortunatley, their instructions on using the built-in "Create a USB startup disk" resulted in a "Missing Operating System" error when trying to boot from the USB Drive. I think the USB Drive I bought was subject to <a href="https://bugs.launchpad.net/ubuntu/+source/usb-creator/+bug/277903">this error</a>. However, after a bit of searching, I came across the most excellent <a href="http://unetbootin.sourceforge.net/">UNetBootin</a>.<br /><br />UNetBootin is not is the official Ubuntu repositories but the instructions on the site are easy to follow. In order to get UNetBootin to work I had to use synaptic to install the p7zip-full package. Other than that, the instructions on the site worked as expected and I ended up with a bootable USB Drive in minutes. And as an added bonus, I didn't have to <a href="http://www.ubuntumini.com/2008/10/fixing-usb-mounting-problems-after.html">fix the USB mounting problem after install</a>.<br /><br />I neglected to disable compiz in Preferences > Appearance > Visual Affects so when it came time to installing the Netbook Remix packages, the display was acting really wonky. Disabling Visual Affects after the fact made everything work fine but I would still recommend disabling them in advance. If the lack of visual affects is a turn-off, then you'll be pleasantly surprised with the nice visuals the Netbook Remix employs.<br /><span style="display: block;" id="formatbar_Buttons"><span class="on down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"></span></span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5737079120655686920-1035121353967564562?l=www.atomeo.com'/></div>Ronald Schoutenhttp://www.blogger.com/profile/07626978777105658191noreply@blogger.com0tag:blogger.com,1999:blog-5737079120655686920.post-83915653475810642602008-11-16T08:29:00.000-08:002008-11-16T15:52:01.375-08:00Dell Inspiron Mini Has ArrivedThe <a href="http://www1.ca.dell.com/content/products/productdetails.aspx/laptop-inspiron-9?c=ca&l=en&s=dhs&cs=cadhs1">Dell Inspiron Mini</a> I ordered back in mid-September (over 2 months ago) finally arrived. The wait time was atrocious and I don't really believe Dell's excuse about a global shortage of components causing the delay (other orders for the mini were still shipping much faster) but its water under the bridge. Plus I can vent in the customer satisfaction survey they sent me.<br /><br />The size of the unit surprised me. Since it has a higher resolution display than the <a href="http://en.wikipedia.org/wiki/ASUS_Eee_PC#Eee_700_series">original Eee PC</a> I played with about a year ago, I assumed the mini would be a little larger too. Not so, the mini is roughly the same size. The track pad is much easier to use, however, and the keyboard isn't nearly as bad as reviews make it out to be (but I haven't tried out every netbook either).<br /><br />The next step is upgrade from Dell's version of the Ubuntu 8.04 to Ubuntu 8.10 and install the <a href="http://www.canonical.com/projects/ubuntu/nbr">Netbook Remix</a> packages. More posts on this to come.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5737079120655686920-8391565347581064260?l=www.atomeo.com'/></div>Ronald Schoutenhttp://www.blogger.com/profile/07626978777105658191noreply@blogger.com0tag:blogger.com,1999:blog-5737079120655686920.post-52155257535577800822008-11-14T00:02:00.000-08:002008-11-14T00:07:46.594-08:00Nice JavaScript AnimationI just popped over to <a href="http://www.ubuntu.com/">Ubuntu's site</a> to download the Intrepid Ibex (Ubuntu 8.10) and saw a very well produced animation made entirely out of JavaScript. I'm not at all surprised to see that Flash was snubbed (given that Ubuntu is Open Source) but was impressed with the smoothness and quality of the animation.<br /><br />Nicely done!<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5737079120655686920-5215525753557780082?l=www.atomeo.com'/></div>Ronald Schoutenhttp://www.blogger.com/profile/07626978777105658191noreply@blogger.com0tag:blogger.com,1999:blog-5737079120655686920.post-25758799914674084602008-11-07T00:17:00.000-08:002008-11-07T09:19:14.854-08:00Enumerating Objects in JavaScriptEnumerating through objects is something I only occassionally do in JavaScript, but when it does come up, I always find it a bit unintuitive. Here's some sample code for the future me that is faced with this task again:<br /><pre>var dataObject = {<br /> foo: "bar",<br /> one: "fish",<br /> hello: "world"<br />};<br /><br />var key;<br />for (key in dataObject)<br />{<br /> document.write("Key: " + key ", Value: " + dataObject[key]);<br /> document.write("\n");<br />}</pre><br />This code will produce the following lines:<br /><pre>Key: foo, Value: bar<br />Key: one, Value: fish<br />Key: hello, Value: world</pre><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5737079120655686920-2575879991467408460?l=www.atomeo.com'/></div>Ronald Schoutenhttp://www.blogger.com/profile/07626978777105658191noreply@blogger.com0tag:blogger.com,1999:blog-5737079120655686920.post-68377353908579281492008-10-22T21:35:00.000-07:002008-10-22T21:46:55.694-07:00Victoria Open WebThe Victoria Open Ajax & Web 2.0 group held its first hack night earlier this month. Not a bad start and we figured out how to proceed with this loosely coupled group. In November we will be having another hack night and tackling <a href="http://en.wikipedia.org/wiki/Greasemonkey">Greasemonkey</a> scripts. Hopefully we'll actually write some code and learn a bit at the same time. Meeting details coming soon-ish.<br /><br />What is the purpose of the group? I suppose that is different for each member, but my main goals are to:<br /><ul><li>Expose myself to new technologies and techniques</li><li>Meet other Web nerds in Victoria</li></ul>Also, since some participants are not Facebook users, we decided to use Google Groups instead. You can find us on google at, <a href="http://groups.google.com/group/victoria-open-web">Victoria Open Web</a>. The group is public so feel free to sign up.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5737079120655686920-6837735390857928149?l=www.atomeo.com'/></div>Ronald Schoutenhttp://www.blogger.com/profile/07626978777105658191noreply@blogger.com0tag:blogger.com,1999:blog-5737079120655686920.post-28063510221950771282008-10-17T23:43:00.000-07:002008-10-18T14:52:18.357-07:00Why Lenient Browsers are EvilEvil might be a strong word, but it accurately conveys my frustration with web browsers and how their overly forgiving parsing rules can lead to a lot of wasted time.<br /><br />The particular browser leniency I am talking about is the auto-insertion of the <code><tbody></code> element into an HTML table. Given that I try to use semantic markup whenever possible, I rarely use tables and therefore my knowledge of table markup goes back to pre-web 2.0 to when every part of a page resided in a table cell. At that time, table markup typically looked like:<br /><pre><br /><table cellspacing="0" cellpadding="0" border="0"><br /> <tr><br /> <td>Foo</td><br /> <td>Bar</td><br /> </tr><br /></table><br /></pre><br />Yes, this is really simple and in reality would contain a table within table within table and nasty shims, but I think you get the point. However, what isn't apparent from this markup (and you are excused from forgetting) is that this is an invalid table because of the missing <tbody> tags around the table row. Instead of breaking the page though, the browser will just auto-insert the missing tags into its internal version of the page (a.k.a the DOM).<br /><br />This doesn't seem all that evil yet and really just makes writing the HTML easier. However, fast forward this browser trait to the world of Ajax and manipulating the DOM and it becomes rather annoying. For example, take the same table and add some ids:<br /><pre><br /><table cellspacing="0" cellpadding="0" border="0" id="parent"><br /> <tr id="child"><br /> <td>Foo</td><br /> <td>Bar</td><br /> </tr><br /></table><br /></pre><br />Then run some simple JavaScript to delete the table row:<br /><code><br />var parent = document.getElementById("parent");<br />var child = document.getElementById("child");<br />parent.removeChild(child);<br /></code><br />And boom! This doesn't work because the <code>child</code> element is not a child of the <code><table></code> element, but of the magically inserted <code><tbody></code> element. The DOM would actually look like this:<br /><pre><br /><table cellspacing="0" cellpadding="0" border="0" id="parent"><br /> <strong><tbody></strong><br /> <tr id="child"><br /> <td>Foo</td><br /> <td>Bar</td><br /> </tr><br /> <strong></tbody></strong><br /></table><br /></pre><br />The terrible thing is you would not know this unless you used a tool like Firebug to inspect the DOM and see that the browser inserted the <code><tbody></code> tag to "help" you.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5737079120655686920-2806351022195077128?l=www.atomeo.com'/></div>Ronald Schoutenhttp://www.blogger.com/profile/07626978777105658191noreply@blogger.com0tag:blogger.com,1999:blog-5737079120655686920.post-2385411686661653122008-09-23T21:38:00.000-07:002008-09-23T21:56:29.224-07:00Victoria Open Ajax & Web 2.0 DevelopersA new group of geeks is forming in Victoria known as the Victoria Open Ajax & Web 2.0 Developers. For some time now, there has been a <a href="http://vanajax.wordpress.com/">Vancouver Ajax & Web 2.0 Developers group</a> that would participate in regular "<a href="http://en.wikipedia.org/wiki/Hackathon">Hackathons</a>" and organize other events for learning and information sharing. Being based in Victoria makes it difficult to participate in these events, but it turns out there are enough like-minded people here to create our own group.<br /><br />The Victoria group is just getting started and we're using <a href="http://www.facebook.com/">Facebook</a> to get the word out. If you are interested, feel free to join the <a href="http://www.new.facebook.com/group.php?gid=26862754482">Victoria Open Ajax & Web 2.0 Developers group</a> on Facebook and find out about soon-to-be-scheduled events.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5737079120655686920-238541168666165312?l=www.atomeo.com'/></div>Ronald Schoutennoreply@blogger.com0tag:blogger.com,1999:blog-5737079120655686920.post-15116838104503634122008-08-19T13:23:00.000-07:002008-08-20T21:41:40.073-07:00Netbook Blogs<a href="http://en.wikipedia.org/wiki/Netbook">Netbook</a> is the latest term for the growing variety of small and inexpensive notebook computers that are taking the computer industry by storm. Naturally, as a web developer that beleives Web Applications will be the most common type of application a computer user interacts with, I'm interested in these gadgets too. So much so that I wanted to share two blogs that cover the industry and its products quite well:<br /><ul><li><a href="http://www.liliputing.com/">Liliputing</a> </li><li><a href="http://eeepc.net/">EeePC.net</a> (Not just about the eee pc)<br /></li></ul>Currently, I'm considering the new <a href="http://gizmodo.com/5038298/leaked-dell-inspiron-910-mini-note-specs-and-release-date">Dell Inspiron Mini</a> as it has most of the features I want and looks sharp too. One feature that none of the current Netbooks have is a rotating screen (tablet style, like the <a href="http://en.wikipedia.org/wiki/Image:LaptopOLPC_a.jpg">OLPC</a>). To me this seems like an obvious feature as these small machines could then double as ebook readers. Personally, I would pay an additional $50.00 to $100.00 for this features.<br /><br /><b>Update:</b> Naturally, a day after lamenting over the lack of a tablet mode in in Netbooks, Intel makes shows-off the <a href="http://www.liliputing.com/2008/08/intel-unveils-classmate-pc-tablet.html">Classmate PC Tablet</a>.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5737079120655686920-1511683810450363412?l=www.atomeo.com'/></div>Ronald Schoutennoreply@blogger.com0tag:blogger.com,1999:blog-5737079120655686920.post-19099573667386769252008-05-28T22:16:00.000-07:002008-05-30T08:18:14.834-07:00Google Hosting JavaScript Libraries - But Don't Forget the Hash!JavaScript libraries are great. Anyone that has done a significant amount of JavaScript development knows that using a library is the only sane way to develop an application. However, the downside has always been that the hefty size of the libraries leads to slower loading applications.<br /><br />I've often discussed with colleagues that a potential solution is to have a "mega-performant" 3rd party site host the libraries. This way any website using the libraries could source them from the same domain leading to a higher chance that your users would already have the libraries cached in their browser. Well, it looks like this is no longer a pipe-dream now that Google has <a href="http://googleajaxsearchapi.blogspot.com/2008/05/speed-up-access-to-your-favorite.html">announced</a> they are <a href="http://code.google.com/apis/ajaxlibs/">hosting several popular JavaScript libraries</a>.<br /><br />However, hosting libraries on a common domain isn't the only way to tackle the large download issue. <a href="http://www.google.ca/url?sa=t&ct=res&cd=1&url=http%3A%2F%2Fwww.crockford.com%2F&ei=Nc8-SKTgEKi-pgTvkeXFCg&usg=AFQjCNGqacJWZdZIYEtOReP4yjXmFtByiA&sig2=vdTSQfvwoK2ceI48aHIL7w">Douglas Crockford</a> has an excellent suggestion to <a href="http://blog.360.yahoo.com/blog-TBPekxc1dLNy5DOloPfzVvFIVOWMB0li?p=789">improve library performance through the use of a hash code</a> making it possible for browsers to reuse libraries regardless of the site hosting them. I won't go into the details of the his idea (follow the link for that) but mention that the one major flaw is that browsers must implement this. Even if the browser vendors do add this feature it would be years before it could be used by Web Developers.<br /><br />This brings us back to the hosted libraries solution. It can be implemented now (not dependent on browser vendors) but comes with the downside that the site hosting the libraries is in complete control of what libraries are available. Google might not be overly evil but it probably won't host just any library. There are some simple solutions to this however.<br /><br />Instead of Google hosting the libraries, a benevolent consortium backed by industry (Google, Yahoo, Microsoft, etc.) could provide the hosting and provide a very open means to upload any library. This is a bit idealistic and could be subject to abuse, but is probably doable.<br /><br />The best and most realistic solution, however, is probably to push browser vendors to still adopt the <code>hash</code> attribute. Google has stated it will work with the browser vendors to possibly bundle the libraries with the browser, but this will create an even bigger obstacle to non-approved libraries. I like my web open and full of options and hope the <code>hash</code> solution is considered fully.<br /><span style="font-weight: bold;"><br />Update:</span> Looks like Google will be providing <a href="http://www.atomeo.com/2008/05/google-hosting-javascript-libraries-but.html">secure access</a> to the libraries as well. Nice move and something that Yahoo <a href="http://yuiblog.com/blog/2007/02/22/free-yui-hosting/#comment-54130">does not provide with YUI</a>.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5737079120655686920-1909957366738676925?l=www.atomeo.com'/></div>Ronald Schoutennoreply@blogger.com0tag:blogger.com,1999:blog-5737079120655686920.post-3425219111472707132008-05-13T08:51:00.000-07:002008-05-13T20:48:34.172-07:00Tips to Drink More Water (and earn nerd points)<a href="http://www.flickr.com/photos/84037690@N00/2487600849/" title="Water Bottle and Cup by Japanese Ron, on Flickr"><img src="http://farm4.static.flickr.com/3114/2487600849_dcc1be4749_m.jpg" alt="Water Bottle and Cup" style="margin: 0pt 10px 10px 0pt; float: left;" width="180" height="240" /></a><a href="http://www.dumblittleman.com/2007/07/9-great-reasons-to-drink-water-and-how.html">Drinking water</a> is good for you. However, this post isn't about trying to convince you of that. Instead let's assume, like me, you want to drink more water but find it difficult to consume eight 8-ounce glasses per day.<br /><br />To help me drink more water I need a glass of water at my desk and a reminder to actually drink it. The reminder is a crucial part because I have had a bottle of water sitting at my desk for weeks and barely touch it. The problem is I tend to get engrossed in what I'm doing and forget to drink.<br /><br />Fortunately, the solution is simple. All I need is a system that forces me to stop what I'm doing and reminds me to drink a glass of a water periodically. If you use Ubuntu or another Gnome distribution (I'm sure this can be adapted to work on any OS) you can set this up in a few easy steps with Gnome's session manager, the AT command, and a bash script.<br /><ol><li>Create drink.sh in your home directory (anywhere is fine but you'll need to adjust the instructions accordingly) and copy and paste the following code into it:<br /><pre><br />#!/bin/sh<br /><br />if [ "$1" = "schedule" ]<br />then<br /> at 9:00am < $0<br /> at 10:00am < $0<br /> at 11:00am < $0<br /> at 12:00pm < $0<br /> at 1:00pm < $0<br /> at 2:00pm < $0<br /> at 3:00pm < $0<br /> at 4:00pm < $0<br /> at 5:00pm < $0<br /> echo "Drink reminders have been scheduled."<br />else<br /> /usr/bin/gnome-screensaver-command -l<br />fi</pre><br />Don't forget to give this file executable permissions. One way to do this is to right-click on the file, select Properties, select Permissions and then check the "Execute" checkbox.</li><br /><li>To verify this works, open a terminal (Applications > Accessories > Terminal), navigate to your home directory, and type <code>./drink.sh</code> (WARNING: This will cause Gnome to lock you out of your current session and you will have to unlock it with your password). If this worked, go back to your terminal and type <code>./drink.sh schedule</code>. You should see several lines of output and a final line, "Drink reminders have been scheduled." If you don't see this, stop and investigate.</li><br /><li><img style="float:right; margin:0 0 10px 10px;" src="http://2.bp.blogspot.com/_UffdMY6Ighc/SCosOyeymwI/AAAAAAAAAHQ/sxFssaS5zsc/s400/Screenshot-Sessions.png" alt="Gnome Sessions Dialogue"/>Now that this is working, you just need to tell Gnome to run the drink scheduler upon logging in. To do this, go to System > Preferences > Sessions and click "Add" under the "Startup Programs" tab. Enter whatever you like for the Name and Description, just make sure the Command points to your drink.sh file and passes the "schedule" argument (e.g. <code>/home/username/drink.sh schedule</code>).</li></ol><br />And that's all there is to it. Next time you log in to your computer the drink scheduler will run and tell your computer to lock your screen every hour from 9:00am to 5:00pm. If you want to be reminded to drink at different times, just adjust drink.sh accordingly (should be fairly obvious what to do). As an added hint that it is time to drink, I set my screensaver to Ripples.<br /><br />Here's to better health!<br /><br />P.S. I initially tried to set this up with CRON but ran into limitations getting CRON to work with Gnome, as best summarized in <a href="http://ubuntuforums.org/archive/index.php/t-568523.html">this thread</a>. If you know how to achieve similar results with CRON, please let me know.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5737079120655686920-342521911147270713?l=www.atomeo.com'/></div>Ronald Schoutennoreply@blogger.com0tag:blogger.com,1999:blog-5737079120655686920.post-79192545937379954352008-04-09T08:53:00.000-07:002008-04-09T09:41:48.626-07:00Get Ready for Google Apps Engine - Learn Python and DjangoI've recently began learning Python and the Django Web Framework for a project I am working on. And with Google's recent <a href="http://code.google.com/appengine/">App Engine</a> <a href="http://googleblog.blogspot.com/2008/04/developers-start-your-engines.html">announcement</a> it seemed like other developers might be interested in learning these technologies too.<br /><br />My first bit of advice is keeping an open mind. If you have never written Python code before, but have a background in other languages like Java or PHP, you are in for a bit of a shock (or at least I was). Python's syntax is minimalistic (and not very flexible) with the goal of making Python scripts look very similar from programmer to programmer and thus understandable by all. After fighting syntax errors and swearing at <a href="http://www.gnome.org/projects/gedit/">gedit</a> for <a href="https://bugs.launchpad.net/ubuntu/+source/gedit/+bug/214649">auto-inserting spaces instead of tabs</a> I've actually come to like Python a lot.<br /><br />I have no experience with Ruby on Rails but hear rumors that Django has much in common. Regardless, Django is a lightweight framework that provides the developer with a lot of shortcuts and conveniences. Less configuration hassles and more code (the Python kind that is succinct and readable).<br /><br />So with an open mind, here are some resources that should help you on your way:<br /><ul><li><a href="http://www.diveintopython.org/">Dive Into a Python</a> - a freely available website that provides a good<span style="text-decoration: underline;"> </span><a href="http://www.diveintopython.org/toc/index.html">introduction to Python</a>. As an added bonus you can download a PDF or HTML version of the book to read while (gasp) offline;</li><li><a href="http://docs.python.org/tut/tut.html">Python Tutorial</a> - An indispensable reference;</li><li><a href="http://www.djangoproject.com/">Django</a> - download the Django Framework and follow the 4 simple tutorials.</li><li><a href="http://www.djangobook.com/">Django Book</a> - I must admit, I just found out about this free resource and haven't had a chance to look through it yet;<br /></li><li><a href="http://www.djangosnippets.org/">DjangoSnippets</a> - User contributed code snippets. Sometimes looking at someone else's code can be invaluable and save a lot of time;</li><li><a href="http://code.djangoproject.com/wiki/DjangoScreencasts">Django Screencasts</a> - I prefer reading through well-written documentation, but if you like fancy screencasts, these should help.<br /></li></ul>This short list contains all that you need to get going. Grab your favourite editor and marvel at how easy web development can be. You'll be mocking your J2EE-toiling friends in no time.<br /><br />... and if you really want more to read, check out this <a href="http://blixtra.org/blog/2006/07/17/top-30-django-tutorials-and-articles/">Top 30 Django Tutorials List</a>.<br /><br /><p><script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script></p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5737079120655686920-7919254593737995435?l=www.atomeo.com'/></div>Ronald Schoutennoreply@blogger.com1tag:blogger.com,1999:blog-5737079120655686920.post-56504567663629024742008-03-30T18:11:00.000-07:002008-03-30T20:42:10.394-07:00Open Web Vancouver<a href="http://www.openwebvancouver.ca/">Open Web Vancouver</a> is coming April 14 & 15 to <a href="http://www.vcec.ca/">Vancouver Convention & Exhibition Centre</a>. I'll be attending this year and I'm quite excited as I haven't had the opportunity to attend many web conferences in the past.<br /><br />The <a href="http://www.openwebvancouver.ca/talks">sessions</a> look great and I am particularly looking forward to:<br /><ul><li><a href="http://www.openwebvancouver.ca/google-gears-teaching-open-web-new-tricks">Google Gears</a></li><li><a href="http://www.openwebvancouver.ca/mapping-world-you-openstreetmap-experience">Open Street Map</a></li><li><a href="http://www.openwebvancouver.ca/opensocial-standard-programming-model-social-web">Open Social</a></li><li><a href="http://www.openwebvancouver.ca/reusable-components-django">Reusable Components in Django</a></li><li><a href="http://www.openwebvancouver.ca/ria-open-standards">RIA with Open Standards</a></li><li>Social Camp <a href="http://www.openwebvancouver.ca/socialcamp-i-opensocial-myspace-hi5-ning-linkedin">1</a>, <a href="http://www.openwebvancouver.ca/socialcamp-ii-facebook-bebo">2</a>, and <a href="http://www.openwebvancouver.ca/socialcamp-iii-app-nite-5-facebook-bebo-5-opensocial-live-app-demos-and-q">3</a><br /></li></ul><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5737079120655686920-5650456766362902474?l=www.atomeo.com'/></div>Ronald Schoutennoreply@blogger.com0tag:blogger.com,1999:blog-5737079120655686920.post-65855981794024136402008-03-11T22:31:00.000-07:002008-03-12T21:08:15.064-07:00Firefox 3 Beta 4 and Prism 0.9 Work Very WellAs promised, here is a follow up on my previous post about running the <a href="http://www.atomeo.com/2008/03/prism-now-extension-for-firefox-3.html">latest version of Prism</a> as an extension. Good news is: Prism on Ubuntu actually works now.<br /><br />It would seem that installing Firefox 3 beta 4 from the Mozilla site solved a lot of the problems I was having. So far I haven't had any problems creating Webapp shortcuts for the Google Apps I use and as an added bonus it is easy to select an alternative icon (the favicon is a bit too small for some uses).<br /><br />The most noticeable improvement is really not Prism related but due to the improvements in the Gecko Platform (see <a href="http://www.mozilla.com/en-US/firefox/3.0b4/releasenotes/">beta 4 release notes</a>). Webapps start significantly faster now.<br /><br />Another nice feature is that Prism instances run in a separate process now. It used be that all Webapps shared the same process. A poorly written Webapp should not be able to take down all Prism instances (in theory). Additionally, since cookies are isolated to each instance of Prism the chance of one Webapp running in Prism making an <a href="http://en.wikipedia.org/wiki/Cross-site_request_forgery">XSRF</a> is greatly reduced since it won't have access to session cookies from other Webapps.<br /><br />Happy Webapping<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5737079120655686920-6585598179402413640?l=www.atomeo.com'/></div>Ronald Schoutennoreply@blogger.com0tag:blogger.com,1999:blog-5737079120655686920.post-49524364018517273052008-03-07T21:30:00.001-08:002008-03-10T21:38:24.308-07:00Prism: Now an Extension for Firefox 3Mozilla has announced that Prism version 0.9 is now available as an extension for Firefox 3. See the official <a href="http://labs.mozilla.com/2008/03/major-update-to-prism-first-prototype-of-browser-integration/">Mozilla Labs announcement</a> or <a href="http://starkravingfinkle.org/blog/2008/03/prism-09-now-as-a-firefox-extension/">Marke Finkle's Blog</a> for more information.<br /><br />Installing the extension is simple but does require Firefox 3 since it relies on Firefox 3's ability to allow other applications to use its XULRunner platform. <strike>As an Ubuntu user, the simplest way to install Firefox 3 is to enable the <a href="http://www.formatds.org/firefox-3-beta-3-ubuntu-gutsy/lang/en/">Unsupported Updates Repository</a> and use Synaptic.</strike> <span style="font-weight: bold;">Update:</span> Save yourself some headaches with the Prism extension and follow the <a href="http://tombuntu.com/index.php/2007/11/22/how-to-install-firefox-3-beta-1-in-ubuntu/">instructions at Tombuntu</a> (still very simple and applies to Firefox beta 4 too). Once installed, start Firefox 3 and <a href="https://addons.mozilla.org/en-US/firefox/addon/6665">install Prism</a>.<br /><br />My first (and only) attempt at converting a website to an application failed. The problem was that the wizard wouldn't actually save the Web Application icon to the desktop. And without this I saw no way to launch Prism. I hope this is a Linux specific bug that will be ironed out soon. I'll post again once I get to play with Prism more.<br /><br />As an aside, using Firefox 3 was nice. Compared to Firefox 2, it felt a lot snappier and faster at rendering pages. Hopefully some lagging extensions will support Firefox 3 soon.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5737079120655686920-4952436401851727305?l=www.atomeo.com'/></div>Ronald Schoutennoreply@blogger.com2tag:blogger.com,1999:blog-5737079120655686920.post-27255707313080762912008-02-29T21:25:00.000-08:002008-02-29T21:57:46.231-08:00Ubuntu Brainstorm For The WinThe new <a href="http://brainstorm.ubuntu.com/">Ubuntu Brainstorm</a> site has been launched and is off to an enthusiastic start. In a nutshell, this site gives users the ability to submit and vote on ideas for Ubuntu. The site has been live for less than 2 days and has already received over 1500 submissions. It will be interesting to see how Ubuntu development balances the desires of enthusiastic users and <a href="http://www.canonical.com/">Canonical</a>'s needs.<br /><br />One novel idea (of the many good ideas) proposes a <a href="http://brainstorm.ubuntu.com/idea/303/">new system for installing fonts</a>. If you would like to voice your Ubuntu ideas, head on over to Brainstorm.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5737079120655686920-2725570731308076291?l=www.atomeo.com'/></div>Ronald Schoutennoreply@blogger.com0tag:blogger.com,1999:blog-5737079120655686920.post-11241423102819941982008-02-15T16:06:00.000-08:002008-02-15T16:25:00.765-08:00Cloud Samurai: New look for AtomeoIf you are reading this post from an RSS Reader, head on over to <a href="http://www.atomeo.com/">Atomeo</a> to see the new "Cloud Samurai<a href="http://www.atomeo.com/"></a>" theme. With previous blogging attempts I got wrapped up in the development and maintenance of the blogging platform (yes, I'm talking about you <a href="http://www.wordpress.org/">WordPress</a>) and hardly posted to my blog. With my latest attempt at blogging I decided to use <a href="http://www.blogger.com/">Blogger</a> and focus on the content. So far this has been working out so I figured it was high-time I gave it a better skin.<br /><br />I learned a lot about image creation from this project since the Samurai Kite image was created from scratch (hand sketched, scanned, <a href="http://www.gimp.org">GIMP</a>ed and <a href="http://www.inkscape.org/">Inkscape</a>d). Knowing what I know now I think I could create a better image (I should have used Inkscape from the start) but I have run out of steam and want to move on.<br /><br />Let me know what you think.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5737079120655686920-1124142310281994198?l=www.atomeo.com'/></div>Atomicronnoreply@blogger.com0tag:blogger.com,1999:blog-5737079120655686920.post-22674985841126397492008-01-21T11:13:00.000-08:002008-02-13T14:08:23.068-08:00Douglas Crockford's Proposal for HTML5I was reading through a <a href="http://blog.mozilla.com/rob-sayre/2008/01/20/dangers-of-remote-javascript/">blog post</a> and found a link to <a href="http://www.crockford.com/html/">Douglas Crockford's Proposal for HTML 5</a>. It's a quick read and very high level but interesting nonetheless. Overall, the theme is small tweaks to HTML that will have a big impact on making web application easier to develop and safer to use.<br /><br />If you have a passing interest in understanding how this portion of the web might evolve, I'd recommend the read.<br /><br /><span style="font-weight: bold;">Update:</span> Minutes after publishing this post, the W3C made the HTML5 proposal an official recommendation. Check out the <a href="http://www.w3.org/TR/2008/WD-html5-diff-20080122/">differences between HTML4 and HTML5</a> for an even better indication of how the web might evolve.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5737079120655686920-2267498584112639749?l=www.atomeo.com'/></div>Atomicronnoreply@blogger.com0tag:blogger.com,1999:blog-5737079120655686920.post-76302494494730591612008-01-18T17:39:00.000-08:002008-02-13T13:40:48.403-08:00Photos From JapanI wouldn't be much of a geek if I didn't snap this shot of a <a href="http://en.wikipedia.org/wiki/Red_Panda">Red Panda (Firefox)</a> at the zoo.<br /><br /><a href="http://www.flickr.com/photos/84037690@N00/2201488036/" title="A Firefox in Sendai by Japanese Ron, on Flickr"><img src="http://farm3.static.flickr.com/2048/2201488036_bfce9ff3da.jpg" alt="A Firefox in Sendai" height="375" width="500" /></a><br /><br />And here is a picture of a Tanuki (Japanese Raccoon Dog) at the zoo. Fans of <a href="http://en.wikipedia.org/wiki/Pom_Poko">Pom Poko</a> should appreciate this. Getting a picture of this nocturnal animal required the zoo keeper throw some food into the pen and wake him up.<br /><br /><a href="http://www.flickr.com/photos/84037690@N00/2200695387/" title="Tanuki (Japanese Raccoon) by Japanese Ron, on Flickr"><img src="http://farm3.static.flickr.com/2040/2200695387_e3c102c49a.jpg" alt="Tanuki (Japanese Raccoon)" height="375" width="500" /></a><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5737079120655686920-7630249449473059161?l=www.atomeo.com'/></div>Atomicronnoreply@blogger.com0tag:blogger.com,1999:blog-5737079120655686920.post-88595607898299851292008-01-09T08:14:00.000-08:002008-02-07T16:32:22.292-08:00Get Bleeding Edge Apps for Google Apps For Your DomainIf you are a happy Google Apps For Your Domain (GAFYD) user but miffed that regular GMail users (non-GAFYD) get the latest and greatest app enhancements before you, fret no longer.<br /><br />This may be old news to some but I just found out that it is possible to opt into receiving the latest features for GAFYD at the same time as your non-GAFYD counterparts. To do this, go to your domain Control Panel, click Domain Settings, scroll down and check the "Turn on new application features before they are rolled out..." option.<br /><br />Now wait.<br /><br /><span style="font-weight: bold;">Update:</span> You might have to wait quite a while. When I enabled this feature I only noticed a bleeding edge version of Google Docs when a new update was rolled out for the first time. I.e. clicking this option does not seem to upgrade your Apps retroactively.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5737079120655686920-8859560789829985129?l=www.atomeo.com'/></div>Atomicronnoreply@blogger.com0tag:blogger.com,1999:blog-5737079120655686920.post-14055107538378868792007-12-08T13:39:00.000-08:002008-02-15T16:26:58.613-08:00OpenWRT: Very ImpressiveJust a quick post to tell my two readers about the <a href="http://openwrt.org/">OpenWRT project</a>. This is a Linux-based community driven project that provides an alternative Operating System for some routers. Wikipedia offers a pretty <a href="http://en.wikipedia.org/wiki/OpenWrt">good overview</a> of what the project is about.<br /><br />Since you rarely interact with your router, except to configure it, you might not see a point to installing a new OS (firmware as it is frequently referred to) on it. But a router doesn't have to be as boring and feature limited as it comes from the manufacturer. By installing OpenWRT you can expand the capabilities of your router immensely.<br /><br />Even if you don't care about adding any new features to your router, OpenWRT can simply provide you with a much nicer Web-based administrative interface. And since installation is so painless there really isn't a downside. I installed the version of OpenWRT provided by the <a href="http://x-wrt.org/">X-WRT project</a>. This project's goal is to make the OpenWRT firmware simple to install and more accessible to end users. They have achieved this rather nicely.<br /><br />Upgrading the firmware on my <a href="http://en.wikipedia.org/wiki/Linksys_WRT54G_series">Linksys WRT54G</a> was as easy as downloading "openwrt-wrt54g-squashfs.bin" to my desktop, going to my routers existing web-based firmware upgrade page, and uploading this file to the router for installation. This went super smoothly and actually maintained my routers previous settings and passwords so my wireless access point was up and running in minutes. Make sure your computer has a physical connection to your router and be patient as the "success page" will display before your router is up and running.<br /><br />Next time I have to buy a router, I will definitely make sure that it is supported by the OpenWRT project.<br /><br />P.S. Yes, I'm procrastinating on painting my kitchen ceiling.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5737079120655686920-1405510753837886879?l=www.atomeo.com'/></div>Atomicronnoreply@blogger.com0tag:blogger.com,1999:blog-5737079120655686920.post-62840381761990427142007-12-06T14:33:00.000-08:002007-12-08T10:20:41.691-08:00Semi-Transparent (Dithered) GIF Slows IEI recently had an odd page performance problem in IE6 & 7. The page redraw was quite slow on window resize and the page would react very slowly to mouse hover events. I spent hours investigating JavaScript bugs and possible mark-up issues with no success. In the end, removing a dithered GIF from the style sheet did the trick.<br /><br />Once again, I was baffled by IE's shortcomings (did I mention all other browser's performed normally?) but had to move on and find a solution. I'm posting this article to take a break from ranting about IE to my co-workers and in the hopes that other frustrated developers might stumble upon this when trying to understand why a simple web page is performing so poorly in IE.<br /><br />First, you might be wondering what I mean by a dithered GIF. It's a checker-board-like image that alternates between solid colour and full transparency. Below is an example of what this GIF "looks" like.<br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_UffdMY6Ighc/R1kIWIyJMPI/AAAAAAAAADY/1dgUVompKpo/s1600-h/dithered-gif-diagram.png"><img style="cursor: pointer;" src="http://1.bp.blogspot.com/_UffdMY6Ighc/R1kIWIyJMPI/AAAAAAAAADY/1dgUVompKpo/s320/dithered-gif-diagram.png" alt="" id="BLOGGER_PHOTO_ID_5141149626028077298" border="0" /></a><br /></div><br />The grey squares represent fully transparent pixels (like only a GIF can do) and the white squares represent opaque pixels. The idea is that this image can be used as a tiling background image and allow images underneath it (from parent elements - think body background) to show through. This can create a nice effect and might sometimes be used to mimic alpha-transparency in PNGs when IE6 support is important. Or so I thought. Turns out the performance hit that IE 6 & 7 users take don't really make this a viable option.<br /><br />I'm not sure why IE performs so poorly when using the dithered GIF as a background image but a pretty good solution was to replace the GIF with a white PNG that had its opacity set to 50%. This solved the IE performance problems and the real alpha-transparency looked better in IE 7. The only problem was that IE 6 rendered the PNG as solid grey. To fix this the <a href="http://en.wikipedia.org/wiki/CSS_filter#Star_HTML_hack">star hack</a> came in handy to set the background colour to solid white. The slight alteration to the page's design was far outweighed by the performance boost so this made the solution quite acceptable.<br /><br /><span style="font-weight: bold;">Alternative Solutions that Didn't Work</span><br /><ul><li>Reproducing the dithered GIF in the PNG format (keeping the binary transparency) does not improve performance</li><li>Adding full PNG support to IE 6 through the <a href="http://www.clipmarks.com/clipmark/189463E0-8F2C-4126-9A69-28F49B8FFDD2/">HTC file</a> does not work on background images</li><li>Although it is possible to set a background colour for a PNG (I believe for the purpose of degrading when alpha-transparency is not supported), IE 6 ignores the setting and just <a href="http://docs.gimp.org/en/gimp-images-out.html#file-png-save-defaults">defaults to grey</a></li></ul>And there you have it. Hopefully this was helpful or at least interesting. If you have any insight into why IE performance is negatively impacted by the dithered GIF, please share.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5737079120655686920-6284038176199042714?l=www.atomeo.com'/></div>Atomicronnoreply@blogger.com0tag:blogger.com,1999:blog-5737079120655686920.post-82835127198980493622007-12-05T08:38:00.000-08:002007-12-06T08:53:40.268-08:00Picnik For Linux UsersMuch of the <a href="http://www.techmeme.com/071204/p151#a071204p151">blogosphere</a> has been talking about Flickr finally adding <strike>more advanced</strike> some photo editing features through a partnership with Picnik. Advanced photo editing features have been on my <a href="http://www.atomeo.com/2007/08/my-flickr-wish-list.html">Flickr wish list</a> for a long time, so I was excited to take it for a test spin and see how well it works.<br /><br />Having tried Picnik in the past, I was less than impressed as a Linux user. On my first attempt to upload an image I came across a Linux specific bug that prevented me from seeing any of my image files in their file picker. A month or so after reporting the bug I heard back from Picnik and the bug had been fixed (a bad regex was to blame). Great, now I can try Picnik again, or so I thought. Although I could select files, every attempt to upload failed (badly - taking Firefox down with it). So I reported the bug and promptly forgot about Picnik after being told it was due to a bug in Adobe's Linux Flash player and that I should take it up with Adobe.<br /><br />Fast forward to today and <a href="http://blog.flickr.com/en/2007/12/05/edit-your-photos-on-flickr/">Picnik is available through Flickr</a> - and working <span style="font-weight: bold;">much better</span> on Linux (this is probably due to the fact that I don't have to use Picnik's file uploader since files are already on Flickr).<br /><br />How is Picnik from a Linux users point of view? Awesome because it brings photo editing tools into the work flow of uploading and organizing photos in Flickr. Picnik also does a good job of making image editing tools more understandable than PhotoShop or the GIMP and increasing the chance that I will actually use them.<br /><br />Picnik still leaves room for improvement however. The application (flash-based) took a long time to load (a full 60 seconds). For now, I'm attributing the slow load to poor Picnik server performance after the Flickr launch. This will be a show stopper if it doesn't improve though. Also, some of the image editing tools performed quite well while other tools made the application unresponsive and hard to work with. Perhaps these are rough edges in the Linux Flash Player or just problems with Picnik itself.<br /><br />Overall, Picnik is a nice option to have integrated into Flickr. As I get more time to play with the tools, I'll post tips and tricks that might be useful.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5737079120655686920-8283512719898049362?l=www.atomeo.com'/></div>Atomicronnoreply@blogger.com0tag:blogger.com,1999:blog-5737079120655686920.post-86154569838899655412007-11-04T17:50:00.000-08:002007-11-09T08:57:59.777-08:00Prism Available for LinuxAs <a href="http://www.atomeo.com/2007/10/webrunner-is-now-prism-and-official.html">previously posted</a>, the latest version of WebRunner has been released under the name Prism. Until recently, Prism was only available for Windows users but now <a href="http://labs.mozilla.com/2007/11/prism-prototype-now-available-on-mac-and-linux/">Linux and Mac users can use Prism</a> too. Running Web Apps in Prism has three advantages:<br /><ul><li>Reduces the frequency of Firefox crashes. I'm not sure why Firefox crashes as often as it does but I suspect it has to do with all the extensions and running Web Apps like GMail all day long. Hopefully Firefox 3 will fix these problems, but isolating GMail to Prism has already helped a lot.<br /></li><li>Reduces the chance of a <a href="http://en.wikipedia.org/wiki/Cross-site_request_forgery">cross-site request forgery</a> (xsrf) since cookies from Web Apps that run for a long time are not available to malicious sites (assuming you would come across a malicious site using your regular browser and not using Prism)</li><li>Reduces needless browser UI elements, freeing up more space the the Web App itself.<br /></li></ul>I have been using WebRunner/Prism for a bunch of Web Apps I use and, generally, I have been happy with the results. The latest release under the Prism name has made some key improvements:<br /><ul><li><span style="font-weight: bold;">Spell checker works all the time.</span> I'm highly dependent on the spell checking feature in Firefox in order to compose semi-intelligent email. Suffice it to say, using GMail in WebRunner made for confusing, if not humorous, reading on behalf of my email recipients.</li><li><span style="font-weight: bold;">The cursor is visible when composing email in GMail.</span> Sounds weird but actually trying to write an email without a cursor is even weirder.<br /></li><li><span style="font-weight: bold;">Prism start-up time is faster.</span> Not only compared to WebRunner but Firefox 2 as well. It also seems that Prism is able to load the Web App faster, but I have no tests to back this up.</li><li><span style="font-weight: bold;">Favicons appear in the panel.</span> Before the Prism release all Web Applications running in WebRunner used the same WebRunner icon. This improvement sounds trivial but is a big usability improvement, making it much easier to move between minimized applications.<br /></li></ul>There are a few annoyances/bugs with Prism worth noting:<br /><ul><li>Opening multiple Web Applications simultaneously throws errors<br /></li><li>No Linux version of the favicon resizing/styling tool available to Windows users<br /></li><li>General rendering weirdness due to the fact that Prism uses the still-evolving Mozilla 1.9</li><li>Lack of Prism documentation on <a href="http://wiki.mozilla.org/WebRunner#Bundles">webapp bundles</a> that were used in WebRunner</li><li>Cookies are shared between all Web Apps running in Prism. This is the norm for a browser, but leads to the xsrf vulnerability. <span style="text-decoration: underline;"></span>Although less of a concern since most Web Apps running in Prism will be trusted, it would still be nice to tighten the security. Perhaps Web Apps launched from a webapp bundle instead of a uri could keep cookies isolated to themselves?<br /></li></ul>If you are a Web Developer and interested in seeing how users might be interacting with your Web Applications in the future, definitely give Prism a spin. <a href="http://tombuntu.com/">Tombuntu</a> posted instructions on <a href="http://tombuntu.com/index.php/2007/10/08/how-to-run-web-applications-seamlessly-on-ubuntu/">installing WebRunner on Ubuntu</a> and these are still applicable to Prism. Personally, I extracted the Prism archive to /opt/prism and then saved all webapp bundles in my home directory.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5737079120655686920-8615456983889965541?l=www.atomeo.com'/></div>Atomicronnoreply@blogger.com0tag:blogger.com,1999:blog-5737079120655686920.post-42603211545221934812007-10-26T08:14:00.000-07:002007-10-26T08:44:34.556-07:00WebRunner is Now Prism and an Official Mozilla Labs ProjectIf you are a regular reader of <a href="http://planet.mozilla.org/">Planet Mozilla</a> this is not news to you. However, if you are not a reader but you are interested in seeing how Web Applications will evolve, then the news of <a href="http://labs.mozilla.com/2007/10/prism/">Prism</a> becoming an official Mozilla Labs project might interest you.<br /><br />Prism is currently only available for Windows but this should change in the next week or so with the release of a Linux and Mac version. However, <a href="http://wiki.mozilla.org/WebRunner">WebRunner</a> (the precursor to Prism) is available for all platforms now. My advice is to wait until Prism is available on your platform as it has a number of bug fixes that have made WebRunner annoying to use (no spell checker being the biggest). My experience with WebRunner has been mixed. The <a href="http://www.atomeo.com/2007/05/offline-web-applications.html">idea</a> is good, but the project was very much in its infancy and not ready to replace Firefox. The fact that Prism is an official project now bodes well for its future and I look forward to new versions.<br /><br />The big question, however, is: how many more times will WebRunner/Prism be <a href="http://en.wikipedia.org/wiki/History_of_Mozilla_Firefox#Naming">renamed</a>?<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5737079120655686920-4260321154522193481?l=www.atomeo.com'/></div>Atomicronnoreply@blogger.com0