<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>blah. blah. blah.</description><title>Paul O’Shannessy</title><generator>Tumblr (3.0; @zpao)</generator><link>http://zpao.tumblr.com/</link><item><title>This is very good position</title><description>&lt;blockquote&gt;
  &lt;p&gt;Hi Paul ,&lt;/p&gt;
  
  &lt;p&gt;I hope that you are doing well. There is a position in Ebay in as Frontend Engineer. Hiring managers from two different groups are very much impressed with your profile and they want to set up telephonic talk on the phone.&lt;/p&gt;
  
  &lt;p&gt;This is very good position . So would you please send me updated copy of your resume. If you are looking for Fulltime or long term contract  whatever way you are looking they can do it for you.&lt;/p&gt;
  
  &lt;p&gt;Whatever  salary  you  are  looking  for    that  way  manager  is  ready  to  pay  you.&lt;/p&gt;
  
  &lt;p&gt;Please send me salary expectation and your availability as soon as possible so we can schedule your interview because manager has your profile and they are pushing me to schedule your interview as soon as possible so you will be on board immediately after clearing an interview.&lt;/p&gt;
  
  &lt;p&gt;Manager is also asking one question after reviewing your profile. So would you please give me your contact details so we can talk more about this position. He has very much hope on you.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I understand that English is not everybody&amp;#8217;s first language but I expect better of somebody whose job is entirely about communication.&lt;/p&gt;</description><link>http://zpao.tumblr.com/post/18428958256</link><guid>http://zpao.tumblr.com/post/18428958256</guid><pubDate>Mon, 27 Feb 2012 23:09:54 -0800</pubDate><category>recruiting</category><category>blah</category></item><item><title>Somehow I’ve been listening to Somebody That I Used to...</title><description>&lt;iframe width="400" height="225" src="http://www.youtube.com/embed/d9NF2edxy-M?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Somehow I’ve been listening to &lt;em&gt;Somebody That I Used to Know&lt;/em&gt; by Gotye on repeat for the past week and haven’t gotten sick of it yet. This cover by Walk off the Earth is so excellent, not just because of how good it sounds but also because of how it was performed.&lt;/p&gt;</description><link>http://zpao.tumblr.com/post/16930190230</link><guid>http://zpao.tumblr.com/post/16930190230</guid><pubDate>Thu, 02 Feb 2012 11:30:26 -0800</pubDate><category>video</category><category>music</category></item><item><title>What's the Deal With V8Monkey &amp; SpiderNode?</title><description>&lt;p&gt;&lt;strong&gt;tl;dr&lt;/strong&gt; Neither are being actively worked on and could use some love.&lt;/p&gt;

&lt;hr&gt;&lt;p&gt;After NodeConf, development of &lt;a href="https://github.com/zpao/v8monkey"&gt;V8Monkey&lt;/a&gt; &amp;amp; &lt;a href="https://github.com/zpao/spidernode"&gt;SpiderNode&lt;/a&gt; slowed. We all got a bit burnt out in the weeks preceding NodeConf and took a little break. Shortly after, Shawn left Mozilla to work at Facebook with Rob on &lt;em&gt;[redacted]&lt;/em&gt; and the little break became longer. I was in the middle of planning a wedding &amp;amp; helping the (now-)wife with &lt;a href="http://onetruelovevintage.com"&gt;her company&lt;/a&gt;. Shawn &amp;amp; Rob were busy with work and some other &lt;a href="https://github.com/sdwilsh/tree-bot"&gt;side&lt;/a&gt; &lt;a href="https://github.com/mozilla/rust"&gt;projects&lt;/a&gt;. Mozilla opened an office in SF in August, so I stopped riding the train down the peninsula with Shawn &amp;amp; Rob as often. Long story short, we lost interest.&lt;/p&gt;

&lt;p&gt;In October I pulled current mozilla-central into the V8Monkey tree &amp;amp; tried to update from there. But some core things changed. APIs changed around Typed Arrays in SpiderMonkey. &lt;code&gt;JSScript&lt;/code&gt; stopped being a &lt;code&gt;JSObject&lt;/code&gt; which broke some of our assumptions with our implementation. I have &lt;a href="https://gist.github.com/1665805"&gt;a patch locally&lt;/a&gt; to try to fix those, but they&amp;#8217;re incomplete (it immediately segfaults). It&amp;#8217;s been 3 months and the JS engine doesn&amp;#8217;t idle, so it&amp;#8217;s entirely possible the world changed again.&lt;/p&gt;

&lt;p&gt;SpiderNode is untouched. But Node has definitely changed - it&amp;#8217;s gone from 0.4.x to 0.6.x and works on Windows! It&amp;#8217;s now using a newer version of V8, and further, using more V8 APIs that V8Monkey hasn&amp;#8217;t ported. It also looks like Buffers got a pretty big overhaul (I started to merge that, but it got messy). There&amp;#8217;s surely some other work that needs to be done.&lt;/p&gt;

&lt;h2&gt;The Future&lt;/h2&gt;

&lt;p&gt;There has been &lt;a href="https://twitter.com/#!/BrendanEich/status/158326339039010817"&gt;some mention&lt;/a&gt; of the JS team here at Mozilla implementing the V8 API. Not me or somebody doing it in their free time, but a full-time employee. I haven&amp;#8217;t seen that happen, but that&amp;#8217;s the best possible outcome. Assuming we have 100% compatibility (which is the only target that makes sense), then the path to reviving SpiderNode from there is easy. Basically we&amp;#8217;d just need to fix the build system again to compile SpiderMonkey &amp;amp; use that. Brendan has also &lt;a href="https://twitter.com/#!/BrendanEich/status/158328492709257217"&gt;threatened to unbitrot V8Monkey&lt;/a&gt;, but he&amp;#8217;s a busy guy, so we&amp;#8217;ll see.&lt;/p&gt;

&lt;p&gt;If that doesn&amp;#8217;t happen, then the future is grim. I don&amp;#8217;t have the time or drive to do this myself. If you&amp;#8217;re interested in helping out though, keep reading&amp;#8230;&lt;/p&gt;

&lt;h2&gt;Want to help?&lt;/h2&gt;

