All posts by David

MooOOoooOOOoOoooo – The Milk Man Delivers!

Oh yeah, what a nice of racing!!!

This is the second outing of the ‘Mooo Mobile‘, drive by me, aka The Milk Man.

Had a good couple of hours of practice, and the truck was running pretty good. Did some baseline laps with the setup from two weeks ago, then I started tweaking the suspension.

For the last few days, I have been researching suspension from the other manufactures. Seeing what they do differently, and working up some research for a new iPhone / iPad App. Yes.. going to see about making this hobby pay off in $$$, not just silliness. During this research, I saw a possible solution to a setup problem in a set of springs designed for Losi trucks.

Here is the issue. For front springs, AE (aka Team Associated) maxes out with the ‘Red’ spring at 3.90 lb./in. Which is pretty stiff for a vehicle that weights maybe 4 lbs. total. The Associated spring is 2.25″ long, and right now I have to run it at the max length, just to get it to sit at the right front ride height. Adding to the issues, the setup sheets recommend cutting a coil out of the spring, making it shorter and stiffer. I’m thinking that cutting a coil will make for a sloppy suspension, since the top of the coil will no longer be flat, and not sit right on the spring perches.

Then I get this brilliant (well, different, if not brilliant) idea to purchase a set of the Losi front truck springs in the 4.1 lb./in. rating. They are close in diameter. Plus, the Losi spring is only 2″ long, also giving me the ability to lower the truck more using the shocks built in threads. Something I could not do with the stock 2.25″ spring.

It turns out, the Losi springs have a slightly larger ID. Almost too large. But, they fit well enough, and under tension do not move around adversely. So, I gave it a run tonight. And I must say, it did help quiet down the front handling, making the truck handle more neutral. Less sliding in the rear end. I took some notes tonight on what I tried, which I’ll be including in a different post later on this week.

I did OK tonight, again making the A-Main in Stock (17.5 motor) Short Course. We had a couple of pretty full grids tonight. I held my own in the main, finishing where I started, in 7th place. Not stellar by any means, but the track was also VERY loose, so those with better skills really dominated. Not finishing last is always a plus, when racing against so many more experienced drivers. Most of these guys have been racing for 10 years, a few more like 30! I’ve been at it for a total of 7 months so far… so.. I don’t feel to bad about my progress.

But, the best part of the night, was the post Main rounds entertainment. We call it Hack for Cash. This little race has a different set of rules. And they are pretty simple.

  • Race in an oval, skipping the inside, making the track 1/3 as long, and cutting the jumps down to 7 and 2 table-tops.
  • There are no corner marshals. You crash, tough. You wait out the race in humiliation, unless another racer hits you and accidentally knocks you back into the race. It happens a lot when things get dicy, so it’s truly not over until the fat lady sings.
  • Punting other trucks is encouraged. In fact the race leader has a big fat target on them, everyone wants to take them out
  • Last man standing, or the driver with the most laps when the 10 minute buzzer goes off wins the entry fees. Tonight it was 14 racers at $2 a head. 28 bucks on the table for the winner!
  • It’s OK to work as a team to take out other drivers, but in the end, only on person wins.
  • You cannot stop on the track. If you stop, you’re OUT! That does not include being crashed out. See the rule above about how you might get back into the race.

