<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6315844527658316410</id><updated>2011-04-21T21:08:17.191-04:00</updated><category term='blunders'/><category term='mochitests'/><category term='fuel'/><category term='tests'/><category term='proxy'/><category term='javascript'/><category term='build'/><category term='debugging'/><category term='venkman'/><category term='openkomodo'/><category term='bluewhite64'/><category term='makefile'/><category term='windows'/><category term='seneca'/><category term='x86_64'/><category term='ubuntu'/><category term='release'/><category term='ad'/><title type='text'>Misadventures writing free software</title><subtitle type='html'>Writing software, the wrong way</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://cesar-oss.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6315844527658316410/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://cesar-oss.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Cesar</name><uri>http://www.blogger.com/profile/14497931470428725496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>18</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6315844527658316410.post-4090008450639151148</id><published>2008-04-16T18:33:00.003-04:00</published><updated>2008-04-16T19:14:41.390-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seneca'/><category scheme='http://www.blogger.com/atom/ns#' term='ad'/><category scheme='http://www.blogger.com/atom/ns#' term='release'/><title type='text'>Nearing the final release</title><content type='html'>I got disabling updates working for Firefox, though it is terrible hack since I couldn't find a policy to disable IE updates. A google search didn't help, and most of them pointed to third party tools to disable updating to IE7 from Windows Update. So I had to manually create a registry key to disable browser updates (ironically enough, I unconsciously put it in the Internet Explorer branch of the registry).&lt;br /&gt;&lt;br /&gt;There are still so many things to do, most of it cosmetic. For example, the code is still a mess. I have my doubts about fixing it entirely, but I can certainly comment.&lt;br /&gt;&lt;br /&gt;So here is what is left to do, at minimum, where I stand :&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Document on the wiki how to implement a new policy&lt;/li&gt;&lt;li&gt;Use javascript components whenever possible&lt;/li&gt;&lt;/ol&gt;And then I can finally say that I am done, and anything else is just frosting :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6315844527658316410-4090008450639151148?l=cesar-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cesar-oss.blogspot.com/feeds/4090008450639151148/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6315844527658316410&amp;postID=4090008450639151148' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6315844527658316410/posts/default/4090008450639151148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6315844527658316410/posts/default/4090008450639151148'/><link rel='alternate' type='text/html' href='http://cesar-oss.blogspot.com/2008/04/nearing-final-release.html' title='Nearing the final release'/><author><name>Cesar</name><uri>http://www.blogger.com/profile/14497931470428725496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6315844527658316410.post-4811886925876428835</id><published>2008-04-06T21:37:00.004-04:00</published><updated>2008-04-06T21:53:23.593-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seneca'/><category scheme='http://www.blogger.com/atom/ns#' term='ad'/><category scheme='http://www.blogger.com/atom/ns#' term='blunders'/><category scheme='http://www.blogger.com/atom/ns#' term='tests'/><title type='text'>Overcomplicated</title><content type='html'>While doing some test cases for the javascript wrapper around registry keys, I found a major flaw in an assumption I was making about keys that made me rethink my code. While I made some things simplier, it was still a pain to get something. Here is a progression of how things used to be and how things are right now.&lt;br /&gt;&lt;br /&gt;Declare the service :&lt;br /&gt;&lt;code&gt;&lt;pre&gt;let service = Cc["@shacknet.nu/winregistry;1"]&lt;br /&gt;    .getService(Ci.nsIWindowsRegistryService);&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Oldest way :&lt;br /&gt;&lt;code&gt;&lt;pre&gt;let key = service.getKey(&lt;br /&gt;    Ci.nsIWindowsRegistryService.ROOT_KEY_LOCAL_MACHINE,&lt;br /&gt;    "Software\\Mozilla\\Firefox\\Crash Reporter\\EmailMe");&lt;br /&gt;let answer = key.getValue();&lt;br /&gt;key.close();&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Older way :&lt;br /&gt;&lt;code&gt;&lt;pre&gt;let key = service.getKey(&lt;br /&gt;    "Software\\Mozilla\\Firefox\\Crash Reporter",&lt;br /&gt;    "EmailMe");&lt;br /&gt;let answer = key.getValue();&lt;br /&gt;key.close();&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;New and simplier :&lt;br /&gt;&lt;code&gt;&lt;pre&gt;let answer = service.getKey(&lt;br /&gt;    "Software\\Mozilla\\Firefox\\Crash Reporter",&lt;br /&gt;    "EmailMe");&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;I figure, this will work for 100% of the use cases right now. I was gonna get complicated with making another, more complete, interface for getting attributes of keys (ie. what was the root, path, and key name). But this early in the process, especially without requirements, I don't care about it :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6315844527658316410-4811886925876428835?l=cesar-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cesar-oss.blogspot.com/feeds/4811886925876428835/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6315844527658316410&amp;postID=4811886925876428835' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6315844527658316410/posts/default/4811886925876428835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6315844527658316410/posts/default/4811886925876428835'/><link rel='alternate' type='text/html' href='http://cesar-oss.blogspot.com/2008/04/overcomplicated.html' title='Overcomplicated'/><author><name>Cesar</name><uri>http://www.blogger.com/profile/14497931470428725496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6315844527658316410.post-183600841624113269</id><published>2008-04-03T02:33:00.003-04:00</published><updated>2008-04-03T03:02:40.875-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seneca'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='blunders'/><category scheme='http://www.blogger.com/atom/ns#' term='debugging'/><category scheme='http://www.blogger.com/atom/ns#' term='tests'/><title type='text'>Mystery unravelled!</title><content type='html'>A bit of my last &lt;a href="http://zenit.senecac.on.ca/wiki/index.php/Active_Directory_Integration#Release_0.5"&gt;release&lt;/a&gt; failed. Mainly because my javascript component was failing in an odd place. I couldn't figure out why, and so xpcshell tests never got complete.&lt;br /&gt;&lt;br /&gt;I went back to the problem today. Firing up venkman and the javascript shell, I started to play around with it some more. I manually tested (grumble) both components independently and they both worked. But they didn't work together. I couldn't get one to return an instance of the other, and it was bothering me.&lt;br /&gt;&lt;br /&gt;Walking through the javascript in venkman, It got all the way to the return value and throws the exception there.&lt;br /&gt;&lt;/code&gt;&lt;pre&gt;&lt;br /&gt;        if (regkey.hasValue(value) == false)&lt;br /&gt;            return null;&lt;br /&gt;       &lt;br /&gt;        key.init(regkey, relPath, value);&lt;br /&gt;       &lt;br /&gt;        return key;    /* Always failing here */&lt;br /&gt;    },&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;Looking at the terminal, I noticed a strange assertion coming up after the code fails. I asked in #developers, and even &lt;a href="http://shawnwilsher.com/"&gt;sdwilsh&lt;/a&gt; (a very knowledgeable and promising character that interned last year) took a stab at it and couldn't find anything obvious. I started losing hope of ever getting this blasted thing working. Looking up the assertion didn't help, and neither did a NS_ENSURE_TRUE warning that were both being fired after the code failing.&lt;br /&gt;&lt;br /&gt;I finally had it. It couldn't be the .js file. It had to be something more. But what else is there except the idl interface? I looked, examining each line. Then I noticed something very, very, wrong.&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;void getKey(in unsigned long root, in string path);&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;The return value was &lt;span style="font-weight:bold;"&gt;void&lt;/span&gt;. I must have just put void there first because I didn't know what I wanted to call the other interface. I promptly change it to :&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;nsIWindowsRegistryKey getKey(in unsigned long root, in string path);&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;And it starts to work in the javascript shell, which is absolutely a relief. Now I can start seeing if tests work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6315844527658316410-183600841624113269?l=cesar-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cesar-oss.blogspot.com/feeds/183600841624113269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6315844527658316410&amp;postID=183600841624113269' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6315844527658316410/posts/default/183600841624113269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6315844527658316410/posts/default/183600841624113269'/><link rel='alternate' type='text/html' href='http://cesar-oss.blogspot.com/2008/04/mystery-unravelled.html' title='Mystery unravelled!'/><author><name>Cesar</name><uri>http://www.blogger.com/profile/14497931470428725496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6315844527658316410.post-1943125115254682611</id><published>2008-04-01T01:57:00.002-04:00</published><updated>2008-04-01T02:30:10.277-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seneca'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ad'/><title type='text'>Dynamic Javascript</title><content type='html'>For the next release, I want to start cleaning up the code base. I've started with grouppolicy's browser.xul (which overlay's Firefox's browser.xul) because this is a file that confuses me quite a bit. I also found out why it's seemingly so confusing.&lt;br /&gt;&lt;br /&gt;The problem is this: Say I have a function called multiply that lives in another file :&lt;br /&gt;&lt;code&gt;function multiply(a,b) {&lt;br /&gt;...&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;Without changing multiply's function internals, how do I change the logic? You might consider making a multiply2(a,b) and copy and pasting code and substituting your own logic, but the catch is you can't change any of the functions that call multiply() either!&lt;br /&gt;&lt;br /&gt;It's sorta the same dilemma that we have. There are functions in Firefox's browser.xul that we don't want to change, but we want to add bits of logic jammed into the middle that would, for example, prevent a user from ctrl+click a link to open it in a new tab when tabs are disabled via a policy.&lt;br /&gt;&lt;br /&gt;Overlays offer one solution. You can declare your own multiply(a,b) function and it would overwrite the one in Firefox's. However, I don't like this approach because you have to copy and paste code. And when you do that, &lt;span style="font-weight:bold;"&gt;you're&lt;/span&gt; responsible for keeping it current.&lt;br /&gt;&lt;br /&gt;Another solution to wrap around the function. Let's expand our multiply function :&lt;br /&gt;&lt;code&gt;&lt;pre&gt;function multiply(a, b) {&lt;br /&gt;    var rv = 0, i;&lt;br /&gt;    // If we go over 999, just give up silently because we're evil&lt;br /&gt;    if (b &lt; 1000) { &lt;br /&gt;        for (i = 0; i &lt; b; ++i) {&lt;br /&gt;            rv += a;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    return rv;&lt;br /&gt;}&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;And let's say you wanted to change 1000 to 500. One solution is to wrap the function. Something like :&lt;br /&gt;&lt;code&gt;&lt;pre&gt;var _multiply = multiply;&lt;br /&gt;function multiply(a, b) {&lt;br /&gt;    if (b &lt; 500) return _multiply(a,b);&lt;br /&gt;    return 0;&lt;br /&gt;}&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;Now the real multiply doesn't get called unless the second factor is less than 500. This is the approach I'm using to solve my problem. However, there is sometimes duplicate code that you just can't get around.&lt;br /&gt;&lt;br /&gt;A third option, which is quite innovative, is something I found someone doing on an addon. It uses eval(), which is risky but gets the job done in this situation.&lt;br /&gt;&lt;code&gt;eval(multiply.toString().replace("1000", "500"));&lt;/code&gt;&lt;br /&gt;I'll leave that for you to figure out. But it works!&lt;br /&gt;&lt;br /&gt;Yay, bedtime!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6315844527658316410-1943125115254682611?l=cesar-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cesar-oss.blogspot.com/feeds/1943125115254682611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6315844527658316410&amp;postID=1943125115254682611' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6315844527658316410/posts/default/1943125115254682611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6315844527658316410/posts/default/1943125115254682611'/><link rel='alternate' type='text/html' href='http://cesar-oss.blogspot.com/2008/04/dynamic-javascript.html' title='Dynamic Javascript'/><author><name>Cesar</name><uri>http://www.blogger.com/profile/14497931470428725496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6315844527658316410.post-5277719133714632105</id><published>2008-03-31T02:19:00.004-04:00</published><updated>2008-03-31T02:54:54.904-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seneca'/><category scheme='http://www.blogger.com/atom/ns#' term='build'/><category scheme='http://www.blogger.com/atom/ns#' term='blunders'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>Windows Build Prerequisites change</title><content type='html'>If your building from source on Windows, then it will come as the most un-welcomed surprise (well, I have been told it's been there for a while) that you now need the &lt;a href="http://developer.mozilla.org/en/docs/Windows_Build_Prerequisites#Microsoft_Visual_C.2B.2B_and_Windows_SDK"&gt;Window's Vista SDK to do a build&lt;/a&gt;. The exact reason why escapes me at the moment. Something about terrorists winning if we don't.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6315844527658316410-5277719133714632105?l=cesar-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cesar-oss.blogspot.com/feeds/5277719133714632105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6315844527658316410&amp;postID=5277719133714632105' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6315844527658316410/posts/default/5277719133714632105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6315844527658316410/posts/default/5277719133714632105'/><link rel='alternate' type='text/html' href='http://cesar-oss.blogspot.com/2008/03/windows-build-prerequisites-change.html' title='Windows Build Prerequisites change'/><author><name>Cesar</name><uri>http://www.blogger.com/profile/14497931470428725496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6315844527658316410.post-8032947164339711430</id><published>2008-03-30T22:45:00.004-04:00</published><updated>2008-03-31T00:23:35.677-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seneca'/><category scheme='http://www.blogger.com/atom/ns#' term='build'/><category scheme='http://www.blogger.com/atom/ns#' term='makefile'/><title type='text'>Makefile.in Madness</title><content type='html'>I tend to really hate doing Makefile.in files because they are just copied from somewhere and they sometimes don't have everything you need. And when you don't know what your doing, that can screw you up. I created a &lt;a href="http://matrix.senecac.on.ca/~cdolivei/files/Makefile.in"&gt;generic Makefile.in&lt;/a&gt; file that is usable for extensions, idl interfaces, and C++/javascript components. It's also documented as much as I could find information on it. Just uncomment what you don't need and delete the rest. I covered as much as I could, I might not have covered every single option, but I think I got most of them.&lt;br /&gt;&lt;br /&gt;You can also use Ted Mielczarek's &lt;a href="http://ted.mielczarek.org/code/mozilla/jscomponentwiz/"&gt;Javascript Component Wizard&lt;/a&gt;. I dislike using wizards, but to each his own.&lt;br /&gt;&lt;br /&gt;If you want to repay me, you can add me to the contributor's list (Cesar Oliveira) for the Makefile.in.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6315844527658316410-8032947164339711430?l=cesar-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cesar-oss.blogspot.com/feeds/8032947164339711430/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6315844527658316410&amp;postID=8032947164339711430' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6315844527658316410/posts/default/8032947164339711430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6315844527658316410/posts/default/8032947164339711430'/><link rel='alternate' type='text/html' href='http://cesar-oss.blogspot.com/2008/03/makefilein-madness.html' title='Makefile.in Madness'/><author><name>Cesar</name><uri>http://www.blogger.com/profile/14497931470428725496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6315844527658316410.post-6372169584292522602</id><published>2008-03-24T23:38:00.004-04:00</published><updated>2008-03-25T00:16:31.897-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seneca'/><category scheme='http://www.blogger.com/atom/ns#' term='openkomodo'/><category scheme='http://www.blogger.com/atom/ns#' term='build'/><category scheme='http://www.blogger.com/atom/ns#' term='bluewhite64'/><category scheme='http://www.blogger.com/atom/ns#' term='x86_64'/><title type='text'>Building OpenKomodo</title><content type='html'>I use &lt;a href="http://www.openkomodo.com/"&gt;OpenKomodo&lt;/a&gt; on windows all the time. It is a nice IDE for javascript and detects formats that you use in Mozilla development like &lt;span style="font-weight:bold;"&gt;.idl&lt;/span&gt; and &lt;span style="font-weight:bold;"&gt;.xul&lt;/span&gt;. The only bad thing about it is that it has a lot of Mozilla 1.8 (Firefox 2) memory problems. You can go over 700 megabytes just by doing nothing.&lt;br /&gt;&lt;br /&gt;I wanted to have it here on my Linux box, but they do not offer a 64bit version of OpenKomodo. But because they released it late last year, I can build it. The experience was a little... refreshing. Reminded me of building Firefox for the first time.&lt;br /&gt;&lt;br /&gt;If you can build Firefox, you should be able to build Komodo. The steps to build are outlined on their &lt;a href="http://svn.openkomodo.com/openkomodo/view/openkomodo/trunk/README.txt"&gt;svn's README.txt&lt;/a&gt;. I'll have to hand it to them for getting something out in 3 months :)&lt;br /&gt;&lt;br /&gt;There are a few things that I stumbled on when doing this that I will note here :&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;There build searches for your distro. I got an error :&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;platinfo.InternalError: Could not determine distro &amp; release from first line of &lt;br /&gt;'/etc/bluewhite64-version' (Bluewhite64 12.0.0).&lt;/span&gt;&lt;br /&gt;I had to add &lt;code&gt;"Bluewhite64": re.compile("^Bluewhite64 ([\d\.]+)"),&lt;/code&gt; to line 583 of &lt;a href="http://grok.openkomodo.com/source/xref/openkomodo/trunk/util/platinfo.py"&gt;util/platinfo.py&lt;/a&gt; and later src/release/codeintel/support/platinfo.py.&lt;br /&gt;&lt;code&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;I had to build python because they only offered the x86 binary. Two mistakes I made were trying to have it find python on my system and symbolic linking python. At one point during the install, something was taking a lot of time and disk was spinning like crazy. I stopped and looked and it was copying everything in /usr to some other directory. A time consuming process indeed.&lt;br /&gt;To solve this, I :&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;got python 2.5 source&lt;/li&gt;&lt;li&gt;created a folder in my home directory called root: &lt;code&gt;mkdir $HOME/root&lt;/code&gt;&lt;/li&gt;&lt;li&gt;untarred and configured python with &lt;code&gt;--prefix $HOME/root&lt;/code&gt; and &lt;code&gt;--enable-shared&lt;/code&gt;&lt;/li&gt;&lt;li&gt;compiled. Then I went to $HOME/root and zipped up the contents : &lt;code&gt;zip -r linux-x86_64.zip .&lt;/code&gt;&lt;/li&gt;&lt;li&gt;Copied linux-x86_64.zip to mozilla/prebuilt/python-2.5/&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Undefined reference to X...., was a already &lt;a href="http://bugs.activestate.com/show_bug.cgi?id=73163"&gt;patched but not committed bug&lt;/a&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;There is something in linux-x86.zip python binary that isn't in the linux-x86_64.zip binary we created. Had to unzip lib/python2.5/site-packages/activestate.py from linux-x86.zip and copy it to build/cvs1.8-ko4.3/mozilla/ko-rel-gtk2-ns-shared-tools/dist/python/lib/python2.5/site-packages/&lt;/li&gt;&lt;br /&gt;&lt;li&gt;I had to explicitly say the version : &lt;code&gt;bk configure -V 4.3.0-devel&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I hope this is useful for anyone else who wants to build it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6315844527658316410-6372169584292522602?l=cesar-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cesar-oss.blogspot.com/feeds/6372169584292522602/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6315844527658316410&amp;postID=6372169584292522602' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6315844527658316410/posts/default/6372169584292522602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6315844527658316410/posts/default/6372169584292522602'/><link rel='alternate' type='text/html' href='http://cesar-oss.blogspot.com/2008/03/building-openkomodo.html' title='Building OpenKomodo'/><author><name>Cesar</name><uri>http://www.blogger.com/profile/14497931470428725496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6315844527658316410.post-5773278204276797667</id><published>2008-03-19T21:07:00.007-04:00</published><updated>2008-03-20T11:21:45.247-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seneca'/><category scheme='http://www.blogger.com/atom/ns#' term='ad'/><category scheme='http://www.blogger.com/atom/ns#' term='blunders'/><category scheme='http://www.blogger.com/atom/ns#' term='release'/><category scheme='http://www.blogger.com/atom/ns#' term='tests'/><title type='text'>yay, incompetence</title><content type='html'>So I have started doing XPCShell tests as part of my next release. This has been giving me a lot of trouble, and not because tests are failing, but because my components and interfaces weren't being registered to XPCShell's liking (the component works fine in Firefox). Today I find, it was because of my incompetence.&lt;br /&gt;&lt;br /&gt;When I exit XPCShell, I got the following message (XPCShell prints its error message when you quit on Windows, unless you call the &lt;span style="font-style:italic;"&gt;quit()&lt;/span&gt; function).&lt;br /&gt;&lt;br /&gt;&lt;code&gt;JS Component Loader: ERROR file:///c:/builds/firefox-debug/mozilla/mozobj/dist/bin/modules/XPCOMUtils.jsm:115&lt;br /&gt;                     TypeError: i is undefined&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This is particularly tricky because it looks like its an XPCOMUtils.jsm error, when in fact it isn't. The mostly likely reason is that a component is trying to use an interface it cannot find, and therefore the component fails to register. But why can't it find it? I checked XPCShell and got the expected message :&lt;br /&gt;&lt;br /&gt;&lt;code&gt;js&gt; print(Components.interfaces.nsIWindowsRegistryService)&lt;br /&gt;undefined&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;After asking in #developers (twice) thinking that I need to add an EXPORT line to Makefile.in. Waldo pointed me to Javascript HTTP server code in &lt;a href="http://mxr.mozilla.org/seamonkey/source/netwerk/test/httpserver/Makefile.in"&gt;netwerk/test/httpserver/Makefile.in&lt;/a&gt;. I compared Makefiles, and noticed one thing that may be causing my problem :&lt;br /&gt;&lt;br /&gt;&lt;code&gt;  46 MODULE          = test_necko&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;I kept everything under one module (grouppolicy). The tests being in the same module as the extension seemed like one rational reason why my code was working in Firefox but not in XPCShell, so I changed by module from grouppolicy to test_grouppolicy.&lt;br /&gt;&lt;br /&gt;And holy **** did it work.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;js&gt; print(Components.interfaces.nsIWindowsRegistryService)&lt;br /&gt;nsIWindowsRegistryService&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;I was a little disappointed that I had to spend two days on such a simple mistake. But I was happy enough that I stopped working to start this blog post. But it made me think about how little I know about what I'm doing sometimes, because we copy and paste a lot of things (Makefile.in, install.rdf). And naturally, when something goes wrong we don't know what to do. In fact, I don't know what a lot of lines in a typical Makefile.in do. But it is mistakes like these that help you learn.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6315844527658316410-5773278204276797667?l=cesar-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cesar-oss.blogspot.com/feeds/5773278204276797667/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6315844527658316410&amp;postID=5773278204276797667' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6315844527658316410/posts/default/5773278204276797667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6315844527658316410/posts/default/5773278204276797667'/><link rel='alternate' type='text/html' href='http://cesar-oss.blogspot.com/2008/03/yay-incompetence.html' title='yay, incompetence'/><author><name>Cesar</name><uri>http://www.blogger.com/profile/14497931470428725496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6315844527658316410.post-2895652496464047719</id><published>2008-03-12T22:17:00.008-04:00</published><updated>2008-03-13T15:24:09.636-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seneca'/><category scheme='http://www.blogger.com/atom/ns#' term='ad'/><category scheme='http://www.blogger.com/atom/ns#' term='proxy'/><title type='text'>Getting this done, one policy at a time</title><content type='html'>So while the bug has been posted, I wanted to go into more details about the policies that have been implemented so far. The complete list is on a google &lt;a href="http://spreadsheets.google.com/pub?key=pqlMBxIY5x3i2yeezToYGfg"&gt;spreadsheet&lt;/a&gt;, but I will outline some of them :&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Apologies to the smaller images. You can click most of them for full resolution.&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Enforce Full Screen&lt;/span&gt; : Some people have been asking for this, for a kiosk setting. This looks identical to IE7 (it's not full-screen by default). The navigation toolbar, bookmarks toolbar, and menu are all gone along with the status bar.&lt;br /&gt;&lt;a href="http://matrix.senecac.on.ca/%7Ecdolivei/images/2008-03-12/enforce-full-screen.jpg"&gt;&lt;img src="http://matrix.senecac.on.ca/%7Ecdolivei/images/2008-03-12/enforce-full-screen-small.jpg" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Disable changing the home page&lt;/span&gt; : As you'd expect.&lt;br /&gt;&lt;a href="http://matrix.senecac.on.ca/%7Ecdolivei/images/2008-03-12/home-page.jpg"&gt;&lt;img src="http://matrix.senecac.on.ca/%7Ecdolivei/images/2008-03-12/home-page-small.jpg" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Disable closing the browser and Explorer windows&lt;/span&gt; : This is pretty funny, neither File-&gt;close nor alt-f4 work. Interestingly, IE7 throws an alert box if you try closing it from the task manager, but your prompted a few seconds later with a dialog box telling you that the application isn't responding and whether you want to force quit. The force quit works. Firefox3 does almost the same thing, but doesn't throw an alert box.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Disable Context Menu&lt;/span&gt; : Disables right-click context menu on web pages&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Hide Favorites menu&lt;/span&gt; : I don't know why you would want to do this, but it's a policy.&lt;br /&gt;&lt;img src="http://matrix.senecac.on.ca/%7Ecdolivei/images/2008-03-12/disable-favorites.jpg" /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Turn off displaying the Internet Explorer Help Menu&lt;/span&gt; : Really folks, wtf?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Turn off tabbed browsing&lt;/span&gt; : This makes some people sad. If you set the policy after creating tabs and saving the session, the tabs still appear. So still some bugs :)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Proxy Settings&lt;/span&gt; : Yay, my part. I guarantee it works or your money back! Here I am connected to a Japanese proxy server and went to google.com&lt;br /&gt;&lt;a href="http://matrix.senecac.on.ca/%7Ecdolivei/images/2008-03-12/proxy-settings.jpg"&gt;&lt;img src="http://matrix.senecac.on.ca/%7Ecdolivei/images/2008-03-12/proxy-settings-small.jpg" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;The achilles' heel in my entire project right now is about:config and chrome://. But we can settle that eventually. Right now, the project needs a lot of code polish and tests.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6315844527658316410-2895652496464047719?l=cesar-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cesar-oss.blogspot.com/feeds/2895652496464047719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6315844527658316410&amp;postID=2895652496464047719' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6315844527658316410/posts/default/2895652496464047719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6315844527658316410/posts/default/2895652496464047719'/><link rel='alternate' type='text/html' href='http://cesar-oss.blogspot.com/2008/03/getting-this-done-one-policy-at-time.html' title='Getting this done, one policy at a time'/><author><name>Cesar</name><uri>http://www.blogger.com/profile/14497931470428725496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6315844527658316410.post-5124299482401414028</id><published>2008-03-09T04:28:00.002-04:00</published><updated>2008-03-09T04:43:50.234-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seneca'/><category scheme='http://www.blogger.com/atom/ns#' term='ad'/><category scheme='http://www.blogger.com/atom/ns#' term='release'/><title type='text'>Release</title><content type='html'>Yes, at around 4:20 in the morning, &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=267888"&gt;bug 267888&lt;/a&gt; got a long awaited response. Well, actually it was the first comment in over a year for that bug, so a toast to that!&lt;br /&gt;&lt;br /&gt;This release is about getting community feedback, and hopefully get a dialog going. Best case scenario is that people tell me to keep going and aim for Firefox4 or something. Worst case, I get nothing, and that's bottom of the barrel. But I have hopes that people will say something (probably to disagree verbosely against generic IE policies).&lt;br /&gt;&lt;br /&gt;Next for the extension is a lot of code cleanup. There are several areas where it is difficult to read, or it's not apparent what's happening.&lt;br /&gt;There also needs to be tests. Maybe some &lt;a href="http://developer.mozilla.org/en/docs/Creating_reftest-based_unit_tests"&gt;reftests&lt;/a&gt;? A requirement if people want this in the codebase.&lt;br /&gt;&lt;br /&gt;Time for sleep.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6315844527658316410-5124299482401414028?l=cesar-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cesar-oss.blogspot.com/feeds/5124299482401414028/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6315844527658316410&amp;postID=5124299482401414028' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6315844527658316410/posts/default/5124299482401414028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6315844527658316410/posts/default/5124299482401414028'/><link rel='alternate' type='text/html' href='http://cesar-oss.blogspot.com/2008/03/release.html' title='Release'/><author><name>Cesar</name><uri>http://www.blogger.com/profile/14497931470428725496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6315844527658316410.post-1327955659035276860</id><published>2008-03-04T22:34:00.004-05:00</published><updated>2008-03-04T23:35:32.907-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seneca'/><category scheme='http://www.blogger.com/atom/ns#' term='ad'/><category scheme='http://www.blogger.com/atom/ns#' term='mochitests'/><category scheme='http://www.blogger.com/atom/ns#' term='fuel'/><category scheme='http://www.blogger.com/atom/ns#' term='tests'/><title type='text'>FUELing the fire</title><content type='html'>While doing some work on updating one of the policies to use &lt;a href="http://developer.mozilla.org/en/docs/FUEL"&gt;FUEL&lt;/a&gt;, I hit upon a &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=421005"&gt;bug&lt;/a&gt; in the library. While I wasn't in the mood to patch (it is a trivial fix), I thought this would be a great opportunity to try some Mochitests.&lt;br /&gt;&lt;br /&gt;Previously I discussed adding &lt;a href="http://cesar-oss.blogspot.com/2008/02/dynamic-proxy-settings.html"&gt;js components to make getting registry values easier&lt;/a&gt;, it would nice to have some tests in the process.&lt;br /&gt;&lt;br /&gt;I actually rarely do tests actually. I shy away from them for several reasons, but I want to try and turn around this bad habit. I &lt;span style="font-style:italic;"&gt;strongly&lt;/span&gt; dislike doing manual tests, because if something goes wrong and you get a fix, you have to make sure nothing else broke in the process. Thankfully, Mozilla offers some &lt;a href="http://developer.mozilla.org/en/docs/Mozilla_automated_testing"&gt;choice in doing your tests&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Starting Mochitest was acutally a problem. All your tests and utilities are in &lt;code&gt;mozobj/_tests/testing/mochitest/&lt;/code&gt;. You must be in that directory when running the mochitests. The tricky bit seems to finding where exactly your tests are. There seems to be a few possiblities:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;browser/*&lt;br /&gt;chrome/*&lt;br /&gt;tests/*&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;The directory structure follows the tree. For example, since FUEL's tests are in &lt;code&gt;mozilla/browser/fuel/test/&lt;/code&gt;, the path to fuel's chrome tests (if it had any) would be in &lt;code&gt;chrome/browser/fuel/test/&lt;/code&gt;.&lt;br /&gt;The script running the tests is a perl script called &lt;code&gt;runtests.pl&lt;/code&gt;. Depending on the parameters, it looks in different places&lt;br /&gt;&lt;code&gt;&lt;br /&gt;--chrome is the chrome/* directory&lt;br /&gt;--browser-chrome is the browser/* directory&lt;br /&gt;&lt;span style="font-style:italic;"&gt;nothing&lt;/span&gt; is the tests/* directory&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;You can pass the &lt;code&gt;--test-path=browser/fuel/test/some_test.html&lt;/code&gt; to do one unit test, or test the entire directory by doing &lt;code&gt;--test-path=browser/fuel/test/ --auto-run&lt;/code&gt;. If you leave &lt;code&gt;--test-path=...&lt;/code&gt; out, it will test everything. Since my code is in &lt;code&gt;browser/&lt;/code&gt;, I did the following command :&lt;br /&gt;&lt;br /&gt;&lt;code&gt;perl runtests.pl --browser-chrome --test-path=browser/fuel/test/ --autorun&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Predictably, it passed. That's because it wasn't testing a certain condition. I submitted a test case with the &lt;a href="https://bugzilla.mozilla.org/attachment.cgi?id=307383"&gt;bug&lt;/a&gt;. I still know very little about how to create a Mochitest, but how to &lt;span style="font-style:italic;"&gt;run&lt;/span&gt; the tests was just as important as the testcase itself. So in that sense, I am happy with the results.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://matrix.senecac.on.ca/~cdolivei/files/professor.txt"&gt;Inspirational link&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6315844527658316410-1327955659035276860?l=cesar-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cesar-oss.blogspot.com/feeds/1327955659035276860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6315844527658316410&amp;postID=1327955659035276860' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6315844527658316410/posts/default/1327955659035276860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6315844527658316410/posts/default/1327955659035276860'/><link rel='alternate' type='text/html' href='http://cesar-oss.blogspot.com/2008/03/fueling-fire.html' title='FUELing the fire'/><author><name>Cesar</name><uri>http://www.blogger.com/profile/14497931470428725496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6315844527658316410.post-8363574639379210009</id><published>2008-02-27T17:00:00.009-05:00</published><updated>2008-02-27T21:35:39.203-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seneca'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='venkman'/><category scheme='http://www.blogger.com/atom/ns#' term='debugging'/><title type='text'>Using Venkman to combat terrorism and save freedom</title><content type='html'>&lt;a href="http://www.mozilla.org/projects/venkman/"&gt;Venkman&lt;/a&gt; has been a big help during this release, and it something that I want to share. I have been avoiding using a javascript for a while, and that's mainly because I opted to use alert() and dump() instead. But after a while, they both suck and can make debugging incredibly frustrating especially if you &lt;span style="font-style:italic;"&gt;have&lt;/span&gt; to &lt;a href="http://developer.mozilla.org/en/docs/Setting_up_extension_development_environment"&gt;restart firefox&lt;/a&gt; each time to go one step ahead.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Introduction&lt;/span&gt;&lt;br /&gt;It's been out since 0.9 folks!&lt;br /&gt;&lt;img src="http://matrix.senecac.on.ca/~cdolivei/images/venkman.png"/&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Install&lt;/span&gt;&lt;br /&gt;Grab the &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/216"&gt;extension&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Setting it up&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Under Debug menu, make sure "Exclude Browser Files" is &lt;span style="font-style:italic;"&gt;not&lt;/span&gt; checked.&lt;/li&gt;&lt;li&gt;Under the File menu, check "Save Break/Watch Settings on Exit".&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Setting Breakpoints&lt;/span&gt;&lt;br /&gt;This is reasonably simple. On the left are your files. Here I am debugging ProxyEnable.js. &lt;br /&gt;&lt;img src="http://matrix.senecac.on.ca/~cdolivei/images/files.png"/&gt;&lt;br /&gt;Below it are the functions within that file. Double-clicking on the filename brings up the source code on the right.&lt;br /&gt;&lt;img src="http://matrix.senecac.on.ca/~cdolivei/images/source.png"/&gt;&lt;ol&gt;&lt;li&gt;Place your breakpoints. The dashes near the left side of the source are where you can put your breakpoints. Here I am putting a breakpoint just before the if-statement.&lt;/li&gt;&lt;li&gt;Exit venkman (this will close firefox)&lt;/li&gt;&lt;li&gt;Relaunch firefox with -venkman argument. For example :&lt;br /&gt;&lt;span style="font-style:italic;"&gt;/path/to/firefox -venkman --no-remote -profile /path/to/profile&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Once you restart, venkman starts first and catches any breakpoints.&lt;br /&gt;&lt;img src="http://matrix.senecac.on.ca/~cdolivei/images/break.png"/&gt;&lt;br /&gt;This is ideal when you can't use browser chrome to initiate the javascript, for example, js code that is executed on startup.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Fun&lt;/span&gt;&lt;br /&gt;Once the debugger breaks, you have access to all the variables. So you can start investigating the problem much more effectively than with dump. You use the black window at the bottom as an interactive javascript shell.&lt;br /&gt;&lt;img src="http://matrix.senecac.on.ca/~cdolivei/images/interactive.png"/&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Navigation&lt;/span&gt;&lt;br /&gt;The buttons at the top let you go to the next line, go deeper into js functions, or continue. Try them out.&lt;br /&gt;&lt;img src="http://matrix.senecac.on.ca/~cdolivei/images/buttons.png"/&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Now Code&lt;/span&gt;&lt;br /&gt;No more excuses.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6315844527658316410-8363574639379210009?l=cesar-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cesar-oss.blogspot.com/feeds/8363574639379210009/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6315844527658316410&amp;postID=8363574639379210009' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6315844527658316410/posts/default/8363574639379210009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6315844527658316410/posts/default/8363574639379210009'/><link rel='alternate' type='text/html' href='http://cesar-oss.blogspot.com/2008/02/using-venkman-to-combat-terrorism-and.html' title='Using Venkman to combat terrorism and save freedom'/><author><name>Cesar</name><uri>http://www.blogger.com/profile/14497931470428725496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6315844527658316410.post-7395652510900756942</id><published>2008-02-23T21:31:00.005-05:00</published><updated>2008-03-25T00:14:06.857-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bluewhite64'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='x86_64'/><title type='text'>x86_64 woes</title><content type='html'>I now have an amd64 (Sempron) desktop and an emt64 (Core 2 Duo) laptop and fully 64-bit and &lt;a href="http://www.unix2038.com/"&gt;Y2K38&lt;/a&gt; ready, which I am quickly finding out that it doesn't get it's share of love.&lt;br /&gt;&lt;br /&gt;For example, Firefox/Thunderbird nightlies and OpenOffice don't have x86_64 builds. Now, if you have a 32-bit OS on a x86_64 architecture, it's ok and you can emulate. But if your running x86_64 without 32-bit libraries, your in trouble.&lt;br /&gt;&lt;br /&gt;Fortunately, my desktop is equipped with Ubuntu, and the greatest package manager, ever.&lt;br /&gt;All you should need to do is :&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sudo apt-get install ia32-libs&lt;br /&gt;sudo apt-get install ia32-gtk&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This runs prism with a few warnings about an unsupported locale or something. Which is a lot better than compiling it from source.&lt;br /&gt;&lt;br /&gt;My laptop however uses BlueWhite64, and I by slackwarian code (this is a complete lie), must compile everything from source. Unfortunately, here I don't have any of the 32-bit libs. So that's a lot of compiling. I wonder if it's even worth it. I'm fairly tempted to just skip it and download &lt;a href="http://data.linux64packages.net:8080/bluewhite64-12.0/arny/ia32-emulation/"&gt;the i386 packages&lt;/a&gt;. But that would be taking the ubuntu way out, and I'm likely to get lynched by people like me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6315844527658316410-7395652510900756942?l=cesar-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cesar-oss.blogspot.com/feeds/7395652510900756942/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6315844527658316410&amp;postID=7395652510900756942' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6315844527658316410/posts/default/7395652510900756942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6315844527658316410/posts/default/7395652510900756942'/><link rel='alternate' type='text/html' href='http://cesar-oss.blogspot.com/2008/02/x8664-woes.html' title='x86_64 woes'/><author><name>Cesar</name><uri>http://www.blogger.com/profile/14497931470428725496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6315844527658316410.post-6317561901758460651</id><published>2008-02-18T21:51:00.009-05:00</published><updated>2008-02-24T00:05:56.231-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seneca'/><category scheme='http://www.blogger.com/atom/ns#' term='ad'/><category scheme='http://www.blogger.com/atom/ns#' term='proxy'/><title type='text'>Dynamic Proxy Settings</title><content type='html'>There were three things I was planning on doing for the previous release that didn't get finished, and something extra that I didn't plan on doing and probably won't be done (priorities and such) but interesting to know that it exists.&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Proxy Settings using group policy&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Disable changing the proxy settings&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Create some Javascript Wrappers around the XPCOM components for locating/reading registry keys&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Proxy Settings using Group Policy&lt;/span&gt;&lt;br /&gt;This was something that almost everyone that &lt;a href="http://www.kaply.com/weblog/2008/01/24/firefox-group-policy-and-active-directory/#comments"&gt;commented&lt;/a&gt; said was an important policy to them. I think I only once had to ever use a proxy (I wanted to watch a John Stewart clip from a website then wouldn't let me in, so I had to proxy to an American server to view it). Regardless, if it's the most popular request, I'll do what I can.&lt;br /&gt;I have it working for http:// sites. Still need to make changes for the other protocols. &lt;a href="http://www.oxymoronical.com/"&gt;Mossop&lt;/a&gt; also taught me a lesson that &lt;a href="http://developer.mozilla.org/en/docs/XUL:preferences"&gt;&amp;lt;preferences&amp;gt;&lt;/a&gt; requires a &amp;lt;prefwindow&amp;gt;. That's going to be a problem when you have to use &amp;lt;overlay&amp;gt;'s instead of a prefWindow, so I had to use an &lt;a href="http://mxr.mozilla.org/seamonkey/source/modules/libpref/public/nsIPrefBranch.idl"&gt;nsIPrefBranch&lt;/a&gt; instead. On the lighter side, I can refactor and finally have an excuse to use &lt;a href="http://developer.mozilla.org/en/docs/FUEL:PreferenceBranch"&gt;FUEL&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Disable changing the proxy settings&lt;/span&gt;&lt;br /&gt;nsIPrefBranch supports locking preferences so that the user cannot change them in about:config or in the UI (it will grey out the settings).&lt;br /&gt;&lt;br /&gt;Unfortunately, you can only lock the default value. Which kinda sucks at the moment. The other two alternatives is to make the option of changing your proxy greyed out or hidden. IE7 has it's own tab for connection which completely disappears with the right policy enabled. Since Firefox's proxy settings is located in the same UI tab as offline storage, it is probably best for us to disable the button. To avoid allowing people to change the settings via about:config, we would have a policy to disable about:config access (get back to me on this, I don't have an answer on how we can do that yet).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Javascript Wrappers around the XPCOM components for locating/reading registry keys&lt;/span&gt;&lt;br /&gt;I started doing some work on doing some JS wrappers around registry keys, since I dislike the current implementation to a certain degree. I won't go into details, because it's more of a preference then anything else.&lt;br /&gt;&lt;br /&gt;I'll end with an amusing quotation.&lt;br /&gt;&lt;/overlay&gt;&lt;/prefwindow&gt;&lt;/preferences&gt;&lt;blockquote&gt;And _please_ file bugs when you hit problems like this.  I flunked long-distance widebeam telepathy in college, so I'm no good at just guessing that you're running into problems...&lt;br /&gt;-- Boris Zbarsky&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6315844527658316410-6317561901758460651?l=cesar-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cesar-oss.blogspot.com/feeds/6317561901758460651/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6315844527658316410&amp;postID=6317561901758460651' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6315844527658316410/posts/default/6317561901758460651'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6315844527658316410/posts/default/6317561901758460651'/><link rel='alternate' type='text/html' href='http://cesar-oss.blogspot.com/2008/02/dynamic-proxy-settings.html' title='Dynamic Proxy Settings'/><author><name>Cesar</name><uri>http://www.blogger.com/profile/14497931470428725496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6315844527658316410.post-4614070761327255205</id><published>2008-02-06T14:39:00.002-05:00</published><updated>2008-02-06T21:54:17.175-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seneca'/><title type='text'>Generic IE policies in Firefox</title><content type='html'>This is something neat that I cannot take credit for. I just put it in a tree-friendly extension. I got the source onto an svn repository for people to play around with :&lt;br /&gt;&lt;br /&gt;svn://cdot.senecac.on.ca/ff-ad&lt;br /&gt;&lt;br /&gt;I put up some slightly more &lt;a href="http://zenit.senecac.on.ca/wiki/index.php/Build_Active_Directory_support"&gt;detailed steps&lt;/a&gt; into the wiki on how to set up Firefox. In the meantime, some explanation of what IE settings means for Firefox.&lt;br /&gt;&lt;br /&gt;IE has several policies that Firefox can use, for example you can disable tabs and the help menu. Below we have the example of turning off the help menu&lt;br /&gt;&lt;img src="http://matrix.senecac.on.ca/%7Ecdolivei/images/gpedit.png" /&gt;&lt;br /&gt;Ignore the bit about IE for a moment.&lt;br /&gt;&lt;br /&gt;If you open up Firefox, you get the predicted results&lt;br /&gt;&lt;img src="http://matrix.senecac.on.ca/%7Ecdolivei/images/firefox.png" /&gt;&lt;br /&gt;Which is ok. If you look elsewhere, you'll see that not all the help functionality is disabled.&lt;br /&gt;&lt;img src="http://matrix.senecac.on.ca/%7Ecdolivei/images/prefs.png" /&gt;&lt;br /&gt;Which is something that still needs to be fixed. I also found some javascript errors that I would like to fix as well.&lt;br /&gt;&lt;br /&gt;But the problem now is the overwhelming amount of policies in place. Mike's blog should help me out a fair bit with this, as he has got some response. More updates as this goes along.&lt;br /&gt;&lt;br /&gt;==UPDATE==&lt;br /&gt;So I was a little bit wrong. If you read the entire IE policy, it doesn't explicitly say that all help functionality will be turned off. To make a liar out of me, you can go into Options and click on the question mark at the top-right corner and help will popup. Just the help menu is disabled it seems (and F1).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6315844527658316410-4614070761327255205?l=cesar-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cesar-oss.blogspot.com/feeds/4614070761327255205/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6315844527658316410&amp;postID=4614070761327255205' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6315844527658316410/posts/default/4614070761327255205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6315844527658316410/posts/default/4614070761327255205'/><link rel='alternate' type='text/html' href='http://cesar-oss.blogspot.com/2008/02/generic-ie-policies-in-firefox.html' title='Generic IE policies in Firefox'/><author><name>Cesar</name><uri>http://www.blogger.com/profile/14497931470428725496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6315844527658316410.post-1979546360061028399</id><published>2008-01-30T20:13:00.000-05:00</published><updated>2008-01-31T20:05:30.490-05:00</updated><title type='text'>Back on the yellow brick road</title><content type='html'>After a series of unfortunate events, things seem getting better. I got enough back that I can start working again.&lt;br /&gt;&lt;br /&gt;I started looking through some of FirefoxADM and WetDog code a while back, and I have been grossly misjudged these programs. Neither of them actually turned out to be extensions. This isn't a bad thing actually. FirefoxADM seems to be a fancy visual basic script that reads the registry and makes pref changes. WetDog is some C++ code (I haven't analyzed it too closely).&lt;br /&gt;&lt;br /&gt;One of the things that I was worried about early on was redoing the work that has already been done. That doesn't look like it's going to happen. However, now the thing is trying to get enough work done for the next release.&lt;br /&gt;&lt;br /&gt;Mike Kaply has started doing some work on using overlays to disable certain functionality, and loading those overlays dynamically. I need another copy of that program, put it into an extension if it's not already, and lubricate the firefox tree and jam it in. I also want to be able to set those overlays based on some registry values (there is a big fuss in bugzilla on where these key/value pairs should be. But that seems to have gotten in the way of getting actual work done).&lt;br /&gt;&lt;br /&gt;This will probably be a giant hack, but it will be a good start. And it can be refined later as the semester goes.&lt;br /&gt;&lt;br /&gt;Also, Mike made a useful &lt;a href="http://www.kaply.com/weblog/2008/01/24/firefox-group-policy-and-active-directory/"&gt;blog post&lt;/a&gt; getting comments from people who have enterprise experience trying to figure out what enterprises would like to see. This will do until I can find some enterprises to collaberate with.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6315844527658316410-1979546360061028399?l=cesar-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cesar-oss.blogspot.com/feeds/1979546360061028399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6315844527658316410&amp;postID=1979546360061028399' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6315844527658316410/posts/default/1979546360061028399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6315844527658316410/posts/default/1979546360061028399'/><link rel='alternate' type='text/html' href='http://cesar-oss.blogspot.com/2008/01/back-on-yellow-brick-road.html' title='Back on the yellow brick road'/><author><name>Cesar</name><uri>http://www.blogger.com/profile/14497931470428725496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6315844527658316410.post-2673889977384920571</id><published>2008-01-14T01:05:00.000-05:00</published><updated>2008-01-15T21:34:23.531-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seneca'/><title type='text'>A leap of faith</title><content type='html'>For the next three and a half months, I will be working on integrating Active Directory into Firefox. This may come as a shock (or not), but after working on Linux for anything remotely productive in the past 3 years, my Windows knowledge could use a fair bit of upgrading.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Why is Active Directory special?&lt;/span&gt;&lt;br /&gt;It isn't useful for the general public, but rather for Enterprise administrators who want to control the preferences of the browser. For example, let's say you want to have a default homepage for Firefox. How can you do this without going to each machine and setting the preference? Without re-imaging (Seneca's solution)?&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://matrix.senecac.on.ca/%7Ecdolivei/images/home_page_gpo.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://matrix.senecac.on.ca/%7Ecdolivei/images/home_page_gpo.png" alt="" border="0" /&gt;&lt;/a&gt;Setting homepage for IE7 (don't ask why it says IE6)&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;Well, you can do it Firefox, &lt;span style="font-style: italic;"&gt;sorta&lt;/span&gt;. You need to download an &lt;a href="http://sourceforge.net/projects/firefoxadm"&gt;extension&lt;/a&gt;, at the very least. I haven't actually tried it. I may be wrong. And it is probably more complicated than that.&lt;br /&gt;&lt;br /&gt;The solution seems to be Active Directory and Group Policies. Or it seems to be anyways. The concept is still new to me, but this is  the next few months of work. It is not only required piecing this stuff together (and maybe some upgrading), but also working at it until it gets to the tree. I will hopefully understand &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=257197"&gt;Andrew's pain&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;My first release will be learning about GPO, and starting to take apart extensions like CCK and FirefoxADM. I will have some documentation, definitely up on the wiki&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6315844527658316410-2673889977384920571?l=cesar-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cesar-oss.blogspot.com/feeds/2673889977384920571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6315844527658316410&amp;postID=2673889977384920571' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6315844527658316410/posts/default/2673889977384920571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6315844527658316410/posts/default/2673889977384920571'/><link rel='alternate' type='text/html' href='http://cesar-oss.blogspot.com/2008/01/leap-of-faith.html' title='A leap of faith'/><author><name>Cesar</name><uri>http://www.blogger.com/profile/14497931470428725496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6315844527658316410.post-7959098846260081730</id><published>2008-01-14T00:46:00.000-05:00</published><updated>2008-01-15T20:30:17.260-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seneca'/><title type='text'>An introduction</title><content type='html'>Firstly, an introduction.&lt;br /&gt;&lt;br /&gt;My name is Cesar Oliveira. I am my 4th year of a Bachelors of Software Development at Seneca College. That is really all you need to know about me.&lt;br /&gt;&lt;br /&gt;I have decided to make this blog, separate from my &lt;a href="http://cesarmoco.wordpress.com/"&gt;wordpress&lt;/a&gt; blog, mainly because I can more freely post here without spamming planet@mozilla. I will still post in wordpress, if the announcement I feel needs to reach more people.&lt;br /&gt;&lt;br /&gt;This blog will mainly deal with my experience working with Mozilla. I have been working with Mozilla (both as a intern and as a volunteer). I am now doing a project as part of a &lt;a href="http://zenit.senecac.on.ca/wiki/index.php/DPS911"&gt;course&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6315844527658316410-7959098846260081730?l=cesar-oss.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cesar-oss.blogspot.com/feeds/7959098846260081730/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6315844527658316410&amp;postID=7959098846260081730' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6315844527658316410/posts/default/7959098846260081730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6315844527658316410/posts/default/7959098846260081730'/><link rel='alternate' type='text/html' href='http://cesar-oss.blogspot.com/2008/01/introduction.html' title='An introduction'/><author><name>Cesar</name><uri>http://www.blogger.com/profile/14497931470428725496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