&lt;p&gt;Awesome! Get in touch &amp;amp; I can help get you started. I&amp;#8217;m more than happy to get that going because I&amp;#8217;d like to see these projects live on. Keep in mind that the real work mostly happens in V8Monkey &amp;#8212; it&amp;#8217;s 100% C++ and you&amp;#8217;re implementing one JS engine&amp;#8217;s API with another.&lt;/p&gt;</description><link>http://zpao.tumblr.com/post/16368488549</link><guid>http://zpao.tumblr.com/post/16368488549</guid><pubDate>Mon, 23 Jan 2012 14:14:44 -0800</pubDate><category>mozilla</category><category>spidernode</category><category>V8Monkey</category><category>node.js</category></item><item><title>And Just Like That I'm a Firefox Peer</title><description>&lt;p&gt;Not-so-long story short, as of a couple weeks ago Firefox review policies changed and now I can review any code going into Firefox (&lt;code&gt;browser/&lt;/code&gt;)! In actuality though, if a review request came my way in an area I wasn&amp;#8217;t familiar with, I would just give feedback and redirect the review to somebody more familiar with that code.&lt;/p&gt;

&lt;p&gt;Read up on the &lt;a href="https://wiki.mozilla.org/Firefox/Code_Review"&gt;new Firefox review policy&lt;/a&gt; and see &lt;a href="https://wiki.mozilla.org/Modules/Firefox"&gt;who else can review your patches&lt;/a&gt; to Firefox.&lt;/p&gt;</description><link>http://zpao.tumblr.com/post/11963194856</link><guid>http://zpao.tumblr.com/post/11963194856</guid><pubDate>Wed, 26 Oct 2011 14:43:21 -0700</pubDate><category>mozilla</category><category>firefox</category></item><item><title>Did you know that I got married 3.5 weeks ago? Now you do! I...</title><description>&lt;iframe src="http://player.vimeo.com/video/30352750" width="400" height="225" frameborder="0"&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Did you know that I got married 3.5 weeks ago? Now you do! I have more to say about it all, but here’s a short video from our awesome videographers, &lt;a href="http://seaglasscinema.com/"&gt;Seaglass Cinema&lt;/a&gt;.&lt;/p&gt;</description><link>http://zpao.tumblr.com/post/11324073440</link><guid>http://zpao.tumblr.com/post/11324073440</guid><pubDate>Tue, 11 Oct 2011 12:08:00 -0700</pubDate><category>life</category><category>personal</category><category>wedding</category><category>video</category></item><item><title>max_concurrent_tabs is Dead; Long Live restore_on_demand</title><description>&lt;p&gt;Since &lt;a href="http://blog.zpao.com/post/1140456188/cascaded-session-restore-a-hidden-bonus"&gt;last September&lt;/a&gt;, you could set &lt;code&gt;browser.sessionstore.max_concurrent_tabs&lt;/code&gt; to 0, and you would essentially have a built-in BarTab. I slipped that in later in the Firefox 4 release cycle as a part of cascaded session restore, but it required going into &lt;code&gt;about:config&lt;/code&gt; and changing a preference value (or installing something like &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/bartab-lite/"&gt;BarTab Lite&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Starting with the latest nightly (and soon to be Aurora 8), &lt;code&gt;browser.sessionstore.max_concurrent_tabs&lt;/code&gt; is no more. We&amp;#8217;re no longer allowing you to specify a specific number of tabs to restore concurrently. Instead we now allow you to either restore on demand, or use the hard-coded 3 tabs at a time value. The new preference is called &lt;code&gt;browser.sessionstore.restore_on_demand&lt;/code&gt;. If you had customized &lt;code&gt;max_concurrent_tabs&lt;/code&gt; and set it to 0, then &lt;code&gt;restore_on_demand&lt;/code&gt; will be migrated to true. Unlike the old preference, &lt;code&gt;restore_on_demand&lt;/code&gt; is exposed in the Preferences/Options dialog to make it accessible to a larger audience.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lq3b7xSfO21qb3958.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;For the details, check out &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=648683"&gt;bug 648683&lt;/a&gt;.&lt;/p&gt;</description><link>http://zpao.tumblr.com/post/9052215461</link><guid>http://zpao.tumblr.com/post/9052215461</guid><pubDate>Wed, 17 Aug 2011 14:51:12 -0700</pubDate><category>mozilla</category><category>firefox</category><category>firefox 8</category><category>session restore</category></item><item><title>This is Bad Recruiting</title><description>&lt;p&gt;An email came in yesterday with the subject &lt;em&gt;Amazing Career Opportunity Unlimited Funds!&lt;/em&gt; looking like this:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Hi Paul,&lt;/p&gt;
  
  &lt;p&gt;This is &lt;em&gt;[name]&lt;/em&gt; from &lt;em&gt;[recruiting company]&lt;/em&gt;.&lt;/p&gt;
  
  &lt;p&gt;I’m recruiting for a super HOT online company opening a west coast office in San Francisco to build new products. We are looking for top engineers (Ruby Developers and JavaScript Engineers).&lt;/p&gt;
  
  &lt;p&gt;This company is HOT and I want you to be a part of it… We have an unlimited budget! Offering you a guaranteed 20% pay raise (if not more), equity, and paid bonuses! Let’s just say this company is hotter than Google. We just hired the &lt;em&gt;[manager position]&lt;/em&gt; from Google for $300K. (Seriously no money cap) we are looking for the best and will pay to get the best.&lt;/p&gt;
  
  &lt;p&gt;If you are interested and want to learn more let’s talk!&lt;/p&gt;
  
  &lt;p&gt;What is a good time and number to give you a call?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;What&amp;#8217;s so bad here? To me, plenty. But if you see nothing wrong then I&amp;#8217;ll refer you to this person and it&amp;#8217;s all yours.&lt;/p&gt;

&lt;h2&gt;&amp;#8220;super HOT online company &amp;#8230; to build new products&amp;#8221;&lt;/h2&gt;

&lt;p&gt;AWWWWW SHIT. You&amp;#8217;re the same as nearly every tech company on the planet. Not only have you failed to differentiate this company from the rest of the world, you haven&amp;#8217;t told me who the company is or what they might be making. In order to find out if it&amp;#8217;s even remotely cool I have to email you (I know, that&amp;#8217;s what they want you to do). For somebody who hasn&amp;#8217;t entertained the thought of changing jobs, making me take the effort to contact you isn&amp;#8217;t going to happen.&lt;/p&gt;

&lt;p&gt;I understand there are stealth companies out there making things. If you are one of these companies I hope that (a) you&amp;#8217;re hiring people you know and trust and (b) you make it clear that you&amp;#8217;re not ready to talk publicly about your product so I don&amp;#8217;t call you a shitty recruiter.&lt;/p&gt;

&lt;h2&gt;&amp;#8220;This company is HOT&amp;#8221;&lt;/h2&gt;