So, with 14 trucks in the race, starting in a modified Motocross start (trucks lined up side by side all the way across the lane in the back straight. Overflow trucks are placed *on top* of the front line trucks. When the buzzer goes off, it’s anyone’s guess who’s left standing. I was 2nd truck on the inside of the front row, so I started with a truck on top of me, as did most of the front 9. When the buzzer sounded, I made it 1/2 way down the straight before the truck that was on me, came up from behind and knocked me onto my side. I was out. I sat there for many laps being passed. Trucks trying to dodge me. Finally, I was able to wiggle sideways enough to get clipped by another truck and end up ride side up again, and back in the race!.

It was brutal. Crashing trucks, people yelling ‘Get the leader’. Take out the owner’s truck!! Brian, the owner, is a pretty damn good driver, and he’s won just about every single one of these Dash for Cash events. Tonight, we were all gunning for him. One of the racers said.. “It’s going to be tough to keep track of who’s in front.” I told him that it would be a little easier that he though, since he didn’t have to worry about it being me.

After a few laps, a couple of trucks were upside down, and one of them even flew completely over the wall and off the track. That one was NOT coming back. It was about 1/2 way into the race when I got my truck jammed up into one of the upside down trucks in the main sweeper (corner for you non-racers). Nice high speed WHAM!, CRUNCH!. My front wheel was jammed up into the other truck’s suspension. A truck with a reputation for being built like a tank. The best outcome I could hope for was someone else understeered into us exiting the sweeper, snapped off my first right control arm and gave me a chance to drag the chassis around the track until the end.

I didn’t have to wait long. One of the mod truck guys went in to deep on the corner, hit the wall then shot off it into me, knocking me free of the big Traxxis 4×4. Except, it remained upside down, and I didn’t lose my control arm! And, I was back in the race!

Nearing the end, Brian was clearly the target, and I was clearly driving way too fast, at least that’s what everyone was yelling. “Slow down! Brian is behind you.. slow down and take him out!” So I sped up! And in a few laps had run him down, and I had him square in my sights. On the last straight to the main fishing I had my shot, and I had to make it good. It’s a tight left-hander to the Start-Finish. He was 3/4 of the straight ahead of me but going slow, trying to make sure he didn’t catch up too lap traffic and also make a clean jump. I punched it. Let all 250A blast into my torque motor and did my best to t-bone him as he made the turn.

I missed. And with ever bit of speed my truck could make, went straight into the cinder block wall on the outside of the turn. Completely perpendicular to the wall. I could not have hit it harder. This time, it was game over.

Or, was it? NO! It was NOT! I bounced off (thank YOU RPM products for not letting my frame snap in half) and ended up on the complete other side of the lane, across the start finish, pointed in the right direction! I punched it and chased him down again! This time there were three of us right on his tail, and we were going to nail him to the wall on the outside of the big sweeper. We lined him on the front straight, and at the last second he jammed on the brakes and two of us shot straight past him into the turn at full throttle. Again it looked like a trip to the parts store for me. But this time I was on the binders, slid the truck in backwards, tapped the wall and was off.

Back in the throttle again, I put the hammer down trying to catch up to Brian. I was concentrating on the fact I needed to catch up to him, I sort of missed the fact that he’s been clipped by the 3rd truck in our assault, and was on his side! I just kept pouring it on, and then I noticed, there were only two trucks still running in the race, Steve and myself. As the timer counted town, Reid (Race Director) called out for a big “Mooo” and to not blow it. I only had 2 turns and two jumps and I was going to take the checkered flag.

Which, of course I did, because, I’m The Milk Man. It was and EPIC Hack for Cash. high-fives for me all around. It was a blast, and at the end of the night, all my racing was paid for with the winnings, and I split the rest with Steve for being the driver to finally knock Brian out of the race for good! Thanks Steve!

What a night! What a great design and paint job on the body, courtesy of my daughter, and what a blast!! I just have one last thing to say.

MOOOOOOOOOOOOOO!!!!!

Short Course Racing Status, January -> April 2011.

BRCR implemented a track change in mid April, so I’ve closed out the previous dataset, and started a new one for updated track.

During that time I also acquired the TLR22 buggy, and sold off the AE B4 (took less than 2 hours to sell, yip!).

So, without yammering on, here is the graph from that dataset.

Right at the tail end, I was experimenting with some new setup strategies, and it’s clear that they were NOT helping out at all. The upper graph shows the upward blip in times during the heat races.

However the main events, which are the ones that matter, show that I continued to lay down fast times, when I went back to my ‘standard’ setup.

More to follow, including a different way of looking at the numbers. Those should be posted soon. I want to wait for a decent dataset (showing a trend of 2 days is not very useful) before I start trying out the new metrics methods and crunch the numbers.

iPhone Cellular Tracking – Redux. Can it be turned off, at all?

If you managed to catch my previous post on the iPhone Cellular Location Tracking Controversy, you saw that I did a little more research into the issue than most of the other articles. Or, at least I showed my work. So why post today? I’m going to walk through a check to see if turning of ‘Location Services’ and *not* approving any of the services to use it for a week, stopped or at least reduced the amount of data recorded.

Here is what I did…. and at the end of the article, we’ll both know the results.

Syncing the iPhone to laptop

Connected my phone to the laptop at 08:49, and specifically told iTune to sync. Once that was done, I changed to the iPhone backup directory:

Looking for updated files
:Backup me$ cd /Users/me/Library/Application\ Support/MobileSync/Backup

Next, I checked to see which directories had been most recently updated:

:Backup me$ ls -ltr
total 0
drwxr-xr-x  1929 me  staff  65586 Mar 16  2010 21562bef54882a56a05f4047db0dd1ea95783af1
drwxr-xr-x  1323 me  staff  44982 Apr  2 08:16 d56742670a5e045f4a76ebb7fd93c728054c0ebe-20110402-081551
drwxr-xr-x   719 me  staff  24446 Apr 25 16:33 669ed5e78e2afe06caad469294edd80d4b3261b9
drwxr-xr-x  1371 me  staff  46614 Apr 26 08:49 d56742670a5e045f4a76ebb7fd93c728054c0ebe

Locating the Manifest files that contain filename for the consolidated.db data file. This netted 4 database files. The one I am most interested in is the one created during the sync at 08:49 this morning.

:Backup me$ find . -name 'Manifest.mbdb*' -exec ls -l {} \; 
-rw-r--r--  1 me  staff  226086 Apr  2 08:16 ./d56742670a5e045f4a76ebb7fd93c728054c0ebe-20110402-081551/Manifest.mbdb
-rw-r--r--  1 me  staff  167152 Apr  2 12:21 ./669ed5e78e2afe06caad469294edd80d4b3261b9/Manifest.mbdb
-rw-r--r--  1 me  staff  167022 Apr 25 16:33 ./669ed5e78e2afe06caad469294edd80d4b3261b9/Snapshot/Manifest.mbdb
-rw-r--r--  1 me  staff  232090 Apr 26 08:49 ./d56742670a5e045f4a76ebb7fd93c728054c0ebe/Manifest.mbdb

Changing to the directory, I ran the python script that lists contents of the db, and it’s data files, looking for the true name of the consolidated.db. There are over 1300 data files in that directory. It looks like the data file name remains unchanged (4096c9ec676f2847dc283405900e284a7c815836).

:Backup me$ cd ./d56742670a5e045f4a76ebb7fd93c728054c0ebe

:d56742670a5e045f4a76ebb7fd93c728054c0ebe me$ ls -1 | wc -l
    1369

:d56742670a5e045f4a76ebb7fd93c728054c0ebe me$ ~/phonedb2.py | grep consolidated
-rw-r--r-- 00000000 00000000 19128320 1303587917 1303587917 1301716372 (4096c9ec676f2847dc283405900e284a7c815836)RootDomain::Library/Caches/locationd/consolidated.db
File located, copy and compare to previous

Now that I know where the file is, I’m going to copy it to my home directory, and compare it to the other DB files I’ve saved off over the last week. Looking at the list, you can see that the size of the file has not changed, since I started to track this last week. Now, that does not necessarily mean there are no new records in the table, but, it’s a pretty decent indication that it does not. But, an examination of the table, and comparison to the data from the last extract will quickly tell the tail!

:d56742670a5e045f4a76ebb7fd93c728054c0ebe me$ cp 4096c9ec676f2847dc283405900e284a7c815836 ~/iPhoneTracking.3.db

:~ me$ ls -ltr iPhone*  
-rw-r--r--  1 me  staff  19128320 Apr 21 10:19 iPhoneLocation.1.db
-rw-r--r--  1 me  staff    225280 Apr 21 10:21 iPhoneLocation.2.db
-rw-r--r--  1 me  staff  19128320 Apr 21 13:23 iPhoneLocation.4.db
-rw-r--r--  1 me  staff  19128320 Apr 21 15:13 iPhoneTracking.1.db
-rw-r--r--  1 me  staff  19128320 Apr 22 14:24 iPhoneTracking.2.db
-rw-r--r--  1 me  staff  19128320 Apr 26 09:16 iPhoneLocation.3.db
Comparing the data. 22-APRIL vs. 26-APRIL.

I simply turned off Location Services on my phone last week, after storing the snapshot on 22-APRIL. During that time I used several apps that use some sort of location information, and in the cases where I was prompted to provide location services, I declined.

But first things first. I think it’s important to show that there is more than just the controversial CellLocation data in this database file. Here is the full list of tables included in consolidated.db

:~ me$ sqlite3 iPhoneTracking.2.db  (this is the file from 22-APRIL)
SQLite version 3.6.12
sqlite> .tables
CdmaCellLocation                   CellLocationCounts               
CdmaCellLocationBoxes              CellLocationHarvest              
CdmaCellLocationBoxes_node         CellLocationHarvestCounts        
CdmaCellLocationBoxes_parent       CellLocationLocal                
CdmaCellLocationBoxes_rowid        CellLocationLocalBoxes           
CdmaCellLocationCounts             CellLocationLocalBoxes_node      
CdmaCellLocationHarvest            CellLocationLocalBoxes_parent    
CdmaCellLocationHarvestCounts      CellLocationLocalBoxes_rowid     
CdmaCellLocationLocal              CellLocationLocalCounts          
CdmaCellLocationLocalBoxes         CompassCalibration               
CdmaCellLocationLocalBoxes_node    Fences                           
CdmaCellLocationLocalBoxes_parent  Location                         
CdmaCellLocationLocalBoxes_rowid   LocationHarvest                  
CdmaCellLocationLocalCounts        LocationHarvestCounts            
Cell                               TableInfo                        
CellLocation                       Wifi                             
CellLocationBoxes                  WifiLocation                     
CellLocationBoxes_node             WifiLocationCounts               
CellLocationBoxes_parent           WifiLocationHarvest              
CellLocationBoxes_rowid            WifiLocationHarvestCounts        

The table that is supposed to contain the data, is CellLocation. Lets show what is in the last 5 records entered in that table. Here are the fields, then the last 5 records:

sqlite> .header ON
sqlite> select * from CellLocation limit 1;
MCC  MNC  LAC  CI  Timestamp  Latitude  Longitude  HorizontalAccuracy  Altitude  VerticalAccuracy  Speed  Course  Confidence

22-APRIL
sqlite> select Timestamp,Latitude,Longitude,HorizontalAccuracy,Speed,Confidence from CellLocation order by Timestamp desc limit 5; Timestamp|Latitude|Longitude|HorizontalAccuracy|Speed|Confidence 325110108.640637|47.24654626|-122.43737727|2164.0|-1.0|70 325110108.640637|47.24717628|-122.43819308|500.0|-1.0|50 325110108.640637|47.24570667|-122.43808859|2138.0|-1.0|50 325110108.640637|47.2472279|-122.43625974|1550.0|-1.0|70 325110108.640637|47.24575543|-122.43641382|500.0|-1.0|50
26-APRIL
:~ me$ sqlite3 iPhoneTracking.3.db SQLite version 3.6.12 sqlite> .header ON sqlite> select Timestamp,Latitude,Longitude,HorizontalAccuracy,Speed,Confidence from CellLocation order by Timestamp desc limit 5; Timestamp|Latitude|Longitude|HorizontalAccuracy|Speed|Confidence 325110108.640637|47.24654626|-122.43737727|2164.0|-1.0|70 325110108.640637|47.24717628|-122.43819308|500.0|-1.0|50 325110108.640637|47.24570667|-122.43808859|2138.0|-1.0|50 325110108.640637|47.2472279|-122.43625974|1550.0|-1.0|70 325110108.640637|47.24575543|-122.43641382|500.0|-1.0|50

CONCLUSION

Based on the evidence collected from my phone, it indicates that turning LOCATION SERVICES OFF DOES STOP CellLocation LOGGING!. So.. there you have it.. My research. I’ve shown my work. Explained my methodology. You can trust me or not, but if you have some evidence, beyond some huckster’s article, that indicates I’m wrong, PLEASE let me know! If I missed something, I want to correct my research and conclusion.

As always, you cell phone may vary.

The Great iPhone Location File Controversy

The Great iPhone Location File Controversy – is it really a problem?

Unless you have been living under a rock, or use a Windows Mobile Device (no difference), you no-doubt have heard about the reports floating around in the last day or so about the infamous consolidated.db location history file that is maintained on each 3G enabled iOS4 devices such as the iPhone and 3G iPad.

In fact, the number of articles discussing this issue (and now this one is also joining the fray) is extensive.

Regardless, it’s an issue of one sort or another, so I decided to delve into this a little bit. My research starts with this site on ReadWriteWeb: Your iPhone Is Tracking Your Every Move.

The article references this page [iPhoneTracker], where you can download and app, or the source code to compile a program to read your consolidated.db file. However, first you must find it! The instructions for finding the file were not completely accurate, there are some references with path misspellings etc. So, I’m going to re-do those pages, show you how I did it, include the Python script I ran to read the database file, and finally the steps I went about to move the file, compare snapshots of the file, and see if turning off location services, as it purported, solves this problem

First order of business is to get the App. Since I’m smart and use a MAC (and LINUX, but I don’t sync my phone to LINUX, so that’s not going to be discussed any further) I grabbed this zip file, extracted the app inside, and dropped it in my Applications pane.

Running the program, I see this:

iPhone Tracker Data File Heat Map

As you can see, I don’t do much wandering around. Zoomed in you can see some of the places along the West Coast I have wandered since I purchased the current device. The App will display ALL data, or you can have it just display a specific weeks’ full of data, form any time frame in the device. Here is a shot of some travel I did during Thanksgiving 2010.

A winter vacation to California, during Thanksgiving

To say the dataset is full of inaccuracy’s is an understatement. Just look at this map of the last two days of travel. I can assure you, I was not in Sumner, nor in Olympia or any of those other places on the eastern side of the sound in a long time, much less that last two days:

A day in the life, covering the last few days. However, there are a lot of errors!

And yet another, from the middle of last year. You can see a lot of ‘hits’ on Vancouver island. However, I have NEVER been there. Ever!

This map is full of errors, I've never been to Vancouver Island!

OK, so, I hope you can see that, the use of the data has it’s limitations. It’s not very accurate. In face it’s pretty inaccurate in enough cases to make it’s utility, dubious.

But, I wanted to know more, so I delved deeper into the files and went in search of the nefarious SQLite file itself. First stop was this page, where I grabbed a script, applied some mentioned patches, located the backups directory and find my consolidated location files (I found 4).

Here is the patched Python script:

#!/usr/bin/env python
import sys

def getint(data, offset, intsize):
    """Retrieve an integer (big-endian) and new offset from the current offset"""
    value = 0
    while intsize > 0:
        value = (value<<8) + ord(data[offset])
        offset = offset + 1
        intsize = intsize - 1
    return value, offset

def getstring(data, offset):
    """Retrieve a string and new offset from the current offset into the data"""
    if data[offset] == chr(0xFF) and data[offset+1] == chr(0xFF):
        return '', offset+2 # Blank string
    length, offset = getint(data, offset, 2) # 2-byte length
    value = data[offset:offset+length]
    return value, (offset + length)

def process_mbdb_file(filename):
    mbdb = {} # Map offset of info in this file => file info
    data = open(filename).read()
    if data[0:4] != "mbdb": raise Exception("This does not look like an MBDB file")
    offset = 4
    offset = offset + 2 # value x05 x00, not sure what this is
    while offset < len(data):
        fileinfo = {}
        fileinfo['start_offset'] = offset
        fileinfo['domain'], offset = getstring(data, offset)
        fileinfo['filename'], offset = getstring(data, offset)
        fileinfo['linktarget'], offset = getstring(data, offset)
        fileinfo['datahash'], offset = getstring(data, offset)
        fileinfo['unknown1'], offset = getstring(data, offset)
        fileinfo['mode'], offset = getint(data, offset, 2)
        fileinfo['unknown2'], offset = getint(data, offset, 4)
        fileinfo['unknown3'], offset = getint(data, offset, 4)
        fileinfo['userid'], offset = getint(data, offset, 4)
        fileinfo['groupid'], offset = getint(data, offset, 4)
        fileinfo['mtime'], offset = getint(data, offset, 4)
        fileinfo['atime'], offset = getint(data, offset, 4)
        fileinfo['ctime'], offset = getint(data, offset, 4)
        fileinfo['filelen'], offset = getint(data, offset, 8)
        fileinfo['flag'], offset = getint(data, offset, 1)
        fileinfo['numprops'], offset = getint(data, offset, 1)
        fileinfo['properties'] = {}
        for ii in range(fileinfo['numprops']):
            propname, offset = getstring(data, offset)
            propval, offset = getstring(data, offset)
            fileinfo['properties'][propname] = propval
        mbdb[fileinfo['start_offset']] = fileinfo
    return mbdb

def process_mbdx_file(filename):
    mbdx = {} # Map offset of info in the MBDB file => fileID string
    data = open(filename).read()
    if data[0:4] != "mbdx": raise Exception("This does not look like an MBDX file")
    offset = 4
    offset = offset + 2 # value 0x02 0x00, not sure what this is
    filecount, offset = getint(data, offset, 4) # 4-byte count of records 
    while offset < len(data):
        # 26 byte record, made up of ...
        fileID = data[offset:offset+20] # 20 bytes of fileID
        fileID_string = ''.join(['%02x' % ord(b) for b in fileID])
        offset = offset + 20
        mbdb_offset, offset = getint(data, offset, 4) # 4-byte offset field
        mbdb_offset = mbdb_offset + 6 # Add 6 to get past prolog
        mode, offset = getint(data, offset, 2) # 2-byte mode field
        mbdx[mbdb_offset] = fileID_string
    return mbdx

def modestr(val):
    def mode(val):
        if (val & 0x4): r = 'r'
        else: r = '-'
        if (val & 0x2): w = 'w'
        else: w = '-'
        if (val & 0x1): x = 'x'
        else: x = '-'
        return r+w+x
    return mode(val>>6) + mode((val>>3)) + mode(val)

def fileinfo_str(f, verbose=False):
    if not verbose: return "(%s)%s::%s" % (f['fileID'], f['domain'], f['filename'])
    if (f['mode'] & 0xE000) == 0xA000: type = 'l' # symlink
    elif (f['mode'] & 0xE000) == 0x8000: type = '-' # file
    elif (f['mode'] & 0xE000) == 0x4000: type = 'd' # dir
    else: 
        print >> sys.stderr, "Unknown file type %04x for %s" % (f['mode'], fileinfo_str(f, False))
        type = '?' # unknown
    info = ("%s%s %08x %08x %7d %10d %10d %10d (%s)%s::%s" % 
            (type, modestr(f['mode']&0x0FFF) , f['userid'], f['groupid'], f['filelen'], 
             f['mtime'], f['atime'], f['ctime'], f['fileID'], f['domain'], f['filename']))
    if type == 'l': info = info + ' -> ' + f['linktarget'] # symlink destination
    for name, value in f['properties'].items(): # extra properties
        info = info + ' ' + name + '=' + repr(value)
    return info

verbose = True
if __name__ == '__main__':
    mbdb = process_mbdb_file("Manifest.mbdb")
    mbdx = process_mbdx_file("Manifest.mbdx")
    sizes = {}
    for offset, fileinfo in mbdb.items():
        if offset in mbdx:
            fileinfo['fileID'] = mbdx[offset]
        else:
            fileinfo['fileID'] = ""
            print >> sys.stderr, "No fileID found for %s" % fileinfo_str(fileinfo)
        print fileinfo_str(fileinfo, verbose)
        if (fileinfo['mode'] & 0xE000) == 0x8000:
            sizes[fileinfo['domain']]= sizes.get(fileinfo['domain'],0) + fileinfo['filelen']
    for domain in sorted(sizes, key=sizes.get):
        print "%-60s %11d (%dMB)" % (domain, sizes[domain], int(sizes[domain]/1024/1024))

I placed the script in my home directory for now. Later I’ll move it off to the Applications directory. Setting the script to executable, I then set out to locate the manifest db files. To do this, I leveraged the find utility (don’t worry Windoze users… you’re not missing this utility, you never had it in the first place). I thus located these 3 manifest db files. The one I’m most interested in is dated today:

Now it’s time to run the python script, and grep for the filename I need.

Locating the physical backup filename for the database file

Filename in hand, I check and verify it’s existence. The important part of the data returned is this:

(4096c9ec676f2847dc283405900e284a7c815836)RootDomain::Library/Caches/locationd/consolidated.db:

That number is the real filename. Checking that I see that the file is there. Making a copy of that file available in my home directory (using cp to copy it… that means ‘copy’ for you Windoze users reading from your bunkers).

Making a copy of the file. One never wants to hack on a 'production' data file.

Word on the street, is that this is a SQLite database file. I should be able to confirm that with a simple strings test, and the rumor is confirmed:

Checking to see if the file is an SQLite database file.

I opened the database file, and selected the first 5 records, and last 30 records from the CellLocation table (rumored to contain the data of interest).

The last 5 records recorded are:

MCC|MNC|LAC|CI|Timestamp|Latitude|Longitude|HorizontalAccuracy|Altitude|VerticalAccuracy|Speed|Course|Confidence
310|410|42979|9468182|325110108.640637|47.24654626|-122.43737727|2164.0|0.0|-1.0|-1.0|-1.0|70
310|410|42997|9468176|325110108.640637|47.24717628|-122.43819308|500.0|0.0|-1.0|-1.0|-1.0|50
310|410|42997|6781206|325110108.640637|47.24570667|-122.43808859|2138.0|0.0|-1.0|-1.0|-1.0|50
310|410|42997|7895312|325110108.640637|47.2472279|-122.43625974|1550.0|0.0|-1.0|-1.0|-1.0|70
310|410|42985|6781206|325110108.640637|47.24575543|-122.43641382|500.0|0.0|-1.0|-1.0|-1.0|50

Now, the time stamping get’s a little tricky.. it’s seconds since January 01, 2001 (I really don’t want to do the GMT / epoch offsets right now), but I don’t need to worry about that, all I really care about is that LAST location the phone recorded for me. If it did, in fact, honor my demand to turn OFF location services, my last point of origin should be in or north of Purdy.

Checking this Latitude and Longitute with Lougle Maps (OK, so it’s a corny movie reference, move on with your big bad selves)… I see….

Well, this does not bode well for the Apple ‘researchers’ that say turning off Location Services solves this problem. As far as I can tell it DOES NOT. I’ll be doing a little more research on this myself later, when I have time to verify the timestamps. But for now, it looks like, regardless if you like it or not.. Big Brother Steve Jobs is WATCHING!!!!

Just a few articles culled from a Google query on iOS4 devices


iOS 4 devices quietly track, store users’ locations | iLounge News

Apr 20, 2011 iLounge news discussing the iOS 4 devices quietly track, store users’ locations. Find more iPad news from leading independent iPod, iPhone,
www.ilounge.com/…/ios4devices-quietly-track-store-users-locations/Cached

Apple tracking location of iOS4 device users, researchers say
Apr 20, 2011 A team of researchers have discovered that iOS4 is secretly obtaining your location and recording it to a hidden file, raising obvious
www.betanews.com/article/Apple-tracking…iOS4device…/1303319892

Got an iPhone or 3G iPad? Apple is recording your moves – O’Reilly
Apr 20, 2011 Ever since iOS 4 arrived, your device has been storing a long list of ….. Why not just visit http://oo.apple.come from any IOS4 device and
radar.oreilly.com/2011/04/apple-location-tracking.html


  • Apple tracks your location in iOS 4 without your permission
    2 hours ago 

    From the moment you switched to iOS 4,your device has been storing a long list of coordinates(latitude – longitude) and timestamps.

    Top Buzz News2846 related articles

  • Passing of a friend. Memories of Allie Daneman

    Today I have a very, VERY heavy heart. Yesterday I learned of the passing of a friend. Allie Daneman (aka Drainfade) left us yesterday at the age of 38. I miss him already.

    I first met Allie 10 years ago, via the Pacific Northwest VFR list.

    Having both grown up the S.F. Bay Area, we immediately hit it off. Allie was always a joy to ride with, we met up for rides often. He had and energy and passion for motorcycles that was infectious.

    It was with great sorrow, we’d learned of his cancer diagnosis, just a short couple of years later. It was a grave prognosis. Melanoma. Skin cancer. And it was in an advanced stage. But he forged forward with the therapy. He told me about the horrendous descriptions of what the Chemotherapy would and could do to his body. But he had a great passion for life and his family, and he persevered.

    He bravely fought the battle for 8 years. Far surpassing expectations of survival. He was, a fighter!

    Recently he’d asked me a question about Short Course R/C truck (he has and SC10, similar to mine). Sadly, I didn’t find the answer to his question before he passed. Not that it matters any more, but I hate not having had the chance to be a friend to him, just one more time, and send some help his way.

    Sadly, I didn’t know how badly things had recently being going for Allie. For those strong enough to read it, his blog tells the frank and sobering story of a man preparing for the end. It was difficult to read, but I felt important to do so.

    I’m having a hard time getting my thoughts together today. I’m been in shock since I found out around 5:00PM yesterday. We had some great times, and when I started this entry… my intent was to focus on those good time, sharing a few stories… but.. I just can’t do it right now. Instead I’m including the obituary from his own website.

    Allie George Daneman age 38 passed away on April 5, 2011, after a courageous 8-year-plus battle with melanoma. He is survived by his wife Jennifer of almost 13 years, their three children Ben (10), twins Toby and Jessi (8), brother (Jake), parents , Stepmother, Grandmother, Uncles, in-laws, brother-in-law, Stepfather. A native Californian, Allie was born on November 28, 1972 and grew up in San Francisco. He graduated from The Athenian High School, a Bay Area private college prep. school, in 1991. Allie holds a BS Degree in Business and Public Administration from U. of the Pacific, Stockton, CA. At UOP, he belonged to the Omega Phi Alpha Fraternity and played on the Lacrosse team. Allie worked as a Network Engineer for Alcatel-Lucent, T-Mobile USA Integrations Lab in Bellevue, WA. He loved to snow ski and snowboard. Allie was an avid motorcyclist and maintained a blog of his motorcycling exploits, culminating in his annual ride from Seattle, WA to the Laguna Seca MotoGp races in Monterey, CA. Motorcycling was more than a hobby for Allie–it was his passion. His family and friends will miss him immensely as his undying spirit freewheels in eternity. In lieu of flowers, memorial donations may be made to the Daneman Family Fund at US Bank. Memorial Service will be held on Friday, April 8, 2011

    The silver lining in this, is that he’s at peace now. No longer in pain, and free to ride the skies at will.

    Godspeed Allie. We’ll all miss you my friend. We’ll miss you a lot.

    It’s here! The TLR22. And it’s built!

    Ah.. YES! Months of waiting. Reading the press releases. Seeing the sneak-peek spy photos, hearing the team drivers talk about this amazing new car. This (r)evolution in 2wd 1/10th scale RC Racing. Innovation, engineering, a radical remake.

    The Hype surrounding this new (model / toy) car was intense! Just read this little blurb from Team Losi Racing (TLR) about the brand new TLR22!

    The Team Losi Racing 1/10-scale 22 2WD Electric Race Buggy Kit is an entirely new racing platform. Without a doubt, it will reignite 1/10-scale electric racing throughout the world. The TLR 22s innovative design takes full advantage of envelope-pushing Li-Po and brushless power. It is the only platform of its kind to offer all the hardware needed in a single kit to build a rear- or mid-motor configured chassis. The 22 is about to change all the rules.

    So.. I, of course, had to order one. And on April 1st, it arrived at the local Hobby shop (along with 11 others) for a bunch of the local racers. Mine, was #7 (at our shop, 1533 worldwide, based on it’s serial number), so the body of the car carries that number.

    Without further reading, here are some pictures of the new TLR22, along with the older Associated Factory Team B4 I’ve been racing for about a month now. As you will see, the 8 year old AE design is really showing it’s age.

    AE FT b4 (left), TLR 22 (right). The difference in body is astounding.

    The side view of the car exemplifies it’s sleek new design.

    TLR22 In Profile

    Compare it to the ‘current’ B4 class buggy from Associated. It’s a bit like comparing a runner, to a bowler.

    Current offering from Team Associated (AE), the B4 (and B4.1)

    Here they are with their bodies off. Both are fitted with Stock Club Racing 17.5T brushless power systems, SAVOX high-speed servos, and the new 96mm compact 60C LiPo, which was designed specifically for the TLR22 by Losi’s battery division.

    AE B4 is on the left. You can see that positioning of the electronics is a lot further off the center line, increasing the tendency for the vehicle to roll over in turns. Compare that to the compact, down the middle design of the TLR22. But the differences go far beyond that. If you notice, the older B4 is a rear engine design. By contrast the new TLR22 can be built either rear motor, OR, as I have done here, mid-motor! I’m aware of only one other off-road 2wd mid-motor buggy currently available. But this is the only kit that was designed to be built either way, and comes with all the parts to do it right in the box.

    The guts, that bring the glory. (B4 left, TLR22 right)

    In mid-motor configuration, the power controller (ESC) is located on a bracket right above the motor and transmission. Space is VERY limited so wiring must be compact and tidy. No room for sloppy just wire it up work (which I never do anyway). It was a challenge to get it even this tidy. Others have produced even cleaner looking installations by using all the same color wire. I decided to stick with the stock multi-color wiring supplied with the ESC, and power leads from the battery manufacture. You can’t hardly go wrong doing that.

    Speed controller and battery wiring.

    Here you can see the motor, it’s wiring, transmission (to the left of the motor) and receiver antenna. Even with the smallest 2s battery in the RC off-road industry, space is at a premium!

    Motor wiring and installation.

    Servo and receiver location was no picnic either. Here I’m running a 3/4 length Titanium geared .07 ms high-torque servo (yes, yes.. it’s as expensive as it sounds, and without a servo-saver in the design, it’s also in a fair degree of peril!). Just behind the SAVOX SH-1257TG servo, is the Futaba sport 3-channel 2.4GHz FHSS receiver. The control center for all that is fun and right in the buggy. One of the many advantages of the 2.4GHz system (aside from eliminating the need for crystals and frequency pins or flags) is the very show length antenna. Running an old 75 or 27 MHz antenna (about 11″ long) would just ruin the look of this car. And I’m sure you understand how important it is to look good!.

    Just behind (to the right) of that is the 7.4V 3800mAh 2S2P 60C 96mm LiPo. It’s the battery that makes all of this possible.

    Finally, one last photo of just the TLR22, wired and ready for racing:

    TLR22

    Expanding Race Fleet – adding more 2WD fun

    If you read my post on 28-February, you might recall that I mentioned the purchase of a new 17.5T power kit,


    I also said there would be a post about about what I planned to use that in. Well, so maybe I didn’t post up soon, but I am posting about it now.

    The kit was ordered from TQRacing in Southern California and it arrived in 3 days! They shipped it within hours and the USPS had it on my door step in plenty of time to get it all sorted out before the next race!

    Package of goodies from TQRacing

    What’s in the package? 3 things. A Speed Passion ESC (aka speed controller), Speed Passion 17.5T Club Spec motor, and the required mini programmer. And the thing at the top is a well worn Team Associated Factory Team B4 buggy, circa 2007. If there was a VIN on thing thing it would show many, many owners, me just being the most recent. In fact it’s quite amusing to run it at the track. Already two different people have come up to me and mentioned that they used to own my buggy at one point. So it’s not the freshest horse in the race, but it was well maintained by the previous owners, so it was a very worthy purchase:

    • B4 Factory Team Roller: $90
    • SAVOX High-speed Servo: $25
    • Speed Passion 17.5T (Club Spec Stock) kit: $90
    • Futaba 603FG 2.4 GHz FHHS receiver: $45
    • 3 full tire and wheel sets: Included
      Total Cost: $250

    Quite a savings over the $260 cost of just the factory kit alone.

    Parts for next race class - 2wd Stock Buggy.

    Only one problem with this kit. The sensor wire is WAY too short! This kit is designed for on-road vehicles primarily which use mid-mounted motors, as opposed to the off-road designs that use the rear-engine (ala VW Bug) mounting. This was the only problem I had getting the buggy running that night. Time was short and I didn’t get to the track / hobby shop in time to get a longer sensor wire until race night.

    Speed Passion 17.5T motor and sensor wire loom

    This little hitch was not enough to keep me from getting everything else mounted up in the buggy. It’s a nice thing that the ESC is so small, the dimensions of the buggy are pretty tight!

    Assembled B4 2wd Race Buggy

    You may notice that the batty wire leads are still bare. That was the 2nd thing I need to complete, was purchase of a male DEAN’s connector and adapter cable. Or, at least that was the plan! It turns out the deans connector costs $4.00. The adapter cable for my batteries cost another $12. BUT, for only $8.00 I could get an 8-pack of 4mm plated bullet connectors (good enough to do two vehicles) and eliminate the 2nd connection resistance in the DEANS, and go direct from ESC to battery. And that’s exactly how I solved the problem. Sorry, no photo of that at this time. I’ll try to add one later.

    So.. finally, here it is. Ready for action. Most of the guys said I should practice my first few hours with the tires as is, before I go ahead and convert the to slicks, which our off-road cray track is best suited for. So, you see the worn Panthers in this photo.

    B4 built up, and almost ready to go (sensor and battery soldering would be completed later)

    Here it is ready for action, with it’s bigger team mate, the might SC10.

    SC10 and B4 ready to run.

    More to follow about buggies. I won’t say exactly what I have in store next, but it’s going to be one trick kit. I just hope the rumors of shipping to the hobby stores before the months’ end is true!

    Converting from Open to Stock Short Course

    It didn’t take long for me to figure out that I had A LONG way to go before I belonged running Open Short Course trucks. Even though I had the monster motor in the class with a 7.5T Novak (most other racers were running 10.5T or 13.5T – lower the turns, the faster it spins up and higher the max RPM, more akin to 2-stroke, as opposed to the torque motors in the 17.5T and higher windings, which are more akin to a big displacement thumper).

    Even with quite a power advantage… I was.. well.. toast. 5 laps down on the leader. This is no place for a rookie.

    Open Short Course Racing

    Still being fairly new to the hobby, I was a little light on motor options, having only a 13.5T Novak and the 7.5T Novak I was already running. Having been kicked up form novice, I was either stuck racing Open class with those motors, or I’d have to spend about $100 on a new 17.5T motor. And in stock class you can’t afford to skimp on the motor, you need the best 17.5T motor you can afford. Add that to the fact I HATE THE NOVAK GTB speed controller. It’s so complex to program with the little push-buttons and lights. And it never seemed to really take the programming, even though the status lights clearly showed that I’d done it right. It was frustrating to say the least. So, in a state of excitement, frustration and resignation to my own personal quirks (let’s just call them imperfections, shall we, at least I’ve learned to recognize them, if not yet fully control them), I knew I’d stew over the purchase for weeks and weeks, eventually it would become the source of anxiety and finally depression, after which I would spend the money. So, I saved myself the 5 states of loss and took the $270 medicine up front:

    Tekin RS + 17.5T Kit

    Thus, I set about removing my Novak GTB system and installing the RS. However, I had one unresolved matter I had to attend to first. My last race with at the wheel of the uber-powered truck, had really done a number on it:

    Serious damage to chasis. Trucks are not supposed to be 'Two Piece' afairs.

    The cost of a new chassis is not really a consideration (under $30), however, it’s the chassis! That means everything mounts to it. To replace this part would require a 50% rebuild of the entire truck. That’s potentially hours of effort. Effort that would have to be duplicated again if I have just one really bad landing, or under-dump and lawn dart the thing.

    However, I did have a solution. One that requires the purchase of a $19 aftermarket front bumper kit, of which 2/3 are discarded, and the other 1/3 requires modifications to perform the job of taking the place of the broken chassis nose.

    RPM to the rescue!

    RPM SC10 Heavy Duty Front Bumper Kit (only lower section is retained)

    Following the Frankenstein repair to the front clip, the next order of business was a complete rebuild of the front shocks including a re-valve, new springs and silicon oil change. Here is the final setup:

    Rebuilt SC10 Shocks. Rear (l.) & Front (r.)

      Front Dampers Rear Dampers
    Valve Piston: #3 #2
    Shock Oil: 40 wt. 30 wt.
    Spring: Red (3.90 lb./in.) Silver (2.10 lb./in.)
    Down Stops 4 (.120″) 7(.210″)

    Mounting the motor was very mostly straight forward. However, there was not enough adjustment in the motor mount plates to get the 29T pinion gear I needed to fit with my 84T spur, so I bought a new gear set with a 75T spur gear and 27T pinion. With the 15 degrees of physical motor timing (see photo) I have on pretty quick stock truck. Sure I’m topped out on speed by the end of the straight compared to the Mod trucks, but I have gobs of low-end torque that gets me up and over the jumps with almost no run-up. 6′ of air time is no problem at all with this setup. I can easily clear the 4-hump rhythm section with a quick punch of the throttle.

    Some of you new or simply unfamiliar with surface brushless systems might wonder what the extra cable bundle is near the bottom of the motor. That’s the sensor harness. This measures the inrunner’s RPM, feeding back position and speed to the ESC, which allows it to automatically detected cogging at low RPM, and smooth the pulses, giving the driver very smooth and easy to control power compared to non-sensored systems. Having had both, I can say first had that this *DOES* make a difference. You lose some of the potential torque of the motor, since some magnet space is given up to the sensor, but power is nothing if you can’t get it all to the ground. The sensor provides the ability to do just that.

    Tekin 17.5T mounted.

    Mounting of the speed controller was simpler than the big and bulky Novak I was replacing. The profile is so low it barely extends above the sides of the chassis. The solder posts on the controller are also a thing of beauty. Vastly superior to the solder points on my Novak and most other ESCs I’ve seen so far. Easy to heat, plenty of post length, and slotted so you can mount wires horizontal (as I did) or vertical, depending on whim. The three wires on the left control the motor, the two on the right (with capacitor) are the battery power leads. Sensor harness plugs into side of ESC (right). Another bonus on the Tekin is the topside status LED bar, not on the side like the Novak and XP I’ve had in other vehicles. Another example of learning from racing. Put it where people can see it! Seems simple, yet.. so difficult for some companies to ‘get’

    Tekin RS Speed Controller

    The last two updates made with this conversion, was the witch to the light-weigh 2/3 height SAVOX SC-1251 Metal Gear Digital Servo. This is a lot smaller than the stock XP (sloooooow) or the black body SAVOX I was running before. Also in this photo is my personal truck transponder. Other than the ESC, this was the single most expensive part in the entire truck. This is the newest RC4 compatible hybrid transponder from MyLaps. A lot of tracks (including the one that I use) had track transponders available to borrow for a race. They are basically free. So why buy my own at such great expense? 3 reasons: 1) I can get my practice day times logged for analysis 2) the RC4 hybrid is about 2/3 the size of the others and also lighter 3) I can permanently mount it anywhere I need for best signal.

    SAVOX 1251 and MyLaps Transponder

    I’ll say this right now, the position in the photos is good, but not ideal. The metal gear servo interferes with the transponder (another advantage to owning your own, you can test transponder positions to find the optimal signal). I have since found a better position for the transponder. However, it’s exact position is now a closely held secret and an advantage I have on the track.. so.. don’t expect me to spill the beans on the net, you’ll have to join me at the track to see what I’ve since done.

    Novice SC10 Racing in Review



    You never really know anything, unless you measure, at least, something. So, a while back I started to keep track of my lap times recorded during racing.

    Now that my NOVICE R/C days are behind me, I thought I’d look back at how long I’ve been racing and how far I’ve come from that first round of racing on 27-December-2010.

    My run in NOVICE consisted of 14 events, between 27-DEC-2010 and 21-FEB-2011. Roughly 2 months worth of racing every available event at BRCR (Bremerton R/C Raceway).

    All of the racing represented here was done with the following setup, with the exception of 21-FEB (I’ll cover that next).

    Truck: Team Associated Factory Team SC10
    ESC: Novak GTB speed controller
    Motor: Novak 13.5T brushless*
    Power: Venom 3800mah/35C and Venom 5000mah/50C
    Radio: Futaba 2PL

    * Ran single race with Novak 7.5T brushless

    Now, here is a look at the data in graphs. Where the lines start to converge, those are the heats or races where I was most consistent. Looking over the 14 round history, my fastest times have not improved that much. However my consistency has, and that’s one of the more important factors in winning. Crashing is a REAL time killer. It can easily cost you 1/2 a lap, sometimes more.

    Heat Races

    Novice Heat Races - Short Course SC10

    It’s pretty clear in this graph, that although I had one of my best laps in my first race, my consistency was garbage. I was trying to go fast, really fast, and what I ended up doing was a lot of crashing, and a few decent laps.

    Towards the end, in the last few nights running in Novice, you can see that my times have tightened up a lot, and my 5-lap average is starting to get pretty close to my all-time fastest laps. Not crashing, and running good consistent laps is crucial to being able to win races.

    A-Main Finals

    Novice A-Main - Short Course SC10

    Here it’s a little less obvious. In my 3rd round of racing, I put down my fastest times, and my averages were pretty good too, but I was not yet winning. It was just a fast race. Track conditions are also a factor, this is why it’s important to include the fast-5 and fast-10 averages, to give some context to that fast time. It looks like the track was just ‘fast’ that night.

    It’s also important to point out that right about the middle of January the track underwent a massive chance for ETC round #4, head at my local track.

    When I start the analysis of my ‘Stock Short Course’ racing times, all of those will be on the same track we are currently running.

    Monday Night Racing! 2nd round of racing in the Stock Short Course Class

    2nd night of racing in the Stock Class was last night. Turn out was a little down, and there were only 2 Stock class trucks, so we raced with the Open Class Short Courses as well. It was quite a battle. I slowed myself down, just trying to put together clean runs, and my times clearly show that I started going slower.

    What was encouraging, was that the other stock truck (driven by Evan) placed very well compared to the unlimited modification, unlimited power, unlimited budget trucks. Pretty impressive! 🙂

    Monday Night A-Main Results

    * I need to get Bryan to fix my name!

    I spent some time in between rounds talking to a few of the really fast guys. All of them said. “If you want to get fast. If you want to get better, Race Buggy!. Hm… really? Buggy? I’m going to have to look into that.

    For now, here are the 3 rounds from last night, in graphic form. Even though I was slowing it down, I ran a few of the fasted laps ever in stock, and some of the slowest laps I’ve ever run too. I really need to work on my consistency!

    Since Stock class racing is where I’m going to focus in the short term, I decided to get a second Stock ESC system. This one is a CLUB SPEC system to toss into one of the other fleet vehicles here. I saw a couple of good comments on RCTECH.NET about ordering from TQRacing, and as noted by them, the pricing was the best I’d found anywhere. Plus, I’m glad I checked RCTECH.NET and found out that you NEED a programming card for the thing! Well, TQ had it in stock, at 1/2 what A-Main was listing. All in all, I saved about 25% over the price at A-Main (and another 9% by getting free shipping). That’s a pretty big savings!

    Ordered a 17.5T  *STOCK* power system.

    I’ll post a photo of what it’s going into later. 😀

    Looking back at my race lap times… I ran my fasted in Novice. Maybe because I had a better chance at a clean run? In most of the stock races I’ve been taken out with great success in the first couple of laps. Once I had a 58 second first lap!

    Here is a list of the fastest times since I started to keep track:

    Fast Lap Fast-10 Average Power Class Date
    23.67 (16) 25.31 7.5T Novak Novice 21-FEB
    24.7 (10) 26.76 7.5T Novak Open Short Course 23-FEB
    24.73 (11) 26.72 17.5T Tekin Stock Short Course 26-FEB
    25.38 (7) 27.76 17.5T Tekin Stock Short Course 26-FEB
    23.97 (5) 26.02 17.5T Tekin Stock Short Course 28-FEB

    Here is a neat little graph of the available data:

    Fast times and Fast-10 Average for last week.

    The good news from all this, is that I’m staring to get back to the same times I was running with my big 7.5T motor compared to the new 17.T motor, which basically has 1/2 the power.

    The old adage seems to be proving itself out in the numbers. It’s mostly the driver!