<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Xulforge Blog &#187; add-on</title>
	<atom:link href="http://xulforge.com/blog/tag/add-on/feed/" rel="self" type="application/rss+xml" />
	<link>http://xulforge.com/blog</link>
	<description>Xulforge projects, code, and more</description>
	<lastBuildDate>Fri, 03 Feb 2012 21:02:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>My experience porting an add-on to Mobile Firefox</title>
		<link>http://xulforge.com/blog/2011/10/porting-an-add-on-to-mobile/</link>
		<comments>http://xulforge.com/blog/2011/10/porting-an-add-on-to-mobile/#comments</comments>
		<pubDate>Sat, 08 Oct 2011 00:44:47 +0000</pubDate>
		<dc:creator>jorge</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[add-on]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[remotexulmanager]]></category>
		<category><![CDATA[xulforge]]></category>

		<guid isPermaLink="false">http://xulforge.com/blog/?p=112</guid>
		<description><![CDATA[I&#8217;ve been meaning to experiment more with Mobile Firefox for a while, but I&#8217;ve had very little time to work on my own add-ons, which are the best source of real-world development experience for me. Since I had received a couple of requests to port Remote XUL Manager to mobile, and this is a fairly [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been meaning to experiment more with Mobile Firefox for a while, but I&#8217;ve had very little time to work on my own add-ons, which are the best source of real-world development experience for me. Since I had received a couple of requests to port <a href="https://addons.mozilla.org/en-US/firefox/addon/remote-xul-manager/">Remote XUL Manager</a> to mobile, and this is a fairly simple extension, I thought this would be the ideal learning experience.</p>
<p>Since I already had a working desktop extension, the amount of coding needed was <a href="https://github.com/jvillalobos/Remote-XUL-Manager/commit/e33f34e680224204abcb3c12e49828d145406be9">fairly small</a>. However, I did encounter several difficulties along the way, which I think are worth documenting. Here&#8217;s how it went.</p>
<h2>Documentation</h2>
<p>The first thing I looked for was documentation. It&#8217;s not hard to find the <a href="https://developer.mozilla.org/en/mobile">Mobile documentation</a> page if you know that the Mozilla Developer Network exists. That&#8217;s a good hub with useful tidbits, although it could use some cleanup and consolidation. Many of its useful links lead to the Mozilla wiki, outside of MDN, and they are written in the format you expect for the wiki, not MDN. The <a href="https://wiki.mozilla.org/Mobile/Fennec/Extensions">Fennec Extensions page</a> covers some of the basics, but it fails to say how to create a basic overlay. Something many developers need to know to get started is which chrome path is necessary to overlay. I believe it&#8217;s the same path as in Firefox, but I ended up not using an overlay at all.</p>
<h2>UI</h2>
<p>Figuring out the UI for my port was one of the most difficult steps. In Firefox I just add a menu item that opens the main management window. My extension also has a few extra windows for advanced features, but early on I decided not to support them in the mobile version.</p>
<p>The only UI area you really have available is the content, so I decided to create an <em>about:remotexul</em> XUL page. This requires registering a JS component instead of an overlay, and the component just tells Firefox to redirect <em>about:remotexul</em> to a XUL page in my chrome package. So, instead of clicking on a menu item, the user has to type this URL. Not terribly user-friendly, but not that bad either. I considered adding a button somewhere, but gave up almost immediately.</p>
<p>Which leads me to a few questions about mobile add-on development. Firstly, how can we expect add-ons to be built for mobile if there is no place for them in the UI? Do we only want add-ons that work silently in the content? And (more importantly IMO) are we applying the same philosophy for tablets? It seems that, at least in terms of add-ons and UI space, mobile phones and tablets are entirely different playgrounds.</p>
<p>My take on it is that we need an Add-on Bar for both. The panel on the right-hand side can afford one more button, and this button could toggle another panel where add-on buttons can live. A similar approach could be used for tablets, but in their case I think the toolbar could be enabled by default (provided it has buttons in it). Having no way to add UI is a gigantic obstacle in the way of add-on creation for mobile. The possibility of improving performance through more native UI toolkits is also a looming obstacle that we&#8217;ll need to tackle.</p>
<p>As a minor side note, I noticed some drawing oddities when panning my XUL document in the content area. I guess XUL content hasn&#8217;t been given enough attention on mobile, so if you want to take this same approach, you might want to consider using HTML instead.</p>
<h2>Testing environment</h2>
<p>Getting Mobile Firefox set up was much more difficult than I expected.</p>
<p>Since there&#8217;s a desktop emulator of Mobile Firefox and I didn&#8217;t have any supporting mobile devices at the moment, this was my only way to test. So I went to the main <a href="http://www.mozilla.org/en-US/mobile/">Mobile page</a> to download the emulator. Oddly enough, this page offered (and continues to offer) version 4.0.1, which is a few releases old by now. The &#8220;See all our channels&#8221; link takes you to the desktop Firefox channels page, and changing <em>firefox</em> for <em>mobile</em> in the URL leads to a 404.  So I downloaded 4.0.1, and one of the first things I tried was to check for updates. There were none.</p>
<p>Hmm, ok, so I needed to do a little hunting for the emulator. Luckily, the MDN page has a direct link to the <a href="https://ftp.mozilla.org/pub/mozilla.org/mobile/releases/">FTP site</a>, with all builds for all platforms. So I downloaded the Mobile Firefox 6 emulator for Mac OS. I fired it up and everything looks OK until I try to load a page. Any page turns up blank. So I go to the #mobile channel on IRC and ask around. I am told to use Linux instead&#8230; But I also got a useful <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=670763">bug link</a>. It turns out that the switch to multiple processes for Mobile Firefox broke the Mac OS build, and I guess it&#8217;s not such a big priority to get that sorted out. I suppose that this bug will get more attention once desktop Firefox goes multi-process for content.</p>
<p>At this point I realized I was going the <em>about:</em> page route for the UI, so I was able to test and debug most of the port in desktop Firefox. Then the Mozilla All Hands came along and I got a new Asus Android tablet for testing, so no more emulation for me <img src='http://xulforge.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>The build-install-test cycle was really slow for me, though, since the easiest way to get the extension installed is to upload it to some public URL and install it using InstallTrigger (a bit of JS magic used to install add-ons from HTML). If you can use the emulator in your system, though, file:// URLs work fine as a shortcut.</p>
<h2>Tools</h2>
<p>I also felt the lack of development tools, some of which are key to add-on development.</p>
<p>I commonly used the <a href="https://developer.mozilla.org/en/Toolkit_API/FUEL">FUEL library</a> in my add-ons. Since it isn&#8217;t supported on mobile, I had to get rid of that code. Luckily, it wasn&#8217;t much I needed to change. There is ongoing work to port Jetpack to mobile, so that will probably become the best set of libraries available for add-ons in the future. For now I&#8217;ll just plug to components directly.</p>
<p>DOM Inspector is another tool I use heavily. But, is it even possible to have something like DOMi on mobile? Maybe on the tablet version, but certainly not on a phone&#8230; However, I think there are ways around this. It should be possible to integrate DOMi into the emulator. You can have it open in a separate window and inspect the mobile UI from there. Another random idea I have is to wrap the Mobile Firefox emulator as an extension you can install in desktop Firefox, so you get the benefits of all development tools that are already part of Firefox. I&#8217;m not sure if that&#8217;s feasible, though.</p>
<h2>Conclusions</h2>
<p>There are still many rough edges when diving into mobile add-ons for Firefox, some of which I think are not hard to fix. But there are also hard problems to solve, and hard questions to ask: does it make sense to support such a wide variety of add-ons in a mobile phone browser? And what about tablets?</p>
<p>This is an almost exhaustive list of the problems I encountered while porting my add-on, so I hope it isn&#8217;t taken the wrong way. The truth is that most of my code worked without any modifications. It is very satisfying to be able to support even more users of my add-on, and to have one of the few desktop+mobile add-ons around. Plus, tinkering around with code, failing and then succeeding is just plain fun <img src='http://xulforge.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>Remote XUL Manager 1.1 is the first version that supports mobile, and it&#8217;s currently waiting to be reviewed (irony!). You can give it a try on <a href="https://addons.mozilla.org/en-US/firefox/addon/remote-xul-manager/versions/?page=1#version-1.1">this page</a>.</p>
<p>I&#8217;d love to hear what others have to say about trying to port add-ons to mobile. If you have any similar stories, please share them in the comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://xulforge.com/blog/2011/10/porting-an-add-on-to-mobile/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Keeping add-ons compatible in the rapid release process</title>
		<link>http://xulforge.com/blog/2011/08/keeping-add-ons-compatible-in-rapid-release/</link>
		<comments>http://xulforge.com/blog/2011/08/keeping-add-ons-compatible-in-rapid-release/#comments</comments>
		<pubDate>Tue, 30 Aug 2011 20:35:11 +0000</pubDate>
		<dc:creator>jorge</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[add-on]]></category>
		<category><![CDATA[amo]]></category>
		<category><![CDATA[compatiblity]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[newsgroups]]></category>
		<category><![CDATA[rapid releases]]></category>

		<guid isPermaLink="false">http://xulforge.com/blog/?p=106</guid>
		<description><![CDATA[I began this discussion in the newsgroups today. Keeping add-ons compatible in the rapid release process. It is mostly aimed at Mozilla developers, but this should interest add-on developers just the same. We&#8217;re establishing a better system to communicate breaking changes, which should make it easier and quicker to identify what needs to be added [...]]]></description>
			<content:encoded><![CDATA[<p>I began this discussion in the newsgroups today. <a href="http://groups.google.com/group/mozilla.dev.planning/browse_thread/thread/dafd0bc59b587e27">Keeping add-ons compatible in the rapid release process</a>. It is mostly aimed at Mozilla developers, but this should interest add-on developers just the same. We&#8217;re establishing a better system to communicate breaking changes, which should make it easier and quicker to identify what needs to be added to the compatibility validator for the automatic version bumps.</p>
<p><a href="http://groups.google.com/group/mozilla.dev.planning/browse_thread/thread/dafd0bc59b587e27">Discuss!</a></p>
]]></content:encoded>
			<wfw:commentRss>http://xulforge.com/blog/2011/08/keeping-add-ons-compatible-in-rapid-release/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Running multiple Firefox instances on Mac OS</title>
		<link>http://xulforge.com/blog/2011/07/multiple-firefox-instances-mac/</link>
		<comments>http://xulforge.com/blog/2011/07/multiple-firefox-instances-mac/#comments</comments>
		<pubDate>Fri, 22 Jul 2011 00:38:58 +0000</pubDate>
		<dc:creator>jorge</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[add-on]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[mac os]]></category>
		<category><![CDATA[mozilla]]></category>

		<guid isPermaLink="false">http://xulforge.com/blog/?p=102</guid>
		<description><![CDATA[I visit my Google Plus Stream every now and then to see if there&#8217;s anything useful in it. Unsurprisingly, most of the time there isn&#8217;t anything. I blame primitive filtering and lack of users. But one thing that caught my eye was a post by sheppy, asking about running multiple versions of Firefox easily. While [...]]]></description>
			<content:encoded><![CDATA[<p>I visit my Google Plus Stream every now and then to see if there&#8217;s anything useful in it. Unsurprisingly, most of the time there isn&#8217;t anything. I blame primitive filtering and lack of users. But one thing that caught my eye was a post by sheppy, asking about running multiple versions of Firefox easily. While most add-on developers should have little problem with this, it&#8217;s kinda tricky to get this right on Mac OS. The lack of the &#8220;shortcut&#8221; concept is problematic, so running a matrix of multiple Firefox profiles and multiple Firefox versions (at the same time) can be troublesome. Specially now that we have <a href="http://www.mozilla.com/en-US/firefox/channel/">multiple channels</a> instead of &#8220;what we have&#8221; and &#8220;what&#8217;s coming&#8221;. Here&#8217;s what I do.</p>
<p>I use the Automator application that is part of all default Mac OS installations. This is a tool that allows you to create automated tasks, as you might have guessed. Then I do something like this:</p>
<ol>
<li>Open Automator.</li>
<li>Choose the Application template.</li>
<li>From the long list in the second column, double click on Run Shell Script. This will add a box on the main panel, with a text input.</li>
<li>Enter this: <em>/Applications/${APPLICATION}.app/Contents/MacOS/firefox-bin -P ${PROFILE} &gt; /dev/null &amp;</em></li>
<li>Replace ${APPLICATION} with the name of the application you want to run (Firefox, Aurora, Nightly, etc.). Replace ${PROFILE} with the name of the profile you want to run, or leave it blank to open the profile manager.</li>
<li>(Optional) Replace /dev/null with a file path to save the console output to a file.</li>
<li>Save the application to the Desktop.</li>
</ol>
<p>That&#8217;s it. You now have a Windows-style shortcut that opens a specific application and profile combination. Repeat as necessary and you&#8217;ll have all the shortcuts you need, which you can open in parallel (except opening the same profile with multiple applications, which would be a bad idea). My desktop has a matrix of profiles and applications that are very convenient for my testing needs. You may want to have them in the dock or elsewhere, but that&#8217;s a matter of preference. You can also change their icon, which is not really worthwhile IMO.</p>
<p>You can copy and paste applications and then open them in Automator to edit their parameters. You need to open Automator and then choose the Open option, there&#8217;s no contextual edit option, which is a bit of an annoyance.</p>
<p>If anybody has a different system to deal with this on Mac OS, I&#8217;d love to hear it.</p>
]]></content:encoded>
			<wfw:commentRss>http://xulforge.com/blog/2011/07/multiple-firefox-instances-mac/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Version numbers and add-on breakage</title>
		<link>http://xulforge.com/blog/2011/07/version-numbers-add-on-breakage/</link>
		<comments>http://xulforge.com/blog/2011/07/version-numbers-add-on-breakage/#comments</comments>
		<pubDate>Tue, 12 Jul 2011 15:46:42 +0000</pubDate>
		<dc:creator>jorge</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[add-on]]></category>
		<category><![CDATA[amo]]></category>
		<category><![CDATA[jetpack]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[rant]]></category>

		<guid isPermaLink="false">http://xulforge.com/blog/?p=99</guid>
		<description><![CDATA[Gerv started a fairly intense discussion about the new rapid release cycle, from the perspective of browser versions and their meaning. As expected, many have replied that the discussion is silly and version numbers are meaningless. This is true for most software developers, and it should be true for most web developers. In software, we [...]]]></description>
			<content:encoded><![CDATA[<p>Gerv started a <a href="http://weblogs.mozillazine.org/gerv/archives/2011/07/firefox_version_numbers_cognitive_disson.html">fairly intense discussion</a> about the new rapid release cycle, from the perspective of browser versions and their meaning. As expected, many have replied that the discussion is silly and version numbers are meaningless. This is true for most software developers, and it should be true for most web developers. In software, we have been learning that version numbers have been hijacked by marketing and we shouldn&#8217;t pay that much attention to them from the technical perspective. We have branches and revision ids for that anyway. On the web, what should matter are the features the browser offers, not the browser itself or its version. Browser and version detection are frowned upon, and most web devs worth their salt avoid it when possible.</p>
<p>People saying that this discussion is pointless neglect that Firefox is one more thing. It&#8217;s a <em>platform</em>, and most add-on developers rely on it. Version numbers matter to add-on developers because the add-on compatibility system relies on application version, not features. And since the features are pretty much every access point in the platform, doing feature detection is not realistic. So, if you&#8217;re an add-on developer and you want to keep your add-on up to date, you&#8217;ll have to test and increase its compatibility every six weeks, potentially having to make code changes.</p>
<p>On AMO, we have implemented a system where we automatically detect which add-ons are compatible with the latest Aurora version (the version that is between 12 and 6 weeks from release) and then upgrade those that do. All developers for the tested add-ons should get an email explaining their add-on was upgraded, and if not, why. This has been fairly successful, and we have a <a href="https://addons.mozilla.org/en-US/firefox/compatibility">high compatibility percentage</a> (relative to usage) at the moment (it&#8217;s even higher if you ignore the .NET Assistant, which could be compatible now). However, there are still many popular add-ons that aren&#8217;t compatible, specially those hosted elsewhere. And the burden on those who develop add-ons with binary components is pretty much constant, because they&#8217;ll have to update their add-ons every 6 weeks, with no exception.</p>
<p>So, while only a small percentage of add-on usage consists of add-ons that are incompatible (hovering something between 10% and 20%, I think), the probability that one of our add-on users has <em>at least</em> one incompatible add-on is even higher. And having to roll the dice every 6 weeks and see if your add-ons are compatible or not puts a great deal of stress and dissatisfaction on users. And like Colin Coghill comments in Gerv&#8217;s post:</p>
<blockquote><p>If add-ons break randomly every few weeks, effectively FF no longer has add-ons.</p></blockquote>
<p>Version numbers have a real impact on our users then, and they should be taken very seriously. Now, would the previous releases have worked as minor version increases? I think so, yes. The breaking compatibility changes have been fairly minor so far, with the exception of binary add-ons. Even if we hadn&#8217;t done any communication about it, I&#8217;m fairly sure that the problems would have gone mostly unnoticed, by both developers and users. Of course, that&#8217;s only because so far the changes have been minor. This shouldn&#8217;t be the case for every release, and that&#8217;s a big concern. For example, Firefox 7 will <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=645922">remove a couple of JSON parser functions</a> that are heavily used by add-on developers. We&#8217;ll see how that goes.</p>
<p>So, what are the alternatives? There are a number of proposals, with their own advantages and limitations. I personally think that going back to the initial idea or 3 month-long tracks (instead of 6 weeks) would be a major improvement. Nils Maier (author of DownThemAll!) has a very detailed proposal in the comments on Gerv&#8217;s blog (unfortunately, I can&#8217;t link to the comment directly), which consists of having planned minor and major releases, where major releases happen only twice a year. I like that one as well.</p>
<p>As usual, I expected this be a short post and then it grew into a monster. Oh well. I&#8217;ll close by saying that we&#8217;re working on a number of ideas to make this release cycle as smooth and stress-free as possible to add-on developers. Most releases will change nothing you care about, so you shouldn&#8217;t need to worry about it. I strongly recommend all of you to track the <a href="http://blog.mozilla.com/addons/">Add-ons Blog</a>, which is becoming an increasingly important source for updates. I also recommend that you give the <a href="https://addons.mozilla.org/en-US/developers/">Add-on SDK</a> a shot. If your add-on can be implemented using the SDK, it&#8217;s better for you that it is.</p>
]]></content:encoded>
			<wfw:commentRss>http://xulforge.com/blog/2011/07/version-numbers-add-on-breakage/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
		<item>
		<title>Projects update</title>
		<link>http://xulforge.com/blog/2011/03/projects-update/</link>
		<comments>http://xulforge.com/blog/2011/03/projects-update/#comments</comments>
		<pubDate>Thu, 17 Mar 2011 01:24:17 +0000</pubDate>
		<dc:creator>jorge</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[add-on]]></category>
		<category><![CDATA[editors]]></category>
		<category><![CDATA[fire.fm]]></category>
		<category><![CDATA[gsoc]]></category>
		<category><![CDATA[idea]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[pneuma]]></category>
		<category><![CDATA[projects]]></category>

		<guid isPermaLink="false">http://xulforge.com/blog/?p=85</guid>
		<description><![CDATA[Since I haven&#8217;t blogged here for quite a while, I thought it&#8217;d be good to do the mandatory WordPress version update and then post a little update on the side projects I&#8217;m currently working on: Remote XUL Manager has taken most of my spare time. It&#8217;s been exciting just because it&#8217;s a fairly new project [...]]]></description>
			<content:encoded><![CDATA[<p>Since I haven&#8217;t blogged here for quite a while, I thought it&#8217;d be good to do the mandatory WordPress version update and then post a little update on the side projects I&#8217;m currently working on:</p>
<ul>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/remote-xul-manager/">Remote XUL Manager</a> has taken most of my spare time. It&#8217;s been exciting just because it&#8217;s a fairly new project and it had a pretty well-defined goal, which was reached only a few days ago. Version 1.0 was released on March 10th, and it does every I planned for this add-on to do. There are a couple of feature requests that I will consider in due time, but they&#8217;re pretty minor and I&#8217;m satisfied with the current state of this project.</li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/firefm/">Fire.fm</a> has taken the back seat. In the past few months all we&#8217;ve done is update locales, clean up some code, and push a few bug fixes (and then fixes on the fixes, and so on&#8230;). We have some plans for version 1.5, but it&#8217;s getting harder and harder to find the time for this. Specially because Last.fm keeps closing down their service and that has a very negative effect on my motivation. If it weren&#8217;t for the people that still use it &#8211; close to 200K &#8211; I would have abandoned this add-on a long time ago.</li>
<li>My <a href="http://xulforge.com/blog/2010/05/add-on-manifests-revisited-wiki/">Add-on Packaging Proposal</a> for the Google Summer of Code never gained any traction. Unfortunately the project was abandoned by the student assigned to it, so the whole idea stalled and was discarded. Now I&#8217;ve been approached by somebody who is interested in working on it. That&#8217;s very encouraging, but I need to give this some thought. I&#8217;ve been planning on reviewing the whole spec and giving it an overhaul based on all the stuff that has changed with Firefox 4 and the feedback I received. I&#8217;ll post here when (and if) I have an updated draft.</li>
<li>The band I help as Executive Producer, <a href="http://pneumametal.com/">Pneuma</a>, has had a great deal of success locally, and they&#8217;re getting ready to tour Mexico and Europe. It&#8217;s very exciting times for them and I&#8217;m glad to be a part of this.</li>
</ul>
<p>It&#8217;s been crazy times for me and the AMO Editor team. We had a very successful competition that yielded a incredible throughput and over 2500 reviews by the top 4 winners alone. And yet we&#8217;re still swamped with review submissions due to the upcoming Firefox 4 launch and the <a href="http://blog.mozilla.com/addons/2011/02/17/sandboxed-add-ons-disabled-next-week/">mass disabling of sandboxed add-ons</a>, which resulted in a great deal of new submissions of old add-ons.</p>
<p>I have a bunch of ideas for new add-ons that I wish I had the time to work on. For now, I just write them down on my Someday list and wait <img src='http://xulforge.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://xulforge.com/blog/2011/03/projects-update/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>XPI v2 &#8211; Making Extension Development Easier</title>
		<link>http://xulforge.com/blog/2010/03/xpi-v2-making-ext-dev-easier/</link>
		<comments>http://xulforge.com/blog/2010/03/xpi-v2-making-ext-dev-easier/#comments</comments>
		<pubDate>Tue, 23 Mar 2010 18:16:19 +0000</pubDate>
		<dc:creator>jorge</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[add-on]]></category>
		<category><![CDATA[amo]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[idea]]></category>
		<category><![CDATA[jetpack]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[xulschool]]></category>

		<guid isPermaLink="false">http://xulforge.com/blog/2010/03/xpi-v2-making-extension-development-easier/</guid>
		<description><![CDATA[Note: this is just me throwing some ideas around. It is not an official proposal or spec. Having said that, I would like everyone that has interest in extension development to read this post and tell me what they think. I’ve been an extension developer for a long time, and I like to think that [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Note:</strong> this is just me throwing some ideas around. It is not an official proposal or spec. Having said that, I would like everyone that has interest in extension development to read this post and tell me what they think.</p>
<p>I’ve been an extension developer for a long time, and I like to think that developing extensions is actually quite easy. Maybe it has to do with my C++/Java background, where setting up a development environment is much more involved than using a text editor and zipping some files together.<br />
That doesn’t negate the fact that the Mozilla add-ons platform is old, and showing its age. There are a number of problems with it that make it hard to take the first steps into add-on development, and it’s amazing how little has been done to solve them over the past years. These are the top 3 in my mind:</p>
<ul style="list-style-type: disc;">
<li>Extensions can’t be installed or uninstalled without a browser restart.
<ul style="list-style-type: hyphen;">
<li>That’s <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=256509">bug 256509</a>. Can it be fixed? Probably, but it would take a major development effort.</li>
</ul>
</li>
<li>The documentation about extension development is incomplete or outdated.
<ul style="list-style-type: hyphen;">
<li>I’m working on this in the <a href="https://developer.mozilla.org/en/XUL_School">XUL School</a> project, to be finished soon.</li>
</ul>
</li>
<li>Getting started with a basic “hello world” extension is too much effort: install.rdf, chrome.manifest, chrome JAR, content, skin, locale, defaults, OMG!</li>
</ul>
<p>The last point is the one I want to tackle in this post. There’s a ridiculous amount of boilerplate, redundant coding to do even for the most basic of add-ons, specially if you’re making an extension that should be skinable and localizable. These are the specific problems I’ve identified:</p>
<ul style="list-style-type: disc;">
<li>There are two manifest files: install.rdf and chrome.manifest, in completely different formats.</li>
<li>They are both defined in relatively obscure formats. The install.rdf file is one of the very few places where RDF is still used in Firefox. Sticking to a dying format (at least in this context) is a very bad idea.</li>
<li>The default chrome structure (with content, locale, skin, etc.) is too bureaucratic and inflexible, and almost completely redundant. Most add-ons have exactly the same structure, and having to define it every single time is unnecessary.</li>
</ul>
<p>I think we can reimagine add-on packaging in way that simple tasks can be performed in the simplest of ways, and so that it can scale to be as fine-tuned as it is today. So here are my ideas.<strong>#1 Merge install.rdf and chrome.manifest into a single file.</strong> What format should be used? I think JSON is as good as any other, and Mozilla already includes a native and very fast JSON parser. This manifest file could also match the <a href="https://jetpack.mozillalabs.com/sdk/0.1/docs/#guide/packaging">package.json manifests</a> being used for Jetpacks. <em>package.json</em> is actually a pretty good name for the manifest file. Perhaps the same standard can be use for Jetpacks and other add-ons?</p>
<p><strong>#2 Default to the root extension directory for chrome URLs in order to minimize chrome.manifest declarations.</strong> This means that a hello world extension could have this structure:</p>
<ul>
<li> helloworld.xpi2
<ul>
<li>package.json</li>
<li>overlay.xul</li>
<li>overlay.js</li>
<li>overlay.dtd</li>
</ul>
</li>
</ul>
<p>And the manifest file would be something like:</p>
<pre>{
  id : “helloworld@xulforge.com”,
  name : “Hello World!”,  
  type: “2”
  compatibility :    
    { id : “{ec8030f7-c20a-464f-9b0e-13a3a9e97384}”,
      minVersion : “3.5”,
      maxVersion : “3.6.*”},     
  domain: “helloworldchrome”,
  overlays:      
    { source : “chrome://helloworldchrome/content/overlay.xul”,
      target : “chrome://browser/content/browser.xul”}
}</pre>
<p>(Note: ‘compatibility’ and ‘overlays’ can be arrays when there’s more than one item. And the ‘domain’ value is a general declaration of the chrome domain.)</p>
<p>In this new system, you would be able to have all of your chrome files in the root directory and have no need for chrome directives other than declaring your main overlay. Also, in your root directory you can have a <em>locale</em> or <em>skin</em> folder that the system would know how to handle without any changes to the manifest. If a file isn’t found in the <em>locale</em> or <em>skin</em> folder, then the system falls back to the root directory as a last resource. Of course it would still be possible to declare specific locations for content, locale and skin in the manifest, in order to allow the “old style” to be used.</p>
<p>What about other special locations?</p>
<ul style="list-style-type: disc;">
<li><em>platform</em> and <em>components</em> will continue to have their special meanings.</li>
<li>JSM files can be handled just the same as chrome files, except that they use <em>resource://</em> instead of <em>chrome://</em>.</li>
<li>The default preferences file should also be moved to the root and have a predetermined name, like <em>defaultPrefs.js</em>.</li>
</ul>
<p><strong>#3 Installing the package.</strong> When you install an XPI file, the file is unpacked in your profile directory. It is common (but not mandatory) practice for chrome files to be packed in a JAR file, which remains packed after installation. According to <a href="http://autonome.wordpress.com/2010/03/10/firefox-extensions-and-performance/#comment-706">recent discussions about add-on performance</a>, it’s more efficient to keep files packed together. Instead of requiring authors to use the internal JAR approach, I think it makes more sense to require authors *not* to use JARs, and then keep the packed XPI in the profile on installation. Files that need to be extracted, like the manifest (maybe) and binary components (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=533038#c3">according to this</a>) can be extracted upon installation. This way it’s up to the platform and not the developer to look after performance.That’s it. Given that this new packaging system would be backwards-incompatible with the current one, it might make sense to change the file extension to something like XPI2, in order to make a clearer distinction between the 2. However it should suffice to look for the manifest file in order to identify the system in use.<br />
How hard is this to implement? I think #1 and #3 are fairly simple to implement.  #2 is the one that may present a bigger challenge, since the chrome URL system is something that runs deep in the Mozilla code, and changing its file location rules could cause breakage or vulnerabilities in non-add-on code. It might also be possible to limit the scope of these changes to add-ons only, but again, that may require lots of work. I’d love to hear the opinions of those who work on this part of the platform.</p>
<p>Some may wonder how does Jetpack fit into this whole idea. Well, Jetpack is a different platform, and it may very well replace traditional add-ons in the long term, but <a href="http://blog.mozilla.com/addons/2010/01/11/add-ons-are-here-to-stay/">we’re still a long ways to go</a>. We shouldn’t see Jetpack as some kind of competition, but as a lesson in what we can do better. If we improve add-on packaging to be closer to Jetpack packaging (I think this would be), then it’s a win for both, because it’ll make it less painful for developers to choose and switch between either platform.</p>
<p>I’d love to hear what experienced developers (both add-on and platform) think about this. I think there’s a real gain for novice developers in this if we were to implement it. I intentionally left out some details for brevity, but I’ll be happy to discuss them in the comments. Thanks for reading.</p>
]]></content:encoded>
			<wfw:commentRss>http://xulforge.com/blog/2010/03/xpi-v2-making-ext-dev-easier/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>MAOW Perú afterthoughts</title>
		<link>http://xulforge.com/blog/2010/03/maow-peru-afterthoughts/</link>
		<comments>http://xulforge.com/blog/2010/03/maow-peru-afterthoughts/#comments</comments>
		<pubDate>Thu, 04 Mar 2010 16:52:08 +0000</pubDate>
		<dc:creator>jorge</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[add-on]]></category>
		<category><![CDATA[jetpack]]></category>
		<category><![CDATA[maow]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[presentation]]></category>
		<category><![CDATA[xulschool]]></category>

		<guid isPermaLink="false">http://xulforge.com/blog/?p=38</guid>
		<description><![CDATA[The first Latin American MAOW (Mozilla Add-ons Workshop) was held last Saturday in Lima, Perú. The event was organized by Percy Cabello from the Mozilla Perú community, also the maintainer of the very awesome Mozilla Links blog. I did the first part of the workshop, explaining extension development. I learned from this experience that it&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>The first Latin American <a href="https://wiki.mozilla.org/MAOW:2010:Lima">MAOW</a> (Mozilla Add-ons Workshop) was held last Saturday in Lima, Perú. The event was organized by Percy Cabello from the <a href="http://mozilla.pe">Mozilla Perú</a> community, also the maintainer of the very awesome <a href="http://mozillalinks.org">Mozilla Links</a> blog.</p>
<p>I did the first part of the workshop, explaining extension development.</p>
<p><a href="http://xulforge.com/blog/wp-content/uploads/2010/03/IMG_3561.jpg"><img class="aligncenter size-medium wp-image-39" title="IMG_3561" src="http://xulforge.com/blog/wp-content/uploads/2010/03/IMG_3561-300x239.jpg" alt="Me explaining stuff" width="300" height="239" /></a></p>
<p>I learned from this experience that it&#8217;s not a good idea to cover all of the boilerplate parts of extension development in a presentation with such limited time. For future events I think it&#8217;s a better idea to have some sort of required reading before attending, so that it&#8217;s easier just to dive into the actual juicy parts and get stuff done. I still managed to cover several topics surrounding extension development, and the slides were full of references that people can follow to continue learning about the topic.</p>
<p>The second part of the event was about Jetpack development, and was presented by newly appointed Jetpack Ambassador Hernán Rodríguez, from Agentina:</p>
<p><a href="http://xulforge.com/blog/wp-content/uploads/2010/03/IMG_3566.jpg"><img class="aligncenter size-medium wp-image-40" title="IMG_3566" src="http://xulforge.com/blog/wp-content/uploads/2010/03/IMG_3566-300x225.jpg" alt="Hernán showing shinny stuff" width="300" height="225" /></a></p>
<p>Hernán did a fantastic job. I also should give Jetpack some credit because it is incredibly easy to get started in a few minutes. The attendees had a chance to play around and do more experimenting than on my presentation. We had some fun playing around with Hernán Twitter slidebar and messing around with CSS transformations.</p>
<p>The event was a great success, and this was all thanks to the great work of the Mozilla Perú community. I was pleasantly surprised of how well organized they are, and the great deal of large-scale technology events that are held in Perú that could be good platforms for Mozilla to attract new community members.</p>
<p>Much more details about this event can be read (in Spanish) in the Mozilla Perú blog and Hernán&#8217;s blog:</p>
<ul>
<li><a href="http://mozilla.pe/resumen-del-maow-lima-2010">http://mozilla.pe/resumen-del-maow-lima-2010</a></li>
<li><a href="http://www.malditocrc.com.ar/peregrino/2010/03/lima-mozilla-y-addons/">http://www.malditocrc.com.ar/peregrino/2010/03/lima-mozilla-y-addons/</a></li>
</ul>
<p>Thanks again to Percy and Mozilla Perú community for organizing this event. I hope to see you again soon!</p>
]]></content:encoded>
			<wfw:commentRss>http://xulforge.com/blog/2010/03/maow-peru-afterthoughts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Extension update</title>
		<link>http://xulforge.com/blog/2009/07/extension-update/</link>
		<comments>http://xulforge.com/blog/2009/07/extension-update/#comments</comments>
		<pubDate>Mon, 27 Jul 2009 21:27:41 +0000</pubDate>
		<dc:creator>jorge</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[add-on]]></category>
		<category><![CDATA[amo]]></category>
		<category><![CDATA[donations]]></category>
		<category><![CDATA[extend firefox]]></category>
		<category><![CDATA[fire.fm]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[projects]]></category>

		<guid isPermaLink="false">http://xulforge.com/blog/?p=13</guid>
		<description><![CDATA[Recently I&#8217;ve been occupying myself with several Firefox extension projects: Most of all, I&#8217;ve been contributing to the AMO editor team to keep the add-on review queues down to a manageable size. There&#8217;s a great deal of new submissions and updates due to the release of Firefox version 3.5. There are hundreds of updates that [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I&#8217;ve been occupying myself with several Firefox extension projects:</p>
<ol>
<li>Most of all, I&#8217;ve been contributing to the <a href="http://addons.mozilla.org">AMO</a> editor team to keep the add-on review queues down to a manageable size. There&#8217;s a great deal of new submissions and updates due to the release of Firefox version 3.5. There are hundreds of updates that are minimal to non existent compatibility changes, so I&#8217;ve been able to review close to 200 updates on this month alone. I enjoy my work with the editor team, specially because I&#8217;ve very fond of doing code review and being ruthlessly critical. It&#8217;s in my nature, what can I say&#8230; There are plans for <a href="http://blog.mozilla.com/addons/2009/07/01/removing-the-sandbox/">removing the AMO sandbox</a>, which I find intriguing, to say the least. I wonder how that will change the editor group and their work.</li>
<li>The <a href="http://labs.mozilla.com/contests/extendfirefox3.5/index.php">Extend Firefox 3.5</a> competition has been officially announced. With an October deadline, it includes several new interesting categories to compete in. Jose and I are already working on Fire.fm 1.3, which will be our entry for best extension update. There&#8217;s a great deal of new features we&#8217;ll be putting into it, which I think will greatly improve our user experience. We&#8217;re also working on a few ideas for new add-ons. I hope to be able to submit a couple of entries to increase our chances of winning.</li>
<li>Finally, the <a href="http://blog.mozilla.com/addons/2009/07/15/firefox-add-ons-contributions-pilot/">Add-ons Contributions pilot</a> was introduced to AMO. This enabled add-on authors to request donations for their project right on AMO, giving our donation links more exposure and possibly allowing a few authors to remove donation requests from their add-on UI, which is always a loss for user experience. We have activated contributions for Fire.fm, and so far the response has been pretty good. We&#8217;re very happy about it and hope people will continue helping us out.</li>
</ol>
<p>I still feel in &#8216;break mode&#8217;, and hope to start working in full gear soon. There&#8217;s so much I want to do, and I still need to get everything sorted out. More updates soon!</p>
]]></content:encoded>
			<wfw:commentRss>http://xulforge.com/blog/2009/07/extension-update/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Introducing My Personas</title>
		<link>http://xulforge.com/blog/2009/05/introducing-my-personas/</link>
		<comments>http://xulforge.com/blog/2009/05/introducing-my-personas/#comments</comments>
		<pubDate>Thu, 28 May 2009 18:45:02 +0000</pubDate>
		<dc:creator>jorge</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[add-on]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[personas]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[xulforge]]></category>

		<guid isPermaLink="false">http://xulforge.com/blog/?p=11</guid>
		<description><![CDATA[For my first &#8220;official&#8221; Xulforge project, I decided to take on a relatively simple task, so that I could get the site and blog started quickly. This way at least I have some content to show for while I work on larger projects . This first project is My Personas. This project is a set [...]]]></description>
			<content:encoded><![CDATA[<p>For my first &#8220;official&#8221; Xulforge project, I decided to take on a relatively simple task, so that I could get the site and blog started quickly. This way at least I have some content to show for while I work on larger projects <img src='http://xulforge.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> . This first project is <a title="My Personas project at Xulforge" href="http://xulforge.com/personas/">My Personas</a>.</p>
<p>This project is a set of skins for the <a href="http://www.getpersonas.com/">Personas</a> extension. Personas is a new approach to developing themes for Firefox and other Mozilla apps. Creating a skin is pretty simple: all you need is a header image and a footer image. Creating a good one is a little harder; you&#8217;ll need to fill a very, very large image area, while at the same time keeping in mind that only a tiny fraction of the image will be visible in the majority of browsers. Patterns and other artificial designs are probably easier, but mine are just extracts from my large photo collection, so it&#8217;s trickier.</p>
<p>I have a list of the skins I&#8217;ve created in the <a href="http://xulforge.com/personas/">project page</a>, with explanations on why I chose the pictures. So far my designs are doing pretty well, with a few hundred active daily users at this time. You can see the user counts in <a href="http://personas.services.mozilla.com/gallery/Designer/jorgev">my designer page</a>.</p>
<p>My skins were all created using <a href="http://www.gimp.org/">The Gimp</a>, and the pictures were taken with 2 different models of the Canon PowerShot (I upgraded recently). Artistic feedback is greatly appreciated.</p>
]]></content:encoded>
			<wfw:commentRss>http://xulforge.com/blog/2009/05/introducing-my-personas/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Regarding Fire.fm</title>
		<link>http://xulforge.com/blog/2009/05/regarding-firefm/</link>
		<comments>http://xulforge.com/blog/2009/05/regarding-firefm/#comments</comments>
		<pubDate>Thu, 28 May 2009 00:44:14 +0000</pubDate>
		<dc:creator>jorge</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[add-on]]></category>
		<category><![CDATA[fire.fm]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[last.fm]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[projects]]></category>

		<guid isPermaLink="false">http://xulforge.com/blog/?p=7</guid>
		<description><![CDATA[Fire.fm is a project that a friend and I began in order to compete in the Extend Firefox 3 competition, particularly to participate in the Best Music Add-on, which was being sponsored by Last.fm. I was a big fan of Last.fm at the time, given that it offered free online radio all around the world.  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="https://addons.mozilla.org/en-US/firefox/addon/7684">Fire.fm</a> is a project that a friend and I began in order to compete in the Extend Firefox 3 competition, particularly to participate in the Best Music Add-on, which was being sponsored by <a href="http://last.fm/">Last.fm</a>. I was a big fan of Last.fm at the time, given that it offered free online radio all around the world.  Sadly, that <a href="http://blog.last.fm/2009/04/22/radio-subscriptions">ended somewhat abruptly</a>.</p>
<p>Anyway, at the time we were pretty excited about it, and we spent a great deal of time and effort making Fire.fm a sure winner. And <a title="Extend Firefox 3 Winners Announcement" href="http://blog.mozilla.com/extendfirefox/2008/08/21/extend-firefox-3-winners/">we won</a>! We won the Best Music Add-on category, and I think we weren&#8217;t allowed to win in others, because I think we should have won the general competition as well <img src='http://xulforge.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> . Needless to say, we were super happy with this, and we have been actively maintaining the add-on in our spare time.</p>
<p>Fire.fm is, in a nutshell, a Last.fm radio player. It used to be a very easy way to tune into Last.fm radio without having to be on top of the website all day long. Our users loved it, and shortly we were in the AMO Recommended List.</p>
<p>Sadly, Last.fm cut off their free radio service to most of the world shortly afterward, so at least I lost a lot of the motivation I initially had to continue making it grow. Still, I don&#8217;t want to abandon a project that still has much to be fixed, so I&#8217;ll certainly won&#8217;t quit until all the annoying bugs are solved. Most users have a very smooth experience with Fire.fm, but there are a few unlucky ones that have some serious problems, like not being able to listen to stations at all&#8230; New features in Fire.fm are probably going to be very rare from version 1.2.3 and later.</p>
<p>Xulforge was already in my mind when we began working on Fire.fm, so I always kinda saw it as a Xulforge project. Xulforge was put on hold until very recently, so it feels weird trying to associate the two. I&#8217;ll keep Fire.fm in my project list, though, because I it was one of my first independent projects, and also because it has been very successful and I&#8217;m very proud of it.</p>
<p>Fire.fm is open source, BSD-licensed (more on that in another post). So, if you want to take a look into our code, you&#8217;re more than welcome. See the <a href="https://sourceforge.net/projects/firefm/">Fire.fm Sourceforge Project Page</a> for more information.</p>
<div id="attachment_8" class="wp-caption aligncenter" style="width: 110px"><a href="https://sourceforge.net/projects/firefm/"><img class="size-full wp-image-8" title="Fire.fm Logo" src="http://xulforge.com/blog/wp-content/uploads/2009/05/logo100.png" alt="Fire.fm Logo" width="100" height="100" /></a><p class="wp-caption-text">Fire.fm Logo</p></div>
]]></content:encoded>
			<wfw:commentRss>http://xulforge.com/blog/2009/05/regarding-firefm/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