&lt;p&gt;That&amp;#8217;s the second time &amp;#8220;HOT&amp;#8221; was used in all caps to describe this company. I guess it&amp;#8217;s better than saying &amp;#8220;HAWT&amp;#8221;. Seriously though, it just looks immature and desperate.&lt;/p&gt;

&lt;h2&gt;&amp;#8220;Let’s just say this company is hotter than Google&amp;#8221;&lt;/h2&gt;

&lt;p&gt;Bullshit.&lt;/p&gt;

&lt;h2&gt;OMG WE ARE LEAKING MONEY OUT OF OUR ASSHOLES AND MONEYMONEYMONEY&lt;/h2&gt;

&lt;p&gt;There are people out there who just want to make boatloads of cash and get out. Who wouldn&amp;#8217;t mind boatloads of cash, especially in the bay area where shit is expensive. But you don&amp;#8217;t actually want those people to work for your company. If they aren&amp;#8217;t passionate about what they&amp;#8217;re making, they&amp;#8217;ll make a quick buck &amp;amp; be gone fast, probably responding to another email like this. Hell, it might even be you recruiting them away.&lt;/p&gt;

&lt;p&gt;I know there&amp;#8217;s a hiring frenzy in the SF area and in the tech industry as a whole. That&amp;#8217;s all the more reason to be good at recruiting and not make me call out your shenanigans. There are recruiters out there who I&amp;#8217;ve said more than &amp;#8220;No&amp;#8221; to because they make a proper attempt and are polite to me (&lt;a href="http://blog.zpao.com/post/509894580/on-rude-recruiters"&gt;I don&amp;#8217;t like rude recruiters&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;That&amp;#8217;s all I&amp;#8217;ll say. That and I&amp;#8217;m not looking for a new job.&lt;/p&gt;</description><link>http://zpao.tumblr.com/post/8746168914</link><guid>http://zpao.tumblr.com/post/8746168914</guid><pubDate>Wed, 10 Aug 2011 13:39:22 -0700</pubDate><category>recruiting</category><category>grinds my gears</category></item><item><title>hg qedit</title><description>&lt;p&gt;Mercurial queues are still far from my ideal workflow, but they mostly &lt;em&gt;just work&lt;/em&gt; so I still use them. I haven&amp;#8217;t gotten into qqueues because that seems like even more management I don&amp;#8217;t need. If I had a 17 part patch then I would probably give those a go, but I don&amp;#8217;t.&lt;/p&gt;

&lt;p&gt;Instead I end up reordering the patches in my queue more often that I want. I run &lt;code&gt;vim .hg/patches/series&lt;/code&gt;, press a &lt;code&gt;j&lt;/code&gt;, &lt;code&gt;k&lt;/code&gt;, &lt;code&gt;d&lt;/code&gt;, &amp;amp; &lt;code&gt;p&lt;/code&gt; a few times, then quit. But sometimes I forget that I&amp;#8217;m not at &lt;code&gt;hg root&lt;/code&gt; so that doesn&amp;#8217;t work (usually tab completion is a good indicator but then I need to &lt;code&gt;cd&lt;/code&gt; a bit). &lt;a href="https://github.com/zpao/dotfiles/commit/51cdfb838c672f80db5b005eca1fe9972c23dab6"&gt;Enter &lt;code&gt;hg qedit&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[alias]
qedit = !vim $(hg root)/.hg/patches/series
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Just add the above to your .hgrc and you now have a new command which will pop open vim so you can reorder your patches. And of course if you want this to use your editor of choice, you can change &amp;#8220;vim&amp;#8221; to &amp;#8220;$EDITOR&amp;#8221; to make that happen.&lt;/p&gt;

&lt;hr&gt;&lt;p&gt;A couple people have mentioned that there are easier ways to move things around in your queue without editing your series file&amp;#8230;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.gavinsharp.com/blog/"&gt;Gavin&lt;/a&gt; told me about &lt;a href="http://mercurial.selenic.com/wiki/QupExtension"&gt;qup&lt;/a&gt;, and &lt;a href="http://www.oxymoronical.com/"&gt;Dave&lt;/a&gt; said that &lt;code&gt;hg qpush --move &amp;lt;name&amp;gt;&lt;/code&gt; achieves the same thing.&lt;/p&gt;</description><link>http://zpao.tumblr.com/post/8695952974</link><guid>http://zpao.tumblr.com/post/8695952974</guid><pubDate>Tue, 09 Aug 2011 10:59:00 -0700</pubDate><category>mercurial</category><category>mozilla</category><category>workflow</category></item><item><title>Building Firefox on OS X Lion</title><description>&lt;p&gt;I know there are people here at Mozilla who have been building Firefox on Lion releases for a while now, but I couldn&amp;#8217;t find anything that described all the problems. So here I am.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; Reinstall XCode &amp;amp; apply a &lt;a href="https://bugzilla.mozilla.org/attachment.cgi?id=547774"&gt;couple&lt;/a&gt; &lt;a href="https://bugzilla.mozilla.org/attachment.cgi?id=547889"&gt;patches&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;Mercurial&lt;/h2&gt;

&lt;p&gt;I had originally installed Mercurial via &lt;code&gt;easy_install&lt;/code&gt;, so your results may be different. Regardless it was broken. Apparently you can edit the executable and it works, but I didn&amp;#8217;t try. Attempting to install Mercurial again failed with &lt;code&gt;Python headers are required to build Mercurial&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Reinstall XCode then reinstall Mercurial and you&amp;#8217;re set.&lt;/p&gt;

&lt;h2&gt;&lt;code&gt;make&lt;/code&gt; Not Found&lt;/h2&gt;

&lt;p&gt;Reinstalling XCode fixes that too.&lt;/p&gt;

&lt;h2&gt;Build Fails with &lt;code&gt;expected initializer before ‘NS_NORETURN’&lt;/code&gt;&lt;/h2&gt;

&lt;p&gt;Your build will probably fail. The patch in &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=655339"&gt;bug 655339&lt;/a&gt; works to get past this.&lt;/p&gt;

