PropertyMaps Enters The Mile High City
We finally entered into Colorado’s Capital of Denver and the surrounding locations adding over 26,000 new listings. According to the Rocky Mountain News, while the national population is growing at just under 1 percent a year, Colorado’s rate is 1.4 percent and is forecasted to be 1.8 percent in the near future. Apparently that’s a rate more typical of developing countries than of most Western democracies. Colorado also boasts having 3 of the 5 counties nationally that doubled their population between 1960-2000.
As one of the most isolated major cities in the United States, Denver always has been obsessed with transportation systems. Fear of being bypassed began early when railroads and later, airlines, originally avoided Denver because of the 14,000-foot-high Rocky Mountain barrier just west of town. To secure Denver’s place on national transportation maps, the city opened a new $5 billion airport in 1995. The 55-square-mile Denver International Airport is the nation’s largest in terms of area and capacity for growth, prompting advocates to call it the world’s largest.
We are excited to add the Denver area to our maps, helping to make this beautiful city just a little less isolated from the rest of the nation.
Update: You can read more about our partnership with Jeff Fogler of Signature Brokers in our Denver, Colorado Press Release.

PropertyMaps Enters Colorado
No comments
We’ve Got Images
We’ve already started talking about our property counts in various press releases (1.3 million), but have never touched on the subject of how many images we have for those properties. As of this writing, we have over 8.5 million unique images. I think this is pretty significant as this is one of the most important criteria for real estate searches on the Internet. According to the National Association of Realtors®:
A study by REALTOR.com found that a home listing with six photos got 300 percent more views than a property with one or no photos, says REALTOR.com President and CEO Allan Dalton.
On average, we have at least 6 images per listing on ProperyMaps.com and these images are updated daily. No wonder we fried the processor/motherboard on one of our servers last week.

Over 8.5 Million Unique Images
No comments
We’re In The Top 100

Somehow we’ve managed to get into the Top 100 Real Estate Blogs and this isn’t the only site to rank us in the top 100.
This is quite an accomplishment and we feel honored to be ranked this highly. We will continue to do our best to bring you real estate news, PropertyMaps updates, and of course geek content.
Congratulations to PropertyMaps bloggers and keep up the good work!
2 comments
Google Street View Added To Property Details Pages
For areas that Google has Street View available, you will now see a new tab across the top of the property details pages called “Street View”. Clicking this, you’ll get a split screen map with the property marker / little man icon in hybrid view on top and the Street View panorama on bottom.
You can click the arrows within the panorama to move along streets or grab and drag to change your perspective (the little man will also update on the top map to indicate your movement). You can also pick up the little man and drop him on any blue highlighted street, allowing you to easily move around the neighborhood. The screenshot below shows a nice condo on Paradise Road in Las Vegas.
There are currently around 40 major cities where Street View is available, you can learn more about it on the Google Street View page.
Update: You can read more about this addition in the Google Street View Press Release.

Google Street View of MLS Property
No comments
PropertyMaps Invades Georgia
We’ve finally entered Georgia in a big way, with around 83,000 properties and another half-million images. Georgia has 18 of the 100 fastest growing counties in the country and is the third fastest growing state in terms of population numbers overall, so we’re very excited about adding this area.
We’ve also made some massive improvements to our geocoder that allowed us to reduce our overall failure rate three-fold. This is probably a topic for another post so I’ll leave it alone for now.
Update: You can read more about this addition in the Affiliation with Atlanta Broker David Nix Press Release.

PropertyMaps Enters Georgia
No comments
Major Map Improvement With The Addition of Parcel Boundaries
We’ve added parcel boundaries to our map based search so you can now see the exact lot size for any listed property. This is the most comprehensive boundary data set available anywhere, with over 500 counties and 80 million parcels. If your area isn’t covered yet, the parcel data is expected to grow to encompass 1000 counties and over 100 million parcels.
We have the top four zoom levels in satellite or hybrid mode covered, representing hundreds of millions of tiles. If you haven’t noticed, Google Maps has different zoom levels depending on what view mode you’re in. To get the most out of the parcel boundaries, it’s best to use satellite or hybrid view as this gives you the highest zoom capability.
Update: You can read more about this enhancement in the Parcel Boundary Press Release.

