<?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>Softcore software development &#187; extension</title>
	<atom:link href="http://tea.cesaroliveira.net/archives/tag/extension/feed" rel="self" type="application/rss+xml" />
	<link>http://tea.cesaroliveira.net</link>
	<description>It&#039;s all about the cycles</description>
	<lastBuildDate>Sun, 01 Aug 2010 02:04:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Reordering the tab key &#8211; tabcomplete</title>
		<link>http://tea.cesaroliveira.net/archives/220</link>
		<comments>http://tea.cesaroliveira.net/archives/220#comments</comments>
		<pubDate>Sun, 01 Aug 2010 02:04:06 +0000</pubDate>
		<dc:creator>Cesar</dc:creator>
				<category><![CDATA[addons]]></category>
		<category><![CDATA[extension]]></category>
		<category><![CDATA[hugs]]></category>
		<category><![CDATA[keyboard]]></category>
		<category><![CDATA[tab]]></category>
		<category><![CDATA[tabcomplete]]></category>

		<guid isPermaLink="false">http://tea.cesaroliveira.net/?p=220</guid>
		<description><![CDATA[I am in the process of creating a new Firefox add-on that will hopefully change a bit how we navigate some sites. Until now, keyboard navigation for the vast majority of sites has been simply unusable. Even though websites have a layout that can easily use a keyboard, it often relies on either remembering shortcuts [...]]]></description>
			<content:encoded><![CDATA[<p>I am in the process of creating a new Firefox add-on that will hopefully change a bit how we navigate some sites. Until now, keyboard navigation for the vast majority of sites has been simply unusable. Even though websites have a layout that can easily use a keyboard, it often relies on either remembering shortcuts or tabbing through. You are almost exclusively limited to a mouse when using a full-featured browser such as Firefox, Chrome, and IE.</p>
<p>Personally, I hate using the trackpad on my laptop. After extended use, the heat and the friction take a toll on my fingers. I have an external USB mouse, but that often becomes a bother as the laptop is moved around from one location to another. Yes, wireless mice, but again we&#8217;re not really fixing the problem.</p>
<p>For simple navigation, it&#8217;s almost a crime that I cannot tab between links and major components of a web site&#8217;s navigation.</p>
<p>The <a href="http://www.w3.org/TR/html401/interact/forms.html#adef-tabindex" onclick="pageTracker._trackPageview('/outgoing/www.w3.org/TR/html401/interact/forms.html_adef-tabindex?referer=');">tabindex</a> HTML attribute has gone largely unused when browsing the web. Perhaps for a myriad of reasons &#8211; it&#8217;s hard to re-order manually, and for many web developers it&#8217;s not worth the time or effort.</p>
<p>Even for everyday use, it becomes ridiculous how crappy it the tab key can be. Think about this:</p>
<ul>
<li>For a Google search result, the tab key must be hit <em>12 time</em>s before it focuses on your search text. Another 3 tab strikes before it takes you to the first result. Another <em>5 times or more to get to the second result</em> &#8211; not counting Google&#8217;s quick links.</li>
<li>For planet.mozilla.org, each tab key will go through every anchor link in each person&#8217;s blog post. Oh, and it takes 6 tab keystrokes to go to the first article.</li>
<li>For reddit, it can be a little better. If you just use tab, you&#8217;ll go through each &#8220;share&#8221; link first. Which is stupid. If you activate &#8220;jump to content&#8221; it will go through image->link->domain->usersubreddit->comments. Which is still a lot for one result.</li>
</ul>
<p>This is how I would order the tab key on a Google search result:<br />
<div id="attachment_221" class="wp-caption aligncenter" style="width: 286px"><a href="http://tea.cesaroliveira.net/wp-content/uploads/2010/07/google-taborder.png"><img src="http://tea.cesaroliveira.net/wp-content/uploads/2010/07/google-taborder-276x300.png" alt="Possible tab order on google" title="google-taborder" width="276" height="300" class="size-medium wp-image-221" /></a><p class="wp-caption-text">Possible tab order on google</p></div></p>
<p>I would probably use the top Google bar the least when doing a google search. Each time you hit tab, it will cycle through the search box, 1st result, 2nd result, etc. until you hit n-th result.</p>
<p>This would be great in an ideal world. A Firefox extension could do this, but for my purposes my extension does not do this. It doesn&#8217;t map the tab key. It instead uses the key right above it. Like tab, CTRL+` will cycle forward and SHIFT+~ will cycle backwards.</p>
<p>I call it <a href="https://addons.mozilla.org/firefox/addon/210516/" onclick="pageTracker._trackPageview('/outgoing/addons.mozilla.org/firefox/addon/210516/?referer=');">tabcomplete</a>. It&#8217;s not as pretty as <a href="http://azarask.in/projects/tabcandy/" onclick="pageTracker._trackPageview('/outgoing/azarask.in/projects/tabcandy/?referer=');">tabcandy</a>. I think a large part of my user-base wouldn&#8217;t be most users. Users seem content on using the mouse, and that&#8217;s fine. But for a guy who works in vim, this is a nice to have extension.</p>
]]></content:encoded>
			<wfw:commentRss>http://tea.cesaroliveira.net/archives/220/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Statistical gathering for add-ons</title>
		<link>http://tea.cesaroliveira.net/archives/88</link>
		<comments>http://tea.cesaroliveira.net/archives/88#comments</comments>
		<pubDate>Mon, 10 Aug 2009 02:00:22 +0000</pubDate>
		<dc:creator>Cesar</dc:creator>
				<category><![CDATA[addons]]></category>
		<category><![CDATA[extension]]></category>
		<category><![CDATA[safe]]></category>
		<category><![CDATA[stats]]></category>

		<guid isPermaLink="false">http://tea.cesaroliveira.net/?p=88</guid>
		<description><![CDATA[Today I submitted version 0.7 of the safe add-on. This was not a version with additional features, but rather a version that collects stats from users who uninstall the add-on. I mainly did this because I wanted to know more about why only a small percentage of users who downloaded my extension continued on using [...]]]></description>
			<content:encoded><![CDATA[<p>Today I submitted version 0.7 of the <a href="https://addons.mozilla.org/en-US/firefox/addon/11666" onclick="pageTracker._trackPageview('/outgoing/addons.mozilla.org/en-US/firefox/addon/11666?referer=');">safe add-on</a>. This was not a version with additional features, but rather a version that collects stats from users who uninstall the add-on.</p>
<p>I mainly did this because I wanted to know more about why only a small percentage of users who downloaded my extension continued on using it. How long have they used the extension? What options have they enabled (if any)? Where are my users coming from? I stopped short of asking people to complete a feedback form, instead opting to just send data to my server. It&#8217;s relatively anonymous, except for the IP address which gets recorded.</p>
<p>Unfortunately, this doesn&#8217;t really give me useful statistics from people who stay with my add-on. Which is still useful. My best hope is that it&#8217;ll answer at least one of my questions that it was set out to answer.</p>
]]></content:encoded>
			<wfw:commentRss>http://tea.cesaroliveira.net/archives/88/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Uncovering the underlying metadata</title>
		<link>http://tea.cesaroliveira.net/archives/54</link>
		<comments>http://tea.cesaroliveira.net/archives/54#comments</comments>
		<pubDate>Thu, 22 Jan 2009 18:28:43 +0000</pubDate>
		<dc:creator>Cesar</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[hugs]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[extension]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[seneca]]></category>
		<category><![CDATA[sleep]]></category>

		<guid isPermaLink="false">http://www.cesaroliveira.net/?p=53</guid>
		<description><![CDATA[A few weeks ago, I wanted to do some C++ Mozilla coding to make sure I wasn&#8217;t going soft. But I didn&#8217;t really know what to do. I left it for a bit until I found something weird about the HTML5 spec &#8211; there was a method of testing whether metadata has been loaded, but [...]]]></description>
			<content:encoded><![CDATA[<p>A few weeks ago, I wanted to do some C++ Mozilla coding to make sure I wasn&#8217;t going soft. But I didn&#8217;t really know what to do. I left it for a bit until I found something <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#dom-media-have_metadata" onclick="pageTracker._trackPageview('/outgoing/www.whatwg.org/specs/web-apps/current-work/multipage/video.html_dom-media-have_metadata?referer=');">weird about the HTML5 spec</a> &#8211; there was a method of testing whether metadata has been loaded, but no way to expose the metadata (eg. song title, artist, album, etc) to the user such as through page info.</p>
<p>I think this will be useful. As media starts being embedded into the web browser, it would make sense to start exposing this to the user. I know there have been a few instances where I was listening to something on the radio, but there was little hint of what the song was called (I usually tried to remember a few lyrics and did a Google search. Mixed success).</p>
<p>I brought this up in the whatwg irc channel, and apparently this is being considered for the next version of the spec. Which is understandable, because the server can always display the metadata. But often, media may not be central to the website. For example, background music.</p>
<p>I started look at the Audio/Video backend stuff that moz uses. It got confusing real quick (it doesn&#8217;t help that the <a href="http://mxr.mozilla.org/mozilla-central/source/content/html/content/src/nsHTMLAudioElement.cpp" onclick="pageTracker._trackPageview('/outgoing/mxr.mozilla.org/mozilla-central/source/content/html/content/src/nsHTMLAudioElement.cpp?referer=');">audio code</a> itself is completely empty). Plus I was in a hurry. So I decided to implement it as an extension.</p>
<p>It was a lovely experience. I had a few problems, including finding out that audio/video wasn&#8217;t actually being saved to the cache (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=469446" onclick="pageTracker._trackPageview('/outgoing/bugzilla.mozilla.org/show_bug.cgi?id=469446&amp;referer=');">bug 469446</a>). It was checked-in like 2 days after I found it out. Also, I hate string very much. The string guide helped, but it is still awful. And I made firefox crash a few times because I&#8217;m a nsCOMPtr n00b.</p>
<p>Right now, this extension is working only with ogg vorbis files. Which is stupid because &lt;audio /&gt; is rarely used anywhere, and if it is used, only with certain conditions (wikimedia commons uses the audio tag, but not really. Apparently, the video/audio tags start automatically downloading the media even if it isn&#8217;t under autoplay. This is a mess if you have dozens of audio tags in one page. <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=464272" onclick="pageTracker._trackPageview('/outgoing/bugzilla.mozilla.org/show_bug.cgi?id=464272&amp;referer=');">bug 464272</a>). It is so rarely used, that I had to create a <a href="/files/2009-01-22/audio">audio demo page</a> for testing purposes.</p>
<p>Using it is very simple. Right-clicking on a audio tag brings up the context menu. I decided to use the context menu over Page Info because the media tab of the Page info dialog is very much geared towards images, and that code has to be changed in the firefox source (it&#8217;s not easy/pretty to overlay).</p>
<div style="text-align:center;"><img src="/files/2009-01-22/context.png" alt="audio context menu"/></div>
<p>Which brings up the audio&#8217;s metadata</p>
<div style="text-align:center"><img src="/files/2009-01-22/properties.png" alt="audio properties"/></div>
<p>While a lot of metadata is displayed, some isn&#8217;t. For example, iTunes has support for cover art as a COVERART header. While you can put that in vorbis, it should be noted that it isn&#8217;t <a href="http://wiki.xiph.org/index.php/VorbisComment#Unofficial_.22COVERART.22_field" onclick="pageTracker._trackPageview('/outgoing/wiki.xiph.org/index.php/VorbisComment_Unofficial_.22COVERART.22_field?referer=');">widely supported</a>. So I decided to put in only the <a href="http://www.xiph.org/vorbis/doc/v-comment.html" onclick="pageTracker._trackPageview('/outgoing/www.xiph.org/vorbis/doc/v-comment.html?referer=');">standard headers</a> for now.</p>
<p>This is dealing with C++ code. Which is much more dangerous than javascript code because NS_ERROR_OMGWTF doesn&#8217;t appear in your error console when I try to free an uninitialized pointer. I made basic checks so hopefully nothing bad will happen. But I didn&#8217;t do extensive checking in case we have a bad ogg file or something.</p>
<p>Well, to be fair to me, I always save the function&#8217;s return value. I just didn&#8217;t check whether it passed nor did anything about it. And this won&#8217;t just crash at any time. It&#8217;ll crash if you try to load the metadata (I&#8217;m very nice like that).</p>
<p>The name of the <a href="https://addons.mozilla.org/en-US/firefox/addon/10465" onclick="pageTracker._trackPageview('/outgoing/addons.mozilla.org/en-US/firefox/addon/10465?referer=');">extension is saraswati</a>, named after the <a href="http://en.wikipedia.org/wiki/Saraswati" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Saraswati?referer=');">hindu God of music and knowledge</a> (really, a Google search helped out a lot here). Please enjoy! (Linux x86, x86-64 and Windows x86 only right now)</p>
]]></content:encoded>
			<wfw:commentRss>http://tea.cesaroliveira.net/archives/54/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Successfully Getting your Addon Reviewed</title>
		<link>http://tea.cesaroliveira.net/archives/52</link>
		<comments>http://tea.cesaroliveira.net/archives/52#comments</comments>
		<pubDate>Tue, 13 Jan 2009 11:49:02 +0000</pubDate>
		<dc:creator>Cesar</dc:creator>
				<category><![CDATA[addons]]></category>
		<category><![CDATA[editor]]></category>
		<category><![CDATA[extension]]></category>
		<category><![CDATA[hugs]]></category>
		<category><![CDATA[mozilla]]></category>

		<guid isPermaLink="false">http://www.cesaroliveira.net/?p=51</guid>
		<description><![CDATA[As the addon review queue grows beyond 600 nominated and updated addons, it is more important than ever to make sure your extension passes review the first time around. Editors have a review guide, and a well hidden but publicly viewable set of policies. But here is a quick list of the most cited reasons [...]]]></description>
			<content:encoded><![CDATA[<p>As the addon review queue grows beyond 600 nominated and updated addons, it is more important than ever to make sure your extension passes review the first time around. Editors have a <a href="https://wiki.mozilla.org/Update:Editors/ReviewingGuide" onclick="pageTracker._trackPageview('/outgoing/wiki.mozilla.org/Update_Editors/ReviewingGuide?referer=');">review</a> guide, and a well hidden but publicly <a href="https://addons.mozilla.org/en-US/firefox/pages/policy" onclick="pageTracker._trackPageview('/outgoing/addons.mozilla.org/en-US/firefox/pages/policy?referer=');">viewable set of policies</a>. But here is a quick list of the most cited reasons for addon refusal :</p>
<ol>
<li>Addon should have at least 3 user reviews before being nominated. External reviews count too, but you have to mention them in your nomination message. Softpedia reviews do not count.</li>
<li>Wrap your <a href="http://blogger.ziesemer.com/2007/10/respecting-javascript-global-namespace.html" onclick="pageTracker._trackPageview('/outgoing/blogger.ziesemer.com/2007/10/respecting-javascript-global-namespace.html?referer=');">loose variables</a>. All objects, variables, and anything that your addon makes global should be wrapped to avoid conflicts with other addons.</li>
<li>Look at the error console. Is your extension throwing up javascript errors? Fix it. There are some <a href="https://developer.mozilla.org/en/Setting_up_extension_development_environment" onclick="pageTracker._trackPageview('/outgoing/developer.mozilla.org/en/Setting_up_extension_development_environment?referer=');">options</a> you can set in about:config to help you with this.</li>
<li>You break functionality in the host application (Firefox, Thunderbird, etc.).</li>
<li>Your extension doesn&#8217;t work properly, or showing unexpected results. This is what user reviews are expected to catch, but you really should get someone who wasn&#8217;t involved to test and report bugs.</li>
</ol>
<p>There are other less common things that can get you busted too. I&#8217;ll just list them here for completeness sake :</p>
<ol start="5">
<li>Including remote javascript/css or other files, anywhere. Include them in your xpi file instead.</li>
<li>CSS warnings on the error console if your submitting a theme.</li>
</ol>
<p>If you have any doubts, check the public policies page linked above.</p>
<p>And don&#8217;t ask when your extension will be reviewed in the comments. Because every answer will be the same : When someone gets around to it. It could be sooner if you&#8217;d help!</p>
]]></content:encoded>
			<wfw:commentRss>http://tea.cesaroliveira.net/archives/52/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ohai</title>
		<link>http://tea.cesaroliveira.net/archives/37</link>
		<comments>http://tea.cesaroliveira.net/archives/37#comments</comments>
		<pubDate>Thu, 02 Oct 2008 04:28:55 +0000</pubDate>
		<dc:creator>Cesar</dc:creator>
				<category><![CDATA[hugs]]></category>
		<category><![CDATA[extension]]></category>
		<category><![CDATA[fennec]]></category>
		<category><![CDATA[sleep]]></category>

		<guid isPermaLink="false">http://www.cesaroliveira.net/?p=37</guid>
		<description><![CDATA[One internet phenomena that seems to be popular at Mozilla (at least, for some people) is rediculously cute animals and broken english in both in spelling and grammar known as lolspeak. So much so that Paul O&#8217;Shannessy (zpao if the name doesn&#8217;t ring a bell) created the bookmarklet that takes flickr images and turns them [...]]]></description>
			<content:encoded><![CDATA[<p>One internet phenomena that seems to be popular at Mozilla (at least, for some people) is <a href="http://www.cuteoverload.com/" onclick="pageTracker._trackPageview('/outgoing/www.cuteoverload.com/?referer=');">rediculously</a> <a href="http://icanhascheezburger.com/" onclick="pageTracker._trackPageview('/outgoing/icanhascheezburger.com/?referer=');">cute</a> <a href="http://ihasahotdog.com/" onclick="pageTracker._trackPageview('/outgoing/ihasahotdog.com/?referer=');">animals</a> and broken english in both in spelling and grammar known as <a href="http://speaklolspeak.com/?t=anon" onclick="pageTracker._trackPageview('/outgoing/speaklolspeak.com/?t=anon&amp;referer=');">lolspeak</a>. So much so that <a href="http://zpao.com/" onclick="pageTracker._trackPageview('/outgoing/zpao.com/?referer=');">Paul O&#8217;Shannessy</a> (zpao if the name doesn&#8217;t ring a bell) created the bookmarklet that takes flickr images and turns them into canvas drawing overlaying text to it (called <a href="http://playground.zpao.com/lolcanvas/" onclick="pageTracker._trackPageview('/outgoing/playground.zpao.com/lolcanvas/?referer=');">LOLify</a>). The bookmarklet was based off of <a href="http://flolcatr.com/" onclick="pageTracker._trackPageview('/outgoing/flolcatr.com/?referer=');">flolcatr</a>, which brings more lols (well, some of the time anyways. The true lols come of the pics of middle-aged women).</p>
<p>Using that as inspiration, I worked on turning into a Firefox extension. Particularly because I wanted more flexibility out of it. For example, right now the bookmarklet takes random stuff out of the flickr comment and puts them into the image. But I wanted to add in my own stuff to either the top, middle, or bottom of the image and be able to align it left, centre, or right.</p>
<p>After spending all night doing it (I was afraid I would lose interest or get lazy if it took more than one day to complete), I uploaded what I had to <a href="https://addons.mozilla.org/en-US/firefox/" onclick="pageTracker._trackPageview('/outgoing/addons.mozilla.org/en-US/firefox/?referer=');">addons.mozilla.org</a>. After a good nap, I went back and fixed some pretty ugly errors and uploaded a much better version. I ended up with the name of <a href="https://addons.mozilla.org/en-US/firefox/addon/9067" onclick="pageTracker._trackPageview('/outgoing/addons.mozilla.org/en-US/firefox/addon/9067?referer=');">kyoote</a> (cutie), because it&#8217;s one of the words used to describe a <a href="http://speaklolspeak.com/page/LOLzoo" onclick="pageTracker._trackPageview('/outgoing/speaklolspeak.com/page/LOLzoo?referer=');">fennec</a>.  And fennecs are extremely unrepresented as cute animals, even though they are <a href="http://www.flickr.com/photos/floridapfe/2530834190/" onclick="pageTracker._trackPageview('/outgoing/www.flickr.com/photos/floridapfe/2530834190/?referer=');">adorable</a>. And from today forward, let friday also be known as fen[nec]day.</p>
<p><a href="http://www.flickr.com/photos/the_dro/2389013732/" onclick="pageTracker._trackPageview('/outgoing/www.flickr.com/photos/the_dro/2389013732/?referer=');"><img src="/files/2008-10-02/lolfennec.png" alt="lolfennec" /></a><br />
<span style="font-size: smaller">Original image taken from <a href="http://www.flickr.com/photos/the_dro" onclick="pageTracker._trackPageview('/outgoing/www.flickr.com/photos/the_dro?referer=');">deadstardro</a></span></p>
<p>So sit back this fenday and enjoy a meowtini <img src='http://tea.cesaroliveira.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Update: Clarification based on comment</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://tea.cesaroliveira.net/archives/37/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