&lt;h2&gt;Build Fails with &lt;code&gt;$MACOSX_DEPLOYMENT_TARGET mismatch&lt;/code&gt; error&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;distutils.errors.DistutilsPlatformError: $MACOSX_DEPLOYMENT_TARGET mismatch: now "10.6" but "10.7" during configure&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;I first thought this was a problem with specifying the wrong target SDK, but I was wrong. This is apparently a python bug. &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=659881"&gt;Bug 659881&lt;/a&gt; has more details (and a workaround patch). The bug talks about python via MacPorts, but I&amp;#8217;m not using MacPorts nor any non-default python installs.&lt;/p&gt;</description><link>http://zpao.tumblr.com/post/7991556360</link><guid>http://zpao.tumblr.com/post/7991556360</guid><pubDate>Sat, 23 Jul 2011 22:13:03 -0700</pubDate><category>lion</category><category>mozilla</category><category>earlyadopter</category><category>build</category><category>firefox</category></item><item><title>Simple Tab Stats Script</title><description>&lt;p&gt;My Firefox usage has always been a bit excessive. I used to open windows to group my different tasks. Then Panorama came along and I started using groups. Then I had too many groups so I started opening new windows. Luckily I set &lt;code&gt;max_concurrent_tabs&lt;/code&gt; to 0 so I avoid loading all of those pages at startup (&lt;a href="http://blog.zpao.com/post/1140456188/cascaded-session-restore-a-hidden-bonus"&gt;it&amp;#8217;s that BarTab-like thing&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lmyjejJzYh1qb3958.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;My curiosity got the better of me so I wrote &lt;a href="https://gist.github.com/1020014"&gt;a little script&lt;/a&gt; to tell me some facts about my usage. There are extensions that do some or all of this, but I didn&amp;#8217;t actually want to install anything, I just wanted a quick snapshot of what was up. (That said I might turn it into an &lt;em&gt;about:something&lt;/em&gt; sort of extension.) You can see what it tells you - it&amp;#8217;s not much but it told me what I wanted to know. My usage was higher earlier today, and I&amp;#8217;m sure there are people who are much more abusive of Firefox, so no judging.&lt;/p&gt;

&lt;script src="https://gist.github.com/1020014.js?file=run-this.js"&gt;&lt;/script&gt;&lt;p&gt;Judging me on coding style? I would be. I started writing this in the error console, so I left out whitespace and used shitty variable names. Then it grew up and got all awkward.&lt;/p&gt;</description><link>http://zpao.tumblr.com/post/6636815982</link><guid>http://zpao.tumblr.com/post/6636815982</guid><pubDate>Fri, 17 Jun 2011 16:34:00 -0700</pubDate><category>mozilla</category><category>firefox</category><category>stats</category><category>omgtoomanytabs</category><category>gist</category></item><item><title>SpiderNode at NodeConf 2011</title><description>&lt;p&gt;Two weeks ago, I traveled with Shawn and Rob to Portland for the inaugural NodeConf. To summarize: it was a great experience and a well run conference. Other people have done overviews, so I’m not going to go there, but read a few &lt;a href="http://www.sauria.com/blog/2011/05/09/nodeconf-2011/"&gt;here&lt;/a&gt;, &lt;a href="http://www.claassen.net/geek/blog/2011/05/reflections-on-jsconf-and-nodeconf-by-a-language-geek.html"&gt;here&lt;/a&gt;, and &lt;a href="http://www.adamchristian.com/archives/10435"&gt;here&lt;/a&gt;. I’m going to talk about SpiderNode at NodeConf instead.&lt;/p&gt;

&lt;h2&gt;A Quick Aside on the State of Things&lt;/h2&gt;

&lt;p&gt;We got SpiderNode running on the train ride shortly before getting on a plane to Portland. Under 24 hours before NodeConf. It didn’t pass all tests (still doesn’t) and we had to hack around Node’s Buffers pretty majorly. Ryan&amp;#8217;s classic &lt;a href="https://github.com/ry/node_chat"&gt;node_chat&lt;/a&gt; ran and that was a great state to be in going into NodeConf. As for other demos, those were written right before the presentation so they were a bit unpolished.&lt;/p&gt;

&lt;h2&gt;Back to NodeConf&lt;/h2&gt;

&lt;p&gt;As we&amp;#8217;d suspected for a while, Brendan Eich was the “Mozilla Person Secret Talk” listed on the schedule. He talked a little bit about ES.next and SpiderNode, with a couple demos. In typical Brendan fashion, it was a lot of information to get in a short period of time. If you want to see the slides, &lt;a href="http://brendaneich.com/2011/05/mozillas-nodeconf-presentation/"&gt;Brendan has them on his blog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Overall, I think the reception we got was really positive. People seemed excited. Some viewed it as a way to run Node on architectures that V8 doesn’t support (before we left NodeConf I had an email from somebody telling me he had patches to get SpiderNode building on Solaris/Sparc). Others were just excited that this could open up the doors to making Node faster (more benchmarks to compete on). Other people were excited because they just really want block scoping (&lt;code&gt;let&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Other people weren’t so excited. And that’s fair. But there seemed to be some misconceptions about the project and why we were at NodeConf contributing to what felt a bit like disdain.&lt;/p&gt;

&lt;h2&gt;Selling You&lt;/h2&gt;

&lt;p&gt;There were some people who seemed convinced that we were there to sell people on using SpiderNode. I think Brendan made this pretty clear during his talk, but here it is again: we’re not trying to sell you. We don’t think you should use it right now. We’re getting closer, but it might be a little while before we suggest people use it for anything besides experimenting. We don’t pass all of the Node tests and we’re almost certainly not faster at this point.&lt;/p&gt;

&lt;p&gt;I think &lt;a href="http://brendaneich.com/2011/05/mozillas-nodeconf-presentation/"&gt;Brendan put it best&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;We are not out to make a maintained, competing fork of Node, just a friendly downstream that should go away as soon as possible. We aren’t selling anything to Node users.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;Splitting the Community&lt;/h2&gt;

&lt;p&gt;The Node community is pretty awesome and we really don’t want to split it in anyway. I’m sorry that some of you felt that’s what we were doing. If that was you, I’d love to find out what you meant.&lt;/p&gt;

&lt;p&gt;The only angle I can see on this one is that the JavaScript one would write using SpiderMonkey’s JS extensions wouldn’t run on normal (V8) Node. This goes back to the experiment thing. If you’re writing Node modules or code you want to share widely using the JS extensions STOP.&lt;/p&gt;

&lt;h2&gt;Contributing Back&lt;/h2&gt;

&lt;p&gt;I didn’t see any comments about this topic, but I wanted to make it clear that we’re most certainly going to be contributing back to Node. We created &lt;a href="https://github.com/sdwilsh/spidernode-upstreaming"&gt;a repository&lt;/a&gt; to start that process now. We’re waiting for somebody to handle &lt;a href="https://github.com/joyent/node/pull/1021"&gt;this pull request&lt;/a&gt;, which should make some uses of Buffer faster.&lt;/p&gt;

&lt;p&gt;There will surely be other things that can be upstreamed outside of our use of V8Monkey (and the build system changes required to support that).&lt;/p&gt;