Parcel Boundaries Now Available
No comments
Dynamically populating ’select’ elements with javascript
new Option(text,value);
As referenced in many javascript sources including “The Book” is bad, and should not be used. new Option forces browsers to use an older DOM model (0 or 1) instead of the now modern level 2.
The DOM does not mix and match so doing:
selectBox.appendChild(new Option(text,value));
fails in IE.
The fix is to use the DOM1 level support which is the ‘add’ method on the select element.
selectBox.add(new Option(text,value));
Problem with this is the way the spec was written for the ‘add’ method. It takes 2 parameters.
- an option object.
- the index position you want to insert it into your select element.
The spec defines that the second parameter should be null instead of undefined in order to append to the end of the list. This means that in any browser that follow the spec the second parameter must be explicitly set. This is one rare example where I prefer IE’s implementation.
// in FF or W3C compliant browser selectBox.add(new Option(text,value),null);
Problem with this is IE does not understand the null and fails. so you have to wrap this in a try catch.
try {
selectBox.add(new Option(text,value),null);
} catch(ex){
selectBox.add(new Option(text,value));
}
The solution is to use all DOM2 commands and stay far away from ‘new Option’.
var option = document.createElement('option');
option.setAttribute('value','value');
option.appendChild(document.createTextNode('text'));
selectBox.appendChild(option);
it is also important to note that using the DOM2 creation of the ‘option’ element does not work with the ‘add’ method on the ’select’ method in any browsers.
Totally compatible mootools shorthand, and my current accepted solution:
selectBox.appendChild( new Element('option', {'value' : value }).appendText(text) );
No comments
PropertyMaps Expands Into Miami-Dade And Surrounding Areas
We’ve just added Miami-Dade and the surrounding areas for a total of over 60,000 new properties and 500,000 property images. We now have the Southeast Area of Florida covered. We are very excited to be working with one of the premier brokerages in Miami-Dade to cover this area: Terrabella Realty.
Miami-Dade County is the most populous county in Florida with a population of 2,402,208, according to the US Census Bureau. We’re extremely pleased to add such a huge region to our map as our national rollout continues. Shortly, we will begin publishing statistics about our property and image counts.
Update: You can read more about our partnership with Gustavo Blachman and Terrabella Realty in our Miami-Dade Properties Press Release.

PropertyMaps Adds Miami-Dade And Surrounding Areas
1 comment
We’ve Moved
According to this press release, I guess we moved. I was too busy to notice until my 30″ Cinema Display arrived. Then I felt like there was more room. With a resolution of 2560 x 1600, I have more than 4 million pixels to work with.. In addition to my laptop that has a 1440 x 900 display and powers the entire rig, I have somewhere around 5.3 million pixels total. The good part is I have totally mobility, the bad part is I miss my 4 million extra pixels when I’m not in the office.
Oh, the new office. I think it is around 5,000 square feet and can hold maybe 30 people.

