<?xml version="1.0"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">

<channel>
	<title>Planet Mozilla Interns</title>
	<link>http://planet.mozinterns.net</link>
	<language>en</language>
	<description>Planet Mozilla Interns - http://planet.mozinterns.net</description>

<item>
	<title>Adrian Kalla: Browser ballot fail: asks to set IE as the default browser</title>
	<guid isPermaLink="true">http://adrianer.jogger.pl/2010/03/11/browser-ballot-fail-asks-to-set-ie-as-the-default-browser/</guid>
	<link>http://adrianer.jogger.pl/2010/03/11/browser-ballot-fail-asks-to-set-ie-as-the-default-browser/</link>
	<description>&lt;p&gt;Wasn't the whole ballot thing about preserving the users choice? Then wtf is this:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://img215.imageshack.us/i/ballotfail.jpg/&quot;&gt;&lt;img src=&quot;http://img215.imageshack.us/img215/1972/ballotfail.jpg&quot; alt=&quot;ballot fail screenshot&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Procedure to reproduce:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;choose to install your prefered browser, but not IE (actually, my prefered browser, SeaMonkey, is not in the list, even when it is the 6th most popular desktop browser in Europe... That's a big fail too.)&lt;/li&gt;
&lt;li&gt;close the ballot screen by clicking on &quot;Choose later (Später auswählen)&quot;, because you couldn't find a &quot;Close&quot; button&lt;/li&gt;
&lt;li&gt;install the downloaded browser and set it as default&lt;/li&gt;
&lt;li&gt;restart your system&lt;/li&gt;
&lt;li&gt;see the ballot screen asking you to set IE as the default browser&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Is it just me, or does this look like a violation of what Microsoft has signed in Brussels?&lt;/p&gt;</description>
	<pubDate>Thu, 11 Mar 2010 19:50:28 +0000</pubDate>
</item>
<item>
	<title>Benoit Girard: Optimizing CGContextDrawImage</title>
	<guid isPermaLink="false">http://benoitgirard.wordpress.com/?p=46</guid>
	<link>http://benoitgirard.wordpress.com/2010/03/09/optimizing-cgcontextdrawimage/</link>
	<description>&lt;p&gt;I wanted to share my finding on optimizing CoreGraphic’ &lt;a href=&quot;http://developer.apple.com/mac/library/documentation/GraphicsImaging/Reference/CGContext/Reference/reference.html#//apple_ref/c/func/CGContextDrawImage&quot;&gt;CGContextDrawImage&lt;/a&gt;, a performance critical part of my upcoming patch for the Core Animation drawing model. &lt;/p&gt;
&lt;p&gt;After implementing the read back from openGL, I was expecting the bottleneck of my code to be the &lt;a href=&quot;http://www.opengl.org/sdk/docs/man/xhtml/glReadPixels.xml&quot;&gt;glReadPixels()&lt;/a&gt; call since we are copying from VRAM to RAM every frame, however I noticed using Shark profiling tool that I was actually spending more time in CGContextDrawImage.&lt;/p&gt;
&lt;p&gt;After investigating further I noticed using Shark that CGContextDrawImage was invoking argb32_sample_RGBA32 where cairo’s calls where not hitting this sampling routine. After a few hours of tweaking I managed to get around the first cause of this sampling by using the monitor’s color profile instead of ‘kCGColorSpaceGenericRGB’. &lt;/p&gt;
&lt;p&gt;The second problem less obvious. I had previously looked at the transformation matrix to make sure that no scaling was happening. The transformation matrix was translating by (tx, ty) and was scaling the Y axis by -1. I had incorrectly assumed that scaling Y by -1 would be handled as a special case ‘flip’ case instead of using scaling, however resetting the scaling to 1 resulted in a drastic performance increase. Since my rendering was now reversed I applied the transformation on my OpenGL context where scaling is very efficient.&lt;/p&gt;
&lt;p&gt;After the tweaking the bottleneck was now glReadPixels as I had originally hypothesized. I did not grab accurate measurements of the performance difference but I would say the rendering is now at least twice as fast as it was when I was hitting the sampling routine. Once we do away with the glReadPixels step this patch will be even faster!&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/benoitgirard.wordpress.com/46/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/benoitgirard.wordpress.com/46/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/benoitgirard.wordpress.com/46/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/delicious/benoitgirard.wordpress.com/46/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/benoitgirard.wordpress.com/46/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/stumble/benoitgirard.wordpress.com/46/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/benoitgirard.wordpress.com/46/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/digg/benoitgirard.wordpress.com/46/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/benoitgirard.wordpress.com/46/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/reddit/benoitgirard.wordpress.com/46/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;http://stats.wordpress.com/b.gif?host=benoitgirard.wordpress.com&amp;amp;blog=12112851&amp;amp;post=46&amp;amp;subd=benoitgirard&amp;amp;ref=&amp;amp;feed=1&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;</description>
	<pubDate>Tue, 09 Mar 2010 05:49:41 +0000</pubDate>
	<dc:creator>benoitgirard</dc:creator>
</item>
<item>
	<title>Wei Zhou: It’s really not all about money</title>
	<guid isPermaLink="false">http://weizhou.wordpress.com/?p=355</guid>
	<link>http://weizhou.wordpress.com/2010/03/05/its-really-not-all-about-money/</link>
	<description>&lt;p&gt;When I studied Graphic Design in Yale University, my professor told me a universal truth: “When you choose a career path the primary thing is figure out if you would enjoy the details.” I realized at a young age that I don’t enjoy choosing typefaces among a thousand of options, so I quit graphic design. Among these years, I’ve watched so many types of jobs: I would never be an investment banker because I don’t enjoy correction typos or copying pasting numbers in the pitch book. I would never be an programmer because debugging kills my skin cell. And I would never be a teacher because I don’t enjoy talking to dumb kids. Now I work as a senior consultant in user experience industry, I realize sometimes don’t like using visios to create wireframes or photoshop creating visual design comps. This baffles me for a while: how could I ever fulfill and satisfy myself? I think this article(by josh Kaufman) answers this question well: you need to know yourself well enough.&lt;/p&gt;
&lt;p&gt;Here’s a deceptively simple question: why do people work? On the face of it, the answer seems relatively straightforward:&lt;/p&gt;
&lt;h2&gt;The 3 Core Levels of Material Need&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Level 1: Resources&lt;/strong&gt;&lt;br /&gt;
Working for immediate needs like food &amp;amp; shelter; living paycheck to paycheck.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Level 2: Security&lt;/strong&gt;&lt;br /&gt;
Working to ensure safety; saving and investing for future needs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Level 3: Freedom&lt;/strong&gt;&lt;br /&gt;
Working to ensure self-sufficiency and independent choice of action.&lt;/p&gt;
&lt;p&gt;These three levels of work are similar to the first few levels of &lt;a href=&quot;http://en.wikipedia.org/wiki/Maslow%27s_hierarchy_of_needs&quot;&gt;Maslow’s Hierarchy of Needs&lt;/a&gt; or &lt;a href=&quot;http://en.wikipedia.org/wiki/ERG_theory&quot;&gt;ERG Theory&lt;/a&gt;: work is a way we can meet our basic existential needs effectively and reliably.&lt;/p&gt;
&lt;p&gt;That’s a perfectly reasonable explanation, but here’s where things get interesting: what happens when people have enough resources to do whatever they want? What does “Level 4” look like?&lt;/p&gt;
&lt;h2&gt;Level 4: Primary Motivation&lt;/h2&gt;
&lt;p&gt;Consider individuals like &lt;a href=&quot;http://en.wikipedia.org/wiki/Warren_Buffett&quot;&gt;Warren Buffett&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Steve_jobs&quot;&gt;Steve Jobs&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Dick_cheney&quot;&gt;Dick Cheney&lt;/a&gt;, and &lt;a href=&quot;http://en.wikipedia.org/wiki/Angelina_jolie&quot;&gt;Angeline Jolie&lt;/a&gt;. Each of these individuals has enough money to ensure that they never need to work again – they could quit tomorrow and live off of their savings in perpetuity. For some reason, however, they don’t – they keep working. Why?&lt;/p&gt;
&lt;p&gt;After considering this question, I think that people who have reached the “Freedom” stage of work make a choice (either explicitly or implicitly) about what they’re ultimately working for. The choice ultimately revolves around what that person values most: power, status, pleasure, creation, or quality.&lt;/p&gt;
&lt;h3&gt;#1: The Autocrat&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;The Autocrat’s primary motivation is power and control.&lt;/strong&gt; Common behaviors include continually seeking influence or control over the lives and actions of other people. Examples: businesspeople turned politicians like &lt;a href=&quot;http://en.wikipedia.org/wiki/Henry_Paulson&quot;&gt;Henry Paulson&lt;/a&gt; (US Secretary of the Treasury), &lt;a href=&quot;http://en.wikipedia.org/wiki/Dick_cheney&quot;&gt;Dick Cheney&lt;/a&gt; (US Vice-President), and &lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Bloomburg&quot;&gt;Michael Bloomburg&lt;/a&gt; (mayor of New York City).&lt;/p&gt;
&lt;h3&gt;#2: The Narcissist&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;The Narcissist’s primary motivation is attention, status, and fame.&lt;/strong&gt; Common behaviors include continually seeking the attention and esteem of other people, and acting in ways that will ensure they receive more and more attention. Examples: actors / celebrities like &lt;a href=&quot;http://en.wikipedia.org/wiki/Lindsay_lohan&quot;&gt;Lindsay Lohann&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Brittany_spears&quot;&gt;Brittany Spears&lt;/a&gt;, and &lt;a href=&quot;http://en.wikipedia.org/wiki/Madonna_%28entertainer%29&quot;&gt;Madonna&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;#3: The Hedonist&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;The Hedonist’s primary motivation is pleasure and enjoyment of material goods.&lt;/strong&gt; Common behaviors include the continual acquisition of luxurious homes, fine food, and exotic travel. Examples: &lt;a href=&quot;http://en.wikipedia.org/wiki/Larry_Ellison&quot;&gt;Larry Elison&lt;/a&gt; (CEO of Oracle), &lt;a href=&quot;http://en.wikipedia.org/wiki/Mohammed_bin_Rashid_al-Maktoum&quot;&gt;Mohammed bin Rashid Al Maktoum&lt;/a&gt; (Sheikh of Dubai), and &lt;a href=&quot;http://en.wikipedia.org/wiki/Paul_Allen&quot;&gt;Paul Allen&lt;/a&gt; (co-founder of Microsoft).&lt;/p&gt;
&lt;h3&gt;#4: The Architect&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;The Architect’s primary motivation is creating something new or reshaping the world.&lt;/strong&gt; Common behaviors include the establishment of a vision of what the world “should” look like, then continually pursuing projects that they believe will bring the world closer to that ideal. Examples: &lt;a href=&quot;http://en.wikipedia.org/wiki/Steve_jobs&quot;&gt;Steve Jobs&lt;/a&gt; (CEO of Apple), &lt;a href=&quot;http://en.wikipedia.org/wiki/Richard_Dawkins&quot;&gt;Richard Dawkins&lt;/a&gt; (biologist and lecturer), &lt;a href=&quot;http://en.wikipedia.org/wiki/Muhammad_Yunus&quot;&gt;Muhammad Yunus&lt;/a&gt; (father of micro-lending), and politicians like &lt;a href=&quot;http://en.wikipedia.org/wiki/Ron_paul&quot;&gt;Ron Paul&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Dennis_kucinich&quot;&gt;Denis Kucinich&lt;/a&gt;, and &lt;a href=&quot;http://en.wikipedia.org/wiki/Al_gore&quot;&gt;Al Gore&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;#5: The Craftsman&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;The Craftsman’s primary motivation is quality and enjoyment of the work.&lt;/strong&gt; Common behaviors include the continual exercise and improvement of a set of specific skills or abilities and use of those skills as a means of self-expression. Examples: &lt;a href=&quot;http://en.wikipedia.org/wiki/Warren_Buffett&quot;&gt;Warren Buffett&lt;/a&gt; (investor and CEO of Berkshire Hathaway), &lt;a href=&quot;http://en.wikipedia.org/wiki/J.K._Rowling&quot;&gt;J.K. Rowling&lt;/a&gt; (author), and &lt;a href=&quot;http://en.wikipedia.org/wiki/Stephen_Spielberg&quot;&gt;Stephen Spielberg&lt;/a&gt; (filmmaker).&lt;/p&gt;
&lt;h2&gt;Why is Primary Motivation Important?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Here’s my first hypothesis: once you identify your primary motivation, you’ll find it much easier to achieve your goals.&lt;/strong&gt; These primary motivations appear to be relatively universal, and are based on very deep-seated psychological needs. Tapping into these sources of motivation directly allows people to accomplish their actual objectives more quickly, whatever they might be. Said another way, it’s easier to get what you really want if you identify what you really want.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;My second hypothesis is that not all of these primary motivations lead to a lasting sense of personal satisfaction and fulfillment.&lt;/strong&gt; If you’re an Autocrat, there will always be people you do not control. If you’re a Narcissist, there will always be people who look down on or ignore you. If you’re a Hedonist, the &lt;a href=&quot;http://en.wikipedia.org/wiki/Hedonic_treadmill&quot;&gt;hedonic treadmill&lt;/a&gt; ensures that every pleasure eventually fades. If you’re an Architect, the world seems to have a tendency to stubbornly refuse to conform to your ideals.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;When I look at the universe of “successful” people in the world, it appears that the Craftsman has the best shot at lasting personal satisfaction and fulfillment.&lt;/strong&gt; You ultimately can’t control the world or other people, but you &lt;span style=&quot;text-decoration: underline;&quot;&gt;can&lt;/span&gt; control your dedication to perfecting your craft and expressing yourself through your work.&lt;/p&gt;
&lt;p&gt;If we have a choice in determining our primary motivation, it seems that the Craftsman’s ethos has the most to offer: it may eventually lead to power, status, pleasure, and world-changing achievement, but it frees us from the perception that our self-worth depends on any of these things. That’s a remarkable combination.&lt;/p&gt;
&lt;p&gt;Thoughts?  Leave them in the comments.&lt;/p&gt;
&lt;div id=&quot;TixyyLink&quot;&gt;&lt;a href=&quot;http://personalmba.com/business-not-really-about-money/#ixzz0hKsiQFvJ&quot;&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/weizhou.wordpress.com/355/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/weizhou.wordpress.com/355/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/weizhou.wordpress.com/355/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/delicious/weizhou.wordpress.com/355/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/weizhou.wordpress.com/355/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/stumble/weizhou.wordpress.com/355/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/weizhou.wordpress.com/355/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/digg/weizhou.wordpress.com/355/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/weizhou.wordpress.com/355/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/reddit/weizhou.wordpress.com/355/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;http://stats.wordpress.com/b.gif?host=weizhou.wordpress.com&amp;amp;blog=2603969&amp;amp;post=355&amp;amp;subd=weizhou&amp;amp;ref=&amp;amp;feed=1&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;</description>
	<pubDate>Fri, 05 Mar 2010 20:41:55 +0000</pubDate>
	<dc:creator>weizhou</dc:creator>
</item>
<item>
	<title>Margaret Leibovic: Sharing Content on the Web</title>
	<guid isPermaLink="false">http://margaret.mit.edu/?p=46</guid>
	<link>http://margaret.mit.edu/2010/03/sharing-content-on-the-web/</link>
	<description>&lt;p&gt;Since January, I’ve been working as an undergraduate researcher with the &lt;a href=&quot;http://groups.csail.mit.edu/haystack/&quot;&gt;Haystack Group&lt;/a&gt; in &lt;a href=&quot;http://www.csail.mit.edu/&quot;&gt;CSAIL&lt;/a&gt;. I’ve been working on &lt;a href=&quot;http://feedme.csail.mit.edu/&quot;&gt;FeedMe&lt;/a&gt;, a plug-in for &lt;a href=&quot;http://www.google.com/reader/&quot;&gt;Google Reader&lt;/a&gt; that provides mechanisms to support sharing content with other web users via email. FeedMe facilitates directed sharing by supporting the social processes behind web content sharing. FeedMe uses content previously shared with recipients to determine their preferences, and it uses these preferences to recommend potential recipients for a given feed entry. It also allows users to see how many items have recently been shared with a given recipient, in order to avoid overwhelming individuals with shared content, and it provides a single-click process for recipients to thank sharers, encouraging future shares.&lt;/p&gt;
&lt;p&gt;Although the current FeedMe system facilitates sharing within the Google Reader interface, one of its main limitations is that FeedMe recommendations aren’t available outside of this interface. Many information foragers use Google Reader, but most of them also find interesting content from at least one other information aggregator, such as &lt;a href=&quot;http://twitter.com/&quot;&gt;Twitter&lt;/a&gt;, &lt;a href=&quot;http://news.ycombinator.com/&quot;&gt;Hacker News&lt;/a&gt;, or &lt;a href=&quot;http://www.reddit.com/&quot;&gt;Reddit&lt;/a&gt;. Additionally, users sometimes stumble upon novel content outside of any information aggregator, and this is content that their friends are often least likely to see.&lt;/p&gt;
&lt;p&gt;To address the main limitation of the current FeedMe system, I’ve been working on designing an interface that will enable FeedMe recommendations for all websites. Designing this interface poses some challenges, especially figuring out a way to make these recommendations noticeable without detracting from the user’s browsing experience. After a series of paper prototypes and mock-ups, I decided to implement an expandable (and hideable) bar along the edge of the user’s browser content. However, I still haven’t decided whether this bar should be at the top or bottom of the content. I’ve included some mock-ups below, and I’m open to feedback.&lt;/p&gt;
&lt;p&gt;This week I’m going to begin implementing the basic structure and functionality of this bar using &lt;a href=&quot;https://jetpack.mozillalabs.com/&quot;&gt;Jetpack&lt;/a&gt;, and I’ll try to make updates here whenever I make progress worth sharing!&lt;/p&gt;
&lt;div style=&quot;width: 460px;&quot; id=&quot;attachmenfet_52&quot; class=&quot;wp-caption alignnone&quot;&gt;&lt;a href=&quot;http://margaret.mit.edu/~leibovic/wp-content/images/bar1.png&quot;&gt;&lt;img src=&quot;http://margaret.mit.edu/~leibovic/wp-content/images/bar1.png&quot; alt=&quot;Top Bar (Collapsed)&quot; title=&quot;bar1&quot; class=&quot;size-medium wp-image-52&quot; width=&quot;225&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://margaret.mit.edu/~leibovic/wp-content/images/bar2.png&quot;&gt;&lt;img src=&quot;http://margaret.mit.edu/~leibovic/wp-content/images/bar2.png&quot; alt=&quot;Top Bar (Expanded)&quot; title=&quot;bar1&quot; class=&quot;size-medium wp-image-52&quot; width=&quot;225&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Top Bar (Collapsed and Expanded Views)&lt;/p&gt;&lt;/div&gt;
&lt;div style=&quot;width: 460px;&quot; id=&quot;attachmenfet_52&quot; class=&quot;wp-caption alignnone&quot;&gt;&lt;a href=&quot;http://margaret.mit.edu/~leibovic/wp-content/images/bar-bottom1.png&quot;&gt;&lt;img src=&quot;http://margaret.mit.edu/~leibovic/wp-content/images/bar-bottom1.png&quot; alt=&quot;Bottom Bar (Collapsed)&quot; title=&quot;bar1&quot; class=&quot;size-medium wp-image-52&quot; width=&quot;225&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://margaret.mit.edu/~leibovic/wp-content/images/bar-bottom2.png&quot;&gt;&lt;img src=&quot;http://margaret.mit.edu/~leibovic/wp-content/images/bar-bottom2.png&quot; alt=&quot;Bottom Bar (Expanded)&quot; title=&quot;bar1&quot; class=&quot;size-medium wp-image-52&quot; width=&quot;225&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;Bottom Bar (Collapsed and Expanded Views)&lt;/p&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 03 Mar 2010 22:11:05 +0000</pubDate>
	<dc:creator>Margaret Leibovic</dc:creator>
</item>
<item>
	<title>Josh Matthews: Getting involved with Mozilla</title>
	<guid isPermaLink="false">http://www.joshmatthews.net/blog/?p=63</guid>
	<link>http://www.joshmatthews.net/blog/2010/03/getting-involve-with-mozilla/</link>
	<description>&lt;p&gt;I realize that while I’ve been contributing to Mozilla since last July, I’m still quite new to a lot of the process and knowledge that more experienced developers take for granted.  Therefore, I’m going to document the steps I’ve taken to increase my understanding and involvement in hopes that it generates some discussion on the best way to help new people get their bearings.&lt;/p&gt;
&lt;p&gt;One of the most inviting aspects of the project right off the bat was that I had a point of contact. Benjamin Smedberg announced in a blog post that the Electrolysis project could always use more help, inviting interested people to get in touch with him.  This was an immense help, as he pointed me towards a really good introductory bug that forced me to explore and learn about IPDL, IDL, XPCOM, Javascript, the build system, and more.  This was perfect for me; I’m always looking to expand the horizons of what I know, and my work hooking up e10s with the typeaheadfind component allowed me to do just that.&lt;/p&gt;
&lt;p&gt;I find that one of the largest hurdles for getting involved in any project for me is lack of knowledge.  You’ve got a source checkout, and you’ve got a problem to solve, but no idea where to start.  If you’re courageous, you can start dipping into random files and window shopping until you find something that looks promising.  However, this approach is inefficient.  As I said, I really like to expand the breadth of my understanding as quickly as possible, so here are my patented steps to getting a better handle on the source tree:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Subscribe to an RSS feed of commits&lt;/li&gt;
&lt;li&gt;Hang out in IRC channels&lt;/li&gt;
&lt;li&gt;Watch interesting Bugzilla users&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The trick here is to have lots of information available for consumption, and to sample a wide variety of it.  I read commit logs every morning, pick out entries that catch my attention and skim the commit.  If I’m still interested, I’ll visit the original bug and read through its history.  Through these actions, I am now in possession of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;names of people involved in something I’m intrigued by&lt;/li&gt;
&lt;li&gt;locations in the tree of code that I’m interested in&lt;/li&gt;
&lt;li&gt;other information from the bug – components worth paying attention to, dependencies, blockers, etc&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;IRC channels are a great way to act sponge-like.  Many diverse conversations on all sorts of interesting code-related topics occur in #developers, while more focused channels like #content and #static allow me to pick up new concepts and insights into the work that I’m currently doing.  Furthermore, they’re points of contact for people who are usually happy to help out when I’ve got a question.&lt;/p&gt;
&lt;p&gt;Finally, Bugzilla is a goldmine of fascinating activity and information.  When I started working on electrolysis, I realized that all of work I was interested in was clusted in the Core:IPC, so I set up an email watch on the QA contact for that component.  Eventually, however, I wanted to diversify, so I began to follow specific users.  Watching the activity of the polyglots of the project, those who dip in and out of every component is a great way to quickly become exposed to the wealth of work being done.  There’s a downside to this: the more users you watch, the more intimidating your bugmail becomes.  Today, I ended up receiving 270 emails over the course of one hour because roc decided to unassign himself from a crapload of bugs at the same time as a bunch of dependencies were added to some Jaegermonkey tracking bugs.  However, I’ve become adept at quickly deciding whether a conversation thread is interesting to me or not, and these deluges are infrequent.&lt;/p&gt;
&lt;p&gt;When it comes to learning about specific pieces of code that confuse me, I have another system.  If it’s some fundamental concept that I need to grok (nsCOMPtr, ns*String, etc.), I turn to the faithful Google search: “mozilla X”, X being the unknown item, and 99% of the time the first result will be the relevant MDC page.  If I’m more interested in quickly locating pieces of code, I pull out &lt;a href=&quot;http://dxr.proximity.on.ca/dxr/&quot;&gt;DXR&lt;/a&gt; and make use of its wonderful search limiters such as member: or derived:.  If what I’m looking for is a piece of C or JS code, or simply isn’t indexed in DXR (m-c only), I haul out mxr and search there.  If I do a few searches and can’t find what I’m looking for, it’s usually off to the friendly folk in #developers.&lt;/p&gt;
&lt;p&gt;There’s one specific moment I remember from when I was starting out – my very first review.  I’d submitted my first attempt at the typeaheadfind work, and to my horror, and email arrived with the subject “&lt;b&gt;review denied&lt;/b&gt;.”  I felt crushed.  Reading through the review, I saw that many good points were made, but it was hard at first to shake the feeling that my code was simply not good enough.  I’ve gotten better at accepting review- since then, but I feel that a simple change to the email subject (“&lt;b&gt;review complete&lt;/b&gt;“) would go a long way to improving that user experience.&lt;/p&gt;
&lt;p&gt;So that’s it, really.  Through the application of these methods, I’ve gained enough knowledge to submit a bunch of patches, log some bugs, and start answering other people’s questions.  It’s really just been a process of perseverance, asking the right questions, and making use of the correct tools.&lt;/p&gt;
&lt;p&gt;Got a story?  Please share!  I’d love to hear how other people’s experiences differ.&lt;/p&gt;</description>
	<pubDate>Tue, 02 Mar 2010 10:09:10 +0000</pubDate>
	<dc:creator>Josh Matthews</dc:creator>
</item>
<item>
	<title>Josh Matthews: Faster mercurial patch queue merging with emacs</title>
	<guid isPermaLink="false">http://www.joshmatthews.net/blog/?p=52</guid>
	<link>http://www.joshmatthews.net/blog/2010/03/faster-mercurial-patch-queue-merging-with-emacs/</link>
	<description>&lt;p&gt;As a follow-up to &lt;a href=&quot;http://www.joshmatthews.net/blog/2010/01/dealing-with-mercurial-patch-queue-rejects-in-emacs/&quot;&gt;my previous post&lt;/a&gt; about merging mq reject in emacs, I thought I’d share some improvements to the process that I’ve made since then.&lt;/p&gt;
&lt;div style=&quot;white-space: wrap;&quot; class=&quot;dean_ch&quot;&gt;
&lt;ol&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;defun&lt;/span&gt; switch-hg-reject &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;  &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;interactive&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;  &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;other-file&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;         &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;string= &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;substring &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;buffer-file-&lt;span class=&quot;kw1&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;-4&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;nil&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&quot;.rej&quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;
&lt;div class=&quot;de2&quot;&gt;             &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;substring &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;buffer-file-&lt;span class=&quot;kw1&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;-4&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;           &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;concat &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;buffer-file-&lt;span class=&quot;kw1&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&quot;.rej&quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;    &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;file-exists-p other-file&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;        &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;save-selected-window&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;          &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;switch-to-buffer-other-window &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;find-file-noselect other-file&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;
&lt;div class=&quot;de2&quot;&gt;      &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;message &lt;span class=&quot;st0&quot;&gt;&quot;No alternate reject file found&quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;defun&lt;/span&gt; kill-hg-reject &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;  &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;interactive&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;  &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;reject-file &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;concat &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;buffer-file-&lt;span class=&quot;kw1&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&quot;.rej&quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;
&lt;div class=&quot;de2&quot;&gt;    &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;kill-buffer&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;     &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;find-buffer-visiting reject-file&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;global-set-key &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;kbd &lt;span class=&quot;st0&quot;&gt;&quot;C-c r&quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; ’switch-hg-reject&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;global-set-key &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;kbd &lt;span class=&quot;st0&quot;&gt;&quot;C-x r&quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; ‘kill-hg-reject&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;p&gt;It turns out that swapping back and forth between the reject and the original in a single window felt was quite inefficient.  With these changes, the reject opens up in another window (think emacs terminology here) on &lt;code&gt;C-c r&lt;/code&gt;, and I can kill it later with &lt;code&gt;C-x r&lt;/code&gt;.  This also works better with other modules like uniquify – the code from the previous post would fail when trying to access rejects associated with buffers name “Makefile.in|ipc”.  No longer must you suffer the indignity of process!  Merging can, and should, be fun!  BEHOLD MY WORKS AND DESPAIR.&lt;/p&gt;</description>
	<pubDate>Tue, 02 Mar 2010 01:41:03 +0000</pubDate>
	<dc:creator>Josh Matthews</dc:creator>
</item>
<item>
	<title>Benoit Girard: Bugzilla Patch Collision</title>
	<guid isPermaLink="false">http://benoitgirard.wordpress.com/?p=36</guid>
	<link>http://benoitgirard.wordpress.com/2010/02/26/bugzilla-patch-collision/</link>
	<description>&lt;p&gt;Edit: I was told that a similar feature was already planned for DXR. I think DXR as the potential to be a very good development tool!&lt;/p&gt;
&lt;p&gt;I have been discussing this idea a bit over the work week and though I should perhaps get a better opinion. I haven’t worked on very many patches yet so I might be going from a small sample size but it seams like it should be possible to know if anyone is modifying the same code you are. I would be interested to know how common this problem is to everyone else so please let me know!&lt;/p&gt;
&lt;p&gt;What I suggest is to have a separate web app from Bugzilla that would keep a copy of all current patches. You could submit your patch to that server and the web app would present you with a report of all patch that touch the same source files and even highlight patches that directly conflict with your patch. A visual diff of all the patches on a given source file would be a great bonus (color coded like EtherPad). It could also show you information about the review state of that patch (if its been super-reviewed and is likely to land soon). An added benefit is you could query the server if an existing Bugzilla patch can no longer be applied on Trunk (bitrot).&lt;/p&gt;
&lt;p&gt;I’m curious to know if people that have been using Bugzilla longer think it would actually be worth while to create this tool or if it would just become an annoying optional step when submitting patch?&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/benoitgirard.wordpress.com/36/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/benoitgirard.wordpress.com/36/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/benoitgirard.wordpress.com/36/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/delicious/benoitgirard.wordpress.com/36/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/benoitgirard.wordpress.com/36/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/stumble/benoitgirard.wordpress.com/36/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/benoitgirard.wordpress.com/36/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/digg/benoitgirard.wordpress.com/36/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/benoitgirard.wordpress.com/36/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/reddit/benoitgirard.wordpress.com/36/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;http://stats.wordpress.com/b.gif?host=benoitgirard.wordpress.com&amp;amp;blog=12112851&amp;amp;post=36&amp;amp;subd=benoitgirard&amp;amp;ref=&amp;amp;feed=1&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;</description>
	<pubDate>Fri, 26 Feb 2010 05:10:52 +0000</pubDate>
	<dc:creator>benoitgirard</dc:creator>
</item>
<item>
	<title>Benoit Girard: Improving Incremental Builds Using ObjDir Method</title>
	<guid isPermaLink="false">http://benoitgirard.wordpress.com/?p=26</guid>
	<link>http://benoitgirard.wordpress.com/2010/02/23/improving-incremental-builds-using-objdir-method/</link>
	<description>&lt;p&gt;One annoyance I’ve ran into while working with incremental builds is that the Makefile are generated in the obj-dir. Rebuilding requires you to go from your source directory to your corresponding obj-dir and invoking ‘make’. &lt;/p&gt;
