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

<channel>
	<title>Shawn Wilsher &#187; Mozilla</title>
	<atom:link href="http://shawnwilsher.com/archives/category/mozilla/feed" rel="self" type="application/rss+xml" />
	<link>http://shawnwilsher.com</link>
	<description></description>
	<pubDate>Fri, 31 Oct 2008 04:30:47 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>I&#8217;m in a podcast!</title>
		<link>http://shawnwilsher.com/archives/179</link>
		<comments>http://shawnwilsher.com/archives/179#comments</comments>
		<pubDate>Sun, 26 Oct 2008 05:40:56 +0000</pubDate>
		<dc:creator>Shawn Wilsher</dc:creator>
		
		<category><![CDATA[Mozilla]]></category>

		<category><![CDATA[Personal]]></category>

		<category><![CDATA[Technology]]></category>

		<category><![CDATA[download manager]]></category>

		<category><![CDATA[metalink]]></category>

		<category><![CDATA[podcast]]></category>

		<guid isPermaLink="false">http://shawnwilsher.com/?p=179</guid>
		<description><![CDATA[A little while ago I got interviewed by Anthony Bryan from the metalink project.  I feel sorry for him because it took me several long months to actually get the time to sit down and talk to him. Anyway, you can check out the podcast here.  They used an old facebook photo of [...]]]></description>
			<content:encoded><![CDATA[<p>A little while ago I got interviewed by <a href="http://www.metalinker.org/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.metalinker.org/');">Anthony Bryan from the metalink project</a>.  I feel sorry for him because it took me several long months to actually get the time to sit down and talk to him. Anyway, you can <a href="http://knowledgecaps.com/2008/10/05/fos-fresh-online-servicesfirefox/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://knowledgecaps.com/2008/10/05/fos-fresh-online-servicesfirefox/');">check out the podcast here</a>.  They used an old facebook photo of mine, so, uh, pardon the odd image of me.  I figured <a href="http://madhava.com/egotism/beltzner_birthday.jpg" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://madhava.com/egotism/beltzner_birthday.jpg');">it could be worse though</a>.</p>
<p>It&#8217;s worth a listen though.  I talk about some of the features of the new download manager (old news now, but he ask for this interview a while ago&#8230;), how I got involved with the Mozilla project, and a few other interesting tidbits including what I&#8217;ve currently been working on.  There is other interesting things in there too!</p>
]]></content:encoded>
			<wfw:commentRss>http://shawnwilsher.com/archives/179/feed</wfw:commentRss>
		</item>
		<item>
		<title>DTrace Awesomeness</title>
		<link>http://shawnwilsher.com/archives/178</link>
		<comments>http://shawnwilsher.com/archives/178#comments</comments>
		<pubDate>Thu, 16 Oct 2008 20:35:17 +0000</pubDate>
		<dc:creator>Shawn Wilsher</dc:creator>
		
		<category><![CDATA[Mozilla]]></category>

		<category><![CDATA[DTrace]]></category>

		<category><![CDATA[fsync]]></category>

		<category><![CDATA[places]]></category>

		<category><![CDATA[write]]></category>

		<guid isPermaLink="false">http://shawnwilsher.com/?p=178</guid>
		<description><![CDATA[Yesterday dietrich was telling me he was seeing a lot of writes to places.sqlite and places.sqlite-journal.  I wanted to get good, hard data to see what was writing, and how often we were doing it.  I figured this was a good option for DTrace, but I&#8217;ve had mixed experiences with it in the [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday <a href="http://whoisi.com/p/594" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://whoisi.com/p/594');">dietrich</a> was telling me he was seeing a lot of writes to <code>places.sqlite</codE> and <code>places.sqlite-journal</code>.  I wanted to get good, hard data to see what was writing, and how often we were doing it.  I figured this was a good option for DTrace, but I&#8217;ve had mixed experiences with it in the past.  I first turned to Instruments on OS X, but that can&#8217;t give you stacks for calls, so I had to dump it.</p>
<p>I talked to <a href="http://blog.mozilla.com/dolske/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://blog.mozilla.com/dolske/');">dolske</a>, who happens to be the resident DTrace expert around here.  With his help, I was able to put together <a href="http://files.shawnwilsher.com/2008/10/16/writestacks.d" >this little D script</a> to track writes to the files in question, and give me user stack traces so we know who is writing and when.  With this, we&#8217;ve figured out what was writing, and are working on how to make it write less as we speak.</p>
<p>DTrace really is an awesome tool, even if it can be a bit awkward to use from time to time.</p>
]]></content:encoded>
			<wfw:commentRss>http://shawnwilsher.com/archives/178/feed</wfw:commentRss>
		</item>
		<item>
		<title>Asynchronous Storage API Take 2</title>
		<link>http://shawnwilsher.com/archives/177</link>
		<comments>http://shawnwilsher.com/archives/177#comments</comments>
		<pubDate>Thu, 16 Oct 2008 18:21:33 +0000</pubDate>
		<dc:creator>Shawn Wilsher</dc:creator>
		
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://shawnwilsher.com/?p=177</guid>
		<description><![CDATA[It&#8217;s been a bit more than three months since I wrote about the asynchronous storage API landing in mozilla-central.  As far as I know, there are still no consumers of it in mozilla-central, but I do think that the Thunderbird folks are using it (they&#8217;ve been filing several bugs about it).  We were [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been a bit more than three months since I wrote about the <a href="http://shawnwilsher.com/archives/162" >asynchronous storage API landing in mozilla-central</a>.  As far as I know, there are still no consumers of it in mozilla-central, but I do think that the Thunderbird folks are using it (they&#8217;ve been filing several bugs about it).  We were looking at using it in places to help with the <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=421482" onclick="javascript:pageTracker._trackPageview('/outbound/article/https://bugzilla.mozilla.org/show_bug.cgi?id=421482');">fsync issues</a> we&#8217;ve been working with, and noticed a major flaw to the API.  You cannot perform more than one statement at a time in a specific order asynchronously without jumping through a number of hoops that happen to also be on fire.  Enter <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=458811" onclick="javascript:pageTracker._trackPageview('/outbound/article/https://bugzilla.mozilla.org/show_bug.cgi?id=458811');">bug 458811</a>.  That landed on Monday, so now it&#8217;s easy to do - just call <code>mozIStorageConnection::executeAsync</code> and pass it an array of bound statements.  Hope others find this just as useful as we did!</p>
]]></content:encoded>
			<wfw:commentRss>http://shawnwilsher.com/archives/177/feed</wfw:commentRss>
		</item>
		<item>
		<title>DOM Inspector 2.0.1</title>
		<link>http://shawnwilsher.com/archives/176</link>
		<comments>http://shawnwilsher.com/archives/176#comments</comments>
		<pubDate>Fri, 26 Sep 2008 18:46:07 +0000</pubDate>
		<dc:creator>Shawn Wilsher</dc:creator>
		
		<category><![CDATA[Mozilla]]></category>

		<category><![CDATA[DOM Inspector]]></category>

		<category><![CDATA[Firefox]]></category>

		<category><![CDATA[release]]></category>

		<category><![CDATA[SeaMonkey]]></category>

		<guid isPermaLink="false">http://shawnwilsher.com/?p=176</guid>
		<description><![CDATA[I&#8217;ve just released DOM Inspector 2.0.1.  This contains a number of stability and UI fixes.  This is available on AMO, but you should automatically receive the update.
]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just released DOM Inspector 2.0.1.  This contains a number of stability and UI fixes.  This is <a href="https://addons.mozilla.org/en-US/firefox/addon/6622" onclick="javascript:pageTracker._trackPageview('/outbound/article/https://addons.mozilla.org/en-US/firefox/addon/6622');">available on AMO</a>, but you should automatically receive the update.</p>
]]></content:encoded>
			<wfw:commentRss>http://shawnwilsher.com/archives/176/feed</wfw:commentRss>
		</item>
		<item>
		<title>Determining a Ts Regression</title>
		<link>http://shawnwilsher.com/archives/175</link>
		<comments>http://shawnwilsher.com/archives/175#comments</comments>
		<pubDate>Thu, 18 Sep 2008 16:14:44 +0000</pubDate>
		<dc:creator>Shawn Wilsher</dc:creator>
		
		<category><![CDATA[Mozilla]]></category>

		<category><![CDATA[performance]]></category>

		<category><![CDATA[SQLite]]></category>

		<guid isPermaLink="false">http://shawnwilsher.com/?p=175</guid>
		<description><![CDATA[For those who have been following the tree status of mozilla-central as of late, you probably noticed that I tried to land SQLite once again, but it was backed out due to a nasty Ts regression on Linux.  When I had run this through the try server, it had shown no regression so I [...]]]></description>
			<content:encoded><![CDATA[<p>For those who have been following the tree status of mozilla-central as of late, you probably noticed that I tried to land SQLite once again, but it was backed out due to a nasty Ts regression on Linux.  When I had run this through the try server, it had shown no regression so I had thought it was safe (just like the past three or four other times I&#8217;ve tried to land this).  Luckily, <a href="http://blog.johnath.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://blog.johnath.com/');">Johnathan</a>, who was the sheriff when I landed, found a linux box that we could use that reproduced this problem.  With a lot of his help, we got <a href="https://wiki.mozilla.org/StandaloneTalos" onclick="javascript:pageTracker._trackPageview('/outbound/article/https://wiki.mozilla.org/StandaloneTalos');">standalone talos</a> running just Ts, to get <code>strace</code> logs during startup.</p>
<p>Once I had those logs, I needed some way to parse the files for data so I can use it in a reasonable way.  I wrote a <a href="http://files.shawnwilsher.com/2008/9/18/function_times.txt" >python script</a> to parse the strace logs, and then insert them into a <a href="http://files.shawnwilsher.com/2008/9/18/data.sqlite" >sqlite database file <small>(26.8 MB)</small></a> so I could run some <a href="http://files.shawnwilsher.com/2008/9/18/generate_data.txt" >interesting queries</a> on the data.</p>
<p>With that data, I decided to generate some graphs to easily see what was going on.  All of these graphs compose the data from the six runs of Firefox that talos ran - the data is all summed up.  All the graphs have larger versions available if you click on them.</p>
<p>I figured that the most useful graph for investigating this Ts regression would be execution time:<br />
<a href="http://files.shawnwilsher.com/2008/9/18/tet.png" ><img src="http://files.shawnwilsher.com/2008/9/18/tet.png" height="289"  width="423" alt="Total execution time"/></a></p>
<p>Note that that is six runs of Firefox, which is why it is as long as it is.  Next, I looked at the average execution time for each function call:<br />
<a href="http://files.shawnwilsher.com/2008/9/18/aet.png" ><img src="http://files.shawnwilsher.com/2008/9/18/aet.png" height="289"  width="423" alt="Average execution time"/></a></p>
<p>And finally, I looked at the number of calls of each of these functions:<br />
<a href="http://files.shawnwilsher.com/2008/9/18/calls.png" ><img src="http://files.shawnwilsher.com/2008/9/18/calls.png" height="289"  width="423" alt="Number of calls"/></a></p>
<p>We are clearly seeing an increase in the number of fsync calls, and we know that on Linux those can be more painful than they are on other operating systems.  My next step is to see if we also see this increase on OS X.  If we do, I&#8217;m going to assume we see it on windows as well, and get backtraces of every single fsync call to determine why we&#8217;ve double the number of calls by upgrading.</p>
<p>I&#8217;ll make a new post as more data comes in.</p>
]]></content:encoded>
			<wfw:commentRss>http://shawnwilsher.com/archives/175/feed</wfw:commentRss>
		</item>
		<item>
		<title>New way to run tests</title>
		<link>http://shawnwilsher.com/archives/174</link>
		<comments>http://shawnwilsher.com/archives/174#comments</comments>
		<pubDate>Sun, 14 Sep 2008 16:26:36 +0000</pubDate>
		<dc:creator>Shawn Wilsher</dc:creator>
		
		<category><![CDATA[Mozilla]]></category>

		<category><![CDATA[tests]]></category>

		<guid isPermaLink="false">http://shawnwilsher.com/?p=174</guid>
		<description><![CDATA[Did you know that you no longer have to do some complicated command line incantation to run mochi-style tests?  Ted recently landed support for make mochitest-plain, make mochitest-chrome, make mochitest-a11y, and make mochitest-browser-chrome.  Today, I just pushed support to specify the --test-path parameter of old.  To use it, just add TEST_PATH=your/path/here to [...]]]></description>
			<content:encoded><![CDATA[<p>Did you know that you no longer have to do some complicated command line incantation to run mochi-style tests?  Ted recently landed support for <code>make mochitest-plain</code>, <code>make mochitest-chrome</code>, <code>make mochitest-a11y</code>, and <code>make mochitest-browser-chrome</code>.  Today, I just pushed support to specify the <code>--test-path</code> parameter of old.  To use it, just add <code>TEST_PATH=your/path/here</code> to the make command line.</p>
<p>For those of you who are used to running browser tests, you no longer have to worry about adding in the <code>../browser</code> bits to the path either.  The makefile handles it all for you.  Hurray!</p>
]]></content:encoded>
			<wfw:commentRss>http://shawnwilsher.com/archives/174/feed</wfw:commentRss>
		</item>
		<item>
		<title>Just Lovely</title>
		<link>http://shawnwilsher.com/archives/173</link>
		<comments>http://shawnwilsher.com/archives/173#comments</comments>
		<pubDate>Thu, 11 Sep 2008 16:33:53 +0000</pubDate>
		<dc:creator>Shawn Wilsher</dc:creator>
		
		<category><![CDATA[Mozilla]]></category>

		<category><![CDATA[Personal]]></category>

		<category><![CDATA[e-mail]]></category>

		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://shawnwilsher.com/?p=173</guid>
		<description><![CDATA[Someone is currently sending a lot of spam and using one of my e-mail addresses as the sender.  I&#8217;m getting at least one bounced message per minute right now.  There has got to be a better way to do e-mail&#8230;
]]></description>
			<content:encoded><![CDATA[<p>Someone is currently sending <strong>a lot</strong> of spam and using one of my e-mail addresses as the sender.  I&#8217;m getting at least one bounced message per minute right now.  There has got to be a better way to do e-mail&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://shawnwilsher.com/archives/173/feed</wfw:commentRss>
		</item>
		<item>
		<title>How to solve the fsync problem</title>
		<link>http://shawnwilsher.com/archives/172</link>
		<comments>http://shawnwilsher.com/archives/172#comments</comments>
		<pubDate>Thu, 28 Aug 2008 23:09:59 +0000</pubDate>
		<dc:creator>Shawn Wilsher</dc:creator>
		
		<category><![CDATA[Mozilla]]></category>

		<category><![CDATA[fsync]]></category>

		<category><![CDATA[places]]></category>

		<guid isPermaLink="false">http://shawnwilsher.com/?p=172</guid>
		<description><![CDATA[This is part four in a continuing series about how we are working around the slow fsync issue in Mozilla. Part one can be found here, part two here, and part three here.
Boy, some of the initial planning to solve this problem has changed.  I found several bugs in my triggers, which made my [...]]]></description>
			<content:encoded><![CDATA[<p>This is part four in a continuing series about how we are working around the slow fsync issue in Mozilla. <a href="http://shawnwilsher.com/archives/168" >Part one can be found here</a>, <a href="http://shawnwilsher.com/archives/169" >part two here</a>, and <a href="http://shawnwilsher.com/archives/170" >part three here</a>.</p>
<p>Boy, some of the initial planning to solve this problem has changed.  I found several bugs in my triggers, which made my life not so fun.  Now if you google the word fsync, my website is the first result returned (scary!).  Never fear, however!  I have good news.  The places team has put together an experimental build that should help greatly.  Before I link to the build though, I have a warning:<br />
<strong style="font-variant:small-caps">Do not use your normal profile - crate a copy of it to test this build.  This build will modify the places database schema, and if you go back to a normal build, you will experience some strange behavior.</strong></p>
<p>With that out of the way, the <a href="https://build.mozilla.org/tryserver-builds/2008-08-28_11:12-sdwilsh@shawnwilsher.com-try-df9b4f955b9/" onclick="javascript:pageTracker._trackPageview('/outbound/article/https://build.mozilla.org/tryserver-builds/2008-08-28_11:12-sdwilsh@shawnwilsher.com-try-df9b4f955b9/');">builds can be found here</a> and will be available for the next seven days.</p>
<p>Feedback is not only welcomed, but wanted.  You can track the overall progress of this task in <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=442967" onclick="javascript:pageTracker._trackPageview('/outbound/article/https://bugzilla.mozilla.org/show_bug.cgi?id=442967');">bug 442967</a></p>
]]></content:encoded>
			<wfw:commentRss>http://shawnwilsher.com/archives/172/feed</wfw:commentRss>
		</item>
		<item>
		<title>Protect yourself now if you use Gmail</title>
		<link>http://shawnwilsher.com/archives/171</link>
		<comments>http://shawnwilsher.com/archives/171#comments</comments>
		<pubDate>Sat, 16 Aug 2008 04:04:42 +0000</pubDate>
		<dc:creator>Shawn Wilsher</dc:creator>
		
		<category><![CDATA[Firefox]]></category>

		<category><![CDATA[Personal]]></category>

		<category><![CDATA[gmail]]></category>

		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://shawnwilsher.com/?p=171</guid>
		<description><![CDATA[So, I&#8217;m sitting here at the office because my apartment has no power.  I&#8217;m bored out of my mind, so I wrote up a handy little tid-bit of information for those of you using Gmail.
For those of your who use GMail (and if you don&#8217;t, why not?!), I&#8217;m going to strongly suggest you protect [...]]]></description>
			<content:encoded><![CDATA[<p>So, I&#8217;m sitting here at the office because my apartment has no power.  I&#8217;m bored out of my mind, so I wrote up a handy little tid-bit of information for those of you using Gmail.</p>
<p>For those of your who use GMail (and if you don&#8217;t, why not?!), I&#8217;m going to strongly suggest you protect yourself from <a href="http://en.wikipedia.org/wiki/Man-in-the-middle_attack" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://en.wikipedia.org/wiki/Man-in-the-middle_attack');">man-in-the-middle attacks</a> by setting the https only mode in Gmail.  A MITM attack can steal your login credentials, as well as anything else you transmit in the clear over the Internet (which is pretty much everything) and is <a href="https://www.defcon.org/html/defcon-16/dc-16-speakers.html#Beale" onclick="javascript:pageTracker._trackPageview('/outbound/article/https://www.defcon.org/html/defcon-16/dc-16-speakers.html#Beale');">easier than you might think</a>.</p>
<p>To do this, open your gmail settings (found at the top right of the page).</p>
<p><img src="http://files.shawnwilsher.com/2008/8/15/settings.png"/></p>
<p>Ensure that you have the general tab selected (it&#8217;s the leftmost tab).</p>
<p><img src="http://files.shawnwilsher.com/2008/8/15/general-tab.png"/></p>
<p>Scroll down to the bottom to the browser connections section, and make sure you select &#8220;always use https&#8221;.  Feel free to click on the link as well to learn more.</p>
<p><img src="http://files.shawnwilsher.com/2008/8/15/browser-connection.png"/></p>
<p><a href="http://www.mozilla.com/en-US/firefox/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.mozilla.com/en-US/firefox/');">Firefox 3</a> will always let you know that a page is being transmitted over https by turning the area to the left of the location bar (called the identity button) blue like so:</p>
<p><img src="http://files.shawnwilsher.com/2008/8/15/firefox.png"/></p>
<p>This is a serious issue.  If you have any questions about this, or this type of attack, feel free to ask and I&#8217;ll be happy to answer (or find out the answer if I don&#8217;t know).  Security is serious business, and I want you to be as safe as you can be.</p>
]]></content:encoded>
			<wfw:commentRss>http://shawnwilsher.com/archives/171/feed</wfw:commentRss>
		</item>
		<item>
		<title>Issues Issues&#8230;</title>
		<link>http://shawnwilsher.com/archives/170</link>
		<comments>http://shawnwilsher.com/archives/170#comments</comments>
		<pubDate>Wed, 06 Aug 2008 01:21:51 +0000</pubDate>
		<dc:creator>Shawn Wilsher</dc:creator>
		
		<category><![CDATA[Mozilla]]></category>

		<category><![CDATA[places fsync]]></category>

		<guid isPermaLink="false">http://shawnwilsher.com/?p=170</guid>
		<description><![CDATA[This is part three in a continuing series about how we are working around the slow fsync issue in Mozilla. Part one can be found here, and part two here. You may find the schema diagram of places to be a bit helpful when reading this post.
timeless found an interesting flaw to my previous proposal. [...]]]></description>
			<content:encoded><![CDATA[<p>This is part three in a continuing series about how we are working around the slow fsync issue in Mozilla. <a href="http://shawnwilsher.com/archives/168" >Part one can be found here</a>, and <a href="http://shawnwilsher.com/archives/169" >part two here</a>. You may find the <a href="http://dietrich.ganx4.com/mozilla/places-erd.png" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://dietrich.ganx4.com/mozilla/places-erd.png');">schema diagram of places</a> to be a bit helpful when reading this post.</p>
<p><a href="http://viper.haque.net/~timeless/blog/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://viper.haque.net/~timeless/blog/');">timeless</a> found an interesting flaw to my previous proposal.  If you were to visit a page, delete it, and then visit another page not yet seen before, you will never see it in any of your queries.  When you flush out all the &#8220;deleted&#8221; things, it will go away forever (unless the ordering was a bit different than what I expect, but that&#8217;s besides the point).  This is because of our id selection algorithm used in the insertion triggers.</p>
<p>I ended up talking to dietrich on irc about this, and we decided that deleting isn&#8217;t a common case, so we should feel free to do the write (with the needed fsyncs) at that point.  As a result, our <code>view</code>s change, as well as a few of our triggers.</p>
<p><code>moz_places_view</code> now looks like this:</p>
<pre lang="sql">SELECT *
FROM moz_places_temp
UNION ALL
SELECT *
FROM moz_places
WHERE id NOT IN (SELECT id FROM moz_places_temp)
</pre>
<p>And <code>moz_historyvisits_view</code> now looks like this:</p>
<pre lang="sql">SELECT *
FROM moz_historyvisits_temp
UNION ALL
SELECT *
FROM moz_historyvisits
WHERE id NOT IN (SELECT id FROM moz_historyvisits_temp)
</pre>
<p>The trigger for deletion on <code>moz_places_view</code> now looks like this:</p>
<pre lang="sql">CREATE TEMPORARY TRIGGER moz_places_view_delete_trigger
INSTEAD OF DELETE
ON moz_places_view
BEGIN
  DELETE FROM moz_places_temp
  WHERE id = OLD.id;
  DELETE FROM moz_places
  WHERE id = OLD.id;
END
</pre>
<p>Lastly, the trigger for deletion on <code>moz_historyvisits_view</code> now looks like this:</p>
<pre lang="sql">CREATE TEMPORARY TRIGGER moz_historyvisits_view_delete_trigger
INSTEAD OF DELETE
ON moz_historyvisits_view
BEGIN
  DELETE FROM moz_historyvisits_temp
  WHERE id = OLD.id;
  DELETE FROM moz_historyvisits
  WHERE id = OLD.id;
  UPDATE moz_places_view
  SET visit_count = visit_count - 1
  WHERE moz_places_view.id = OLD.place_id;
END
</pre>
<p>The net result is two fewer in-memory tables, and slightly less complicated view queries.  There isn&#8217;t much of a change with the triggers.</p>
<p>Many thanks to timeless for catching that.  If you have any other concerns or spot any issues, please let me know with a comment here, or feel free to <a href="mailto:me@shawnwilsher.com">send me an e-mail</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://shawnwilsher.com/archives/170/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
