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

<channel>
	<title>Redfin Developers\' Blog &#187; Sasha</title>
	<atom:link href="http://blog.redfin.com/devblog/author/sashaaickin/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.redfin.com/devblog</link>
	<description>Redfin Developers\' Blog</description>
	<lastBuildDate>Mon, 16 Nov 2009 20:22:30 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>A Virtual Earth to Google Maps Transition: From Idea to Deployment In a Few Weeks</title>
		<link>http://blog.redfin.com/devblog/2008/12/a_virtual_earth_to_google_maps_transition_from_idea_to_deployment_in_a_few_weeks.html</link>
		<comments>http://blog.redfin.com/devblog/2008/12/a_virtual_earth_to_google_maps_transition_from_idea_to_deployment_in_a_few_weeks.html#comments</comments>
		<pubDate>Thu, 11 Dec 2008 15:27:09 +0000</pubDate>
		<dc:creator>Sasha</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.redfin.com/devblog/2008/12/a_virtual_earth_to_google_maps_transition_from_idea_to_deployment_in_a_few_weeks.html</guid>
		<description><![CDATA[Whenever I out myself as a member of the Redfin search team to someone who has used Redfin, one of the first questions I get is, &#8220;so why do you guys use the Microsoft Map?  Why didn&#8217;t you choose Google?&#8221;.  The full answer is a bit long, but the short answer is easy: speed.
Every few [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.redfin.com/devblog/files/2008/12/ve_gmaps_comparison.jpg" title="VE and GMaps, side-by-side"><img src="http://blog.redfin.com/devblog/files/2008/12/ve_gmaps_comparison.jpg" alt="VE and GMaps, side-by-side" align="right" border="0" height="300" title="A Virtual Earth to Google Maps Transition: From Idea to Deployment In a Few Weeks" /></a>Whenever I out myself as a member of the Redfin search team to someone who has used Redfin, one of the first questions I get is, &#8220;so why do you guys use the Microsoft Map?  Why didn&#8217;t you choose Google?&#8221;.  The full answer is <a href="http://devblog.redfin.com/2007/01/redfin_moves_the_earth.html">a bit long</a>, but the short answer is easy: speed.</p>
<p>Every few months, we&#8217;ve tested Google Maps against Virtual Earth, and the result was always the same: Google&#8217;s script and tiles loaded considerably faster, but Virtual Earth was as much as four times faster at adding a ton of items to the map.  Since our user interface can add up to 500 houses at a time to a map, we just felt like Google wasn&#8217;t able to give us the performance we needed.  To be fair, part of VE&#8217;s speed was due to a <a href="http://msdn.microsoft.com/en-us/library/bb412436.aspx">bulk add feature</a> that we had lobbied for them to put in, but it worked well, and so we put Google aside, wistfully looking at those speedy script and tile load times.</p>
<p>A few months ago, though, we started contract renegotiations with Microsoft, and we decided to give Google Maps a closer look.  One of my colleagues, the brilliant Dan Fabulich of <a href="http://seleniumhq.org/">Selenium</a> fame, figured out that we could code our own custom GOverlay to make Google Maps display items <strong>much</strong> faster than it had previously.  The question then became: how hard would it be to port our site from one platform to the other?  And would it be worth it to do so?<span id="more-95"></span></p>
<p>To answer those questions, I took off from work one Friday determined to see what a meth-fueled* weekend of coding could come up with.  I started demolition of the codebase Friday night and worked the rest of the weekend from wake until sleep to get something up and running.  By the end of the weekend, I had a working prototype that had most of the major features of our site.</p>
<p>The most shocking thing to me was how relatively easy the transition was, but that turned out mostly to be a testament to how little of the map API we actually use.  There are a lot of features of Virtual Earth that we&#8217;ve never touched: traffic, 3D, directions, geocoding, and the native zoom and pan controls, just to name a few.  All we do is tell the map to go somewhere, tell it to draw some houses on the map, and once in a while tell it to draw a polygon representing a neighborhood.  In return, we expect the map to send us an event when the user drags or pans it.  Both VE and Google handle these basic needs deftly, and their APIs aren&#8217;t wildly different.  Most notably, Google Maps and Virtual Earth use the same numbering scheme and heights for their zoom levels, so we didn&#8217;t have to worry about URLs with zoom levels suddenly looking wrong on Google.  The most complicated parts of our application turn out to be things that have nothing to do with the map: parsing massive data structures we retrieve via XHR, locking the UI at certain moments to prevent the user dragging mid-search, providing back button support, and making sure we load our page resources in the most network-efficient way.</p>
<p>So, how did it feel as a programmer to move from VE to Google?  Overall, it was great; there were a bunch of times where it felt like Google&#8217;s Map API just worked better or was better organized than VE&#8217;s.  None of them were large issues, but they added up.  As examples:</p>
<ul>
<li>Google provides both a movestart event and a dragstart event so that you can easily distinguish between map moves that are caused by programmatic calls to move the map versus map moves that are caused by the user.  Doing this in VE has often proved painful for us.</li>
<li>Fewer things happen in a timeout in Google Maps, which was a pattern that caused us considerable pain in VE.</li>
<li>Resizing seems like less heavyweight an operation in Google Maps, as the map doesn&#8217;t move by default when you resize.</li>
<li>Google seems more respectful of the global Javascript and CSS namespaces than VE.  VE, for example, adds methods to Object on some browsers, which breaks for-in loops.  They also define a style that has a selector of just &#8220;a img&#8221;.  What&#8217;s worse: that style has a !important on it, so overriding it is non-trivial.</li>
</ul>
<p>There were of course a few issues with Google Maps (including at least <a href="http://code.google.com/p/gmaps-api-issues/issues/detail?id=906">one troubling bug</a> we found in both maps.google.com and the maps API), but the overall experience was silky smooth.  And when we did come across problems, we found that, while the Google API docs were less thorough than comparable VE docs, there were many, many more forum and blog posts to help us find the answer.</p>
<p><a href="http://blog.redfin.com/devblog/files/2008/12/perfchart.jpg" title="Performance comparison adding 500 items to the map"><img src="http://blog.redfin.com/devblog/files/2008/12/perfchart.jpg" alt="Performance comparison adding 500 items to the map" align="left" title="A Virtual Earth to Google Maps Transition: From Idea to Deployment In a Few Weeks" /></a>After my weekend code-a-thon, I put the GMaps prototype up on a test server in our QA labs, and Dan ran a few of our standard performance tests against it.  The first thing he found was the map page consistently took 2.5 seconds faster to fire its onload event, seemingly due to the size and CDN-ness of the GMaps script.  Next, he ran our absolute worst case scenario test (driven by Selenium, naturally) where we add 500 houses to the map.  In IE6, we saw a speedup of about 10 seconds.  Even on a fairly fast browser like Firefox 3, the speedup was 3 seconds.  And that was in addition to the 2.5 second load speedup.</p>
<p>On the web, times like that are just gold; there&#8217;s just no way you can ignore a several second speed up.  Even though we had a lot of i&#8217;s to dot and t&#8217;s to cross, I knew at that moment we were going to make the transition.</p>
<p>My prototype seemed about half done and had taken two days to code; it took another two weeks of the search team&#8217;s time to get it up to production quality.  The difference between a product that was coded in a weekend and basically works and one that is coded and tested and works reliably for hundreds of thousands of people is massive.  As Glenn is always reminding us, 95% done is at best half done.</p>
<p>Anyway, hope you all like the end result, and I hope you find using Redfin that much snappier.  My thanks to all the folks who worked on the transition, especially Dan, Navtej, Jane, and Jim.  If you have any questions about the transition, feel free to ask in the comments.</p>
<p>* If you&#8217;re reading, Mom, no, it wasn&#8217;t literally meth-fueled.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.redfin.com/devblog/2008/12/a_virtual_earth_to_google_maps_transition_from_idea_to_deployment_in_a_few_weeks.html/feed</wfw:commentRss>
		<slash:comments>29</slash:comments>
		</item>
		<item>
		<title>Teaching users to get hacked, or why HTTP forms are bad for the web</title>
		<link>http://blog.redfin.com/devblog/2008/09/teaching_users_to_get_hacked_or_why_http_forms_are_bad_for_the_web.html</link>
		<comments>http://blog.redfin.com/devblog/2008/09/teaching_users_to_get_hacked_or_why_http_forms_are_bad_for_the_web.html#comments</comments>
		<pubDate>Wed, 10 Sep 2008 00:48:09 +0000</pubDate>
		<dc:creator>Sasha</dc:creator>
				<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://blog.redfin.com/devblog/2008/09/teaching_users_to_get_hacked_or_why_http_forms_are_bad_for_the_web.html</guid>
		<description><![CDATA[This morning I was scanning TechCrunch while still in bed, and I saw a news item about a hot new Silicon Valley startup, Adgregate Markets, that has either solved a really vexing problem in online security or has made the situation a lot worse.  Given what we&#8217;ve been working on recently at Redfin, I&#8217;m [...]]]></description>
			<content:encoded><![CDATA[<p>This morning I was scanning <a href="http://www.techcrunch.com">TechCrunch</a> while still in bed, and I saw <a href="http://www.techcrunch.com/2008/09/08/techcrunch-50-session-4-advertising-and-commerce/">a news item about a hot new Silicon Valley startup</a>, <a href="http://www.adgregate.com">Adgregate Markets</a>, that has either solved a really vexing problem in online security or has made the situation a lot worse.  Given what we&#8217;ve been working on recently at Redfin, I&#8217;m pretty sure it&#8217;s the latter.</p>
<p>Backing up: for the last few days, we&#8217;ve been revamping our registration and login process at Redfin to make it easier for users, and I must admit that what we&#8217;ve found has depressed me to no end.  We want to put an inline form that lets users log in without ever leaving the page, but it turns out that it&#8217;s very difficult to do this reasonably securely.  Much more depressing has been the realization that many sites that I use daily, sites I respect, have abysmal security around login and registration. Our awesome summer intern Aditya said after a long discussion of the myriad ways to hack the login process: &#8220;Man, I&#8217;m never banking online again.&#8221;  He then confessed that he&#8217;d never banked offline (and didn&#8217;t know how), which made me feel impossibly old.</p>
<p><a href="http://blog.redfin.com/devblog/files/2008/09/drevil.jpg" title="Dr. Evil"><img src="http://blog.redfin.com/devblog/files/2008/09/drevil.jpg" alt="Dr. Evil" align="right" border="0" height="200" width="300" title="Teaching users to get hacked, or why HTTP forms are bad for the web" /></a></p>
<p>The topic that most scared Aditya was &#8220;<a href="http://en.wikipedia.org/wiki/Man-in-the-middle_attack">Man In The Middle</a>&#8221; attacks and the impossibility of providing a reasonably secure experience from an HTTP page.  The problem is this: suppose someone evil has set up a wifi router in your favorite coffee house and that he has control over that router.  Because all of your traffic is going through that wifi router, Mr. Evil can not only listen to every packet that is transmitted between you and the Internet, he can also modify any packet.  Now, on an HTTPS page, that&#8217;s not a problem because (a) the packets that the router can see are encrypted and (b) the browser will alert the user with a big scary warning if the any of the packets have been modified along the way.  HTTP pages, on the other hand, will act completely normally if Mr. Evil mucks around with them.</p>
<p>What this means is that any form on an HTTP page is inherently unsafe, <strong>even if it posts to an HTTPS page</strong>.</p>
<p>Let me repeat that: <strong>ANY form on an HTTP page is inherently unsafe</strong>.</p>
<p>Why? Because as a user, you have no idea if the form at http://awesomesite.com came from awesomesite.com or from Mr. Evil&#8217;s nefarious lair.  And if the form did come from Mr. Evil, chances are that it will send your credit card number back to Mr. Evil (and your username and your password and your SSN and your mother&#8217;s maiden name&#8230;).  Worse, it could send the credit card info to Mr. Evil before continuing and sending it along to awesomesite.com.  Neither you nor awesomesite.com would be any the wiser.</p>
<p>Many web developers mistakenly believe that an HTTP form (on http://awesomesite.com) that posts to an SSL URL (https://awesomesite.com) is safe, because the communication channel for the post is secure between client and server.  But Mr. Evil can change http://awesomesite.com freely, so he can make the form post to anywhere he wants.  This is why we tell users again and again rule #1 of web security: <strong>Never enter confidential information, especially credit card numbers, unless you see the SSL lock in your browser</strong>.</p>
<p>Which brings us back to <a href="http://www.adgregate.com">Adgregate Markets</a>.  Adgregate is a company <a href="http://tinycrunch.com/2008/09/08/display-ads-turned-apps-adgregate-marketplace/">that launched at the TechCrunch 50</a> yesterday, and they have a product that creates interactive banner ads that allow the user to complete a shopping checkout process completely inside an ad, without leaving the host page at all.  They say that this both increases conversion rates, which is a Good Thing for advertisers, and increases page stickiness, which is a Good Thing for publishers.  The panel at TC50 reacted positively to Adgregate, and the fact that their business model takes a cut of every sale that happens through their ads is certainly attractive.</p>
<p>There&#8217;s a problem here, though, and it&#8217;s packaged neatly in Adgregate&#8217;s <a href="http://www.adgregate.com/web/products-solutions.asp">marketing copy</a>: &#8220;provide(s) secure transactions on both secure and non-secure pages.&#8221;  As I said above, I think this simply isn&#8217;t possible.  If the host page is HTTP, then Mr. Evil can swap out Adgregate&#8217;s Flash ad for an ad that looks exactly like it but sends all of the info to Mr. Evil&#8217;s server, not to Adgregate.  Users will be none the wiser until a laser death ray shows up on their MasterCard statement.</p>
<p>On the other hand, maybe Adgregate has figured out how to securely conduct a conversation on an HTTP page.  Many, many smart people have tried for over a decade to solve this problem and failed, but it&#8217;s possible Adgregate cracked that nut.  If they have, though, it would arguably be a better business model to  patent and sell the intellectual property.  There are a lot of people who would pay good money for it.</p>
<p>As I write this post, <a href="http://www.hubdub.com/m15609/TechCrunch50_Which_company_will_win_Best_in_Show">Adgregate&#8217;s running third</a> in a prediction market for winning best in show.  My amateur prediction is that they won&#8217;t win, but that they will probably come out of TC50 with a good boost in publicity.  My fear, though, is that they will start to find success with their &#8220;secure&#8221; forms on HTTP pages, and that they will succeed at convincing users that those forms are safe.  (To be fair, Adgregate is far from the only company that is attempting to convince users of the safety of HTTP forms, a fact we discovered in the course of our research on inline registration.  To my horror, I found out that even <a href="https://www.wamu.com/personal/default.asp">my bank</a> encourages users to enter their password into a non-SSL page.)</p>
<p>If users become inured to entering confidential info on to HTTP pages, then everyone in the consumer web space loses.  Because when those Adgregate ads get hacked (and if they become at all successful, they <strong>will</strong> be hacked), people will lose some degree of faith in the consumer web.  And after Mr. Evil has gotten you once, it&#8217;s hard to believe that he won&#8217;t get you again.</p>
<p>(Dr. Evil pose photo used under Creative Commons from flickr user <a href="http://www.flickr.com/photos/caitlinator/2801716610/">caitlinator</a>.)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.redfin.com/devblog/2008/09/teaching_users_to_get_hacked_or_why_http_forms_are_bad_for_the_web.html/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>CSS Sprites + Firefox Content Preferences = Site Go Boom</title>
		<link>http://blog.redfin.com/devblog/2007/10/css_sprites_firefox_content_preferences_site_go_boom.html</link>
		<comments>http://blog.redfin.com/devblog/2007/10/css_sprites_firefox_content_preferences_site_go_boom.html#comments</comments>
		<pubDate>Tue, 09 Oct 2007 01:19:03 +0000</pubDate>
		<dc:creator>Sasha</dc:creator>
				<category><![CDATA[Browsers]]></category>

		<guid isPermaLink="false">http://blog.redfin.com/devblog/2007/10/css_sprites_firefox_content_preferences_site_go_boom.html</guid>
		<description><![CDATA[I arrived at work today with a perplexing tech support e-mail in my inbox.  A customer was claiming that although Redfin had never worked well in Firefox, last week we totally broke it.  Needless to say, we were all a little surprised (and more than a little worried) over here, since we use [...]]]></description>
			<content:encoded><![CDATA[<p>I arrived at work today with a perplexing tech support e-mail in my inbox.  A customer was claiming that although Redfin had never worked well in Firefox, last week we <strong>totally</strong> broke it.  Needless to say, we were all a little surprised (and more than a little worried) over here, since we use Firefox all day every day.  When we asked the user to send us screenshots, they looked something like this:</p>
<p><a href="http://blog.redfin.com/devblog/files/2007/10/nocolorscreenshot.jpg" title="No Color Screenshot"><img src="http://blog.redfin.com/devblog/files/2007/10/nocolorscreenshot.jpg" alt="No Color Screenshot" title="CSS Sprites + Firefox Content Preferences = Site Go Boom" /></a></p>
<p>This is when we got well and truly confused.  It looked like the browser was downloading our CSS, because items were appearing in the right place on the page, but all color had drained out of the world.  Was Firefox in some sort of a funk?  At first, we guessed that perhaps the user had some sort of ad blocker that was blocking images from our <a href="http://en.wikipedia.org/wiki/Content_Delivery_Network">content delivery network</a>, but we quickly noticed that some images made it through.  What was going on here?  Solution after the jump.</p>
<p><span id="more-41"></span><br />
On closer inspection, it became clear that all of the images that were failing were actually <a href="http://www.w3.org/TR/REC-CSS2/colors.html#background-properties">background-image</a>s set in CSS; images added to the page as normal IMG tags were working fine.  Unfortunately, we use <a href="http://www.alistapart.com/articles/sprites">CSS sprites </a>in our site wherever we can to speed up performance, which means that the vast majority of the images in our UI were invisible to the user.</p>
<p>The next question was: why on earth would this be happening?  Well, it turns out that Firefox has a <a href="http://kb.mozillazine.org/Accessibility_features_of_Firefox#Overriding_page_colors">preference that allows a user to override the colors</a> specified by websites and use a default color scheme the user wants.  This preference not only affects text color, but it also eliminates all background-images on the page.</p>
<p>A week ago <a href="http://blog.redfin.com/blog/2007/10/making_real_estate_search_faster_and_more_local.html">we released a new version of Redfin</a> with a bunch of fixes, one of which was that we moved the icon for houses on the map into a CSS sprite, which made the icon disappear for the poor user who had this pref set in Firefox.  After we gave the user instructions on how to turn off the preference, it worked like a charm. (For the record, you turn the pref off by going to Tools &#8211;&gt; Options in Windows XP or Firefox &#8211;&gt; Preferences&#8230; in Mac OS X, then Content Tab &#8211;&gt; Colors&#8230; &#8211;&gt; Check &#8220;Allow pages to choose their own colors, instead of my selections above&#8221;.)</p>
<p>As programmers, what should we do here?  I&#8217;ll admit I haven&#8217;t thought through a good solution yet, and we don&#8217;t want to abandon sprites outright for performance reasons.  One thought I&#8217;ve had (but not tested yet): perhaps we could use JavaScript to test if the background-image properties are not getting set and in that case replace the critical background-imaged elements with normal image tags.  It doesn&#8217;t sound like much fun, and it&#8217;s probably too small a use case to worry about, but it&#8217;s worth a try.</p>
<p>Thoughts about this problem?  Solutions?  Let me know in the comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.redfin.com/devblog/2007/10/css_sprites_firefox_content_preferences_site_go_boom.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Redfin Supports Safari!  Um, kinda&#8230;</title>
		<link>http://blog.redfin.com/devblog/2007/10/redfin_supports_safari_um_kinda.html</link>
		<comments>http://blog.redfin.com/devblog/2007/10/redfin_supports_safari_um_kinda.html#comments</comments>
		<pubDate>Mon, 01 Oct 2007 20:30:32 +0000</pubDate>
		<dc:creator>Sasha</dc:creator>
				<category><![CDATA[Browsers]]></category>

		<guid isPermaLink="false">http://blog.redfin.com/devblog/2007/10/redfin_supports_safari_um_kinda.html</guid>
		<description><![CDATA[UPDATED:  As of January 31, 2008, Redfin supports Safari 3 without any of the trickery described below.  We&#8217;ll leave the post here for the curious, but in the meantime, there&#8217;s no reason to go through these steps on our account.
Last January, we ported Redfin from a proprietary map platform to Microsoft&#8217;s Virtual Earth, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.redfin.com/devblog/files/2007/10/safari.jpg" title="Safari"><img src="http://blog.redfin.com/devblog/files/2007/10/safari.jpg" alt="Safari" align="right" border="0" title="Redfin Supports Safari!  Um, kinda..." /></a><strong>UPDATED</strong>:  As of January 31, 2008, <a href="http://blog.redfin.com/blog/2008/01/a_safari_into_freakish_depth.html" title="Redfin Supports Safari">Redfin supports Safari 3</a> without any of the trickery described below.  We&#8217;ll leave the post here for the curious, but in the meantime, there&#8217;s no reason to go through these steps on our account.</p>
<p>Last January, <a href="http://blog.redfin.com/blog/2007/01/redfin_moves_the_earth.html">we ported Redfin from a proprietary map platform to Microsoft&#8217;s Virtual Earth</a>, a move that has enabled us to move faster in adding new markets and features.  We&#8217;ve gotten both praise and criticism for the move over the last 9 months, but no piece of feedback has been as constant or as vociferous as the cry of Mac users who want us to support Safari.</p>
<p>As a MacBook Pro user myself, I understand the desire for us to support the native Mac browser (of course, we do support Firefox on OS X), but Virtual Earth didn&#8217;t support Safari, so we were pretty much out of luck.  And although I like Safari, we have to admit that Safari 2 is <a href="http://www.quirksmode.org/bugreports/archives/safari/index.html">buggy at best </a>with support for CSS and JavaScript.  Applications like Redfin or Virtual Earth that use a lot of client-side scripting are bound to have problems with Safari 2.  This doesn&#8217;t mean that it&#8217;s impossible to support Safari 2, but it is likely to require significant testing and engineering to get a site to work properly.</p>
<p>The upcoming Safari 3, though, has taken a massive leap forward in terms of standards support, and it&#8217;s crazy fast to boot.  While we don&#8217;t support Safari yet officially, you can use Safari 3 with Redfin if you trick Redfin into thinking that you are running Firefox, and it Mostly Works &#8482;.</p>
<p>Before you start, please note that Safari 3 is in beta, it is not to be used on mission-critical systems, this is all at your own risk, your computer could spontaneously explode, etc.  With that disclaimer out of the way, here&#8217;s how you get Safari and Redfin to play nice:</p>
<ol>
<li>Download a copy of Safari 3, either the <a href="http://www.apple.com/safari/download/">Safari 3 Public Beta</a> from Apple or the <a href="http://nightly.webkit.org/">WebKit nightly</a> from webkit.org.  The Safari Public Beta is a better tested build, but it may not have all the bug fixes of the nightly build from webkit.org.  Also note that installing the Safari 3 Public Beta will get rid of Safari 2 on OS X, whereas I believe (but am not 100% sure) that the WebKit nightly can co-exist with Safari 2.</li>
<li>Turn on debug functionality for Safari.  On Macs, do it this way:
<ol>
<li>Quit Safari so it&#8217;s not running.</li>
<li>Run the program called &#8220;Terminal&#8221; which is located in your Applications-&gt;Utilities folder.</li>
<li>Type the following command into Terminal exactly as shown:
<pre><code>defaults write com.apple.Safari IncludeDebugMenu 1</code></pre>
</li>
<li>Quit from the Terminal program, and launch Safari again. Safari should now have a &#8220;Debug&#8221; menu.  If not, check the command you typed above.  Case is important.</li>
</ol>
<p>On Windows boxes, turn on the debug menu this way:</p>
<ol>
<li>Quit Safari so it&#8217;s not running.</li>
<li>Open the file at:
<pre><code>c:Documents and Settingsyour usernameApplication Data

Apple ComputerSafariPreferences.plist</code></pre>
</li>
<li>Add the following text to the file before the final &lt;/dict&gt;:
<pre><code>&lt;key&gt;IncludeDebugMenu&lt;/key&gt;

&lt;true/&gt;</code></pre>
</li>
<li>Launch Safari again. Safari should now have a &#8220;Debug&#8221; menu.</li>
</ol>
</li>
<li>Launch Safari 3.  In the Debug menu, select User-Agent &#8211;&gt; Firefox 2.0.x.x.  (The exact version of Firefox in the Debug menu depends on which build of Safari you have.)</li>
<li>Go to www.redfin.com, and use Redfin to your heart&#8217;s content.</li>
</ol>
<p>There are a few things to note here.  First, you will have to switch the User Agent every time you open a new tab or restart Safari.  Second, there are also a few known bugs we&#8217;ve seen with just the limited testing we&#8217;ve done:</p>
<ol>
<li>Depending on which version of Safari 3 you get, the images of houses next to the map may be stretched weirdly.</li>
<li>The zoom bar on the map isn’t centered correctly.</li>
<li>Keyboard shortcuts on the map page (up/down/left/right) don’t work correctly.</li>
</ol>
<p>If you try this out and find any other bugs (and we&#8217;re sure they&#8217;re there), let us know in the comments section.</p>
<p>(Photo credit: <a href="http://www.flickr.com/photos/pcw/531703254/">p_c_w on Flickr</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.redfin.com/devblog/2007/10/redfin_supports_safari_um_kinda.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Where&#8217;s My Jetpack?</title>
		<link>http://blog.redfin.com/devblog/2007/09/wheres_my_jetpack.html</link>
		<comments>http://blog.redfin.com/devblog/2007/09/wheres_my_jetpack.html#comments</comments>
		<pubDate>Mon, 17 Sep 2007 21:01:55 +0000</pubDate>
		<dc:creator>Sasha</dc:creator>
				<category><![CDATA[Browsers]]></category>

		<guid isPermaLink="false">http://blog.redfin.com/devblog/2007/09/wheres_my_jetpack.html</guid>
		<description><![CDATA[As was mentioned a few places on the web today, we&#8217;re proud to announce that Redfin has contributed to a project that will open source TurboGrid, the excellent JavaScript grid control made by the TurboAjax group.
We&#8217;ve been really trying to hammer on our map page performance for the last few weeks, and it became clear [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.redfin.com/devblog/files/2007/09/jetpack.jpg" title="Jetpack"><img src="http://blog.redfin.com/devblog/files/2007/09/jetpack.jpg" alt="Jetpack" align="right" border="0" title="Wheres My Jetpack?" /></a>As was <a href="http://www.sitepen.com/blog/2007/09/16/the-dojo-grid/">mentioned</a> a <a href="http://www.dojotoolkit.org/2007/09/17/grid-coming">few</a> <a href="http://ajaxian.com/archives/plugging-in-to-the-dojo-grid">places</a> on the web today, we&#8217;re proud to announce that Redfin has contributed to a project that will open source <a href="http://www.turboajax.com/products/turbogrid/">TurboGrid</a>, the excellent JavaScript grid control made by the <a href="http://www.turboajax.com/">TurboAjax</a> group.</p>
<p>We&#8217;ve been really trying to hammer on our map page performance for the last few weeks, and it became clear early on that performance of our current grid is suffering when there are a lot of houses on the map.  As with many of our performance problems, it is especially pronounced in Internet Explorer 6.  (Sidenote: Glenn recently told a focus group of customers that I would personally pay them $20 each to <a href="http://www.microsoft.com/windows/downloads/ie/getitnow.mspx">upgrade from Internet Explorer 6</a> or <a href="http://www.getfirefox.com">switch to Firefox</a>, and I&#8217;m beginning to come around to the idea despite the current state of my bank account.)</p>
<p>The most frustrating part for me personally is that the solution for slow performing list controls is fairly well understood and exists in <a href="http://msdn2.microsoft.com/en-us/library/hfshke78(VS.80).aspx">practically</a> <a href="http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSTableView_Class/Reference/Reference.html">every</a> <a href="http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JList.html">major</a> <a href="http://scentric.net/tutorial/sec-treemodel-add-rows.html#sec-treestore-adding-many-rows">window</a> <a href="http://msdn2.microsoft.com/en-us/library/system.windows.forms.listbox.aspx">library</a>: virtual list controls.  A virtual list control is one in which you don&#8217;t add all the items to the list immediately on creation but rather hand the list control a callback function instead.  The list then only asks for the handful of rows it needs to display at any one moment and can therefore scale up to thousands or millions of rows.  In pseudo-code, that looks something like this:</p>
<p><code><br />
function initList() {<br />
var list = new VirtualList();<br />
list.setRowCount(1000);<br />
list.setRowContent(contentCallback);<br />
}</code></p>
<p><code><br />
function contentCallback(rowIndex) {<br />
return "this is the content for row #" + rowIndex;<br />
}</code></p>
<p>TurboGrid uses the virtual list strategy, and it reacts much more quickly than our current grid control.  Our next release will use TurboGrid to speed up the list, and we&#8217;ve been very pleased with both its performance and its feature set.  So why am I frustrated?  Well, it&#8217;s mostly because I learned about virtual lists in my first few months of professional coding after college in (ahem) 1997.  And while browser-based AJAX development is a lot of fun, it can be disheartening when you are re-solving problems that you thought were solved over a decade ago.</p>
<p>In the meantime, though, we&#8217;re happy we found out about the TurboGrid open source project from the good folks at <a href="http://www.sitepen.com">Sitepen</a> and were able to help in some small way to make it a reality.  Until we all have jetpacks, flying cars, and <a href="http://www.whatwg.org/specs/web-apps/current-work/#datagrid">a built-in grid control in HTML</a>, TurboGrid will help keep us chugging along, and we hope that users will notice the speed up (although that $20 is still on the table for IE6 users).</p>
<p>(Photo credit: <a href="http://www.flickr.com/photos/samjuk/1215416320/">samjuk on Flickr</a>; Title credit: Daniel H. Wilson&#8217;s <a href="http://www.amazon.com/Wheres-My-Jetpack-Amazing-Science/dp/1596911360/ref=pd_bbs_sr_1/002-3009341-3278433?ie=UTF8&amp;s=books&amp;qid=1190060572&amp;sr=8-1">Where&#8217;s My Jetpack?</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.redfin.com/devblog/2007/09/wheres_my_jetpack.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