PropertyMaps Moves Into Larger Offices
1 comment
Deciphering Gmail IMAP Labels With getmail
We have outgrown Google Apps, (formerly GAFYD (formerly GFYD)), or something along those lines. The problem of exporting your mail from Gmail is not a trivial one. From discussions by Opera Software’s lead QA for Opera Mail’s posting on Gmail’s Buggy IMAP Implementation to Matt Cutts’ posting on How to back up your Gmail on Linux in four easy steps to LifeHacker’s posting on Back up Gmail on Linux with Getmail to Wired’s recent wiki entry on Make a Local Backup Of Your Gmail Account, it seems that there is no one definitive source on how to pull your mail and retain your labels.
So here is what we have done to solve this problem:
- Use getmail - this has been the best archiver we have run across. There are other applications - isync, OfflineIMAP, Fetchmail, etc. - that probably do a decent job, but getmail is still the best in my view. There are other hacks - use Mail.app to synch the Gmail IMAP directory, then convert emlx to maildir; same for Thunderbird and mbox; etc - but we wanted something a little more straightforward - Occam’s razor, right?
- Install getmail - On my dev machine, I used macports (port install python25; port install getmail) to install the latest getmail which had dependencies on Python 2.5. After this was done, I set up the getmailrc config file and fired off an attempt using SimpleIMAPSSLRetriever… which failed due to a lack of SSL in the newly installed Python. I had to go back and install Readline (port install py25-readline), then install SSL for Python (port install py25-socket-ssl).
- Patch Python - There is malloc bug in imaplib when fetching large documents using SSL. So open up imaplib.py from your Python lib dir (in my case /opt/local/lib/python2.5/) and replace:
data = self.sslobj.read(size-read)
with
data = self.sslobj.read(min(size-read, 16384))
to maintain a 15MB memory block if necessary.
- Configure getmail - Now that most of the fun is taken care of, we need to set up a configuration file for getmail (~/.getmail/getmailrc) and create the proper local destination. First the getmailrc file:
[retriever] type = SimpleIMAPSSLRetriever server = imap.gmail.com mailboxes = (”[Gmail]/Starred”,) username = username@yourdomain.com password = xxx [destination] type = Maildir path = ~/Maildir/ [options] verbose = 2 message_log = ~/.getmail/gmail.log
First of all, we are using IMAP to retrieve mail as POP has a limit of 99 documents per access and that would take forever.
Second, we are using the Maildir format for the destination so we need to make sure the target directories have been created (~/Maildir/cur, ~/Maildir/new, ~/Maildir/tmp).
Third, we need to specify a mailbox or mailboxes to download or the INBOX will be the default.
Fourth, we need a trailing comma on the list of mailboxes to download due to a parsing error in getmail (actually the mailboxes option needs to be a tuple, but the trailing comma negates that).
Fifth, we need to know the syntax of Gmail’s internal IMAP structure to pull down discrete folders. Non-label folders (Starred, Sent Mail, Drafts, etc.) are accessed with “[Gmail]/Starred” (as in the above config) and labels are accessed directly. For example, the label “Important Project” would have this in the config:
mailboxes = ("Important Project",) - Download your Gmail - For every folder/label I had within Gmail, I downloaded to a separate folder so I could import into dovecot IMAP without hassle. This entailed changing the mailboxes option in getmailrc, running getmail, renaming Maildir to label/directory name, rinsing, repeating.
If dovecot turns out to be a hassle, I’ll blog about that next. Or about bricking my iPhone with the 1.2 firmware because I didn’t read the instructions (yes, I got into the iPhone developer program).
Update: Because maildir uses the modification time of every file to determine the sent date, all emails pulled by the above method will basically lose their sense of time. The below PHP script will restore the modification times:
/* VARS ***********************************************************/ $box = '‘; $stem = SITE_DIR.’Maildir/’.$box.’/new/’; /******************************************************************/ $dir_contents = scandir($stem); foreach($dir_contents as $item) { if(!ListFind(’.,..,.DS_Store’,$item)) { $file = $stem.$item; $content = file_get_contents($file); $date = extractText($content,”\nDate: “,”\n”); $utime = strtotime($date); $converted = date(’YmdHi.s’,$utime); shell_exec(’touch -mt ‘.$converted.’ “‘.$file.’”‘); } } function extractText($content,$start,$end) { if(strrpos($content,$start)===false) { return false; } $startpoint = strpos($content,$start)+strlen($start); $endpoint = strpos($content,$end,$startpoint); $length = $endpoint - $startpoint; return trim(substr($content,$startpoint,$length)); }
No comments