&lt;hr&gt;&lt;p&gt;I hope this clears some things up for people. Let me know if it doesn’t or you have other concerns about SpiderNode’s existence.&lt;/p&gt;</description><link>http://zpao.tumblr.com/post/5641702863</link><guid>http://zpao.tumblr.com/post/5641702863</guid><pubDate>Thu, 19 May 2011 10:45:00 -0700</pubDate><category>SpiderNode</category><category>V8Monkey</category><category>NodeConf</category><category>node.js</category><category>mozilla</category></item><item><title>About That Hybrid "V8Monkey" Engine</title><description>&lt;p&gt;I&amp;#8217;ve sort of been working on this thing&amp;#8230;&lt;/p&gt;

&lt;p&gt;Several weeks ago I was curious about why there was no implementation of &lt;a href="http://nodejs.org/"&gt;Node.js&lt;/a&gt; using the &lt;a href="https://developer.mozilla.org/En/SpiderMonkey"&gt;SpiderMonkey&lt;/a&gt; JavaScript engine (the one we use in Firefox). So &lt;a href="https://twitter.com/#!/zpao/status/42780850177327105"&gt;I tweeted&lt;/a&gt; about it and several people said they wanted such a thing and would help work on it.&lt;/p&gt;

&lt;p&gt;After some poking around the source, we realized that Node was tied pretty closely to &lt;a href="http://code.google.com/apis/v8/"&gt;V8&lt;/a&gt;, and there really wouldn&amp;#8217;t be any way to use SpiderMonkey without ripping Node apart and rebuilding it. Not only would that suck now, but it would likely suck long into the future as Node gets updated. This port would fall behind and nobody wants that.&lt;/p&gt;

&lt;h2&gt;V8Monkey&lt;/h2&gt;

&lt;p&gt;So we decided that we would implement the V8 API on top of SpiderMonkey. That way we can just plug our work into Node, and it would &amp;#8220;just work&amp;#8221;. We&amp;#8217;ve been chugging along on this project and have made some great progress. Thanks to John Ford we even have an automated build system running all of our tests on every checkin.&lt;/p&gt;

&lt;p&gt;The JS team at Mozilla is also really interested in just having this API around. It has potential for other projects like this, but also raises awareness of API differences and might help push forward changes to the SpiderMonkey API. We&amp;#8217;ve already pushed for additions to the SpiderMonkey API (for example, there was previously no exposed API to check &lt;code&gt;==&lt;/code&gt;, only &lt;code&gt;===&lt;/code&gt;). There have also been discussions about turning the SpiderMonkey API into a C++ API (not just C).&lt;/p&gt;

&lt;p&gt;It also turns out that we&amp;#8217;re not the first people to go down this track. There&amp;#8217;s a team at Yahoo! who is very interested in Node and even did a very similar project. They even put the &lt;a href="https://github.com/bfrancojr/v8monkey/commit/95464c1ccc07e2ab10ba637de3938b5dcd924403"&gt;code out there to prove it&lt;/a&gt; and it&amp;#8217;s been a helpful reference for us. They stopped short to get Node mostly running, while our goal is a bit more ambitious and implement the whole V8 API.&lt;/p&gt;

&lt;h2&gt;SpiderNode&lt;/h2&gt;

&lt;p&gt;SpiderNode is what we&amp;#8217;re calling our fork of Node. Once we have our V8 binding working, we&amp;#8217;ll shift our work over here and focus on integrating SpiderMonkey into the Node build system. Ideally we&amp;#8217;d love to get this upstreamed and give Node developers a choice.&lt;/p&gt;

&lt;p&gt;We think V8 is great and the fact that Node has become so widely used is a testament to that. But we also think there&amp;#8217;s room for competition here. Browser based competition is old-hat. Let&amp;#8217;s move this battle to the servers :)&lt;/p&gt;

&lt;p&gt;With some hackery from John, we now have a way to build SpiderNode. As of Tuesday &lt;code&gt;node.cc&lt;/code&gt; compiles (OMG AWESOME) but that&amp;#8217;s it.&lt;/p&gt;

&lt;h2&gt;Can You Help?&lt;/h2&gt;

&lt;p&gt;Absolutely. The code for both &lt;a href="https://github.com/zpao/v8monkey"&gt;v8monkey&lt;/a&gt; and &lt;a href="https://github.com/zpao/spidernode"&gt;SpiderNode&lt;/a&gt; are on GitHub for now. We have a &lt;a href="https://github.com/zpao/v8monkey/wiki/Hacking"&gt;&amp;#8220;hacking&amp;#8221; wiki page&lt;/a&gt; there, as well as a general &lt;a href="https://github.com/zpao/v8monkey/wiki/TODO"&gt;TODO page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We also chat a lot on IRC: &lt;a href="irc://irc.mozilla.org/spidernode"&gt;#spidernode on irc.mozilla.org&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;It&amp;#8217;s Not Just Me&lt;/h2&gt;

&lt;p&gt;That&amp;#8217;s for damn sure. &lt;a href="https://twitter.com/robarnold"&gt;Rob Arnold&lt;/a&gt; and &lt;a href="https://twitter.com/sdwilsh"&gt;Shawn Wilsher&lt;/a&gt; have been doing most of the heavy lifting. Rob has done some work on SpiderMonkey in a past life and is really good at this sort of language stuff. Shawn is also really smart and definitely no stranger to using SpiderMonkey. This project would be nowhere without these guys. &lt;a href="https://twitter.com/john_h_ford"&gt;John Ford&lt;/a&gt; set up a buildbot for us, which has been incredibly helpful for catching all the tests I break. Having a build engineer helping out has been really great.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/BrendanEich"&gt;Brendan Eich&lt;/a&gt; (you may have heard of him) said he&amp;#8217;s going to start contributing. My intern &lt;a href="http://twitter.com/mehdiisdumb"&gt;Mehdi Mulani&lt;/a&gt; submitted a couple patches early on and others have stepped up and are working on patches right now.&lt;/p&gt;

&lt;h2&gt;My Experience So Far&lt;/h2&gt;

&lt;p&gt;Honestly, this is the first large scale C/C++ project I&amp;#8217;ve worked on. I took 1/2 a semester of C my freshman year in college (over 6 years ago) and I&amp;#8217;ve written some random pieces of C++ at Mozilla. Mostly though, I write JavaScript and before that Ruby &amp;amp; PHP - a lot of scripting languages. It&amp;#8217;s a drastic change from what I&amp;#8217;m used to and it&amp;#8217;s taken me a while to get comfortable. Luckily I&amp;#8217;m working with friends who have helped teach me as I go. Learning C++ while making one JavaScript engine work on top of another has been a real sink or swim experience.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s been fun though. I really needed something entirely different from Firefox for a little while and this has fit the bill perfectly.&lt;/p&gt;

