<?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-38606689</id><updated>2012-01-26T22:09:37.602-08:00</updated><title type='text'>Xoatlicue</title><subtitle type='html'>Mozilla-ish things I am doing....</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://xoatlicue.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://xoatlicue.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Tau Central</name><uri>http://www.blogger.com/profile/04639944664204798442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_T3myM7H29Os/SUFfoOpMGNI/AAAAAAAAAAM/uVo48TpRUA8/S220/MononokeGhostieLg.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>33</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-38606689.post-6104858524772836943</id><published>2011-08-28T17:30:00.001-07:00</published><updated>2011-08-28T17:55:58.549-07:00</updated><title type='text'>The Internet: how are those tubes working anyway?</title><content type='html'>I am finding myself dealing with an unexpected question. Does the Internet work? You know, the whole moving data from place to place. Is it really working?&lt;br /&gt;&lt;br /&gt;Well, of course it is. But perhaps not for everyone. I am trying to find out why we often have problems reaching our data centers. The company I work for sells software for people learning English. I think this is the root of the problem. There might be 2 billion people on the planet with an interest in learning English, but not too many of them live near a T1. Why can't I reach my data centers? Maybe because they are in places like Ulan Bator and Ho Chi Minh City.&lt;br /&gt;&lt;br /&gt;Why do we need all these data centers? Often it is because we have to have an in-country data center to avoid having all of our customers take a "Golden Shield" hit. If customers in China, or Vietnam or Saudi Arabia, or other places, need to get content from outside the country, the latency turns out to be very high. Get the content into an in-country data center and your performance problems go away.&lt;br /&gt;&lt;br /&gt;But here is an odd thing. We have customers in Jakarta that have connect problems. Getting an ISP in Jakarta does not fix it. Turns out that a connection from one part of Jakarta to another part of Jakarta is slow and unreliable. Serving data from Tokyo to Jakarta, however, is fast and reliable. Hm.&lt;br /&gt;&lt;br /&gt;Actually I am interested if anyone has ideas about how to measure connectivity more broadly. One might think the net would have distributed sources of information about connectivity, but it does not seem to be so. One can measure pings, but one needs to keep track of a lot of pings to figure anything out. One can run traceroutes. Or not. Somebody in Mongolia blocks traceroutes, for example. And traceroutes do not necessarily follow the same routes that regular traffic will. Or you can buy reports about connectivity, if you have spend tens of thousands on them or sign up for fairly expensive services. And Akamai and other services work great, assuming you want to sell something to the creme de la creme of the First World. And that is, after all, most of the businesses out there.&lt;br /&gt;&lt;br /&gt;I wonder if there is a way to collect connectivity information in a distributed, peer-to-peer manner. Perhaps we can use this Internet thing for that, too. Or is something available and I just have not hit upon it? Does anyone run "weather reports" for the Internet? Could it be accessed as a utility? Looking for suggestions, questions, thoughts, ridicule, insults, jibes, or whatever works for you.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38606689-6104858524772836943?l=xoatlicue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xoatlicue.blogspot.com/feeds/6104858524772836943/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38606689&amp;postID=6104858524772836943' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/6104858524772836943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/6104858524772836943'/><link rel='alternate' type='text/html' href='http://xoatlicue.blogspot.com/2011/08/internet-how-are-those-tubes-working.html' title='The Internet: how are those tubes working anyway?'/><author><name>Tau Central</name><uri>http://www.blogger.com/profile/04639944664204798442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_T3myM7H29Os/SUFfoOpMGNI/AAAAAAAAAAM/uVo48TpRUA8/S220/MononokeGhostieLg.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38606689.post-4198540783230362227</id><published>2011-06-16T13:48:00.001-07:00</published><updated>2011-06-16T14:02:09.942-07:00</updated><title type='text'>Why iCloud?</title><content type='html'>I am increasingly glad that I left Apple to do other things. And I am sure Apple will continue to make more money for a while. But one has to wonder.&lt;br /&gt;&lt;br /&gt;Here is a company dedicated to the "Wow!". The stars in their developer teams create these applications that you launch and, really, they are beautiful. They are only 85% finished, but they look good and one does not see the problems until a few days later. Then, hey, you already bought it. They have a Support group to make you feel better about this. And you can file bugs. And wait for the next version. But that's about it.&lt;br /&gt;&lt;br /&gt;There was only one place in Apple that spoke about things like MTBF and that actually measured things like reliability. That was the server group. You know, the one whose products got deprecated and that is probably mostly gone at this point. Apple's apps are known for the elegance of their UIs and not for reliability. Everyone else at Apple says "You re-boot and your problem is gone? Problem solved." And these are the people that are going to build a cloud-based music service?&lt;br /&gt;&lt;br /&gt;The important people at Apple used to design things, create standards, carve beauty out of technological crap. Now, the important people are going to be running a data center full of HP machines. In North Carolina. It is truly sad.&lt;br /&gt;&lt;br /&gt;Of course, iCloud is a good idea for Apple. You used to pay for your music, own your music, and hold your music. With the iTunes Store, you pay for your music and hold your music and Apple owns your music. Now, with iCloud, you pay for your music, Apple holds your music and Apple owns your music. And this is a good deal. Why is Apple doing this? They might say, "because iCould."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38606689-4198540783230362227?l=xoatlicue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xoatlicue.blogspot.com/feeds/4198540783230362227/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38606689&amp;postID=4198540783230362227' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/4198540783230362227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/4198540783230362227'/><link rel='alternate' type='text/html' href='http://xoatlicue.blogspot.com/2011/06/why-icloud.html' title='Why iCloud?'/><author><name>Tau Central</name><uri>http://www.blogger.com/profile/04639944664204798442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_T3myM7H29Os/SUFfoOpMGNI/AAAAAAAAAAM/uVo48TpRUA8/S220/MononokeGhostieLg.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38606689.post-6751749190092452134</id><published>2010-01-18T23:02:00.001-08:00</published><updated>2010-01-18T23:16:43.953-08:00</updated><title type='text'>China Stealing IP? I'm Shocked, Shocked I Tell You....</title><content type='html'>We're hearing a lot of news about China trying to steal intellectual property from companies like Google. There's a lot of sanctimonious news coverage about how we have innovative companies and China is trying to steal their way out of having to do the work.&lt;br /&gt;&lt;br /&gt;Then one of these "innovative" companies was named. Microsoft. Then it occurred to me where the objection really comes from. Microsoft has never done an innovative thing, ever, except invent OLE. And you can thank that for your virus problems. But they do buy lots and lots of other companies that have innovated. So, in the US, the currency of our society is just that, currency. The dollar rules all. In China, political power is the currency. So, Microsoft spends one type of currency to get access to other people's creativity because they are out of ideas. And China spends another type of currency to get access to other people's creativity because they are out of ideas. They are different, but there are similarities.&lt;br /&gt;&lt;br /&gt;We lose a lot of IP because we manufacture in China. We manufacture there because they have weak worker protection laws, no environmental regulations and, basically, business can do what it wants. There is a basic lack of civic law. Want to make cheap plastic crap and dump the waste in the river? Rock and roll! But then our stuff gets stolen. CDs get pirated, designs get copied. Why? Perhaps it is because there is a basic lack of civic law. But isn't that why we want to manufacture there in the first place? And then, do we get to complain about it as well?&lt;br /&gt;&lt;br /&gt;People who are really being creative know their work cannot be outsourced. Companies trying to milk a fifty-year old file of patents have reason to be upset. It just does not bother me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38606689-6751749190092452134?l=xoatlicue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xoatlicue.blogspot.com/feeds/6751749190092452134/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38606689&amp;postID=6751749190092452134' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/6751749190092452134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/6751749190092452134'/><link rel='alternate' type='text/html' href='http://xoatlicue.blogspot.com/2010/01/china-stealing-ip-im-shocked-shocked-i.html' title='China Stealing IP? I&apos;m Shocked, Shocked I Tell You....'/><author><name>Tau Central</name><uri>http://www.blogger.com/profile/04639944664204798442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_T3myM7H29Os/SUFfoOpMGNI/AAAAAAAAAAM/uVo48TpRUA8/S220/MononokeGhostieLg.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38606689.post-4245448521484108140</id><published>2009-11-18T11:30:00.000-08:00</published><updated>2009-11-18T11:44:05.408-08:00</updated><title type='text'>Three Pictures</title><content type='html'>What do these three pictures have in common?&lt;br /&gt;&lt;br /&gt;&lt;table border="1"&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;&lt;img src="http://www.wykiwyk.com/mozilla/misc/DHS_NTA_Warning.png" /&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;&lt;img src="http://www.wykiwyk.com/mozilla/misc/prop65warning.png" /&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;&lt;img src="http://www.wykiwyk.com/mozilla/misc/unknownAddonAuthorWarning.png" /&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;The first is a US Dept of Homeland Security warning. The second is a Proposition 65 warning from California. The third is from Firefox when we add _any_ add-on.&lt;br /&gt;&lt;br /&gt;Obvious questions are:&lt;br /&gt;- does anyone feel safer when they see these?&lt;br /&gt;- do these actually inform one of anything?&lt;br /&gt;- why are these being displayed? for whose benefit?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38606689-4245448521484108140?l=xoatlicue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xoatlicue.blogspot.com/feeds/4245448521484108140/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38606689&amp;postID=4245448521484108140' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/4245448521484108140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/4245448521484108140'/><link rel='alternate' type='text/html' href='http://xoatlicue.blogspot.com/2009/11/three-pictures.html' title='Three Pictures'/><author><name>Tau Central</name><uri>http://www.blogger.com/profile/04639944664204798442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_T3myM7H29Os/SUFfoOpMGNI/AAAAAAAAAAM/uVo48TpRUA8/S220/MononokeGhostieLg.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38606689.post-3754783113372447720</id><published>2009-04-07T08:41:00.000-07:00</published><updated>2009-04-07T08:58:37.019-07:00</updated><title type='text'>Benefits of Open Source, or Why the iPhone Will Continue to Suck</title><content type='html'>I am doing less direct development using Mozilla tools lately, but a recent trip to British Columbia has brought home to me, again, why Mozilla is important.&lt;br /&gt;&lt;br /&gt;I am doing iPhone development and will, in the future, be doing Android development as well. But I was surprised that, on most of my trip, my iPhone was useless. I often did not have cell service, but when I did, I had no access to network-based services. Apparently I would have had to connect via Rogers and pay roaming charges and I was unwilling to do so. This is the problem with a single point-of-failure in the Internet. This is why we do not have one company, like Apple, running the Internet. Apple is seeking control of the iPhone market for obvious reasons, but this costs us as consumers. We should, as we pay those ever-increasing monthly charges, keep this in mind. Really, the fact that we cannot have data services everywhere is just sad. Companies would rather offer less and control more of it than offer more to consumers if they lose some control. And let's not even talk about how bad the App Store is for finding things. Please. There's to much and it hurts to talk about it.&lt;br /&gt;&lt;br /&gt;I am also recently using Chandler for my calendar and for keeping track of 'to do' items. It is an interesting app and I went to see the latest dev versions of it and see about building it. Apparently, I have a level of expectation about open source projects. Apparently it is not worth it to interact with the source unless it builds like Mozilla. Chandler development is Linux-only, and while I could upgrade to the version of Parallels I need (since VirtualBox does not see to do enough for me) and build it that way, I find myself unwilling to do so. Despite my ability to complain about the quirks of building mozilla tools, it seems to work better than most alternatives. But I really only complain loudest about something when I like it. This may not be obvious to people to whom I complain.&lt;br /&gt;&lt;br /&gt;It turns out that being connection-less for a time is a good thing, though. It makes you think about the value and cost of being always connected. When I was working for Mozilla, one of the things that was a problem for me (though I did not realize it at the time) is that Mozilla's offices are on-line all the time. It is too easy to be "at the office" every day, all day. Reading most Mozilla posts you see how the veterans deal with it, so that they can keep their families, their friends and their sanity. It probably would have been easier to focus if I had not found the information ecosystem around Mozilla to be so rich and fascinating. One has to balance finding that connection with a new friend in Europe with the need to get things done. It is easier, for now, working for myself, but I will have to figure this out someday. We'll see.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38606689-3754783113372447720?l=xoatlicue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xoatlicue.blogspot.com/feeds/3754783113372447720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38606689&amp;postID=3754783113372447720' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/3754783113372447720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/3754783113372447720'/><link rel='alternate' type='text/html' href='http://xoatlicue.blogspot.com/2009/04/benefits-of-open-source-or-why-iphone.html' title='Benefits of Open Source, or Why the iPhone Will Continue to Suck'/><author><name>Tau Central</name><uri>http://www.blogger.com/profile/04639944664204798442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_T3myM7H29Os/SUFfoOpMGNI/AAAAAAAAAAM/uVo48TpRUA8/S220/MononokeGhostieLg.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38606689.post-5349081305434362310</id><published>2009-02-08T15:14:00.000-08:00</published><updated>2009-02-08T16:40:53.748-08:00</updated><title type='text'>Software Patents and Open-Source</title><content type='html'>I am slightly sanguine about the possibility that reality and rationality might actually drive the Supreme Court to invalidate software patents, which they might eventually do in the &lt;a href="http://arstechnica.com/tech-policy/news/2008/04/closely-watched-case-may-spell-trouble-for-software-patents.ars"&gt;In re Bilski&lt;/a&gt; case. I hope the open-source community appreciates the importance of this. &lt;br /&gt;&lt;br /&gt;I was working at Apple as they were looking at making a certain technology open source. There was quite a bit of evidence that making this technology available via open-source licenses would make it much more widely usable and it would get maintenance and TLC that Apple had no business case to provide, but it got nixed from higher-ups. &lt;br /&gt;&lt;br /&gt;It turns out that one of the best uses of a patented software technology is to seal it in a black box and say nothing. It is a secret landmine that one can use against others. This will not help the software get used, but that is not the point. It does not actually matter whether it is a good patent or not. Lots of bad patents get approved by the Patent Office and the cost of defending against the holder of a bad patent is the same as the cost of defending against the holder of a patent that actually does involve innovation. &lt;br /&gt;&lt;br /&gt;Software companies use these patents like playing cards. One big company goes to another and tries to strong-arm some licensing money out of them. The target company pulls out its cards and says, "Sue us for X, Y, and Z and we will sue you for A, B and C." Eventually their lawyers sit down, cards are shown, somebody decides to pay something or not, they write a cross-licensing agreement and both companies go home happy. &lt;br /&gt;&lt;br /&gt;A side benefit of this is that small companies that might be developing innovative software cannot afford the ante and they are locked out. The big patent holders, IBM, Apple, Microsoft, Sony at al are happy and they shut down those annoying whipper-snappers who want to do something better.&lt;br /&gt;&lt;br /&gt;This state of affairs is particularly saddening when one looks at why we have patents. Ask 100 people "what is the purpose of a patent?" and 99 will say that they protect the author of some discovery or creative work. In reality the temporary monopoly provided to a copyright or patent holder is the means of fulfilling the purpose. It is not the purpose itself. Looking at the Constitution, one sees this power assigned to Congress in &lt;a href="http://www.law.cornell.edu/constitution/constitution.articlei.html#section8"&gt;Article 1, Section 8&lt;/a&gt; of the US Constitution:&lt;br /&gt;&lt;blockquote&gt;To promote the progress of science and useful arts, by securing for limited times to authors and inventors the exclusive right to their respective writings and discoveries;&lt;/blockquote&gt; Does our current system of patents, especially software patents, "promote the progress of science and the useful arts?" The answer is obvious. It does not. Is it obvious enough for the Supreme Court to go against the wishes of the "intellectual property nomenklatura" of this country, with their fictitious billions of dollars on their balance sheets? Maybe. We'll see. Another interesting question is this. On the day after all those patents are invalidated, what will the stock market do? It will be interesting to see....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38606689-5349081305434362310?l=xoatlicue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xoatlicue.blogspot.com/feeds/5349081305434362310/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38606689&amp;postID=5349081305434362310' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/5349081305434362310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/5349081305434362310'/><link rel='alternate' type='text/html' href='http://xoatlicue.blogspot.com/2009/02/software-patents-and-open-source.html' title='Software Patents and Open-Source'/><author><name>Tau Central</name><uri>http://www.blogger.com/profile/04639944664204798442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_T3myM7H29Os/SUFfoOpMGNI/AAAAAAAAAAM/uVo48TpRUA8/S220/MononokeGhostieLg.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38606689.post-8839524903473353162</id><published>2009-01-25T14:26:00.000-08:00</published><updated>2009-01-25T14:59:40.188-08:00</updated><title type='text'>Trustedness in Ubiquity and Other Places</title><content type='html'>I have started to use Ubiquity and it is, of course, as amazing as people have been saying it is. And I see questions being raised about how one gets new commands and how one can trust sources for new commands. I hope that, as these questions get answered, the answers can apply to other areas of concern within Mozilla.&lt;br /&gt;&lt;br /&gt;Almost two years ago, I was asking Window Snyder why the add-ons on AMO all had warnings from lack of certificates or authentication. It seemed that MoCo could not decide how to decide whether an add-on is "certifiably safe" or not. Perhaps there is a way to determine whether a command is "certifiably safe" or not. I have a feeling that certifying safety falls in a weird area between what the community around Mozilla can do and what the corporation feels that it should do. When MoCo takes off its nice and fuzzy gloves and puts on its "corporate" hat, what reason do they have for taking on this risk? These kinds of risks are notoriously hard to judge. Or rather, one can see when a problem is less likely to occur, but one can never guarantee there will never be a problem and one can never find a limit to how much damage might be caused. So, there is a clear benefit of moderate import and a slight risk but with no way to guess the cost. A corporation which has to show due diligence will probably not sign up for this risk.&lt;br /&gt;&lt;br /&gt;I hope I am wrong. Perhaps this is a way to certify these. And maybe a "casual" certification will work. Sort of like saying, "it is not certified, but this add-on is up on AMO and we like the developer and you should like the developer too but we're not responsible for any problems and yadda, yadda, yadda...", and so on down into the fine print. And maybe this works well enough for everyone, except for dealing with the occasionally nasty security dialog.&lt;br /&gt;&lt;br /&gt;But it also seems obvious that the more places one needs trusted content, or trusted sites, or trusted chrome, the more ways there are to stub one's toes. I guess we'll see.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38606689-8839524903473353162?l=xoatlicue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xoatlicue.blogspot.com/feeds/8839524903473353162/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38606689&amp;postID=8839524903473353162' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/8839524903473353162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/8839524903473353162'/><link rel='alternate' type='text/html' href='http://xoatlicue.blogspot.com/2009/01/trustedness-in-ubiquity-and-other.html' title='Trustedness in Ubiquity and Other Places'/><author><name>Tau Central</name><uri>http://www.blogger.com/profile/04639944664204798442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_T3myM7H29Os/SUFfoOpMGNI/AAAAAAAAAAM/uVo48TpRUA8/S220/MononokeGhostieLg.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38606689.post-1930194173419176540</id><published>2009-01-08T18:10:00.000-08:00</published><updated>2009-01-08T20:00:52.355-08:00</updated><title type='text'>Amusing iPhone Sound Volume Interface</title><content type='html'>I waited long enough to be almost the last multicellular organism on the planet that did not have an iPhone. Well, we share our phone plan with my wife's parents and my father-in-law was hot for an iPhone and so here we are.&lt;br /&gt;&lt;br /&gt;Some of the interface ideas in it are amazing. Then some are, well, something else.&lt;br /&gt;&lt;br /&gt;Everybody has seen the thing where you turn the iPhone on its side and the app that is running rotates. I was looking at the calculator in portrait mode and I was just, literally, seconds away from pointing out I would need some scientific calculator stuff and then turned in sideways and there it is. Very cool.&lt;br /&gt;&lt;br /&gt;But the interface for setting the sound volume has a strangeness. For one thing, you do not hear a tone that increases in volume as you increase the volume. You just have to eye-ball the volume indicator. Really. There is no auditory feedback for changing the sound volume. It really boggles the mind.&lt;br /&gt;&lt;br /&gt;Then you turn it sideways. The hardware does not change its behavior. So, picture this. In portrait mode you press the down side of the toggle and the sound goes down and a visual "volume progress bar" thing slides to the left. Push on the up toggle, the volume goes up and the "volume progress bar" thing slides to the right. So far, so good. But turn it sideways and you press on what is now the right side of the switch and in my "right-hand-is-right-ish" view, this should make the sound increase. But the volume decreases and the "volume progress bar" slides to the left. And if you press on the left hand side of the toggle, the volume increases and the sound goes up.&lt;br /&gt;&lt;br /&gt;I cannot decide if it is my brain that is wrong or, is it possible they just thought it would be ok to respond backwards?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38606689-1930194173419176540?l=xoatlicue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xoatlicue.blogspot.com/feeds/1930194173419176540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38606689&amp;postID=1930194173419176540' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/1930194173419176540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/1930194173419176540'/><link rel='alternate' type='text/html' href='http://xoatlicue.blogspot.com/2009/01/amusing-iphone-sound-volume-interface.html' title='Amusing iPhone Sound Volume Interface'/><author><name>Tau Central</name><uri>http://www.blogger.com/profile/04639944664204798442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_T3myM7H29Os/SUFfoOpMGNI/AAAAAAAAAAM/uVo48TpRUA8/S220/MononokeGhostieLg.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38606689.post-2507239083353096366</id><published>2008-12-11T10:50:00.000-08:00</published><updated>2008-12-11T11:09:10.041-08:00</updated><title type='text'>Add-ons Interacting Badly? Nope. report from AddOnCon...</title><content type='html'>I just wanted to call this out. I am at the Add-On-Con in Mountain View today. The keynote was good. Great questions, good back-and-forth, interesting responses.&lt;br /&gt;&lt;br /&gt;I asked the panelists (reps from Conduit, http://www.oneriot.com/, http://www.alexa.com/, http://www.adaptiveblue.com/, http://www.cooliris.com/) how much of their time or mental energy is taken up by dealing with confusions or bugs from cross-addon interactions.&lt;br /&gt;&lt;br /&gt;I see this as a, theoretically, very serious problem. It was interesting, though, that the panelists said things like (paraphrasing):&lt;br /&gt;&lt;br /&gt;- "browser upgrades are more of an issue. MS is bad about this and Mozilla is much better"&lt;br /&gt;- "this does take up time, but the problems have gotten better"&lt;br /&gt;- "Symantec should not try to clean up people's registry"&lt;br /&gt;- "there are generic best practices and these could be more publicized"&lt;br /&gt;&lt;br /&gt;I think the responses I heard speak well of how Mozilla has addressed or is addressing this issue. Considering how huge the problem could (again, theoretically) be, it is great that people who are actually relying on their add-ons to make money do not seem to be very upset or worried about it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38606689-2507239083353096366?l=xoatlicue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xoatlicue.blogspot.com/feeds/2507239083353096366/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38606689&amp;postID=2507239083353096366' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/2507239083353096366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/2507239083353096366'/><link rel='alternate' type='text/html' href='http://xoatlicue.blogspot.com/2008/12/add-ons-interacting-badly-nope-report.html' title='Add-ons Interacting Badly? Nope. report from AddOnCon...'/><author><name>Tau Central</name><uri>http://www.blogger.com/profile/04639944664204798442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_T3myM7H29Os/SUFfoOpMGNI/AAAAAAAAAAM/uVo48TpRUA8/S220/MononokeGhostieLg.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38606689.post-9087506563055050765</id><published>2008-11-09T12:31:00.000-08:00</published><updated>2008-11-09T12:41:04.224-08:00</updated><title type='text'>Freebase HackDay in SF</title><content type='html'>It has only a slight connection to Firefox, but I did meet people there doing database-ish things with Firefox extensions to provide a whole experience....&lt;br /&gt;&lt;br /&gt;Freebase (http://www.freebase.com) is an odd service. It is a wiki-like database. Anybody can go in, look at a table and decide there needs to be another column on it and add a new column. Anyone can put new data in. Anyone can create new "types" (like tables). There are APIs for managing time information and geo information and all that kind of stuff. They have created the concept of a "Base" which sort of combines a social situation with a custom view of data. It allows a better separation between the model and the view.&lt;br /&gt;&lt;br /&gt;The tools are mostly Javascript or Google-app based and they work pretty well.&lt;br /&gt;&lt;br /&gt;And how many places can one go to and talk about the re-contextualization of socially-constructed semi-structured database tables into dynamic entities and not have people get glassy-eyed and start looking for open doors or windows to jump out of?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38606689-9087506563055050765?l=xoatlicue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xoatlicue.blogspot.com/feeds/9087506563055050765/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38606689&amp;postID=9087506563055050765' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/9087506563055050765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/9087506563055050765'/><link rel='alternate' type='text/html' href='http://xoatlicue.blogspot.com/2008/11/freebase-hackday-in-sf.html' title='Freebase HackDay in SF'/><author><name>Tau Central</name><uri>http://www.blogger.com/profile/04639944664204798442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_T3myM7H29Os/SUFfoOpMGNI/AAAAAAAAAAM/uVo48TpRUA8/S220/MononokeGhostieLg.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38606689.post-5413643305096865559</id><published>2008-06-22T16:24:00.000-07:00</published><updated>2008-06-22T16:51:37.474-07:00</updated><title type='text'>Mozilla Dev Kit ... and Scratchbox?</title><content type='html'>Seeing a post on  the Mozilla Developer Kit (MozDevKit? MDK?) has gotten me very psyched. I have been trying to add some things to the developer doc site. I see, for example, a lot of really good information in blog posts and then the corresponding DevMo pages are ... not so up-to-date. In general, there is much that can be done to make developing Mozilla more accessible to people and MDC does not get as much love as it deserves from people who are doing development and should therefore be able to write. But they probably have no time to doc because they are, you know, coding. It is a conundrum.&lt;br /&gt;&lt;br /&gt;But build environments are complicated. How can setting up such an environment be made easy?&lt;br /&gt;&lt;br /&gt;Can a Mozilla development kit can be set up in a trackable, verifiable, chroot-ed environment using a tool such as scratchbox? I have been trying to get a xulrunner (FF Mobile) build working to an embedded device using scratchbox and it has been challenging, to say the least, but interesting. Tools like scratchbox or crosstool seem a very good idea. And every production build environment, such as the one I used while I was in the Dev Tools group at Apple, uses a verifiable, chroot-ed environment. It is really hard to get reproducibility without it, and without reproducibility, it is really hard to help anybody who has problems. This is why most responses to build issues on the newsgroups consist of 'please set up X, Y, and Z, and do A, B and C, and see if that helps....'&lt;br /&gt;&lt;br /&gt;Also, the usual use of scratchbox is to build on host A for a different architecture, target B. But A and B can actually be the same. MoCo builds Linux binaries on Linux and Mac OS X binaries on Mac OS X, but that does not &lt;span style="font-weight: bold;"&gt;have&lt;/span&gt; to be so. Of course, scratchbox is very Linux-centric. And I see that a Linux version of the MDK is the first item listed on the aforementioned blog post. This is probably true because Linux is amenable to scripted, verifiable building. But it would be interesting (perhaps for only me) to consider how a scratchbox on Linux could build Mac OS X binaries, or how a scratchbox on Mac OS X could build binaries for either Linux or the Mac. And of course, some might be interested in making Windows development possible, but that is way beyond my bailiwick. Yo no hablo Microsoft and I am just fine with that. Can you imagine, for example, getting the Microsoft development tools into a scratchbox environment? I cannot, and I am sure it would be ugly, but it might be possible.)&lt;br /&gt;&lt;br /&gt;Downloading a single file, launching it and then finding oneself in a known, trackable, verifiable virtual host for building Mozilla apps seems a compelling opportunity.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38606689-5413643305096865559?l=xoatlicue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xoatlicue.blogspot.com/feeds/5413643305096865559/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38606689&amp;postID=5413643305096865559' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/5413643305096865559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/5413643305096865559'/><link rel='alternate' type='text/html' href='http://xoatlicue.blogspot.com/2008/06/mozilla-dev-kit-and-scratchbox.html' title='Mozilla Dev Kit ... and Scratchbox?'/><author><name>Tau Central</name><uri>http://www.blogger.com/profile/04639944664204798442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_T3myM7H29Os/SUFfoOpMGNI/AAAAAAAAAAM/uVo48TpRUA8/S220/MononokeGhostieLg.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38606689.post-1375424839656508043</id><published>2008-05-16T09:34:00.000-07:00</published><updated>2008-05-16T10:10:02.450-07:00</updated><title type='text'>the age of bugs, and other useless information...</title><content type='html'>In a recent post, dbaron suggested that people inappropriately judge Mozilla by, for example, the age of the bugs that one can see. I think he is right, but I think there is a reason for this. It is usually completely impossible to look at a bug and figure out whether it will be fixed or not. There are long-standing reasons for the use of nobody as an assignee, but this can be un-helpful.&lt;br /&gt;&lt;br /&gt;Mozilla code development is socially driven. This may seem obvious, but the effects of this are not necessarily obvious, especially to someone in coming from commercial software. Look at the recent revisions of the module ownership system and you can see how tenuous the ownership of code can be. Nobody has to care about any bug. Or, to say it another way, only 'nobody' actually has to care about the vast majority of bugs.&lt;br /&gt;&lt;br /&gt;It is very hard to look at a bug and see who actually cares about it. No. I will not gripe about bugzilla. Really. But I will just say that anything in a bug is not what it says, but how that is looked at by which group does the work. Priority, Confirmed, and many other terms mean different things to different groups of people. And everyone seems to be ok with that.&lt;br /&gt;&lt;br /&gt;I have filed many bugs thinking that Firefox should just 'do the right thing' and that people would want to know. Is still have this idealism at times, but I recognize the other viewpoint as being valid. It may be true that one should not fix something that does not need to be fixed.&lt;br /&gt;&lt;br /&gt;And as dbaron has pointed out to me many times, one is always welcome to file a patch. And, actually, that turns out to be the key to many things. I used to think there was value in asking about a bug to understand it. I used to think there was value in discussing a solution before creating a patch. But, as a practical matter, the number of people willing to talk about making changes is vastly more huge than the number of people who will make changes. So, considered questions almost always get silence while patches that are crap get responses. If I have 10+ years of database experience and ask a question about sqlite use by Places, and a 12-year-old asks a question with a patch he came up with in five minutes, who will get a response? Who will be more likely to get something started on a bug? It seems obvious to me now.&lt;br /&gt;&lt;br /&gt;So when in doubt, submit a patch. Any patch.&lt;br /&gt;&lt;br /&gt;So, this leaves a question. How does Mozilla want to manage bugs submitted by or read by or tracked by non-developers? It seems clear that bugzilla is really best only for developers. Asking users to look at bugzilla and make sense of what they see is, I would suggest, not realistic. Maybe the idea behind Hendrix needs to be developed further. A lot of what is in bugzilla looks like graffiti in a train station. So maybe something is needed manages that graffiti and relates it to actual bugs that people may actually work on. But then, the people who do the work do not mind looking at the graffiti and just working on what they talk about. They seem to know which ones are actually significant, so why fix it if it's not broken?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38606689-1375424839656508043?l=xoatlicue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xoatlicue.blogspot.com/feeds/1375424839656508043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38606689&amp;postID=1375424839656508043' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/1375424839656508043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/1375424839656508043'/><link rel='alternate' type='text/html' href='http://xoatlicue.blogspot.com/2008/05/age-of-bugs-and-other-useless.html' title='the age of bugs, and other useless information...'/><author><name>Tau Central</name><uri>http://www.blogger.com/profile/04639944664204798442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_T3myM7H29Os/SUFfoOpMGNI/AAAAAAAAAAM/uVo48TpRUA8/S220/MononokeGhostieLg.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38606689.post-7703109223777200836</id><published>2008-03-30T12:39:00.000-07:00</published><updated>2008-03-30T13:09:46.605-07:00</updated><title type='text'>A Really Neat Test Reusability Situation</title><content type='html'>I had something happen yesterday which makes me think there might be hope. For my brain and how I sometimes fail to keep track of things. I was asked, in a bug I filed a while back, if the failure was reproducible.&lt;br /&gt;&lt;br /&gt;I do not why it was not reproducible earlier. I hardly ever find out why people do not see the bugs I see. I filed the bug and it got the usual responses: "works for me", "what are the running? are you sure?", "i see something weird", "why are we checking this?", "can you attach more information?", "did you configure the thingamagig to build the whatamacallit?", "can you attach a lot more information?". It just gets really ... exhausting. Actually, this particular bug was not as bad as some others. And it is nice when someone can actually reproduce something I filed.&lt;br /&gt;&lt;br /&gt;But right now, if you look in my ~/mo directory, you see 3 different builds of the browser, a half-dozen nightlies (some a few months old), a couple of calendar builds, a few xulrunners, an nspr build (what the heck was I doing with that?), a re-usable profile directory, and other random stuff. So, do I still see my bug? I look in the directory and and it is, again, exhausting, even to just think about.&lt;br /&gt;&lt;br /&gt;Then I saw something.&lt;br /&gt;&lt;br /&gt;    tests_20080106_160400/&lt;br /&gt;&lt;br /&gt;You know, I was talking about a re-usable test product, wasn't I? Oh, yeah.&lt;br /&gt;&lt;br /&gt;    % cd tests_20080106_160400&lt;br /&gt;    % ls&lt;br /&gt;    dist/      runReftests*       testing/        xpcshell-simple/&lt;br /&gt;    %&lt;br /&gt;    % ./runReftests ~/mo/browser_20080327_235255/dist/MinefieldDebug.app/Contents/MacOS/firefox ~/mo/debug.mozilla_20080106_173138_PST&lt;br /&gt;&lt;br /&gt;Holy test failures, Batman! It worked! I just gave it a fairly recent build and that re-usable profile directory I mentioned and there it is. Lots of failures.&lt;br /&gt;&lt;br /&gt;Now, I am thinking again of that standalone test product I was mentioning. Once again, the buzzing in my head is beginning. There is apparently a new way to build a product out of the Mozilla build system. Create a directory, put some stuff in it, and voila! A new product. Now, to find the documentation for this wonderful new capability. Ok, I am sure that people are busy. Is it fair to ask them to document things? Should I ask a question in the newsgroups? I will just get that response that I really hate so much: "what exactly are you trying to do?". I think I was trying to ask a question. Again, it can just be exhausting. I even created an &lt;a href="http://developer.mozilla.org/en/docs/Building_XXX_Standalone"&gt;MDC page&lt;/a&gt;. Seeing a place for something like this to to be documented, someone who knows what is going on might, you know, document something. Not even a nibble on that yet. O well. You can lead them to water....&lt;br /&gt;&lt;br /&gt;And, finally, I have to do homework today. My Stats and PDE homework is not doing itself. And why don't I get more Mozilla stuff done?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38606689-7703109223777200836?l=xoatlicue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xoatlicue.blogspot.com/feeds/7703109223777200836/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38606689&amp;postID=7703109223777200836' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/7703109223777200836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/7703109223777200836'/><link rel='alternate' type='text/html' href='http://xoatlicue.blogspot.com/2008/03/really-neat-test-reusability-situation.html' title='A Really Neat Test Reusability Situation'/><author><name>Tau Central</name><uri>http://www.blogger.com/profile/04639944664204798442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_T3myM7H29Os/SUFfoOpMGNI/AAAAAAAAAAM/uVo48TpRUA8/S220/MononokeGhostieLg.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38606689.post-7568637721990729407</id><published>2008-03-29T19:24:00.000-07:00</published><updated>2008-03-29T19:30:25.790-07:00</updated><title type='text'>Participating in Earth Hour?</title><content type='html'>Are you participating in &lt;a href="http://www.google.com/intl/en/earthhour/"&gt;Earth Hour&lt;/a&gt;? I am, apparently. My wife says that we can and should turn off all lights in the house. We can then turn off all electrical devices (even my Server machine!) and, further, she is convinced we will survive and may perhaps even escape psychological damage.&lt;br /&gt;&lt;br /&gt;I am dubious.&lt;br /&gt;&lt;br /&gt;If you do not hear back from me, you know why. Good luck.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38606689-7568637721990729407?l=xoatlicue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xoatlicue.blogspot.com/feeds/7568637721990729407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38606689&amp;postID=7568637721990729407' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/7568637721990729407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/7568637721990729407'/><link rel='alternate' type='text/html' href='http://xoatlicue.blogspot.com/2008/03/participating-in-earth-hour.html' title='Participating in Earth Hour?'/><author><name>Tau Central</name><uri>http://www.blogger.com/profile/04639944664204798442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_T3myM7H29Os/SUFfoOpMGNI/AAAAAAAAAAM/uVo48TpRUA8/S220/MononokeGhostieLg.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38606689.post-763919460394435078</id><published>2008-01-07T18:56:00.000-08:00</published><updated>2008-01-08T02:10:23.993-08:00</updated><title type='text'>A Standalone Test Product</title><content type='html'>What does one need to do to help test Firefox. It turns out that to help very much, it takes a fair amount of effort. Just downloading the latest browser and "doing stuff" with it does provide testing, but it is not very complete. That kind of testing tends to be shallow at best.&lt;br /&gt;&lt;br /&gt;Firefox has great automated testing tools built into it, and so one can build a copy of Firefox using '--enable-tests' as a configuration flag. One gets a bunch of standalone executable tests, some xpcshell tests, the mochitest functionality and reftest. There is a lot there to work with.&lt;br /&gt;&lt;br /&gt;However, building Firefox can be a pretty hefty requirement. Is it really necessary? One benefit of automated testing is that the more of it that gets done, the more valuable it can be. There are lots of OS versions and machine configurations to worry about. MoCo can either try to have a copy of all those OSes and all those machines, or it can allow the community to meaningfully assist with testing without jumping through all the extra hoops needed to be able to build the browser. After all, the software required to just run tests is much simpler.&lt;br /&gt;&lt;br /&gt;In pursuit of this, I am creating a standalone product which can be a test vehicle for testing Firefox. After all, if Firefox is changing every day, should one have to refetch all those tests? One would hope that when Firefox is changing a lot, the tests are not changing, so that the tests can provide confidence for the changes being made.&lt;br /&gt;&lt;br /&gt;So far, I have a standalone product that I can use, on my Mac OS X system, to run reftests. There are issues with some of the other technologies that I will try to address. For now, I have taken the last 4 nightly builds and used the same test product on them and got the same result.&lt;br /&gt;&lt;br /&gt;- REFTEST UNEXPECTED FAIL: file:///.../testing/reftest/layout/bidi/bidi-000.html&lt;br /&gt;- REFTEST UNEXPECTED FAIL: file:///.../testing/reftest/layout/bidi/bidi-001.html&lt;br /&gt;- REFTEST UNEXPECTED FAIL: file:///.../testing/reftest/layout/bidi/bidi-001-j.html&lt;br /&gt;- REFTEST UNEXPECTED FAIL: file:///.../testing/reftest/layout/bidi/mixedChartype-02.html&lt;br /&gt;- REFTEST UNEXPECTED FAIL: file:///.../testing/reftest/layout/bidi/mixedChartype-02-j.html&lt;br /&gt;- REFTEST UNEXPECTED FAIL: file:///.../testing/reftest/layout/line-breaking/currency-2.html&lt;br /&gt;&lt;br /&gt;There may already be bugs on these test failures. It is hard to tell. I cannot seem to find the obvious way to locate bugs filed against automated tests.&lt;br /&gt;&lt;br /&gt;The test product is based on the contents of the "&lt;code&gt;_tests&lt;/code&gt;" directory as built with the '--enable-tests' flag, with some minor changes. Also, the contents of the directory are actually files, not links back into a source tree. The basic directory structure right now looks as so:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;tests\&lt;br /&gt;    Minefield.app/Contents/MacOS/chrome/reftest.jar&lt;br /&gt;    Minefield.app/Contents/MacOS/chrome/reftest.manifest&lt;br /&gt;    Minefield.app/Contents/MacOS/components/reftest-cmdline.js&lt;br /&gt;    testing\&lt;br /&gt;        mochitest\&lt;br /&gt;        reftest\&lt;br /&gt;    xpcshell-simple\&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;There are issues, already, that make it a little difficult to just grab this test product and put it up in a shareable location for other Mac OS X users. For one thing, script bits need to be put inside the application bundle of the app being tested. For reftest, it is only three files that need to be put inside the ".app/Contents" directory, but it is awkward to do manually.&lt;br /&gt;&lt;br /&gt;Looking at mochitests, I can already see problems. The tests all assume that they can do something like "../../../dist/bin/testExecutable". There is no reason they need to assume that, but they all do. Does the xpcshell executable that runs the tests need to be the same build as the Firefox browser itself? I would say no, but that is the way it has always been done. Until issues like these are teased apart, there will have to be lots of workarounds.&lt;br /&gt;&lt;br /&gt;If anyone has any suggestions, I am open to them. If MoCo wants to make automated testing available to a much larger group of people, without massively increasing their app download times, it seems that a standalone test product would be one way to do it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38606689-763919460394435078?l=xoatlicue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xoatlicue.blogspot.com/feeds/763919460394435078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38606689&amp;postID=763919460394435078' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/763919460394435078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/763919460394435078'/><link rel='alternate' type='text/html' href='http://xoatlicue.blogspot.com/2008/01/standalone-test-product.html' title='A Standalone Test Product'/><author><name>Tau Central</name><uri>http://www.blogger.com/profile/04639944664204798442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_T3myM7H29Os/SUFfoOpMGNI/AAAAAAAAAAM/uVo48TpRUA8/S220/MononokeGhostieLg.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38606689.post-2798330986836934240</id><published>2007-12-05T10:32:00.000-08:00</published><updated>2007-12-05T10:35:09.113-08:00</updated><title type='text'>A Systematic Look at Testing, Perhaps</title><content type='html'>Seeing the release of Firefox 2.0.0.10, followed by the rapid release of 2.0.0.11, made me wonder about how regression testing is going at Mozilla. Of course, there are no simple answers to be found for any of the issues. We all want less bugs and for bugs to get fixed more quickly. Nor am I feeling that there is some deep and dark hidden flaw that is coming to the fore here. Things could be better. No shock there. Things could be worse. Lots of people care enough to make sure they are not. And MoCo moves from one day to the next. We all love the products that come out of Mozilla, and as with anything one cares about, we are frustrated about some things. Such is life.&lt;br /&gt;&lt;br /&gt;But with every new test harness being talked about and with every new set of tests being brought in, the same questions and issues seem to come up for me. Every new test harness I see being developed for MoCo technologies bring me hope, but it is rarely clear why the last one is not being talked about. The same issues seem to be stumbled over. What happened to the lessons learned in the past? One problem with wiki-based communities is that people talk a lot about what they are doing. People tend not to talk about what they are not doing. Search for any kind of solution in Mozilla's information space, in any problem area, and one finds at least four or five different efforts. Only one or two may be current, but nothing gets written about why the others are not moving forward, or why they failed. It may just be against our natures to talk about things that did not work. One just has to puzzle out the things that are real from the things that just look real.&lt;br /&gt;&lt;br /&gt;In testing, it often seems to me that one needs to be clear about what kind of tests one wants, who can create, develop, or maintain what kinds of tests, and why different kinds of tests should or should not be run. If one is not clear about these things, tests get developed which do not get run, tests get run but they do not exercise the right things, or their results get ignored, and lots of people might be working hard to no good effect. The result is that there is no joy.&lt;br /&gt;&lt;br /&gt;Questions:&lt;br /&gt;&lt;br /&gt;(How hard is it to/Who can) develop a new test?&lt;br /&gt;(How hard is it to/Who can) modify an existing test?&lt;br /&gt;(How hard is it to/Who can) identify a feature or fault for which a test should be created?&lt;br /&gt;(How hard is it to/Who can) evaluate the benefit of creating a test of the effectiveness of running a particular test over time?&lt;br /&gt;(How hard is it to/Who can) run a test?&lt;br /&gt;(How hard is it to/Who can) see that a test has failed?&lt;br /&gt;(How hard is it to/Who can) identify the cause of a test failure, or interpret the failure?&lt;br /&gt;&lt;br /&gt;I would suggest that each of these questions defines an axis in the "problem space", the space of possibilities to in which to locate problems and suggest solutions about Mozilla products. There are risks to be managed in the Firefox source base, and possibilities to be enabled. The cost of the risk to be averted and the possible improvement to the product that are enabled have to be measured against the costs of testing. I think that answers to these questions can be used to categorize various quality efforts and give a way to judge whether testing is doing what it should do and how much should or should not be spent on it.&lt;br /&gt;&lt;br /&gt;I was going to take a stab at answering the one or more of questions above, but I will post this as a start. Answers can come later, especially since I do not know all of the answers. Nor am I sure I know all the questions. And if anyone wants to suggest either questions or answers, please do. And if anyone can think of a way to draw a representation of a, say, 12-dimensional space, so I can draw pictures based on something like the questions above, let me know that too.&lt;br /&gt;&lt;br /&gt;Thanks. More to come.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38606689-2798330986836934240?l=xoatlicue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xoatlicue.blogspot.com/feeds/2798330986836934240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38606689&amp;postID=2798330986836934240' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/2798330986836934240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/2798330986836934240'/><link rel='alternate' type='text/html' href='http://xoatlicue.blogspot.com/2007/12/systematic-look-at-testing-perhaps.html' title='A Systematic Look at Testing, Perhaps'/><author><name>Tau Central</name><uri>http://www.blogger.com/profile/04639944664204798442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_T3myM7H29Os/SUFfoOpMGNI/AAAAAAAAAAM/uVo48TpRUA8/S220/MononokeGhostieLg.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38606689.post-7549391538102163707</id><published>2007-10-10T13:52:00.000-07:00</published><updated>2007-10-10T14:47:31.823-07:00</updated><title type='text'>Extension Development, and Trials and Tribulations Thereof</title><content type='html'>Well, I am almost done with an extension I am developing for a third-party company. Wow! Was this ever harder than I thought it would be....&lt;br /&gt;&lt;br /&gt;I had some slightly complicated things in the extension. 2.5K lines of javascript, a custom XPCOM component, a status bar icon, a toolbar popup button, a sidebar, and a partridge in a pear tree thrown in for good measure. The app was crashing on exit. Actually only FF 2.* was crashing. FF 3.* was fine.&lt;br /&gt;&lt;br /&gt;So, I am doing a bunch of different kinds of allocations and there are listeners and so on. I figured I was doing something wrong with the memory. Much staring at the code. Much re-reading of dbaron's docs on this stuff. Much more staring at code....&lt;br /&gt;&lt;br /&gt;Turned out it was this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;   &amp;lt;toolbarbutton id="id1" type="menu" popup="id2"&amp;gt;&lt;br /&gt;       &amp;lt;menupopup id="id2" /&amp;gt;&lt;br /&gt;   &amp;lt;/toolbarbutton&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I thought that all this memory stuff might have a problem, and it turns out to be something bone simple! It is amazing what taking a machete to your code can show you. Along the way, an amusing thing happened. I took the image attribute off the toolbarbutton and I got this:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.wykiwyk.com/mozilla/pics/badButtons.png"&gt;&lt;br /&gt;&lt;br /&gt;And someone said this was ok! I might try to guess at the logic, but I cannot make myself do it. Obviously, some people are very immersed in how XUL gets rendered. I hope I can learn enough to understand it. I hope I never forget that its contortions are, after all, contortions.&lt;br /&gt;&lt;br /&gt;Next things to do now that this monkey is almost off my back:&lt;br /&gt;&lt;br /&gt;- do an extension for rule-based qualification of XUL, because you need something to tell you that you can have A, B, and C together, but C makes B have no effect, and C without A does something totally different. Look at a given XUL reference. It inherits all its parent's attributes. Now, how many have any effect? How many break everything? There has got to be a way to get information about this.&lt;br /&gt;&lt;br /&gt;- figure out something to help me search bugzilla. I looked for bugs on this many times and did not find it. Maybe it is because the relevant bug was marked for Windows. Maybe it was because the title mentioned &amp;lt;menupopup&amp;gt; and not &amp;lt;toolbarbutton&amp;gt;. Maybe it was because the title said it happened on window close and I was searching for "quit". I do not know. I just know I truly hate trying to find things in bugzilla. But when I suggest changes to bugzilla, they seem to hate that even more. I have no idea why. So, I just obviously need to construct tools to help me get around this thing. There has got to be a better way to find bugs than creating new bugs and letting gavin find the dupes. For one thing, this is not fair to gavin, or neil, or reed, or whoever it is.&lt;br /&gt;&lt;br /&gt;- and some other things I am sure I have forgotten. We'll see.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38606689-7549391538102163707?l=xoatlicue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xoatlicue.blogspot.com/feeds/7549391538102163707/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38606689&amp;postID=7549391538102163707' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/7549391538102163707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/7549391538102163707'/><link rel='alternate' type='text/html' href='http://xoatlicue.blogspot.com/2007/10/extension-development-and-trials-and.html' title='Extension Development, and Trials and Tribulations Thereof'/><author><name>Tau Central</name><uri>http://www.blogger.com/profile/04639944664204798442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_T3myM7H29Os/SUFfoOpMGNI/AAAAAAAAAAM/uVo48TpRUA8/S220/MononokeGhostieLg.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38606689.post-8308905205252394660</id><published>2007-09-30T20:35:00.000-07:00</published><updated>2007-09-30T20:40:39.258-07:00</updated><title type='text'>Bad Intel-Only Icon for Minefield</title><content type='html'>Someone posted a while back about this icon. I thought they said they were not sure what caused it. I got one of these and saw what it was.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.wykiwyk.com/mozilla/pics/badIntelMinefield.png"&gt;&lt;br /&gt;&lt;br /&gt;This is what happens when you have an app that is built only for Intel, and you are looking at it on a PPC system. It is not going to run. If it is built "fat", then it has both an Intel executable and a PPC executable hidden inside its bundle directory and it will run on either.&lt;br /&gt;&lt;br /&gt;This particular app was the Mac OS X 10.4.x app put up by Chris Double for his &lt;a href="http://www.bluishcoder.co.nz/2007/08/svg-video-demo.html"&gt;SVG Video Demo&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Just FYI.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38606689-8308905205252394660?l=xoatlicue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xoatlicue.blogspot.com/feeds/8308905205252394660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38606689&amp;postID=8308905205252394660' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/8308905205252394660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/8308905205252394660'/><link rel='alternate' type='text/html' href='http://xoatlicue.blogspot.com/2007/09/bad-intel-only-icon-for-minefield.html' title='Bad Intel-Only Icon for Minefield'/><author><name>Tau Central</name><uri>http://www.blogger.com/profile/04639944664204798442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_T3myM7H29Os/SUFfoOpMGNI/AAAAAAAAAAM/uVo48TpRUA8/S220/MononokeGhostieLg.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38606689.post-3790826315522685079</id><published>2007-09-10T13:35:00.000-07:00</published><updated>2007-09-10T14:26:00.247-07:00</updated><title type='text'>Discovering the Coolness of nsIWebProgressListener</title><content type='html'>I am writing an extension and I have been jumping through some painful hoops with the "load" and "unload" events and "onDocumentLoad" and I have been trying to figure out how this is supposed to behave....&lt;br /&gt;&lt;br /&gt;Then I discovered nsIWebProgressListener. What a beautiful interface!&lt;br /&gt;&lt;br /&gt;I had thought that, in all my questions and grumblings and gripes, that someone would have pointed me to this. Someone probably did and I probably did not hear. But then, I notice that I will be drowning in a pool and I will say "Help!" and someone will say "you probably need an instance of a nsINylonLinearExtractionDevice...". No, actually, I need to not drown! Or I need a rope. And if I decode the answer, I can see that, yes, I was told I should grab a rope. How could I have missed it? :-)&lt;br /&gt;&lt;br /&gt;It also makes it challenging that when you do a search (in site:mozilla.org), you are as likely to find a document from 1999 as any other. Yes, people have written new documents on the new ways of doing things. How often do the old documents get removed from wiki.m.o, or www.m.o? From the evidence, I would guess it does not happen very often.&lt;br /&gt;&lt;br /&gt;There needs to be many more snippets on MDC that make use of this interface. I look forward to posting some. I am recalling many newbie questions on the newsgroups where the appropriate response would have been that one needs to look at all the wonderful things this interface gives you.&lt;br /&gt;&lt;br /&gt;Of course, I always have a suggestion for future improvement. It's just something I have to do.&lt;br /&gt;&lt;br /&gt;I wanted to keep track of some resources, one for each open window or tab. The interface, through the onStateChange and onLocationChange, gives me almost everything I need. Except that when I close a window, or close a tab, I get no message? I could just keep my stuff around in case a notification ever comes in on that window. But if that window was closed, wouldn't that be a leak in my extension?&lt;br /&gt;&lt;br /&gt;I am sure there are other, older events I could look for, but it seems that nsIWebProgressListener was written to provide a better interface. It just needs to do the whole job.&lt;br /&gt;&lt;br /&gt;See: http://bugzilla.mozilla.org/show_bug.cgi?id=395709 - &lt;br /&gt;nsIWebProgressListener can send message when window or tab is closed&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38606689-3790826315522685079?l=xoatlicue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xoatlicue.blogspot.com/feeds/3790826315522685079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38606689&amp;postID=3790826315522685079' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/3790826315522685079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/3790826315522685079'/><link rel='alternate' type='text/html' href='http://xoatlicue.blogspot.com/2007/09/discovering-coolness-of.html' title='Discovering the Coolness of nsIWebProgressListener'/><author><name>Tau Central</name><uri>http://www.blogger.com/profile/04639944664204798442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_T3myM7H29Os/SUFfoOpMGNI/AAAAAAAAAAM/uVo48TpRUA8/S220/MononokeGhostieLg.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38606689.post-6704556847782778539</id><published>2007-09-01T14:09:00.000-07:00</published><updated>2007-09-01T14:37:57.119-07:00</updated><title type='text'>Tools for UI Testing Coming Around...</title><content type='html'>In case anyone missed it, as I almost did, a technology that had been called Koala was released by IBM as CoScripter. Here is &lt;a href="http://www.kaply.com/weblog/2007/08/28/coscripter-formerly-koala-extension-for-firefox-from-ibm/"&gt;the post&lt;/a&gt;. I, for one, am jazzed about this.&lt;br /&gt;&lt;br /&gt;There is an opportunity here that I want to try to take advantage of. It has been possible, for at least a few months, to use JavaScript to create events and throw them at a DOM tree and see what happens. Some really good work went into making this possible.&lt;br /&gt;&lt;br /&gt;But it has been made possible. It has not been made easy. As far as I know, there has not been a flood of new mochitest test cases using this API to test the UI in Firefox. Which is a shame. There is a lot of good testing that needs to be done.&lt;br /&gt;&lt;br /&gt;Right now, most UI testing is done via the "clicks and eyeballs" harness that is housed at Building K of MoCo Central. These people do a great job with what they are given, but frankly they should not have to do it all. If the UI was more specified and the development of automated tests was part of feature development, there would be less fire drills at release times. Fire drills may be good for building esprit de corps in an organization, but it does not always lead to a quality release. When we hear of a successful fire drill at MoCo, we should be glad they got through it, but we should be worried that it happened.&lt;br /&gt;&lt;br /&gt;What does this have to do with CoScripter? Am I done with my MoCo org rant? Yes, I am. And let me tell you.&lt;br /&gt;&lt;br /&gt;Last time I heard, CoScripter records JavaScript events. I still have to confirm this. A lot may have happened since this was shown at MoCo in February and it was said that it would be released "any day now" and then "when IBM legal signed off". And hey, it only took six months. Those lawyers must have really burned the midnight oil, yes? :-)&lt;br /&gt;&lt;br /&gt;The point is that it may be possible to record a user doing stuff, and then turn that into an automated test case. I am sure some processing of the resulting recording will have to occur, but I have done automated test case generation with a UI recording tool at Apple (that is proprietary and shall remain nameless), so I am pretty sure it can be done.&lt;br /&gt;&lt;br /&gt;Imagine a user being able to turn on an extension, and then do something that causes whatever error they are seeing, and then just drop that into a bug. It would certainly make user's bugs a bit more informative. And more automated UI tests? This cannot be a bad thing.&lt;br /&gt;&lt;br /&gt;Hopefully I can do this and not fail my classes this semester. We will see. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38606689-6704556847782778539?l=xoatlicue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xoatlicue.blogspot.com/feeds/6704556847782778539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38606689&amp;postID=6704556847782778539' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/6704556847782778539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/6704556847782778539'/><link rel='alternate' type='text/html' href='http://xoatlicue.blogspot.com/2007/09/tools-for-ui-testing-coming-around.html' title='Tools for UI Testing Coming Around...'/><author><name>Tau Central</name><uri>http://www.blogger.com/profile/04639944664204798442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_T3myM7H29Os/SUFfoOpMGNI/AAAAAAAAAAM/uVo48TpRUA8/S220/MononokeGhostieLg.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38606689.post-5492972801117935186</id><published>2007-07-31T11:26:00.000-07:00</published><updated>2007-07-31T11:53:05.952-07:00</updated><title type='text'>What Prevents Multi-App Development at MoCo?</title><content type='html'>Reading some (but not all) of the Firefox/Thunderbird discussions, I find myself sanguine. I am not finding anything to be upset about. I think the current discussion may be more about the social structure of Mozilla. It does not seem to be a technical issue.&lt;br /&gt;&lt;br /&gt;Looking at the technologies, it might be helpful if MoCo became, or came to see itself as, a service-provider for projects like Thunderbird. It could be "sourceforge with benefits", or perhaps a "sourceforge with a conscience". This seems obvious.&lt;br /&gt;&lt;br /&gt;What makes it hard for MoCo to deal with Thunderbird as it is right now? Open-source avoids some problems one sees with commercial development. Commercial development seeks local maxima of utility with minimal investment of money. But MoCo has a similar issue. It seeks local maxima with minimal investment of social capital. What does this mean? If one looks at how Mozilla works, one sees this played out in many ways. I see some of them, but I do not think I am the best one to call them out.&lt;br /&gt;&lt;br /&gt;One can identify, though, the "Mozilla way" of doing things. I noticed this when I was at Apple, and I still see it today. The "Mozilla way" is to use quirky tool sets, often old tools sets, with lots of hand-crafted modifications for particular issues. Enabling flexibility in these systems is not often a priority. Often it seems to be easier to hand-craft a solution to deal with the hand-crafted solution from two years ago. Finding a general solution that does not require tweaking does not seem to be a priority. A general solution rarely has social benefit. Individual tweaks, each to satisfy a different social entity, do have social benefits.&lt;br /&gt;&lt;br /&gt;Why are more things not better documented? There is no social benefit to documenting that which is known by the core group. MoCo has, in general, a resistance to making things obvious. But social networks are built on shared knowledge, and if that knowledge requires a "maturation ritual", a "rite of passage", to find, all the better.&lt;br /&gt;&lt;br /&gt;So, why can't Mozilla keep Thunderbird up-front, alongside Firefox? Perhaps it is not a technical issue. Anthropologists tell us that primates form social networks whose size varies with the ration of the brain size to body size. Given MoCo's reliance on social cohesion, Mozilla may not be able to concentrate on Thunderbird because the social network required is too big. Is Mozilla's pervasive reliance on social cohesion a good thing?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38606689-5492972801117935186?l=xoatlicue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xoatlicue.blogspot.com/feeds/5492972801117935186/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38606689&amp;postID=5492972801117935186' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/5492972801117935186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/5492972801117935186'/><link rel='alternate' type='text/html' href='http://xoatlicue.blogspot.com/2007/07/what-prevents-multi-app-development-at.html' title='What Prevents Multi-App Development at MoCo?'/><author><name>Tau Central</name><uri>http://www.blogger.com/profile/04639944664204798442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_T3myM7H29Os/SUFfoOpMGNI/AAAAAAAAAAM/uVo48TpRUA8/S220/MononokeGhostieLg.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38606689.post-8275076885938753082</id><published>2007-07-24T11:19:00.000-07:00</published><updated>2007-07-24T17:30:19.923-07:00</updated><title type='text'>automated leak testing - followup</title><content type='html'>I have filed a bug (&lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=389361"&gt;389361 - reproducible leak accessing page www.1ting.com&lt;/a&gt;) as a result of my leak testing. There are actually 6 URLs in that bug, but I cannot differentiate the leaks, so I have reported them together. I will have to figure out the leaks-gauge output so that I can make sense of this and report better bugs.&lt;br /&gt;&lt;br /&gt;The leaks tool available on the Mac allows one to set an environment variable, MallocStackLogging, that makes the leaks output much more verbose. It will potentially tell you a lot about the objects being leaked. Unfortunately, this mostly works for Objective-C objects. C++ seems to be pretty good at obfuscating itself, or Apple has not done the work to help here, or both. It's a shame.&lt;br /&gt;&lt;br /&gt;Well, the long and short of it is that leaks-gauge output does not make very much sense to me yet. :-(&lt;br /&gt;&lt;br /&gt;I was not being very creative in how I got URLs. Someone pointed me to the alexa 500 and I hit pay dirt. Here are the sites I filed the bug against:&lt;br /&gt;&lt;br /&gt;* http://www.1ting.com&lt;br /&gt;* http://www.chinaren.com/&lt;br /&gt;* http://www.cmfu.com/&lt;br /&gt;* http://www.hurriyet.com.tr/&lt;br /&gt;* http://www.yahoo.com/&lt;br /&gt;* http://www.zaycev.net/&lt;br /&gt;&lt;br /&gt;By the way, I am trying to get my add-on up onto &lt;a href="http://addons.mozilla.org"&gt;AMO&lt;/a&gt;. This extension does nothing but quit Firefox at any page load. This is useful when launching Firefox from a script. The extension is available at &lt;a href="http://www.wykiwyk.com/mozilla/loadAndDie/"&gt;my site&lt;/a&gt; and in the &lt;a href="https://addons.mozilla.org/en-US/firefox/developers/details/5371"&gt;AMO sand box&lt;/a&gt; (&lt;i&gt;login required, or may not be reachable&lt;/i&gt;). If anyone wants to review, after reading the docs, please do. I am not sure what the trigger is for getting it accepted on AMO. We will see.&lt;br /&gt;&lt;br /&gt;I find it interesting that these leaks are sometimes not reproducible. There were a couple of dozen URLs in the list which generated leaks, but only once. As I re-tested URLs, sometimes they would leak every other time (like www.yahoo.com) and sometimes every third access (like www.1ting.com) and sometimes it was just more random than that. I did not list a URL if I could not get it to leak again. I am re-launching the browser each time, though, so I thought the testing would be more reproducible. It is &lt;span style="font-weight:bold;"&gt;more&lt;/span&gt; reproducible, but it is still surprising to me how many one-time leaks there were. There are some questions I am going to investigate.&lt;br /&gt;&lt;br /&gt;* Does it matter if I randomize the list of URLs I am checking?&lt;br /&gt;* If I automatically retry leaking URLs a certain number of times, how many times should I check?&lt;br /&gt;* What files in the app bundle or in the profile directory change with an instance launch and shutdown? Or,&lt;br /&gt;* What state being held between app launches?&lt;br /&gt;&lt;br /&gt;We'll see.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38606689-8275076885938753082?l=xoatlicue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xoatlicue.blogspot.com/feeds/8275076885938753082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38606689&amp;postID=8275076885938753082' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/8275076885938753082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/8275076885938753082'/><link rel='alternate' type='text/html' href='http://xoatlicue.blogspot.com/2007/07/automated-leak-testing-followup.html' title='automated leak testing - followup'/><author><name>Tau Central</name><uri>http://www.blogger.com/profile/04639944664204798442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_T3myM7H29Os/SUFfoOpMGNI/AAAAAAAAAAM/uVo48TpRUA8/S220/MononokeGhostieLg.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38606689.post-4221010434652133094</id><published>2007-07-19T12:15:00.000-07:00</published><updated>2007-07-19T12:50:24.220-07:00</updated><title type='text'>automating leaks testing</title><content type='html'>I have managed to get some ideas I had to work in code. It required a couple of things.&lt;br /&gt;&lt;br /&gt;First, why. The &lt;a href="http://mxr.mozilla.org/mozilla/source/tools/footprint/leak-gauge.pl"&gt;leak-gauge.pl &lt;/a&gt; script by dbaron is obviously very useful for tracking leaks in Firefox. I was just reminded of this reading this &lt;a href="http://steveengland.wordpress.com/2007/07/18/testing-extensions-for-memory-leaks-on-trunk/"&gt;blog post by Steve England&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;But reading Steve's post, it looks as though he did the following:&lt;br /&gt;&lt;br /&gt;1) invoke leaks-gauge.pl on some URL&lt;br /&gt;2) do a bunch of stuff on the resulting page&lt;br /&gt;3) quit the browser&lt;br /&gt;4) look at the results&lt;br /&gt;5) perhaps file a bug&lt;br /&gt;6) lather, rinse and report&lt;br /&gt;&lt;br /&gt;If one wants to automate this testing, there are issues from some of this.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;"invoke leaks-gauge.pl on some URL"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Right now, one uses a web page to tell leak-gauge.pl what to do. It is a manual process, hence this is not automatable.. I modified the leaks-gauge.pl script so that you give it an application executable, a profile directory, and a URL and it launches the browser for you. Another script goes through a list of apps and a list of URLs and calls the modified leaks-gauge.pl with the Cartesian product of these. This could all be done smarter than I am doing it.&lt;br /&gt;&lt;br /&gt;What URLs can I run it on? Not wanting to answer that right now, I just looked at my copy of the trunk and used all the html files inside the &lt;a href="http://mxr.mozilla.org/mozilla/source/layout/reftests/"&gt;layout/reftests&lt;/a&gt; directory. Right now this is 1081 URLs. I used 5 different applications, those being nightlies from 2007/01/30, 2007/03/24, 2007/05/23, 2007/06/15, and 2007/07/13.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;"do a bunch of stuff"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Steve was testing extensions. Indeed, if one wants to test the memory footprint of extensions, one probably has to interact with the UI to cause the extension to do its stuff. I have no solutions to this quandary. I can say that it would be useful to use leak-gauge.pl just for single-page loads and this is automatable now.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;"quit the browser"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is not hard, but it is a bother. There are lots of ways to do it, but many of them make testing hard for various reasons. My solution to this was to create a very small extension, which will be up on AMO very soon. All it does is wait for a page to load, any page, and quit the browser. So, if one invokes firefox from the command-line and passes in a URL, then Firefox gets launched, it loads the page and then it automatically quits.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;"look at the results"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So, I have a script that takes the output from the test run and outputs a couple of pages. Of course, anybody would know I will say this should be in a database, since I think everything should be in a database, but that is for later.&lt;br /&gt;&lt;br /&gt;For full results, see &lt;a href="http://www.wykiwyk.com/mozilla/leakTesting/testlog_20070718_byApp.html"&gt;http://www.wykiwyk.com/mozilla/leakTesting/testlog_20070718_byApp.html&lt;/a&gt; and &lt;a href="http://www.wykiwyk.com/mozilla/leakTesting/testlog_20070718_byURL.html"&gt;http://www.wykiwyk.com/mozilla/leakTesting/testlog_20070718_byURL.html&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The summary results are that 2007/01/30 leaked some on a lot of pages, 2007/03/24 was slightly worse, and 2007/05/23, 2007/06/15, and 2007/07/13 did not leak at all on these files. Yeah for Cycle Collection! :-)&lt;br /&gt;&lt;br /&gt;And now, there is a Firefox extension for which someone is actually paying me, so I should get back to it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38606689-4221010434652133094?l=xoatlicue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xoatlicue.blogspot.com/feeds/4221010434652133094/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38606689&amp;postID=4221010434652133094' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/4221010434652133094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/4221010434652133094'/><link rel='alternate' type='text/html' href='http://xoatlicue.blogspot.com/2007/07/automating-leaks-testing.html' title='automating leaks testing'/><author><name>Tau Central</name><uri>http://www.blogger.com/profile/04639944664204798442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_T3myM7H29Os/SUFfoOpMGNI/AAAAAAAAAAM/uVo48TpRUA8/S220/MononokeGhostieLg.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38606689.post-746391492388221818</id><published>2007-07-07T22:01:00.000-07:00</published><updated>2007-07-07T22:21:43.434-07:00</updated><title type='text'>Starting a Firefox Instance With a Fresh Profile</title><content type='html'>Maybe it is just me, but in doing anything with development builds of Firefox, I was constantly bothered by having my profile mucked around with, or having to create fresh profiles, or having to switch the default profile for some set of tests I wanted to run.&lt;br /&gt;&lt;br /&gt;I had slapped together little scripts to deal with some of this, but I finally got them all together in one script and it has been working for me for a while. This may be useful to others. Maybe not.&lt;br /&gt;&lt;br /&gt;One thing different about this is that I am doing things on a Mac. I have not tried to make the script cross-platform at all. I also find the executables in the places I keep them. There is no way to find out about the different copies of Firefox that are installed on a particular machine. There is no global installation log. And even though all of the apps read from resources in the 'Application Support' folder, none of them store information there that would tell one which instances of Firefox have been run. And it is not the most elegnt or clever script I have written. But it works. If anybody has suggestions for something to replace this find command, or anything else, please suggest. Until then, here it is:&lt;br /&gt;&lt;br /&gt;  &lt;a href="http://www.wykiwyk.com/mozilla/newbrowser.pl"&gt;http://www.wykiwyk.com/mozilla/newbrowser.pl&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So, the script will create a fresh profile, put some preferences into it, ask you to identify the copy of Firefox that you want to run and then launch with the new profile. Here is an example of it being run:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;% &lt;b&gt;newbrowser&lt;/b&gt; &lt;br /&gt;1: /Users/ray/mo/trowser/mozilla/dist/MinefieldDebug.app/Contents/MacOS/firefox&lt;br /&gt;2: /Users/ray/mo/trowser2/mozilla/dist/Minefield.app/Contents/MacOS/firefox&lt;br /&gt;3: /Applications/Mozilla/Firefox_1.5.0.11.app/Contents/MacOS/firefox&lt;br /&gt;4: /Applications/Mozilla/Firefox_1.5.app/Contents/MacOS/firefox&lt;br /&gt;5: /Applications/Mozilla/Firefox_2.0.0.2.app/Contents/MacOS/firefox&lt;br /&gt;6: /Applications/Mozilla/Firefox_2.0.0.4.app/Contents/MacOS/firefox&lt;br /&gt;7: /Applications/Mozilla/GranParadiso_20070426.app/Contents/MacOS/firefox&lt;br /&gt;8: /Applications/Mozilla/Minefield_3.0a2pre_20070130.app/Contents/MacOS/firefox&lt;br /&gt;9: /Applications/Mozilla/Minefield_3.0a2pre_20070206.app/Contents/MacOS/firefox&lt;br /&gt;10: /Applications/Mozilla/Minefield_3.0a3pre_20070222.app/Contents/MacOS/firefox&lt;br /&gt;11: /Applications/Mozilla/Minefield_3.0a3pre_20070308.app/Contents/MacOS/firefox&lt;br /&gt;12: /Applications/Mozilla/Minefield_3.0a3pre_20070317.app/Contents/MacOS/firefox&lt;br /&gt;13: /Applications/Mozilla/Minefield_3.0a3pre_20070324.app/Contents/MacOS/firefox&lt;br /&gt;14: /Applications/Mozilla/Minefield_3.0a4pre_20070413.app/Contents/MacOS/firefox&lt;br /&gt;15: /Applications/Mozilla/Minefield_3.0a5pre_20070503.app/Contents/MacOS/firefox&lt;br /&gt;16: /Applications/Mozilla/Minefield_3.0a5pre_20070519.app/Contents/MacOS/firefox&lt;br /&gt;17: /Applications/Mozilla/Minefield_3.0a6pre_20070623.app/Contents/MacOS/firefox&lt;br /&gt;which executable? &lt;b&gt;1&lt;/b&gt;&lt;br /&gt;cmd = "NO_EM_RESTART=1 /Users/ray/mo/trowser_newbad/mozilla/dist/Minefield.app/Contents/MacOS/firefox -profile /tmp/3lwhsxqz.mozilla_20070707_215451_PDT  2&gt;&amp;1"&lt;br /&gt;WARNING: NS_ENSURE_TRUE(compMgr) failed: file nsComponentManagerUtils.cpp, line 90&lt;br /&gt;Type Manifest File: /tmp/3lwhsxqz.mozilla_20070707_215451_PDT/xpti.dat&lt;br /&gt;*** Registering xpconnect components (all right -- a generic module!)&lt;br /&gt;etc, etc, etc, etc, ....&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I have also made it trivial to run a set of reftests, as so:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;% &lt;b&gt;newbrowser -reftest layout/reftests/reftest.list&lt;/b&gt;&lt;br /&gt;1: /Users/ray/mo/trowser/mozilla/dist/MinefieldDebug.app/Contents/MacOS/firefox&lt;br /&gt;2: /Users/ray/mo/trowser_newbad/mozilla/dist/Minefield.app/Contents/MacOS/firefox&lt;br /&gt;3: /Applications/Mozilla/Firefox_1.5.0.11.app/Contents/MacOS/firefox&lt;br /&gt;4: /Applications/Mozilla/Firefox_1.5.app/Contents/MacOS/firefox&lt;br /&gt;5: /Applications/Mozilla/Firefox_2.0.0.2.app/Contents/MacOS/firefox&lt;br /&gt;6: /Applications/Mozilla/Firefox_2.0.0.4.app/Contents/MacOS/firefox&lt;br /&gt;7: /Applications/Mozilla/GranParadiso_20070426.app/Contents/MacOS/firefox&lt;br /&gt;8: /Applications/Mozilla/Minefield_3.0a2pre_20070130.app/Contents/MacOS/firefox&lt;br /&gt;9: /Applications/Mozilla/Minefield_3.0a2pre_20070206.app/Contents/MacOS/firefox&lt;br /&gt;10: /Applications/Mozilla/Minefield_3.0a3pre_20070222.app/Contents/MacOS/firefox&lt;br /&gt;11: /Applications/Mozilla/Minefield_3.0a3pre_20070308.app/Contents/MacOS/firefox&lt;br /&gt;12: /Applications/Mozilla/Minefield_3.0a3pre_20070317.app/Contents/MacOS/firefox&lt;br /&gt;13: /Applications/Mozilla/Minefield_3.0a3pre_20070324.app/Contents/MacOS/firefox&lt;br /&gt;14: /Applications/Mozilla/Minefield_3.0a4pre_20070413.app/Contents/MacOS/firefox&lt;br /&gt;15: /Applications/Mozilla/Minefield_3.0a5pre_20070503.app/Contents/MacOS/firefox&lt;br /&gt;16: /Applications/Mozilla/Minefield_3.0a5pre_20070519.app/Contents/MacOS/firefox&lt;br /&gt;17: /Applications/Mozilla/Minefield_3.0a6pre_20070623.app/Contents/MacOS/firefox&lt;br /&gt;which executable? &lt;b&gt;1&lt;/b&gt;&lt;br /&gt;cmd = "NO_EM_RESTART=1 /Users/ray/mo/trowser/mozilla/dist/MinefieldDebug.app/Contents/MacOS/firefox -profile /tmp/60yqqqnd.mozilla_20070707_221500_PDT --reftest layout/reftests/reftest.list 2&gt;&amp;1 | /usr/bin/grep '^REFTEST '"&lt;br /&gt;etc, etc, etc, etc, ....&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;For more:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;% newbrowser -usage&lt;br /&gt;newbrowser [ -noUserJS ] [ -reftest &amp;lt;manifest file&amp;gt; ] [ -exec &amp;lt;executable&amp;gt; ]&lt;br /&gt;%&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38606689-746391492388221818?l=xoatlicue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xoatlicue.blogspot.com/feeds/746391492388221818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38606689&amp;postID=746391492388221818' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/746391492388221818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/746391492388221818'/><link rel='alternate' type='text/html' href='http://xoatlicue.blogspot.com/2007/07/starting-firefox-instance-with-fresh.html' title='Starting a Firefox Instance With a Fresh Profile'/><author><name>Tau Central</name><uri>http://www.blogger.com/profile/04639944664204798442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_T3myM7H29Os/SUFfoOpMGNI/AAAAAAAAAAM/uVo48TpRUA8/S220/MononokeGhostieLg.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38606689.post-6632964283072753642</id><published>2007-07-01T13:08:00.000-07:00</published><updated>2007-07-01T16:39:42.922-07:00</updated><title type='text'>A Way Around my Gordian Knot with Reftests</title><content type='html'>I have been trying to figure out a way for reftests to be able to do image comparisons. I have been hampered by both my lack of experience with writing "Mozilla-ish" JavaScript and by the fact that reftest was not designed to do this. Or perhaps, reftest was designed not to do this. Indeed, the thing that makes reftest different is that it does not do exact comparisons with a hard-coded "golden" page and so it is more flexible and does not cause unnecessary failures when unimportant changes are made to, for example, layout.&lt;br /&gt;&lt;br /&gt;But there is a call for exact rendering comparisons.&lt;br /&gt;&lt;br /&gt;For example, if a certain Unicode value in an html page is supposed to render an Urdu character, the only way to test for this is to have a human look at it and see whether it is right or not. Similarly, whether a given MathML leads to correctly rendered expressions is, at this point, only checkable by a human loading a page and looking at it. I call this the "browsers and eyeballs" test harness.&lt;br /&gt;&lt;br /&gt;But the people blocking my changes for reftest are better at doing that than I am at figuring out what would be acceptable and would also do the job, so I have figured out a way to use the current, checked-in version of reftest to do exact visual comparisons. Rather than go into the code, I will demonstrate.&lt;br /&gt;&lt;br /&gt;First, I created a file, u1.txt, that contained a list of URLs that I pulled from Ian Hickson's "HTML 4.0 Test Suite" at &lt;a ref="http://hixie.ch/tests/html40/test41-1a.html"&gt;http://hixie.ch/tests/html40/test41-1a.html&lt;/a&gt; . Following the chain that starts at that page leads one to 16 URLs.&lt;br /&gt;&lt;br /&gt;Then I run:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="font-size:-2;"&gt;&lt;br /&gt;% perl runRef -generate -src u1.txt -app /Users/ray/mozilla/dist/MinefieldDebug.app/Contents/MacOS/firefox -profile /tmp/12qp5rt8.mozilla_20070630_153321_PDT &gt; u2.txt&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The profile is nothing special. It is just dynamically generated so that the browser can run in an automation-friendly manner. Then u2.txt will contain something like:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="font-size:-2;"&gt;&lt;br /&gt;URL: http://hixie.ch/tests/html40/test41-1a.html&lt;br /&gt;DGT: 9e747d8a7b957f5126f07135b75f9564405da513&lt;br /&gt;URI: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAPoCAYAAAAmy5qxAAAgAElEQVR4nOzdf1zV9 (and so on ...)&lt;br /&gt;&lt;br /&gt;URL: http://hixie.ch/tests/html40/test41-1b.html&lt;br /&gt;DGT: 1bb9c5fba9fd37d6afdced89817f0a61104b3ced&lt;br /&gt;URI: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAPoCAYAAAAmy5qxAAAgAElEQVR4nOzdf1zV9d3/8QfXgA4 (and so on ...)&lt;br /&gt;&lt;br /&gt;URL: http://hixie.ch/tests/html40/test41-2.shtml&lt;br /&gt;DGT: 0f3e0c63e174afff4c61924384cbe2dc78722447&lt;br /&gt;URI: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAPoCAYAAAAmy5qxAAAgAElEQVR4nOzdf1zV9d3/8QfXAA8aB (and so on ...)&lt;br /&gt;&lt;br /&gt;URL: http://hixie.ch/tests/html40/test41-3.html&lt;br /&gt;DGT: ad782efed8ab827701fb6740f2089d897f8499bd&lt;br /&gt;URI: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAPoCAYAAAAmy5qxAAAgAElEQVR4nOzdf1zV9f (and so on ...)&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Then when I can do:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="font-size:-2;"&gt;&lt;br /&gt;% &amp;lt;re-fetch and build Firefox here&amp;gt;&lt;br /&gt;% perl runRef -test -src u2.txt -app /Users/ray/mozilla/dist/MinefieldDebug.app/Contents/MacOS/firefox -profile /tmp/12qp5rt8.mozilla_20070630_153321_PDT&lt;br /&gt;URL: http://hixie.ch/tests/html40/test41-1a.html -&gt; Ok&lt;br /&gt;URL: http://hixie.ch/tests/html40/test41-1b.html -&gt; Ok&lt;br /&gt;URL: http://hixie.ch/tests/html40/test41-2.shtml -&gt; Ok&lt;br /&gt;URL: http://hixie.ch/tests/html40/test41-3.html -&gt; Ok&lt;br /&gt;...&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This will verify that the html being received from the URL is exactly as is expected (the DGT marker above is for an SHA1 digest of the source) and the new copy of Firefox displays exactly the same images as the old copy.&lt;br /&gt;&lt;br /&gt;Are there obvious issues raised by doing this kind of testing? Yes. And there are ways around them. There are some tools needed to support a workflow that uses this test tool. And I could try to guess what the objections will be now but, then again, "&lt;i&gt;vita brevis, programmi longa&lt;/i&gt;".&lt;br /&gt;&lt;br /&gt;This should definitely not be seen as an attempt to replace testing tools like mochitest or reftest. On the other hand, I could spend a few days and find 50,000 static URLs and be able to say whether any given check-in causes any difference in the display of any of those pages. How long would it take to find the 5000 or so important differences in those pages and write reftests for them? I do not know, but I am not going to spend a few years trying to find out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38606689-6632964283072753642?l=xoatlicue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xoatlicue.blogspot.com/feeds/6632964283072753642/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38606689&amp;postID=6632964283072753642' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/6632964283072753642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/6632964283072753642'/><link rel='alternate' type='text/html' href='http://xoatlicue.blogspot.com/2007/07/way-around-my-gordian-knot-with.html' title='A Way Around my Gordian Knot with Reftests'/><author><name>Tau Central</name><uri>http://www.blogger.com/profile/04639944664204798442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_T3myM7H29Os/SUFfoOpMGNI/AAAAAAAAAAM/uVo48TpRUA8/S220/MononokeGhostieLg.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38606689.post-7436620489745616511</id><published>2007-04-19T14:32:00.000-07:00</published><updated>2007-04-19T14:45:19.813-07:00</updated><title type='text'>Proposed Litmus Database Schema</title><content type='html'>I had proposed this change to the guys who run the litmus site. They had not responded, as they are in the middle of other changes. The other changes are, I think, orthogonal to these suggestions. I wanted to capture this suggestion before I lost it.&lt;br /&gt;&lt;br /&gt;I think that this is the current structure (as I have reverse-engineered it) of the Litmus database.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://66.16.208.213/images/LitmusBefore.png"&gt;&lt;br /&gt;&lt;br /&gt;I am proposing this, which I think will be much more flexible and will scale better in the long run. I am seeing a few slight errors, such as that there should be "0+" resources associated with a test, not "1+". But I think this is mostly correct.&lt;br /&gt;&lt;br /&gt;The Category entity and its self-link allows a flexible categorization of the tests, but also allows a heirarchical categorization at the same time. The Resource entity would allow us to capture, for example, a URL as one resource of a "go to site of URL" test. Then associating 100 URLs with that test would be more flexible than creating 100 tests of the form "go to URL A", "go to URL B", etc. The Config entity would capture the type of machine and the versions of what is being run. This would be more flexible than, for example, creating a one version of test for Firefox 1.5, then a separate copy of the test for FireFox, then a separate copy of the test for Firefox 3, and so on.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://66.16.208.213/images/LitmusAfter.png"&gt;&lt;br /&gt;&lt;br /&gt;If anyone has suggestions, please let me know.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38606689-7436620489745616511?l=xoatlicue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xoatlicue.blogspot.com/feeds/7436620489745616511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38606689&amp;postID=7436620489745616511' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/7436620489745616511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/7436620489745616511'/><link rel='alternate' type='text/html' href='http://xoatlicue.blogspot.com/2007/04/proposed-litmus-database-schema.html' title='Proposed Litmus Database Schema'/><author><name>Tau Central</name><uri>http://www.blogger.com/profile/04639944664204798442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_T3myM7H29Os/SUFfoOpMGNI/AAAAAAAAAAM/uVo48TpRUA8/S220/MononokeGhostieLg.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38606689.post-1836413888133528926</id><published>2007-04-12T10:44:00.000-07:00</published><updated>2007-04-12T10:45:29.201-07:00</updated><title type='text'>Slides from Mozilla OnSite Preso</title><content type='html'>They are here: &lt;a href="http://66.16.208.213/mozilla/OnSite2007Preso/Intro.html"&gt;http://66.16.208.213/mozilla/OnSite2007Preso/Intro.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38606689-1836413888133528926?l=xoatlicue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xoatlicue.blogspot.com/feeds/1836413888133528926/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38606689&amp;postID=1836413888133528926' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/1836413888133528926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/1836413888133528926'/><link rel='alternate' type='text/html' href='http://xoatlicue.blogspot.com/2007/04/slides-from-mozilla-onsite-preso.html' title='Slides from Mozilla OnSite Preso'/><author><name>Tau Central</name><uri>http://www.blogger.com/profile/04639944664204798442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_T3myM7H29Os/SUFfoOpMGNI/AAAAAAAAAAM/uVo48TpRUA8/S220/MononokeGhostieLg.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38606689.post-1847830846887952881</id><published>2007-04-04T19:14:00.000-07:00</published><updated>2007-04-07T15:12:22.698-07:00</updated><title type='text'>A Random Attempt at Specifying Firefox UI</title><content type='html'>&lt;span style="font-style:italic;"&gt;&lt;br /&gt;Correction: 2007/04/07 - This is why I like specs. I get things wrong at times. I was switching back and forth between FF and TB and wrote down the wrong menu headers. I am fixing the Firefox menu headers for Mac OS X. Thanks for the notes about this in the comments. This will be the last edit here. This document will be moved. Back to the original post....&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I was telling people that this should be done, so I decided to put my feet into the dance. There is a lot of good stuff written in various blog entries and on wikis scattered hither and yon that describe various aspects of the UI of Gecko apps, such as Firefox. I mentioned that these could be brought together into some sort of specification that could be used to help people who are trying to test the product, document the product, develop for the product, or just plain understand it.&lt;br /&gt;&lt;br /&gt;I borrowed a picture from &lt;a href="http://blog.mozilla.com/faaborg/2007/02/04/microformats-part-4-the-user-interface-of-microformat-detection/"&gt;Alex Faaborg&lt;/a&gt;, something I really wish I had seen in my first month at MoCo, when I was writing things in bugs that sounded like "that thing that does that stuff, next to that other thing,  I do not think it is working...". Yeah. That went really well.&lt;br /&gt;&lt;br /&gt;It is going to be difficult for one person to be comprehensive. I wanted to illustrate, though, an approach that can be taken. So, I have tried to describe the empty first page. I ended up also describing the "Quick Find" box. I think people know that command-F brings up Find, from the menu, but how many people know that the '/' key brings up the Quick Find bar instead? People remember vi, yes? Of course, they do. Very intuitive. :-)&lt;br /&gt;&lt;br /&gt;So, here goes.&lt;br /&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Firefox - A Browser&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://66.16.208.213/images/firefoxSpec/firefox_anatomyChrome.jpg"&gt;&lt;br /&gt;&lt;br /&gt;Of course, one does not always see these UI elements all at once. This will help more if it actually describes the state the browser is in at the time one sees this UI. While we're here, how did we get here? That is the big picture. But there are other pictures.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://66.16.208.213/images/firefoxSpec/firefox_blank_mac.png"&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://66.16.208.213/images/firefoxSpec/firefox_blank_linux.png"&gt;&lt;br /&gt;&lt;br /&gt;The first image above is the first page one sees on a Mac OS X system running Firefox 2.0.0.3 and the second is the same Firefox release on Ubuntu Linux 6.10. Obviously, there are differences between all the platforms.&lt;br /&gt;&lt;br /&gt;- There is no Menu Bar in the window on Mac OS X. The menu bar for a Mac OS X application is at the top of the system window. The top-level menus are different. &lt;br /&gt;* Mac top menus: File, Edit, View, History, Bookmarks, Tools, Window, Help&lt;br /&gt;* Windows top menus: ???&lt;br /&gt;* Mac top menus: File, Edit, View, History, Bookmarks, Tools, Help&lt;br /&gt;&lt;br /&gt;- The Navigation Toolbar appears to be the same. Add-ons may place other icons in the Navigation Toolbar.&lt;br /&gt;&lt;br /&gt;- In the Windows picture, there is a square box to the right of the Menu Bar. This is the "Busy Searching Spinner".&lt;br /&gt;&lt;br /&gt;- The Mac has a "Busy Searching Spinner" on the right of the Search Bar. It spins when one is searching. It stays motionless while one is not searching.&lt;br /&gt;&lt;br /&gt;- The Bookmarks Toolbar is the same.&lt;br /&gt;&lt;br /&gt;- The Tabstrip is the same, except that the icons are different.&lt;br /&gt;&lt;br /&gt;- The Content Area is the same. By default, the Content Area is blank. Firefix may be configured to open a page at launch. To see a blank Content Area, type "&lt;code&gt;about:blank&lt;/code&gt;" in the Location Bar.&lt;br /&gt;&lt;br /&gt;- The Sidebar is the same. It is only made visible under certain conditions. By default the browser history is made visible in the Sidebar when one types the 'History Sidebar Key'. Typing key again makes the History sidebar appear. Typing this key again makes it disappear.&lt;br /&gt;* Mac - 'History Sidebar Key' = command-shift-h&lt;br /&gt;* Windows - 'History Sidebar Key' = ???&lt;br /&gt;* Linux - 'History Sidebar Key' = control-h&lt;br /&gt;&lt;br /&gt;- The Status Bar is the same.&lt;br /&gt;&lt;br /&gt;- The Find Bar is the same. Typing 'Find Key' makes the Find Bar visible below the Content Area and Sidebar.&lt;br /&gt;* Mac: 'Find Key' = command-f&lt;br /&gt;* Windows: 'Find Key' = ???&lt;br /&gt;* Linux: 'Find Key' = control-f&lt;br /&gt;&lt;br /&gt;- There is also a Quick Find Bar that replaces the Find Bar.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Quick Find Bar:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The Quick Find Bar in a browser window on Mac OS X is shown below.&lt;br /&gt;&lt;br /&gt;If the Content Area is not blank, typing the '/' key makes the Quick Find Bar visible below the Content Area and Sidebar. There is also an issue with the default keyboard focus. For example, bring up the page shown below and type the '/' character. The Quick Find Bar will not appear because the default keyboard focus is on the search form field. One must click somewhere else on the page to take the keyboard focus away from the form field. When there is no form field accepting keyboard focus, then typing the '/' key brings up the Quick Find Bar.&lt;br /&gt;&lt;br /&gt;If the Content Area is blank, typing the '/' key has no effect. The Quick Find Bar disappears after approximately 4 seconds if nothing is typed.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://66.16.208.213/images/firefoxSpec/firefox_quick_found.png"&gt;&lt;br /&gt;&lt;br /&gt;If one types a character, it is put into the 'Quick Find' field. If there is text on the page matching the text in the Quick Find text field, then the first instance of that text on the page is selected. If the selected text is part of a link, the URL for that link is displayed in the Status Bar and if one types a return key or an enter key, then that link is activated. If one types text which does not appear on the page, the background of the Quick Find text field turns red. If another character is typed and the action does not place a text string which is found on the page into the Quick Find text field, there is an audible "beep".&lt;br /&gt;&lt;br /&gt;For example, if one navigates to the page above and types a '/' character and then a 'xxx', the result is two audible beeps and the page below.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://66.16.208.213/images/firefoxSpec/firefox_quick_notfound.png"&gt;&lt;br /&gt;&lt;br /&gt;If one does not hit return and stops typing, the Quick FInd Bar and the text typed in disappears. If one hits the '/' key again, the Quick Find Bar appears again, but the text field is empty and the previously typed text is lost.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Still To Be Done&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Absolutely everything else.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38606689-1847830846887952881?l=xoatlicue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xoatlicue.blogspot.com/feeds/1847830846887952881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38606689&amp;postID=1847830846887952881' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/1847830846887952881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/1847830846887952881'/><link rel='alternate' type='text/html' href='http://xoatlicue.blogspot.com/2007/04/random-attempt-at-specifying-firefox-ui.html' title='A Random Attempt at Specifying Firefox UI'/><author><name>Tau Central</name><uri>http://www.blogger.com/profile/04639944664204798442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_T3myM7H29Os/SUFfoOpMGNI/AAAAAAAAAAM/uVo48TpRUA8/S220/MononokeGhostieLg.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38606689.post-122451072831491217</id><published>2007-03-02T10:55:00.000-08:00</published><updated>2007-03-02T11:14:10.331-08:00</updated><title type='text'>Cranking on the Test Engine</title><content type='html'>I recently "finished" an &lt;a href="http://wiki.mozilla.org/MozillaQualityAssurance:Test_Suite_and_Tool_Inventory"&gt;inventory&lt;/a&gt; of the testing tools and test suites available here at Mozilla. I put quotes around the word "finished" because, of course, it is not done. In a sense, it never will be. What I have done is that really turned one crank on an engine. Hopefully, the engine will be started.&lt;br /&gt;&lt;br /&gt;I view this as an engine because there is a cycle that needs to occur. (I may actually have my engine terminolgy wrong here. I do not actually know engines as anything other than an abstraction. Apologies in advance.) Also, I am not an artist. I do words, not pictures.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://66.16.208.213/images/TestEngine.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 300px;" src="http://66.16.208.213/images/TestEngine.gif" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Spark&lt;/span&gt; - identify and ignite existing tests. This will lead to...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Combustion&lt;/span&gt; - tests are executed and results recorded.&lt;br /&gt;&lt;br /&gt;There has been a lot of random firing in the past. There are a bunch of tests. But when people look to run tests, their choice of tests has been close to random. I believe this to be so because if one wanted to pick tests by another method, there is no way to do so. There is no information available to provide any other criteria. There is a very rough correspondence between modules and tests, but modules are amorphously defined and the results are usually passed on in the form of a message that "I ran tests in X and they worked." Not very specific.&lt;br /&gt;&lt;br /&gt;Right now, combustion is starting to happen. Litmus tests get executed and there is information at the end that can be pointed to. There are suites of reftests and mochitests scripts that are being run after a build and reported in tinderbox. But there are a lot of tests that are not in these harnesses yet. There are a lot of tests that are hard to analyze and hard to understand. It is hard to tell how useful they are.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Expansion&lt;/span&gt; - results of testing are analyzed.&lt;br /&gt;&lt;br /&gt;It is usually in this stage that a determination is made about whether something can be shipped, or if the quality of the product is deemed good enough for some purpose. This stage involves an evaluation about what the testing meant. This leads to the next stage.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Compression&lt;/span&gt; - functionality is identified for which new tests are needed.&lt;br /&gt;&lt;br /&gt;Did the testing that was done test the features that we care about? Usually, enough testing is done so that we are confident of the new features and of drastically changed functionality. But we all know there are side-effects and side-effects to side-effects and I do not think anybody feels we are testing as much of the functionality as we should. Thinking about what new tests are needed pushes the piston back down to a firing position.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Injection&lt;/span&gt; - define more tests of the functionality.&lt;br /&gt;&lt;br /&gt;And then this brings us back to &lt;span style="font-weight:bold;"&gt;Spark&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;I suggest this could be thought of as a cycle, and a cycle that needs to continue to go around. It is not something to do until we are "done".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38606689-122451072831491217?l=xoatlicue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xoatlicue.blogspot.com/feeds/122451072831491217/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38606689&amp;postID=122451072831491217' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/122451072831491217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/122451072831491217'/><link rel='alternate' type='text/html' href='http://xoatlicue.blogspot.com/2007/03/cranking-on-test-engine.html' title='Cranking on the Test Engine'/><author><name>Tau Central</name><uri>http://www.blogger.com/profile/04639944664204798442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_T3myM7H29Os/SUFfoOpMGNI/AAAAAAAAAAM/uVo48TpRUA8/S220/MononokeGhostieLg.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38606689.post-3587177848856846327</id><published>2007-02-22T00:29:00.000-08:00</published><updated>2007-02-22T01:39:25.523-08:00</updated><title type='text'>Investigating NSPR Logging</title><content type='html'>There are a lot of tests written in C++ and there are a lot of different ways that they log their results. Among the strings that one finds are ": PASS", "INFO PASS", "tests passed.", "... OK", and so on. And that is only for the successful runs of the tests.&lt;br /&gt;&lt;br /&gt;I am investigating the use of the PR_LOG call defined in &lt;a href="http://lxr.mozilla.org/mozilla/source/nsprpub/pr/include/prlog.h"&gt;http://lxr.mozilla.org/mozilla/source/nsprpub/pr/include/prlog.h&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It turns out that you can turn on logging in modules that take advantage of the NSPR function but setting an environment variable. So, if I want to see the log output from a test, I can do:&lt;br /&gt;&lt;br /&gt;$ cd dist/bin&lt;br /&gt;$ NSPR_LOG_MODULES=all:5 ./TestCookie 2&gt;&amp;1 | grep -v WARNING&lt;br /&gt;&lt;br /&gt;At this point, there is a lot of output. I can also do:&lt;br /&gt;&lt;br /&gt;$ cd dist/bin&lt;br /&gt;$ NSPR_LOG_MODULES=all:0 ./TestCookie 2&gt;&amp;amp;1 | grep -v WARNING&lt;br /&gt;&lt;br /&gt;These numbers are from prlog.h. I found this in a post about troubleshooting mail. Or rather, Tomcat found it.&lt;br /&gt;&lt;br /&gt;PR_LOG_NONE = &lt;strong&gt;0&lt;/strong&gt;, /* nothing */&lt;br /&gt;PR_LOG_ALWAYS = &lt;strong&gt;1&lt;/strong&gt;, /* always printed */&lt;br /&gt;PR_LOG_ERROR = &lt;strong&gt;2&lt;/strong&gt;, /* error messages */&lt;br /&gt;PR_LOG_WARNING = &lt;strong&gt;3&lt;/strong&gt;, /* warning messages */&lt;br /&gt;PR_LOG_DEBUG = &lt;strong&gt;4&lt;/strong&gt;, /* debug messages */&lt;br /&gt;&lt;br /&gt;So, 5 means "I want everything" and 0 means "please, be quiet". But there is still a lot of output when I use "all:0" above.&lt;br /&gt;&lt;br /&gt;It turns out that this test is using printf. I do not even want to do a search for the number of cpp files we have using printf. I am sure there are a gazillion of them.&lt;br /&gt;&lt;br /&gt;When you register with the logger, you have to give your module a name. This is an interesting list.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:-2;"&gt;&lt;pre&gt;&lt;br /&gt;"Autodial" - netwerk/base/src/nsAutodialWin.cpp&lt;br /&gt;"BMPDecoder" - modules/libpr0n/decoders/bmp/nsBMPDecoder.cppPRLogModuleInfo&lt;br /&gt;"BayesianFilter" - mailnews/extensions/bayesian-spam-filter/src/nsBayesianFilter.cpp&lt;br /&gt;"DOMLeak" - dom/src/base/nsGlobalWindow.cpp&lt;br /&gt;"DeviceContextSpecGTK" - widget/src/gtk2/nsDeviceContextSpecG.cpp&lt;br /&gt;"DeviceContextSpecQt" - gfx/src/qt/nsDeviceContextSpecQt.cpp&lt;br /&gt;"DeviceContextSpecXlib" - gfx/src/xlib/nsDeviceContextSpecXlib.cpp&lt;br /&gt;"DeviceContextXlib" - gfx/src/xlib/nsDeviceContextXlib.cpp&lt;br /&gt;"DocLoader" - uriloader/base/nsDocLoader.cpp&lt;br /&gt;"DocumentLeak" - content/base/src/nsDocument.cpp&lt;br /&gt;"DrawingSurfaceXlib" - gfx/src/xlib/nsDrawingSurfaceXlib.cpp&lt;br /&gt;"FontMetricsGTK" - gfx/src/gtk/nsFontMetricsGTK.cpp&lt;br /&gt;"FontMetricsPS" - gfx/src/ps/nsFontMetricsPS.cpp&lt;br /&gt;"FontMetricsXlib" - gfx/src/xlib/nsFontMetricsXlib.cpp&lt;br /&gt;"GC" - nsprpub/lib/msgc/src/prmsgc.c:&lt;br /&gt;"HelperAppService" - uriloader/exthandler/nsExternalHelperAppService.cpp&lt;br /&gt;"IMAP" - mailnews/imap/src/nsImapProtocol.cpp&lt;br /&gt;"IMAP" - mailnews/imap/src/nsImapProtocol.cpp&lt;br /&gt;"IMAPOFFLINE" - mailnews/db/msgdb/src/nsMailDatabase.cpp&lt;br /&gt;"IMAPOFFLINE" - mailnews/db/msgdb/src/nsMailDatabase.cpp&lt;br /&gt;"IMAPOFFLINE" - mailnews/db/msgdb/src/nsMsgOfflineImapOperation.cpp&lt;br /&gt;"IMPORT" - mailnews/import/comm4x/src/nsComm4xMailImport.cpp&lt;br /&gt;"IMPORT" - mailnews/import/eudora/src/nsEudoraImport.cpp&lt;br /&gt;"IMPORT" - mailnews/import/oexpress/nsOEImport.cpp&lt;br /&gt;"IMPORT" - mailnews/import/outlook/src/nsOutlookImport.cpp&lt;br /&gt;"IMPORT" - mailnews/import/src/nsImportMail.cpp&lt;br /&gt;"IMPORT" - mailnews/import/src/nsImportService.cpp&lt;br /&gt;"IMPORT" - mailnews/import/text/src/nsTextImport.cpp&lt;br /&gt;"ImageXlib" - gfx/src/xlib/nsImageXlib.cpp&lt;br /&gt;"InMemoryDataSource" - rdf/base/src/nsInMemoryDataSource.cpp&lt;br /&gt;"JPEGDecoder" - modules/libpr0n/decoders/jpeg/nsJPEGDecoder.cppPRLogModuleInfo&lt;br /&gt;"JSComponentLoader" - js/src/xpconnect/loader/mozJSComponentLoader.cpp&lt;br /&gt;"JSDiagnostics" - dom/src/base/nsJSEnvironment.cpp&lt;br /&gt;"LoadGroup" - netwerk/base/src/nsLoadGroup.cpp&lt;br /&gt;"MAILBOX" - mailnews/local/src/nsMailboxProtocol.cpp&lt;br /&gt;"MAPI" - mailnews/mapi/mapihook/src/msgMapiImp.cpp&lt;br /&gt;"MCD" - extensions/pref/autoconfig/src/nsReadConfig.cpp&lt;br /&gt;"MIME" - mailnews/mime/emitters/src/nsMimeBaseEmitter.cpp&lt;br /&gt;"Mai" - accessible/src/atk/nsMai.h:&lt;br /&gt;"Movemail" - mailnews/local/src/nsMovemailService.cpp&lt;br /&gt;"MsgBiff" - mailnews/base/src/nsMsgBiffManager.cpp&lt;br /&gt;"MsgPurge" - mailnews/base/src/nsMsgPurgeService.cpp&lt;br /&gt;"NNTP" - mailnews/news/src/nsNNTPProtocol.cpp&lt;br /&gt;"NNTP" - mailnews/news/src/nsNNTPProtocol.cpp&lt;br /&gt;"NNTP" - mailnews/news/src/nsNNTPProtocol.cpp&lt;br /&gt;"NNTP" - mailnews/news/src/nsNNTPProtocol.cpp&lt;br /&gt;"NSJAVA" - modules/oji/src/nsJVMManager.cpp&lt;br /&gt;"NTLM" - security/manager/ssl/src/nsNTLMAuthModule.cppPRLogModuleInfo&lt;br /&gt;"ObserverService" - xpcom/ds/nsObserverService.cpp&lt;br /&gt;"PALMSYNC" - mailnews/extensions/palmsync/src/PalmSyncImp.cpp&lt;br /&gt;"PNGDecoder" - modules/libpr0n/decoders/png/nsPNGDecoder.cppPRLogModuleInfo&lt;br /&gt;"POP3" - mailnews/local/src/nsPop3Protocol.cpp&lt;br /&gt;"PangoFont" - gfx/src/gtk/nsFontMetricsPango.cpp&lt;br /&gt;"PhGfxLog" - gfx/src/photon/nsRenderingContextPh.cppPRLogModuleInfo&lt;br /&gt;"PresShell" - layout/base/nsPresShell.cpp&lt;br /&gt;"QtGfx" - gfx/src/qt/nsGfxFactoryQt.cppPRLogModuleInfo&lt;br /&gt;"RDF" - rdf/base/src/nsCompositeDataSource.cpp&lt;br /&gt;"RenderingContextXlib" - gfx/src/xlib/nsRenderingContextXlib.cpp&lt;br /&gt;"RenderingContextXp" - gfx/src/xprint/nsRenderingContextXp.cpp&lt;br /&gt;"SMTP" - mailnews/compose/src/nsSmtpProtocol.cpp&lt;br /&gt;"SOCKS" - netwerk/socket/base/nsSOCKSIOLayer.cpp&lt;br /&gt;"StaticComponentLoader" - xpcom/components/nsStaticComponentLoader.cpp&lt;br /&gt;"Syspref" - extensions/pref/system-pref/src/gconf/nsSystemPrefService.cpp&lt;br /&gt;"Syspref" - extensions/pref/system-pref/src/nsSystemPref.cpp&lt;br /&gt;"Test" - netwerk/test/TestBlockingSocket.cpp&lt;br /&gt;"Test" - netwerk/test/TestCookie.cpp&lt;br /&gt;"Test" - netwerk/test/TestIOThreads.cpp&lt;br /&gt;"Test" - netwerk/test/TestProtocols.cpp&lt;br /&gt;"Test" - netwerk/test/TestServ.cpp&lt;br /&gt;"Test" - netwerk/test/TestSocketTransport.cpp&lt;br /&gt;"Test" - netwerk/test/TestStreamChannel.cpp&lt;br /&gt;"Test" - netwerk/test/TestStreamLoader.cpp&lt;br /&gt;"Test" - netwerk/test/TestStreamPump.cpp&lt;br /&gt;"Test" - netwerk/test/TestStreamTransport.cpp&lt;br /&gt;"Test" - netwerk/test/TestUpload.cpp&lt;br /&gt;"Test" - nsprpub/pr/tests/anonfm.c:&lt;br /&gt;"Test" - nsprpub/pr/tests/instrumt.c:&lt;br /&gt;"Test" - nsprpub/pr/tests/mbcs.c:&lt;br /&gt;"Test" - nsprpub/pr/tests/nameshm1.c:&lt;br /&gt;"Test" - nsprpub/pr/tests/ntioto.c:&lt;br /&gt;"Test" - nsprpub/pr/tests/op_excl.c:&lt;br /&gt;"Test" - nsprpub/pr/tests/randseed.c:&lt;br /&gt;"Test" - xpcom/proxy/tests/proxytests.cpp&lt;br /&gt;"TestCase" - security/nss/cmd/selfserv/selfserv.c:&lt;br /&gt;"TestSocketIO" - netwerk/test/TestOverlappedIO.cpp&lt;br /&gt;"TestSocketIO" - netwerk/test/TestSocketIO.cpp&lt;br /&gt;"URILoader" - uriloader/base/nsURILoader.cpp&lt;br /&gt;"UrlClassifierDbService" - toolkit/components/url-classifier/src/nsUrlClassifierDBService.cpp&lt;br /&gt;"UrlClassifierStreamUpdater" - toolkit/components/url-classifier/src/nsUrlClassifierStreamUpdater.cpp&lt;br /&gt;"Widget" - widget/src/gtk2/nsAppShell.cpp&lt;br /&gt;"WidgetDraw" - widget/src/gtk2/nsAppShell.cpp&lt;br /&gt;"WidgetFocus" - widget/src/gtk2/nsAppShell.cpp&lt;br /&gt;"WidgetIM" - widget/src/gtk2/nsAppShell.cpp&lt;br /&gt;"XRemoteClient" - widget/src/xremoteclient/XRemoteClient.cpp&lt;br /&gt;"XftFontLoad" - gfx/src/gtk/nsFontMetricsXft.cpp&lt;br /&gt;"XlibScrolling" - widget/src/xlib/nsWidget.cppPRLogModuleInfo&lt;br /&gt;"XlibWidgets" - widget/src/xlib/nsWidget.cppPRLogModuleInfo&lt;br /&gt;"cache" - netwerk/cache/src/nsCache.cpp&lt;br /&gt;"canvasGLES11" - extensions/canvas3d/src/nsCanvasRenderingContextGLES11.cpp&lt;br /&gt;"clock" - nsprpub/pr/src/misc/prinit.c:&lt;br /&gt;"cltsrv_log" - nsprpub/pr/tests/cltsrv.c:&lt;br /&gt;"cltsrv_log" - nsprpub/pr/tests/provider.c:&lt;br /&gt;"cmon" - nsprpub/pr/src/misc/prinit.c:&lt;br /&gt;"cookie" - netwerk/cookie/src/nsCookieService.cpp&lt;br /&gt;"counters" - nsprpub/pr/src/misc/prcountr.c:&lt;br /&gt;"cvar" - nsprpub/pr/src/misc/prinit.c:&lt;br /&gt;"expatdriver" - parser/htmlparser/src/nsExpatDriver.cpp&lt;br /&gt;"frame" - layout/generic/nsFrame.cpp&lt;br /&gt;"frameverifytree" - layout/generic/nsFrame.cpp&lt;br /&gt;"gc" - nsprpub/pr/src/misc/prinit.c:&lt;br /&gt;"gizmo" - nsprpub/pr/include/prlog.h:**&lt;br /&gt;"gnomevfs" - extensions/gnomevfs/nsGnomeVFSProtocolHandler.cpp&lt;br /&gt;"htmlcontentsink" - content/html/document/src/nsHTMLContentSink.cpp&lt;br /&gt;"imgRequest" - modules/libpr0n/src/imgRequest.cppPRLogModuleInfo&lt;br /&gt;"io" - nsprpub/pr/src/misc/prinit.c:&lt;br /&gt;"ldap" - directory/xpcom/base/src/nsLDAPProtocolModule.cpp&lt;br /&gt;"ldapautocomplete" - mailnews/addrbook/src/nsLDAPAutoCompleteSession.cpp&lt;br /&gt;"ldapautocomplete" - mailnews/addrbook/src/nsLDAPAutoCompleteSession.cpp&lt;br /&gt;"linker" - nsprpub/pr/src/misc/prinit.c:&lt;br /&gt;"mon" - nsprpub/pr/src/misc/prinit.c:&lt;br /&gt;"mozStorage" - storage/src/mozStorageConnection.cpp&lt;br /&gt;"msgc" - nsprpub/lib/msgc/src/prmsgc.c:&lt;br /&gt;"msgcompose" - mailnews/compose/src/nsMsgComposeService.cpp&lt;br /&gt;"negotiateauth" - extensions/auth/nsAuthFactory.cpp&lt;br /&gt;"nsAbOutlookCardLog" - mailnews/addrbook/src/nsAbOutlookCard.cpp&lt;br /&gt;"nsAbOutlookDirFactoryLog" - mailnews/addrbook/src/nsAbOutlookDirFactory.cpp&lt;br /&gt;"nsAbOutlookDirectoryLog" - mailnews/addrbook/src/nsAbOutlookDirectory.cpp&lt;br /&gt;"nsAbWinHelperLog" - mailnews/addrbook/src/nsAbWinHelper.cpp&lt;br /&gt;"nsCSSLoader" - layout/style/nsCSSLoader.cpp&lt;br /&gt;"nsCachedChromeChannel" - chrome/src/nsChromeProtocolHandler.cpp&lt;br /&gt;"nsCachedChromeChannel" - rdf/chrome/src/nsChromeProtocolHandler.cpp&lt;br /&gt;"nsComponentManager" - xpcom/components/nsComponentManager.cpp&lt;br /&gt;"nsContentPolicy" - content/base/src/nsContentPolicy.cpp&lt;br /&gt;"nsDebug" - xpcom/base/nsDebugImpl.cpp&lt;br /&gt;"nsDeviceContextPS" - gfx/src/ps/nsDeviceContextPS.cpp&lt;br /&gt;"nsDeviceContextXp" - gfx/src/xprint/nsDeviceContextXP.cpp&lt;br /&gt;"nsDirectoryIndexStream" - netwerk/base/src/nsDirectoryIndexStream.cpp&lt;br /&gt;"nsDocShell" - docshell/base/nsDocShell.cpp&lt;br /&gt;"nsDocShellLeak" - docshell/base/nsDocShell.cpp&lt;br /&gt;"nsDragService" - widget/src/beos/nsDragService.cpp&lt;br /&gt;"nsDragService" - widget/src/gtk/nsDragService.cpp&lt;br /&gt;"nsDragService" - widget/src/gtk2/nsDragService.cpp&lt;br /&gt;"nsElementMap" - content/xul/document/src/nsElementMap.cpp&lt;br /&gt;"nsEventQueue" - xpcom/threads/nsEventQueue.cpp&lt;br /&gt;"nsFTPDirListingConv" - netwerk/streamconv/converters/nsFTPDirListingConv.cpp&lt;br /&gt;"nsFtp" - netwerk/protocol/ftp/src/nsFtpProtocolHandler.cpp&lt;br /&gt;"nsHostResolver" - netwerk/dns/src/nsHostResolver.cpp&lt;br /&gt;"nsHttp" - netwerk/protocol/http/src/nsHttpHandler.cpp&lt;br /&gt;"nsIIdleService" - widget/src/gtk2/nsIdleServiceGTK.cpp&lt;br /&gt;"nsIOThreadPool" - netwerk/base/src/nsIOThreadPool.cpp&lt;br /&gt;"nsJarProtocol" - modules/libjar/nsJARChannel.cpp&lt;br /&gt;"nsMapiAddressBookLog" - mailnews/addrbook/src/nsMapiAddressBook.cpp&lt;br /&gt;"nsMetricsService" - extensions/metrics/src/nsMetricsService.cpp&lt;br /&gt;"nsNativeModuleLoader" - xpcom/components/nsNativeComponentLoader.cpp&lt;br /&gt;"nsObjectFrame" - layout/generic/nsObjectFrame.cpp&lt;br /&gt;"nsPipe" - xpcom/io/nsPipe3.cpp&lt;br /&gt;"nsPostScriptObj" - gfx/src/ps/nsPostScriptObj.cpp&lt;br /&gt;"nsPrefetch" - uriloader/prefetch/nsPrefetchService.cpp&lt;br /&gt;"nsRDFContentSink" - rdf/base/src/nsRDFContentSink.cpp&lt;br /&gt;"nsRDFService" - rdf/base/src/nsRDFService.cpp&lt;br /&gt;"nsRDFXMLDataSource" - rdf/base/src/nsRDFXMLDataSource.cpp&lt;br /&gt;"nsRequestObserverProxy" - netwerk/base/src/nsRequestObserverProxy.cpp&lt;br /&gt;"nsResProtocol" - netwerk/protocol/res/src/nsResProtocolHandler.cpp&lt;br /&gt;"nsSecureBrowserUI" - security/manager/boot/src/nsSecureBrowserUIImpl.cpp&lt;br /&gt;"nsSharedPrefHandler" - modules/libpref/src/nsSharedPrefHandler.cpp&lt;br /&gt;"nsSocketTransport" - netwerk/base/src/nsSocketTransportService2.cpp&lt;br /&gt;"nsStandardURL" - netwerk/base/src/nsStandardURL.cpp&lt;br /&gt;"nsStorageStream" - xpcom/io/nsStorageStream.cpp&lt;br /&gt;"nsStreamCopier" - netwerk/base/src/nsAsyncStreamCopier.cpp&lt;br /&gt;"nsStreamPump" - netwerk/base/src/nsInputStreamPump.cpp&lt;br /&gt;"nsThread" - xpcom/threads/nsThread.cpp&lt;br /&gt;"nsThreadPool" - xpcom/threads/nsThreadPool.cpp&lt;br /&gt;"nsTimerImpl" - xpcom/threads/nsTimerImpl.h:&lt;br /&gt;"nsWabAddressBookLog" - mailnews/addrbook/src/nsWabAddressBook.cpp&lt;br /&gt;"nsWyciwygChannel" - content/html/document/src/nsWyciwygProtocolHandler.cpp&lt;br /&gt;"nsXPrintContext" - gfx/src/xprint/nsXPrintContext.cpp&lt;br /&gt;"nsXULCommandDispatcher" - content/xul/document/src/nsXULCommandDispatcher.cpp&lt;br /&gt;"nsXULContentSink" - content/xul/document/src/nsXULContentSink.cpp&lt;br /&gt;"nsXULDocument" - content/xul/document/src/nsXULDocument.cpp&lt;br /&gt;"nsXULTemplateBuilder" - content/xul/templates/src/nsXULTemplateBuilder.cpp&lt;br /&gt;"nscontentsink" - content/base/src/nsContentSink.cpp&lt;br /&gt;"nss_cache" - security/nss/lib/pki/tdcache.c:&lt;br /&gt;"nss_mod_log" - security/nss/lib/pk11wrap/debug_module.c:&lt;br /&gt;"nssilock" - security/nss/lib/util/nssilock.c:&lt;br /&gt;"objlc" - content/base/src/nsObjectLoadingContent.cpp&lt;br /&gt;"pipnss" - security/manager/ssl/src/nsNSSComponent.cpp&lt;br /&gt;"printing" - layout/base/nsDocumentViewer.cpp&lt;br /&gt;"printing" - layout/printing/nsPrintData.cpp&lt;br /&gt;"printing" - layout/printing/nsPrintEngine.cpp&lt;br /&gt;"printing-gfx" - gfx/src/windows/nsDeviceContextWin.cpp&lt;br /&gt;"printing-layout" - layout/generic/nsSimplePageSequence.cppPRLogModuleInfo&lt;br /&gt;"printing-widget" - widget/src/windows/nsDeviceContextSpecWin.cppPRLogModuleInfo&lt;br /&gt;"proxy" - netwerk/base/src/nsProtocolProxyService.cpp&lt;br /&gt;"sched" - nsprpub/pr/src/misc/prinit.c:&lt;br /&gt;"schemaValidation" - extensions/schema-validation/src/nsSchemaValidator.cppPRLogModuleInfo&lt;br /&gt;"schemaValidation" - extensions/schema-validation/src/nsSchemaValidatorUtils.cppPRLogModuleInfo&lt;br /&gt;"shm" - nsprpub/pr/src/misc/prinit.c:&lt;br /&gt;"shma" - nsprpub/pr/src/misc/prinit.c:&lt;br /&gt;"styleverifytree" - layout/generic/nsFrame.cpp&lt;br /&gt;"test" - nsprpub/pr/tests/y2k.c:&lt;br /&gt;"testcase" - nsprpub/lib/tests/arena.c:&lt;br /&gt;"testcase" - nsprpub/pr/tests/rmdir.c:&lt;br /&gt;"thebesGfx" - gfx/src/thebes/nsThebesDeviceContext.cpp&lt;br /&gt;"thread" - nsprpub/pr/src/misc/prinit.c:&lt;br /&gt;"timing" - modules/libutil/public/stopwatch.h:&lt;br /&gt;"trace" - nsprpub/pr/src/misc/prtrace.c:&lt;br /&gt;"updatedriver" - toolkit/xre/nsUpdateDriver.cpp&lt;br /&gt;"webdav" - extensions/webdav/src/nsWebDAVService.cpp&lt;br /&gt;"webshell" - docshell/base/nsWebShell.cpp&lt;br /&gt;"winfonts" - gfx/thebes/src/gfxWindowsFonts.cpp&lt;br /&gt;"xpath" - content/xslt/src/base/txLog.h:&lt;br /&gt;"xpclog" - js/src/xpconnect/src/xpclog.cpp&lt;br /&gt;"xpcomproxy" - xpcom/proxy/src/nsProxyObjectManager.cppPRLogModuleInfo&lt;br /&gt;"xslt" - content/xslt/src/base/txLog.h:&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38606689-3587177848856846327?l=xoatlicue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xoatlicue.blogspot.com/feeds/3587177848856846327/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38606689&amp;postID=3587177848856846327' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/3587177848856846327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/3587177848856846327'/><link rel='alternate' type='text/html' href='http://xoatlicue.blogspot.com/2007/02/investigating-nspr-logging.html' title='Investigating NSPR Logging'/><author><name>Tau Central</name><uri>http://www.blogger.com/profile/04639944664204798442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_T3myM7H29Os/SUFfoOpMGNI/AAAAAAAAAAM/uVo48TpRUA8/S220/MononokeGhostieLg.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38606689.post-117122363584151890</id><published>2007-02-11T11:43:00.000-08:00</published><updated>2007-02-11T11:53:55.850-08:00</updated><title type='text'>Creating Your First Reftest, and Your Second and Third</title><content type='html'>I have updated a page on devmo and I think it is a rather nice page, though I am not objective here.&lt;br /&gt;&lt;a href="http://developer.mozilla.org/en/docs/Creating_reftest-based_unit_tests"&gt;&lt;br /&gt;http://developer.mozilla.org/en/docs/Creating_reftest-based_unit_tests&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This describes in very practical terms how to create reftests. It turns out to be way easier than it seemed at first. Really, I just had to map what reftest did into my head. Not being a long-time Mozilla-ish person, it probably took me longer than it would take others.&lt;br /&gt;&lt;br /&gt;Here is a slice from the page, giving instructions on just the first test. Please see the page for more info. There are details in the full instructions that may be useful. And if something seems wrong, please feel free to update the page. Send me an e-mail if you would like, but wiki is more wiki if people really edit what they see. And now for the show.&lt;hr /&gt;&lt;br /&gt;&lt;br /&gt;Step 1: Build a copy of Firefox for yourself.&lt;br /&gt;&lt;br /&gt;Step 2: Open a terminal window. Create a directory and make that your current directory.&lt;br /&gt;&lt;br /&gt;Step 3: Create a file named &lt;code&gt;foo.html&lt;/code&gt; with the following:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;reftest0001&amp;lt;/title&amp;gt;&amp;lt;body&amp;gt;&amp;lt;strong&amp;gt;Hello!&amp;lt;/strong&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;Step 4: Create a file named &lt;code&gt;bar.html&lt;/code&gt; with the following:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;reftest0001&amp;lt;/title&amp;gt;&amp;lt;body&amp;gt;&amp;lt;b&amp;gt;Hello!&amp;lt;/b&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;Step 5: Create a file named &lt;code&gt;reftest.list&lt;/code&gt; with the following:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;== foo.html bar.html&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;One is now ready to run the test. Here is how I run this. Adapt this to your own platform.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;% /bin/sh&lt;br /&gt;$ /Users/ray/mo/browser/mozilla/dist/MinefieldDebug.app/Contents/MacOS/firefox -P minefield1 -reftest ./reftest.list 2&amp;gt;&amp;amp;1 | grep REFTEST&lt;br /&gt;REFTEST PASS: file:///Users/ray/moz/reftest0001.html&lt;br /&gt;$&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;Congratulations! You have just created your first retest!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38606689-117122363584151890?l=xoatlicue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xoatlicue.blogspot.com/feeds/117122363584151890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38606689&amp;postID=117122363584151890' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/117122363584151890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/117122363584151890'/><link rel='alternate' type='text/html' href='http://xoatlicue.blogspot.com/2007/02/creating-your-first-reftest-and-your.html' title='Creating Your First Reftest, and Your Second and Third'/><author><name>Tau Central</name><uri>http://www.blogger.com/profile/04639944664204798442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_T3myM7H29Os/SUFfoOpMGNI/AAAAAAAAAAM/uVo48TpRUA8/S220/MononokeGhostieLg.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38606689.post-117080739223686912</id><published>2007-02-06T16:16:00.000-08:00</published><updated>2007-02-06T23:13:35.220-08:00</updated><title type='text'>Quick and Easy Leaks Detection on Mac OS X</title><content type='html'>If you are using a Mac OS X machine and have Apple's Developer Tools, such as Xcode, on it, you have access to a very quick and easy way to check for memory leaks. Not everyone knows about this, though it has been available for at least a few versions of the Dev Tools, so I thought I would put this out.&lt;br /&gt;&lt;br /&gt;If an application is running and you want to see if it is leaking memory, you can do run leaks and give it either a pid as a parameter, or a string matchable to the running  process, such as "firefox-bin" or "thunderbird-bin". The string matching only works if only one such process is running. Here is an example:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ leaks firefox&lt;br /&gt;Found process 260 (firefox-bin) from partial name firefox&lt;br /&gt;Process 260: 1263939 nodes malloced for 147066 KB&lt;br /&gt;Process 260: 76194 leaks for 7262704 total leaked bytes.&lt;br /&gt;Leak: 0x19aeea00  size=4096&lt;br /&gt;      0x0d0a0d30 0x6320740a 0x7373616c 0x7462223d&lt;br /&gt;      0x7420226e 0x3d657079 0x62757322 0x2274696d&lt;br /&gt;      0x6c617620 0x223d6575 0x646e6946 0x64692022&lt;br /&gt;      0x6966223d 0x625f646e 0x6f74746f 0x3c3e226d&lt;br /&gt;      0x726f662f 0x2f3c3e6d 0x0a3e696c 0x3c20200a&lt;br /&gt;      0x3c3e696c 0x6e617073 0x616c6320 0x223d7373&lt;br /&gt;      ...&lt;br /&gt;Leak: 0x19968200  size=1024&lt;br /&gt;      0x6d6c6f63 0x68697074 0x00000008 0x00000000&lt;br /&gt;      0x43fa8000 0x43ba0000 0x00000000 0x00000000&lt;br /&gt;      0x6b6d6f64 0x6d61676e 0x00000004 0x00000000&lt;br /&gt;      0x00000000 0x00000000 0x00000000 0x00000000&lt;br /&gt;      0x77696e64 0x77696e64 0x00000004 0x00000000&lt;br /&gt;      0x776d6f75 0x68697074 0x00000008 0x00000000&lt;br /&gt;      0x43f60000 0x43aa8000 0x00000000 0x00000000&lt;br /&gt;      ...&lt;br /&gt;Leak: 0x20b1a200  size=1024&lt;br /&gt;      0x6d6c6f63 0x68697074 0x00000008 0x00000000&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This one actually goes on for about 350,000 lines. I had been running this instance of Firefox 2.0.0.1 for about an hour, but with a lot of tab use.&lt;br /&gt;&lt;br /&gt;You can get stack frames and symbols in the stacks of leaked objects if you set environment variables that are explained in the man page.&lt;br /&gt;&lt;br /&gt;I think there is a lot of room for improvement in controlling memory leaks.&lt;br /&gt;&lt;br /&gt;There is actually much more I could say about this, but that is for another discussion. Really, I just wanted to say, here is a tool. It gives information. It is pretty accurate. If anyone has questions about using it, check the man page for the leaks executable, or feel free to ask me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38606689-117080739223686912?l=xoatlicue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xoatlicue.blogspot.com/feeds/117080739223686912/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38606689&amp;postID=117080739223686912' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/117080739223686912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/117080739223686912'/><link rel='alternate' type='text/html' href='http://xoatlicue.blogspot.com/2007/02/quick-and-easy-leaks-detection-on-mac.html' title='Quick and Easy Leaks Detection on Mac OS X'/><author><name>Tau Central</name><uri>http://www.blogger.com/profile/04639944664204798442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_T3myM7H29Os/SUFfoOpMGNI/AAAAAAAAAAM/uVo48TpRUA8/S220/MononokeGhostieLg.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38606689.post-116893683893892706</id><published>2007-01-16T00:30:00.000-08:00</published><updated>2007-01-18T11:29:55.186-08:00</updated><title type='text'>Testing Thunderbird as a Standalone</title><content type='html'>I do not want to mess up my e-mail account, but I do want to help test Thunderbird. I was able to install a James server from Apache on my machine. This is a mail server written in java. It was not very complicated to set up.&lt;br /&gt;&lt;br /&gt;At this point, I have the James server configured. I have sent mail to one of my users using telnet to talk to the SMTP port. I have received that mail in Thunderbird. I have used these TB instances to send mail to each other. And I now have a script that can send messages to the clients.&lt;br /&gt;&lt;br /&gt;The tasks for setting this up are:&lt;br /&gt;&lt;br /&gt;1) download and configure James.&lt;br /&gt;2) create profiles in Thunderbird and launch a different instance for each.&lt;br /&gt;3) use the clients to e-mail each other.&lt;br /&gt;4) use a script to send e-mails.&lt;br /&gt;&lt;br /&gt;Configuring James&lt;br /&gt;&lt;br /&gt;I am using James 2.3.0 from Apache. I have only made a few changes to a file, apps/james/SAR-INF/config.xml.&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;1) I commented out a "mailet":&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;!--&lt;br /&gt;&amp;lt;mailet match="RemoteAddrNotInNetwork=127.0.0.1" class="ToProcessor"&amp;gt;&lt;br /&gt;&amp;lt;processor&amp;gt; relay-denied &amp;lt;/processor&amp;gt;&lt;br /&gt;&amp;lt;notice&amp;gt;550 - Requested action not taken: relaying denied&amp;lt;/notice&amp;gt;&lt;br /&gt;&amp;lt;/mailet&amp;gt;&lt;br /&gt;--&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;This mailet was causing the mailer to think I was treating it like an open relay.&lt;br /&gt;&lt;br /&gt;2) I changed an item inside the &amp;lt;servernames&amp;gt; bit:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;servername&amp;gt;10.0.1.6&amp;lt;/servername&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;This is the IP of the machine I am using when I am inside my house's firewall.&lt;br /&gt;&lt;br /&gt;3) Inside the &amp;lt;remotemanager&amp;gt; bit, I changed the admin username and password. You do not have to, if you do not want to do so.&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;account login="root" password="root"/&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;4) Start the server.&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;br /&gt;% cd james-2.3.0 ; sudo bin/run.sh&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5) Add some users.&lt;br /&gt;&lt;blockquote&gt;One does this by using telnet to connect to the "remoteadmin" port, which defaults to 4555. Here is an example of adding usersm, with the stuff I typed in bold:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;br /&gt;% &lt;strong&gt;telnet localhost 4555&lt;/strong&gt;&lt;br /&gt;Trying ::1...&lt;br /&gt;Connected to localhost.&lt;br /&gt;Escape character is '^]'.&lt;br /&gt;JAMES Remote Administration Tool 2.3.0&lt;br /&gt;Please enter your login and password&lt;br /&gt;Login id:&lt;br /&gt;&lt;strong&gt;ray&lt;/strong&gt;&lt;br /&gt;Password:&lt;br /&gt;&lt;strong&gt;&amp;lt;mypassword&amp;gt;&lt;/strong&gt;&lt;br /&gt;Welcome ray. HELP for a list of commands&lt;br /&gt;&lt;strong&gt;help&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Currently implemented commands:&lt;br /&gt;&lt;br /&gt;help - display this help&lt;br /&gt;listusers - display existing accounts&lt;br /&gt;countusers - display the number of existing accounts&lt;br /&gt;adduser [username] [password] - add a new user&lt;br /&gt;verify [username] - verify if specified user exist&lt;br /&gt;deluser [username] - delete existing user&lt;br /&gt;setpassword [username] [password] - sets a user's password&lt;br /&gt;setalias [user] [alias] - locally forwards all email for 'user' to 'alias'&lt;br /&gt;showalias [username] - shows a user's current email alias&lt;br /&gt;unsetalias [user] - unsets an alias for 'user'&lt;br /&gt;setforwarding [username] [emailaddress] - forwards a user's email to another email address&lt;br /&gt;showforwarding [username] - shows a user's current email forwarding&lt;br /&gt;unsetforwarding [username] - removes a forward&lt;br /&gt;user [repositoryname] - change to another user repository&lt;br /&gt;shutdown - kills the current JVM (convenient when James is run as a daemon)&lt;br /&gt;quit - close connection&lt;br /&gt;&lt;strong&gt;quit&lt;/strong&gt;&lt;br /&gt;Bye&lt;br /&gt;&lt;br /&gt;Connection closed by foreign host.&lt;br /&gt;&lt;br /&gt;%&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Creating Profiles&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Moz-people know how to do this already. Just set up a profile for each user in the list you added in the step above.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Creating Profiles&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Moz-people know how to do this already. Just set up a profile for each user in the list you added in the step above.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Sending E-Mails From Clients&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Just set the mail host and sender to the IP address of your machine and enter e-mail addresses as, for example: &lt;code&gt;adam@[10.0.1.6]&lt;/code&gt;, with the brackets. I am trying to find a way to set a preference to change the title of the main window. For instance, it would be useful to have the window title be the same as the e-mail of that profile. I have not found how to do this yet.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Scripted E-Mails&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Download the following two files:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.ganymede.org/xue/20070118/muchMail.sh"&gt;muchMail.sh&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.ganymede.org/xue/20070118/inMail.txt"&gt;inMail.txt&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;I still need to put in parameters for some things. Right now, you say:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;% ./muchMail.sh -h 10.0.1.6 -i inMail.txt&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;There are keywords in the file that get replaced dynamically, such as &lt;code&gt;__DATE__&lt;/code&gt;. Some are structural keywords, such as &lt;code&gt;__TO__&lt;/code&gt;, &lt;code&gt;__FROM__&lt;/code&gt;, &lt;code&gt;__SUBJ__&lt;/code&gt;, &lt;code&gt;__END__&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Let me know how much this needs to be documented. Lines starting with a &lt;code&gt;#&lt;/code&gt; are ignored. E-mails start with a &lt;code&gt;__TO__&lt;/code&gt; and end with a &lt;code&gt;__END__&lt;/code&gt;.&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/38606689-116893683893892706?l=xoatlicue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xoatlicue.blogspot.com/feeds/116893683893892706/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38606689&amp;postID=116893683893892706' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/116893683893892706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38606689/posts/default/116893683893892706'/><link rel='alternate' type='text/html' href='http://xoatlicue.blogspot.com/2007/01/testing-thunderbird-as-standalone.html' title='Testing Thunderbird as a Standalone'/><author><name>Tau Central</name><uri>http://www.blogger.com/profile/04639944664204798442</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_T3myM7H29Os/SUFfoOpMGNI/AAAAAAAAAAM/uVo48TpRUA8/S220/MononokeGhostieLg.jpg'/></author><thr:total>0</thr:total></entry></feed>