&lt;p&gt;Just place the following command in a script in your path:&lt;br /&gt;
&lt;code&gt;&lt;del datetime=&quot;2010-02-23T08:17:27+00:00&quot;&gt;&lt;br /&gt;
cd $(pwd | sed 's/mozilla-central/mozilla-central\/obj-ff-dbg/g') &amp;amp;&amp;amp; make; cd -&lt;/del&gt;&lt;br /&gt;
make -C $(pwd | sed 's/mozilla-central/mozilla-central\/obj-ff-dbg/g')&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
This script will call the corresponding obj-dir Makefile from the source folder. As readers mentioned the second version removes the ‘cd’ nastiness, thanks!&lt;/p&gt;
&lt;p&gt;This is great if your working with both 32 and 64-bits obj-dirs since you can create a make32.sh and make64.sh script to trigger the corresponding incremental build from the same source folder and manage two builds!&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/benoitgirard.wordpress.com/26/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/benoitgirard.wordpress.com/26/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/benoitgirard.wordpress.com/26/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/delicious/benoitgirard.wordpress.com/26/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/benoitgirard.wordpress.com/26/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/stumble/benoitgirard.wordpress.com/26/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/benoitgirard.wordpress.com/26/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/digg/benoitgirard.wordpress.com/26/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/benoitgirard.wordpress.com/26/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/reddit/benoitgirard.wordpress.com/26/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;http://stats.wordpress.com/b.gif?host=benoitgirard.wordpress.com&amp;amp;blog=12112851&amp;amp;post=26&amp;amp;subd=benoitgirard&amp;amp;ref=&amp;amp;feed=1&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;</description>
	<pubDate>Tue, 23 Feb 2010 01:03:22 +0000</pubDate>
	<dc:creator>benoitgirard</dc:creator>
</item>
<item>
	<title>Benoit Girard: Sharing Your Session</title>
	<guid isPermaLink="false">http://benoitgirard.wordpress.com/?p=10</guid>
	<link>http://benoitgirard.wordpress.com/2010/02/18/sharing-your-session/</link>
	<description>&lt;h2&gt;Motivation&lt;/h2&gt;
&lt;p&gt;I’ve been working a lot with remote people over IRC here at Mozilla. Pastebin can be your friend to share stackdumps but sometimes you need to show an interactive session. This is great if you want someone more experience to help you debug the problem in GDB for example. GNU Screen is a great terminal multiplexer but the drawback is that it requires some configuration.&lt;/p&gt;
&lt;h2&gt;How to:&lt;/h2&gt;
&lt;p&gt;Here is a simpler way to quickly share your session over a chat session. You can redirect ’script’ to a listening port using the following command:&lt;/p&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;touch transcript; tail -f transcript &amp;amp; script -q -t 0 | tee transcript | nc -l 5678; rm transcript;&lt;/pre&gt;
&lt;p&gt;That’s a long and complicated command but that is the best way I have found to redirect script to both the screen and ‘nc’. Let me know if you know a better way!&lt;br /&gt;
To have someone watch your interactive session ask them to execute the following commands:&lt;/p&gt;
&lt;pre class=&quot;brush: bash;&quot;&gt;nc &amp;lt;HOSTNAME/IP&amp;gt; 5678&lt;/pre&gt;
&lt;h2&gt;Extensions&lt;/h2&gt;
&lt;p&gt;If this is useful others I could extend this to allow the person watching to interact with the session as well, however for now I can just claim that it’s a security issue!&lt;/p&gt;
&lt;p&gt;I’d also like to extend this to work with NATs by deploying an online web app where you can request that you would like to share a session with someone and it will give you addresses to connect to and act as a connector so that two users located in different intranets can use this as well.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/benoitgirard.wordpress.com/10/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/benoitgirard.wordpress.com/10/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/benoitgirard.wordpress.com/10/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/delicious/benoitgirard.wordpress.com/10/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/benoitgirard.wordpress.com/10/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/stumble/benoitgirard.wordpress.com/10/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/benoitgirard.wordpress.com/10/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/digg/benoitgirard.wordpress.com/10/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/benoitgirard.wordpress.com/10/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/reddit/benoitgirard.wordpress.com/10/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;http://stats.wordpress.com/b.gif?host=benoitgirard.wordpress.com&amp;amp;blog=12112851&amp;amp;post=10&amp;amp;subd=benoitgirard&amp;amp;ref=&amp;amp;feed=1&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;</description>
	<pubDate>Thu, 18 Feb 2010 20:39:43 +0000</pubDate>
	<dc:creator>benoitgirard</dc:creator>
</item>
<item>
	<title>Benoit Girard: Interning At Mozilla</title>
	<guid isPermaLink="false">http://benoitgirard.wordpress.com/?p=5</guid>
	<link>http://benoitgirard.wordpress.com/2010/02/18/interning-at-mozilla/</link>
	<description>&lt;p&gt;I’ve been at Mozilla for nearly two months now. In this blog I plan to share about the projects I worked on, the problems and the solutions I found along the way and other tips that may be useful.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/benoitgirard.wordpress.com/5/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/benoitgirard.wordpress.com/5/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/benoitgirard.wordpress.com/5/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/delicious/benoitgirard.wordpress.com/5/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/benoitgirard.wordpress.com/5/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/stumble/benoitgirard.wordpress.com/5/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/benoitgirard.wordpress.com/5/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/digg/benoitgirard.wordpress.com/5/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/benoitgirard.wordpress.com/5/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/reddit/benoitgirard.wordpress.com/5/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;http://stats.wordpress.com/b.gif?host=benoitgirard.wordpress.com&amp;amp;blog=12112851&amp;amp;post=5&amp;amp;subd=benoitgirard&amp;amp;ref=&amp;amp;feed=1&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;</description>
	<pubDate>Thu, 18 Feb 2010 18:57:01 +0000</pubDate>
	<dc:creator>benoitgirard</dc:creator>
</item>
<item>
	<title>Josh Matthews: Applied knowledge</title>
	<guid isPermaLink="true">http://www.joshmatthews.net/blog/2010/02/applied-knowledge/</guid>
	<link>http://www.joshmatthews.net/blog/2010/02/applied-knowledge/</link>
	<description>&lt;p&gt;I think I’m starting to feel more at home in the Mozilla codebase.  It’s an exciting feeling when you can actually start answering other people’s questions instead of always being on the asking end.&lt;/p&gt;</description>
	<pubDate>Wed, 17 Feb 2010 13:41:05 +0000</pubDate>
	<dc:creator>Josh Matthews</dc:creator>
</item>
<item>
	<title>Wilson Lee: JavaScript Quiz and Explanations of its Answers</title>
	<guid isPermaLink="false">http://kourge.net/130 at http://kourge.net</guid>
	<link>http://kourge.net/node/130</link>
	<description>&lt;div class=&quot;messages status&quot;&gt;Update: Comments are now enabled.&lt;/div&gt;
&lt;p&gt;In the field of linguistics, rules can be either &lt;em&gt;descriptive&lt;/em&gt; or &lt;em&gt;prescriptive&lt;/em&gt;. Simply put, descriptive rules tell you what &lt;em&gt;can be done&lt;/em&gt; and prescriptive rules tell you what you &lt;em&gt;shouldn't do&lt;/em&gt;. Many articles about JavaScript give you prescriptions: they tell you what you shouldn't do in JavaScript because it's bad practice. After learning to stay away from certain styles and patterns, though, sometimes a simple typo or brain fart can avalanche into a disaster in your code and still leave you puzzled even after attempting, descriptively, to explain what exactly happened.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://perfectionkills.com/javascript-quiz/&quot;&gt;kangax's JavaScript quiz&lt;/a&gt;, geared towards web developers, helps exactly that: finding descriptions that clarify perplexing situations. It does not test your knowledge of any DOM behavior and is focused on the ECMAScript language itself. Since this quiz targets &lt;em&gt;web developers&lt;/em&gt;, SpiderMonkey gurus can likely even point to where a given quirk (the term is being used very loosely here) is manifested in the implementation. As always, please point out any possible error in the answer explanations about to follow. Those who are interested but still haven't taken it: halt! Go and take it. I'll wait. After that, read on.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://kourge.net/node/130&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
	<pubDate>Fri, 12 Feb 2010 15:27:47 +0000</pubDate>
	<dc:creator>kourge</dc:creator>
</item>
<item>
	<title>Brian Krausz: Building a C++ XPCOM Component in Windows</title>
	<guid isPermaLink="false">http://nerdlife.net/?p=259</guid>
	<link>http://feedproxy.google.com/~r/nerdlife/~3/zSfl4cRKwKc/</link>
	<description>&lt;p&gt;I’ve been teaching myself to write Firefox extensions for the last few weeks, and became interested in XPCOM components.  Unfortunately, I couldn’t find a good (and recent) summary of them, and had to spend 3 or 4 days cobbling together various tutorials, so I figured it’s time to write one.&lt;/p&gt;