&lt;p&gt;Expect to see more from me and others in the coming days &amp;amp; weeks. And hey, perhaps you&amp;#8217;ll see one of us at NodeConf.&lt;/p&gt;</description><link>http://zpao.tumblr.com/post/4620873765</link><guid>http://zpao.tumblr.com/post/4620873765</guid><pubDate>Thu, 14 Apr 2011 17:56:00 -0700</pubDate><category>mozilla</category><category>node.js</category><category>javascript</category><category>c++</category><category>v8</category><category>bad metaphors</category><category>spidermonkey</category></item><item><title>It appears the reCAPTCHA has officially gone through all of the...</title><description>&lt;img src="http://24.media.tumblr.com/tumblr_ljk5wqYl3r1qbphnqo1_400.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;It appears the reCAPTCHA has officially gone through all of the English words and has moved on to Gibberish. For the record “sdngl witatimo” did work to prove I’m human.&lt;/p&gt;</description><link>http://zpao.tumblr.com/post/4561087614</link><guid>http://zpao.tumblr.com/post/4561087614</guid><pubDate>Tue, 12 Apr 2011 14:19:00 -0700</pubDate><category>recaptcha</category><category>ticketmaster</category></item><item><title>ShoeVox: Voice Control for Your PC Multimedia</title><description>&lt;a href="http://blog.rsbaskin.com/post/3717628154/shoevox-voice-control-for-your-pc"&gt;ShoeVox: Voice Control for Your PC Multimedia&lt;/a&gt;: &lt;p&gt;&lt;a href="http://rsbaskin.com"&gt;Rob&lt;/a&gt; and &lt;a href="http://www.maxcutler.com/"&gt;Max&lt;/a&gt; are both really smart guys who work really well together (once upon a time, the 3 of us &lt;a href="http://blog.zpao.com/post/505069286/the-rise-fall-of-courant-news"&gt;were working on a startup&lt;/a&gt;), so I’m excited to see that they’ve made something cool. I don’t fit the target audience with my OS X loving ways, but I hope others can make use of it.&lt;/p&gt;</description><link>http://zpao.tumblr.com/post/3768818683</link><guid>http://zpao.tumblr.com/post/3768818683</guid><pubDate>Thu, 10 Mar 2011 12:44:07 -0800</pubDate><category>voice control</category><category>multimedia</category><category>software</category><category>windows</category></item><item><title>Multiple Assignment in JS With Objects</title><description>&lt;p&gt;Note: Turns out this only works in Firefox since it is the only browser to include versions of JavaScript beyond 1.5. Perhaps something will show up in ECMAScript N/Harmony/whatever.&lt;/p&gt;

&lt;hr&gt;&lt;p&gt;Alright, JavaScript is pretty cool. There are plenty of &amp;#8220;tricks&amp;#8221; that still boggle my mind. I just found another cool trick in &lt;a href="https://github.com/Mardak/restartless/blob/examples%2Fl10nDialogs/bootstrap.js#L37"&gt;Mardak code&lt;/a&gt; (he would do this&amp;#8230;).&lt;/p&gt;

&lt;p&gt;This is about multiple assignment in JS. Well, it&amp;#8217;s actually about destructuring assignment, but potato, potato.&lt;/p&gt;

&lt;p&gt;Hopefully by now we all know that it can be done with arrays.&lt;/p&gt;

&lt;script src="https://gist.github.com/844787.js?file=assignment_array.js"&gt;&lt;/script&gt;&lt;p&gt;What I didn&amp;#8217;t know is that it can also be done using objects.&lt;/p&gt;

&lt;script src="https://gist.github.com/844787.js?file=assignment_object.js"&gt;&lt;/script&gt;&lt;p&gt;This mostly makes sense now that I know it works, I was just a bit surprised. The syntax is strange, but it&amp;#8217;s oddly satisfying (and follows from the assignment from an array).&lt;/p&gt;

&lt;p&gt;Turns out this works for nested objects too&amp;#8230;&lt;/p&gt;

&lt;script src="https://gist.github.com/844787.js?file=assignment_object_nested.js"&gt;&lt;/script&gt;&lt;p&gt;Just keep in mind the same rules for object references applies. If I change &lt;code&gt;obj2.foo.dude&lt;/code&gt;, that changes &lt;code&gt;e.dude&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And last but not least, we can also access values directly with nested objects.&lt;/p&gt;

&lt;script src="https://gist.github.com/844787.js?file=assignment_object_nested2.js"&gt;&lt;/script&gt;&lt;p&gt;Modifying &lt;code&gt;obj2.foo.dude&lt;/code&gt; here will have no effect on &lt;code&gt;g&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Add this to the list of cool things that have been implemented in JS &lt;a href="https://developer.mozilla.org/en/JavaScript/New_in_JavaScript/1.6"&gt;1.6&lt;/a&gt;, &lt;a href="https://developer.mozilla.org/en/JavaScript/New_in_JavaScript/1.7"&gt;1.7&lt;/a&gt;, and &lt;a href="https://developer.mozilla.org/en/JavaScript/New_in_JavaScript/1.8"&gt;1.8&lt;/a&gt;, but yet still aren&amp;#8217;t available in all browsers (sigh). Generators, Iterators, array comprehensions, block scoping with &lt;code&gt;let&lt;/code&gt;&amp;#8230; all cool things that are used regularly within the Firefox codebase.&lt;/p&gt;</description><link>http://zpao.tumblr.com/post/3513047019</link><guid>http://zpao.tumblr.com/post/3513047019</guid><pubDate>Fri, 25 Feb 2011 17:14:00 -0800</pubDate><category>mozilla</category><category>javascript</category><category>firefox</category><category>wtf ecma</category></item><item><title>2 Years at Mozilla</title><description>&lt;p&gt;On February 23rd, 2009 I started full-time at Mozilla. So much has happened since then, yet it still feels like it was just a couple months ago.&lt;/p&gt;

