Essentially it's a non-issue, come enjoy all the good things about the city!
2,165 karma · joined May 13, 2009
Essentially it's a non-issue, come enjoy all the good things about the city!
Another note: the historic city of Vanport is now a racetrack, owned and operated by the city. PIR circumnavigates the old town perimeter, you can see in these two photos:
http://www.corvetteracing.com/tracks/trk_img/portland/portla...
http://thumbs.media.smithsonianmag.com//filer/ac/46/ac46ca81...
Preaching to the choir I am sure :)
much better than any others we have tried though, so worth it.
One downside though is they are obviously using some elevation and image analysis to auto detect drainages and mark them as water. A significant number of draws in our area were marked as creeks, when it was actually an ATV trail along the bottom.
Other than that, a very very worthwhile product if you plan on doing any serious hiking/motorcycling/etc and plan on extensive use of GPS.
We use it for our route planner on http://ridewithgps.com
Feel free to email me, cullen@ridewithgps.com if you want to use it, or just have questions about getting something together yourself.
Edited to add: code is open source, you just need an afternoon to tweak it (it's a ruby lib and a sinatra app) to work, along with some SRTM gridfloat dems. Code is here:
https://github.com/ridewithgps/humps
And if you need to convert from geotiff to gridfloat, here's some bad C:
I operate as an s-corp and pay myself a reasonable salary, matching that of the salary I could get in the current job market in the area I live in. Anything I clear above this is only taxed with my regular taxes.
If I was running a C-Corp instead of an S-Corp, I'd get my $100k salary, and any extra would have been taxed at the 30% corporate rate when it was taken in, then the 20% capital gains when it's distributed to me as profit.
Given that you read stories about SWAT raiding the wrong residence because they misread the house number, it made worried that the same could happen to me.
Picture proof: https://pbs.twimg.com/media/AqKIhXOCIAEaG9D.jpg:large
Basically, we put together a simple wrapper that lets us automatically pick which API version to use based on a users apikey, registered version (I set them up with v1 or v2), and what they pass in. A before_filter automatically pulls the apikey and version from params/headers, and it's consumed like this:
https://gist.github.com/kingcu/1e5e6982ad3e05707303
Essentially this lets us be strict about what key gets what result, and, lets us do prioritized fallback logic by using the any() function shown.
The concept of "you don't need a gym membership or weights to get results" is very sound. My girlfriend is essentially a full-time acrobat (extremely fit, trains for 25+ hours a week), and she started me on a simple workout that takes 30-60 minutes, and goes in five week cycles of building up in reps. It's produce more results in a shorter period of time than any traditional gym workout.
I just went through this situation last year, and while taking legal advice early on is good, it's very easy for lawyers to get their share of money. If you already have a relationship with a lawyer, sit down with them for an hour and get an overview, but don't have them do anything like draft documents, review dialogue, etc. They'll want to do these things (billable hours) but they'll just cost you a ton, when 95% of the time the deal isn't going to happen anyway.
For what it's worth, I only went to him directly after the police shrugged it off and wouldn't pursue it. I gave them his address, description, other crimes he had been involved in (drug dealer), etc. They didn't care, and when the crime happened couldn't even be bothered to lift a couple of prints.
I was so angry when he said "sorry man, I figured your insurance would cover it, no hard feelings". But, looking back, he was just dumb as hell and stealing from a friend of a friend you met once made sense to him...In this sort of situation, handling the issue directly worked out for me better than going to the police.
Pulling 21k points (1.8mb of JSON) for a single recording out of disk into memory, turning it into JSON, sending it over the wire to the client, is slow (500ms just to query, pull off disk and turn into JSON). Serving the same data pre-compressed, is 2ms. This isn't even considering what it takes nginx to compress it on the fly for every request.
Additionally our mysql db sees many more queries than mongo, so the overbuilt hardware is a bit less overbuilt when taking that into consideration :)
Our actual track data isn't updated frequently. Mostly it serves as an archive for a user, and is only seen by 1-2 other people. Most people use our service to store all their activities, which for the most part are really boring. They are interested in aggregate metrics like "I've ridden 200 miles this month".
A smaller portion of our data is from planning a route using google maps, which has much more modest storage requirements, since it's optimized data (one point every mile if it's a straight line) instead of 1hz logging from a GPS unit. This stuff is edited, but I'd say only 10% of planned routes are ever modified, so actual updates on the track data are small.
postgis isn't a good fit for the data we store in full fidelity, since it's not just geo data but also sensor data (heartrate, cadence, power in watts, temperature etc). However I'll be storing a point reduced version of the full track in postgis, so i can move to using actual intersection queries for matching tracks, instead of the current brute force approach (check everypoint in every track sharing a bounding box) that works now. All bets are out the window though with 2-4x the traffic and data we currently have, using that brute force approach.
I already run another beefy postgis setup (192gb ram, though spinning disks not SSDs) for serving OSM maps, and eventually OSM routing hence the ram.
In regards to actual iops, not sure what this thing can peak at off the top of my head, but we'll easily be doing 100 queries a second this year, with a considerable portion of those queries pulling out ~1mb documents.
Playing it conservative, so I am moving towards gzipping those large documents (never need to access anything but the full data, > 90% of accesses are directly served to clients that can handle inflating the data). For now they will stay in mongo, but I am building out an evaluation of using a flat file structure and just letting nginx pass them out.
With that being said, we are using it to store our JSON geo track data, most everything else is in a mysql database. As a result we haven't run into limitations around the storage/query model that some other people might be experiencing.
Additionally, we have some serious DB servers so haven't felt the pain of performance when exceeding working memory. 192gb of ram with 8 RAID10 512gb SSDs probably masks performance issues that other people are feeling.
Final note: I'll probably be walking away from mongo, due to the natural evolution of our stack. We'll store high fidelity track data as gzipped flat files of JSON, and a reduced track inside of postgis.
tl;dr - using mongo as a very simple key/value store for data that isn't updated frequently, which could easily be replaced by flat file storage, is painless. YMMV with other use cases.
You need both a good funnel, and a message that provides value to a user. It has been crudely expressed as "do you get your user laid", less crudely as "make your user look cool". If you do this, then they'll share your service to all their friends for free. In our case, someone is proud to ride 100 miles, and they'd like to show it off. Our tool let's them do it, so they paste it around on facebook. It's all about your value prop and how someone feels sharing that with others.
I just read through a couple reports, they include wonderful stories like the pit bull who knocked over an old lady and broke her hip as an attack.
Edit: To make an anecdotal, worthless point...I live in a really poor area of Portland. I walk through the neighborhood and on just about every block there is one house with a locked up pit bull behind a 4 foot chain link fence. These dogs are aggressive, abused and very well represent a danger to people.