&lt;h4&gt;What is XPCOM?&lt;/h4&gt;
&lt;p&gt;XPCOM is a language-agnostic communication platform used in Mozilla products (and some other random pieces of software) to allow code (specifically extensions) to be written in a wide variety of languages.&lt;/p&gt;
&lt;h4&gt;Why would I want to use XPCOM?&lt;/h4&gt;
&lt;p&gt;There are two ways to “use” XPCOM.  First, you can call functions through XPCOM.  For example, the Firefox bookmarks service uses an XPCOM interface.  So in order to interact with this service from Javascript you would do something like:&lt;/p&gt;
&lt;pre&gt;var bmarks = Components.classes[&quot;@mozilla.org/browser/bookmarks-service;1&quot;].getService();
bmarks.QueryInterface(Components.interfaces.nsIBookmarksService);
bmarks.addBookmarkImmediately(&quot;http://www.mozilla.org&quot;,&quot;Mozilla&quot;,0,null);&lt;/pre&gt;
&lt;p&gt;There are plenty of tutorials on doing this as it is the more common use for XPCOM, so I won’t go into any detail on it here.&lt;/p&gt;
&lt;p&gt;The second way is to write an XPCOM service.  That is what this tutorial covers. Sometimes you need extra functionality, speed, or just want to tie into some library that requires a different language.  Most commonly this is C++, but there is also &lt;a href=&quot;https://developer.mozilla.org/en/JavaXPCOM&quot;&gt;JavaXPCOM&lt;/a&gt; and &lt;a href=&quot;https://developer.mozilla.org/en/PyXPCOM&quot;&gt;PyXPCOM&lt;/a&gt; (and probably a few others).  I’ll be talking about C++, since it’s what I needed for my project.&lt;/p&gt;
&lt;h4&gt;Warnings&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Before you trudge through this: &lt;b&gt;you most likely are in the wrong place&lt;/b&gt;.  Firefox extensions are usually all Javascript.  If you can use JS to do what you want, &lt;b&gt;stop now&lt;/b&gt;.  There is no need to go through the complexity of an XPCOM component when you can just use JS.  Go read &lt;a href=&quot;https://developer.mozilla.org/en/Extensions&quot;&gt;a tutorial about writing extensions&lt;/a&gt; and get to work.&lt;/li&gt;
&lt;li&gt;There is something called &lt;a href=&quot;https://developer.mozilla.org/en/JavaScript_code_modules/ctypes.jsm&quot;&gt;ctypes&lt;/a&gt; coming to FF 3.7 that may make doing this a lot easier.  I haven’t touched this at all, but it may be worth considering if you can wait for the functionality and only need to tie into a particular DLL for some functionality.  Long story short, XPCOM may become the more difficult way to call C++ functions from FF extensions.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;My Setup&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Windows 7&lt;/li&gt;
&lt;li&gt;Visual C++ Express 2008 (free from &lt;a href=&quot;http://www.microsoft.com/express/Downloads/#2008-Visual-CPP&quot;&gt;Microsoft’s website&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Firefox 3.6 (Gecko 1.9.2)&lt;/li&gt;
&lt;li&gt;A UUID or GUID generator.  This is a unique (read: random) ID that identifies your app to the world.  Windows and Linux have tools to generate this (guidgen &amp;amp; uuidgen, respectively), or you can find various online generators (&lt;a href=&quot;https://developer.mozilla.org/en/Generating_GUIDs&quot;&gt;Mozilla links to several&lt;/a&gt;).  I recommend &lt;a href=&quot;http://mozilla.pettay.fi/cgi-bin/mozuuid.pl&quot;&gt;this one&lt;/a&gt; since it gives you the C++ encoded form too, which you will need.  You need two different UUIDs: one for your interface and one for your component.&lt;/li&gt;
&lt;li&gt;Ability to read and understand C++&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Sample Code&lt;/h4&gt;
&lt;p&gt;If you don’t want to go through the tutorial and just want everything to work, then download &lt;a href=&quot;http://nerdlife.net/wp-content/uploads/2010/02/mycomponent.zip&quot;&gt;this sample code&lt;/a&gt;.  Just follow step #1 of the tutorial, then make sure your Gecko SDK directory is set right in the build step, and you can breeze on by most of this article.&lt;/p&gt;
&lt;h4&gt;The Tutorial&lt;/h4&gt;
&lt;p&gt;This is mostly paraphrased from &lt;a href=&quot;http://www.iosart.com/firefox/xpcom/&quot;&gt;Alex Sirota’s great tutorial&lt;/a&gt;, but it hasn’t been updated since 2005 and is a bit outdated.  This new one should work out of the box for FF 3.6.&lt;/p&gt;
&lt;p&gt;This tutorial will create a component called &lt;code&gt;MyComponent&lt;/code&gt; with one function: &lt;code&gt;Add&lt;/code&gt;, which will take 2 numbers and, surprisingly, return the sum.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/en/Gecko_SDK&quot;&gt;Download the Gecko SDK&lt;/a&gt; for your version of Firefox.  I used 1.9.2 for FF 3.6.&lt;/li&gt;
&lt;li&gt;Create an idl file - &lt;code&gt;IMyComponent.idl&lt;/code&gt;, with the following (replacing &lt;code&gt;***IUID***&lt;/code&gt; with your interface UUID):
&lt;pre&gt;#include &quot;nsISupports.idl&quot;

[scriptable, uuid(***IUID***)]
interface IMyComponent : nsISupports
{
  long Add(in long a, in long b);
};
&lt;/pre&gt;
&lt;p&gt;This file is a language-agnostic interface definition which you can read more about &lt;a href=&quot;http://www.mozilla.org/scriptable/xpidl/idl-authors-guide/index.html&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;Generate the interface header and typelib files out of the interface definition file.  Assuming you extracted the Gecko SDK to &lt;code&gt;C:\xulrunner-sdk\&lt;/code&gt;, run the following commands (from the directory you saved &lt;code&gt;IMyComponent.idl&lt;/code&gt; to):
&lt;pre&gt;C:\xulrunner-sdk\sdk\bin\xpidl.exe -m header -I C:\xulrunner-sdk\idl .\IMyComponent.idl
C:\xulrunner-sdk\sdk\bin\xpidl.exe -m typelib -I C:\xulrunner-sdk\idl .\IMyComponent.idl
&lt;/pre&gt;
&lt;p&gt;These will create &lt;code&gt;IMyComponent.h&lt;/code&gt; and &lt;code&gt;IMyComponent.xpt,&lt;/code&gt; respectively.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;IMyComponent.h&lt;/code&gt; has two snippits of code that you can use for the next two files.  Everything between &lt;code&gt;/* Header file */&lt;/code&gt; and &lt;code&gt;/* Implementation file */&lt;/code&gt; can be used for &lt;code&gt;MyComponent.h&lt;/code&gt;:
&lt;ol&gt;
&lt;li&gt;Start by inserting double inclusion protection code and the right include:
&lt;pre&gt;#ifndef _MY_COMPONENT_H_
#define _MY_COMPONENT_H_

#include &quot;IMyComponent.h&quot;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Add the following lines, which define your component name, contract ID, and CUID (where ***CUID*** is the C++-style component UUID, of the form { 0×12345678, 0×9abc, 0xdef0, { 0×12, 0×34, 0×56, 0×78, 0×9a, 0xbc, 0xde, 0xf0 } }):
&lt;pre&gt;#define MY_COMPONENT_CONTRACTID &quot;@example.com/XPCOMSample/MyComponent;1&quot;
#define MY_COMPONENT_CLASSNAME &quot;A Simple XPCOM Sample&quot;
#define MY_COMPONENT_CID ***CUID***&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Copy in the snippet from &lt;code&gt;IMyComponent.h&lt;/code&gt;, replacing all the instances of &lt;code&gt;_MYCLASS_&lt;/code&gt; with the name of your component (&lt;code&gt;MyComponent&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Finish off the double inclusion protection code with &lt;code&gt;#endif //_MY_COMPONENT_H_&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Everything between &lt;code&gt;/* Implementation file */&lt;/code&gt; and &lt;code&gt;/* End of implementation class template. */&lt;/code&gt; can be used for &lt;code&gt;MyComponent.cpp&lt;/code&gt;:
&lt;ol&gt;
&lt;li&gt;Start by inserting the right include:
&lt;pre&gt;#include &quot;MyComponent.h&quot;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Copy in the snippet from &lt;code&gt;IMyComponent.h&lt;/code&gt;, replacing all the instances of &lt;code&gt;_MYCLASS_&lt;/code&gt; with the name of your component (&lt;code&gt;MyComponent&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Add some implementation to the &lt;code&gt;Add&lt;/code&gt; method.  I replaced &lt;code&gt;return NS_ERROR_NOT_IMPLEMENTED;&lt;/code&gt; with
&lt;pre&gt;	*_retval = a + b;
return NS_OK;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Create your module definitions files:
&lt;pre&gt;#include &quot;nsIGenericFactory.h&quot;
#include &quot;MyComponent.h&quot;

NS_GENERIC_FACTORY_CONSTRUCTOR(MyComponent)

static nsModuleComponentInfo components[] =
{
    {
       MY_COMPONENT_CLASSNAME,
       MY_COMPONENT_CID,
       MY_COMPONENT_CONTRACTID,
       MyComponentConstructor,
    }
};

NS_IMPL_NSGETMODULE(&quot;MyComponentsModule&quot;, components) &lt;/pre&gt;
&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;You now have all of the files needed to build an XPCOM component:&lt;/p&gt;
&lt;pre&gt;IMyComponent.h
IMyComponent.idl
IMyComponent.xpt
MyComponent.cpp
MyComponent.h
MyComponentModule.cpp&lt;/pre&gt;
&lt;p&gt;Now comes the hard part: getting the damn thing to build.&lt;/p&gt;
&lt;h4&gt;Building the code&lt;/h4&gt;
&lt;p&gt;Ok, it’s actually not hard since I’ve done most of the legwork for you.  Assuming you’re using Visual C++ 2008 here are the settings you need (again assuming &lt;code&gt;C:\xulrunner-sdk&lt;/code&gt; is where your Gecko SDK is).  In &lt;code&gt;Project-&amp;gt;Properties&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;Configuration Properties
  General
    Configuration Type: .dll
  C/C++
    General
      Additional Include Directories: C:\xulrunner-sdk\include
    Preprocessor
      Preprocessor Definitions: XP_WIN;XP_WIN32;XPCOM_GLUE_USE_NSPR
  Linker
    General
      Additional Library Directories: C:\xulrunner-sdk\lib
    Input
      Additional Dependencies: nspr4.lib xpcom.lib xpcomglue_s.lib&lt;/pre&gt;
&lt;p&gt;If you put the idl file into your project, be sure to mark it “Excluded from Build” in its properties…we don’t want VS touching it.&lt;/p&gt;
&lt;p&gt;Cross your fingers, pray to whatever deity you believe in, and hit the build button.  If it didn’t work let me know why in the comments and I’ll try to build a troubleshooting section.&lt;/p&gt;
&lt;h4&gt;Installing/Testing the Code&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Copy two files to &lt;code&gt;C:\Program Files\Mozilla Firefox\components&lt;/code&gt;:
&lt;ul&gt;
&lt;li&gt;The DLL the build generated&lt;/li&gt;
&lt;li&gt;&lt;code&gt;IMyComponent.xpt&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Normally, if this was installed as part of an extension, it would automatically search this directory and find these files.  But now we have to force a refresh.  Delete &lt;code&gt;xpti.dat.&lt;/code&gt; and &lt;code&gt;compreg.dat&lt;/code&gt; from your &lt;a href=&quot;http://support.mozilla.com/en-US/kb/Profiles#Where_is_my_profile_stored_&quot;&gt;profile directory&lt;/a&gt; (FF will regenerate them on next restart)&lt;/li&gt;
&lt;li&gt;Close Firefox and open it with this test file (&lt;code&gt;MyComponentTest.html&lt;/code&gt; in the sample code):
&lt;pre&gt;&amp;lt;html&amp;gt;
&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
function MyComponentTestGo() {
	try {
		// normally Firefox extensions implicitly have XPCOM privileges, but since this is a file we have to request it.
		netscape.security.PrivilegeManager.enablePrivilege(&quot;UniversalXPConnect&quot;);
		const cid = &quot;@example.com/XPCOMSample/MyComponent;1&quot;;
		obj = Components.classes[cid].createInstance();
		// bind the instance we just created to our interface
		obj = obj.QueryInterface(Components.interfaces.IMyComponent);
	} catch (err) {
		alert(err);
		return;
	}
	var res = obj.Add(3, 4);
	alert('Performing 3+4. Returned ' + res + '.');
}
&amp;lt;/script&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;button onclick=&quot;MyComponentTestGo();&quot;&amp;gt;Go&amp;lt;/button&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;
&lt;/li&gt;&lt;li&gt;One last time: cross your fingers, pray to whatever deity you believe in, and hit the Go button.  If it didn’t work let me know why in the comments and I’ll try to build a troubleshooting section.&lt;p&gt;&lt;/p&gt;
&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;Hopefully this clears up what looked like a lot of confusion to me.  I will keep this updated to the best of my abilities and hopefully it will continue to be useful for a long time.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/nerdlife/~4/zSfl4cRKwKc&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Sun, 07 Feb 2010 20:47:58 +0000</pubDate>
	<dc:creator>Brian</dc:creator>
</item>
<item>
	<title>James Boston: The wiki is the message</title>
	<guid isPermaLink="false">http://jamesboston.ca/135 at http://jamesboston.ca/cms</guid>
	<link>http://jamesboston.ca/cms/?q=node/135</link>
	<description>&lt;p&gt;Today, I attended a &lt;a href=&quot;http://socialmediaweek.org/toronto/&quot;&gt;Social Media Week&lt;/a&gt; event at the Rivoli. Nelson Ko of &lt;a href=&quot;http://citadelrock.com&quot;&gt;Citidel Rock&lt;/a&gt; gave a presentation, &lt;a href=&quot;http://smwtorontowiki.eventbrite.com/&quot;&gt;Why You Need To Wiki As Part Of Your Social Media Initiative And How&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Unlike the &lt;a href=&quot;http://www.inexchange09.com/&quot;&gt;IN09&lt;/a&gt; conference I attended last year, this event didn't have the same mix of software developers and content creators. Most attendees were the avatars of various non-profits who wanted to see if the wiki could serve their needs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Free message with every medium!&lt;/strong&gt;&lt;br /&gt;
Ko started with a smattering of theory which is something I love (when I'm not writing an exam). He started with the famous Marshall McLuhan quote: &lt;em&gt;The medium is the message.&lt;/em&gt; &lt;/p&gt;
&lt;p&gt;McLuhan in my own less succinct words: The technology you use to communicate your message carries its own message, perhaps at a barely audible whisper, but it is one which shapes (or distorts) the message you meant to convey.&lt;/p&gt;
&lt;p&gt;Neil Postman's &lt;a href=&quot;http://www.amazon.ca/Amusing-Ourselves-Death-Neil-Postman/dp/014303653X/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1265233977&amp;amp;sr=8-1&quot;&gt;Amusing Ourselves to Death&lt;/a&gt; makes the point that the overriding message of television is that everything can be judged as entertainment. No matter what you are watching, you can't help asking, &quot;Is this fun or is this boring?&quot; &lt;/p&gt;
&lt;p&gt;Or, more eloquently:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
&quot;[It] is not that television is entertaining but that it has made entertainment itself the natural format for the representation of all experience. […] The problem is not that television presents us with entertaining subject matter but that all subject matter is presented as entertaining.&quot;&lt;br /&gt;
&lt;em&gt;— Neil Postman, Amusing Ourselves to Death&lt;/em&gt;
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;But what is the message of wiki media? Mr. Postman, set me up:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
&quot;[M]ost of our daily news is inert, consisting of information that gives us something to talk about but cannot lead to any meaningful action.&quot;&lt;br /&gt;
&lt;em&gt;— Neil Postman, Amusing Ourselves to Death&lt;/em&gt;
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Well, the information in a wiki is actionable. If you can't do anything with it (and in the case of sites like &lt;a href=&quot;http://www.wikihow.com&quot;&gt;WikiHow&lt;/a&gt; you can) then you can at least do something &lt;em&gt;to&lt;/em&gt; it.&lt;/p&gt;
&lt;p&gt;Ko talked about divergence and convergence — the difference between broadcasting something (traditional publishing) or collaborating on something (social media). I'm not going to repeat the whole presentation, but I thought he made an interesting point here about most collaboration tools being at the personal end of a personal-public continuum such as email or the telephone. Wikis are something new in that they are public.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Carrot sticks!&lt;/strong&gt;&lt;br /&gt;
Ko's presentation was free flowing with lots of Q&amp;amp;A interspersed. The audience seemed most keen to learn how to guide and motivate users to contribute. (I'm sure that marshaling the efforts of volunteers is a paramount problem for any non-profit.) Ko had a slide about the various carrots and sticks that typically motivate people, which I jotted down:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;reputation and recognition&lt;/li&gt;
&lt;li&gt;social and networking benefits&lt;/li&gt;
&lt;li&gt;scratching an itch&lt;/li&gt;
&lt;li&gt;hobby, enjoyment or personal interest&lt;/li&gt;
&lt;li&gt;obligation from ethics or conscience&lt;/li&gt;
&lt;li&gt;compulsion or threat of explusion&lt;/li&gt;
&lt;li&gt;swag&lt;/li&gt;
&lt;li&gt;money&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I personally think reputation and recognition are &lt;em&gt;the&lt;/em&gt; big motivators is social media. People &quot;play&quot; &lt;em&gt;wikipedia&lt;/em&gt; or &lt;em&gt;digg&lt;/em&gt; much like they play &lt;em&gt;WoW&lt;/em&gt;. You are always trying to level up. But that's just my take. The rest of the list is fairly self-explanatory, except for compulsion which left me scratching my head. Unlike obligation (&lt;a href=&quot;http://wikileaks.org/&quot;&gt;Wikileaks&lt;/a&gt;), I can't think of wiki where compulsion is the prime motivator. &lt;/p&gt;
&lt;p&gt;Ko warned would-be wiki curators not to make contributing into a chore.&lt;/p&gt;
&lt;p&gt;&quot;Don't characterize it as work,&quot; cautioned Ko. &quot;It ruins the atmosphere.&quot;&lt;/p&gt;
&lt;p&gt;There was also another item from the slide, &quot;learning by doing&quot;, which I omitted. This pertained to the question of guiding as opposed to motivating. I omitted it because the consensus seemed to be that there is no easily repeatable way of teaching users how to contribute. There are repeatable methods for inviting people into the community, but training them to be productive is always an ad hoc effort. &lt;/p&gt;
&lt;p&gt;At least that's what I heard. I hope someone else blogs the event. I want to know what other people thought.&lt;/p&gt;</description>
	<pubDate>Wed, 03 Feb 2010 23:10:48 +0000</pubDate>
	<dc:creator>James</dc:creator>
</item>
<item>
	<title>Aaron Train: Dabbling in Cocoa/iPhone SDK</title>
	<guid isPermaLink="true">http://aaronmt.com/?p=697</guid>
	<link>http://aaronmt.com/?p=697</link>
	<description>&lt;p&gt;As I gear towards graduation at &lt;a href=&quot;https://cs.senecac.on.ca&quot;&gt;Seneca College&lt;/a&gt;, I am actively engaged in an a professional &lt;a href=&quot;http://petermcintyre.wordpress.com/dps913/&quot;&gt;Apple Development course.&lt;/a&gt; Why am I enrolled? Merely an interest for learning different languages; discovering their quirks, oddities and normalities. As well, I am using this astute scenario to experience the procedures and protocol in developing software on a mobile device. Nonetheless, the course should be fun and a &lt;a href=&quot;http://blogs.senecac.on.ca/senecainthenews/entry/seneca_in_the_news_august19&quot;&gt;unique&lt;/a&gt; learning opportunity.&lt;/p&gt;
&lt;p&gt;As part of my first lab, we were to get a feel for the different interface builder UI objects within a single view in order to create a manipulating student profile. See below.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://aaronmt.com/misc/appledev_lab1.png&quot; alt=&quot;&quot; height=&quot;279&quot; class=&quot;alignnone&quot; width=&quot;150&quot; /&gt;&lt;/p&gt;</description>
	<pubDate>Thu, 28 Jan 2010 01:17:50 +0000</pubDate>
	<dc:creator>Aaron</dc:creator>
</item>
<item>
	<title>Josh Matthews: Dealing with mercurial patch queue rejects in emacs</title>
	<guid isPermaLink="true">http://www.joshmatthews.net/blog/2010/01/dealing-with-mercurial-patch-queue-rejects-in-emacs/</guid>
	<link>http://www.joshmatthews.net/blog/2010/01/dealing-with-mercurial-patch-queue-rejects-in-emacs/</link>
	<description>&lt;p&gt;Since Mozilla has embraced mercurial, and especially &lt;a href=&quot;https://developer.mozilla.org/en/Mercurial_Queues&quot;&gt;patch queues&lt;/a&gt;, with open arms, I get to deal with rebasing patches frequently.  There are two ways this can happen – either you set up an external merge tool like meld to handle each conflict, or the rejected changes are dumped in a filename.ext.rej in the same directory as the file being patched.  Since I do all of my work in emacs, I’ve finally got around to writing an elisp function to allow me to switch to a reject file from the original quickly and painlessly:&lt;/p&gt;
&lt;div style=&quot;white-space: wrap;&quot; class=&quot;dean_ch&quot;&gt;
&lt;ol&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;defun&lt;/span&gt; switch-hg-reject &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;  &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;interactive&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;  &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;other-file&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;         &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;string= &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;substring &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;buffer-file-&lt;span class=&quot;kw1&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;-4&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;nil&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&quot;.rej&quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;
&lt;div class=&quot;de2&quot;&gt;             &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;substring &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;buffer-file-&lt;span class=&quot;kw1&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;-4&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;           &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;concat &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;buffer-file-&lt;span class=&quot;kw1&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&quot;.rej&quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;    &lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;    &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;file-exists-p other-file&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;          &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;switch-to-buffer &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;find-file-noselect other-file&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;      &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;message &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;format &lt;span class=&quot;st0&quot;&gt;&quot;No alternate reject file found&quot;&lt;/span&gt; other-file&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li2&quot;&gt;
&lt;div class=&quot;de2&quot;&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;li1&quot;&gt;
&lt;div class=&quot;de1&quot;&gt;&lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;global-set-key &lt;span class=&quot;br0&quot;&gt;(&lt;/span&gt;kbd &lt;span class=&quot;st0&quot;&gt;&quot;C-c r&quot;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt; ’switch-hg-reject&lt;span class=&quot;br0&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;p&gt;A simple &lt;code&gt;C-c r&lt;/code&gt; is all it takes to switch from nsFrameLoader.cpp to nsFrameLoader.cpp.rej in the current buffer, and another &lt;code&gt;C-c r&lt;/code&gt; will take me back to the original.  Now that’s convenience!&lt;/p&gt;</description>
	<pubDate>Thu, 28 Jan 2010 00:13:10 +0000</pubDate>
	<dc:creator>Josh Matthews</dc:creator>
</item>
<item>
	<title>Josh Matthews: Make ye a hydra</title>
	<guid isPermaLink="false">http://www.joshmatthews.net/blog/?p=40</guid>
	<link>http://www.joshmatthews.net/blog/2010/01/make-ye-a-hydra/</link>
	<description>&lt;p&gt;I’m interested in playing around with &lt;a href=&quot;https://wiki.mozilla.org/Dehydra&quot;&gt;Dehydra&lt;/a&gt; to see whether I can create a pre-review checker, hopefully to lessen the amount of nits that inevitably crop up in any patch submitted on Bugzilla.  However, as always, the immediate hurdle is acquiring and building the software involved.  Making dehydra from scratch involves building gcc 4.3.x, SpiderMonkey 1.7+, and dehydra itself.  The instructions in the dehydra &lt;a href=&quot;http://hg.mozilla.org/rewriting-and-analysis/dehydra/log/tip/README&quot;&gt;README&lt;/a&gt; gave me good, error-less instructions for gcc, and installing SpiderMonkey was nothing more than &lt;code&gt;./configure ; make ; sudo make install&lt;/code&gt;.  Building dehydra was a bit hairier; here’s my final sequence of steps:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;export CXX=/home/t_mattjo/src/gcc-dehydra/installed/bin/g++&lt;br /&gt;
./configure --js-libs=/usr/local/lib --js-name=js_static --js-headers=/usr/local/include/js/&lt;br /&gt;
make&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Of course, I also had to go into the &lt;code&gt;Makefile&lt;/code&gt; and add &lt;code&gt;-lstdc++&lt;/code&gt; because I kept receiving this error while trying to use the generated gcc_dehydra.so (thanks bradh!): &lt;code&gt;/home/t_mattjo/src/gcc-dehydra/installed/bin/../libexec/gcc/i686-pc-linux-gnu/4.3.4/cc1plus:&lt;br /&gt;
      symbol lookup error: ./gcc_dehydra.so: undefined symbol: _Znwj&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;So after all that, &lt;code&gt;make check&lt;/code&gt; almost passes everything.  I’m running into the same six errors that &lt;a href=&quot;http://enderstruth.wordpress.com/2009/11/16/classapi-with-a-little-treehydra-on-the-side/&quot;&gt;Roger Dicke&lt;/a&gt; got a few days ago, so I might try digging into that.  However!  I can hopefully start playing with static analysis soon, and that’s a very exciting prospect.&lt;/p&gt;
&lt;p&gt;Update: the treehydra problem is a &lt;a href=&quot;http://www.bugzil.la/526299&quot;&gt;known regression&lt;/a&gt; in Spidermonkey trunk.&lt;/p&gt;</description>
	<pubDate>Wed, 27 Jan 2010 10:32:20 +0000</pubDate>
	<dc:creator>Josh Matthews</dc:creator>
</item>
<item>
	<title>Adrian Kalla: Please don't kill the existing extension eco-system</title>
	<guid isPermaLink="true">http://adrianer.jogger.pl/2010/01/10/please-don-t-kill-the-existing-extension-eco-system/</guid>
	<link>http://adrianer.jogger.pl/2010/01/10/please-don-t-kill-the-existing-extension-eco-system/</link>
	<description>&lt;p&gt;After reading &lt;a href=&quot;http://steelgryphon.com/blog/2010/01/09/on-personas-and-themes/&quot;&gt;Mike Connor's blog post&lt;/a&gt; about in fact forcing extension authors to use JetPack and theme authors Personas, I'm horrified: That's killing of what have made Mozilla and Firefox so successful - extending the application in *ANY* possible way. That includes extensions implementing features *no one was thinking of before*.&lt;/p&gt;
&lt;p&gt;I have learned the downsides of writing XUL and JS based extensions. JetPack may help authors of smaller extensions, but bigger ones require, and will always require, more. &lt;b&gt;So please: let every extension author decide if he wants to use JetPack or the current way of writing extensions. Don't replace the &quot;old way&quot; entirely by JetPack!&lt;/b&gt;&lt;/p&gt;</description>
	<pubDate>Sun, 10 Jan 2010 17:18:54 +0000</pubDate>
</item>
<item>
	<title>Brandon Pung: Bpung.com redesign launched!</title>
	<guid isPermaLink="false">tag:,2009-12-30:/blog/view/1</guid>
	<link>http://www.bpung.com/blog/view/1</link>
	<description>&lt;p&gt;Today marks the launch of the redesigned bpung.com. The site contains information about myself and the projects that I’ve contributed to, along with this blog. I’d like to thank Matt Huang for advising me on which tools to use in the construction of the site, as well as helping me tweak the desig...&lt;/p&gt;</description>
	<pubDate>Wed, 30 Dec 2009 06:26:56 +0000</pubDate>
	<dc:creator>Brandon Pung</dc:creator>
</item>
<item>
	<title>Aaron Train: HTML5 Canvas/getImageData and the nefarious</title>
	<guid isPermaLink="true">http://aaronmt.com/?p=673</guid>
	<link>http://aaronmt.com/?p=673</link>
	<description>&lt;p&gt;This afternoon, I indulged myself by returning to my HTML5 experimentation and tinkering, toying with the canvas element by testing the waters of different functions under the HTML5 specification API.&lt;/p&gt;
&lt;p&gt;All was good until I got to getImageData(), where I encountered an exception in console. The crux is this: I’m getting an NS_ERROR_DOM_SECURITY_ERR error when trying to run context.getImageData()&lt;/p&gt;
&lt;p&gt;A bit about getImageData():&lt;/p&gt;
&lt;p&gt;To obtain an ImageData object containing a copy of the pixel data for a context, you can use the getImageData() method:&lt;/p&gt;
&lt;pre&gt;var myImageData = context.getImageData(left, top, width, height);&lt;/pre&gt;
&lt;p&gt;Ultimately, I wanted to use this function to place a image on canvas and perform some direct pixel manipulation; perhaps inverse an image by first getting the image data from a context.&lt;/p&gt;
&lt;pre&gt;window.addEventListener('load', function () {
  var canvas = document.getElementById(&quot;canvas&quot;);
  var ctx = canvas.getContext(&quot;2d&quot;);
  var img = new Image();

  img.addEventListener('load', function () {
    var x = 0,
      y = 0;

    ctx.drawImage(this, x, y);

    var imgd = ctx.getImageData(x, y, this.width, this.height);
    var imxpxl = imgd.data;

    for (var i = 0, n = imxpxl.length; i &amp;lt; n; i += 4) {
      imxpxl[i] = 255 - imxpxl[i]; // red
      imxpxl[i + 1] = 255 - imxpxl[i + 1] // green;
      imxpxl[i + 2] = 255 - imxpxl[i + 2] // blue;
      // i+3 is alpha
    }
    ctx.putImageData(imgd, x, y);
  },
  false);
  img.src = &quot;http://www.google.ca/intl/en_ca/images/logo.gif&quot;;
},
false);
&lt;/pre&gt;
&lt;p&gt;Running this code, I didn't get the results I expected. In fact, I did not think out of the ordinary was incorrect, until I checked the error console and found:&lt;/p&gt;
&lt;pre&gt;Error: uncaught exception: [Exception... &quot;Security error&quot;  code: &quot;1000&quot; nsresult: &quot;0x805303e8 (NS_ERROR_DOM_SECURITY_ERR)&quot;  location: &quot;file:///pixeldata.html Line: 16&quot;]
&lt;/pre&gt;
&lt;p&gt;Interesting - why the need to raise privileges? Am I forgetting something here? If I toss a,
&lt;/p&gt;&lt;pre&gt;netscape.security.PrivilegeManager.enablePrivilege(&quot;UniversalBrowserRead&quot;);&lt;/pre&gt;
&lt;p&gt;I end up with something yucky like this
&lt;/p&gt;&lt;pre&gt;try {
  try {
    imgd = ctx.getImageData(x, y, this.width, this.height);
  } catch(e) {
    netscape.security.PrivilegeManager.enablePrivilege(&quot;UniversalBrowserRead&quot;);
    imgd = ctx.getImageData(x, y, this.width, this.height);
  }
} catch(e) {
  throw new Error(&quot;unable to access image data: &quot; + e);
}&lt;/pre&gt;
&lt;p&gt;but, running the code will yield: &lt;/p&gt;
&lt;pre&gt;A script from &quot;file://&quot; is requesting enhanced abilities that are UNSAFE and could be used to compromise your machine or data:&lt;/pre&gt;
&lt;p&gt;In this case, the code will run - but it will leave you with an impression that what you're doing is wrong. &lt;/p&gt;
&lt;p&gt;I'm not nefarious, I swear! No intent to do harm here. I am trying to understand the reasoning and or need for raised privileges just to extract data from a context. With a write to canvas, a nefarious user could write something nasty to context, but why with getImageData?&lt;/p&gt;
&lt;p&gt;- Aaron&lt;/p&gt;</description>
	<pubDate>Fri, 18 Dec 2009 22:15:38 +0000</pubDate>
	<dc:creator>Aaron</dc:creator>
</item>
<item>
	<title>Anant Narayanan: Figuring out the Goo.gl API</title>
	<guid isPermaLink="false">http://www.kix.in/blog/?p=575</guid>
	<link>http://www.kix.in/blog/2009/12/goo-gl/</link>
	<description>&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;: ‘Fatalis’ has pointed out in the comments that the POST should be made to http://goo.gl/api/url with User-agent set to ‘toolbar’. The code now works, Yay!&lt;/p&gt;
&lt;p&gt;Google just &lt;a href=&quot;http://googleblog.blogspot.com/2009/12/making-urls-shorter-for-google-toolbar.html&quot;&gt;announced&lt;/a&gt; their own URL shortening service. Their service can only be used from the toolbar or FeedBurner, and I don’t particularly like adding extra toolbars to my browser. Maybe I can figure out a way to use their service from the command line?&lt;/p&gt;
&lt;p&gt;I downloaded the toolbar XPI, unzipped it and peeked inside. Horribly indented JS awaited me. Nothing &lt;a href=&quot;http://jsbeautifier.org/&quot;&gt;jsbeautifier&lt;/a&gt; couldn’t fix though. Few minutes later, I arrived at this readable JS function:&lt;/p&gt;
&lt;pre&gt;var getUrlShorteningRequestParams = function (b) {
    function c() {
        for (var l = 0, m = 0; m &amp;lt; arguments.length; m++)
          l = l + arguments[m] &amp;amp; 4294967295;
        return l
    }
    function d(l) {
        var m = String(l &amp;gt; 0 ? l : l + 4294967296);
        for (var o = 0, n = false, p = m.length - 1; p &amp;gt;= 0; --p) {
            var q = Number(m.charAt(p));
            if (n) {
                q *= 2;
                o += Math.floor(q / 10) + q % 10
            } else o += q;
            n = !n
        }
        m = m = o % 10;
        o = 0;
        if (m != 0) {
            o = 10 - m;
            if (l.length % 2 == 1) {
                if (o % 2 == 1) o += 9;
                o /= 2
            }
        }
        m = String(o);
        m += l;
        return l = m
    }
    function e(l) {
        for (var m = 5381, o = 0; o &amp;lt; l.length; o++) m = c(m &amp;lt;&amp;lt; 5, m, l.charCodeAt(o));
        return m
    }
    function f(l) {
        for (var m = 0, o = 0; o &amp;lt; l.length; o++) m = c(l.charCodeAt(o), m &amp;lt;&amp;lt; 6, m &amp;lt;&amp;lt; 16, -m);
        return m
    }

    var i = e(b);
    i = i &amp;gt;&amp;gt; 2 &amp;amp; 1073741823;
    i = i &amp;gt;&amp;gt; 4 &amp;amp; 67108800 | i &amp;amp; 63;
    i = i &amp;gt;&amp;gt; 4 &amp;amp; 4193280 | i &amp;amp; 1023;
    i = i &amp;gt;&amp;gt; 4 &amp;amp; 245760 | i &amp;amp; 16383;

    var h = f(b);
    var k = (i &amp;gt;&amp;gt; 2 &amp;amp; 15) &amp;lt;&amp;lt; 4 | h &amp;amp; 15;
    k |= (i &amp;gt;&amp;gt; 6 &amp;amp; 15) &amp;lt;&amp;lt; 12 | (h &amp;gt;&amp;gt; 8 &amp;amp; 15) &amp;lt;&amp;lt; 8;
    k |= (i &amp;gt;&amp;gt; 10 &amp;amp; 15) &amp;lt;&amp;lt; 20 | (h &amp;gt;&amp;gt; 16 &amp;amp; 15) &amp;lt;&amp;lt; 16;
    k |= (i &amp;gt;&amp;gt; 14 &amp;amp; 15) &amp;lt;&amp;lt; 28 | (h &amp;gt;&amp;gt; 24 &amp;amp; 15) &amp;lt;&amp;lt; 24;
    j = &quot;7&quot; + d(k);

    i = &quot;user=toolbar@google.com&amp;amp;url=&quot;;
    i += encodeURIComponent(b);
    i += &quot;&amp;amp;auth_token=&quot;;
    i += j;
    return i
};&lt;/pre&gt;
&lt;p&gt;So, I call &lt;code&gt;getUrlShorteningRequestParams(&quot;http://www.kix.in/&quot;);&lt;/code&gt; to get &lt;code&gt;&quot;user=toolbar@google.com&amp;amp;url=http%3A%2F%2Fwww.kix.in%2F&amp;amp;auth_token=78925814685&quot;&lt;/code&gt;. I see in their code that they do a POST request to the service to obtain a JSON return value that would contain the short URL. I punch it in using cURL:&lt;/p&gt;
&lt;pre&gt;$ curl -v -d &quot;user=toolbar@google.com&amp;amp;url=http%3A%2F%2Fwww.kix.in%2F&amp;amp;auth_token=78925814685&quot; http://goo.gl/
* About to connect() to goo.gl port 80 (#0)
*   Trying 74.125.19.102... connected
* Connected to goo.gl (74.125.19.102) port 80 (#0)
&amp;gt; POST / HTTP/1.1
&amp;gt; User-Agent: curl/7.19.7 (i386-apple-darwin10.2.0) libcurl/7.19.7 OpenSSL/0.9.8l zlib/1.2.3
&amp;gt; Host: goo.gl
&amp;gt; Accept: */*
&amp;gt; Content-Length: 77
&amp;gt; Content-Type: application/x-www-form-urlencoded
&amp;gt;
&amp;lt; HTTP/1.1 405 HTTP method POST is not supported by this URL&lt;/pre&gt;
&lt;p&gt;Oops! Well, not really, the URL shortener from the toolbar doesn’t work either, I just get the full URL whenever I try to “share” something. Has anybody actually generated a real goo.gl short URL yet?&lt;/p&gt;
&lt;p&gt;Their &lt;code&gt;auth_token&lt;/code&gt; parameter seems completely superfluous to me as it is generated from the URL itself. Don’t we all know security by obscurity doesn’t work &lt;img src=&quot;http://www.kix.in/blog/wp-content/plugins/smilies-themer/Silk/emoticon_smile.png&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;</description>
	<pubDate>Mon, 14 Dec 2009 23:11:52 +0000</pubDate>
	<dc:creator>Anant</dc:creator>
</item>
<item>
	<title>Wei Zhou: From dating experience to real identity crisis of the web</title>
	<guid isPermaLink="false">http://weizhou.wordpress.com/?p=350</guid>
	<link>http://weizhou.wordpress.com/2009/12/11/from-dating-experience-to-real-identity-crisis-of-the-web/</link>
	<description>&lt;p&gt;If anybody cares, I haven’t access my blog, facebook, twitter, IM and any other social media for exactly one month. During this period I asked myself one single question: what does humanity really mean today on the web? What is the biggest challenge here for the next generation’s user experience design?…&lt;/p&gt;
&lt;p&gt;One month ago my best friend’s fiancee broke up with her because an article on the 10th page on Google’s search engine under her name: A highly manipulated article accusing her irresponsible behavior in terms of relationships with her ex. And it turned into a deal breaker. My friend’s dream of marrying in a rich family is officially over. Now look at what fashionable girls do for dating : You meet someone in the bar, you Google his name, you ask your personal lawyer to count how much money he make..and then you choose if you go out a date with him. Google becomes our biggest obstacle of finding true love.&lt;/p&gt;
&lt;p&gt;Yeah we don’t do this 5 years ago. Now we blame the internet gets to transparent to ban us making any mistakes. Today we are not who we really are, we are what google says who we are. Everything is openly connected and we’ve been trying so hard to make things open: making browsers more open, more social and more you, making everything connected, making open IDs. Suddenly we found out: The more we try to design for “you”, the less “you” can express yourself freely. Maybe it is time for the UX designers to make the user experience less open, more humane. And you know what’s ironic: it costs three years to make everything, but it might cost more than three decades to make the openness disappear.&lt;/p&gt;
&lt;p&gt;When we talk about user experience, we always say we are engaging in making people’s life better. Nowadays we’re even trying to embed the most intricate and sophisticated human emotions into the consideration of design: like religious needs and sexual needs. However we designed a huge system that ignore the most basic one: The need to lie. Or they need the freedom to lie. If we are really aiming to design a YOU centric web, this question becomes unavoidable and probably be the hottest one in the next 10 years: How do we design a web that people can have real freedom within?&lt;/p&gt;
&lt;p&gt;The web has changed, thus you have changed. But I know I love the world better before Columbia found the new land – when things were harder but full of unknown hope and inspiration.&lt;/p&gt;
&lt;p&gt;Wei Zhou&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/weizhou.wordpress.com/350/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/weizhou.wordpress.com/350/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/weizhou.wordpress.com/350/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/delicious/weizhou.wordpress.com/350/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/weizhou.wordpress.com/350/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/stumble/weizhou.wordpress.com/350/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/weizhou.wordpress.com/350/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/digg/weizhou.wordpress.com/350/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/weizhou.wordpress.com/350/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/reddit/weizhou.wordpress.com/350/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;http://stats.wordpress.com/b.gif?host=weizhou.wordpress.com&amp;amp;blog=2603969&amp;amp;post=350&amp;amp;subd=weizhou&amp;amp;ref=&amp;amp;feed=1&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;</description>
	<pubDate>Fri, 11 Dec 2009 23:07:48 +0000</pubDate>
	<dc:creator>weizhou</dc:creator>
</item>
<item>
	<title>Pejman Pour-Moezzi: Hello world!</title>
	<guid isPermaLink="false">http://www.pourmoezzi.com/?p=1</guid>
	<link>http://feedproxy.google.com/~r/pejmanjohn/~3/o0LGe5wlBLI/</link>
	<description>&lt;p&gt;Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/pejmanjohn/~4/o0LGe5wlBLI&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Mon, 23 Nov 2009 07:56:45 +0000</pubDate>
	<dc:creator>admin</dc:creator>
</item>
<item>
	<title>Anant Narayanan: Go: Why I ♥ Google</title>
	<guid isPermaLink="false">http://www.kix.in/blog/?p=561</guid>
	<link>http://www.kix.in/blog/2009/11/go-why-i-%e2%9d%a4-google/</link>
	<description>&lt;p&gt;Christmas came early this year.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.kix.in/blog/wp-content/uploads/2009/11/glenda2go.png&quot; title=&quot;Glenda2Go&quot; height=&quot;75&quot; width=&quot;182&quot; alt=&quot;Glenda2Go&quot; class=&quot;size-full wp-image-562&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Today, Google announced their new open source systems programming language: &lt;a href=&quot;http://golang.org/&quot;&gt;Go&lt;/a&gt;. I’m super excited about this, we all have been wondering what Rob Pike has been upto since he joined the big G, and now we know. Not just that, but Ken Thomson, Robert Griesemer, Ian Taylor and Russ Cox were all involved in the project, with Ken doing what he does best, writing compilers in lightning speed &lt;img src=&quot;http://www.kix.in/blog/wp-content/plugins/smilies-themer/Silk/emoticon_wink.png&quot; alt=&quot;;)&quot; class=&quot;wp-smiley&quot; /&gt; If that isn’t a list of heavyweight respectable computer scientists, I don’t know what is!&lt;/p&gt;
&lt;p&gt;I think Go is poised to be the dominant systems programming language of the future. Go has nailed almost every aspect of a systems language, though some would say I’m biased. Go has been strongly influenced by &lt;a href=&quot;http://en.wikipedia.org/wiki/Oberon_%28programming_language%29&quot;&gt;Oberon&lt;/a&gt;, CSP languages like &lt;a href=&quot;http://en.wikipedia.org/wiki/Limbo_%28programming_language%29&quot;&gt;Limbo&lt;/a&gt;, and the standard libraries have tantalizing similarities to &lt;a href=&quot;http://www.kix.in/plan9/&quot;&gt;Plan 9&lt;/a&gt;. We’ve had Limbo and Plan 9 for a while now (more than a decade), but this is where my real love for Google begins to bubble, they took something awesome but unpopular and gave it a push to the masses. There are very few companies in the world who would attract the talent to do this, and even fewer who would open source the results. The attention Go has been getting is just mind blowing. Pike had been doing amazing work at Bell-Labs for quite a while, but none of it even got an inkling of the publicity Go is currently getting.&lt;/p&gt;
&lt;p&gt;Google was what Pike needed to prove &lt;a href=&quot;http://herpolhode.com/rob/utah2000.pdf&quot;&gt;Utah2000&lt;/a&gt; wrong.&lt;/p&gt;
&lt;p&gt;I know one thing for sure, I’ll definitely be using my Plan 9 virtual machine a lot less; now that I can write clean concurrent programs that don’t make my head hurt, both in Linux and OS X. And &lt;a href=&quot;http://gcc.gnu.org/&quot;&gt;GCC&lt;/a&gt;, I’m not shedding any tears while I bid you goodbye.&lt;/p&gt;
&lt;p&gt;On another note, Google also announced today that they’ll be sponsoring &lt;a href=&quot;http://www.google.com/intl/en/press/pressrel/20091110_free_airport_wifi_holiday.html&quot;&gt;free WiFi&lt;/a&gt; at a whole bunch of US airports this holiday season. For all its faults, Google definitely seems to be doing the right thing. For how long, it remains to be seen, but so far I’d say their track record has been better than excellent.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;: John Gruber &lt;a href=&quot;http://daringfireball.net/linked/2009/11/10/go&quot;&gt;points out&lt;/a&gt; that “judging from the copyright statements, [Go is] not an official Google project”. Could this be a result of the famous 20% time scheme?&lt;/p&gt;</description>
	<pubDate>Wed, 11 Nov 2009 03:23:56 +0000</pubDate>
	<dc:creator>Anant</dc:creator>
</item>
<item>
	<title>Aaron Train: ‘Stymied From Experimentation’ – Firefox ‘View Page Source’</title>
	<guid isPermaLink="true">http://aaronmt.com/?p=601</guid>
	<link>http://aaronmt.com/?p=601</link>
	<description>&lt;p&gt;Firefox’s – ‘View Source’ component sucks. It &lt;strong&gt;must&lt;/strong&gt; improve.&lt;/p&gt;
&lt;p&gt;Upon reading the &lt;a href=&quot;http://www.webmonkey.com&quot;&gt;WebMonkey&lt;/a&gt; article, “&lt;em&gt;&lt;a href=&quot;http://www.webmonkey.com/blog/After_Five_Years_on_the_Web__Firefox_Preps_for_the_Next_Round&quot;&gt;After Five Years on the Web Firefox Preps for the Next Round&lt;/a&gt;&lt;/em&gt;“, I was reminded of a suppressed annoyance, or ‘beef’ I have with Firefox through reading Jonathan Nightengale’s statement.&lt;/p&gt;
&lt;p&gt;“&lt;em&gt;When a developer loses the ability to view a web page’s source code (something you can’t easily do in Flash) they can’t see how web applications and complex interactions function. And, he says, that stymies further experimentation”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;Jonathan is absolutely correct. Developers need the ability to learn from each other and the &lt;span style=&quot;text-decoration: line-through;&quot;&gt;only&lt;/span&gt; &lt;/span&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;best&lt;/span&gt;&lt;span style=&quot;font-style: normal;&quot;&gt; way to do this is through viewing a web page’s source code. View Page Source is a door to undiscovered knowledge on the web.&lt;br /&gt;
&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;Ah yes, ‘View Page Source’. &lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;span style=&quot;font-style: normal;&quot;&gt;See, in order to boast and fully support this idea, I believe that developers need to have access to the best tools available. Developers need to harness these tools and utilize them to their fullest potential. These tools should exhibit engaging yet intuitive functionality and rewarding characteristics.&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;See, my ‘beef’ is with Firefox’s ‘View Page Source’. It sucks. It’s really bad. It’s archaic. In-fact, here are &lt;a href=&quot;https://bugzilla.mozilla.org/buglist.cgi?query_format=specific&amp;amp;order=relevance+desc&amp;amp;bug_status=__open__&amp;amp;content=view+source&quot;&gt;200 bugs spanning multiple years&lt;/a&gt; pertaining to the simple view-source component in Firefox.&lt;/p&gt;
&lt;p&gt;Here’s my personal listing of ideas to improve View Source with 5 improvements:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Introduce proper syntax highlighting (crucially needed with the new HTML5 parser)&lt;/li&gt;
&lt;li&gt;Links should have copy link location in the context menu&lt;/li&gt;
&lt;li&gt;Line numbers should appear in a side column&lt;/li&gt;
&lt;li&gt;Add view-selection-source ability&lt;/li&gt;
&lt;li&gt;Interface should be tabbed!&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;With many of those 200 (simple query search of ‘View Source’) filed as enhancements, it’s clear that the view-source component needs a complete overhaul.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://aaronmt.com/wp-content/uploads/2009/11/ucGdf-300x227.jpg&quot; title=&quot;View Source&quot; height=&quot;227&quot; width=&quot;300&quot; alt=&quot;ucGdf&quot; class=&quot;alignnone size-medium wp-image-618&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I believe that Firefox needs to revamp it’s view-source component in order to supply developers with the best tools necessary to prevent a case of being stymied from experimentation and any other further barriers of innovation on the web.&lt;/p&gt;
&lt;p&gt;Developers need the best tools out there, and I feel that they are left out of what could be an awesomely improved component and uniquely defined characteristic of the entire Firefox &lt;em&gt;experience&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Currently, I dont think there is a significant drive towards prioritizing this component in the browser. In fact, I dont think it has been touched in many years. It certainly feels archaic, sluggish and lacking. Has the code been touched in years?&lt;/p&gt;
&lt;p&gt;So I ask the community, you reading this, do you wish to collaborate to revitalize this &lt;span style=&quot;text-decoration: line-through;&quot;&gt;dying&lt;/span&gt; &lt;em&gt;dead&lt;/em&gt; horse?&lt;/p&gt;
&lt;p&gt;What do you think?&lt;/p&gt;</description>
	<pubDate>Sat, 07 Nov 2009 17:15:38 +0000</pubDate>
	<dc:creator>Aaron</dc:creator>
</item>
<item>
	<title>Anant Narayanan: Identity on the web is broken</title>
	<guid isPermaLink="false">http://www.kix.in/blog/?p=554</guid>
	<link>http://www.kix.in/blog/2009/11/identity-on-the-web-is-broken/</link>
	<description>&lt;p&gt;The mere presence of systems like &lt;a href=&quot;http://openid.net/&quot;&gt;OpenID&lt;/a&gt;, &lt;a href=&quot;http://developers.facebook.com/connect.php&quot;&gt;Facebook Connect&lt;/a&gt; and a host of other identity services on the web today is attestation to the fact.&lt;/p&gt;
&lt;p&gt;Authentication should be a feature of the protocol, not something that relies on hacks like &lt;a href=&quot;http://en.wikipedia.org/wiki/HTTP_cookie&quot;&gt;cookies&lt;/a&gt;. 99% of websites today rely on cookies for authentication for their websites, besides offering custom registration and login pages. This means the browser, as the user’s agent, has no clue of what is going on. A user is forced to manually track myriads of accounts, remember passwords for each of them, and remember what personal information each of them holds. Sure, part of the problem is solved by using password managers (like the one in-built into Firefox, or external programs like &lt;a href=&quot;http://agilewebsolutions.com/products/1Password&quot;&gt;1Password&lt;/a&gt;), but even these programs rely on heuristic algorithms to determine if something &lt;em&gt;looks&lt;/em&gt; like a login credential or not. There’s no explicit way for web pages to tell your browser: “This is a login form, please fill in details of the user’s identity here” or “These pages are privileged, please give me the user’s identity”. Why is that?&lt;/p&gt;
&lt;p&gt;Actually, there is such a mechanism: &lt;a href=&quot;http://en.wikipedia.org/wiki/Basic_access_authentication&quot;&gt;HTTP based Authentication&lt;/a&gt; has been a feature present since HTTP/1.0, but only 1% of sites actually use it. The reason for that is purely cosmetic, most browsers display a very bland modal dialog when it encounters a page that requires HTTP Auth, and sites are unable to customize that interaction. So, the technically right way to do things sucks from a user experience perspective, and websites started adopting alternate means. Someone discovered they could use cookies to store session information on the client, and the whole situation exploded ever since. As a programmer, I feel very sad when I think about the fact that instead of fixing the problem in HTTP/1.1, web-based authentication took the route it did and led to the mess we are in today.&lt;/p&gt;
&lt;p&gt;However, I must also state that HTTP authentication doesn’t solve the &lt;em&gt;entire&lt;/em&gt; problem – there is still the issue of users having to create an account for every site they want to be part of. This is because there existed no protocols to &lt;em&gt;federate&lt;/em&gt; and provide &lt;em&gt;decentralized&lt;/em&gt; authentication. That is, until OpenID and &lt;a href=&quot;http://oauth.net/&quot;&gt;OAuth&lt;/a&gt; came about. Now we’re at this exciting juncture, and the browser is in a unique position to use these tools together to provide the user with an experience that is secure and easy to use. Every architect will agree that it is indeed a fun challenge to use the state of identity on the web today and make it into something awesome.&lt;/p&gt;
&lt;p&gt;This is precisely what the Mozilla Labs team has been thinking about for a while now. Sometime ago, we &lt;a href=&quot;http://mozillalabs.com/blog/2009/05/identity-in-the-browser/&quot;&gt;added support&lt;/a&gt; for automagic one-click OpenID logins to Weave. We plan to spin that “feature” out into it’s own extension and build on it, something we call “&lt;a href=&quot;http://hg.mozilla.org/labs/weave-identity/&quot;&gt;Weave Identity&lt;/a&gt;“, part of the broader “Open Identity” initiative by the Labs. “&lt;a href=&quot;http://hg.mozilla.org/labs/weave/&quot;&gt;Weave Sync&lt;/a&gt;“, the original extension, will just focus on the synchronization parts so we can tackle these two different problems separately.&lt;/p&gt;
&lt;p&gt;So, how exactly are we planning on doing this? Take a look at an initial version of a document describing an in-browser “&lt;a href=&quot;https://wiki.mozilla.org/Labs/Weave/Identity/Account_Manager&quot;&gt;Account Manager&lt;/a&gt;“. We’ve also put up a WEP (which expands to Weave Enhancement Proposal, by the way) describing the raw form of a specification for &lt;a href=&quot;https://wiki.mozilla.org/Labs/Weave/WEP/110&quot;&gt;automatic actions&lt;/a&gt; on websites, such as user registration or password changes.&lt;/p&gt;
&lt;p&gt;Keep in mind that all of this is in its very early stages (pre-alpha); but that also means it’s a great opportunity for the community to get involved! What are your thoughts on Open Identity? Use the discussion tab on any of those Wiki pages, start a thread on the Mozilla Labs &lt;a href=&quot;http://groups.google.com/group/mozilla-labs&quot;&gt;group&lt;/a&gt;, or simply leave a comment on this blog entry, and chip in – we’d love to hear from you!&lt;/p&gt;</description>
	<pubDate>Tue, 03 Nov 2009 03:08:27 +0000</pubDate>
	<dc:creator>Anant</dc:creator>
</item>
<item>
	<title>Anant Narayanan: GSoC Mentor Summit ‘09 Roundup</title>
	<guid isPermaLink="false">http://www.kix.in/blog/?p=555</guid>
	<link>http://www.kix.in/blog/2009/11/gsoc-mentor-summit-09-roundup/</link>
	<description>&lt;p&gt;The grand Summer of Code &lt;a href=&quot;http://gsoc-wiki.osuosl.org/index.php/2009&quot;&gt;Mentor Summit of 2009&lt;/a&gt; concluded last week and I had the fantastic opportunity of being able to attend on behalf of &lt;a href=&quot;http://socghop.appspot.com/org/home/google/gsoc2009/gentoo&quot;&gt;Gentoo&lt;/a&gt;, &lt;a href=&quot;http://socghop.appspot.com/org/home/google/gsoc2009/plan9&quot;&gt;Plan 9 &lt;/a&gt;and &lt;a href=&quot;http://socghop.appspot.com/org/home/google/gsoc2009/mozilla&quot;&gt;Mozilla&lt;/a&gt;. What follows is some indication of how awesome the summit was:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/warthog9/4045565440/in/set-72157622539485821/&quot;&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3526/4045565440_5def697f21_o.jpg&quot; title=&quot;GSoC Mentors Group Photo&quot; height=&quot;416&quot; width=&quot;622&quot; alt=&quot;&quot; class=&quot;alignnone&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;(Photo courtesy of &lt;a href=&quot;http://www.etherboot.org/wiki/soc/2009/start#john_warthog9_hawleylinux_foundation_chief_systems_administrator_kernel.org&quot;&gt;warthog&lt;/a&gt; from Etherboot)&lt;/p&gt;
&lt;p&gt;I met so many folks I’d only interacted with online so far (the classic nickname-to-face matching), but even better was the opportunity to meet folks powering open source projects from so many diverse backgrounds. I met many of my personal rockstars, and learned about a bunch of open source projects I’d never heard of &lt;img src=&quot;http://www.kix.in/blog/wp-content/plugins/smilies-themer/Silk/emoticon_smile.png&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;p&gt;Also, one of the things that is only possible at an event like the summit was the ability to get a whole bunch of non-linux operating system groups &lt;a href=&quot;http://twitter.com/anantn/status/5151400159&quot;&gt;in one room&lt;/a&gt;. We had a great &lt;a href=&quot;http://gsoc-wiki.osuosl.org/index.php/Non-Linux_OS_Meetup&quot;&gt;discussion&lt;/a&gt;, and it resulted in the creation of the “&lt;a href=&quot;http://groups.google.com/group/rosetta-os&quot;&gt;rosetta-os&lt;/a&gt;” special interest group. Look for more activity on the common device drivers for non-linux operating systems front soon!&lt;/p&gt;
&lt;p&gt;Other sessions worthy of special mention were &lt;a href=&quot;http://gsoc-wiki.osuosl.org/index.php/Open_Source_Security&quot;&gt;Open Source Security&lt;/a&gt;, &lt;a href=&quot;http://gsoc-wiki.osuosl.org/index.php/Saturday_Sessions_2009/Recruiting_Awesome&quot;&gt;Recruiting and Retaining Awesome People&lt;/a&gt;, Advanced Trolling (yes, you read that right), and of course the always welcoming &lt;a href=&quot;http://gsoc-wiki.osuosl.org/index.php/CasablancaNotes&quot;&gt;Casablanca&lt;/a&gt; where I spent most of my time. We discussed everything from our SoC experiences to the Afro Celt Sound System in that room, always full of creative energy and warmth.&lt;/p&gt;
&lt;p&gt;After &lt;a href=&quot;http://www.kix.in/soc/&quot;&gt;4 years&lt;/a&gt; of participating in the Summer of Code, I am super happy to have finally met the faces behind the program. Every single person I met over the course of last weekend was friendly, intelligent and just generally awesome; that sort of thing doesn’t happen by chance. I feel warm and fuzzy inside to think that I’m actually a part of the revolution that is free and open source software, three cheers to everyone that made it possible!&lt;/p&gt;</description>
	<pubDate>Sun, 01 Nov 2009 18:17:18 +0000</pubDate>
	<dc:creator>Anant</dc:creator>
</item>
<item>
	<title>Aaron Train: FSOSS 2009 – So many choices</title>
	<guid isPermaLink="true">http://aaronmt.com/?p=579</guid>
	<link>http://aaronmt.com/?p=579</link>
	<description>&lt;p&gt;&lt;img alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://opensourceweek.ca/image/tosw2_small_blue-transparent.png&quot; alt=&quot;Toronto Open Source Week&quot; height=&quot;273&quot; class=&quot; alignnone&quot; width=&quot;400&quot; /&gt;&lt;/p&gt;
&lt;p&gt;As part of Toronto Open Source Week, tomorrow marks the start of the 8th annual &lt;a href=&quot;http://fsoss.senecac.on.ca/2009/&quot;&gt;Free Software and Open Source Symposium&lt;/a&gt; at &lt;a href=&quot;http://www.senecacollege.ca&quot;&gt;Seneca College&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://fsoss.senecac.on.ca/2009/sites/default/files/logo.png&quot; alt=&quot;FSOSS 2009&quot; height=&quot;65&quot; class=&quot; alignnone&quot; width=&quot;229&quot; /&gt;&lt;/p&gt;
&lt;p&gt;With a vast range of academically intriguing presentations and focused based hands-on workshops to choose from, I have narrowed down a listing of presentations that I will attend to.&lt;/p&gt;
&lt;div&gt;
&lt;table border=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;&lt;strong&gt;Thursday&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;09:00 AM&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://fsoss.senecac.on.ca/2009/node/147&quot;&gt;Automating UI Testing with Mozmill&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;&lt;strong&gt;Friday&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10:00 AM&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://fsoss.senecac.on.ca/2009/node/115&quot;&gt;Ranking the Bugs: Predicting Which Bugs Will Get Fixed&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11:00 AM&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://fsoss.senecac.on.ca/2009/node/133&quot;&gt;Open Source Licensing Demystified&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1:00 PM&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://fsoss.senecac.on.ca/2009/node/157&quot;&gt;Coping at the Scale of Mozilla: How Mozilla uses Open Tools to Manage Complexity&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2:00 PM&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://fsoss.senecac.on.ca/2009/node/126&quot;&gt;Open Source for fun and profit: making a career out of FOSS&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3:00 PM&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://fsoss.senecac.on.ca/2009/node/158&quot;&gt;3D in the browser… more than just Doom&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;Bring on tomorrow – I hope to see you all there :)&amp;lt;/pr&amp;gt;&lt;/p&gt;</description>
	<pubDate>Thu, 29 Oct 2009 01:56:15 +0000</pubDate>
	<dc:creator>Aaron</dc:creator>
</item>
<item>
	<title>Anant Narayanan: How does Weave use Cryptography?</title>
	<guid isPermaLink="false">http://www.kix.in/blog/?p=530</guid>
	<link>http://www.kix.in/blog/2009/10/how-does-weave-use-cryptography/</link>
	<description>&lt;p&gt;I’m back from the EU MozCamp in Prague and we all had a great time! Check out the slides from my talks: &lt;a href=&quot;http://www.kix.in/talks/mozcamp09-labs.pdf&quot;&gt;Labs Overview&lt;/a&gt; and &lt;a href=&quot;http://www.kix.in/talks/mozcamp09-weave.pdf&quot;&gt;Weave in Depth&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A few people at the MozCamp were interested in Weave’s use of cryptography to protect the user’s data and privacy. Although the specs for the Weave server are &lt;a href=&quot;https://wiki.mozilla.org/Labs/Weave/0.5/API&quot;&gt;available&lt;/a&gt;, it may take someone new a while to wrap their head around the whole scheme. I’m going to attempt explaining what crypto operations we do and why we do it in this blog post.&lt;/p&gt;
&lt;p&gt;First, let’s get some basic  definitions out of the way. Symmetric cryptography means you have one key that can perform both encryption and decryption, and they are complementary operations. For Weave, we use &lt;a href=&quot;http://en.wikipedia.org/wiki/Advanced_Encryption_Standard&quot;&gt;AES&lt;/a&gt; with a 256 bit key, and we use it in a mode that requires an ‘initialization vector’ for every decryption. Asymmetric cryptography means there’s a pair of keys (usually called ‘public’ and ‘private’ keys). A piece of text “encrypted” by one key can only be “decrypted” by the other key. Here, we use &lt;a href=&quot;http://en.wikipedia.org/wiki/RSA&quot;&gt;RSA&lt;/a&gt; with a 2048 bit private key.&lt;/p&gt;
&lt;p&gt;So, when a user first signs up for Weave using the wizard on their computer, we generate a (random) pair of public and private keys. Next, we use the user’s passphrase to create a symmetric key. This is done using a pretty standard algorithm known as &lt;a href=&quot;http://en.wikipedia.org/wiki/PBKDF2&quot;&gt;PBKDF2&lt;/a&gt; (short for “Password Key Derivation Function”). The PBKDF2 algorithm requires a ’salt’ value which is also stored on the server. Now that we have a symmetric key, we use it to encrypt the user’s private key and upload it along with the public key to the server. Note that the passphrase is never sent to the server, so if the user’s password ever gets compromised all the attacker can get is their encrypted private key, which really isn’t of much use (especially given that the key is 2048 bits long).&lt;/p&gt;
&lt;p&gt;Whenever a particular “engine” is to be synchronized (an engine could be Tabs, Bookmarks, History etc.) we generate a random symmetric key for that engine. This key is then encrypted using the user’s public key (now, one can only retrieve the original symmetric key with the corresponding private key) and uploaded as being associated with a particular engine. All entries (the ‘ciphertext’ property in a “Weave Basic Object”) in that engine are encrypted with the symmetric key that was generated for it.&lt;/p&gt;
&lt;p&gt;To make things clear, let’s enumerate the steps we would take to decrypt a single tab object for user ‘foo’:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Find the user’s cluster by making a GET request to &lt;strong&gt;https://services.mozilla.com/user/1/foo/node/weave&lt;/strong&gt;. It returns &lt;strong&gt;https://sj-weave06.services.mozilla.com/&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Fetch the user’s encrypted private key and public key from &lt;strong&gt;https://sj-weave06.services.mozilla.com/0.5/foo/storage/keys/privkey&lt;/strong&gt; and &lt;strong&gt;https://sj-weave06.services.mozilla.com/0.5/foo/storage/keys/pubkey&lt;/strong&gt; respectively. The user’s password is required to access these JSON objects.&lt;/li&gt;
&lt;li&gt;Ask the user for their passphrase and generate a 256 bit symmetric key from it using PBKDF2 and the ’salt’ found in the privkey object.&lt;/li&gt;
&lt;li&gt;Use the generated symmetric key and the initialization vector found in the ‘iv’ property of the privkey object to decrypt the user’s private key.&lt;/li&gt;
&lt;li&gt;Fetch the user’s encrypted tab objects from &lt;strong&gt;https://sj-weave06.services.mozilla.com/0.5/foo/storage/tabs/?full=1&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Fetch the corresponding symmetric key (the URL is also listed in the “encryption” property of every WBO), in this case &lt;strong&gt;https://sj-weave06.services.mozilla.com/0.5/foo/storage/crypto/tabs&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Decrypt the symmetric key with the user’s private key.&lt;/li&gt;
&lt;li&gt;Use the decrypted symmetric key to decrypt any WBO from the tabs collection with the initialization vector found in the ‘bulkIV’ property of the tabs symmetric key WBO.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Profit&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;A word about the formats in which the keys are actually stored in. All values are Base64. For symmetric keys, the key is stored as-is. For asymmetric keys, I wish we used a standard format like PKCS#12, but we don’t. It’s still &lt;a href=&quot;http://en.wikipedia.org/wiki/ASN.1&quot;&gt;ASN.1&lt;/a&gt; though, in some format NSS exports private keys in. You need to do a bit of ASN.1 parsing to figure out the values you’re interested in.&lt;/p&gt;
&lt;p&gt;Fortunately, I’ve already figured out most of the details for you – check out my &lt;a href=&quot;http://hg.mozilla.org/labs/weaveweb/file/tip/weave.js#l163&quot;&gt;Javascript&lt;/a&gt; or &lt;a href=&quot;http://hg.mozilla.org/users/anarayanan_mozilla.com/weave-proxy/file/tip/crypto/&quot;&gt;PHP&lt;/a&gt; implementations of the crypto elements required to decrypt Weave Basic Objects.&lt;/p&gt;
&lt;p&gt;Finally, a quick note about why we do all this. Sharing is now reasonably easy, if you want to share your bookmarks with someone, you just need to encrypt the corresponding symmetric key with their public key and they’re good to go. Also, each WBO has it’s own ‘encryption’ property so this can be as granular as needed. Secondly, the passphrase is never stored anywhere (except possibly on the user’s computer) so the server never sees anything other than encrypted blobs of Base64′ed text. Along with making HTTPS mandatory, we think this is a pretty secure way of protecting the user’s data.&lt;/p&gt;
&lt;p&gt;If you have other encryption schemes that might fit into Weave’s use cases please let us know! (We’ve already been looking at interesting developments in this area such as &lt;a href=&quot;http://allmydata.org/~warner/pycon-tahoe.html&quot;&gt;Tahoe&lt;/a&gt;). I’d also love to hear from you if you have any questions on our current cryptography scheme. We’re constantly trying to improve the security and efficiency of our system so these details are only valid until we change our scheme &lt;img src=&quot;http://www.kix.in/blog/wp-content/plugins/smilies-themer/Silk/emoticon_smile.png&quot; alt=&quot;:-)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;p&gt;Now, go write that third-party Weave client, you have no excuse not to!&lt;/p&gt;</description>
	<pubDate>Sun, 11 Oct 2009 15:26:53 +0000</pubDate>
	<dc:creator>Anant</dc:creator>
</item>
<item>
	<title>Adrian Kalla: Koala at the MozCamp Europe in Prague this weekend!</title>
	<guid isPermaLink="true">http://adrianer.jogger.pl/2009/10/03/koala-at-the-mozcamp-europe-in-prague-this-weekend/</guid>
	<link>http://adrianer.jogger.pl/2009/10/03/koala-at-the-mozcamp-europe-in-prague-this-weekend/</link>
	<description>&lt;p&gt;Tomorrow at 10 am we will present the &lt;a href=&quot;http://koala.mozdev.org&quot;&gt;Koala - Komodo Advanced Localization Addon - project&lt;/a&gt;. If you are in Prague at the MozCamp, you'll will have a great opportunity to learn more about it.&lt;/p&gt;
&lt;p&gt;Florian S. and I are already there, so if you have some feedback or questions - don't hesitate to talk with us.&lt;/p&gt;</description>
	<pubDate>Sat, 03 Oct 2009 11:30:34 +0000</pubDate>
</item>
<item>
	<title>Aaron Train: Toronto Open Source Week 2009</title>
	<guid isPermaLink="true">http://aaronmt.com/?p=502</guid>
	<link>http://aaronmt.com/?p=502</link>
	<description>&lt;p&gt;&lt;img src=&quot;http://opensourceweek.ca/image/tosw2_small_blue.png&quot; alt=&quot;Toronto Open Source Week 2009&quot; border=&quot;0&quot; /&gt;&lt;/p&gt;
&lt;h1&gt;October 24-30, 2009&lt;/h1&gt;
&lt;p&gt;Toronto Open Source Week is a celebration of  Open Source technology and community throughout the Toronto area. The following events have been confirmed; additional events are being planned.&lt;/p&gt;
&lt;table cellpadding=&quot;5&quot; border=&quot;0&quot; cellspacing=&quot;5&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Saturday, October 24&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://onlinux.ca/&quot;&gt;Ontario Linux Fest&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Monday, October 26&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://ontariononprofitnetwork.ca/opensource-showcase&quot;&gt;Open Source Showcase for Non-Profits&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tuesday, October 27&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://www.fosslc.org/drupal/node/462&quot;&gt;FOSSLC – Web programming bootcamp&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Thursday, October 29&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://teachingopensource.org/index.php/TOSS09&quot;&gt;Free Software and Open Source Symposium –  Workshops&lt;br /&gt;
Teaching  	Open Source Summit&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Friday, October 30&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://fsoss.ca/&quot;&gt;Free Software and Open Source Symposium –  Presentations&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description>
	<pubDate>Thu, 01 Oct 2009 20:43:09 +0000</pubDate>
	<dc:creator>Aaron</dc:creator>
</item>
<item>
	<title>Anant Narayanan: Heading to Prague…</title>
	<guid isPermaLink="false">http://www.kix.in/blog/?p=521</guid>
	<link>http://www.kix.in/blog/2009/10/heading-to-prague/</link>
	<description>&lt;p&gt;&lt;a href=&quot;https://wiki.mozilla.org/EU_MozCamp_2009&quot;&gt;&lt;img src=&quot;https://wiki.mozilla.org/images/thumb/b/ba/Prague_mozcamp.jpg/427px-Prague_mozcamp.jpg&quot; alt=&quot;&quot; class=&quot;alignnone&quot; title=&quot;EU Mozcamp 2009&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I’m off to the beautiful city of Prague, or “Praha” as it is known locally, for the European MozCamp of 2009. Memories from the MozCamp &lt;a href=&quot;http://www.kix.in/blog/2008/11/eu_mozcamp-and-friends/&quot;&gt;last year&lt;/a&gt; are still fresh, and I’m definitely looking forward to this one!&lt;/p&gt;
&lt;p&gt;On Friday, we’re going to be hosting a &lt;a href=&quot;https://wiki.mozilla.org/Prague_DevDay_2009#Mozilla_Labs_Hack_session&quot;&gt;Labs Hackathon&lt;/a&gt; on &lt;a href=&quot;http://jetpack.mozillalabs.com/&quot;&gt;Jetpack&lt;/a&gt;. This is your chance to get to know more about the framework that’s so easy to use that your mom could write an extension with it. Maybe not your Grandma though, you do need to know a bit of Javascript &lt;img src=&quot;http://www.kix.in/blog/wp-content/plugins/smilies-themer/Silk/emoticon_wink.png&quot; alt=&quot;;)&quot; class=&quot;wp-smiley&quot; /&gt; The hack session will last as long into the night as  needed for you folks to come up with amazing ideas for Jetpacks and implement them. &lt;a href=&quot;http://blog.mozilla.com/adw/&quot;&gt;Drew Willcoxon&lt;/a&gt; from the Firefox team and I will be on hand all day to help you, so feel free to come and poke us. Oh, I almost forgot to mention that  there’s Free Pizza involved.&lt;/p&gt;
&lt;p&gt;On Saturday, I’ll be giving a talk on &lt;a href=&quot;http://labs.mozilla.com/weave/&quot;&gt;Weave&lt;/a&gt;. With 0.7 &lt;a href=&quot;http://labs.mozilla.com/weave/2009/09/30/weave-0-7-released/&quot;&gt;just released&lt;/a&gt;, we’ll be taking a look at our current state, what’s in store for the future, and maybe a few cool demos. We’re also especially interested in engaging with addon developers to see what Weave can do to make it easier for them to add sync functionality to their addons.&lt;/p&gt;
&lt;p&gt;Be there!&lt;/p&gt;</description>
	<pubDate>Thu, 01 Oct 2009 05:50:09 +0000</pubDate>
	<dc:creator>Anant</dc:creator>
</item>
<item>
	<title>Aaron Train: Code Friday’s #1</title>
	<guid isPermaLink="true">http://aaronmt.com/?p=526</guid>
	<link>http://aaronmt.com/?p=526</link>
	<description>&lt;p&gt;It’s Friday evening and I’m too lazy to check the television for the Toronto Blue Jays score. Yeah yeah, nothing a little script can’t handle.&lt;/p&gt;
&lt;pre lang=&quot;bash&quot;&gt;lynx -nonumbers -nolist -dump http://m.4info.com/search?searchQuery=Toronto | egrep -i -B2 -A4 &quot;Status&quot;
&lt;/pre&gt;
&lt;pre lang=&quot;bash&quot;&gt;   Toronto Blue Jays (75-84)   (R) 4    (H) 5    (E) 0
   Baltimore Orioles (61-98)   (R) 7    (H) 9    (E) 0
   Status:  Top5th  B: 2 S: 2 O: 0
   Start Time:  10/02 7:05 PM ET
   Pitching:  Jason Berken (0K)
   Batting:  Kyle Phillips (0/1)
   Man on 1st
&lt;/pre&gt;
&lt;p&gt;Replace the query with whatever team or term you desire; easy :)&lt;/p&gt;</description>
	<pubDate>Sat, 26 Sep 2009 00:43:36 +0000</pubDate>
	<dc:creator>Aaron</dc:creator>
</item>
<item>
	<title>Wei Zhou: why you should marry a designer</title>
	<guid isPermaLink="false">http://weizhou.wordpress.com/?p=345</guid>
	<link>http://weizhou.wordpress.com/2009/09/25/why-you-should-marry-a-designer/</link>
	<description>&lt;p&gt;Many facts suggest that you should marry to a designer.&lt;/p&gt;
&lt;p&gt;First, designer are smart and constantly optimizing user experiences in their lives. Today designers are no longer artist, almost all of them are tech-savvy and bright. They like solving problems- so they are fully capably of fixing pipes for you; they are curious about everything in the world – your life will be fulfilled surprises. For designers, a string of URL gives them a whole new free toy to play with which immediately makes your life beautiful – they are not nagging like others because they are always playing or making stuff: you’ll have customized everything in your house and hand-made wine, chocolate, card and cake in your wedding anniversary.&lt;/p&gt;
&lt;p&gt;Second. Designers are rich. They are born entrepreneurs, that means they are seeking every way of making money with innovative ideas. Don’t be surprised if you know a designer has 6 companies at the same time. Today design has never attracted as much attentions as it used to be – it encapsulates so many levels of skillets; as designers, they are much more powerful than they were: because they are designing business for other people.&lt;/p&gt;
&lt;p&gt;Third, designers have freedom. Freelance designer is surely the best job in the world – not only because the nature of design requires the usage of both right and left brain so you won’t risk your other half having high suicide rate as a creative writers or artists, or retiring intelligence of football players. Designers surely look younger because the beauty and harmony they involve with everyday, and yes, as freelancers, they sleep a lot everyday, and if you like, they have the time to pick up kids.&lt;/p&gt;
&lt;p&gt;Fourth, designers are happy people. Designers have the best friends. Their clients are passionate and hopeful people with fantastic dreams who believe beautiful design can make a difference in their life – never a change of dealing with desperate and angry clients as lawyers do everyday.&lt;/p&gt;
&lt;p&gt;Fifty, designers are family guys and girls. They may like clubbing but never as much as they love their job or their life. They are never wasted as investment bankers do. Designers spend money appropriately because design is the art of balancing limited resource and quality. You’ll find your life quality increased significantly after you live with her/him, with less money, of course.&lt;/p&gt;
&lt;p&gt;Yeah, marry a designer, you’ll never be wrong.&lt;/p&gt;
&lt;br /&gt;  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/weizhou.wordpress.com/345/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/weizhou.wordpress.com/345/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/weizhou.wordpress.com/345/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/delicious/weizhou.wordpress.com/345/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/weizhou.wordpress.com/345/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/stumble/weizhou.wordpress.com/345/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/weizhou.wordpress.com/345/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/digg/weizhou.wordpress.com/345/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/weizhou.wordpress.com/345/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/reddit/weizhou.wordpress.com/345/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;http://stats.wordpress.com/b.gif?host=weizhou.wordpress.com&amp;amp;blog=2603969&amp;amp;post=345&amp;amp;subd=weizhou&amp;amp;ref=&amp;amp;feed=1&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;</description>
	<pubDate>Fri, 25 Sep 2009 19:20:55 +0000</pubDate>
	<dc:creator>weizhou</dc:creator>
</item>
<item>
	<title>Nino D'Aversa: Married, Mozilla and More</title>
	<guid isPermaLink="false">http://www.ndaversa.com/?p=400</guid>
	<link>http://www.ndaversa.com/2009/09/08/married-mozilla-and-more/</link>
	<description>&lt;p&gt;Wow, so it seems I have misplaced my blog this summer. However getting married, moving and taking an epic honeymoon can do that to blogs. It’s been a whirl wind kind of summer, full of change. It’s hard to know where to start, so I’ll start with what matters most.&lt;/p&gt;
&lt;p&gt;Being a married man, now for over a month, I can safely say I am both lucky and very much in love. It seems all those years Tasha and I enjoyed as a couple has us well prepared for the life of husband and wife. We have fallen into a wonderfully collaborative effort of eating, cleaning and entertaining. We have both spent a great deal of time preparing our home and we are finally enjoying the fruits of our labour, and it’s fantastic!&lt;/p&gt;
&lt;p&gt;When I last blogged my internship at Mozilla had just begun, as I write this I find it came and went too quickly. Opportunity doesn’t always come at the right moment, but you need to seize it nonetheless. I’m so happy that I took the chance to work with Mozilla this summer — even if life had me pulled in too many directions. Spending time in California meeting Stuart, Doug, Mark and others was rewarding. During these last few months I have kept my eyes and ears open and the thing I take most from the experience is how dedicated and passionate they all are. It has inspired me to find that same passion in what I choose to do from now on. I’m spending my time now to take a look at the job market to find what best suits me, my skills and my passions. My home life is already proving to be rather fulfilling and I have decided I will settle for nothing less in my professional life.&lt;/p&gt;
&lt;p&gt;I’m choosing to leave this blog post on the shorter side, it’s impossible to catchup with everything that has happened. However, some parting notes, I plan on remaining a contributor to the Mozilla project – the experience can only be surpassed by it’s importance, these are world class developers and I still have so much to learn and contribute.&lt;/p&gt;
&lt;p&gt;I also would like to take a moment to thank Silvana from &lt;a href=&quot;http://www.impulsephotographyblog.com&quot;&gt;Impulse Photography&lt;/a&gt;, she has a track record of producing some of the most unique and creative photography around, and our wedding was no exception. With that I leave you with &lt;a href=&quot;http://www.impulsephotographyblog.com/?p=1385&quot;&gt;moments from our big day&lt;/a&gt; – Thanks Silvana!&lt;/p&gt;

&lt;a href=&quot;http://www.ndaversa.com/2009/09/08/married-mozilla-and-more/attachment/39/&quot; title=&quot;39&quot;&gt;&lt;img src=&quot;http://www.ndaversa.com/wp-content/uploads/2009/09/39-150x150.jpg&quot; title=&quot;39&quot; height=&quot;150&quot; width=&quot;150&quot; alt=&quot;&quot; class=&quot;attachment-thumbnail&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.ndaversa.com/2009/09/08/married-mozilla-and-more/attachment/88/&quot; title=&quot;88&quot;&gt;&lt;img src=&quot;http://www.ndaversa.com/wp-content/uploads/2009/09/88-150x150.jpg&quot; title=&quot;88&quot; height=&quot;150&quot; width=&quot;150&quot; alt=&quot;&quot; class=&quot;attachment-thumbnail&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.ndaversa.com/2009/09/08/married-mozilla-and-more/attachment/105/&quot; title=&quot;105&quot;&gt;&lt;img src=&quot;http://www.ndaversa.com/wp-content/uploads/2009/09/105-150x150.jpg&quot; title=&quot;105&quot; height=&quot;150&quot; width=&quot;150&quot; alt=&quot;&quot; class=&quot;attachment-thumbnail&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.ndaversa.com/2009/09/08/married-mozilla-and-more/attachment/127/&quot; title=&quot;127&quot;&gt;&lt;img src=&quot;http://www.ndaversa.com/wp-content/uploads/2009/09/127-150x150.jpg&quot; title=&quot;127&quot; height=&quot;150&quot; width=&quot;150&quot; alt=&quot;&quot; class=&quot;attachment-thumbnail&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.ndaversa.com/2009/09/08/married-mozilla-and-more/attachment/135/&quot; title=&quot;135&quot;&gt;&lt;img src=&quot;http://www.ndaversa.com/wp-content/uploads/2009/09/135-150x150.jpg&quot; title=&quot;135&quot; height=&quot;150&quot; width=&quot;150&quot; alt=&quot;&quot; class=&quot;attachment-thumbnail&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.ndaversa.com/2009/09/08/married-mozilla-and-more/attachment/155/&quot; title=&quot;155&quot;&gt;&lt;img src=&quot;http://www.ndaversa.com/wp-content/uploads/2009/09/155-150x150.jpg&quot; title=&quot;155&quot; height=&quot;150&quot; width=&quot;150&quot; alt=&quot;&quot; class=&quot;attachment-thumbnail&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.ndaversa.com/2009/09/08/married-mozilla-and-more/attachment/175/&quot; title=&quot;175&quot;&gt;&lt;img src=&quot;http://www.ndaversa.com/wp-content/uploads/2009/09/175-150x150.jpg&quot; title=&quot;175&quot; height=&quot;150&quot; width=&quot;150&quot; alt=&quot;&quot; class=&quot;attachment-thumbnail&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.ndaversa.com/2009/09/08/married-mozilla-and-more/attachment/217/&quot; title=&quot;217&quot;&gt;&lt;img src=&quot;http://www.ndaversa.com/wp-content/uploads/2009/09/217-150x150.jpg&quot; title=&quot;217&quot; height=&quot;150&quot; width=&quot;150&quot; alt=&quot;&quot; class=&quot;attachment-thumbnail&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://www.ndaversa.com/2009/09/08/married-mozilla-and-more/attachment/195/&quot; title=&quot;195&quot;&gt;&lt;img src=&quot;http://www.ndaversa.com/wp-content/uploads/2009/09/195-150x150.jpg&quot; title=&quot;195&quot; height=&quot;150&quot; width=&quot;150&quot; alt=&quot;&quot; class=&quot;attachment-thumbnail&quot; /&gt;&lt;/a&gt;</description>
	<pubDate>Tue, 08 Sep 2009 20:13:04 +0000</pubDate>
	<dc:creator>Nino D'Aversa</dc:creator>
</item>
<item>
	<title>Anant Narayanan: Another summer at Mozilla passes by</title>
	<guid isPermaLink="false">http://www.kix.in/blog/?p=516</guid>
	<link>http://www.kix.in/blog/2009/09/another-summer-at-mozilla-passes-by/</link>
	<description>&lt;p&gt;My last day at Mozilla this summer was last Thursday. I didn’t take a lot of pictures this summer, because, you know, I &lt;a href=&quot;http://www.flickr.com/photos/an_ant/collections/72157606477971633/&quot;&gt;took a lot&lt;/a&gt; last time around. Also, this strategy turned out pretty well because now there are more pictures of me floating around on the tubes! After a longish trans-atlantic flight, I’m back in Amsterdam now resuming work on my Master’s (because &lt;a href=&quot;http://minix3.kix.in/&quot;&gt;hacking on Minix&lt;/a&gt; is awesome).&lt;/p&gt;
&lt;p&gt;No other internship has been ever so satisfying: over the summer, I worked on a wide range of mini-projects which allowed me to exercise skills ranging from systems to application level programming. I even did a bit of work in the mobile space (turns out programming in limited memory and processing speed is a *lot* different).&lt;/p&gt;
&lt;p&gt;One such project that I’m especially excited about is support for &lt;a href=&quot;http://hg.mozilla.org/labs/jetpack/file/tip/components/experimental/video&quot;&gt;video recording&lt;/a&gt; in the browser. Yes, there is even a canvas-based live preview of your webcam feed, in addition to Ogg/Theora encoding support! Combined with the &lt;a href=&quot;http://www.kix.in/blog/2009/07/audio-recording-in-the-browser/&quot;&gt;audio recording&lt;/a&gt; support I wrote sometime ago, some really cool applications are now possible. Skype-like dialer in the browser? Why not?! (*hint* anyone is free to send in a patch for multiplexing the audio and video, they’re currently two separate Vorbis and Theora streams *hint*).&lt;/p&gt;
&lt;p&gt;We also had 3 major releases for Weave during the summer: 0.4, 0.5 and 0.6. The last one was especially big, given the completely new, HTML based UI (big kudos to &lt;a href=&quot;http://twitter.com/thunder/&quot;&gt;thunder&lt;/a&gt; for pulling it off!) and a bunch of other performance fixes. Also, the web UI I wrote &lt;a href=&quot;http://www.kix.in/blog/2008/06/week-3-web-client-for-weave/&quot;&gt;last year&lt;/a&gt; underwent so many great changes by the wonderful folks at &lt;a href=&quot;http://www.glaxstar.com/&quot;&gt;Glaxstar&lt;/a&gt;. Now we’re putting up a &lt;a href=&quot;http://design-challenge.mozilla.com/fall09/&quot;&gt;community design challenge&lt;/a&gt; to revamp the UI so we can ship the thing! (*hint* if you’re good at UI design you should participate in the challenge *hint*).&lt;/p&gt;
&lt;p&gt;There’s so many more cool things I worked on that I’d like to talk about, but perhaps they deserve a separate blog post. Soon… (I keep promising myself that I should blog more often, it never works).&lt;/p&gt;
&lt;p&gt;To add the already good times, my two students in the &lt;a href=&quot;http://www.kix.in/soc/&quot;&gt;Summer of Code&lt;/a&gt; this year passed with flying colors. Yay!&lt;/p&gt;</description>
	<pubDate>Tue, 01 Sep 2009 03:54:52 +0000</pubDate>
	<dc:creator>Anant</dc:creator>
</item>
<item>
	<title>Aaron Train: Wrapping Up an Internship at Mozilla</title>
	<guid isPermaLink="false">http://aaronmt.wordpress.com/?p=429</guid>
	<link>http://aaronmt.com/?p=429</link>
	<description>&lt;p&gt;&lt;strong&gt;Friday&lt;/strong&gt; is approaching &lt;strong&gt;fast&lt;/strong&gt;, it will be my last official day as an intern with Mozilla Corporation, but certainly not my last day with the project and overall initiative.&lt;/p&gt;
&lt;p&gt;The past four month’s have offered me an an incredible chance to learn, far more than any one job, classroom or book may offer. I have learned a lot; everything from the Mozilla platform to invalidation reference testing to XML User Interface Language (XUL) to reducing test-cases for crashes in the browser to even the vast assortment of brown-bag and meet-up discussions, I have learned &lt;em&gt;a lot&lt;/em&gt;. With the knowledge gained, this internship opportunity has been far more rewarding than one could possibly imagine. There is nothing more rewarding than having the opportunity to discover and ascertain and to certainly ask many upon many questions.&lt;/p&gt;
&lt;p&gt;Four month’s long, I worked alongside the QA (Execution &amp;amp; Test Dev), (that of which include Clint and Heather) team driving forth many efforts within the world of testing. Over the months, I got to tackle quite a few tricky issues that turned out to require new and unique solutions that I really enjoyed inventing and implementing. The different challenges and testing opportunities were each rewarding as they demonstrated the underlying importance of software testing.&lt;/p&gt;
&lt;p&gt;See my parting presentation &lt;a href=&quot;http://docs.google.com/present/embed?id=ddjrztkk_200g2ck4fgp&quot;&gt;here&lt;/a&gt; for a complete overview (&lt;em&gt;no &amp;lt;iframe/&amp;gt; in WordPress&lt;/em&gt;) of the major project I worked on in July/August and the test development areas I worked on in May and June .&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;http://mozillalinks.org/wp/wp-content/uploads/2008/01/mozilla_logo.png&quot; alt=&quot;http://mozillalinks.org/wp/wp-content/uploads/2008/01/mozilla_logo.png&quot; height=&quot;143&quot; width=&quot;143&quot; /&gt;&lt;/p&gt;
&lt;p&gt;That being said, I’m not gone yet. Despite a return to my final year of software development in school, I’ll continue to chip in to the efforts of the QA team and other projects to come, only I’ll be on IRC at a slightly different time of day.&lt;/p&gt;
&lt;p&gt;Thanks Mozilla and in particular the friendly folks of QA for the first-rate experience!&lt;/p&gt;
&lt;p&gt;Take care Mozilla,&lt;/p&gt;
&lt;p&gt;Aaron&lt;/p&gt;</description>
	<pubDate>Tue, 25 Aug 2009 05:24:07 +0000</pubDate>
	<dc:creator>Aaron</dc:creator>
</item>
<item>
	<title>Margaret Leibovic: New about:me Page for Firefox!</title>
	<guid isPermaLink="false">http://margaret.mit.edu/?p=29</guid>
	<link>http://margaret.mit.edu/2009/08/new-aboutme-page-for-firefox/</link>
	<description>&lt;p&gt;This summer I created an experimental prototype of an &lt;a href=&quot;https://wiki.mozilla.org/Firefox/Projects/about:me&quot;&gt;about:me&lt;/a&gt; page for Firefox, and I am proud to announce that it is now available for download as an add-on on &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/13681&quot;&gt;addons.mozilla.org&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;The goal of the about:me page is to give you a more interesting view of  statistics about your browser usage, providing a fun way to see personalized patterns in your interactions with Firefox. The current version includes graphs  that illustrate trends in your browsing and downloads histories.&lt;/p&gt;
&lt;p&gt;The “Activity Stats” section graphs the websites you visit most,  including the individual pages you visit most within each top-level  site. This section also graphs your hourly browsing activity, which can  reveal patterns in websites you visit most at various times of the day.&lt;br /&gt;
&lt;img src=&quot;https://addons.mozilla.org/en-US/firefox/images/p/35726/1250185300&quot; alt=&quot;Activity Stats&quot; height=&quot;300&quot; width=&quot;449&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The “Downloads Stats” section illustrates the distribution of different  types of files you download, as well as daily trends in your download  activity.&lt;br /&gt;
&lt;img src=&quot;https://addons.mozilla.org/en-US/firefox/images/p/35723/1250185299&quot; alt=&quot;Downloads Stats&quot; height=&quot;300&quot; width=&quot;447&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I plan to continue to develop the about:me page to include more sections from our &lt;a href=&quot;https://wiki.mozilla.org/Firefox/Projects/about:me#Prototype_Development&quot;&gt;brainstorming list&lt;/a&gt;, such as statistics about bookmarks and tabs. Please let me know if there’s anything you would love to see next!&lt;/p&gt;</description>
	<pubDate>Mon, 17 Aug 2009 16:06:51 +0000</pubDate>
	<dc:creator>Margaret Leibovic</dc:creator>
</item>
<item>
	<title>Michael Sullivan: Inline threading for TraceMonkey slides</title>
	<guid isPermaLink="false">http://www.msully.net/blog/?p=6</guid>
	<link>http://www.msully.net/blog/2009/08/16/inline-threading-slide/</link>
	<description>&lt;p&gt;Here are the slides from my end of summer brown-bag presentation: &lt;a href=&quot;http://www.msully.net/~sully/files/inline_slides.pdf&quot;&gt;http://www.msully.net/~sully/files/inline_slides.pdf&lt;/a&gt;.&lt;/p&gt;</description>
	<pubDate>Sun, 16 Aug 2009 05:06:32 +0000</pubDate>
	<dc:creator>sully</dc:creator>
</item>
<item>
	<title>Matthew Noorenberghe: Doorhanger Notifications: Progress Update 2009-08-14</title>
	<guid isPermaLink="false">http://matthew.noorenberghe.com/28 at http://matthew.noorenberghe.com</guid>
	<link>http://matthew.noorenberghe.com/blog/2009/08/doorhanger-notifications-progress-update-2009-08-14</link>
	<description>&lt;h2&gt;Current Progress&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;worked on API design and features discussed in Aug. 6 meeting&lt;/li&gt;
&lt;li&gt;improved initial working prototype&lt;/li&gt;
&lt;ul style=&quot;margin-left: 2em;&quot;&gt;
&lt;li&gt;Automatically hiding icon notifications after a delay&lt;/li&gt;
&lt;li&gt;Notifications are shown as menu buttons when notification button clicked&lt;/li&gt;
&lt;li&gt;More code and UI cleanup&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;h2&gt;Loose threads&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;where in the UI should the doorhangers be shown? (need input from beltzner)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Next target&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;fully working version of doorhangers&lt;/li&gt;
&lt;li&gt;ETA August 21, 2009&lt;/li&gt;
&lt;/ul&gt;</description>
	<pubDate>Fri, 14 Aug 2009 19:46:34 +0000</pubDate>
	<dc:creator>matthew</dc:creator>
</item>
<item>
	<title>Brian Krausz: Yet Another Reason Not to Use GoDaddy</title>
	<guid isPermaLink="false">http://nerdlife.net/?p=253</guid>
	<link>http://feedproxy.google.com/~r/nerdlife/~3/z1MLJ758UCk/</link>
	<description>&lt;p&gt;&lt;b&gt;Update:&lt;/b&gt; It seems GoDaddy &lt;a href=&quot;http://help.godaddy.com/article/4764&quot;&gt;fixed this issue&lt;/a&gt;.  Glad they fixed it, though I still can’t say I recommend them.  Thanks Sean for pointing that out to me.&lt;/p&gt;
&lt;p&gt;I recently gave a talk on WordPress plugins at the Boston WordPress Meetup (slides are online on &lt;a href=&quot;http://www.meetup.com/boston-wordpress-meetup/files/&quot;&gt;their meetup.com page&lt;/a&gt;).  During this talk the question came up of which webhost to use.  Everyone has their own recommendation of webhost, but the one host that was universally panned is GoDaddy.&lt;/p&gt;
&lt;p&gt;I’ve long since moved on from shared webhosts on to VPSes (I’ve been using VPSLink since they started.  Use &lt;a href=&quot;http://vpslink.com/?ref=D2NF81&quot;&gt;this link&lt;/a&gt; to get 10% off for life and snag me a nice referral bonus &lt;img src=&quot;http://nerdlife.net/wp-includes/images/smilies/icon_wink.gif&quot; alt=&quot;;-)&quot; class=&quot;wp-smiley&quot; /&gt; ), but GoDaddy was my first web host, and since then I have heard nothing but terrible things about their marketing practices, upsells, and other sketchiness.  But they will show you videos of women taking their clothes off on their website, which is great if you’re into that sort of stuff, but not what I need from a webhost.&lt;/p&gt;
&lt;p&gt;But until recently I never discovered anything actually wrong with their hosting service…it worked, and while it was cheap, they at least delivered what you paid for (though granted, you’re not paying or getting a lot).  Yesterday, while looking through some code for a GoDaddy site, I discovered something painfully bad with their service that makes them a terrible idea for any ecommerce site.&lt;/p&gt;
&lt;p&gt;It seems GoDaddy doesn’t allow outgoing connections from their shared hosting packages.  So, for example, you can’t connect to authorize.net or paypal.com from your server.  How do they recommend you accept payments?  Send it through some unsecured proxy they have.&lt;/p&gt;
&lt;p&gt;That’s right, GoDaddy is actually telling people to send credit card information to another server in unsecured plaintext.  They then forward it along and send you the response.  There are 2 things wrong with this.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Man in the middle attacks up the wazoo.  Not only can someone possible get in between the proxy and your server, but who knows whether or not the proxy requires valid certificates.  If not then the entire workflow is vulnerable.&lt;/li&gt;
&lt;li&gt;There’s a now a single point of failure for all of that hosting.  If that server is compromised, all those sites get compromised too.  This is a huge risk.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If I were issuing merchant accounts and knew about this, I wouldn’t accept accounts from anyone hosted with GoDaddy.  There are very few reasons for GoDaddy to be doing this.  The only one I can think of is preventing the spread of website worms that use holes in website scripts.  This is a pretty lame reason to lock websites into their own box, and there are much better ways to stop this.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/nerdlife/~4/z1MLJ758UCk&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Sun, 09 Aug 2009 17:50:08 +0000</pubDate>
	<dc:creator>Brian</dc:creator>
</item>
<item>
	<title>Aaron Train: Totally hip, totally rad Mozilla QA Companion 1.0</title>
	<guid isPermaLink="false">http://aaronmt.wordpress.com/?p=418</guid>
	<link>http://aaronmt.com/?p=418</link>
	<description>&lt;h1&gt;&lt;span style=&quot;color: #ff9900;&quot;&gt;Mozilla QA Companion 1.0 Released&lt;/span&gt;&lt;/h1&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Fresh new QA Companion. This version has a revamped design of the former QAC, with functionality for running manual tests, reporting bugs, and viewing the latest QMO news.&lt;strong&gt; &lt;/strong&gt;&lt;strong&gt;1.0 is a &lt;/strong&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;vast&lt;/span&gt; improvement over 0.2.3!&lt;/strong&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/5428&quot;&gt;Download the latest version here&lt;/a&gt;&lt;br /&gt;
&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;So what is the Mozilla QA Companion (QAC)?&lt;/h2&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;strong&gt;The &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/5428&quot;&gt;Mozilla QA Companion (QAC)&lt;/a&gt; is a new tool that was created after discussions between the QA team and community about how to make it easier for anyone to get involved with the Mozilla project and help us test Firefox.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The QAC is meant to be an easy way to get community members involved in the QA process. It pulls testcases from Litmus and provides a response form, all within the QAC interface. The QAC also includes notifications for important QA events such as Bug Days, and keeps users up-to-date with live feeds from the QMO site and forums.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Features&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;General QMO tab&lt;/strong&gt; — updates on news, forums, etc.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘Run Tests’ tab&lt;/strong&gt; — This is the heart of the extension. It allows users to get testcases to run and to submit results from within the extension. QAC will detect most system settings and helps new users set up a Litmus account if they don’t have one already.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;‘File Bug’ tab&lt;/strong&gt; – File bugs by submitting a report!&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Settings/Help (Preferences)&lt;/strong&gt; — This is for the confused or misconfigured.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Installation&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You can install the QA Companion like any other Firefox add-on by visiting &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/5428&quot;&gt;https://addons.mozilla.org/en-US/firefox/addon/5428&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Getting involved with testing and development&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/5428&quot;&gt;Install Mozilla QA Companion 1.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Run test cases through QAC by interacting with &lt;a href=&quot;http://litmus.mozilla.org&quot;&gt;Litmus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Submit bug reports to &lt;a href=&quot;http://bugzilla.mozilla.org&quot;&gt;Bugzilla&lt;/a&gt; through issues you find in testcases.&lt;/li&gt;
&lt;li&gt;Join us in #qa on irc.mozilla.org&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The interface is fairly intuitive and easy to follow, but please let us know if you have any questions. Find us on IRC or post to the QMO forums. We hope you find the Mozilla QA Companion a useful tool that helps you get more involved with the Mozilla QA community!&lt;/p&gt;
&lt;p&gt;Thanks!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;- Aaron Train, on behalf of the Mozilla QA Companion revamp team &lt;/em&gt;&lt;/p&gt;</description>
	<pubDate>Sat, 08 Aug 2009 05:14:44 +0000</pubDate>
	<dc:creator>Aaron</dc:creator>
</item>
<item>
	<title>Matthew Noorenberghe: Doorhanger Notifications: Progress Update 2009-08-07</title>
	<guid isPermaLink="false">http://matthew.noorenberghe.com/4 at http://matthew.noorenberghe.com</guid>
	<link>http://matthew.noorenberghe.com/blog/2009/08/doorhanger-notifications-status-update-2009-08-07</link>
	<description>&lt;p&gt;My second major project this summer on the Firefox team is to implement &lt;a href=&quot;https://wiki.mozilla.org/Firefox/Projects/Doorhanger_notifications&quot; target=&quot;_blank&quot;&gt;Doorhanger Notifications&lt;/a&gt;.  The main goals are to redesign the notification interface to address various issues and to provide a unified notification area for them to be displayed. For now you can read the wiki page for more information.  Below is my progress thus far:&lt;/p&gt;

&lt;h2&gt;Current Progress&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;lots of code cleanup&lt;/li&gt;
&lt;li&gt;decided how to support undo notifications and worked on API design&lt;/li&gt;
&lt;li&gt;met with faaborg and dolske to talk about UI design&lt;/li&gt;
&lt;li&gt;initial working prototype done&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Loose threads&lt;/h2&gt;
&lt;ul&gt;&lt;li&gt;where in the UI should the doorhangers be shown? (need input from beltzner)&lt;/li&gt;&lt;/ul&gt;

&lt;h2&gt;Next target&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;fully working version of doorhangers&lt;/li&gt;
&lt;li&gt;ETA August 21, 2009&lt;/li&gt;
&lt;/ul&gt;</description>
	<pubDate>Fri, 07 Aug 2009 21:51:04 +0000</pubDate>
	<dc:creator>matthew</dc:creator>
</item>
<item>
	<title>Margaret Leibovic: Making Firefox Feel Faster</title>
	<guid isPermaLink="false">http://margaret.mit.edu/?p=11</guid>
	<link>http://margaret.mit.edu/2009/08/making-firefox-feel-faster/</link>
	<description>&lt;p&gt;I recently finished work on a &lt;a href=&quot;https://wiki.mozilla.org/Firefox/Sprints/Perception_of_Performance&quot;&gt;sprint&lt;/a&gt; to improve perceived performance in Firefox. Unlike code improvements that actually make the browser faster, perceived performance improvements make the browser &lt;em&gt;feel&lt;/em&gt; faster. There is currently a &lt;a href=&quot;https://wiki.mozilla.org/Perceived_Performance&quot;&gt;long list&lt;/a&gt; of brainstormed ideas for these improvements, but &lt;a href=&quot;http://blog.mozilla.com/faaborg/&quot;&gt;Alex Faaborg&lt;/a&gt; identified improving mouse wheel behavior in Windows as a quick way to make the browser appear noticeably more responsive.&lt;/p&gt;
&lt;p&gt;In native Windows applications, scroll events triggered by long flicks of the mouse wheel are not distinguished from events triggered by single wheel clicks, which can result in frustratingly slow scrolling when traveling a long distance down a page. Mac OS X, on the other hand, applies an acceleration effect to mouse wheel events, increasing the distance the page moves in response to multiple successive mouse wheel events.&lt;/p&gt;
&lt;p&gt;In order to create this acceleration effect in Windows, I wrote some code that changes the way we process mouse wheel events. This code uses some logic and arithmetic to increase the distance the page should move if there are multiple successive mouse wheel events, using the values of three different preferences to determine exact behavior.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;mousewheel.withnokey.numlines: &lt;/strong&gt;The number of lines the page moves with one click of the mouse wheel. This value is used to determine scrolling distance before acceleration computations are applied. Increasing this value will make scrolling feel faster for all types of scroll wheel actions, including individual scroll wheel clicks.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;mousewheel.acceleration.start: &lt;/strong&gt;The mouse wheel click number at which acceleration begins to take effect. This value determines whether or not acceleration computations are applied to a given scroll event.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;mousewheel.acceleration.factor: &lt;/strong&gt;The multiplicative factor used to determine the rate of acceleration. The acceleration computations create a constant acceleration effect, but this value can control the level of acceleration.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These preferences can be configured from the &lt;a href=&quot;http://kb.mozillazine.org/Firefox_:_FAQs_:_About:config_Entries&quot;&gt;about:config&lt;/a&gt; page, and although the default values are not set in stone, they seem to create a reasonable acceleration effect. Feel free to play with these preferences on a &lt;a href=&quot;http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-trunk/&quot;&gt;nightly build&lt;/a&gt; and let me know what you think!&lt;/p&gt;</description>
	<pubDate>Thu, 06 Aug 2009 00:25:09 +0000</pubDate>
	<dc:creator>Margaret Leibovic</dc:creator>
</item>
<item>
	<title>Michael Sullivan: Doing whole tree analysis with Dehydra</title>
	<guid isPermaLink="false">http://www.msully.net/blog/?p=5</guid>
	<link>http://www.msully.net/blog/2009/08/03/doing-whole-tree-analysis-with-dehydra/</link>
	<description>&lt;h4&gt;Introduction&lt;/h4&gt;
&lt;p&gt;In this post I discuss how I used &lt;a href=&quot;https://developer.mozilla.org/En/Dehydra&quot;&gt;Dehydra&lt;/a&gt; to do analysis of the entire Tracemonkey tree.&lt;/p&gt;
&lt;h4&gt;Note&lt;/h4&gt;
&lt;p&gt;I talk briefly about some Tracemonkey things to motivate what I used Dehydra for, but a knowledge of Tracemonkey is not required to appreciate the main point of this post.&lt;/p&gt;
&lt;h4&gt;The problem&lt;/h4&gt;
&lt;p&gt;One of the optimizations in my Tracemonkey inline threading work (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=506182&quot;&gt;Bug 506182&lt;/a&gt;), which I will be posting about later, is “PC update elimination”. Doing this requires figuring out which functions out of a certain set can access the JavaScript virtual program counter (which is stored as a variable named “pc” in a class named “JSFrameRegs”). There are about 230 functions in this set, so doing it manually is impractical.&lt;/p&gt;
&lt;h4&gt;The solution&lt;/h4&gt;
&lt;p&gt;I used Dehydra to help solve this problem mechanically. Dehydra is a static analysis tool built on top of gcc. It allows the semantic information of a program to be queried with JavaScript scripts.&lt;/p&gt;
&lt;h4&gt;First steps&lt;/h4&gt;
&lt;p&gt;By providing a process_function() function in a Dehydra script, I can inspect the variables used and the functions called by every function. Determining whether the pc is used is as simple as seeing if any variable has the name “JSFrameRegs::pc”.&lt;/p&gt;
&lt;pre&gt;function process_function(f, statements) {
  for each (let v in iterate_vars(statements)) {
    if (v.name == &quot;JSFrameRegs::pc&quot;) {
      print(f.name);
      break;
    }
  }
}
&lt;/pre&gt;
&lt;h4&gt;The catch&lt;/h4&gt;
&lt;p&gt;Unfortunately, this isn’t quite what we want. This will tell us which functions directly use the PC, but not which functions can &lt;em&gt;indirectly&lt;/em&gt; use it through function calls. Figuring out that requires looking at all the functions called by a given function. This is not straightforward with Dehydra, as functions frequently call functions declared in other files. Dehydra is a gcc plugin and is driven by the normal build system. Thus, it works on a file-by-file basis. Normal builds output an object file for each source file and rely on the linker to stitch it all together. Likewise, to do a whole tree analysis we need to output per-file information and then link it together later.&lt;/p&gt;
&lt;h4&gt;Collating the data&lt;/h4&gt;
&lt;p&gt;I reworked my process_function() to determine both whether the PC is directly accessed and the set of functions called directly. This data is then printed with the dump() function (discussed below):&lt;/p&gt;
&lt;pre&gt;function process_function(f, statements) {
  usespc = false;
  calls = {};

  for each (let v in iterate_vars(statements)) {
    if (v.name == &quot;JSFrameRegs::pc&quot;) {
      usespc = true;
    }
    if (v.isFunction) {
      calls[v.name] = true;
    }
  }
  dump(f.name, usespc, calls);
}
&lt;/pre&gt;
&lt;p&gt;The remaining question is how to structure our output. Outputting it as data declarations for some programming language seems like an easy way to do it. Since I am more comfortable with Python than JavaScript, I output the data as Python code:&lt;/p&gt;
&lt;pre&gt;function dump(name, usespc, calls) {
  s = '@@@';
  s += '\t&quot;' + name + '&quot;: ({';
  for (let f in calls) {
    s += '&quot;' + f + '&quot;, ';
  }
  s += '}, ' + (usespc ? &quot;True&quot; : &quot;False&quot;) + '),';
  print(s);
}
&lt;/pre&gt;
&lt;p&gt;We create a dictionary mapping function names to tuples of the set containing the name of each function called and whether the PC is accessed directly. When doing a build, the output will be intermixed with output from other parts of the build infrastructure, so we tag all of the output lines with ‘@@@’ so that a post-processing shell script can recognize and extract the relevant data.&lt;/p&gt;
&lt;p&gt;The relevant bit of the shell script (which is linked below), is:&lt;/p&gt;
&lt;pre&gt;(echo &quot;callgraph = {&quot;;
cd &quot;$DIR&quot; &amp;amp;&amp;amp; make -s CXX=&quot;$CXX&quot; 2&amp;gt;&amp;amp;1 | grep &quot;: @@@&quot; | cut -d@ -f4-;
echo &quot;}&quot;)
&lt;/pre&gt;
&lt;p&gt;This data gathering method could easily be modified to analyze different problems. For simplicity, I extracted only the relevant information and converted it directly to Python data structures. Another approach would be to dump all of the function information (probably in JSON), allowing a later analysis script access to everything.&lt;/p&gt;
&lt;h4&gt;The analysis&lt;/h4&gt;
&lt;p&gt;I wrote an analysis script in Python to process the data. The input is a large dictionary, mapping functions to the set of functions they call and whether they touch PC directly.&lt;/p&gt;
&lt;p&gt;I viewed the problem in terms of graph theory. The mapping from functions to the functions they call is simply a directed graph. Each function is a node and there is a edge from a function to each function that it calls. In this graph, some nodes (those that touch the PC) are initially marked. We want to color red every node that has a path to one of the initially marked nodes.&lt;/p&gt;
&lt;p&gt;Another way to state this is that a node is colored red if and only if it is either initially marked or has an edge to a red node. Doing the coloring is a simple problem. We simply compute the reverse graph (reversing all of the edges) and then perform a depth first search of the reverse graph starting from the marked nodes. Every node we see, we color red.&lt;/p&gt;
&lt;p&gt;When doing the DFS, we keep track of which node we first reached a newly colored node from, so that we can determine a path back to an initially marked node.&lt;/p&gt;
&lt;p&gt;My implementation also supports providing a predicate to exclude certain nodes from the search, in order to investigate how fixing certain functions to not require the PC would change things.&lt;/p&gt;
&lt;h4&gt;Caveats&lt;/h4&gt;
&lt;p&gt;While my method is useful, it is not perfect. It can produce both false positives and false negatives.&lt;/p&gt;
&lt;p&gt;False negatives result from polymorphism in the form of virtual functions and function pointers. When a call to such a function is made, there needs to be an edge from the caller to all of the functions that could be called. For virtual functions, this is all functions overriding the virtual function. For function pointers, I think this is every function of the proper type that is used in a way that it not a call at some point. It should be possible to address this problem, but at a &lt;em&gt;significantly&lt;/em&gt; increased complexity compared to what I have. Fortunately for me, Tracemonkey does not use virtual classes much and does not use function pointers in places where it matters for my analysis.&lt;/p&gt;
&lt;p&gt;False positives are a little trickier, and can’t be worked around in general. Consider the following:&lt;/p&gt;
&lt;pre&gt;void foo(bool bar) {
    if (bar)
        // access the PC
}
void baz() { foo(false); }
&lt;/pre&gt;
&lt;p&gt;Calling baz() will not result in the PC being accessed, but my analysis will report that it can access the PC (since foo() can). Knowing whether a function can &lt;em&gt;actually&lt;/em&gt; cause the PC to be accessed is isomorphic to the halting problem and thus undecidable.&lt;/p&gt;
&lt;h4&gt;The code&lt;/h4&gt;
&lt;p&gt;My code is available &lt;a href=&quot;http://www.msully.net/~sully/stuff/static_pc/&quot;&gt;here&lt;/a&gt;. make_callgraph.sh expects to find g++ and Dehydra under ~/gcc-dehydra/, as suggested in the Dehydra &lt;a href=&quot;https://developer.mozilla.org/En/Dehydra/Installing_Dehydra&quot;&gt;installation instructions.&lt;/a&gt; make_callgraph.sh must be run with its output redirected to callgraph.py. search.py contains both the general search algorithm and code that uses it to analyze functions introduced in my inline threading patch.&lt;/p&gt;</description>
	<pubDate>Tue, 04 Aug 2009 01:19:40 +0000</pubDate>
	<dc:creator>sully</dc:creator>
</item>
<item>
	<title>Pejman Pour-Moezzi: The unbearable heaviness of mobile applications</title>
	<guid isPermaLink="false">http://www.pourmoezzi.com/?p=114</guid>
	<link>http://feedproxy.google.com/~r/pejmanjohn/~3/U79KsdwNWK8/</link>
	<description>&lt;p&gt;There’s an app for this and there’s an app for that – we get it.  And with the iPhone app store sporting figures like 1,000,000,000 downloads and 50,000 different apps it’s easy to call such a platform a runaway success.  However after reflecting on my own usage of mobile apps, I’ve concluded one thing – the user experience sucks*.&lt;/p&gt;
&lt;p&gt;A friend recently asked me how many iPhone apps I use regularly. My response: 2.&lt;/p&gt;
&lt;p&gt;Facebook and Tweetie are really the only apps I use. A couple months ago I even took the unnecessary step of deleting all the apps that were collecting dust on my iPhone, simply because I got tired of looking at them. I’m not the only one like this. A recent study found that 20 days after download &lt;a href=&quot;http://news.cnet.com/most-iphone-applications-gathering-dust&quot; target=&quot;_blank&quot;&gt;only 5 percent of apps are used&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;So what’s wrong here? My view: It’s partly the apps but mostly it’s the app store. It’s too heavy. Let me paint you a picture.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;* My intention is not to single out the iPhone here. I mean mobile applications in general  (e.g., iPhone, Android, Palm, etc.)&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;strong&gt;A day in the life&lt;/strong&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;I’m wandering around a Best Buy (&lt;em&gt;see&lt;/em&gt; hypothetical) and am having trouble locating Blu-Ray players. While I could go ask someone for help, I decide to pull out my trusty smart phone instead (here an iPhone). Here are the steps I have to go through:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Click App Store&lt;/li&gt;
&lt;li&gt;Search “Best Buy”&lt;/li&gt;
&lt;li&gt;Review app list &amp;amp; select the official Best Buy app&lt;/li&gt;
&lt;li&gt;Wait about a minute for the download to finish over 3G&lt;/li&gt;
&lt;li&gt;Launch the Best Buy app and wait for it to load&lt;/li&gt;
&lt;li&gt;Find Blu-Ray devices&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Finally I’m presented with a Blu-Ray page and what are my options?&lt;/p&gt;
&lt;p&gt;“View Online.”&lt;/p&gt;
&lt;p&gt;Two major issues here:&lt;/p&gt;
&lt;p&gt;1) Wow, that was a lot of work.&lt;/p&gt;
&lt;p&gt;2) I’m standing in a Best Buy and the Best Buy app is telling me to shop online.&lt;/p&gt;
&lt;p&gt;I, of course, am operating under an assumption here. Namely, mobile applications should enhance my physical environment. That’s the difference between a desktop app and mobile app for me. While a desktop app is immersive and provides its own context, a mobile app is auxiliary and responds to context. Mobile apps that don’t fit this bill are simply desktop apps fitted to small screens – ubiquity with no added utility.&lt;/p&gt;
&lt;p&gt;Unfortunately, mobile app stores are designed for these types of apps. The arduous setup process, discoverability and, more fundamentally, the notion of an “application” itself are hindering true innovation in the mobile space.&lt;/p&gt;
&lt;p&gt;So, let me paint you another picture and present three concepts that illustrate a different approach.&lt;/p&gt;
&lt;h2&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;strong&gt;#1 Transitory not transactional&lt;/strong&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;App stores are geared towards transactions. You browse, buy (sometimes for free), and keep goods (applications). In the Best Buy example, I not only stood in the store for almost two minutes before realizing that the application wouldn’t help me but I now had a Best Buy app sitting on my phone. I visit a Best Buy next to never – so why is it still there?&lt;/p&gt;
&lt;p&gt;Same thing happened when I downloaded a French dictionary to use in France and a snow report application while in Tahoe. Months later those apps (and their many updates) were still in my face. This is poor design in that it forces a transactional framework onto a transitory interaction. This is what I mean when I say that mobile apps are “heavy.” Getting from inspiration to an open app requires too much work.&lt;/p&gt;
&lt;p&gt;There is of course one platform that handles transitory interactions particularly well: the web. I should be able to call up the Best Buy “app” much like I do a website. No downloads, updates or uninstalls, simply “Go.”&lt;/p&gt;
&lt;h2&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;strong&gt;#2 Context not subject&lt;/strong&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;While the open (generative) web makes for a great, lightweight app platform, organization via URLs and search engines makes for horrible discovery on mobile. More fundamentally, the challenge is that the web has been developed to interpret user input – but not environmental input. That made sense back when computers were bolted onto desks but today’s “computer” lives in the pocket and the catalyst for usage is often tied to some measurable environmental factors.&lt;/p&gt;
&lt;p&gt;Some applications have done a good job responding to such factors. And here I must really commend the iPhone, in particular, for providing so many valuable inputs. I would count &lt;a href=&quot;http://www.shazam.com/music/web/home.html&quot; target=&quot;_blank&quot;&gt;Shazam&lt;/a&gt; as a great mobile app; with one click the song you’re hearing but don’t know the name of is analyzed and, if successful, the song name returned. That wouldn’t have much application on a desk-bolted computer but on a mobile device that’s with you in cafes and bars, it’s golden.&lt;/p&gt;
&lt;p&gt;But how does one get to downloading Shazam? Well, you have to know it by name or do some novel searches to find it, or in other words it’s only discoverable via user input. Wouldn’t it make more sense if it were suggested to you when the phone detects a song playing?  What I’m really getting at is designing an App Store around discoverability via context.&lt;/p&gt;
&lt;p&gt;Let’s revisit the Best Buy example to see what I mean. This time I’m packing an iPhone with a very context-sensitive app store and applications.&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;&lt;span style=&quot;color: #000000;&quot;&gt;A better day in the life&lt;/span&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I’m wandering around a Best Buy and am having trouble locating Blu-Ray players. While I could go ask someone for help, I decide to pull out my trusty iPhone. Here are the steps I have to go through:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open App Store (i.e., a customized browser)&lt;/li&gt;
&lt;li&gt;Search “nearby” or just click the location button
&lt;ol type=&quot;none&quot;&gt;
&lt;li&gt;This contextual search uses information about the surrounding area to present relevant applications. Since I’m standing in a Best Buy that application is presented first. The Starbucks next door is also presented.&lt;/li&gt;
&lt;li&gt;&lt;img src=&quot;http://www.pourmoezzi.com/wp-content/uploads/2009/08/Picture-4-300x164.png&quot; title=&quot;Context Search&quot; height=&quot;164&quot; width=&quot;300&quot; alt=&quot;Context Search&quot; class=&quot;alignnone size-medium wp-image-117&quot; /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Select Best Buy from the list
&lt;ol type=&quot;none&quot;&gt;
&lt;li&gt;Note: With one click I not only load Best Buy (no download needed) but I’m put directly into the context of the specific store I’m standing in.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Ask “Where’s Blu-Ray?”
&lt;ol type=&quot;none&quot;&gt;
&lt;li&gt;I’m presented with GPS-like directions. As I move throughout the store the screen continuously updates and I can simply replace “Blu-Ray” with “Checkout” or “Restroom.”&lt;/li&gt;
&lt;li&gt;&lt;img src=&quot;http://www.pourmoezzi.com/wp-content/uploads/2009/08/Picture-1-300x167.png&quot; title=&quot;Where's Blu-Ray&quot; height=&quot;167&quot; width=&quot;300&quot; alt=&quot;Where's Blu-Ray&quot; class=&quot;alignnone size-medium wp-image-118&quot; /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;So there you have it. A much better user experience driven by context both in the app store and in the application itself. As a bonus, this kind of discovery can reinforce synergies found in the physical environment. There’s a good reason why a Starbucks is located next to a Best Buy – we should replicate that on mobile as well and perhaps suggest to the user to order their drink when they are waiting in the Best Buy checkout line.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;strong&gt;#3 Eco not silo &lt;/strong&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;So far I have suggested we kill the transactional nature of app stores and reorganize them based on context but my last suggestion may be the most radical – let’s kill the concept of an “application” altogether. Here’s my beef (it’s one that was first articulated to me by my Mozilla colleague, &lt;a href=&quot;http://www.azarask.in/blog/&quot; target=&quot;_blank&quot;&gt;Aza Raskin&lt;/a&gt;, so consider this section co-production):&lt;/p&gt;
&lt;p&gt;Applications are selfish – they keep innovations to themselves. While Web 2.0 has done a better job of “mash ups” this really occurs at the data level – what applications need to do is share functionality as well. What do I mean? Let’s say a word processor does a great job of producing rainbow colored text like &lt;span style=&quot;color: #ff0000;&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;s&lt;/span&gt; and that you love it so much that you want every word you ever type to be in &lt;span style=&quot;color: #ff0000;&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;color: #339966;&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: #ffff00;&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;b&lt;/span&gt;&lt;span style=&quot;color: #800080;&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;w&lt;/span&gt;. Ideally you’d set that up once and then no matter what application you are using, be it Word, Facebook, Photoshop, your type would be colorful. What I’m really suggesting is an architecture where features, as well as data, are pervasive. An application here would be redefined as a particular grouping of global features and data. Differentiation here purely resides in user experience as all applications could share in the best features and data available.&lt;/p&gt;
&lt;p&gt;Why is this particularly important in mobile? Because while on the desktop we’ve developed task bars and shortcuts to help us manage the dozens of applications that we have running, on mobile we don’t have the same power or screen real estate. When we launch a mobile application it effectively takes over our phone. That makes not having access to data or features that much more painful.&lt;/p&gt;
&lt;p&gt;Or put more positively wouldn’t it be great to have all your favorite features within reach?  What if the Best Buy app utilized the same “nearby” feature that I had used to launch it in the first place? I could recursively search “nearby” again and now see what’s around me in the store:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.pourmoezzi.com/wp-content/uploads/2009/08/Picture-9-300x169.png&quot; title=&quot;Nearby Best Buy&quot; height=&quot;169&quot; width=&quot;300&quot; alt=&quot;Nearby Best Buy&quot; class=&quot;alignnone size-medium wp-image-119&quot; /&gt;&lt;/p&gt;
&lt;p&gt;And since this functionality transcends the app, the Best Buy app could deliver a lot more than just product information. It could even tell me that a friend is in the store too.&lt;/p&gt;
&lt;p&gt;Not bad for a brick-and-mortar, eh?&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/pejmanjohn/~4/U79KsdwNWK8&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 04 Aug 2009 00:50:29 +0000</pubDate>
	<dc:creator>Pejman</dc:creator>
</item>
<item>
	<title>Matthew Noorenberghe: Improved Form History</title>
	<guid isPermaLink="false">http://matthew.noorenberghe.com/2 at http://matthew.noorenberghe.com</guid>
	<link>http://matthew.noorenberghe.com/blog/improved-form-history</link>
	<description>&lt;p&gt;&lt;img src=&quot;http://matthew.noorenberghe.com/sites/matthew.noorenberghe.com/files/images/autocomplete_frecency.png&quot; align=&quot;right&quot; hspace=&quot;5&quot; alt=&quot;Autocomplete dropdown sorted by frecency&quot; /&gt;My first project this summer as an intern at &lt;a href=&quot;http://www.mozilla.com&quot; target=&quot;_blank&quot;&gt;Mozilla&lt;/a&gt; on the &lt;a href=&quot;http://www.firefox.com&quot; target=&quot;_blank&quot;&gt;Firefox&lt;/a&gt; team was to improve the form history feature.  It's a feature that most people use when they fill out forms but don't even realize it.  For those of you who don't know what I'm talking about, it's the dropdown of previously submitted text that appears when typing into a form input field.  The two main improvements that I have been working on in form history (which are also known as form awesomecomplete) for Firefox 3.6 are detailed below.&lt;/p&gt;

&lt;h2&gt;Frecency Sort&lt;/h2&gt;
&lt;p&gt;For the longest time, the entries in the dropdown were sorted alphabetically, which is fine with a small number of results. When you have many saved entries that match what you've typed, an alphabetical sort doesn't help you find the ones that you are likely to use again, since ones that you use regularly are mixed in with the others you've only used once.  To make the order of results more useful and reduce the number of keypresses required to select a previous entry, I have implemented a frecency calculation to rank the results.  &lt;a href=&quot;http://en.wiktionary.org/wiki/frecency&quot; target=&quot;_blank&quot;&gt;Frecency&lt;/a&gt; is a concept that was introduced in Firefox 3 with the &quot;&lt;a href=&quot;https://developer.mozilla.org/en/Places:Awesomebar&quot; target=&quot;_blank&quot;&gt;Awesomebar&lt;/a&gt;&quot;, Firefox's smart address bar.  The term is derived from the combination of frequency and recency whereby the more often or the more recently you’ve used the entry, the higher it ranks.  Since the most relevant entries will now be at the top of the list of results, this should reduce the number of keypresses to select the entries that you use most often.&lt;/p&gt;

&lt;h2&gt;Substring Matches&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;http://matthew.noorenberghe.com/sites/matthew.noorenberghe.com/files/images/autocomplete_search_underline.png&quot; border=&quot;1&quot; hspace=&quot;5&quot; align=&quot;right&quot; alt=&quot;Autocomplete search dropdown with substring matching&quot; /&gt;Sometimes when filling out a form or typing search terms in the search bar, you may remember only a portion of the text that you previously submitted and you want to retrieve again. An example of this is when you want to repeat a previous search from the search bar such as one for &quot;location&quot;.  In the past, only previous entries that started with the text &quot;location&quot; would be displayed, and so you would not see a previous search for &quot;firefox 3.5 geolocation&quot;.  With my improvements, any text that you previously entered which contains the typed text anywhere in the entry will be displayed.  Consider another example: if you don't remember your friend's entire email address when filling out a form but you happen to remember that you filled it out in this form before and they have a Mozilla address.  Simply enter &quot;@mozilla&quot; in the text field and all email addresses for that field that contain &quot;@mozilla&quot; (ie. @mozilla.com or @mozilla.org) will be displayed.  Bonuses are given to matches that are at the beginning of a word or if they are exact prefix matches (like the previous method) so that irrelevant results that happen to contain the search text shouldn't get in the way of relevant results.  This should make finding past entries easier as you don't have to type the exact prefix.&lt;/p&gt;

For more information on the frecency algorithm used and some preferences to tweak the results, see &lt;a href=&quot;https://wiki.mozilla.org/Firefox/Namoroka/Improved_form_history&quot; target=&quot;_blank&quot;&gt;the wiki page&lt;/a&gt;.  Feel free to experiment with these features and the associated preferences and file bugs in &lt;a href=&quot;https://bugzilla.mozilla.org/enter_bug.cgi?product=Toolkit&amp;amp;component=Form%20Manager&quot; target=&quot;_blank&quot;&gt;Toolkit::Form Manager&lt;/a&gt;.</description>
	<pubDate>Mon, 03 Aug 2009 21:03:49 +0000</pubDate>
	<dc:creator>matthew</dc:creator>
</item>
<item>
	<title>James Boston: Taking another look at Mozilla Education</title>
	<guid isPermaLink="false">http://jamesboston.ca/134 at http://jamesboston.ca/cms</guid>
	<link>http://jamesboston.ca/cms/?q=node/134</link>
	<description>&lt;p&gt;Some random thoughts after talking to M___.&lt;/p&gt;
&lt;p&gt;Random thought one: Early on in designing the structure of &lt;a href=&quot;http://education.mozilla.org&quot;&gt;education.mozilla.org&lt;/a&gt;, I envisioned a big button for teachers to click that would take them directly to courseware. But that only works on a site that is focused on one discipline. Mozilla Education is for design, marketing and business people as much as it is for computer science people. Teachers and students in the same discipline are more likely to follow the same path through the site than teachers from differing disciplines. &lt;/p&gt;
&lt;p&gt;Therefore, the site devolves into different disciplines from the top level. I think this makes sense in terms of organizing content, but something is lost. One of the use cases that needs to happen is professors contributing courseware or other content. Maybe they don't host the content on education.mozilla.org, but they should be able to connect to it. What is taking shape serves students and self-learners fine, but it doesn't cover all the use cases for professors.&lt;/p&gt;
&lt;p&gt;I think think I need to go back a step and draw up some more use cases. &lt;/p&gt;
&lt;p&gt;Another random thought:  As far as computer science goes, teachers arriving at the site are in much the same position as their students. They may know everything there is to know about coding, but be Mozilla virgins. They are learners themselves. I suspect this is less the case in other disciplines. Those professors don't need info about their trade, or even Mozilla, but rather some ideas for doing what they already do in a more open source inspired way.&lt;/p&gt;
&lt;p&gt;Random thought the third: Mozilla has a kajillion different websites. Just today I learned about library.mozilla.org (unless I &lt;em&gt;was&lt;/em&gt; told and then forgot which I do a lot). I &lt;em&gt;really&lt;/em&gt; need to put together of list of resources that already exist and reach out to the people behind those resources.&lt;/p&gt;
&lt;p&gt;Last thought, not random: Regarding my earlier post on a platform other than MediaWiki for the site, the best feedback I've had is that TikiWiki is the best choice. It has the CMS and user management features that  MediaWiki lacks, but is still a good wiki. It's used for &lt;a href=&quot;http://support.mozilla.com&quot;&gt;support.mozilla.com&lt;/a&gt;, so you can see it themes nicely and there is some in house expertise.&lt;/p&gt;</description>
	<pubDate>Wed, 29 Jul 2009 22:15:35 +0000</pubDate>
	<dc:creator>James</dc:creator>
</item>
<item>
	<title>James Boston: Limitations of prototyping with a wiki</title>
	<guid isPermaLink="false">http://jamesboston.ca/133 at http://jamesboston.ca/cms</guid>
	<link>http://jamesboston.ca/cms/?q=node/133</link>
	<description>&lt;p&gt;The &lt;a href=&quot;http://education.mozilla.org/&quot;&gt;Mozilla Education&lt;/a&gt; website is being prototyped using MediaWiki, but as the content and organization part of project begins to take shape, I begin to feel the limitations of using a wiki for everything.&lt;/p&gt;
&lt;p&gt;For one thing, the website doesn't have its own living space. It co-exists with all the other content at wiki.mozilla.org. I can't install extensions or plugins that would make the site more dynamic. For instance, the map of students or the video content from the Design Challenge are limited to screen shots and links because I can't use iframes or embedded content.&lt;/p&gt;
&lt;p&gt;There's also the problem of separating public and private information. There's no conspiracy to hide data, but it would be useful to have email lists with availability restricted to various privilege levels. A wiki isn't a good tool for that.&lt;/p&gt;
&lt;p&gt;I've tested Moodle. It looks great for running courses, but it doesn't really function well as a content management system without major hacking. It can be integrated with MediaWiki, but that looks painful.&lt;/p&gt;
&lt;p&gt;I'm partial to using Drupal. It has the capability to manage users with a vast shading of roles and permissions. It works well for organizing content hierarchically. You lose the wiki markup syntax, but I think it's a reasonable tradeoff. There are wysiwyg plugins for page editing. Plus, you can lock the permissions of certain pages to certain roles very easily. It would be useful to have the main page include dynamic content through php scripting. Obviously, you can't allow php scripting that anyone can edit.&lt;/p&gt;
&lt;p&gt;I don't know if it's a worthwhile use of my remaining time on this project, but I'd like to make a mockup of how the site could look and function on Drupal.&lt;/p&gt;</description>
	<pubDate>Tue, 28 Jul 2009 20:11:30 +0000</pubDate>
	<dc:creator>James</dc:creator>
</item>
<item>
	<title>Brian Krausz: Speaking at Boston WordPress Meetup Tonight</title>
	<guid isPermaLink="false">http://nerdlife.net/?p=251</guid>
	<link>http://feedproxy.google.com/~r/nerdlife/~3/O45CMLa4-3Y/</link>
	<description>&lt;p&gt;Totally forgot to post this, but I’ll be the speaker at tonight’s (Monday July 27) &lt;a href=&quot;http://www.meetup.com/boston-wordpress-meetup/&quot;&gt;Boston WordPress Meetup&lt;/a&gt; at Microsoft’s New England R&amp;amp;D Center (1 Memorial Dr in Cambridge).  If you’re interested in hearing about WordPress plugins, or WordPress in general, feel free to show up.  Should be a blast!&lt;/p&gt;
&lt;p&gt;I’ll post my slide deck after the presentation.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/nerdlife/~4/O45CMLa4-3Y&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Mon, 27 Jul 2009 04:20:30 +0000</pubDate>
	<dc:creator>Brian</dc:creator>
</item>
<item>
	<title>Brandon Pung: Ubiquity in a Nutshell</title>
	<guid isPermaLink="false">http://www.bpung.com/blog/?p=51</guid>
	<link>http://www.bpung.com/blog/2009/07/ubiquity-in-a-nutshell/</link>
	<description>&lt;p&gt;The project I’m working on at Mozilla this summer is Ubiquity. In this post I will explain what Ubiquity is and why I am so excited about it.&lt;/p&gt;
&lt;h2&gt;&lt;strong&gt;The Problem&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;
The web is full of interesting and useful services. People access information by harnessing the power of search engines like Google, Bing, and Yahoo, as well as services like Wikipedia, Ask, and Answers. They view pictures on Flickr, watch videos on Youtube, search for restaurants on Yelp, get directions on Google Maps, discover interesting articles on Digg, and look up movies on IMDB. They stay in touch with friends through Twitter, Facebook, GMail, and more.&lt;/p&gt;
&lt;p&gt;As the number of web services that we use on a daily basis increases, so does our desire for an easy way to access all of these services at once, without having to navigate to different sites and applications. This has led to the growing popularity of mashups, in which you can interact with several web services at once. There are twitter services that allow you to update your facebook, map services that allow you to view locations on flickr, and Digg streams that integrate with the top bookmarks on Delicious. With mashups, you can use one service as a platform for harnessing the power of several separate services.&lt;/p&gt;
&lt;p&gt;However, these mashup models don’t really scale. They’re good for bringing together a few similar services, but beyond that they become cumbersome. A website that allowed the user to see their twitter, facebook and digg feeds while also displaying restaurant recommendations, movie reviews, driving routes, weather updates, and music videos would be disastrous. What we need is a fast and intuitive way to bring different web services to us when we want them and where we want them. This is where Ubiquity comes in.&lt;/p&gt;
&lt;h2&gt;&lt;strong&gt;What is Ubiquity?&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;
Ubiquity is a natural-language command line interface to the web. Ubiquity allows the user to gain access to web services and perform tasks by entering commands in a very intuitive manner. In its current form, Ubiquity is a Firefox Add-on. The Ubiquity window can be brought up using a designated keyboard shortcut.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.bpung.com/blog/wp-content/uploads/2009/07/FirefoxScreenSnapz002.jpg&quot;&gt;&lt;img src=&quot;http://www.bpung.com/blog/wp-content/uploads/2009/07/FirefoxScreenSnapz002-1024x582.jpg&quot; alt=&quot;Ubiquity Blank&quot; title=&quot;Ubiquity Blank&quot; class=&quot;alignnone size-large wp-image-59&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The user can input a command into Ubiquity using natural-language, and Ubiquity will give suggestions about what the user is trying to do based on their input. The user can then pick the suggestion which matches the action they are intending to perform, and Ubiquity will execute that action for them.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.bpung.com/blog/wp-content/uploads/2009/07/FirefoxScreenSnapz003.jpg&quot;&gt;&lt;img src=&quot;http://www.bpung.com/blog/wp-content/uploads/2009/07/FirefoxScreenSnapz003-1024x582.jpg&quot; alt=&quot;Ubiquity Map Example&quot; title=&quot;Ubiquity Map Example&quot; class=&quot;alignnone size-medium wp-image-60&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A preview of the action is displayed alongside the selected command, and pressing enter will execute the given command. In this case, it would take the user to the google maps page of the desired address, similar to what is viewable in the preview.&lt;/p&gt;
&lt;h2&gt;&lt;strong&gt;Why a Command Line?&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;
For many people, a command line interface sounds confusing. But perhaps that’s simply a result of the kinds of command line interfaces we’re used to. The confusing part of a command line interface is that you’re often unsure of what to type. This is not because you don’t know what you want, but rather because you’re unsure of what you need to input to make the system understand what it is that you want. People like graphical user interfaces because graphics can easily aid the user in seeing what they need to do to make the system perform the task they want. However, the ideal interface is one that is so simple that such guidance becomes unnecessary. The user simply tells the system what they want to do, and the system makes sense of it. I believe that this can be best served in a command line, due to the command line’s ability to scale to a very large range of requests. This is best summed up in the following quote by Aza Raskin:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;“Standard GUIs, with their drop-down menus, check buttons, and tree-lists, cannot compare to the range of options that a text interface effortlessly provides. With just five alphanumeric characters, we can choose one out of 100,000,000 possible sequences…It’s difficult to come up with a non-text-based interface that can perform as well.”&lt;/p&gt;
&lt;p&gt;–Aza Raskin, Head of User Experience at Mozilla Labs&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Thus the goal is to make a command line interface that understands natural language inputs well enough to give accurate suggestions based on the user’s intentions. If we can accomplish this, then a command line interface could prove to be far superior to a GUI for bringing web services to the user.&lt;/p&gt;
&lt;h2&gt;&lt;strong&gt;And There We Have It&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;
Ubiquity in a nutshell. I’m very excited about what the future holds for this technology, and I look forward to continuing to contribute to it. There are many questions still unanswered in the design and implementation of Ubiquity, and I will be blogging about several of them in the near future. To install the Ubiquity Firefox Add-On or learn more about the project, you can visit &lt;a href=&quot;http://ubiquity.mozilla.com/&quot;&gt;http://ubiquity.mozilla.com/&lt;/a&gt;.&lt;/p&gt;</description>
	<pubDate>Thu, 23 Jul 2009 22:50:27 +0000</pubDate>
	<dc:creator>admin</dc:creator>
</item>
<item>
	<title>Anant Narayanan: The Golden Ratio</title>
	<guid isPermaLink="false">http://www.kix.in/blog/?p=512</guid>
	<link>http://www.kix.in/blog/2009/07/the-golden-ratio/</link>
	<description>&lt;p&gt;Today we had the pleasure of having &lt;a href=&quot;http://en.wikipedia.org/wiki/Brendan_Eich&quot;&gt;Brendan Eich&lt;/a&gt; hosting a brown bag for all us interns, and he started out his talk with slides on the &lt;a href=&quot;http://en.wikipedia.org/wiki/Golden_ratio&quot;&gt;Golden Ratio&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/bmelancon/1542225093/&quot;&gt;&lt;img src=&quot;http://www.kix.in/blog/wp-content/uploads/2009/07/1542225093_cf81807648.jpg&quot; title=&quot;Shell Ratio&quot; height=&quot;333&quot; width=&quot;500&quot; alt=&quot;Shell Ratio&quot; class=&quot;size-full wp-image-513&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I did have a vague idea of what the ratio was – but today I found out a lot more about it – like how it occurs in almost every natural creation or phenomenon. The mysteriousness of the universe is very humbling. Perhaps if we used a different number system that was based on 1.6180339887 instead of 10, everything would make perfect sense…&lt;/p&gt;
&lt;p&gt;Anyway, one thing it definitely explains is my love for 16:9 screens as opposed to the old 4:3 ones &lt;img src=&quot;http://www.kix.in/blog/wp-content/plugins/smilies-themer/Silk/emoticon_wink.png&quot; alt=&quot;;)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;</description>
	<pubDate>Thu, 23 Jul 2009 06:51:55 +0000</pubDate>
	<dc:creator>Anant</dc:creator>
</item>
<item>
	<title>Brandon Pung: Mozilla Summer Internship!</title>
	<guid isPermaLink="false">http://www.bpung.com/blog/?p=14</guid>
	<link>http://www.bpung.com/blog/2009/07/mozilla-summer-internship/</link>
	<description>&lt;p&gt;This summer I’ve been working for Mozilla in Mountain View, CA. It’s been an amazing experience, and it’s all going so fast! I’m working on the Ubiquity project in Mozilla Labs (&lt;a href=&quot;http://ubiquity.mozilla.com/&quot;&gt;http://ubiquity.mozilla.com/&lt;/a&gt;). I’m really excited about the work I’ve been doing this summer, and I look forward to continuing to contribute as much as I can in my remaining weeks here. I will go into further detail about Ubiquity in my next post. For this post, I wanted to give you all a look at our headquarters here in Mountain View. Mozilla changed offices at the beginning of the summer, moving a couple miles away from its previous office which was next to Google. We are now at 650 Castro Street, which is still in Mountain View. &lt;span id=&quot;more-14&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The new office is absolutely beautiful. Functionally, it’s far superior to our old office. The conference rooms and meeting spaces are much larger, with lots of monitors, speakers, and microphones. The desk areas are also more spacious. In terms of aesthetics, it’s on a totally different scale than our old place. Everything is so sharp and refreshing. It has a fair amount of modern architectural influences, lots of glass and curvy lines.&lt;/p&gt;
&lt;p&gt;I have posted some pictures below. To see all the pictures, check out my flickr set at &lt;a href=&quot;http://bit.ly/yFnvk&quot;&gt;http://bit.ly/yFnvk&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.bpung.com/blog/wp-content/uploads/2009/07/3743529596_6d533943163.jpg&quot; title=&quot;Main Lounge / Meeting Area&quot; height=&quot;375&quot; width=&quot;500&quot; alt=&quot;Main Lounge / Meeting Area&quot; class=&quot;alignnone size-full wp-image-26&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.bpung.com/blog/wp-content/uploads/2009/07/3742737573_f6739f5c851.jpg&quot; title=&quot;Additional Lounge Seating&quot; height=&quot;375&quot; width=&quot;500&quot; alt=&quot;Additional Lounge Seating&quot; class=&quot;alignnone size-full wp-image-27&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.bpung.com/blog/wp-content/uploads/2009/07/3743529278_02475453401.jpg&quot; title=&quot;Kitchen Bar Area&quot; height=&quot;375&quot; width=&quot;500&quot; alt=&quot;Kitchen Bar Area&quot; class=&quot;alignnone size-full wp-image-29&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www.bpung.com/blog/wp-content/uploads/2009/07/3742736447_c8ca06fd3d.jpg&quot; title=&quot;One Of The Meeting Rooms&quot; height=&quot;375&quot; width=&quot;500&quot; alt=&quot;One Of The Meeting Rooms&quot; class=&quot;alignnone size-full wp-image-30&quot; /&gt;&lt;/p&gt;</description>
	<pubDate>Tue, 21 Jul 2009 23:19:44 +0000</pubDate>
	<dc:creator>admin</dc:creator>
</item>
<item>
	<title>Anant Narayanan: THIS IS MOZILLAAAAAA</title>
	<guid isPermaLink="false">http://www.kix.in/blog/?p=504</guid>
	<link>http://www.kix.in/blog/2009/07/this-is-mozillaaaaaa/</link>
	<description>&lt;p&gt;&lt;a href=&quot;http://blog.mozilla.com/sean/2009/07/17/250/&quot;&gt;Very cool&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.mozilla.com/sean/2009/07/17/250/&quot;&gt;&lt;img src=&quot;http://www.kix.in/blog/wp-content/uploads/2009/07/mozillaaaaa.png&quot; style=&quot;border: 0pt none;&quot; title=&quot;Mozillaaaaaa&quot; height=&quot;395&quot; width=&quot;450&quot; alt=&quot;Mozillaaaaaa&quot; class=&quot;size-full wp-image-509 alignleft&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description>
	<pubDate>Sat, 18 Jul 2009 05:43:54 +0000</pubDate>
	<dc:creator>Anant</dc:creator>
</item>
<item>
	<title>Anant Narayanan: Audio recording in the browser</title>
	<guid isPermaLink="false">http://www.kix.in/blog/?p=499</guid>
	<link>http://www.kix.in/blog/2009/07/audio-recording-in-the-browser/</link>
	<description>&lt;p&gt;I’m really excited to announce a new feature in &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/12025&quot;&gt;Jetpack 0.4&lt;/a&gt; – Audio Recording. “Jetpacks” can now access the microphone with just a few simple lines of Javascript:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;jetpack.future.import('audio');&lt;br /&gt;
jetpack.audio.recordToFile();&lt;br /&gt;
var path = jetpack.audio.stopRecording();&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The result is an audio file encoded in &lt;a href=&quot;http://xiph.org/vorbis/&quot;&gt;Ogg/Vorbis&lt;/a&gt;, which you can then playback with &lt;code&gt;jetpack.audio.playFile()&lt;/code&gt;, or if you choose to upload the file to a remote location, using the &lt;code&gt;&amp;lt;audio&amp;gt; &lt;/code&gt;tag.&lt;/p&gt;
&lt;p&gt;A sample Jetpack I came up with that uses this feature is &lt;a href=&quot;http://hg.mozilla.org/labs/jetpack/raw-file/tip/website/demos/audio.js&quot;&gt;Voice Memos&lt;/a&gt;. It lets you record a memo that is mapped to the page you were on when you recorded it (which is achieved using &lt;a href=&quot;https://wiki.mozilla.org/Labs/Jetpack/JEP/11&quot;&gt;Simple Storage&lt;/a&gt;), and also displays a list of recorded memos in a &lt;a href=&quot;https://wiki.mozilla.org/Labs/Jetpack/JEP/16&quot;&gt;SlideBar&lt;/a&gt;. If you revisit a page attached to a memo, you will be notified via the SlideBar.&lt;/p&gt;
&lt;p&gt;The code to achieve this was written in a couple of days, but I spent the better part of last week trying to build the component on Windows. The Mac/Linux versions seem to (mostly) run without issues, but Windows support is a little flaky at the moment. Part of the problem is that the XPCOM component dynamically links against &lt;a href=&quot;http://www.portaudio.com/&quot;&gt;portaudio&lt;/a&gt; and &lt;a href=&quot;http://www.mega-nerd.com/libsndfile/&quot;&gt;libsndfile&lt;/a&gt;, after which &lt;a href=&quot;http://en.wikipedia.org/wiki/DLL_hell&quot;&gt;DLL Hell&lt;/a&gt; ensues. We’re looking to resolve these issues in upcoming releases as well as reducing the size of the XPIs.&lt;/p&gt;
&lt;p&gt;One of my future goals is to allow raw PCM streaming rather than just recording to a file so you can do cool things like manipulating audio on the fly &lt;img src=&quot;http://www.kix.in/blog/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:-)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;p&gt;In the meantime, do play around with this feature – we’d love to know what you think! The JEP for Audio support can be found &lt;a href=&quot;https://wiki.mozilla.org/Labs/Jetpack/JEP/18&quot;&gt;here&lt;/a&gt;, and there’s a &lt;a href=&quot;http://groups.google.com/group/mozilla-labs-jetpack/topics&quot;&gt;group&lt;/a&gt; for Jetpack-related discussion.&lt;/p&gt;</description>
	<pubDate>Fri, 17 Jul 2009 07:05:13 +0000</pubDate>
	<dc:creator>Anant</dc:creator>
</item>
<item>
	<title>Brandon Pung: An Introduction</title>
	<guid isPermaLink="false">http://www.bpung.com/blog/?p=4</guid>
	<link>http://www.bpung.com/blog/2009/07/an-introduction/</link>
	<description>&lt;p&gt;I am officially starting my tech blog! I have been meaning to start this blog for quite some time, but I’ve been pretty busy since arriving in California for the summer. An introduction to the blog:&lt;/p&gt;
&lt;p&gt;The author:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MIT undergraduate major in computer science, about to start my senior year&lt;/li&gt;
&lt;li&gt;Interning for Mozilla during the summer of 2009, working on Ubiquity (&lt;a href=&quot;http://ubiquity.mozilla.com/&quot; target=&quot;_blank&quot;&gt;http://ubiquity.mozilla.com/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Interests include web design, artificial intelligence, and entrepreneurship&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In this blog, I hope to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pose open design questions I am thinking about, which currently revolve around:
&lt;ul&gt;
&lt;li&gt;Ubiquity&lt;/li&gt;
&lt;li&gt;Other Mozilla Projects&lt;/li&gt;
&lt;li&gt;General web design&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Give my opinion on new tech products&lt;/li&gt;
&lt;li&gt;Discuss the future of the web, artificial intelligence, and other interesting frontiers for technological advancement&lt;/li&gt;
&lt;/ul&gt;</description>
	<pubDate>Mon, 13 Jul 2009 00:28:43 +0000</pubDate>
	<dc:creator>admin</dc:creator>
</item>
<item>
	<title>Aaron Train: The Beauty of the Community</title>
	<guid isPermaLink="false">http://aaronmt.wordpress.com/?p=413</guid>
	<link>http://aaronmt.com/?p=413</link>
	<description>&lt;p&gt;It was only about &lt;a href=&quot;https://developer.mozilla.org/devnews/index.php/2009/06/30/aboutmozilla-3/&quot;&gt;12 days ago&lt;/a&gt; that we released &lt;a href=&quot;http://www.mozilla.com/en-US/firefox/upgrade.html&quot;&gt;Firefox 3.5&lt;/a&gt; and unveiled one of the new core features; support for the &lt;a href=&quot;http://dev.w3.org/html5/spec/Overview.html&quot;&gt;HTML5&lt;/a&gt; &amp;lt;video&amp;gt; and &amp;lt;audio&amp;gt; elements including &lt;a href=&quot;http://hacks.mozilla.org/2009/06/update-on-open-video-quality/&quot;&gt;native support for Ogg Theora&lt;/a&gt; encoded video and Vorbis encoded audio. Less than 12 days later, community members have created basic full screen support for the video element; an enhancement feature in &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=453063&quot;&gt;design phase on Bugzilla&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;That’s incredible!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://en.design-noir.de/mozilla/fullscreen-video/&quot;&gt;Full Screen Video&lt;/a&gt;, is the name of the add-on, and it adds a Full Screen option to the context menu for HTML5 videos.&lt;/p&gt;
&lt;p&gt;Cheers, ‘design-noir’&lt;/p&gt;
&lt;p&gt;Aaron&lt;/p&gt;</description>
	<pubDate>Sun, 12 Jul 2009 17:45:00 +0000</pubDate>
	<dc:creator>Aaron</dc:creator>
</item>
<item>
	<title>Adrian Kalla: Koala - Release Schedule</title>
	<guid isPermaLink="true">http://adrianer.jogger.pl/2009/07/02/koala-release-schedule/</guid>
	<link>http://adrianer.jogger.pl/2009/07/02/koala-release-schedule/</link>
	<description>&lt;p&gt;It has been a while since we announced the &lt;a href=&quot;http://koala.mozdev.org/&quot;&gt;Koala - Komodo Advanced Localization Assistant - Project&lt;/a&gt;. While we work on the project on a nearly daily basis, we are just three students that need to do other work (like preparing for the upcoming examinations...), and because of that, the progress isn't as fast as it could be, if Koala would be our only project, but: we have a target for the final release: August, 23rd - September, 15th - and we plan not to miss it.&lt;/p&gt;
&lt;p&gt;Our &lt;a href=&quot;http://hg.mozdev.org/koala/file/default/docs/other/Koala-Schedule.pdf&quot;&gt;project schedule&lt;/a&gt; is of course more detailed - it consists of four big stages: preparation, implementation, integration and stabilization. That's the process of software development we did learn at our university, and our goal is to develop Koala that way.&lt;/p&gt;
&lt;p&gt;During the first project stage, preparation, we've investigated as much as possible how Koala should work and look like, and as a result, we have written the &lt;a href=&quot;http://hg.mozdev.org/koala/file/default/docs/requirements_specifications/Koala-SRS.pdf&quot;&gt;Software Requirements Specification&lt;/a&gt; and &lt;a href=&quot;http://hg.mozdev.org/koala/file/default/docs/software_architecture/Koala-Software_Architecture.pdf&quot;&gt;Software Architecture&lt;/a&gt; documents.&lt;/p&gt;
&lt;p&gt;In the Software Requirements Specification, we've listed the must-have features and have split them into modules with similar or dependent functionalities. In the now ongoing implementation stage, we are working on that modules separately. What does this mean? We code e.g. the &quot;compare-locales&quot; access module, make a few tests to be able to test it if it works as expected - and leave it there. So it's a single module, not (yet) connected with other modules.&lt;br /&gt;
As a result of this software development model, it's not possible to have something you &quot;could touch&quot; now - there won't be anything really usable until the next phase of development.&lt;/p&gt;
&lt;p&gt;During the integration stage, we will make an working extension out of the many standalone modules. We will connect the modules through the, in the preparation stage specified, API's, one by one. It may look easier than it'll be, because this stage never comes as expected.&lt;br /&gt;
That will be also the time where we will start releasing pre-release versions of Koala: alpha and beta releases. They are to be expected late July.&lt;/p&gt;
&lt;p&gt;After getting rid of the biggest blockers, we will enter the stabilization phase, where we will just fix known bugs and look for yet undiscovered bugs, by: testing, testing and testing. Because of that, in the middle of August you can expect an release candidate (hopefully just one).&lt;/p&gt;
&lt;p&gt;The final release target is August, 23rd with a margin up to September, 15th.&lt;/p&gt;
&lt;p&gt;If you'd like to help us in any way with this project, please drop a line in the comments.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Short update: between writing this posting and publishing it, we already entered the integration stage - but because of our examination session, the integration will start at full speed not earlier than in about three weeks.&lt;/i&gt;&lt;/p&gt;</description>
	<pubDate>Thu, 02 Jul 2009 23:45:58 +0000</pubDate>
</item>
<item>
	<title>Aaron Train: A Week of Milestones</title>
	<guid isPermaLink="false">http://aaronmt.wordpress.com/?p=409</guid>
	<link>http://aaronmt.com/?p=409</link>
	<description>&lt;p&gt;In the spirit of an exciting successful week, I would like to congratulate our friends at &lt;a href=&quot;http://sourceforge.net&quot;&gt;SourceForge&lt;/a&gt; who have delivered their &lt;a href=&quot;http://blog.internetnews.com/skerner/2009/06/sourceforge-delivers-4-billion.html&quot;&gt;4,000,000,000th open source download&lt;/a&gt;. That’s &lt;a href=&quot;http://www.mozilla.com&quot;&gt;one&lt;/a&gt; &lt;a href=&quot;http://www.virtualbox.org/&quot;&gt;of&lt;/a&gt; &lt;a href=&quot;http://filezilla-project.org/&quot;&gt;a&lt;/a&gt; &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/1843&quot;&gt;few&lt;/a&gt; &lt;a href=&quot;http://filezilla-project.org/&quot;&gt;major&lt;/a&gt; open source milestones this week. &lt;em&gt;That’s a lot of downloads.&lt;/em&gt;&lt;/p&gt;</description>
	<pubDate>Thu, 02 Jul 2009 15:30:06 +0000</pubDate>
	<dc:creator>Aaron</dc:creator>
</item>
<item>
	<title>Aaron Train: Mozilla and the Future of the Internet</title>
	<guid isPermaLink="false">http://aaronmt.wordpress.com/?p=392</guid>
	<link>http://aaronmt.com/?p=392</link>
	<description>&lt;p&gt;Having just watched &lt;a href=&quot;http://www.yannarthusbertrand.org/&quot;&gt;Yann Arthus-Bertrand’s&lt;/a&gt; hymn for the planet, titled &lt;a href=&quot;http://www.youtube.com/homeproject&quot;&gt;HOME&lt;/a&gt; – an ode to the planet’s beauty and its delicate harmony, it triggered some thinking on what’s going on in the world.&lt;/p&gt;
&lt;p&gt;HOME is more than a documentary with a message, it is a magnificent movie in its own right and has an impact on anyone who sees it. It awakens in us the awareness that is needed to change the way we see the world. It embraces the major ecological issues that confront us and shows how everything on our planet is interconnected. Everything is interconnected.&lt;/p&gt;
&lt;p&gt;How can we take this means of awakening, interconnection and global &lt;span&gt;consanguinity to bring everyone together on the web?&lt;/span&gt; Can we accelerate an integrated worldview towards critical mass by opening a medium where people can see what happens when they are empowered by each other?&lt;/p&gt;
&lt;p&gt;We all want to live in a better world, and many among us are working to make that world a possibility. Improvement is achieved through ideation, innovation, cultivation and application of solutions to problems. However, due to the blindingly complex nature of the problems we currently face, equally sophisticated solutions are required. These solutions are beyond the realm of any one person or small group of people. It is the globe that faces these problems and thus it is the global mind that must develop matching solutions.&lt;/p&gt;
&lt;p&gt;There are now more links, websites, documents and files on the internet than there are synapses in a single human brain. Having reached into every attribute of human life, it is now steering the course of history.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.50x15.com/en-us/internet_usage.aspx&quot;&gt;It is estimated that over 1.5 billion individuals have access to the internet&lt;/a&gt; with user growth ever increasing in the developing world. Classified as the most capable and sophisticated tool ever developed by mankind, the internet represents the pinnacle of thousands of years of technological development.&lt;/p&gt;
&lt;p&gt;Accelerating at rapid growth at blazing speeds in development, it affirms rather than conflicts with human identify. In essence, it connects us in real and personal ways to other human beings. With higher potential beginning to reveal itself, an opportunity is presented to forge a network which interconnects those who improve our world. &lt;strong&gt;We now have the means and the wisdom to implement a system that fosters world-changing collaboration amongst the people of this planet&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;We are, without question, living in the most exciting time in human history. Human potential is expanding as technology continues to bring awareness to the great realm of our knowledge and understanding, the populace of our planet are beginning to awaken, en masse, to our true inner nature and our integrated relationship with the world around us.&lt;/p&gt;
&lt;p&gt;As the world wakens to its indissoluble oneness, we still see an escalating disarray. Fears of governmental paranoia and terrorism run amok, global economic collapse looms, and of course the earth herself is exhibiting the symptoms of feeble health.&lt;/p&gt;
&lt;p&gt;We are now at a crossroads. Despite all the incalculable knowledge available at our fingertips, we are unable to predict the days forthcoming. There comes a point when every new and competing idea is put to a test. If that idea is to be successful it must reach a critical mass.&lt;/p&gt;
&lt;p&gt;How can Mozilla and the internet of tomorrow work to accelerate an integrated worldview towards critical mass by opening a medium where people can see what happens when they are empowered by each other?&lt;/p&gt;
&lt;p&gt;- AaronMT&lt;/p&gt;</description>
	<pubDate>Sun, 28 Jun 2009 12:00:59 +0000</pubDate>
	<dc:creator>Aaron</dc:creator>
</item>
<item>
	<title>Anant Narayanan: Labs Night: Openness and Competition</title>
	<guid isPermaLink="false">http://www.kix.in/blog/?p=491</guid>
	<link>http://www.kix.in/blog/2009/06/labs-night-openness-and-competition/</link>
	<description>&lt;p&gt;Last night, &lt;a href=&quot;http://josephsmarr.com/&quot;&gt;Joseph Smarr&lt;/a&gt; from &lt;a href=&quot;http://www.plaxo.com/&quot;&gt;Plaxo&lt;/a&gt; was our guest speaker and he talked about how the “web is going social”, and how the “social web is going open”. We discussed all the elements that make up the social web today: identity providers, social web providers and content aggregators, and how each of  them are leveraging open standards and protocols such as &lt;a href=&quot;http://openid.net/&quot;&gt;OpenID&lt;/a&gt; and &lt;a href=&quot;http://oauth.net/&quot;&gt;OAuth&lt;/a&gt; to create better experiences for their users. Check out his slides &lt;a href=&quot;http://www.slideshare.net/jsmarr/the-social-web-an-implementers-guide-google-io-2009?type=presentation&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This talk was a nice prelude to some interesting discussion about the role that the browser can play in handling the user’s data and identity on their behalf. Very relevant to this was also the recent experimentation by Weave on &lt;a href=&quot;https://labs.mozilla.com/2009/05/identity-in-the-browser/&quot;&gt;identity in the browser&lt;/a&gt;, and &lt;a href=&quot;http://www.melez.com/mykzilla/&quot;&gt;Myk&lt;/a&gt; gave us a demo of the auto-sign-in features.&lt;/p&gt;
&lt;p&gt;Labs Night is also a chance for everybody to talk about cool stuff they’ve been working on, so &lt;a href=&quot;http://twitter.com/bpung/&quot;&gt;Brandon&lt;/a&gt; gave us an update on what’s new in Ubiquity 0.5. There’s some really neat stuff in there: Ubiquity is possibly one of the first pieces of software that perform truly internationalized natural language parsing (0.5 rolls out with support for Japanese and Danish). Do check out &lt;a href=&quot;https://labs.mozilla.com/2009/06/ubiquity-0-5-preview-release/&quot;&gt;this blog post&lt;/a&gt; for a detailed discussion of the features in 0.5.&lt;/p&gt;
&lt;p&gt;I followed with an update on some of the work I’ve been doing with &lt;a href=&quot;http://jetpack.mozillalabs.com/&quot;&gt;Jetpack&lt;/a&gt; – namely providing the capability for “jetpacks” to record audio. The code to enable this is checked into the &lt;a href=&quot;http://hg.mozilla.org/labs/jetpack/&quot;&gt;repository&lt;/a&gt;, but you’ll have to wait until a release later this month if you’re not feeling brave enough to build the extension from source to play around with it. I was especially interested to know the kinds of applications that might be possible with this capability, so you if you have any ideas, I’d love to hear them. Myk also gave us a demo of the new streamlined way of subscribing to feeds using &lt;a href=&quot;http://labs.mozilla.com/projects/snowl/&quot;&gt;Snowl&lt;/a&gt;, check out this &lt;a href=&quot;https://labs.mozilla.com/2009/06/snowl-0-3pre2/&quot;&gt;release announcement&lt;/a&gt; for more details on what’s new with the message reader you know you want to use!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://paulisageek.blogspot.com/&quot;&gt;Paul Tarjan&lt;/a&gt; from the Searchmonkey team at Yahoo! gave us some really cool demos demonstrating &lt;a href=&quot;http://developer.search.yahoo.com/start&quot;&gt;Searchmonkey Objects&lt;/a&gt; and &lt;a href=&quot;http://developer.yahoo.com/yql/&quot;&gt;YQL&lt;/a&gt;. I’m especially excited about YQL because it can make some of the back-end ubiquity code really simple and efficient. Incidentally, the &lt;a href=&quot;http://www.bing.com/&quot;&gt;Bing&lt;/a&gt; team was here at Mozilla just a couple of days ago and they also demoed some features similar to Searchmonkey Objects, albeit restricted to video and snippets of data for now.&lt;/p&gt;
&lt;p&gt;Search is starting to feel exciting again, a sentiment similar to one we feel in the browser space today. There’s a lot of innovation in the area outside of the &lt;a href=&quot;http://www.google.com/&quot;&gt;big daddy&lt;/a&gt;, and it is indeed heartening to see that major players in the web are beginning to recognize the importance of openness and competition &lt;img src=&quot;http://www.kix.in/blog/wp-content/plugins/smilies-themer/Silk/emoticon_smile.png&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;p&gt;Labs Nights are monthly events, so we look forward to seeing you sometime in July to discuss more cool stuff that everyone’s been working on!&lt;/p&gt;</description>
	<pubDate>Fri, 26 Jun 2009 18:50:27 +0000</pubDate>
	<dc:creator>Anant</dc:creator>
</item>
<item>
	<title>Anant Narayanan: Back for more Labs action</title>
	<guid isPermaLink="false">http://www.kix.in/blog/?p=487</guid>
	<link>http://www.kix.in/blog/2009/06/back-for-more-labs-action/</link>
	<description>&lt;p&gt;It’s been 3 weeks since I started my (second) summer internship at Mozilla Labs, and needless to say it’s been a blast! I’m continuing my work on Weave, besides helping out with the &lt;a href=&quot;http://labs.mozilla.com/projects/&quot;&gt;gamut of experiments&lt;/a&gt; that are currently running at the Labs. Weave is going to see some major strides forward in the near future, as we now have our very own Product Manager (Welcome, &lt;a href=&quot;http://twitter.com/ragavan&quot;&gt;Ragavan&lt;/a&gt;!) in addition to the awesome &lt;a href=&quot;http://steelgryphon.com/blog/&quot;&gt;Mike Connor&lt;/a&gt; joining the team &lt;img src=&quot;http://www.kix.in/blog/wp-content/plugins/smilies-themer/Silk/emoticon_smile.png&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;p&gt;Within the first week of my arrival here, Mozilla made the move to the new office, which is possibly the sweetest workplace I’ve ever seen in my life. Check out selected pictures &lt;a href=&quot;http://www.flickr.com/photos/deb-richardson/sets/72157619365961813/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There’s been the usual slew of intern activities, including, but not limited to: Canoeing, Movie nights, Birthday celebrations, &lt;a href=&quot;http://thesixtyone.com/&quot;&gt;Music discovery&lt;/a&gt;, and even a few dungeon runs on WoW &lt;img src=&quot;http://www.kix.in/blog/wp-content/plugins/smilies-themer/Silk/emoticon_wink.png&quot; alt=&quot;;)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;p&gt;Look for more posts on labsy stuff in the near future. Peace!&lt;/p&gt;</description>
	<pubDate>Thu, 25 Jun 2009 06:18:07 +0000</pubDate>
	<dc:creator>Anant</dc:creator>
</item>
<item>
	<title>David Tran: Hello Mozilla!</title>
	<guid isPermaLink="true">http://feedproxy.google.com/~r/dtran/~3/GdS-HqUnyOQ/</guid>
	<link>http://feedproxy.google.com/~r/dtran/~3/GdS-HqUnyOQ/</link>
	<description>&lt;br /&gt;&lt;p&gt;Hey everyone, I’m David, an IT/Ops Tools intern at Mozilla this summer. I will be entering my senior year (wow, those first three went by fast) at Stanford University in the fall and am looking forward to RA-ing in Gavilan (woo)!&lt;/p&gt;
&lt;p&gt;Anyway, I am finishing up my second week here and having an amazing time so far! I have been working on the Mozilla Status Dashboard. Think something similar to &lt;a href=&quot;http://www.google.com/appsstatus#hl=en&quot; target=&quot;_blank&quot; title=&quot;Google App Status Dashboard&quot;&gt;Google’s Apps Status Dashboard&lt;/a&gt; and &lt;a href=&quot;http://status.aws.amazon.com/&quot; target=&quot;_blank&quot; title=&quot;Amazon Web Service Dashboard&quot;&gt;Amazon’s Web Services Dashboard&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I think services, especially web services, are increasingly putting an emphasis on transparency – when something’s wrong, they want their users to know what’s going on. In this day and age, nothing should be a black box anymore – making information available and easily accessible to users both makes IT’s job easier as well as acknowledges that users are intelligent and web-savvy. In that vein, Mozilla is really in a special situation with its relationship to the community and open source developers that allows us to share things that most corporations would not.&lt;/p&gt;
&lt;p&gt;With that in mind, I present the initial mockup for the Mozilla Status Dashboard 0.0.0.0.1, which temporarily lives at &lt;a href=&quot;http://mozdash.doesntexist.com/&quot; target=&quot;_blank&quot; title=&quot;Mozilla Dashboard&quot;&gt;http://mozdash.doesntexist.com/&lt;/a&gt;. &lt;strong&gt;Just to be clear, it’s currently hooked up to DUMMY DATA and does not represent the actual current status of these services&lt;/strong&gt;, with the exception of the response time charts for &lt;a href=&quot;http://addons.mozilla.org&quot; target=&quot;_blank&quot; title=&quot;Addons&quot;&gt;http://addons.mozilla.org&lt;/a&gt; and &lt;a href=&quot;http://www.mozilla.com&quot; target=&quot;_blank&quot; title=&quot;Mozilla&quot;&gt;http://www.mozilla.com&lt;/a&gt;. In the spirit of being open, I warmly welcome any feedback that anyone has for this project – what status information about Mozilla services would you like to see? What would be useful to as part of the Mozilla community? When we’re constantly being inundated with information from Facebook, Twitter, and RSS feeds, at what point does too much of a good thing (information) become a burden? I’d love to hear your thoughts in the comments below.&lt;/p&gt;
  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/dtran320.wordpress.com/1/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/dtran320.wordpress.com/1/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/dtran320.wordpress.com/1/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/delicious/dtran320.wordpress.com/1/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/dtran320.wordpress.com/1/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/stumble/dtran320.wordpress.com/1/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/dtran320.wordpress.com/1/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/digg/dtran320.wordpress.com/1/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/dtran320.wordpress.com/1/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/reddit/dtran320.wordpress.com/1/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;http://stats.wordpress.com/b.gif?host=dtran320.wordpress.com&amp;amp;blog=8286103&amp;amp;post=1&amp;amp;subd=dtran320&amp;amp;ref=&amp;amp;feed=1&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;</description>
	<pubDate>Tue, 23 Jun 2009 00:01:28 +0000</pubDate>
	<dc:creator>dtran320</dc:creator>
</item>
<item>
	<title>David Tran: Hello Mozilla!</title>
	<guid isPermaLink="true">http://dtran320.wordpress.com/2009/06/23/hello-world/</guid>
	<link>http://dtran320.wordpress.com/2009/06/23/hello-world/</link>
	<description>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;Hey everyone, I’m David, an IT/Ops Tools intern at Mozilla this summer. I will be entering my senior year (wow, those first three went by fast) at Stanford University in the fall and am looking forward to RA-ing in Gavilan (woo)!&lt;/p&gt;
&lt;p&gt;Anyway, I am finishing up my second week here and having an amazing time so far! I have been working on the Mozilla Status Dashboard. Think something similar to &lt;a href=&quot;http://www.google.com/appsstatus#hl=en&quot; target=&quot;_blank&quot; title=&quot;Google App Status Dashboard&quot;&gt;Google’s Apps Status Dashboard&lt;/a&gt; and &lt;a href=&quot;http://status.aws.amazon.com/&quot; target=&quot;_blank&quot; title=&quot;Amazon Web Service Dashboard&quot;&gt;Amazon’s Web Services Dashboard&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I think services, especially web services, are increasingly putting an emphasis on transparency – when something’s wrong, they want their users to know what’s going on. In this day and age, nothing should be a black box anymore – making information available and easily accessible to users both makes IT’s job easier as well as acknowledges that users are intelligent and web-savvy. In that vein, Mozilla is really in a special situation with its relationship to the community and open source developers that allows us to share things that most corporations would not.&lt;/p&gt;
&lt;p&gt;With that in mind, I present the initial mockup for the Mozilla Status Dashboard 0.0.0.0.1, which temporarily lives at &lt;a href=&quot;http://mozdash.doesntexist.com/&quot; target=&quot;_blank&quot; title=&quot;Mozilla Dashboard&quot;&gt;http://mozdash.doesntexist.com/&lt;/a&gt;. &lt;strong&gt;Just to be clear, it’s currently hooked up to DUMMY DATA and does not represent the actual current status of these services&lt;/strong&gt;, with the exception of the response time charts for &lt;a href=&quot;http://addons.mozilla.org&quot; target=&quot;_blank&quot; title=&quot;Addons&quot;&gt;http://addons.mozilla.org&lt;/a&gt; and &lt;a href=&quot;http://www.mozilla.com&quot; target=&quot;_blank&quot; title=&quot;Mozilla&quot;&gt;http://www.mozilla.com&lt;/a&gt;. In the spirit of being open, I warmly welcome any feedback that anyone has for this project – what status information about Mozilla services would you like to see? What would be useful to as part of the Mozilla community? When we’re constantly being inundated with information from Facebook, Twitter, and RSS feeds, at what point does too much of a good thing (information) become a burden? I’d love to hear your thoughts in the comments below.&lt;/p&gt;
  &lt;a href=&quot;http://feeds.wordpress.com/1.0/gocomments/dtran320.wordpress.com/1/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/comments/dtran320.wordpress.com/1/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godelicious/dtran320.wordpress.com/1/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/delicious/dtran320.wordpress.com/1/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/gostumble/dtran320.wordpress.com/1/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/stumble/dtran320.wordpress.com/1/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/godigg/dtran320.wordpress.com/1/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/digg/dtran320.wordpress.com/1/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.wordpress.com/1.0/goreddit/dtran320.wordpress.com/1/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://feeds.wordpress.com/1.0/reddit/dtran320.wordpress.com/1/&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;http://stats.wordpress.com/b.gif?host=dtran320.wordpress.com&amp;amp;blog=8286103&amp;amp;post=1&amp;amp;subd=dtran320&amp;amp;ref=&amp;amp;feed=1&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Tue, 23 Jun 2009 00:01:28 +0000</pubDate>
	<dc:creator>dtran320</dc:creator>
</item>
<item>
	<title>Aaron Train: The Open Web with HTML5 Video &amp; Firefox 3.5</title>
	<guid isPermaLink="false">http://aaronmt.wordpress.com/?p=396</guid>
	<link>http://aaronmt.com/?p=396</link>
	<description>&lt;p&gt;Each day, it is becoming more and more evident that the Open Web and the technology of tomorrow is expanding and blossoming into beautifully crafted future Internet.&lt;/p&gt;
&lt;p&gt;As Firefox 3.5 is rounding the track towards the finish line, I can’t help but put my personal focus on that of HTML5 video. Firefox’s implementation of the HTML5 video API accompanied with royalty-free codecs, fundamentally progress the movement towards bringing an open video to the web.&lt;/p&gt;
&lt;p&gt;HTML5 video truly is fascinating stuff, as &lt;a href=&quot;http://tinyvid.tv/show/2y70e2x53lfgl&quot;&gt;Mike Beltzner explains&lt;/a&gt;, gone are the days of static videos played on static pages. With HTML5 video, we can treat video’s  like web pages – which makes sense in a dynamic web.&lt;/p&gt;
&lt;p&gt;These past few weeks, I have been progressively &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=496152&quot;&gt;focused&lt;/a&gt; – &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=497182&quot;&gt;eye&lt;/a&gt;-&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=496456&quot;&gt;to&lt;/a&gt;-&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=495866&quot;&gt;eye&lt;/a&gt; with trying to dig deep and unveil any remaining issues and it has been fun.&lt;/p&gt;
&lt;p&gt;It’s been a real treat observing the progression from &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=382267&quot;&gt;design&lt;/a&gt; to &lt;a href=&quot;http://www.dailymotion.com/openvideodemo&quot;&gt;implementation&lt;/a&gt; of this feature and can’t wait to see it ship with Firefox 3.5 and how it will grow in the near future.&lt;/p&gt;
&lt;p&gt;Tomorrow is a MoCo company wide internal test of Firefox 3.5 Preview Release, let’s work together to iron out any hidden creases in HTML5 video, and across the entire board in order to bring forth the next iteration of the browser by the people for the people, they deserve it!&lt;/p&gt;
&lt;p&gt;Cheers,&lt;/p&gt;
&lt;p&gt;Aaron Train (AaronMT)&lt;/p&gt;</description>
	<pubDate>Thu, 11 Jun 2009 03:20:08 +0000</pubDate>
	<dc:creator>Aaron</dc:creator>
</item>
<item>
	<title>Brian Krausz: On Spriting and Website Build Processes</title>
	<guid isPermaLink="false">http://nerdlife.net/?p=243</guid>
	<link>http://feedproxy.google.com/~r/nerdlife/~3/gSGuj2OEOME/</link>
	<description>&lt;p&gt;Ryan, my mentor from when I was at MoCo, wrote an excellent article on &lt;a href=&quot;http://blog.mozilla.com/webdev/2009/03/27/css-spriting-tips/&quot;&gt;spriting&lt;/a&gt; a few days ago.  Man, I miss all the good conversations…that’s what I get for not subscribing to the webdev feed.  That’s all changed now.&lt;/p&gt;
&lt;p&gt;I have an interesting history with spriting.  For both of my internships (Mozilla and Yahoo), one of my first projects was to sprite sites (&lt;a href=&quot;http://addons.mozilla.org&quot;&gt;AMO&lt;/a&gt; &amp;amp; &lt;a href=&quot;http://realestate.yahoo.com&quot;&gt;Yahoo! Real Estate&lt;/a&gt;, respectively).  AMO is still using my work (for now), and YRE long ago gave up on rounded corners, and have few icons now, so spriting is more or less useless for them now.&lt;/p&gt;
&lt;p&gt;I guess that qualifies me to weigh in a bit.  I’m not going to talk about the memory usage or anything on the client-side past delivery for two reasons.  First: size in RAM has a tiny impact on page-loads compared to downloading for most users.  Second: I’m horrible unqualified to talk about how web browsers load and store images in ram.  Not my field.&lt;/p&gt;
&lt;p&gt;There are some issues (many fixable) with spriting:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In both instances of spriting I got an email a few months after I left the company asking me where my source sprite file was located.  Once it was due to me not putting the file in the right place, but the fact still remains that a source sprite file is one more thing to lose, and losing it is pretty annoying.&lt;/li&gt;
&lt;li&gt;Not everyone knows how to compress images properly.  If you do it wrong, you’ll end up with a huge PNG file that is worse than a bunch of small files.&lt;/li&gt;
&lt;li&gt;Spriting removes any connection between CSS styles and the images they are associated with.  If I want to know what a class with a background image looks like, I have to either find a reference to it on the site, or figure out where the hell -123px -72px is.  It’s more or less obfuscating your CSS.&lt;/li&gt;
&lt;li&gt;repeat-x or repeat-y images need to span the whole width/height of the sprite…they should have their own sprite files (if you have enough of them)&lt;/li&gt;
&lt;li&gt;Like Ryan said, images that are supposed to be near the left of an element (i.e. they need an arbitrary amount of space to the right of them) should be at the right side of the sprite.  This makes an internationalized site that supports right-to-left text (an insanely difficult thing to achieve, and something which many MoCo sites do impressively well) much more difficult.  It’s very frustrating to discover halfway through that your sprites show up wrong in RTL.  Not many sites need to worry about this, but it’s annoying if you do.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With that being said, spriting can be useful when done properly.  A very good example is how Yahoo Mail sprites.  They group similarly-size things in a file.  They have an &lt;a href=&quot;http://mail.yimg.com/a/i/us/pim/pimstrip_22.png&quot;&gt;icon file&lt;/a&gt;, a &lt;a href=&quot;http://mail.yimg.com/a/i/us/pim/th/el/shared/rcstrip_blue_05.png&quot;&gt;rounded corners file&lt;/a&gt;, etc.  This makes things easier to manage, but still suffers from some of the above issues.&lt;/p&gt;
&lt;p&gt;I don’t know how Yahoo’s build process works, but to make sprites worth it I would propose some kind of CSS build step.  Ideally all the developer would have to do is specify which images are displayed which ways (whether there needs to be whitespace to the left, right, top, or bottom), and the system will build the sprite and generate a complied CSS file that is minimized and concatenated.&lt;/p&gt;
&lt;p&gt;AMO’s &lt;a href=&quot;http://svn.mozilla.org/addons/trunk/bin/build.py&quot;&gt;build process&lt;/a&gt; got halfway there.  It was originally a shell script written by yours truly, converted to python by &lt;a href=&quot;http://fredericiana.com/&quot;&gt;FWenzel&lt;/a&gt;.  The shell script is described &lt;a href=&quot;https://wiki.mozilla.org/Update:Build_Process&quot;&gt;here&lt;/a&gt; (the python script is essentially the same).  It concatenates a bunch of files, compresses them with &lt;a href=&quot;http://developer.yahoo.com/yui/compressor/&quot;&gt;YUI Compressor&lt;/a&gt;, and creates a PHP file with the current revision numbers (to append to the URL for &lt;a href=&quot;http://developer.yahoo.net/blog/archives/2007/05/high_performanc_2.html&quot;&gt;long expires headers&lt;/a&gt;).  Pretty standard web build system.&lt;/p&gt;
&lt;p&gt;I’d really love to see a system that also parses out background*: rows with comments at the end (identifying what type of spriting should be done), places them, replaces the URL, and adds a background-position.  That, combined with AMO’s build process, would allow an algorithm to determine what’s best for download times vs. memory usage.&lt;/p&gt;
&lt;p&gt;The best part: an automated system would easily allow bucket tests on load times based on different sprite files.  Now wouldn’t that be useful?&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/nerdlife/~4/gSGuj2OEOME&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Wed, 03 Jun 2009 06:11:06 +0000</pubDate>
	<dc:creator>Brian</dc:creator>
</item>
<item>
	<title>James Boston: Mapping EdMo (again)</title>
	<guid isPermaLink="false">http://jamesboston.ca/131 at http://jamesboston.ca/cms</guid>
	<link>http://jamesboston.ca/cms/?q=node/131</link>
	<description>&lt;p&gt;I've received some feedback on my &lt;a href=&quot;http://jamesboston.ca/cms/?q=node/129&quot;&gt;last attempt&lt;/a&gt; at creating a straw man info architecture for the &lt;a href=&quot;https://wiki.mozilla.org/Education&quot;&gt;Mozilla Education&lt;/a&gt; site.&lt;/p&gt;
&lt;p&gt;Some of the criticism:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mixes up high level and low level pages at the same depth in the hierarchy.&lt;/li&gt;
&lt;li&gt;Separating high level paths for teachers and students doesn't make sense. For instance, teachers are more likely to identify with students who share their area of study than with teachers in other fields.&lt;/li&gt;
&lt;li&gt;Serves only one constituency. Computer science students.&lt;/li&gt;
&lt;li&gt;Works for the Seneca College model of teaching Mozilla, but maybe not other schools. Universities, for instance, may be looking for more info about research projects.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For the revision, there needs to be three things on the front page:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;an overview that explains what Mozilla Education is&lt;/li&gt;
&lt;li&gt;a path for people to contact us or get involved&lt;/li&gt;
&lt;li&gt;links to orientation pages for various disciplines&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hence this top level view (click for larger view):&lt;br /&gt;
&lt;a style=&quot;border: none !important;&quot; href=&quot;https://wiki.mozilla.org/images/1/11/Edmo_diagram_overview.png&quot;&gt;&lt;img src=&quot;http://jamesboston.ca/misc/180px-Edmo_diagram_overview.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;At the moment, I don't have a clear idea of how non-coders will be served, but the &lt;a href=&quot;http://design-challenge.mozilla.com/summer09/&quot;&gt;Design Challenge&lt;/a&gt; is an example of something that would be linked to.&lt;/p&gt;
&lt;p&gt;As far as  coders go, their section would expand out as follows:&lt;br /&gt;
&lt;a style=&quot;border: none !important;&quot; href=&quot;https://wiki.mozilla.org/images/e/e5/Edmo_diagram_compsci.png&quot;&gt;&lt;img src=&quot;http://jamesboston.ca/misc/180px-Edmo_diagram_compsci.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In the above example, I follow one path to it's terminus, &quot;Using XPCOM interfaces&quot;, but all the topics listed would similarly expand.&lt;/p&gt;
&lt;p&gt;In addition to this, there is one more diagram about collaboration. This would be common to all all disciplines and would attach to the overview page for each.&lt;br /&gt;
&lt;a style=&quot;border: none !important;&quot; href=&quot;https://wiki.mozilla.org/images/2/2d/Edmo_diagram_collaboration.png&quot;&gt;&lt;img src=&quot;http://jamesboston.ca/misc/180px-Edmo_diagram_collaboration.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description>
	<pubDate>Tue, 02 Jun 2009 19:55:53 +0000</pubDate>
	<dc:creator>James</dc:creator>
</item>
<item>
	<title>Brian Krausz: Why YouTube Can’t Cost $1.65M a Day</title>
	<guid isPermaLink="false">http://nerdlife.net/?p=238</guid>
	<link>http://feedproxy.google.com/~r/nerdlife/~3/bddFen0KgL0/</link>
	<description>&lt;p&gt;I know I’m a little late on the bandwagon, but I’m sick of seeing articles claiming Google is losing so much money from YouTube.  They’re based on estimates that I find a little absurd.  &lt;/p&gt;
&lt;p&gt;Let’s take just one example - &lt;a href=&quot;http://www.internetevolution.com/author.asp?section_id=715&amp;amp;doc_id=175123&amp;amp;&quot;&gt;http://www.internetevolution.com/author.asp?section_id=715&amp;amp;doc_id=175123&amp;amp;&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; I’m going to use low-ball estimates to guess where Google stands.  I am by no means a professional when it comes to estimating this, or even educated in such things, but I feel like Google has so many tricks up their sleeves that I have only slightly less credibility than Credit Suisse or Bear Stearns.  I repeat: &lt;strong&gt;I am making up numbers&lt;/strong&gt;&lt;/p&gt;
&lt;h5&gt;Bandwidth&lt;/h5&gt;
&lt;p&gt;Maybe I’m not understanding something here, but from what I know a mutually beneficial peering agreement doesn’t require paying for anything other than labor or hardware.  ISPs don’t want to provide users with fast internet without having it bounce around too many places, as does Google.  Assuming Google has a datacenter close enough to every major ISP to just peer to them (not unreasonable), their only potential non-labor cost is communication between their datacenters.  &lt;strong&gt;But wait!&lt;/strong&gt; Hasn’t Google been &lt;a href=&quot;http://www.google.com/search?q=google+dark+fiber&quot;&gt;buying up dark fiber left and right&lt;/a&gt;?  That means their costs are adding additional capacity and redundancy, plus network maintenance (hardware and labor).  Like I said, I’m not a hardware guy, but knowing people who owned datacenters, this is how I understood it.  Please call me stupid if I’m wrong, but I’m going to cut this down to $10,000 (~$3.5M/year).&lt;/p&gt;
&lt;h5&gt;Revenue Share&lt;/h5&gt;
&lt;p&gt;This one’s just BS…they’re counting “making less money” as an expense.  Sure, it’s less money, but that’s a little misrepresenting, no?  Plus, I assume the estimating companies already took this into account. $0&lt;/p&gt;
&lt;h5&gt;Content Acquisition&lt;/h5&gt;
&lt;p&gt;Google isn’t dump…I doubt they’re putting themselves in the red solely on content costs.  Media companies also get a huge amount of exposure from being on YouTube that they can’t get anywhere else (Excluding TV shows and Hulu, but YouTube mostly deals in music videos anyway).  So let’s cut this in half and say $360,000 (~$131/year, a lot of clams, and generous in my opinion!).&lt;/p&gt;
&lt;h5&gt;Hardware&lt;/h5&gt;
&lt;p&gt;“Given market estimates of about $2 per gigabyte”.  Really?  Google is famous for using off-the-shelf hardware.  I can buy a 1TB HDD for $100, and I’m not buying a million of them.  I’m not saying this quote isn’t accurate when you account for electricity, cooling, redundancy, etc, but Google is &lt;a href=&quot;http://www.google.com/corporate/green/datacenters/&quot;&gt;far above the average&lt;/a&gt; for all of these, so I feel like using a market estimate is unfair.  I’m gonna cut this in half, so $18,000 (~$6.5M/year).&lt;/p&gt;
&lt;h5&gt;New Results&lt;/h5&gt;
&lt;p&gt;Let’s calculate Google’s break-even point for YouTube:&lt;/p&gt;
&lt;table&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;th&gt;Bandwidth&lt;/th&gt;
&lt;td&gt;$10,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Content Acquisition&lt;/th&gt;
&lt;td&gt;$360,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Revenue Share&lt;/th&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Hardware&lt;/th&gt;
&lt;td&gt;$18,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Subtotal&lt;/th&gt;
&lt;td&gt;$388,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Administrative Costs&lt;/th&gt;
&lt;td&gt;38.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Math!&lt;/th&gt;
&lt;td&gt;x*(1-.384)-388000=0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Break-even Revenue&lt;/th&gt;
&lt;td&gt;x=$629,870&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Now I’m not saying that Google is definitely making money off of YouTube, but $630K/day is less than Credit Suisse estimates Google’s daily revenue at, so it’s entirely possible they’re in the black.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/nerdlife/~4/bddFen0KgL0&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Fri, 29 May 2009 07:38:42 +0000</pubDate>
	<dc:creator>Brian</dc:creator>
</item>
<item>
	<title>James Boston: Mozilla Education diagram unveiled</title>
	<guid isPermaLink="false">http://jamesboston.ca/129 at http://jamesboston.ca/cms</guid>
	<link>http://jamesboston.ca/cms/?q=node/129</link>
	<description>&lt;p&gt;In &lt;a href=&quot;http://jamesboston.ca/cms/?q=node/128&quot;&gt;a previous post&lt;/a&gt; I wrote:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
One of the goals of &lt;a href=&quot;http://education.mozilla.org&quot;&gt;EdMo&lt;/a&gt; should be lowering the barrier for contributing back to Mozilla. The material we are producing is something that teachers and students can take and use anyway they find useful. But how can we make it easier for them to feed back into the project?&lt;/p&gt;
&lt;p&gt;One way is for EdMo to be a place like the Ubuntu Community Documentation that invites contribution.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Some people liked that idea. &lt;em&gt;However&lt;/em&gt;, developers have made it clear to me that more places for documentation are not wanted by them. I agree. There must be no duplication of MDC and anything that properly belongs on MDC should go there.&lt;/p&gt;
&lt;p&gt;So what does belong on EdMo? &lt;/p&gt;
&lt;div style=&quot;float: right; padding: 15px;&quot;&gt;
&lt;a href=&quot;https://wiki.mozilla.org/images/8/86/Edmo_diagram.png&quot;&gt;&lt;img src=&quot;http://jamesboston.ca/misc/93px-Edmo_diagram.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Big picture narratives&lt;/strong&gt;&lt;br /&gt;
Because of it's scale, MDC doesn't necessarily work well as an introductory text. For instance, if you go to &lt;a href=&quot;https://developer.mozilla.org/En/Participating_in_the_Mozilla_project&quot;&gt;Participating in the Mozilla project&lt;/a&gt; page the list of tools is a bit confusing for the beginner. The Tinderbox link goes straight to Tinderbox, and the link to an MDC page underneath leads to a mostly empty &lt;a href=&quot;https://developer.mozilla.org/en/Tinderbox&quot;&gt;cupboard&lt;/a&gt;. Newcomers need to know why they would care about Tinderbox.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Learning modules&lt;/strong&gt;&lt;br /&gt;
Think of teachable units revolving around a task that needs to be completed rather than something purely reference oriented. In some (most?) cases, this will be a curated way of getting into MDC or other documentation. &lt;/p&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;p&gt;I've put together a long chart trying to describe how Mozilla Education will be organized. Every box maps to a page. However, some pages near the bottom of the hierarchy could be joined or split. What's more important is their connections. &lt;/p&gt;
&lt;p&gt;I'm sure that I've forgotten XYZ topic, and I'm glad to hear suggestions. But I'm more interested to hear if the the overall structure makes sense, if you would know intuitively where a new topic should be plugged in.&lt;/p&gt;
&lt;p&gt;The landing page leads into six major tasks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Teaching using Mozilla&lt;/li&gt;
&lt;li&gt;Connecting the various schools involved&lt;/li&gt;
&lt;li&gt;Connecting the students from different schools&lt;/li&gt;
&lt;li&gt;Learning how to hack Mozilla code&lt;/li&gt;
&lt;li&gt;Learning how to get help from the Mozilla community (and give back)&lt;/li&gt;
&lt;li&gt;Getting involved with EdMo as Mozillan (is that a word?)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Following each of these tasks leads to an overview of what you need to accomplish those tasks. And digging deeper takes you the learning units. I haven't show links to external references in all units to avoid clutter.&lt;/p&gt;
&lt;p&gt;All comments and criticism welcome.&lt;/p&gt;</description>
	<pubDate>Fri, 29 May 2009 02:45:09 +0000</pubDate>
	<dc:creator>James</dc:creator>
</item>
<item>
	<title>Pejman Pour-Moezzi: the unexamined life</title>
	<guid isPermaLink="false">http://www.pourmoezzi.com/?p=83</guid>
	<link>http://feedproxy.google.com/~r/pejmanjohn/~3/rDPPReTc9qo/</link>
	<description>&lt;blockquote&gt;&lt;p&gt;“There is a secret bond between slowness and memory, between speed and forgetting. Consider this utterly commonplace situation: A man is walking down the street. At a certain moment, he tries to recall something, but the recollection escapes him. Automatically, he slows down. Meanwhile, a person who wants to forget a disagreeable incident he has just lived through starts unconsciously to speed up his pace, as if he were trying to distance himself from a thing still too close to him in time.&lt;/p&gt;
&lt;p&gt;In existential mathematics, that experience takes the form of two basic equations: the degree of slowness is directly proportional to the intensity of memory; the degree of speed is directly proportional to the intensity of forgetting.”&lt;br /&gt;
- Milan Kundera, Slowness&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I was leafing through my copy of &lt;a href=&quot;http://www.amazon.com/Big-Issues-Examined-Life-Digital/dp/0471414913/ref=sr_1_2?ie=UTF8&amp;amp;s=books&amp;amp;qid=1243108428&amp;amp;sr=8-2&quot; target=&quot;_self&quot;&gt;Big Issues: The Examined Life in a Digital Age&lt;/a&gt; the other night and was struck by this quote. Owen Edwards excerpts this in his essay “Remembrance of Things Fast” in which he critiques the speed with which we live in the modern era. Some call it “social acceleration” and when pushed to its limit it is characterized by the acceleration of change such that experiences blur and memories vanish.&lt;/p&gt;
&lt;p&gt;Edwards wrote the essay in 2001. If then he was anxious, today he must be utterly overwhelmed. In many ways, the internet has gone from mere accessory to displacing the world that built it. Bits are replacing atoms at an alarming rate. In 2008 alone, the world created 487 billion gigabytes of information (&lt;a href=&quot;http://blogs.wsj.com/digits/2009/05/18/the-exploding-digital-universe/&quot;&gt;up 73% from 2007&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;This is both beautiful and terrifying. The internet is the great democratizer, unlocking information and making it accessible to anyone that can plug in. It proliferates on the principle that there is virtually no cost in participation. It is that paradoxical book shelf that can accommodate seemingly infinite books at little to no marginal cost. But while the economics can justify an infinite stream of information, something must be said of the psychological implications. Today, amidst the flurry of activity that is one’s inbox, mobile phone, tweets, and web apps, many are overstepping the line of hyper-productivity. In a world of one-to-many communications, simply keeping up with the stream at times requires super-human capabilities. Which is really to say that we’re going too fast.&lt;/p&gt;
&lt;p&gt;The internet opened up a landscape of unfathomable possibilities. And here we are at the foot of the New World, itching to grab all we can. The new Manifest Destiny is reaching the end of the internet. And with every new bit consumed and new level of productivity, we experience more but retain less. The new thesis is 140 characters long. It’s delivered in real-time and flashes across the screen and our minds in a matter of seconds. The phone is buzzing, the browser several tabs deep. unread emails number into the hundreds.  We are awash in all of it. The answer is in your sigh, in your closed eyes and refrain. The key isn’t more information. It’s more focus.&lt;/p&gt;
&lt;p&gt;Slow down.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/pejmanjohn/~4/rDPPReTc9qo&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Sun, 24 May 2009 00:18:30 +0000</pubDate>
	<dc:creator>Pejman</dc:creator>
</item>
<item>
	<title>James Boston: Brainstorming with profs about Mozilla Education</title>
	<guid isPermaLink="false">http://jamesboston.ca/128 at http://jamesboston.ca/cms</guid>
	<link>http://jamesboston.ca/cms/?q=node/128</link>
	<description>&lt;p&gt;An interesting round of meetings surrounding &lt;a href=&quot;http://education.mozilla.org&quot; rel=&quot;nofollow&quot;&gt;Mozilla Education&lt;/a&gt; this week. At the start of the week, professors from a diverse collection schools joined the &lt;a href=&quot;https://wiki.mozilla.org/Education/StatusMeetings/2009-05-19&quot; rel=&quot;nofollow&quot;&gt;weekly conference call&lt;/a&gt;. On Thursday, some professors came into the Mozilla Toronto office for further discussions.&lt;/p&gt;
&lt;p&gt;There were some high level discussions and some nuts and bolts discussions about using Mozilla in the classroom. Here's my completely non-comprehensive observations of issues raised in no particular order and being of unassigned value.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Research versus applied schools&lt;/strong&gt;&lt;br /&gt;
Institutions that produce primary research (universities) will approach open source in the classroom room differently from institutions that do not (community colleges, polytechnicals).&lt;/p&gt;
&lt;p&gt;Working with open source may be easier for colleges. The emphasis on practical skills and finding student placements in industry connects to open source organically. Colleges may not realize this yet, but it makes sense.&lt;/p&gt;
&lt;p&gt;Universities have more of a theoretical focus. More importantly, professors have a research focus. How can working with Mozilla further that research and create value for Mozilla? Developers and researchers need to find an alignment of self-interest.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Being like the community&lt;/strong&gt;&lt;br /&gt;
The methodologies used to teach should map to the methodologies used in open source (ie. using Mozilla's tools and not creating your own parallel universe). Not doing things the way the community you are engaging with does can lead to working in isolation. This is a novel way of working for teachers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Inviting contribution&lt;/strong&gt;&lt;br /&gt;
One of the goals of &lt;a href=&quot;http://education.mozilla.org&quot; rel=&quot;nofollow&quot;&gt;EdMo&lt;/a&gt; should be lowering the barrier for contributing back to Mozilla. The material we are producing is something that teachers and students can take and use anyway they find useful. But how can we make it easier for them to feed back into the project?&lt;/p&gt;
&lt;p&gt;One way is for EdMo to be a place like the &lt;a href=&quot;https://help.ubuntu.com/community&quot; rel=&quot;nofollow&quot;&gt;Ubuntu Community Documentation&lt;/a&gt; that invites contribution. &lt;a rel=&quot;nofollow&quot;&gt;DevMo&lt;/a&gt; is a great reference source, but it's not a place for random how-to pages. Changing DevMo is not unlike changing the Mozilla source code. There's a sense of changes being reviewed to see if they belong.&lt;/p&gt;
&lt;p&gt;EdMo could be a place where people create the kind of documentation that doesn't belong on DevMo. (It's important to create something that will be used by the wider community and not duplicate something that already exists.)&lt;/p&gt;
&lt;p&gt;There are some important differences between Ubuntu and Mozilla. The Ubuntu docs are process oriented. (eg., how to install a LAMP server). Only a portion of Mozilla documentation is about duplicating a process with expected results (eg. building source).&lt;/p&gt;</description>
	<pubDate>Fri, 22 May 2009 21:30:21 +0000</pubDate>
	<dc:creator>James</dc:creator>
</item>
<item>
	<title>James Boston: nsIProcess2: The Awakening</title>
	<guid isPermaLink="false">http://jamesboston.ca/127 at http://jamesboston.ca/cms</guid>
	<link>http://jamesboston.ca/cms/?q=node/127</link>
	<description>&lt;p&gt;People have been asking me for a status update on nsIProcess. Here's the scoop.&lt;/p&gt;
&lt;p&gt;If you want to follow along the best place to bookmark is the project wiki page:&lt;br /&gt;
&lt;a href=&quot;http://zenit.senecac.on.ca/wiki/index.php/User:Jamesboston/nsIProcess&quot;&gt;http://zenit.senecac.on.ca/wiki/index.php/User:Jamesboston/nsIProcess&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The other place to look is the mercurial server that I use to publish code:&lt;br /&gt;
&lt;a href=&quot;http://hg.jamesboston.ca/mozilla/nsiprocess&quot;&gt;http://hg.jamesboston.ca/mozilla/nsiprocess&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you want a plain text patch containing all the changes from trunk visit:&lt;br /&gt;
&lt;a href=&quot;http://jamesboston.ca/misc/patch.cgi&quot;&gt;http://jamesboston.ca/misc/patch.cgi&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I will push code there every Sunday at the very least. For now I am working on top of revision 28222 of mozilla-central.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;http://hg.jamesboston.ca/index.cgi/mozilla/nsiprocess/rev/486dc1f38b37&quot;&gt;first push&lt;/a&gt; is a jsm file with a simple wrapper for nsIProcess. I've never written a js module before so I wanted to figure that out first. I've piggy backed on the Makefile for a few existing jsm files, but doubt that js/src/xpconnect/loader is best place for the file. However, it will be a trivial task to relocate it later when it wraps nsIProcess2.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;http://hg.jamesboston.ca/index.cgi/mozilla/nsiprocess/rev/8ede87952a05&quot;&gt;next push&lt;/a&gt; creates the skeleton necessary for implementing nsIProcess2. I've started with the &lt;a href=&quot;https://wiki.mozilla.org/NsIProcess&quot;&gt;proposed API&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Now all I have to do is fill in the code that does stuff.&lt;/em&gt;&lt;/p&gt;</description>
	<pubDate>Tue, 19 May 2009 04:26:00 +0000</pubDate>
	<dc:creator>James</dc:creator>
</item>
<item>
	<title>James Boston: Use twitter from irssi</title>
	<guid isPermaLink="false">http://jamesboston.ca/126 at http://jamesboston.ca/cms</guid>
	<link>http://jamesboston.ca/cms/?q=node/126</link>
	<description>&lt;p&gt;If you don't know about the magic of &lt;a href=&quot;http://www.gnu.org/software/screen/&quot;&gt;screen&lt;/a&gt; + &lt;a href=&quot;http://irssi.org/&quot;&gt;irssi&lt;/a&gt; this probably won't interest. (We don't want your kind around here anyway.)&lt;/p&gt;
&lt;p&gt;I've written an irssi script to work with Twitter. It allows you to send and receive tweets from irssi.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Instructions:&lt;/strong&gt;&lt;br /&gt;
Install the perl module Net::Twitter. On Fedora you would do it like so:&lt;br /&gt;
&lt;/p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;div style=&quot;font-family: monospace;&quot; class=&quot;text geshifilter-text&quot;&gt;$ yum install perl-CPAN&lt;br /&gt;
$ cpan&lt;br /&gt;
cpan&amp;gt; install Net::Twitter &lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Download this script twitter.pl:&lt;br /&gt;
&lt;a href=&quot;http://hg.jamesboston.ca/index.cgi/irssi/twitter/archive/tip.zip&quot;&gt;twitter.pl [zip]&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Edit the script with your own twitter credentials.&lt;/p&gt;
&lt;p&gt;Put it in your ~/.irssi/scripts folder.&lt;/p&gt;
&lt;p&gt;In irssi load the script:&lt;br /&gt;
&lt;/p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;div style=&quot;font-family: monospace;&quot; class=&quot;text geshifilter-text&quot;&gt;/script load twitter.pl&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;To send a twitter:&lt;br /&gt;
&lt;/p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;div style=&quot;font-family: monospace;&quot; class=&quot;text geshifilter-text&quot;&gt;/twitter Hey, I'm a tweeting fool.&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Tweets from people you are following appear in your current window in a typical irc style, but prepended with the text &quot;tweet:&quot; like this:&lt;br /&gt;
&lt;/p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;div style=&quot;font-family: monospace;&quot; class=&quot;text geshifilter-text&quot;&gt;&amp;lt;mhoye&amp;gt; tweet: Someday, my daughter will say &quot;My dad says that pink is the thin, pale colour of the blood of my weakest enemies.&quot;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The tweets you send and receive are not visible to the channel. Only you (and your twitter followers) see them.&lt;/p&gt;
&lt;p&gt;If you want to submit a patch the development version is here:&lt;br /&gt;
&lt;a href=&quot;http://hg.jamesboston.ca/irssi/twitter/&quot;&gt;http://hg.jamesboston.ca/irssi/twitter/&lt;/a&gt;&lt;/p&gt;</description>
	<pubDate>Sun, 17 May 2009 01:56:12 +0000</pubDate>
	<dc:creator>James</dc:creator>
        <enclosure url="http://hg.jamesboston.ca/index.cgi/irssi/twitter/archive/tip.zip" length="" type="text/html"/>
</item>
<item>
	<title>Nino D'Aversa: JavaScript Error Console for Fennec</title>
	<guid isPermaLink="false">http://www.ndaversa.com/?p=389</guid>
	<link>http://www.ndaversa.com/2009/05/14/javascript-error-console-for-fennec/</link>
	<description>&lt;div style=&quot;width: 260px;&quot; id=&quot;attachment_390&quot; class=&quot;wp-caption alignleft&quot;&gt;&lt;a href=&quot;http://www.ndaversa.com/wp-content/uploads/2009/05/picture-1.png&quot;&gt;&lt;img src=&quot;http://www.ndaversa.com/wp-content/uploads/2009/05/picture-1-250x164.png&quot; title=&quot;JavaScript Error Console on Fennec&quot; height=&quot;164&quot; width=&quot;250&quot; alt=&quot;JavaScript Error Console on Fennec&quot; class=&quot;size-medium wp-image-390&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot;&gt;JavaScript Error Console on Fennec&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;This week as the mobile guys finalize the alpha for Windows Mobile I have busied myself with &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=492883&quot;&gt;adding the JavaScript console to Fennec&lt;/a&gt;. Both Mark, Doug and Brad had expressed interest in the feature and it sounded like a nice chunk of work to keep me productive while the other guys concentrated on pushing out the alpha. I have a &lt;a href=&quot;https://bug492883.bugzilla.mozilla.org/attachment.cgi?id=377555&quot;&gt;WIP patch up&lt;/a&gt;. I still need to spruce up the warning and error rows to more completely represent the data, however the whole console (filter and evaluation) currently functions just like the desktop version.&lt;/p&gt;
&lt;p&gt;It has been very interesting to move away from C++ and into XUL and JavaScript. I have enjoyed being outside my comfort zone and lucky enough to have Mark right over my shoulder to help me along the way. I plan to spend some time reading my JavaScript book and XUL tutorials on the road to LA this weekend.&lt;/p&gt;
&lt;p&gt;The second week here at Mozilla is somehow even better then the first. I enjoyed going out with the mobile team last night to take in some dinner and movie (Star Trek), it was nerdtacular. I’m lucky to be here and I don’t plan on forgetting that anytime soon.&lt;/p&gt;</description>
	<pubDate>Thu, 14 May 2009 23:11:28 +0000</pubDate>
	<dc:creator>Nino D'Aversa</dc:creator>
</item>
<item>
	<title>James Boston: EdMo big picture revision</title>
	<guid isPermaLink="false">http://jamesboston.ca/125 at http://jamesboston.ca/cms</guid>
	<link>http://jamesboston.ca/cms/?q=node/125</link>
	<description>&lt;p&gt;I revised the &lt;a href=&quot;https://wiki.mozilla.org/Education&quot;&gt;Mozilla Education&lt;/a&gt; front page today. Some information that was previously located one or two links into the site is now the first thing you read. The intro section focuses on the big picture of bringing open source methods into the classroom.&lt;/p&gt;
&lt;p&gt;I've also added a new section beneath the site introduction called &quot;Mozilla in the Classroom&quot;. It still needs to be fleshed out with more detail, but the I think that explaining how teachers are going to use/benefit from partnering with Mozilla needs to be explained in a separate unit from the big picture. I think I may steal some information from the &lt;a href=&quot;https://wiki.mozilla.org/Education/EduCourse/CaseStudies&quot;&gt;case studies&lt;/a&gt; page.&lt;/p&gt;
&lt;p&gt;I've put together a page for my notes on an info architecture for the site:&lt;br /&gt;
&lt;a href=&quot;https://wiki.mozilla.org/User:Jamesboston/InfoArchitecture&quot; title=&quot;https://wiki.mozilla.org/User:Jamesboston/InfoArchitecture&quot;&gt;https://wiki.mozilla.org/User:Jamesboston/InfoArchitecture&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;One of the products of that is the addition of a site map. When you organize the site map according to the existing naming conventions, the site is easier to understand. But if you look at the how the site is &lt;a href=&quot;https://wiki.mozilla.org/User:Jamesboston/InfoArchitecture#Strawman_Information_Architecture&quot;&gt;navigated by links&lt;/a&gt; instead, it is harder to understand. &lt;/p&gt;
&lt;p&gt;What this tells me is that it is easier to group pages by content than it is to find paths through that content. But the latter problem needs to be solved.&lt;/p&gt;</description>
	<pubDate>Thu, 14 May 2009 22:43:13 +0000</pubDate>
	<dc:creator>James</dc:creator>
</item>

</channel>
</rss>