&lt;p&gt;In addition to my time as an intern, I feel like I&amp;#8217;ve seen a lot at Mozilla. With Firefox 4 I&amp;#8217;ll be seeing my 4th release; 3.0 came out very shortly into my internship, followed by 3.5 soon after I started. 3.6 was my first version where I was around for the whole release, and 4 is so close I can taste it. I&amp;#8217;ve had 4 bosses (Connor, Beltzner, Dietrich, and Dolske). We&amp;#8217;re now on our 2nd CEO; I&amp;#8217;ve seen 1 VP Engineering leave. I&amp;#8217;ve met awesome people, and attended 2 summits.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve worked on the password manager, satchel, session restore, the Jetpack prototype, the Add-on SDK, per tab network prioritization, and a whole bunch of random front-end stuff. I ported the Sync extension into Firefox and helped make Firefox work on Windows CE. I&amp;#8217;ve even written docshell &amp;amp; widget code (even if it didn&amp;#8217;t all get checked in)! The fact that I&amp;#8217;ve gotten to work on such varying parts of Firefox is one of my favorite things about my job.&lt;/p&gt;

&lt;p&gt;A lot has happened in my personal life as well. I lived by myself for the first time while Amanda was back at school (actually by myself, not counting dorm life or sharing a house). I&amp;#8217;ve cleaned up more cat puke than I ever thought I would. I&amp;#8217;ve made new friends and grown apart from older friends. &lt;em&gt;I got engaged!&lt;/em&gt; I helped my fiancée start a company.&lt;/p&gt;

&lt;p&gt;I guess it&amp;#8217;s actually been a pretty long 2 years.&lt;/p&gt;</description><link>http://zpao.tumblr.com/post/3467536354</link><guid>http://zpao.tumblr.com/post/3467536354</guid><pubDate>Wed, 23 Feb 2011 11:18:43 -0800</pubDate><category>mozilla</category><category>life</category><category>firefox</category></item><item><title>Updated Firefox Extension: Always Ask 2.0pre</title><description>&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lh1lggPQ5W1qb3958.png" alt="" title="The dialog that Always Ask shows when it has determined Firefox will quit without prompting"/&gt;&lt;/p&gt;

&lt;p&gt;Around the endgame for Firefox 3.6, &lt;a href="http://zpao.com/articles/26-just_released_always_ask"&gt;I wrote an extension called Always Ask&lt;/a&gt; to make sure I always got a prompt when quitting. I used it for a while and then forgot about it when it was no longer compatible as Firefox 3.7 (now 4) moved forward.&lt;/p&gt;

&lt;p&gt;Now that we&amp;#8217;re at the endgame for Firefox 4, and especially with all the changes surrounding the quit dialog, I figured it should be updated. So I&amp;#8217;m releasing v2.0pre today which updates the extension to work with component registration changes and &lt;a href="http://blog.zpao.com/post/2854700249/just-quit-it"&gt;quit dialog&lt;/a&gt; &lt;a href="http://blog.zpao.com/post/3174360617/about-that-quit-dialog"&gt;changes&lt;/a&gt; in Firefox 4. This also includes the translations that were submitted via Babelzilla (most of them over a year ago). Thanks to all of you who took the time to translate those strings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/always-ask/"&gt;Get it now&lt;/a&gt;&lt;/strong&gt;. Or &lt;a href="https://github.com/zpao/alwaysAsk"&gt;look at the code&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Why 2.0 &amp;#8220;pre&amp;#8221;?&lt;/h2&gt;

&lt;p&gt;Mostly just in case there are any further changes needed to be compatible with Firefox 4 (there better not be though).&lt;/p&gt;

&lt;h2&gt;Why not restartless?&lt;/h2&gt;

&lt;p&gt;This would probably work really well as a restartless extension. But I was really lazy and didn&amp;#8217;t feel like figuring out the l10n part of that (though it looks like &lt;a href="http://erikvold.com/blog/index.cfm/2011/2/18/restartless-firefox-addons-part-4-localization-l10n"&gt;Erik Vold has that figured out already&lt;/a&gt;).&lt;/p&gt;</description><link>http://zpao.tumblr.com/post/3453055056</link><guid>http://zpao.tumblr.com/post/3453055056</guid><pubDate>Tue, 22 Feb 2011 15:49:23 -0800</pubDate><category>mozilla</category><category>firefox</category><category>firefox 4</category><category>always ask</category><category>extension</category></item><item><title>New Firefox Extension: switch-to-tab Blacklist</title><description>&lt;p&gt;Switch To Tab is a pretty cool feature that will be a part of Firefox 4. I didn&amp;#8217;t work much on it, but I contributed a bit to it last year (see &lt;a href="http://blog.zpao.com/post/702614651/switch-to-tab-closing-empty-tabs"&gt;this post&lt;/a&gt; for one example).&lt;/p&gt;

&lt;p&gt;For the most part, I really like this new feature. It&amp;#8217;s saved me much tab duplication over the past several month. However there are some sites that it doesn&amp;#8217;t play well with, namely some JavaScript &amp;#8220;applications&amp;#8221; and pages with frames. I&amp;#8217;ve quietly dealt with it and worked around the issues.&lt;/p&gt;

&lt;p&gt;But a couple weeks ago after trying to do multiple Google Maps search, I decided that I&amp;#8217;d had enough. I never wanted Google Maps to show up in switch to tab and I was going to write an add-on to make that possible. So I spent a bit of time figuring out how I might do that and looking at this new bootstrapped extension stuff (which is pretty awesome by the way). I didn&amp;#8217;t get far enough to make it actually work and stalled. Then I got back to work and fixed some more blockers and promptly forgot about this idea.&lt;/p&gt;

&lt;p&gt;Yesterday I started working on it again but my current approach wasn&amp;#8217;t working (turns out &lt;code&gt;gBrowser._placesAutocomplete&lt;/code&gt; is readonly and it means it). So I asked &lt;a href="http://shawnwilsher.com/"&gt;Shawn&lt;/a&gt; about it and he came up with the answer: cheat. Don&amp;#8217;t try to intercept the additions to the database, just revert them after the fact. Smart guy.&lt;/p&gt;

&lt;p&gt;I wrote a quick and dirty version and iterated. I released a &amp;#8220;good enough&amp;#8221; version 1.0 last night. &amp;#8220;Good enough&amp;#8221; meant it was restartless but required restarting to re-process the blacklist preference, which was&amp;#8230; dumb. Over lunch today I finished v1.1 to fix that and a couple other small issues.&lt;/p&gt;

&lt;h2&gt;Let me have it&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://addons.mozilla.org/firefox/addon/switch-to-tab-blacklist/"&gt;switch-to-tab Blacklist on AMO&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Can I see the code?&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/zpao/switchToTabBlacklist"&gt;It&amp;#8217;s on github&lt;/a&gt;. I need to clean it up because it&amp;#8217;s a bit hard to look at, so don&amp;#8217;t judge me too much.&lt;/p&gt;

&lt;h2&gt;This picture is not worth 1000 words&lt;/h2&gt;

&lt;p&gt;Previously, that autocomplete result would have been said &amp;#8220;Switch to tab:&amp;#8221;.
&lt;img src="http://media.tumblr.com/tumblr_lgu9x2qdQC1qb3958.png" alt=""/&gt;&lt;/p&gt;

&lt;h2&gt;Customizing the blacklist&lt;/h2&gt;

&lt;p&gt;I&amp;#8217;m storing a JSON array of regular expressions (stored as strings which get turned into regular expressions with &lt;code&gt;new RegExp(...)&lt;/code&gt;). This is stored in a preference: &lt;code&gt;extension.switchToTabBlacklist.blacklist&lt;/code&gt;. You need to edit it by hand for now.&lt;/p&gt;

&lt;h2&gt;Where&amp;#8217;s my GUI&lt;/h2&gt;

&lt;p&gt;I don&amp;#8217;t have visual basic on this computer so I couldn&amp;#8217;t make one.&lt;/p&gt;

&lt;p&gt;To be honest, I just didn&amp;#8217;t care enough to make it. I made this extension for me and I know how to edit a preference. I would gladly take patches though if somebody wants to make one.&lt;/p&gt;</description><link>http://zpao.tumblr.com/post/3372227196</link><guid>http://zpao.tumblr.com/post/3372227196</guid><pubDate>Fri, 18 Feb 2011 17:18:00 -0800</pubDate><category>mozilla</category><category>firefox</category><category>Firefox 4</category><category>switch-to-tab blacklist</category><category>extension</category></item><item><title>About That Quit Dialog...</title><description>&lt;p&gt;Remember when we &lt;a href="http://blog.zpao.com/post/2854700249/just-quit-it"&gt;turned it off a couple weeks ago&lt;/a&gt;? We did that by just flipping the &lt;code&gt;browser.warnOnQuit&lt;/code&gt; preference to &lt;code&gt;false&lt;/code&gt;. I mentioned that you could get old behavior back by flipping that preference back to &lt;code&gt;true&lt;/code&gt;. That&amp;#8217;s not going to work anymore.&lt;/p&gt;

&lt;p&gt;I just landed &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=629485"&gt;bug 629485&lt;/a&gt; to change things again, so pay attention. When we turned off the quit dialog, we took away any way of stopping the last window from closing without any warning, even if you explicitly set the visible pref &lt;code&gt;browser.tabs.warnOnClose&lt;/code&gt; which would show the window closing warning (when you have multiple tabs). That wasn&amp;#8217;t so cool. So we played around with the logic and made that possible. But in order to do so, we had to change the default value of &lt;code&gt;browser.warnOnQuit&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt; and create a new preference which controls the quit dialog (&lt;code&gt;browser.showQuitDialog&lt;/code&gt;). I know this sounds a bit inane, but there really wasn&amp;#8217;t a better way to do it and maintain &lt;code&gt;browser.warnOnQuit == false&lt;/code&gt; as an override.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s all a bit confusing, so I&amp;#8217;ve &lt;a href="http://hg.mozilla.org/mozilla-central/file/84921e24be9c/browser/components/nsBrowserGlue.js#l443"&gt;documented the conditions&lt;/a&gt; under which we won&amp;#8217;t show a dialog, as well as the rules for choosing which dialog to show. Some of that comment is perfectly clear; the rest requires a little bit of understanding of the code (but it shouldn&amp;#8217;t be too hard to figure out if you want).&lt;/p&gt;

&lt;p&gt;Don&amp;#8217;t expect me to write another post like this. I don&amp;#8217;t expect any further changes to how this stuff works.&lt;/p&gt;

&lt;h2&gt;TL;DR&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;We enabled the window closing dialog when closing the last window would otherwise just quit (mostly important to Windows and Linux users).&lt;/li&gt;
&lt;li&gt;If you want the quit dialog back, set &lt;code&gt;browser.showQuitWarning&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt; and make sure &lt;code&gt;browser.warnOnQuit&lt;/code&gt; is also &lt;code&gt;true&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;&lt;hr&gt;&lt;p&gt;&lt;strong&gt;Update: Feb. 8, 2011:&lt;/strong&gt; Yup. I fucked that up a little bit. We aren&amp;#8217;t showing the quit dialog if you close the last window, even with the prefs mentioned above. That should be fixed in the next nightly.&lt;/p&gt;</description><link>http://zpao.tumblr.com/post/3174360617</link><guid>http://zpao.tumblr.com/post/3174360617</guid><pubDate>Mon, 07 Feb 2011 18:49:00 -0800</pubDate><category>firefox</category><category>firefox4</category><category>mozilla</category><category>omgchange</category></item><item><title>The new Firefox default home page is seriously sexy....</title><description>&lt;img src="http://24.media.tumblr.com/tumblr_lfxg5kOpR21qbphnqo1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;The new Firefox default home page is seriously sexy. &lt;strong&gt;Seriously.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A couple weeks ago &lt;a href="http://www.stephenhorlander.com/"&gt;Stephen Horlander&lt;/a&gt; designed an updated default home page for Firefox. Over the weekend, we landed most of it. So first off, a huge thanks to him.&lt;/p&gt;

&lt;p&gt;Mihai Sucan did an awesome job converting the HTML &amp; CSS Steven prototyped into something we could check in, which involved a lot of fun with media queries  (seriously, resize your window with it open), as well as a lot of work to make sure it worked with RTL locales.&lt;/p&gt;

&lt;p&gt;And then finally, I hooked up the “Restore Previous Session” button. Not the HTML &amp; CSS (that was Stephen &amp; Mihai), just the parts that made it hide when appropriate and work when pressed. Now hopefully a few people realize that feature exists :)&lt;/p&gt;

&lt;p&gt;I also can’t forget to mention &lt;a href="http://blog.bonardo.net/"&gt;Marco Bonardo&lt;/a&gt;, who hooked up &lt;code&gt;about:home&lt;/code&gt; back in August so that we could even get to this point.&lt;/p&gt;

&lt;p&gt;Keep in mind, the image I’m showing here is the unbranded “Minefield” version of the page. When loading this in Firefox it won’t look like your computer is going to explode. I think there is a little bit more tweaking that will be done, but it already looks so much better than it used to.&lt;/p&gt;</description><link>http://zpao.tumblr.com/post/3045325637</link><guid>http://zpao.tumblr.com/post/3045325637</guid><pubDate>Mon, 31 Jan 2011 23:15:19 -0800</pubDate><category>firefox</category><category>mozilla</category><category>about:home</category><category>default home page</category></item></channel></rss>
