<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-37639941</id><updated>2011-04-21T19:28:48.023-07:00</updated><title type='text'>Nerd Expo</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>65</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-37639941.post-8441586375015836747</id><published>2008-04-21T23:35:00.001-07:00</published><updated>2008-04-21T23:47:46.440-07:00</updated><title type='text'>Thunderhill notes for 4/21</title><content type='html'>Thunderhill Fast Lap Notes&lt;br /&gt;&lt;br /&gt;Upgraded tires to 210 15" from 195 14" RT615s.&lt;br /&gt;2:25.6 (previous best was 2:32)&lt;br /&gt;Laps were really inconsistent.  Still getting used to new tires.&lt;br /&gt;&lt;br /&gt;Previous 14:&lt;br /&gt;Actual: Slowed down to 50 before turn and drop to 45 going to 15&lt;br /&gt;Note: Need to slow down more and stay on gas through 15&lt;br /&gt;&lt;br /&gt;Previous 15:&lt;br /&gt;Actual: Exit at 60.&lt;br /&gt;&lt;br /&gt;Front Straight:&lt;br /&gt;Actual: reach 95mph&lt;br /&gt;53&lt;br /&gt;Turn 1:&lt;br /&gt;Actual: Enter 80mph and exit 76mph (Bad)&lt;br /&gt;Note: Need to slow down more and get on full throttle before apex&lt;br /&gt;&lt;br /&gt;Turn 2:&lt;br /&gt;Wide: Enter 69; Slow to 44(come in) trying to come in; Exit 66; Time 5.3 seconds&lt;br /&gt;Inside: Enter 70; Exit 53(slowest); Time 5.1 s&lt;br /&gt;Normal: &lt;br /&gt;&lt;br /&gt;Turn 3:&lt;br /&gt;Actual: 1/3 from inside most of way (newer line)&lt;br /&gt;Note: Try inside all the way again except entry (original line)&lt;br /&gt;&lt;br /&gt;Turn 4:&lt;br /&gt;Note: hit apex&lt;br /&gt;&lt;br /&gt;Turn 5:&lt;br /&gt;Actual: Slow to 34, turn and gas.  Some oversteer due at crest to get car around.&lt;br /&gt;        Full throttle til 6&lt;br /&gt;Note: Work on quick low speed turn without sliding back tire&lt;br /&gt;&lt;br /&gt;Turn 6:&lt;br /&gt;Note: Try to get on gas earlier&lt;br /&gt;&lt;br /&gt;Turn 8: &lt;br /&gt;Note: Need to tap, turn, go full throttle by apex and stay there until 9&lt;br /&gt;&lt;br /&gt;Turn 9:&lt;br /&gt;Note: Need to gas before apex.  Hill will slow car down&lt;br /&gt;&lt;br /&gt;Turn 10:&lt;br /&gt;Note: Need to late apex more and get on gas sooner&lt;br /&gt;&lt;br /&gt;Turn 11:&lt;br /&gt;Note: Slow to about 30mhp(really slow), whip car around and gas&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-8441586375015836747?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/8441586375015836747/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=8441586375015836747' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/8441586375015836747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/8441586375015836747'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2008/04/thunderhill-notes-for-421.html' title='Thunderhill notes for 4/21'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-2426784612507490171</id><published>2008-04-16T12:05:00.000-07:00</published><updated>2008-04-16T12:14:41.623-07:00</updated><title type='text'>Miata Alignment</title><content type='html'>I got my Alignment done today after upgrading to 15" rims with 205 Falken RT615s.&lt;br /&gt;&lt;br /&gt;Left Front&lt;br /&gt; Camber: -1.1 (max)&lt;br /&gt; Caster: 4.4&lt;br /&gt; Toe:    -0.03 (pointing out for better turn in and less stability)&lt;br /&gt;&lt;br /&gt;Right Front&lt;br /&gt; Camber: -1.2 (max)&lt;br /&gt; Caster: 4.8&lt;br /&gt; Toe:    -0.05&lt;br /&gt;&lt;br /&gt;Left Rear&lt;br /&gt; Camber: -1.9&lt;br /&gt; Toe: 0.10&lt;br /&gt;&lt;br /&gt;Right Rear&lt;br /&gt; Camber: -1.9&lt;br /&gt; Toe: 0.12&lt;br /&gt;&lt;br /&gt;Tire pressure was +4 in rear with 150lbs weight on driver's side with passenger seat installed.&lt;br /&gt;&lt;br /&gt;For the next alignment, will try to get -2 to -3 camber in front with an aftermarket Camber Kit.&lt;br /&gt;&lt;br /&gt;Front tie racks should be replaced.&lt;br /&gt;&lt;br /&gt;Suspension: Upgrade to Coilovers and stiffer springs (Koni + GC 450/320)&lt;br /&gt;&lt;br /&gt;Need to measure new ride height.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-2426784612507490171?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/2426784612507490171/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=2426784612507490171' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/2426784612507490171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/2426784612507490171'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2008/04/miata-alignment.html' title='Miata Alignment'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-8778694786216010434</id><published>2008-01-30T11:45:00.000-08:00</published><updated>2008-01-30T13:06:20.144-08:00</updated><title type='text'>Laguna Seca at last</title><content type='html'>I finally got some time on the famous Laguna Seca and it did not disappointment.  I ran this a few time on Forza a while back and it was quite similar minus the feel and fun.&lt;br /&gt;&lt;br /&gt;Turn 1 as fast, downhill and blind.  Never really noticed it on Forza, but quite dicey in real life.  I don't think I got this one down as I was never position perfectly going into the braking zone.&lt;br /&gt;&lt;br /&gt;Turn 2 is 2nd gear in a Miata, so it require 2 down shifts.  Braking around marker 3 seems to be about right, but only after the brakes and tires warmed up.  I enter the turn near the middle of the road or toward outside, look at the exit apex right away to gauge the line and speed.&lt;br /&gt;&lt;br /&gt;Turn 3 is slow, but don't bother down shifting to 2nd.&lt;br /&gt;&lt;br /&gt;Turn 4 looks like turn 3, but it's much faster.  I tap the break just before turn in.  The turn in point is between the 2 and 1 marker.&lt;br /&gt;&lt;br /&gt;Turn 5 is uphill after the apex and all the high HP cars can pass easily here.&lt;br /&gt;&lt;br /&gt;Turn 6 is also uphill and very fast.  I tap the brakes before turn in and get back on the gas.&lt;br /&gt;&lt;br /&gt;Turn 7 is preparation for the corkscrew.  Start on the left and end on the right.&lt;br /&gt;&lt;br /&gt;Turn 8 (cockscrew) is a slow double blind downhill turn.  The braking area is blind and the turn in is blind.  I found that there's a groove at the bottom where it's natural to turn into which helps to hold the car.&lt;br /&gt;&lt;br /&gt;Turn 9 is the funnest turn on the course.  After 8, get back on the far right.  Look to the apex right away, aim your car, and gas it.  Initially, I had a hard time hitting the apex because the traction decreases during the turn.  When done properly, you drift out the outside edge.  I see lots of cars early in the day(myself included), only using half the track on exit.  It just takes a bit of time to get used to this section.&lt;br /&gt;&lt;br /&gt;Turn 10 is nothing special.&lt;br /&gt;&lt;br /&gt;Turn 11 is very slow sharp turn and the most important turn on the entire course.  I'm going back to Forza and see what the recommended line is.  I'm probably taking it too fast and not getting back on the gas early enough is all.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-8778694786216010434?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/8778694786216010434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=8778694786216010434' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/8778694786216010434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/8778694786216010434'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2008/01/laguna-seca-at-last.html' title='Laguna Seca at last'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-4769313837044312153</id><published>2007-11-16T11:32:00.000-08:00</published><updated>2007-11-27T14:20:40.326-08:00</updated><title type='text'>Infineon on Nov 11th</title><content type='html'>I was out there on 11 Nov 2007 with NASA.  It was the Indy configuration with turn 9 and NASCAR 7.  This was about as close to a high speed autocross as I've seen, but still with plenty of time to think about your grocery list.  I was running HPDE 3 which starts with HPDE 2 passing rules on the 1st sessions and progresses to open track by the last session barring too many instances.&lt;br /&gt;&lt;br /&gt;The cars are generally more powerful and more heavily modified in this group than HPDE 1 and 2.  I would venture to say 30%+ of the cars run racing tires, and everyone else had high performance street tires.  I've replaced my 195 R14 Hankook RS2 with a 195 R14 Falken Azenis.  They seem to stick a bit better but wear quicker.  It's possible that I need an alignment again, but I want to wait until I get a new suspension setup.&lt;br /&gt;&lt;br /&gt;Infineon being so close to the Bay Area had a much larger attendance than Thunderhill.  I guess we had about 50 people in HPDE 3 all running at the same time.  About half the group just moved up from HPDE 2 and a good portion of the participants had not been on Infineon before, me included.  I ran into someone I meet on my 1st track day who drives a white BMW.  I’ll be sending him updates of my future track days and hopefully meet up again.&lt;br /&gt;&lt;br /&gt;The track conditions were very good that day.  It rain the day before, but what little water was on the track dried out by the 2nd session.  There was also a 2 hour of racing before HPDE groups hit the track, so the track did have some fresh rubber laid out for us.&lt;br /&gt;&lt;br /&gt;This was the 1st time I did not touch dirty all day.  I felt much more controlled and was able to put the car pretty much where I wanted.  I was pretty smooth all.  With stiffer springs, I should be able to push a bit hard on the turns and still be in the sweet suspension travel range.&lt;br /&gt;&lt;br /&gt;Driving the Track:&lt;br /&gt;&lt;br /&gt;http://www.youtube.com/watch?v=anzucv0N-IM&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-4769313837044312153?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/4769313837044312153/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=4769313837044312153' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/4769313837044312153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/4769313837044312153'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/11/infineon-on-nov-11th.html' title='Infineon on Nov 11th'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-1854405352749990623</id><published>2007-10-17T14:16:00.000-07:00</published><updated>2007-10-19T19:59:36.469-07:00</updated><title type='text'>Notes for Thunderhill Clockwise w/Pass Through on 5</title><content type='html'>Here's my video which is exactly the line I'm going to describe. &lt;br /&gt;&lt;br /&gt;http://www.youtube.com/watch?v=pDd08rv25Wk&lt;br /&gt;&lt;br /&gt;The turn numbers will be the same as counter-clockwise, but I'll be starting on 15.&lt;br /&gt;&lt;br /&gt;15. Downshift to 3 and run over the inside berm.  This is a no no going clockwise.  Get a couple of wheels on the run off, but not all 4.  You may get black flagged if you use too much run off.&lt;br /&gt;&lt;br /&gt;14. It's still a blind turn where both the apex and exit points are not visible at turn in.  I put the Miata's inside wheels into the ditch at apex and it did not disturb the car much.  An instructor in a Super 7 tried it and did not like the feel of dropping the inside wheels into the ditch.&lt;br /&gt;&lt;br /&gt;13. Tap the brakes and apex early for 13.  Do the hard braking between 13 and 12.&lt;br /&gt;&lt;br /&gt;12. This is a throw away turn.  Do the entire turn on the inside and stay left.  11 will come up so fast, there's no time to position the car after the turn.  Downshift to 2nd in the small straight after 12.&lt;br /&gt;&lt;br /&gt;11. Put 2 wheels in the run off area, but like 15, putting 4 wheels on it may get you black flagged.&lt;br /&gt;&lt;br /&gt;10. I upshift to 3rd before the turn.  A small tap or lift is all that's needed in the Miata.&lt;br /&gt;&lt;br /&gt;9. At the bottom of the hill, you should be on the right side.  Move toward the left such that you'll be parallel with the berm coming over the top.  The only way to learn this is to start very slow and find the proper line.  You can get in trouble here if you come in full speed to the top of the hill and find the car pointed in the wrong direction.  You'll need all your traction for braking at the top.&lt;br /&gt;&lt;br /&gt;8. If it's not wet, get 2 wheels on the outside berm before the turn in.  You'll be carrying a lot of speed coming downhill from 9 and will need to get on the brakes at bit. It's questionable when it's the best time to shift to 4th.  I do it before the turn in because I don't want the risk of hitting the rev limiter when I'm going full throttle around the turn.  It'll be a spin out if the gas cuts off for a bit.&lt;br /&gt;&lt;br /&gt;7. Wow, this is actually a turn now.  Your best bet is to spot the braking zone for 6 ASAP.  Go slow and find some type of landmark if possible.  It's pretty hard to do out here.&lt;br /&gt;&lt;br /&gt;6. I downshift to 3 and hit the apex.  However, I let the car drift out to the outside instead of staying inside.  The turn in for 5a(passthrough) will be sharper, but manageable.  Many people will stay tight to the right side here and my line provides me with a passing opportunity.&lt;br /&gt;&lt;br /&gt;5a(Passthrough). You can get air on the left side.  Stay around the middle to avoid this.  Getting air is fun, but time in the air is time you can't accelerate.&lt;br /&gt;&lt;br /&gt;4. Nothing special&lt;br /&gt;&lt;br /&gt;3. You can start inside or near the middle.  I think starting in the middle and slowly coming back inside is a better line.  The car seems to settle better.  But if someone is on your tail, then stay inside.  Otherwise, they'll sneak inside and you'll get stuck in the negative camber part of the track all the way around the turn.  Alternate between looking in front and at the side of the hill.  The latter helps somehow, but I'm not sure why.  Have patience and don't drift out until you near the crest.  Learn where to drift out bit by bit, else you'll find that the road can run out quickly.&lt;br /&gt;&lt;br /&gt;2. I have a hard time around this one regardless of which direction I go.  I alternate between looking in front and at the exit.  If someone is not to my inside, I use throttle steer to get the front pointed in so I can hit the apex.  You got time, so look in your mirrors to see who's catching up and may attempt a pass at turn 1.&lt;br /&gt;&lt;br /&gt;  The Legend cars I watched exit turn 3 and pushing all the way to the outside (this is hard to do and I spun once trying this when I misjudge the exit as it's hard to see until you get over the crest).  The the Legends move all the way to the left side before entering turn 2.  I guess they're taking the largest geometric arch around the turn.&lt;br /&gt;&lt;br /&gt;1. You can get a bit of a drift around this corner, but don't spin out.  The pit wall is painful.  There's probably a blend line that's consider out of bounds for safety.  Do be aware of other cars before the turn because this is a popular passing corner for cars that catch up in turn 2.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-1854405352749990623?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/1854405352749990623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=1854405352749990623' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/1854405352749990623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/1854405352749990623'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/10/notes-for-thunderhill-clockwise-wpass.html' title='Notes for Thunderhill Clockwise w/Pass Through on 5'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-4095564921555774830</id><published>2007-10-04T12:12:00.001-07:00</published><updated>2007-10-06T22:42:59.126-07:00</updated><title type='text'>Buttonwillow Raceway - Race Configuration 1 Clockwise</title><content type='html'>Buttonwillow Raceway&lt;br /&gt;&lt;br /&gt; I just ran there yesterday for the 1st time and that track is great.  It's got lots of turns and configurations.  I ran Race Configuration 1 clockwise with the Golden Gate Lotus Club.  These guys put on a great bare bones event.  There were about 60 of us divided into 2 groups.  There are 3 20 minute sessions every hour from 10 to 12 and 1 to 5.  The 1st group can run the beginner or intermediate sessions.  The 2nd group can run intermediate or advance sessions.  That comes out to 40 minutes of run time per hour for 6 hours.  That's 12 20 minute sessions.  NASA gives you 4 20 minute sessions.  SCCA and most other vendors gave you 5 25/20 minute sessions.  This is basically 3 track days in one and most guys don't run all the sessions they're entitled to, including myself.&lt;br /&gt; I ran off track twice, but that's only 0.66 run off average per normal track event. considering how many sessions I got.  This track have lots of run off space, but it's full of soft dirt that'll shoot up in the air and hang for minutes.  Your car, inside and out will be completely covered.  Even my center console compartment got dirty that time I spun out in the dirt.  I checked all my wheels and had to gouge out small pebbles lodged between the wheels and tires.  Running clockwise on Race Configuration 1, there wasn't really any chance to hit solid objects, but if this same configuration was ran counter clockwise, Sunrise will be quit dangerous.&lt;br /&gt;&lt;br /&gt; Here's my strategy for Race Configuration 1 running clockwise.  All the turns there have names instead of numbers because of the ability to configure the track in so many different ways.&lt;br /&gt;&lt;br /&gt;Sunrise:&lt;br /&gt; Standard 90 degree turn.  Becareful not to get you wheel on the outside berm when braking.  Hit the inside berm.&lt;br /&gt;&lt;br /&gt;Offramp&lt;br /&gt; Late apex on the left before the tight loop.  Brake hard and down shift to 2nd.  Turn hard toward the the apex and add gas.  The inside of the track is banked before the apex.  The car should be straight enough to shift to 3nd near the exit.&lt;br /&gt; Another line is to early apex the left before the tight loop.  You would be coming down the middle of the track approaching the tight loop have have a better braking area.  Do a double apex here.&lt;br /&gt;&lt;br /&gt;Cotton Corners (CC)&lt;br /&gt; Slow down a lot, and turn at the end of the left berm.  Run over the inside berm and stay inside.  Tap you brakes and late apex the left turn and run over the berm.  Stay inside.  Slightly late apex the right turn out of CC and get on the gas ASAP.  Upon exit, get to the outside to prepare of Grapevine.&lt;br /&gt;&lt;br /&gt;Grapevine&lt;br /&gt; If you exit CC right, you're car will push all the way to the outside.  As soon you get to the outside, you'll probably start your right turn for Grapevine.  Make sure to run over the inside berm to maximize you exit speed.&lt;br /&gt;&lt;br /&gt;Club Corner&lt;br /&gt;  The funnest series of turns.  This turn is much faster than it seems and the Miata is full throttle here.  I had to lift slight before or after the turn to get back on the right side for the next turn.  It may be possible to take the next turn at full throttle w/o moving all the way to the right side.  Something to try next time.&lt;br /&gt;&lt;br /&gt;Bus Stop&lt;br /&gt; Be careful not to touch the outside berm when braking.  It's easy to do and will seriously unsettle your car.  Look at the exit point and run over the inside berm completely.  This turn is pretty fast.  Immediately move to the left side to prepare for the next turn, however, you probably won't be able to get all the way to the left before starting the next turn.  This is full throttle for the Miata until Riverside.&lt;br /&gt;&lt;br /&gt;Riverside&lt;br /&gt; Stay around the middle of the track and look for the exit apex.  The outside of the track may have debris.  I have to lift slightly to get the front pointed to the apex, but don't do this abruptly.  This is like Thunderhill turn 2 running backwards.  At the exit of this turn, get back to the right side before Lost Hills.&lt;br /&gt;&lt;br /&gt;Lost Hills entry turn&lt;br /&gt; Full throttle, throw the car at the apex, and run over the inside berm.  You got lots of space on the right side, but don't use it all because you want to be on the left for the next turn.&lt;br /&gt;&lt;br /&gt;Lost Hills exit turn over blind hill&lt;br /&gt; Slow down a lot and use a really late apex.  I turn at the very end of the berm on the left and run over the inside berm.  You should be able to go full throttle as soon as you get the car pointed at the apex.  There's some broken pavement on the blind side of the inside berm.  Don't worry about it and it's OK to hit a bit of dirt here.  coming over the hill, your car should be pointed toward the apex of the next turn already.  Just stay on the gas and run over the inside berm for the next turn too.&lt;br /&gt; If you take this car too early, and find that you are still turning after the apex, you'll probably have to lift off the throttle to avoid running off.  This is due to the traction lost while going downhill plus there's a small dip.&lt;br /&gt;&lt;br /&gt;Mazda Star&lt;br /&gt; I got a few different suggestions for this turn from fast drivers.  I believe the line for this one depends solely on the type of car.  If done right, both turns can be turned into a single big turn.  I was able to do this a couple of times, but I also ran off here and got my car covered in dirt.  This is almost like Thunderhill 14/15.  I late apex the 1st turn by waiting until I'm past the left berm before my turn in.  I see another Miata with 15" R compounds turn in early and faster, so it depends on the car and setup.  Once I get the car turned, I start to get on the gas and aim for the exit point.  The exit is about 3/4 of the way on the exit berm.  For the exit turn, I suggest you maintain full throttle and aim the car the best you can toward the entry for Esses.&lt;br /&gt;&lt;br /&gt;Esses&lt;br /&gt; Run over the 1st berm complete and then just touch all the other berms.  My Miata is running ~6000 RPM in 3rd here, so I shift before I hit the berm.  You should be able to accelerate all the way though here including the last left.  I did run over the last left's inside berm once and it wasn't too unsettling.  But a car with stiffer suspension or higher speed may want to just touch that last berm.&lt;br /&gt;&lt;br /&gt;Sunset&lt;br /&gt; This turn is much slower than it appears and you'll be carrying lots of speed into it.  I slow downed to about 4000 RPM in 4th before DS to 3 while still braking.  I start my turn in near the end of the berm and can gas it pretty hard through the turn.  I was pretty careful with this turn because I ran off the track here in the morning.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-4095564921555774830?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/4095564921555774830/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=4095564921555774830' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/4095564921555774830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/4095564921555774830'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/10/buttonwillow-raceway-race-configuration.html' title='Buttonwillow Raceway - Race Configuration 1 Clockwise'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-8823742548348637697</id><published>2007-09-14T16:11:00.000-07:00</published><updated>2007-09-20T13:55:43.654-07:00</updated><title type='text'>Lessons from Seat Time and Instructors</title><content type='html'>Here are a bunch of stuff I got from different instructors.&lt;br /&gt;&lt;br /&gt;1. Slow in and fast out&lt;br /&gt;Contrarian View: Keiichi Tsuchiya says drifting may not be the fastest way around a turn, but it's the most fun.&lt;span style="font-size:-1;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;2. Use the entire width of the track.  Every inch counts, especially getting close to the apex.  Read "Techniques of Motor Racing" by Piero Taruffi to see how much difference this makes.&lt;br /&gt;&lt;br /&gt;3. Hands follow the eyes.  Obvious, but when the shit hits the fan, instinct takes over and people stare at what they want to avoid.&lt;br /&gt;&lt;br /&gt;4. THROW car at apex and add throttle to plant the rear.  This translates to turning the steering wheel much faster and harder than normal driving.  Despite performing this abrupt control movement, the car transition should be smooth.  The car should be settled when initialing the turn.&lt;br /&gt;&lt;br /&gt;5. In a slalom, thinking about planting the rear on the cone.&lt;br /&gt;&lt;br /&gt;6. When 2 tires are in the dirt, ease off the throttle and ease the car back in, or steer the car to the dirt.  If you turn too sharply toward the road, then when all 4 tires are back on the pavement, the car will shoot toward where the wheels are pointed quickly.  Possible hitting another car or a wall.&lt;br /&gt;&lt;br /&gt;7.Allow 1 second to go from no braking to full braking.  This allows time for the front to settle(more weight to transfer to the front).  More weight means more traction.  The actual time it takes for the car to settle depends on the anti-squat geometry of the car and stiffness of the shocks.&lt;br /&gt;&lt;br /&gt;8. Despite what your instructor says, roads will be slightly more slippery in a misty morning.&lt;br /&gt;&lt;br /&gt;9. When you brake so hard that the tires spin, ease off the brake until they roll again.&lt;br /&gt;&lt;br /&gt;10. For sever under-steer, ease off throttle and unwind steering.  The latter sounds logical, but is anti intuitive when you're actually driving.  Normally, when you point the wheels at something but the car isn't turning enough, you turn the wheel more, not less.&lt;br /&gt;&lt;br /&gt;11. On street tires, it's faster to slip a bit, as long as there's no corrective steering needed.  The suggestion came from a kart racer and seems to help my autocross time.  Different tires have different sounds when it's near the edge of traction, but you'll learn what your tires sound like after a few spin outs.&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-8823742548348637697?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/8823742548348637697/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=8823742548348637697' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/8823742548348637697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/8823742548348637697'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/09/lessons-from-seat-time-and-instructors.html' title='Lessons from Seat Time and Instructors'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-3651662088629330146</id><published>2007-08-15T11:21:00.000-07:00</published><updated>2007-09-25T14:10:25.758-07:00</updated><title type='text'>Thunderhill Driving Notes</title><content type='html'>&lt;a href="http://www.youtube.com/watch?v=ah6ybnh6nzw"&gt;Video of me on a lap around Thunderhill&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;NASA uses 5a and SCCA uses 5.  SCCA slows down turns 1 and 8 by placing cones to divide the lane by 1/2.  Use the same turn in points but slower.  On 8, don't try to go outside after the cones as that'll usually cause you the miss the apex.&lt;br /&gt;&lt;br /&gt;General note for any new track: Late apex everything to get a feel for the track.  Slowly move back turn in point to find optimal point.  Use all the track, even if you'll not going fast enough because eventually you'll and you want to burn the line into your mind.&lt;br /&gt;&lt;br /&gt;Turn 1: Move quickly to right side of track after pit entrance.  Brake on marker 3, DS on 2, and start turn in around 1.  DS is optional but needs to be done at or before 5.&lt;br /&gt;&lt;br /&gt;Turn 2: Tap brakes around 2.  Turn in at 2/3 from inside.  Not quite sure of the line yet, except to keep eye on apex and exit berm.  Get on gas as early as possible and still hit apex.  Needs more work.&lt;br /&gt;&lt;br /&gt;Alternate path:  Use a double apex.  Start near the middle of the road, hit the 1st apex, drift to outside by 12'Oclock, turn in and gun it toward the 2nd apex.  I think this will gave a much faster exist speed.  I think I rode with an RX7 that did this and he had an incredible exit speed.&lt;br /&gt;&lt;br /&gt;Turn 3: Entry turn one car width from right side.  Stay inside the entire turn.  Outside and middle of track has negative camber.&lt;br /&gt;Alternative: Enter a wide.  Done properly, this should allow more exit speed, but it's harder and there isn't much of a straight between 3 and 4.&lt;br /&gt;Fun stuff to do: Try doing this turn in the middle and outside of the track.  These are racing lines.  However, once the car is on the outside, don't try coming toward the inside,  you'll have to slow down too much to do this.&lt;br /&gt;&lt;br /&gt;Turn 4: After exiting 3, use the short straight to let the car settle.  Tap the brakes to load the front just before turn in.  For 5a, exit is middle of berm.  For 5, look ahead to entry of 5.&lt;br /&gt;&lt;br /&gt;Turn 5a: May not be necessary to tap the brakes before the downhill, but its nerve racking not to.  The downhill before turn 5 is probably the only place on the course where you may coast on a straight.  Enter turn one car width from left.  Turn in as car gets to the bottom and traction is regained.  Stay inside as tight as possible with throttle steer.  I think this is the funnest turn on the course.&lt;br /&gt;&lt;br /&gt;Turn 5: Brake hard on uphill and slow the car way down.  Whip car around to face the water tower and go full throttle while still on top of the hill.  However the car settles at the bottom, leave it(don't change steering input) and use throttle steer exclusively.  Near the beginning of the turn, the car will want to drift away from the inside.  This is OK, just keep looking at the exit and the car will be in the right place for 6.&lt;br /&gt;&lt;br /&gt;If you didn't brake hard enough or turn enough at the top of the hill in 5, then you'll still be turning on the downhill and won't be able to apply full throttle.&lt;br /&gt;&lt;br /&gt;If the car is pointed too far right of the water tower, you may run off the road.  The run off is pretty smooth, so it's probably safer to run off than correct and risk rolling sideways down the hill.  I ran off and it didn't seem to cause any problems for my car.  I was really surprise at the lack of any big bumps.&lt;br /&gt;&lt;br /&gt;Turn 6: Tap brakes to settle the front, throw the car a the apex, and hit the throttle to plant the rear.  If done right, you'll be applying a good amount of throttle through the turn and touch the middle of the exit berm.  If you don't get close enough to the apex, you'll run wide and have to ease off the throttle to stay on the track.&lt;br /&gt;&lt;br /&gt;Turn 7: Check tach.  Depending on how you exited 6, you may not have enough RPMs left to make it through 7.&lt;br /&gt;&lt;br /&gt;Turn 8: Tap brakes or briefly lift, thrown car at apex, full throttle and hold on.  It may not be necessary to brake or lift.  Consider the run pave off as part of the track.  If cones are used to reduce the width of the track(SCCA), don't try to move to the right side after the cones.  You'll miss the apex and/or unsettle your car whipping it right and left so quickly at such high speeds.&lt;br /&gt;&lt;br /&gt;Turn 9: Brake at 3, throw car at apex at 1/1.5, and get on the gas hard.  Leave about a car's width from outside at crest, the road will continue to turn such that you'll find yourself at the edge coming over the hill.  At the bottom, concentrate on getting to right side of track with full throttle.  It's not necessary to use the full left side of the track.  Make sure the car is got pretty of straight for braking for 10.&lt;br /&gt;&lt;br /&gt;Turn 10: Brake hard before 3, DS to 3rd at 2.  Throw car at apex at 1.  This is the highest banked turn on the track so it's considerable faster than 11.&lt;br /&gt;&lt;br /&gt;Turn 11: This is a throw away turn.  Brake hard and early, it's a very very slow turn.  Exit in middle of the track to setup 12/13.  Getting on the berm will help to whip the rear around and it won't unsettle your car as much as you think.  the berm seem big, but you're very slow.  Carefully getting on the gas here.  Due to the low speed and tightness, even low horsepower cars spin out here.  My Miata did and I've seem quite a few other do the same here.&lt;br /&gt;&lt;br /&gt;Turns 12/13: An S turn combo.  There should be a split second between 2 and 3 where the car is straight.  Shift to 3 here.  On 12, consider the runoff area as part of the track.  It's pretty smooth.&lt;br /&gt;&lt;br /&gt;Turn 14: Downhill after bridge, so allow an extra distance for braking, like an imaginary 4th marker.   Turn in pass 1 and get on the inside berm at apex.  The apex is about 15' pass corner and not visible at the start of the turn  Turns 14 and 15 can be turned into a single large sweeper by using the bumppy run off area of the track.  Don't venture more than a car's length or two into the run off area was what the instructors suggested.  I didn't bother to found out why this is.&lt;br /&gt;&lt;br /&gt;Turn 15: Don't hit the inside berm as that'll unsettle the car.  Get on the throttle as much as possible coming out of 14 and stay on.  It's OK to ride the outside berm.  If you run of the track here, don't be in a hurry to get back on.  This is the most likely place where you can crash into someone or the wall.&lt;br /&gt;&lt;br /&gt;Recovery of getting 2 wheels off the track.&lt;br /&gt;#1 Don't panic&lt;br /&gt;#2 Don't jerk the wheel&lt;br /&gt;#3 ease off throttle&lt;br /&gt;#4 ease the car back on the track or let it run off.&lt;br /&gt;See the end of the &lt;a href="http://www.youtube.com/watch?v=ah6ybnh6nzw"&gt;video &lt;/a&gt;to view my recovery.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-3651662088629330146?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/3651662088629330146/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=3651662088629330146' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/3651662088629330146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/3651662088629330146'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/08/thunderhill-driving-notes.html' title='Thunderhill Driving Notes'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-2639131618873001217</id><published>2007-07-20T17:05:00.001-07:00</published><updated>2007-10-17T14:25:10.689-07:00</updated><title type='text'>Long Skate Board</title><content type='html'>My friend made me a long board a couple of weeks back.  It's got the softest wheels available and grips very well and handles rough surfaces very well.  The front has got poly as springs and is very soft.  That makes it very sensitive and hard to push a high speeds.&lt;br /&gt;&lt;br /&gt;Coming down my company's garage, it feel very much like a snow board with better grip.  Tail end slides are very predicable.  I'm trying to learn how to pump the board for speed.  My friend was able to get up to a fast running speed on my street, which is flat and a bit rough.   My board is setup sort of like a slalom board with a very quick front trunk and slightly slower rear trunk.  My daughters love it too.  I'm trying to setup another one so they don't fight over it.&lt;br /&gt;&lt;br /&gt;Followup on 10/17&lt;br /&gt;&lt;br /&gt;I figured out how to pump instead of twisting the board.  I was walking my daughter who was riding her tricycle.  She decide to walk and I had to carry the tricycle and skate at the same time.  I swung the tricycle with my leading arm.  This got me going pretty quick.  Once you learn the motion, it's just like pumping yourself while standing on a swing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-2639131618873001217?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/2639131618873001217/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=2639131618873001217' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/2639131618873001217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/2639131618873001217'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/07/long-skate-board.html' title='Long Skate Board'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-7275534225905177062</id><published>2007-07-20T17:02:00.000-07:00</published><updated>2007-07-20T17:05:03.946-07:00</updated><title type='text'>Wii Sports Rule</title><content type='html'>I got the Wii for father's day and it came with Wii sports.  Everyone except my wife plays this game, even my 2 and 4 year old daughters.  Whenever my son's friend comes over, they play this game.  We also have Pokemon and Zelda, but those don't get much play time.  I heard that Rockstar may put out their ping pong game on Wii.  I can't wait.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-7275534225905177062?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/7275534225905177062/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=7275534225905177062' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/7275534225905177062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/7275534225905177062'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/07/wii-sports-rule.html' title='Wii Sports Rule'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-9027441745168996212</id><published>2007-07-20T16:46:00.001-07:00</published><updated>2007-10-23T13:49:18.978-07:00</updated><title type='text'>Got new sway bar and drove worse</title><content type='html'>I got a pair of FM sway bars.  They felt really good on the recommended settings.  However, I drove worse on the next autocross event.  As I haven't been at an event for about a month, my tendency of driving too fast and the false confidence that my sway bars will help me turn faster really hurt my time.  I eventually brought my time down, but I'm still running way too fast into the turns and not braking well.&lt;br /&gt;&lt;br /&gt;10/23 Followup&lt;br /&gt;I broke the rear sway bar bracket bolts on the passenger side.  I had to take off the cat-back and drill out the bolts.  The bolts seems like they're pressed in, but I coudn't tap them out.  Even after drilling the bolts out, the back of the original bolts are still attached to the frame.  &lt;br /&gt;&lt;br /&gt;I had 3 track days without the rear sway bar and it was definitely interesting.  Luckily, I'll have the sway bar back on for Infineon.  I have the front FM sway bar set at the firmest settings.  I'm going to reinstall the stock rear sway bar and test it out this weekend at autocross.  I also got a set of Gearhead Garage adjustable endlinks.  I have my son sit in the driver seat while I adjust the sway bars to have them neutral as possible.  It's also near impossible to change the rear FM sway bar settings with the stock end links.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-9027441745168996212?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/9027441745168996212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=9027441745168996212' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/9027441745168996212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/9027441745168996212'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/07/got-new-sway-bar-and-drove-worse.html' title='Got new sway bar and drove worse'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-5088852836769785806</id><published>2007-06-19T12:41:00.000-07:00</published><updated>2007-06-19T12:47:11.223-07:00</updated><title type='text'>Autocross - slowing down to go faster</title><content type='html'>On June 2, I attend a SCCA autocross school in Candlestick.  Here's a list of stuff I got out of the class.&lt;br /&gt;1. Slow in; fast out&lt;br /&gt;2. Look ahead&lt;br /&gt;3. Go too fast to learn the limits of the car before worrying about items 1 and 2.&lt;br /&gt;&lt;br /&gt;On June 2, I went to an autocross event at Candlestick Park, which was the same course I help layout for the class the day before, but running backwards.  Running backwards, you end up carrying much more speed into the technical sections.  I ran hot into all the turns and got a good feel for the car's limits.&lt;br /&gt;&lt;br /&gt;One June 11, I had my car aligned at Roger Craus Racing.  The front wheels got max negative camber(-.9) and max positive caster with no toe.  The rear tires got -1.5 camber and no toe.&lt;br /&gt;&lt;br /&gt;I had a family issue on the 14th and skipped out on track school at Thunderhill.  They were easy to deal with and rescheduled me for the next class in August.&lt;br /&gt;&lt;br /&gt;On June 17, I went to an autocross event at the Marina airport.  The modified class cars were much louder than previous events, so I guess the noise restrictions here are more lax than the SF and Oakland sites.  I felt pretty comfortable with my car's limits so I decided to slow things down.  I got to the event early and didn't realize that the run group for ES was in the afternoon.  I wasn't going to wait around all morning, so I register myself as FUN meaning just fun runs.  This actually gave me more seat time as I was able to sign up for 2 driving sessions in the morning and 2 work groups.  If I stuck around, I could have ran another group too.  Way cool and had I known this, I would have ran as FUN at the previous events.&lt;br /&gt;I was still running a bit hot into the turns after a straight in my early runs.  I remember heard clunking sounds, probably from the front cam bolts which I need to check.    I gradually slowed down more for the turns and my times got better.  I was 10% slower than the top guys in E stock who were running R compounds.  I was about 1 second slower than the guys in E stock running street tires.&lt;br /&gt;&lt;br /&gt;Places for improvement.&lt;br /&gt;1. Turn earlier in slaloms and offset gates until I start to knock over cones&lt;br /&gt;2. Try more racing lines before straights to see if the extra speed gain can offset the extra distance traveled&lt;br /&gt;3. Slow down more for turns and get on the accelerator sooner&lt;br /&gt;4. Get a front sway bar?&lt;br /&gt;&lt;br /&gt;Here's a video of my best run at Marina&lt;br /&gt;&lt;br /&gt;http://www.youtube.com/watch?v=oQmLb9XOs8Q&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-5088852836769785806?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/5088852836769785806/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=5088852836769785806' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/5088852836769785806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/5088852836769785806'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/06/autocross-slowing-down-to-go-faster.html' title='Autocross - slowing down to go faster'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-4873641625136134519</id><published>2007-05-29T11:45:00.000-07:00</published><updated>2007-05-29T11:46:58.100-07:00</updated><title type='text'>Spark Plug Change</title><content type='html'>My  Miata was having hesitation problems at low RPMs.  The NGs indicate that the stock wires are poor quality.  Plus the Miata plugs fire twice per cycle which wear the plugs and wires out twice as fast.&lt;br /&gt;&lt;br /&gt;I checked the gap in the new plugs.  They were approximately 1mm.&lt;br /&gt;I labled the wire connections near the back of the engine.  I believe it's 4,2, 1, 3 on a 1.8 and reverse for a 1.6.&lt;br /&gt;Pull the plugs and saw some wet liquid in the spark plug holes.  Not sure if it's oil or gas mixture.  I had a 2nd per of eyes to look at it and it wasn't bad.&lt;br /&gt;I took out the plugs one at a time and install new ones.  The original Bosche plugs were in pretty good shape, but I changed them anyways.  I didn't have a torque wrench with low enough of a setting, so I tighten it by holding the driver at the pivot and then added an 1/8 turn.&lt;br /&gt;&lt;br /&gt;  I was told that the plugs can be made to fire hotter by spacing the gap out.  Changing the torque also changes the timing, but I forget which way.  Also, I read somewhere that the direction the plugs face effects the performance.  Maybe the last two are related.&lt;br /&gt;&lt;br /&gt;When installing new plugs, use electrical grease on the top metal tip(opposite end of the gap) and ceramic, and anti-seize on the threads.  The NGK blue wires had good reviews on the NGs and miata.net as a replacement for the stock.  Magnecore had good reviews too, but the NGK were cheaper and seem just as good as the Magnecores.&lt;br /&gt;&lt;br /&gt;The hesitation problem pretty much went away.  I'll do a timing check next and maybe a compression check, too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-4873641625136134519?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/4873641625136134519/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=4873641625136134519' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/4873641625136134519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/4873641625136134519'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/05/spark-plug-change.html' title='Spark Plug Change'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-1554494923255891857</id><published>2007-05-29T10:57:00.000-07:00</published><updated>2007-05-29T11:05:58.181-07:00</updated><title type='text'>Attic Fan Project</title><content type='html'>Equipment&lt;br /&gt;1. Attic Fan - get the appropriate size of your home.  Some fans come with a thermostat.  I got mine at OSH with a thermostat and it cost slightly less than a similar size unit from Home Depot that didn't have a thermostat.  Test this unit before you install it.  Use a blow dry to test the thermostat if the outside temperature is not high enough.  You can use a Romex cable and stick the other end into a  3 prong outlet.  The small slot should be the hot wire, but some outlets are mis-wired.  Test the outlet first.&lt;br /&gt;&lt;br /&gt;2. 14 gauge or lower Romex cable -  I used a 12 because I got it for free from my neighbor, but a 14 gauge is easier to work with.  I didn't use any conduit.  A Romex cable holds 3 wires inside, a hot, neutral, and an unshielded ground.&lt;br /&gt;&lt;br /&gt;3. Staples - These are specially made for electrical cables.  I got some cheap one that was basically a U shaped nail.  Use these approximate every 4 feet to hold the cable.  If you hire someone, they'll probably just leave the wire on the floor of your attic crawl space.  But it's better to staple it somewhere out of the way.&lt;br /&gt;&lt;br /&gt;4. 3/8 Junction box connector - Electrically junction boxes have little circle tabs that can be punched out.  These connectors go into that circle and have a couple of screws to tighen the wire so it doesn't get pulled out of the box.  You'll need one for the fan and another for the junction box you'll connect to.&lt;br /&gt;&lt;br /&gt;I'll assume you already have a circuit with enough amps to connect to and there's a junction box in the attic for this circuit.  If not, get an electrician to wire one up to the attic from the breaker box.  It'll be rated for 15 amps, but the building code will probably only allow you to put 8 to 10 amps on that box.  That's probably enough for a couple of ceiling fans and an attic fan.&lt;br /&gt;&lt;br /&gt;5. Rubber Washers - these will greatly reduce the vibration of the fan to the rest of the house.  I found some that were 3/8" thick and the fan is almost slient with these installed.  Buy 8 of these, but you'll probably use less.  Depends on how many mount points you use.&lt;br /&gt;&lt;br /&gt;6. Electrical tape&lt;br /&gt;&lt;br /&gt;7. Caps or twisters to connect the wires&lt;br /&gt;&lt;br /&gt;Tools&lt;br /&gt;1. Screw drivers - probably just Philips&lt;br /&gt;2. hammer - if you plan to use staples&lt;br /&gt;3. Wire stripper - check that it has 12 and 14 gauge.  Strippers made for communication wires may not go that big.&lt;br /&gt;4. Contractors knife - use this to separate the individual wires in the Romex cable&lt;br /&gt;5. Voltage tester - I had a cheap one that shows if a circuit was live, but ended up borrowing one from a neighbor that shows voltage too.  The electrician tester are great, because they're easier to use.&lt;br /&gt;&lt;br /&gt;Steps.&lt;br /&gt;1. Find a large vent that's easy to reach.&lt;br /&gt;2. Find a junction box you want to connect to.&lt;br /&gt;3. Measure the distance and make sure you got enough wire.&lt;br /&gt;4. Mount the attic fan with the rubber washers.&lt;br /&gt;5. Hook up the cable to the thermostat.&lt;br /&gt;   The unshielded ground should be screw to the metal chassis.&lt;br /&gt;   The black wire is generally used for hot and the other wire, probably white, is neutral.&lt;br /&gt;   You can use either wire for hot and neutral, but you may confuse the next guy that comes along.&lt;br /&gt;   See steps 9 to xx.&lt;br /&gt;6. Ran this wire to the junction box and staple the cable every 4 feet or so.&lt;br /&gt;7. Open the junction box and test the cables to identify which is hot and which is neutral.  Again, the convention is black for hot, but test it to make sure.  Sick one probe on ground and the other on hot.  Run the same test again, but instead of ground, put the probe on netual.  It should read 120V.  If it's not 120V, get an electrician to look at it.&lt;br /&gt;8. Turn the power off at the breaker.  Professionally like to work with hot wires, but I'm not a pro.&lt;br /&gt;9. Knock out one of the circular tabs in the junction box and add a connector.&lt;br /&gt;10. Thread the cable thought the connector.&lt;br /&gt;11. Separate the individual cables with the knife.  About 4 to 6 inches will do.&lt;br /&gt;12. Strip about 2 inches of the insulated wires.&lt;br /&gt;13A. If the wire you want to connect to is already connected to one other wire&lt;br /&gt;  a. Disconnect it or cut off the connected parts and strip if necessary&lt;br /&gt;  b. line all 3 wires up and tape them together about 2 or 3 inches from the ends.&lt;br /&gt;  c. Use a cap or twister to connect the cable.&lt;br /&gt;  d. Tape up any exposed wiring except for the ground wires.&lt;br /&gt;13B. If more then 2 wires are already connected, I would suggest you cut one of the wires a few inches away from where they are connected and connect your wire here.&lt;br /&gt;14. Turn the power on (at breaker) and see if the fan runs&lt;br /&gt;&lt;br /&gt;Trouble shooting.&lt;br /&gt;1. Use the electronic connected to see if the hot is wired properly going to the thermostat&lt;br /&gt;2. Test the voltage between the hot and neutral and it should be 120&lt;br /&gt;3. Test the connection from the thermostat to the fan.  If this is off, then it just may be the attic is not hot enough yet.  Try lowering the thermostat setting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-1554494923255891857?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/1554494923255891857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=1554494923255891857' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/1554494923255891857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/1554494923255891857'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/05/attic-fan-project.html' title='Attic Fan Project'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-9024656603496076215</id><published>2007-05-27T02:33:00.000-07:00</published><updated>2007-05-27T02:42:32.534-07:00</updated><title type='text'>Changing Sepentine Belt in Explorer</title><content type='html'>The hood has a diagram and shows that the tensioner requires a 3/8 driver.  It's a pain to get the 3/8 driver in there.  The fan is in the way and I had to turn it a bit.  I disconnected the air filter hose to provide a bit more accessibility.  Set the driver for counterclockwise rotation and pull back.  Wiggle the belt off.&lt;br /&gt;&lt;br /&gt;To install the new belt, I ran it through all the wheels except the one farthest toward the driver side.  I use small clips to hold the belt in place.   Stick the 3/8 driver back in the tensioner and pull all the way.  This should give just enough play in the belt to loop around the last wheel.&lt;br /&gt;&lt;br /&gt;I got some Gator brand belt.  It was the most expensive($35), but Sepentine belts should last 100K so I figure paying a bit more is not biggie.  I saved about $70 for an hours worth of work including the time buying the belt on the way home from work.  That's like earning $100/hr before taxes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-9024656603496076215?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/9024656603496076215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=9024656603496076215' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/9024656603496076215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/9024656603496076215'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/05/changing-sepentine-belt-in-explorer.html' title='Changing Sepentine Belt in Explorer'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-6111768170248901734</id><published>2007-05-27T02:18:00.000-07:00</published><updated>2007-10-23T13:55:41.810-07:00</updated><title type='text'>Car Camera Mount</title><content type='html'>I got a used I/O Port camera mount from craigslist.  I've seen the ads in my racing magazines and seem someone use it at the last autocross I attended.  He seems happy with it.&lt;br /&gt;&lt;br /&gt;The seller was an instructor in NASA.  He mentions that Thunderhill is best for beginners and Sears Point is more technical.  Laguna Seca sucks for the Miata because all the straights are uphill.  Make me wonder why Mazda owns it and run Spec Miata races there.  The price for open day at Thunderhill and Sears Point is $180.  Laguna Seca was in the $200s.  A coworker rides his bike there with a club and only pays $100, but had to buy a pack for 10 up front.&lt;br /&gt;&lt;br /&gt;I install I/O port on my passenger side roll bar and tested with Powershot.   I was able to see the panel, wheel, throttle and brake pedals, shifter when it's in 3rd, and most of the windshield.&lt;br /&gt;&lt;br /&gt;The I/O Port also comes with an extra strap because SCCA requires 2 secure attachments for the camera.  I'm bit worry someone will steal this unit but I don't want to bother removing it each time.&lt;br /&gt;&lt;br /&gt;Followup 10/23&lt;br /&gt;I made a 3" bracket to raise the height for the Powershot camera.  The camcorder already sits at the optimal height.  The camcorder doesn't have steady shot(8+ years old), but the picture is still bearable.  I'm guessing the anti-vibration for the I/O port camera mount has something to do with that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-6111768170248901734?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/6111768170248901734/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=6111768170248901734' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/6111768170248901734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/6111768170248901734'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/05/car-camera-mount.html' title='Car Camera Mount'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-5581856568358686048</id><published>2007-05-27T01:46:00.000-07:00</published><updated>2007-05-29T11:22:22.231-07:00</updated><title type='text'>Thunderhill on June 14</title><content type='html'>I signed up for a driving class on June 14 at Thunderhill.&lt;br /&gt;&lt;br /&gt;I watched a Spec Miata at Thunderhill on youtube and here's the plan of attach.&lt;br /&gt;&lt;br /&gt;Start on front straight.  Should hit 100+mph here on next lap.&lt;br /&gt;&lt;br /&gt;Turn 1:&lt;br /&gt;   Brake near 1st brake marker and DS to 3rd&lt;br /&gt;   Go full ASAP and US to 4th&lt;br /&gt;&lt;br /&gt;Turn 2:&lt;br /&gt;   DS to 3rd and it'll feel like a very late apex due to length of sweeper&lt;br /&gt;   Need to find midpoint and apex.  See Lotus video or ask instructor.&lt;br /&gt;&lt;br /&gt;Turn 3:&lt;br /&gt;   Stay in 3rd&lt;br /&gt;   Get back toward middle/inside by crest&lt;br /&gt;   Exit toward inside to prepare for turn 4&lt;br /&gt;&lt;br /&gt;Turn 4:&lt;br /&gt;   Stay in 3rd&lt;br /&gt;   Late apex and look for near straight into 5&lt;br /&gt;&lt;br /&gt;Turn 5:&lt;br /&gt;   Stay on outside(right) despite right turn coming up.&lt;br /&gt;This gives extra space to run out if car drifts a bit.&lt;br /&gt;&lt;br /&gt;Turn 6:&lt;br /&gt;   Get back on throttle ASAP and hold it&lt;br /&gt;&lt;br /&gt;Turn 7:&lt;br /&gt;   Full throttle and US to 4th&lt;br /&gt;&lt;br /&gt;Turn 8:&lt;br /&gt;   Ease off throttle but try to avoid braking&lt;br /&gt;&lt;br /&gt;Turn 9:&lt;br /&gt;   DS to 3 and aim for middle of road on top of hill&lt;br /&gt;   Get back on throttle ASAP and stay that way until 10&lt;br /&gt;&lt;br /&gt;Turn 10:&lt;br /&gt;   DS to 3&lt;br /&gt;&lt;br /&gt;Turn 11:&lt;br /&gt;   DS to 2&lt;br /&gt;   Very late apex and exit on inside for turn 12&lt;br /&gt;&lt;br /&gt;Turn 12 and 13&lt;br /&gt;   Exiting turn 11 on inside, look for near straight through 12 and 13&lt;br /&gt;   Get back on throttle ASAP for back straight&lt;br /&gt;   Clipping the inside curb of 12 seems OK in video&lt;br /&gt;&lt;br /&gt;Turn 14&lt;br /&gt;   DS to 3&lt;br /&gt;&lt;br /&gt;Turn 15&lt;br /&gt;   No braking needed&lt;br /&gt;   Should be able to stay near full throttle through the whole turn&lt;br /&gt;   Exit to front straight&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-5581856568358686048?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/5581856568358686048/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=5581856568358686048' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/5581856568358686048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/5581856568358686048'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/05/thunderhill-on-june-14.html' title='Thunderhill on June 14'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-5585601920912766855</id><published>2007-05-25T12:57:00.000-07:00</published><updated>2007-05-25T13:24:15.202-07:00</updated><title type='text'>Cleaning Engine Compartment</title><content type='html'>Why&lt;br /&gt;1. Looks better&lt;br /&gt;2. Helps you to identify leaks; I found that my engine was not leaking oil so it saved me the task of changing the valve gasket and CAM O-ring.&lt;br /&gt;3. Makes it easier to work on your car.  I can actually see the timing markers on the crank now.&lt;br /&gt;&lt;br /&gt;What you need.&lt;br /&gt;1. Water hose or high pressure water washer&lt;br /&gt;2. Air Compressor &amp; Spray nozzle&lt;br /&gt;3. Engine Cleaner Spray&lt;br /&gt;4. Small Brushes &amp;amp; Tooth brush&lt;br /&gt;&lt;br /&gt;Steps.&lt;br /&gt;1. (Optional) Cover the electronic connectors, starter, and alternator with clear plastic wrap&lt;br /&gt;2. Spray Engine Cleaner over Oil Stained surfaces such as the engine and wait 10 minutes&lt;br /&gt;3. With a oil pan under the engine component, wash off the engine with high pressure spray&lt;br /&gt;4. You should catch the run off and store it away to dispose of later.&lt;br /&gt;5. Once the areas you spray with the Engine Cleaner is clean, you don't need the oil pan anymore&lt;br /&gt;6. Spray the rest of the engine component from different angles&lt;br /&gt;7. Use a small brush on some tough areas that are still dirty, especially around the engine where oil may leak or seep.&lt;br /&gt;8. Use the air compressor to dry the engine component.  A couple of minutes over the surface should be good enough.&lt;br /&gt;9. Use the air compressor to dry electrical connections, the starter, the alternator, the air filter.&lt;br /&gt;   If water gets stuck in electrical connects for too long, it'll cost corrosion.  Dirty water in the starter or alternator can cause a short and possibly fry one of these components.  It's rare, but I know people that have fried theirs.&lt;br /&gt;10. Let it sit and dry for a while, works best on a hot day.&lt;br /&gt;11.  The car should be fine to start.&lt;br /&gt;&lt;br /&gt;An alternate method to steps 8+ is to make sure the starter and alternator stay dry by covering them.  Then start the engine right away so the engine heat will evaporate the water.  I tried this method, but found that this only dries certain areas that get really hot.  Electrically connectors do not get hot enough and will remain wet.  The car will start and run, but you can run into problems down the road.  I covered all electrical connectors, but when I pull the wrapping off, I found some moisture still got into the connectors.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In a Miata, sometimes the spark plug covers are not totally water proof and washing with a high pressure washer will allow some water get into your engine.  This will cause some temporary idling and starting problems.&lt;br /&gt;&lt;br /&gt;When you use the Engine Cleaner, it's possible that your engine will have streaks or discolored areas.  You can use the Engine Cleaner again or get an engine polish.  I left mine looking a bit discolored since I'm not looking for show room condition.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-5585601920912766855?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/5585601920912766855/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=5585601920912766855' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/5585601920912766855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/5585601920912766855'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/05/cleaning-engine-compartment.html' title='Cleaning Engine Compartment'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-8069845667908056084</id><published>2007-05-25T09:18:00.000-07:00</published><updated>2007-05-25T10:14:32.164-07:00</updated><title type='text'>Transmission and Differential Oil Change</title><content type='html'>This is for a 96 Manual Transmission Miata.&lt;br /&gt;&lt;br /&gt;Transmission Oil Change&lt;br /&gt;  Do this every 30K with Red Line.  The shifting will feel smoother.&lt;br /&gt;&lt;br /&gt;1. Jack the car up on all 4s and ensure it's as level as possible.  If the floor is not level, then jack up one end higher to get the car level.&lt;br /&gt;&lt;br /&gt;2. Unscrew the fill plug.  It's a square looking plug on the front left side of the transmission.  Be prepare with a oil pan as some oil may or may not come out.&lt;br /&gt;&lt;br /&gt;3. Unscrew the drain plug at the bottom of the transmission near the back.  Expect about 2 quarts of oil to come out.  The plug has a magnet on the inside and a crush washer.  Clean the magnet and look out of large pieces of metal that could indication transmission damage.  Remove the crush washer(sometimes there's more than one; remove them all).&lt;br /&gt;&lt;br /&gt;4. Screw the drain plug back in with a new crush washer.  This is the same washer used for oil change and you can get this from the dealer for pennies.  I got mine from Flying Miata in a pack of 10 for like $1.50.  I hand tighten this and gave it an extra 1/4 turn.  You can dry torque it to 20lbs, but it's usually wet so I don't bother.  Clean this area around the plug very well so it's easy to check for leaks later.&lt;br /&gt;&lt;br /&gt;5. Use a pump to fill the oil through the fill hole.  It takes about 2 quarts.  Stop when oil starts to come out the fill hole.  If oil comes out too early or late, then the car may not be level.  I use a hand pump that looks like a bicycle pump.  Don't bother with siphon type pumps.  This step can be very messy, so have some card board ready to cover work area.&lt;br /&gt;&lt;br /&gt;6. Screw the fill plug back in and you're done.  I don't remember if this has a crush washer or not.  Again hand tightenn + 1/4 turn should do it.  Clean and check back for leaks later.&lt;br /&gt;&lt;br /&gt;Changing the differential oil&lt;br /&gt;  Red Line has oil for this also and it's different than the transmission oil.  The manual should have the oil spec.  I'm not sure if it's the same for all Miatas since the older N1 had VSD and the later N1 had TSD.  I'm not aware of any advantages using the more expensive oil for the differential, but you only do this every 30K so why not get something good in there.&lt;br /&gt;&lt;br /&gt;  Basically the same steps as the transmission oil change.  Both plugs are on the back of the differential, but the drain plug is about 6" lower.  It's easy to reach this by just jacking up the back of the car, but don't because you have to keep the car level.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Basic Oil Change&lt;br /&gt;  I use dino oil cause it's cheaper and works fine.  I plan to change my oil more often depending on track use.  Otherwise, Costco is selling Mobil 1 for about $5 a quart.  I use the Mazda oil filter which is $6 each.  There is a oil filter kit that moves the oil filter to a better location and allows for the use of a bigger filter.  I'll look into this next time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-8069845667908056084?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/8069845667908056084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=8069845667908056084' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/8069845667908056084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/8069845667908056084'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/05/transmission-and-differential-oil.html' title='Transmission and Differential Oil Change'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-3962534703803525239</id><published>2007-05-21T17:09:00.000-07:00</published><updated>2007-05-21T17:34:01.467-07:00</updated><title type='text'>1st Autocross</title><content type='html'>It was a long course for autocross.  Top Miata stock class time was about 1 minute.  I got halfway thought the course and got lost in the salmon.  I got a DNF on my first run.  I watch the other cars do their run and memorized the course up to the salmon before and 2nd run.  I finished 10 seconds behind the ES leader on my 2nd run, a very slow time.  The improvement will be easy.  Memorize the course and fix the problem with my car that cause white smoke to come out the back.  I didn't dare a 3nd run with the smoke problem.  Still, it was quite an experience and very enjoyable.&lt;br /&gt;  Next time, I aim for 5 seconds or less of the ES leaders.  They got slick tires, so I'm already out 2 seconds.  The aggressive alignment, better brakes, shocks, and front anti roll bar is worth almost another second.  In the novice class, I do all those modifications minus the slick autocross tires.  I have the brake pads, but won't put those in until the current ones are burned out.  The front anti-roll bar is about $100 new, so I'll keep an eye for one on craigslist.  I'm check during the next meet to see what suspension modifications are allowed for the stock class and where I can go to get the proper alignment.  Most shops are not precise enough to get dial in the exact spec.  I'll also look for a harness as I was thrown around a bit last time.  The rules allow the harness to be used, but I can't cut 2 slots in the seats for the shoulder straps.&lt;br /&gt;  I cleaned my engine off this weekend.  If I don't see any leaks in the next few days, I'll install the new plugs and wires.  I'll need to learn how to adjust the timing, but first I need to get a timing light with induction; $50 or so bucks from Sears.&lt;br /&gt;&lt;br /&gt;I brought magnetic sheets over the weekend to put my number and class on for the next session.&lt;br /&gt;&lt;br /&gt;I also signed up for some driving classes.  One autocross class before the next met and a track class now that my roll bar is installed.  I checked out a video on the Thunderhill course, and it looks awesome.  I can't wait to get out there and I already have the course memorized from the video and map on their web site.  I got the coming weekend to bleed my brakes and I'll be good to go for both sessions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-3962534703803525239?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/3962534703803525239/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=3962534703803525239' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/3962534703803525239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/3962534703803525239'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/05/1st-autocross.html' title='1st Autocross'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-1396672362147452408</id><published>2007-05-21T16:38:00.000-07:00</published><updated>2007-05-21T16:51:47.202-07:00</updated><title type='text'>Boss Frog Miata Dual Loop Roll Bar Installation</title><content type='html'>I did the installation last week.  The website has the complete installation instructions, so I'll add some advice and modifications to those instructions along with my steps.&lt;br /&gt;&lt;br /&gt;I did the installation over a few days instead of one big sitting.&lt;br /&gt;Day 1: Prepare Car&lt;br /&gt;   1. Before removing the carpet on the wall behind the seat, cut along the edge between the back wall and center console from the floor to the top of the console, but not the top of the console.  If you're not sure about where to cut, wait until the roll bar is installed, but in hindsight, it's easiest to do right now.&lt;br /&gt;   2. Follow the rest of the instructions to prepare the car, but do not jack up the car yet.&lt;br /&gt;   3. With the back tin cover removed, use the template in the instructions to cut the tin cover now.  I would suggest you put the partial roll bar in to see where to cut.  The instructions have you cut this tin cover in half to install after the roll bar is in place, but it's much easier to do so now and you don't have to cut it in half if done at this stage.&lt;br /&gt;   4. If you're going to use the Seat Adapter, remove the complete seat belt and cut out the original guide.  A vise is your best bet to hold the guide in place as it will get hot.  This guide has steel under the hard plastic.  Use either a saw or grinder.  If you have a helper, you can cut this later after installing it.  See Day 4.&lt;br /&gt;5. You'll need to cut the upper left bold for the ECU on the frame.  A grinder will work, but it's really messy and can leave burn marks in your car when the little hot metal pieces go flying.  I used a small hand saw with a flexible saw to get a clean cut.  There's no need to cut the ECU frame as the instruction saids.  This piece is flexible enough to bent over the foot of the roll bar and it won't rattle.&lt;br /&gt;&lt;br /&gt;Day 2: Bolt in Roll Bar&lt;br /&gt;   1. Put the center piece in place over the center console.  Mark where the feet meets the floor.  Remove this piece and clean out the floor.  I used a scraping tool to get rid of the excess rubber chalk.&lt;br /&gt;   2. Put the center piece back in.  Once it snaps into place, it wont move around much.&lt;br /&gt;   3. Install each side of the roll bar.  Check if the back feet's front hole is blocked by a rubber cap.  If so, remove the cap now.  The holes may not line up, so you'll have to enlarge hole in the frame later.  The instruction have you put in the lower bolt first, then the top bolt.  But if you can't get the top bolt in afterwards, reverse the order.  When you reverse the order, head down to the hardware store and get a grade 8 7/16 1" bolt with fine thread.  My local Home Depot does not carry 7/16 bolts, but OSH did.  The short bolt will be fine since you're going to remove the existing spacers behind the seat belt retractor.  You can use the original bolts, but it's going to be really hard to get in once the top bolt is in.  I'm not sure if the instructions tell you do this, but put the trim washers on the top bolt.  These are the silver washers with a crown, and you think you have 8 of these.  If you only have 6, then do use them here.  The crown is to attach the black plastic caps.&lt;br /&gt;   4. Without tighen anything, put in the 4 bolts that connect the loop bars to the center console bar.  Don't forget to use the trim washers.&lt;br /&gt;   5. With all the bolts in place, tighen them all.  I do the lower bolts first, the top bolts, and final the center console bolts.&lt;br /&gt;  6. Make sure you used all 4 of the smaller square bottom brackets and these brackets are mounted under the car.&lt;br /&gt;&lt;br /&gt;Day 3: Drill Holes - The roll bar should already be very snug.&lt;br /&gt;   1. Jack the car up and remove the rear wheels and wheel cover.&lt;br /&gt;   2. Use a 3/8 metal drill and drill the holes at the foot of the loop bars.  Install the 3/8 bolts, bottom bracket(other side of frame) and tighten.  If the drill is not going throught, then you probably don't have the right drill bits.  I don't know how to tell by looking that the drill bit, so you'll just have to try if you're not sure.&lt;br /&gt;   3. Use a 3/8 metal drill and drill the holes at the foot of the center console.  Install the 3/8 bolts, bottom bracket and tighten.&lt;br /&gt;   4. Use a 12" long 3/8 metal drill and drill the back holes.  With the top on, I was able to drill the 2 front holes from the top.  Install the bolts, bottom bracket and tighten.  I received the wrong bottom bracket, but you can drill a hole in the brackets with the same 3/8 drill bit.  It'll just take longer due to thickness and require a vice.&lt;br /&gt;   5. If you were able to drill the back hole, do so now from the bottom.  I didn't get the holes to line up when I did this since the front hole is actually a slot, so I wiggle the drill around to make the hole bigger.  If you don't know how to wiggle your drill to enlarge the hole, a rattail file or dremel tool works fine too.  Install the 3/8 bolts and tighten.&lt;br /&gt;   6. Re-install the wheel cover and lower the jack.&lt;br /&gt;   7. Structurally, this bar is ready and you're done once the seat belt is installed.&lt;br /&gt;&lt;br /&gt;Day 4: Finishing touches&lt;br /&gt;   1. I hope you precut and install the tin back cover already.  Otherwise, follow the Boss Frog instructions.  You may find that the cover does not fit.  I had to cut the slot for the bar to be much larger and bent the cover to get it to fit.  This make matching the holes on the cover to the original holes in the frame a bit tougher.  If you can get a bolt to fit, just leave it off.&lt;br /&gt;   2. Follow the instuctions to cut the plastic trim.  I ended up cutting much more plastic than the instructions.  I actually cut the two side panels in half to facilate installation.  Also, I cut more of the plastic to make sure the seat belt does not rub the panel so much that it hampers the belt from retracting.&lt;br /&gt;   3. Use a knife to trim the carpets, but hopefully you did the trim as I suggested for the back wall carpet.  I didn't cut off any carpet and just roll the excess back which made for a nice look.&lt;br /&gt;   4. If you got the Seatbelt Adapter, cut the old guides off and use the adapter.  It works much better, but it won't be as good as before the roll bar.  I found the simplest way to cut the guides was to bolt the old guides into place, have someone hold the glides in place by pulling on the seatbelt, and cut the guide with a reprocussion saw.  See Day 1 if you have no helpers.&lt;br /&gt;&lt;br /&gt;It's done, Enjoy.  If you hear rattling noises, then you probably didn't tighen the top bolts enough and the spacers are bouncing around.  I used a black primer on some of the exposed bolts to make it look nicer.  To unzip the top, you'll have to pop the roof off and lift it a bit, but the plastic window fits nicely between the roll bars.&lt;br /&gt;&lt;br /&gt;Warning, the loop style roll bar does not protect as well as the striaght roll bar.  The reason is, if the car flips over in soft ground, the loop style roll bars have a tendency to dig in.  That said, you did buy a small convertiable sports car, so you're obiviously willing to some risk.  Plus, guys have been racing with the Cobra style single loop bar for decades.  This roll bar is better than no roll bar, and the convertible operation is not hamper as much as a strigh roll bar like the Harddog Hardcore.  It's also possible to wield a straight bar between the two loops.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-1396672362147452408?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/1396672362147452408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=1396672362147452408' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/1396672362147452408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/1396672362147452408'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/05/boss-frog-miata-dual-loop-roll-bar.html' title='Boss Frog Miata Dual Loop Roll Bar Installation'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-7883228849069074777</id><published>2007-04-19T15:26:00.000-07:00</published><updated>2007-04-19T16:06:54.915-07:00</updated><title type='text'>Miata Spec and Wish List</title><content type='html'>Miata Specs&lt;br /&gt;&lt;br /&gt;1.8L engine -&gt; 134hp&lt;br /&gt;2180 lbs curb weight&lt;br /&gt;0-60  &gt; 9 sec&lt;br /&gt;Torsen LSD&lt;br /&gt;5 speed manual&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Wish List&lt;br /&gt;1. FM 2 Turbo&lt;br /&gt; - Requires to upgrade Clutch and Radiator&lt;br /&gt;2. KYB shocks, stiffer springs, rear shock mount&lt;br /&gt;3. 15" Kosei K1 wheels ($100 each)&lt;br /&gt;4. Bigger 15" brakes&lt;br /&gt;5. Improve exhaust&lt;br /&gt;6. Front brace&lt;br /&gt;7. Improve intake flow&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Stuff I'm going to do soon or done&lt;br /&gt;1. Roll bar - Boss Frog Double Max&lt;br /&gt;  - safety and improve rear stiffness&lt;br /&gt;2. Use Redline transmission and differential oil&lt;br /&gt;3. Install the K&amp;amp;N air filter&lt;br /&gt;4. Replace the PCV valve&lt;br /&gt;5. Replace shifter boots&lt;br /&gt;6. Replace ignition wires with NGK blue&lt;br /&gt;7. Replace spark plugs&lt;br /&gt;8. Flush out the brake and clutch fluids.&lt;br /&gt;9. Replace the tires with Hickook RS2 V rated&lt;br /&gt;10. Tune up engine&lt;br /&gt;11. Change the timing to 14 degress&lt;br /&gt;&lt;br /&gt;I'm hoping for better response and feel.  It currently feels a bit lazy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-7883228849069074777?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/7883228849069074777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=7883228849069074777' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/7883228849069074777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/7883228849069074777'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/04/miata-spec-and-wish-list.html' title='Miata Spec and Wish List'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-1838058185353299442</id><published>2007-04-07T22:46:00.000-07:00</published><updated>2007-04-19T15:16:42.256-07:00</updated><title type='text'>Forza for Xbox</title><content type='html'>Great game to practice driving techniques and car tuning.  For example, I tried a car that had way too much understeer, so I lower the rear tire pressure and improve the understeer issue.&lt;br /&gt;&lt;br /&gt;In free run - track mode, you can have a ghost car with your best time going at the same time.  This lets you try different lines and see which works best.  I was able to try a MCR turn vs a late apex and saw the MCR turns gets out of the turn faster, but if there was any significant straight after the turn, the late apex technique was able to catch up due to the extra speed at exit.  Doing any drafting seriously hurt your exist speed, too.&lt;br /&gt;&lt;br /&gt;In free run - autocross, I found that controlling more powerful cars requires tapping on the accelerator.  I'm sure this is due to the difficulty of controlling braking and acceleration on the control.  Also, more hp did not gave much advantage except in the few tracks with big straights.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-1838058185353299442?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/1838058185353299442/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=1838058185353299442' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/1838058185353299442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/1838058185353299442'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/04/forza-for-xbox.html' title='Forza for Xbox'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-464973388184258798</id><published>2007-03-27T12:55:00.000-07:00</published><updated>2007-03-27T13:54:10.181-07:00</updated><title type='text'>Raceways</title><content type='html'>Reference Material for NorCal&lt;br /&gt;&lt;br /&gt;The local SCCA San Francisco Chapter&lt;br /&gt;http://www.sfrscca.org&lt;br /&gt;&lt;br /&gt;Autocross Sites&lt;br /&gt;http://www.sfrscca.org/solo2/sites.html#stockton&lt;br /&gt;&lt;br /&gt;Street School at Thunderhill $235 and bring your own car&lt;br /&gt;http://www.thunderhill.com/html/driving_school.html&lt;br /&gt;There's a class every 2 months or so during the work week.  It's a bit of a drive,  but a lot cheaper than the classes at Lunga Sega and Sears Point.  Next class is April 24.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;California Race Tracks&lt;br /&gt;http://www.racereview.com/california.htm&lt;br /&gt;&lt;br /&gt;Infineon Raceway&lt;br /&gt;Performance Class (bring your own car) $1000&lt;br /&gt;Kid's Cart Class $350&lt;br /&gt;Adults and Teens $550&lt;br /&gt;20 Track Passes $400 - must provide own kart&lt;br /&gt;&lt;br /&gt;Laguna Seca in Monterey&lt;br /&gt;Skip Barber Driving School&lt;br /&gt;&lt;br /&gt;Driving Clubs with Track Time&lt;br /&gt;PCA - Porsche Coast  $275 for day&lt;br /&gt;Unlimited Laps - $285 for day&lt;br /&gt;Speed Ventures&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-464973388184258798?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/464973388184258798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=464973388184258798' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/464973388184258798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/464973388184258798'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/03/raceways.html' title='Raceways'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-8092572070169075070</id><published>2007-03-27T11:26:00.000-07:00</published><updated>2007-03-27T11:35:34.166-07:00</updated><title type='text'>Spinout on the Freeway</title><content type='html'>It was raining today, and I tried to do a little drafting on the freeway ramp.  I ended up doing a 180 into the side rail.  It was a low speeds and I only did a minor damage to the rear side panel.  Next time it rains, I'm going to find a parking lot and practice.  I'm also thinking about rallies.  I'll consider that more when I get rid of the Explorer.  I'll need a vehicle with more than 2 seats to be a bit more large family friendly.&lt;br /&gt;&lt;br /&gt;After I got home and my wife had me fill up the Porsche, I was driving like a good little school boy.  I drop by Taco Bell for a combo meal and their drinks were too big to fit in the cup holders.  Luckily it's an automatic.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-8092572070169075070?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/8092572070169075070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=8092572070169075070' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/8092572070169075070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/8092572070169075070'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/03/spinout-on-freeway.html' title='Spinout on the Freeway'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-787599193281177968</id><published>2007-03-26T14:45:00.000-07:00</published><updated>2007-04-01T01:18:24.833-07:00</updated><title type='text'>Sunday Drives in the South Bay</title><content type='html'>The Bay Area has lots of great roads for Sunday drives.  My son and I are starting to explore these roads.  There are numerous hiking trails along these drives to explore.  The environments are diverse like flat plains, mountains, coast, and country.  These roads are shared among motorist, motorcyclist, and cyclist.&lt;br /&gt;&lt;br /&gt;So far, we've only taken a few trips.  The first was Mount Hamilton to the east.  Barren wide mountain biking trails and a scatter few single trails on both sides.  I enter my only mountain bike race here a decade and a half ago.  The drive is on rolling hills with lots of tight turns.  It eventually leads to an observatory, but we stopped early to go hiking.&lt;br /&gt;&lt;br /&gt;There are a complex network of roads to the south and west.  We like to enter from Hwy 9 in Saratoga.  From here, you can get to Skyline, and between these two roads, you can drive to the San Francisco or down to Santa Cruz.  The are wide mountain roads and narrow switchbacks.  Keep driving east, and you'll hit Hwy 1, the Pacific Coast Hwy.  It's got a great view and access to many beaches.  In the right conditions, you can head up to the mountain tops and drive in the clouds.  It's slippery up here so drive slow and watch for the numerous cyclists.&lt;br /&gt;&lt;br /&gt;For a quick driving fix in the middle of the night, I head down Santa Teresa and take a right on Baily.  There's a straight road here pass the old IBM building.  Drive down once to be sure this street is clear of cops.  It's easy to see if anyone else is pulling on the road, so you can safely floor it for a good mile.  Monterey is good for speed too, but you need to know which patch is harder for cops to hide.  At the end of Baily is a uphill switchback to the Calero Reservoir.&lt;br /&gt;&lt;br /&gt;In the same general area, there's also a good 10 mile drive on Hicks.  It's tight turns with a steep up and downhill section.  The best short quick drive around me.&lt;br /&gt;&lt;br /&gt;Whenever you get sick of driving, stop for a hike or visit one of the small communities or wineries along the way.&lt;br /&gt;&lt;br /&gt;The Miata is my prefer ride, but the Porsche isn't bad either if you don't want to feel every bump.  A small car hot rod like a Caterham or Cobra would be perfect and I'll get one of those some day.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-787599193281177968?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/787599193281177968/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=787599193281177968' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/787599193281177968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/787599193281177968'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/03/sunday-drives.html' title='Sunday Drives in the South Bay'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-59131812212991496</id><published>2007-03-16T20:14:00.000-07:00</published><updated>2007-10-23T13:52:25.360-07:00</updated><title type='text'>Porsche Boxster S</title><content type='html'>Cost of Ownership&lt;br /&gt;&lt;br /&gt;Premium Fuel $3.50 gallon&lt;br /&gt;Rear Tires $375 each + tax &amp; installation ($750 installed from tirerack, partly because there's no sales tax)&lt;br /&gt;Extra Key $225&lt;br /&gt;Windshield $900&lt;br /&gt;Insurance is $300 / 6 mnth for full coverage; even the insurance guy was surprised.&lt;br /&gt;Sensor Issue: Covered by warranty.  It's been in the shop for a week and they can't figure out what's wrong.  Now, the dealership is just going to replace all the old sensor hardware with new hardware.  I can't image how much this would cost without warranty.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Performance and Spec&lt;br /&gt;&lt;br /&gt;                       &lt;table style="border-collapse: collapse;color:#808080;" id="table1" border="1" border cellpadding="2" cellspacing="1" width="96%"&gt;&lt;tbody&gt;&lt;tr&gt;      &lt;td height="20" width="14%"&gt;      &lt;p align="right"&gt;&lt;b&gt;      &lt;span style="font-family:Arial;font-size:85%;color:#808080;"&gt;Price &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;      &lt;td rowspan="6" height="20" width="2%"&gt; &lt;/td&gt;      &lt;td height="20" width="30%"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;      $43,800 &amp; $53,100 (S)&lt;/span&gt;&lt;/td&gt;      &lt;td height="20" width="15%"&gt;      &lt;p align="right"&gt;&lt;b&gt;      &lt;span style="font-family:Arial;font-size:85%;color:#808080;"&gt;Weight &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;      &lt;td rowspan="6" height="20" width="1%"&gt; &lt;/td&gt;      &lt;td height="20" width="32%"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;2855       lbs &amp; 2965 lbs (S)&lt;/span&gt;&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;      &lt;td height="20" width="14%"&gt;      &lt;p align="right"&gt;&lt;b&gt;      &lt;span style="font-family:Arial;font-size:85%;color:#808080;"&gt;Engine &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;      &lt;td height="20" width="30%"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;2.7       &amp; 3.2 (S) liter flat six&lt;/span&gt;&lt;/td&gt;      &lt;td height="20" width="15%"&gt;      &lt;p align="right"&gt;&lt;b&gt;      &lt;span style="font-family:Arial;font-size:85%;color:#808080;"&gt;Transmission &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;      &lt;td height="20" width="32%"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;5       speed &amp; 6 speed manual (S)&lt;/span&gt;&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;      &lt;td height="20" width="14%"&gt;      &lt;p align="right"&gt;&lt;b&gt;      &lt;span style="font-family:Arial;font-size:85%;color:#808080;"&gt;Aspiration &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;      &lt;td height="20" width="30%"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;      Natural&lt;/span&gt;&lt;/td&gt;      &lt;td height="20" width="15%"&gt;      &lt;p align="right"&gt;&lt;b&gt;      &lt;span style="font-family:Arial;font-size:85%;color:#808080;"&gt;Torque &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;      &lt;td height="20" width="32%"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;199       &amp; 236(S) lb-ft @ 4700 rpm &lt;/span&gt;&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;      &lt;td height="20" width="14%"&gt;      &lt;p align="right"&gt;&lt;b&gt;      &lt;span style="font-family:Arial;font-size:85%;color:#808080;"&gt;HP &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;      &lt;td height="20" width="30%"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;240       hp &amp; 280 hp (S)&lt;/span&gt;&lt;/td&gt;      &lt;td height="20" width="15%"&gt;      &lt;p align="right"&gt;&lt;b&gt;      &lt;span style="font-family:Arial;font-size:85%;color:#808080;"&gt;HP/Weight &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;      &lt;td height="20" width="32%"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;11.9       lbs &amp; 10.6 lbs (S) per hp&lt;/span&gt;&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;      &lt;td height="20" width="14%"&gt;      &lt;p align="right"&gt;&lt;b&gt;      &lt;span style="font-family:Arial;font-size:85%;color:#808080;"&gt;HP/Liter &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;      &lt;td height="20" width="30%"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;83 &amp;       87.5 hp per liter (S)&lt;/span&gt;&lt;/td&gt;      &lt;td height="20" width="15%"&gt;      &lt;p align="right"&gt;&lt;b&gt;      &lt;span style="font-family:Arial;font-size:85%;color:#808080;"&gt;0-124 mph&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;      &lt;td height="20" width="32%"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;24.6       &amp;amp; 20.2(S) seconds&lt;/span&gt;&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;      &lt;td height="20" width="14%"&gt;      &lt;p align="right"&gt;&lt;b&gt;      &lt;span style="font-family:Arial;font-size:85%;color:#808080;"&gt;0-60 mph &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;      &lt;td height="20" width="30%"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;5.9       &amp; 5.2 seconds (S)&lt;/span&gt;&lt;/td&gt;      &lt;td height="20" width="15%"&gt;      &lt;p align="right"&gt;&lt;b&gt;      &lt;span style="font-family:Arial;font-size:85%;color:#808080;"&gt;Top Speed &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;      &lt;td height="20" width="32%"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;159       &amp;amp; 166 mph (S)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;The 0 to 60 is about 2x quick as my Miata.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-59131812212991496?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/59131812212991496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=59131812212991496' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/59131812212991496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/59131812212991496'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/03/porsche-cost-of-ownership.html' title='Porsche Boxster S'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-1712989808211600424</id><published>2007-03-09T10:57:00.000-08:00</published><updated>2007-03-12T13:29:59.551-07:00</updated><title type='text'>Miata Update</title><content type='html'>The original tires had good treads left, but the front right tire is damaged.  The side wall is tearing and I don't feel safe driving on it.  I replaced it with a set of Hankook RS-2 195/60R14, but bother keeping the old tires.  It's a good performance tire and the only tire rated above H in this size.  The Miata can also take 205/55R14 but those are racing tires and the tread life is around 50 and beside wearing out quickly, they would disqualify my car from the Stock/Street Class in autocross.  I went with a cheaper tire place that doesn't offer free rotation, but I figure on the Miata, I can do it faster myself then bringing it in.  I just need to get that 2nd jack I left at my parents and then it'll be like a 15 minute job.  The tire guy suggested I rotate these tires every 3K instead of the typical 5K.&lt;br /&gt;&lt;br /&gt;I missed my first autocross this Sunday due to daylight savings.  No biggie since my son and I just went for a drive on Highway 9 and a hike in the Santa Cruz mountains.  We found ourselves on a narrow road with blind corners for a short while.  I pressed the honk and we laughed at how weak it sounded.  For safety's sake, I turned around took a slightly wider road.  I drove very slowly and press my honk on every turn, but we still have a close run in with a biker.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I searched the web and decent reviews for a mechanic  in Sunnyvale, Zuccato's Auto Care.  I may drop it off there after my wife's car gets picked up from Stevens Creek Porsche for some repairs covered by the Warranty.  I would want the 30K service and to get a 2nd opinion on the repairs suggested by the shop that check this car out when I brought it.  I'm still looking for a decent mechanic for my wife, but I don't know too many Porsche owners.&lt;br /&gt;&lt;br /&gt;I found a more consistent way to heel and toe.  Instead of rotation my right foot, I keep a stiff foot and move my right knee to the right.  This lets a bigger muscle do the blipping.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-1712989808211600424?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/1712989808211600424/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=1712989808211600424' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/1712989808211600424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/1712989808211600424'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/03/miata-update.html' title='Miata Update'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-8335536300298422120</id><published>2007-03-08T16:27:00.000-08:00</published><updated>2007-03-18T22:11:48.723-07:00</updated><title type='text'>Auto Whole Seller</title><content type='html'>After searching around for an automatic Boxster with low miles, I found a whole seller in Fremont with a 2005 Boxster S.  It cost more than I budgeted, but it was a good buy at dealer whole sell price.  Plus it's still under warranty.  It's got 276 hp as oppose to the 200 hp for the early 2K modle Boxster we tried.  The throttle and steeling were less stiff too.   It needs a new windshield, brake pads, tires, and alignment.  He just faxed me the mechanic report that also includes his buy price(by mistake I assume).  His profit didn't seem too high so I feel good about that.  I still need to budget $1500 for the tires, brakes, alignment, and 30K service.  The windshield is $1K at the dealer.  The whole seller offer to bring it into the dealership for fix up a couple of minor issues under warranty, but I was advice by another dealer that it's better for me to bring it in.  The reason is the Dealership will gave the retail customer better service than a whole sell dealer.&lt;br /&gt;&lt;br /&gt;The whole seller also helps people bid on cars in the dealer auction for a fee.  They typical fee around here is $500 for cars up to $25K and $750 for cars above.  The whole sell Blue Book price is about 10% below private seller, but with less hassle.  The auction house inspections all the cars first so you'll have all the reports.  So mathematically, it makes sense to by at an auction if the price is of the car is over $5000.  I'll keep this in mind for a niece who's looking for a 2000 Solara.&lt;br /&gt;&lt;br /&gt;However, I been eying some modified Mits EVOs.  I'm not sure leased car can be modified so these car probably have to go through private sells.  It'll be a few years until I can save up enough money to get another car.  But I'm banking on my wife ramping up her business after the girls are all full time in day care.  My son is old enough to come home on his own.  The Porsche was my investment in my wife to motivate her and I'm sure it's a good investment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-8335536300298422120?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/8335536300298422120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=8335536300298422120' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/8335536300298422120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/8335536300298422120'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/03/auto-whole-seller.html' title='Auto Whole Seller'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-7167424993715918224</id><published>2007-02-18T11:17:00.000-08:00</published><updated>2007-02-18T11:18:50.047-08:00</updated><title type='text'>Senco Coffe Pod Machine - making darker coffee</title><content type='html'>Start the machine for 2 seconds then stop it.  This allows the pod to soak in hot water.  Let it soak for a minute or so, then start the machine as normal.  Now the coffee should be much darker and stronger.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-7167424993715918224?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/7167424993715918224/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=7167424993715918224' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/7167424993715918224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/7167424993715918224'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/02/senco-coffe-pod-machine-making-darker.html' title='Senco Coffe Pod Machine - making darker coffee'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-5107762462381991925</id><published>2007-02-16T21:53:00.000-08:00</published><updated>2007-02-18T11:19:17.998-08:00</updated><title type='text'>Mother - tell your children how to count my notes</title><content type='html'>Mother by Danzig sounds simple enough, but as soon as I started playing along with the song, I notice that I mess up the timing after a while.  Mainly cause the song just a syncopated rhythm and it speeds up quite a bit as it goes along.  The solution was to rewrite the rhythm in my head.  I added a phantom note on the beat before the syncopated notes.  This made it easier to sync my foot tapping with the song and I'm able to keep up with the live version on Demon  Thrall minus the solo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-5107762462381991925?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/5107762462381991925/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=5107762462381991925' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/5107762462381991925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/5107762462381991925'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/02/mother-tell-your-children-to-count-my.html' title='Mother - tell your children how to count my notes'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-2615919690606084809</id><published>2007-02-16T21:36:00.000-08:00</published><updated>2007-02-16T21:52:59.124-08:00</updated><title type='text'>Virtual Channels vs Data Path</title><content type='html'>This caused me a little confusion early on, but now I don't know why.  However, I know it's causing other people some confusion too.  Data path is the physical path the data frames travel.  The path is determined by the routing protocol.&lt;br /&gt;&lt;br /&gt;Virtual channels are logical channels inside a data path.  It's generally used as a throttling mechanism so a particular stream of traffic doesn't hog up more than its shared of the data path throughput.  Virtual channel can be implemented with a credit model between peers.  Also, each virtual channel generally has its own queue.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-2615919690606084809?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/2615919690606084809/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=2615919690606084809' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/2615919690606084809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/2615919690606084809'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/02/virtual-channels-vs-data-path.html' title='Virtual Channels vs Data Path'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-6939922328012764136</id><published>2007-02-16T14:41:00.000-08:00</published><updated>2007-03-09T10:57:39.698-08:00</updated><title type='text'>Got a Miata</title><content type='html'>I picked up a '96 Miata yesterday.  It only had 36K on it and I had  a mechanic to a quick check on it.  I think I over paid a bit for it, but at this price range, that's not a big deal.&lt;br /&gt;&lt;br /&gt;I haven't never own a manual transmission car before, so my experience is quite limited.  I just realized today that I been skipping 3rd and 4th gear and going to 5th quite often.  This causes a great bit grinding noise as the dog teeth try to engage.  This is partly due to me driving at night and not realizing the damn car was a 5 speed instead of 4.  I took a closer look at the stick this morning and realize my mistake.&lt;br /&gt;&lt;br /&gt;Down shifting is still a pain, and I lock up the wheels quite often.  I'm breaking the down shift into multiple steps for now.  First, I step on the clutch and shift into neutral.  Then I rev up about 2K RPM and down shift.  However I only press the clutch once instead of twice.  I need to find out if that causes any problems or not.&lt;br /&gt;&lt;br /&gt;Here's some good information for heel-toe shifting:&lt;br /&gt;http://www.edmunds.com/ownership/howto/articles/45792/article.html.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-6939922328012764136?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/6939922328012764136/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=6939922328012764136' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/6939922328012764136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/6939922328012764136'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/02/roadster-update-again.html' title='Got a Miata'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-6800342631558863022</id><published>2007-02-12T00:45:00.000-08:00</published><updated>2007-02-12T00:45:04.975-08:00</updated><title type='text'>Dave's Run and the 5 O'clock Shadow</title><content type='html'>Dave's Run at Mammoth had moguls as large as a '66 VW Bug.  Alright, I just pull that year out of my ass, as I'm sure there were moguls as large as a '72 Bug as well.  On that first day I ski it, it happen to be 5 O'clock and it was my last run for the day.  My legs already burning from hopping around the fresh snow on the back side.  Dave's Run well exposed to the wind and it was quite bare.   At 5 O'clock on this particular day, the sun is at the perfect angle such that it generated almost no shadows on these gigantic bumps.  The invisible bumps pushed my knees into my chest over and over again, and I was too tired to push back down to gain traction and control.  It was like an old Chevy with broken shocks coming down a dirt service road after a rain storm with no breaks.  I was one hell of a ride and one I wouldn't want to experience again.  Almost as bad as the bus ride to Aspen when a buddy of mine barf in the beer cart just before Vegas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-6800342631558863022?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/6800342631558863022/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=6800342631558863022' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/6800342631558863022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/6800342631558863022'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/02/daves-run-and-5-oclock-shadow.html' title='Dave&apos;s Run and the 5 O&apos;clock Shadow'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-6735601310076734725</id><published>2007-02-11T23:57:00.000-08:00</published><updated>2007-02-12T01:00:58.996-08:00</updated><title type='text'>Hang Gliding Adventures</title><content type='html'>Hang gliding could be one of the best sports around if it wasn't for all those damn rules and  regulations.  My instructors was a Maverick who choose to lived on the fringed of society.  He has a college degree and was working a decent job once, but then decided that he didn't like the office and left a well paid career behind.  He had a couple of nice plots of land that should be worth a pretty penny today.  But to make ends meet, he used to chop firewood and rented out a decent house while he lived in a trailer out back.  He didn't bother with health insurance.  When his arm broke, he set it himself.  When he had allergy attack, she stuck max up nose instead of taking medication.  A minimalist a full decade before the fad caught on.&lt;br /&gt;&lt;br /&gt;His first experience with hang gliding was from a friend who flew over him and called his name from the sky.  He looked all around and couldn't see the guy until he looked up.  He got hooked ever since.  He used to train hawks or falcons.  One of his birds would fly with him until it got kill by an eagle.&lt;br /&gt;&lt;br /&gt;He didn't care too much for BS regulations, but he had enough common sense to keep us safe.  He took me and a buddy to a couple of sites where we could fly high, before we were qualified to do so at the local sites.  It's amazing how cold it gets at 10K' feet.  My buddy quit after a little mishap and I soon followed.  One problem with hang gliding is, some sites are so remote, it can take up to 2+ hours to get to a hospital.  This was also in the day back when neither of us had a cell phone or GPS.&lt;br /&gt;&lt;br /&gt;One of our best moments was the 2 of us driving up a 20 degree dirt road that's usually reserved for 4 wheel drives at slow speeds.  He had an old Chevy Citation.   He floor that baby at the bottom and bounced up the hill like a monster truck in a car crushing contest.  It overheated at the top but the car ride was infinitely wilder than the flight down.&lt;br /&gt;&lt;br /&gt;My scariest moment was a short flight when I got tangled in my harness.  I couldn't zip up and the landing site was 5 miles away.  I dragged too much and I was just staring at the tree line for 10 minutes.  I eventually found a small patch of open space just beyond a line of tress I cleared by no more than 20'.  The patch was small and it had a large row of bushes in the middle.  After clearing the 100' tress, I pulled in for as much speed as possible cause I knew there's going to be a nice wind shadow waiting for me.  As I'm cruising near the ground at 25-30 mph with zero head wind, I had to pop up over the bushes in the middle of the patch.  That almost stall me, but I pull in and just managed enough speed to go another 10', pop out my one untangled leg, flared and landed perfectly on that one leg.  I generally like to flare and run a bit instead of stopping on a dime.  It's less elegant, but I think you're less likely to get pushed around by gust in a winding landing zone.&lt;br /&gt;&lt;br /&gt;Once, I was down in the LZ watching a guy name Steve come down.  He was just starting out and I was down there with his wife, who was holding their baby.  Steve really love to fly and his wife was the most understanding woman I know.  Not only did she just gave birth, but they live in an apartment, and Steve's hang gliding sits on their living room floor.  At close to 20', I imagine it's quite intrusive.  On this particular flight, Steve was on a hill side 300' above the LZ.  He ran down the hill side and got air born quickly.  But suddenly, he banked right and disappeared behind the hill side.  She was a paled lady, but never as pale as she was at the one moment in time.  All that I could think to say was, "I'm sure Steve's all right."  And he was, but we didn't find out for the 10 longest minutes of her life.&lt;br /&gt;&lt;br /&gt;I discovered quickly that I get air sickness.  I tired it all kinds of remedies: ginger pills, pressure points, dry patch behind the ear, and oval medication, but nothing seem to help.  My eventual solution was to bring my camel pack.  That way, I can drink some water after I throw up, which is almost always 15 minutes into a bumpy flight, and after which, I feel completely fine.&lt;br /&gt;&lt;br /&gt;I still got my CG2000 harness, a DOT motocross helmet, and maybe my friend's altimeter.  The CG2000 was a kick ass harness with a single strap connected to the glider, unlike most harness with a web like connection that makes one look like a marionette.  I still kept little wheels on the base tube.  That helps to save a down tube on a bad landing despite making one look amateurish.  I'll see if I can set it up in the garage and spin the kids around.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-6735601310076734725?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/6735601310076734725/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=6735601310076734725' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/6735601310076734725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/6735601310076734725'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/02/hang-gliding-adventures.html' title='Hang Gliding Adventures'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-7489454327771758043</id><published>2007-02-11T23:40:00.000-08:00</published><updated>2007-03-12T13:45:26.536-07:00</updated><title type='text'>Roadster Update</title><content type='html'>My wife decide on the Titanium color Lotus Elise.  We plan to check out the local dealer soon, but she doesn't drive stick yet.  She's going to hire someone to teach her, and she won't even entertain the idea or me or a family member teaching her.  That's a wise decision.  (Update: she decided she really wanted an automatic after all so the Lotus was dropped from the list.)&lt;br /&gt;&lt;br /&gt;I'll going to get a Miata soon so she can practice on it.  There's a wide selection under 7K.  I'll also check out a local used lot call Wheel and Deal.  Tomorrow, I'll call some lady who was suppose to call me today.  My car is going to the shop, so I won't be able to stop by Wheel and Deal until it's fixed.  Hopefully in a day or two max.&lt;br /&gt;&lt;br /&gt;If I can get a car this week, I may be able to register for an autocross this weekend up in the city.  It's about 50 miles from here.  I'll go check it out regardless with 2 other guys.&lt;br /&gt;&lt;br /&gt;It seems the Spec racing is out due to time constraints.  But that's still a goal.&lt;br /&gt;&lt;br /&gt;My wife originally had some reservations about me racing cars, but I suggested that maybe I should start hang gliding again.  For some reason, she likes that even less.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-7489454327771758043?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/7489454327771758043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=7489454327771758043' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/7489454327771758043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/7489454327771758043'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/02/roadster-update.html' title='Roadster Update'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-8162988855163532748</id><published>2007-02-08T13:10:00.000-08:00</published><updated>2007-03-12T13:41:55.773-07:00</updated><title type='text'>Roadsters</title><content type='html'>My youngest daughter started daycare this week, so the wife can finally get out.  Step one is getting a new car.  It's unfortunately I sold off the convertible when we got the minivan.  Here's the list of roadsters we've considered&lt;br /&gt;&lt;br /&gt;1. Viper - This is her dream car, but it's too expensive for us right now.  The older one are in our price range, but she doesn't want something that's 8+ years old.&lt;br /&gt;&lt;br /&gt;2. Z4 - Strong contender, but still a bit pricey.  The loaded models are $45K to $50K out the door.&lt;br /&gt;&lt;br /&gt;3. Miata - My wife thinks it looks lame.&lt;br /&gt;&lt;br /&gt;4. Audi TT - She really like it for a while, but doesn't like the look anymore.  I think it looks like a VW Bug with a lower roof.&lt;br /&gt;&lt;br /&gt;5. S2000 - No automatic option&lt;br /&gt;&lt;br /&gt;6. Z350 - A guy car&lt;br /&gt;&lt;br /&gt;7. Lotus Elise - My son's favorite in our price range, but it's not a convertible and it's a guy car.  I'll go test drive this with my son.&lt;br /&gt;&lt;br /&gt;8. Boxster - No one liked it.  (Update: We changed our minds and got this car.  The look started to grow on us, especially after looking at the real thing a few times.)&lt;br /&gt;&lt;br /&gt;9. Eclipse - My wife thinks her '97 was the best model ever&lt;br /&gt;&lt;br /&gt;10. Solstice - Looks great, but got poor reviews.  We'll go look at the newer ones with the 260hp.&lt;br /&gt;&lt;br /&gt;11. SKY - I hate it when someone captializes every letter in a word.  My wife doesn't think it looks as nice as the Solstice, but it's got better reviews.&lt;br /&gt;&lt;br /&gt;12. MINI - She thinks it's gay, if one can imagine a car with sexual orientation.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I'm considering getting a car, but I'll have to see how much is left over after the wife gets hers.  Regardless, I'll be getting a used car:&lt;br /&gt;1. Miata - For autocross and Miata Spec racing. Spec is ~$12K for car only or ~$5K for donor&lt;br /&gt;&lt;br /&gt;2. Neon - For autocross and Neon Spec racing.  I prefer the Miata.&lt;br /&gt;&lt;br /&gt;3. '63 to '67 Vette - That's until I research these and found out how much they cost.&lt;br /&gt;&lt;br /&gt;4. Pre '63 Vette - Same as the above, but I already knew it's out of my price range before I started looking.&lt;br /&gt;&lt;br /&gt;5.  Early 80s RX7 - These were great for Spec racing.  Spec racer with extras is ~$4K w/ trailer&lt;br /&gt;&lt;br /&gt;6. '93+ RX 7 - Biggest bang for the buck, especially if some kid's already put a bunch of mods on it.&lt;br /&gt;&lt;br /&gt;7. Evo - Great cars, but I'm cheap so I figure the '93 RX 7 will provide a similar ride for less $.  I'll keep an eye on these in the used market in the coming years.  Plus it's all wheel drive and I believe there's a rally club a couple of hours north of here.  An old Audi or Subaru may be more cost effective here.&lt;br /&gt;&lt;br /&gt;8. Cataham like kit cars - If I ever get the time to DIY or find a good deal from a professional build, I would love to get one of these.  It's not much safer than a motorcycle, but damn fun to drive.  A Super 7 is preferred.&lt;br /&gt;&lt;br /&gt;9. Alfa Remeo - I love that the stick is on the dash, but I heard the reliability is pretty bad.  The replacement parts are harder to find and more expensive.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-8162988855163532748?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/8162988855163532748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=8162988855163532748' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/8162988855163532748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/8162988855163532748'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/02/roadsters.html' title='Roadsters'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-805223170290529579</id><published>2007-02-01T17:19:00.000-08:00</published><updated>2007-02-08T23:27:01.271-08:00</updated><title type='text'>Fairness is for Wusses</title><content type='html'>You got to queue some tasks, so you put it in a FIFO or multiple FIFOs and RR them right?  If the system is blogged down, then everyone still gets there fair share of the resources and get blogged down evenly.&lt;br /&gt;&lt;br /&gt;Think about that for a second.  Say you got sever whose clients all start to run some heavy processing application at the same time.  You let them all run, and everyone will complain that it's too slow and the system is unusable.  No one is happy in this scenario.&lt;br /&gt;&lt;br /&gt;What would happen if you used an unfair system like a stack for the task queue?  The last people to start the application gets all the CPU cycles and their applications run fine.  The first people to start the application times out and have to try back later.  Some people are happy in this scenario.  The worst case wait period, in theory, is just as bad as the worst case wait period in the FIFO scenario, but the user experience on average is much better.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-805223170290529579?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/805223170290529579/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=805223170290529579' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/805223170290529579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/805223170290529579'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/02/fairness-is-for-wusses.html' title='Fairness is for Wusses'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-1162107445642183685</id><published>2007-02-01T17:09:00.000-08:00</published><updated>2007-02-01T17:13:56.114-08:00</updated><title type='text'>Why C++ won't compile my C code or verse versa</title><content type='html'>This is a running list of stuff that I'll continue to update.&lt;br /&gt;&lt;br /&gt;Why C code doesn't compile in C++?&lt;br /&gt;1. Incrementing  an enum is not allow in C++.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Why C++ code that uses only C syntax won't compile in C?&lt;br /&gt;1. C doesn't allow the same const variable to be declared in multiple files unless it's static.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-1162107445642183685?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/1162107445642183685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=1162107445642183685' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/1162107445642183685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/1162107445642183685'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/02/why-c-wont-compile-my-c-code-or-verse.html' title='Why C++ won&apos;t compile my C code or verse versa'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-2397172252610522573</id><published>2007-02-01T16:11:00.000-08:00</published><updated>2007-02-09T10:55:48.158-08:00</updated><title type='text'>NAT is not a Firewall</title><content type='html'>My experience is quite dated here.&lt;br /&gt;&lt;br /&gt;A NAT is a very basic firewall.  You can specify which ports are open and where to route that traffic.  When a machine access the Internet through a NAT, it's more protected than a machine that is not.  It's one a few ports that are open and not every port.&lt;br /&gt;&lt;br /&gt;To be consider a firewall however, you'll need to pass some security audits.  You basic NAT will not pass this test.  A NAT doesn't need to track the TCP state for open sessions.  A NAT doesn't check if a new session for an application is coming from the correct source.  A NAT doesn't check for DOS attacks or a security scans.  A NAT box does not consider security very much.&lt;br /&gt;&lt;br /&gt;Basically, a NAT is a firewall that's not secure enough to be call a firewall except by the most evil of marketer.  Back in the late 1990s, some companies did market NAT as a firewall.  Make sure your firewall is from a know security vendor(such as Cisco or Checkpoint) or has a ICSA or other recognized 3rd party certification.  Best to google them to see what people say.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-2397172252610522573?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/2397172252610522573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=2397172252610522573' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/2397172252610522573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/2397172252610522573'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/02/nat-is-not-firewall.html' title='NAT is not a Firewall'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-6805599765245988573</id><published>2007-02-01T15:37:00.000-08:00</published><updated>2007-02-01T16:10:41.349-08:00</updated><title type='text'>Prefetching Data &amp; Hardware Registers</title><content type='html'>Some older processors may not support prefetch.&lt;br /&gt;&lt;br /&gt;Try the gcc __builtin_prefetch__ function first.&lt;br /&gt;&lt;br /&gt;When that doesn't work, you need to write inline assembly.   See my MIPS assembly post for a prefetch code for a MIPs processor.&lt;br /&gt;&lt;br /&gt;Always instrument you code first to see where there are high cache misses.  Once you identify which the offending data structures, see if it's possible to reduce the size.  Some times, people write overly large structures thinking that they're trading size for performance.  This is especially true for hash tables.&lt;br /&gt;&lt;br /&gt;If you've done all higher level optimization first and it's still not fast enough, then it may be time to prefetch.  Remember that prefetch does take cycles and system resource.  If the code accesses a piece of data 1000 times and miss the cache once, it's probably not worth prefetching.  You can  tell if prefetching is worth while by carefully instructing the code first.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;It's also possible to prefetch a hardware register, but it's a PITA and I've never found the trade-offs worth while for a production level code.&lt;br /&gt;&lt;br /&gt;1. Reserved a GPR(general purpose register) to store the prefetch value&lt;br /&gt;   GCC has a compiler option xxx which allows you to do this.&lt;br /&gt;   You don't want to take away this register from everyone so I suggest you separate the code that's going to reserver this register into it's own file to only that file or directory reserves this register.&lt;br /&gt;   Make this register a non-clobber register if you intend to make subroutine calls between the time you prefetch until you use the prefetched value.&lt;br /&gt;&lt;br /&gt;2. Write inline assembly to load from the hardware register to this GPR.&lt;br /&gt;  The CPU won't block waiting for this transfer to finish.  However, the CPU will block if anyone attempts another operation using this GPR.&lt;br /&gt;3. Write inline assembly to load from this GPR to whatever variable you want to use.&lt;br /&gt;  If the load operation is not finished, then the CPU will block, but you've still saved some valuable cycles.&lt;br /&gt;&lt;br /&gt;Obviously, the hardware register that was prefetched is out of date by the time you use it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-6805599765245988573?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/6805599765245988573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=6805599765245988573' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/6805599765245988573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/6805599765245988573'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/02/prefetching-data-hardware-register.html' title='Prefetching Data &amp; Hardware Registers'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-8176954618683020526</id><published>2007-02-01T15:03:00.000-08:00</published><updated>2007-02-01T15:23:13.577-08:00</updated><title type='text'>Rings and the Power of 2</title><content type='html'>Create ring buffers whose size is a power of 2 to improve performance.  This allows you to index with an bit_or operation instead of a mod or condition check for boundary.&lt;br /&gt;&lt;br /&gt;Examples of write routine for a ring buffer.&lt;br /&gt;&lt;br /&gt;#define RING_SIZE (10)&lt;br /&gt;int ring_idx = 0;&lt;br /&gt;int ring_buf[RING_SIZE];&lt;br /&gt;&lt;br /&gt;int ring_write(int val)&lt;br /&gt;{&lt;br /&gt;     ring_buf[ring_idx++] = val;&lt;br /&gt;     if (ring_idx == RING_SIZE);&lt;br /&gt;          ring_idx = 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;or&lt;br /&gt;&lt;br /&gt;int ring_write(int val)&lt;br /&gt;{&lt;br /&gt;     ring_buf[(ring_idx++) % RING_SIZE] = val;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Example with a ring size that's a power of 2:&lt;br /&gt;(This code is not tested, but I've tested similar code.  So the concept works, but there may be a bug.)&lt;br /&gt;&lt;br /&gt;#define RING_POW 5&lt;br /&gt;#define RING_SIZE (1 &lt;&lt; RING_POW)&lt;br /&gt;#define RING_MASK(RING_SIZE - 1)&lt;br /&gt;&lt;br /&gt;int ring_idx = 0;&lt;br /&gt;int ring_buf[RING_SIZE];&lt;br /&gt;&lt;br /&gt;int ring_write(int val)&lt;br /&gt; {&lt;br /&gt;      ring_buf[(ring_idx++) | RING_MASK] = val;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;The assumption here is that a bitwise-or operation is much cheaper than a condition branch or a mod operation.  That's true on all processors I've worked on.  Maybe some DSP or math coprocessors are able to perform really quick mod operations.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-8176954618683020526?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/8176954618683020526/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=8176954618683020526' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/8176954618683020526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/8176954618683020526'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/02/rings-and-power-of-2.html' title='Rings and the Power of 2'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-3081176657227915183</id><published>2007-02-01T01:08:00.000-08:00</published><updated>2007-02-01T01:13:37.532-08:00</updated><title type='text'>Beware of objdump and inline assembly</title><content type='html'>In the inline assemby, you can change the cpu mode with a directive such as .set mips4.  Unfortunately, the objdump doesn't know this directive since it only looks at the object file.  Sometimes it'll incorrectly decode a machine code.&lt;br /&gt;&lt;br /&gt;I ran into this problem with the prefetch code.  The assembly instruction pref was decoded to lw??.  You have to provide a cpu mode options to objdump similar to how to specify the cpu mode to the compiler.&lt;br /&gt;&lt;br /&gt;&lt;add&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-3081176657227915183?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/3081176657227915183/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=3081176657227915183' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/3081176657227915183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/3081176657227915183'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/02/beware-of-objdump-and-inline-assembly.html' title='Beware of objdump and inline assembly'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-6041312865413993483</id><published>2007-01-31T12:06:00.000-08:00</published><updated>2007-01-31T13:42:12.565-08:00</updated><title type='text'>inline assembly for MIPS</title><content type='html'>Here's a piece of code to prefetch data. It's useful if the compiler is use mips2, so the gcc __builtin_prefetch() may not work.&lt;br /&gt;&lt;br /&gt;/* Prefetch Header */&lt;br /&gt;#define PREF_LOAD 0 /* intended for read */&lt;br /&gt;#define PREF_STORE 1 /* intended for write */&lt;br /&gt;&lt;br /&gt;#define _PREFETCH(v,t,o) \&lt;br /&gt;__asm__ __volatile__ \&lt;br /&gt;( \&lt;br /&gt;".set push\n" \&lt;br /&gt;".set mips4\n" \&lt;br /&gt;"pref %1, %2(%0)\n" \&lt;br /&gt;".set mips2\n" \&lt;br /&gt;".set pop\n" \&lt;br /&gt;:: "r"(v), "i"(t),"i"(o) \&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;.set is a directive to the compiler and not actually assembly. It'll be translated into multiple assembly instructions, but not to be confused with synthesis instructions like li.&lt;br /&gt;&lt;br /&gt;.set push and pop will save the required registers on the stack.&lt;br /&gt;.set mips4 and mip2 set the mode of operation on the processor.&lt;br /&gt;pref is the assembly instruction to prefech data. This is a mips4 instruction, which is why it's preceed by .set mips4.&lt;br /&gt;&lt;br /&gt;"r" is a constraint says to keep the value of v in a general purpose register.&lt;br /&gt;"i" says the value is a constant of the type integer&lt;br /&gt;&lt;br /&gt;%0, %1, and %2 refers to v, t, and o respectively. The value used to reference a variable is dictated by the order the varables appear after "::".&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Example: Writing a 64bit value when the compiler is using 32bits.&lt;br /&gt;&lt;br /&gt;void write64(uint32_t addr, uint64_t val)&lt;br /&gt;{&lt;br /&gt;uint32_t high = val &gt;&gt; 32; /* we don't assume endianness */&lt;br /&gt;uint32_t low = val &amp; 0xffffffff;&lt;br /&gt;&lt;br /&gt;__asm__ __volatile__&lt;br /&gt;(&lt;br /&gt;".set push\n"&lt;br /&gt;".set noreorder\n"&lt;br /&gt;".set noat\n"&lt;br /&gt;".set mips3\n"&lt;br /&gt;"dsll32 $16, %1, 0 \n"&lt;br /&gt;"dsll32 $17, $0, 0 \n"&lt;br /&gt;"dsrl32 $16, $16, 0 \n"&lt;br /&gt;"or $17, $17, $16 \n"&lt;br /&gt;"sd $17, (%2) \n"&lt;br /&gt;".set mips2\n"&lt;br /&gt;".set reorder\n"&lt;br /&gt;".set pop\n"&lt;br /&gt;:: "r" (high), "r" (low), "r" (addr)&lt;br /&gt;: "$16", "$17"&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$16 and $17 are general purpose registers.  The line begining with ":" says that $16 and $17 need to be saved and restored as part of ".set push" and ".set pop".&lt;br /&gt;&lt;br /&gt;To save time, replace $16 and $17 with $8 and$9.  These are temporary registers that don't need to be protected after a subroutine call, so you can remove the line with ":" to save 4 instructions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-6041312865413993483?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/6041312865413993483/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=6041312865413993483' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/6041312865413993483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/6041312865413993483'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/01/inline-assembly-for-mips.html' title='inline assembly for MIPS'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-1068749530510377489</id><published>2007-01-31T12:01:00.000-08:00</published><updated>2007-01-31T12:06:05.192-08:00</updated><title type='text'>sizeof my_what or sizeof (my_what)</title><content type='html'>sizeof is an operator, like ++ and *, and not a function.&lt;br /&gt;&lt;br /&gt;To get the size of a structure, use ().  To get the size of a variable, don't use ().&lt;br /&gt;&lt;br /&gt;struct st_s{&lt;br /&gt;   int i, j;&lt;br /&gt;} s;&lt;br /&gt;&lt;br /&gt;int sz;&lt;br /&gt;sz = sizeof(struct st_s);&lt;br /&gt;sz = sizeof s;&lt;br /&gt;sz = sizeof (s); /* misused, but gcc and probably most compiler will accept this */&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-1068749530510377489?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/1068749530510377489/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=1068749530510377489' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/1068749530510377489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/1068749530510377489'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/01/sizeof-mywhat-or-sizeof-mywhat.html' title='sizeof my_what or sizeof (my_what)'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-7751015691151925264</id><published>2007-01-31T11:37:00.000-08:00</published><updated>2007-01-31T11:55:22.561-08:00</updated><title type='text'>Why bother with C++ explicit cast</title><content type='html'>C++ explicit cast are static_cast, const_cast, reinterpret_cast, and dynamic_cast.&lt;br /&gt;&lt;br /&gt;int i = 5;&lt;br /&gt;float j;&lt;br /&gt;&lt;br /&gt;j = (float)i;  /* C cast */&lt;br /&gt;j = float(i); /* C++ generic cast */&lt;br /&gt;j = static_cast&lt;float&gt;(i); /* C++ explicit cast */&lt;br /&gt;&lt;br /&gt;The reasons to use C++ explicit cast are clarity and correctness.  It's a safty net as show in the following examples.&lt;br /&gt;&lt;br /&gt;int i = 5;&lt;br /&gt;float *pj;&lt;br /&gt;&lt;br /&gt;pj = (float *)i; /* legal */&lt;br /&gt;pj = (float *)(i); /* legal */&lt;br /&gt;pj = static_cast&lt;float&gt;(i); /* ILLEGAL */&lt;br /&gt;pj = reinterpret_cast&lt;float&gt;(i); /* legal */&lt;br /&gt;&lt;br /&gt;When you got a bug in your code and you suspect it's caused by casting, you'll generally look at the reinterpret_cast before static_cast, so it can help reduce the debugging effort too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-7751015691151925264?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/7751015691151925264/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=7751015691151925264' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/7751015691151925264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/7751015691151925264'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/01/why-bother-with-c-explicit-cast.html' title='Why bother with C++ explicit cast'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-8619878843782320082</id><published>2007-01-30T10:28:00.000-08:00</published><updated>2007-01-30T10:40:00.917-08:00</updated><title type='text'>Inlining C routines</title><content type='html'>Standards says to use __inline__ with the "__".&lt;br /&gt;&lt;br /&gt;GCC supports with and without and there is no functional difference between them.&lt;br /&gt;&lt;br /&gt;Declaring a routine __inline__ is merely making a suggestion to the compiler.  It' not a guarantee that the routine will be inline.  It's a common misunderstanding that inline is functional equlivant to #define.&lt;br /&gt;&lt;br /&gt;GCC will not inline a routine when the optimization is off.&lt;br /&gt;GCC option -finline_function ask the compiler to inline any routine it deeds a good candiate for inline, even if that routine is not marked inline.&lt;br /&gt;GCC option -winline will warn you when an inline function can't be inlined.&lt;br /&gt;&lt;br /&gt;Should one use extern, static, or PO(plain old) __inline__?&lt;br /&gt;&lt;br /&gt;     Use static __inline__ in a source file. The compiler will inline when it wants to, but if it can't, it'll be a normal static routine. You can do this in a header file too and is a good fix for a case where a bunch of inline routines were defined extern, but the compiler didnt' inline them and the linker is now complaining about unresolved symbols. This is probably not the best solution, but it's quick and easy.&lt;br /&gt;     Don't use extern __inline__, cause there's nothing good to come out of it. There's no body for this routine unless you explicitly define one somewhere. Don't do this, cause anytime you duplicate code, you must maintain multiple version of the same file and someone down the line will forget to update one of them. If the compiler does not inline this routine, the linker will complain about unresolved symbols.&lt;br /&gt;     I need more research to figure out what the PO __inline__ is good for. I thought I knew, but I ran a test and it failed.&lt;br /&gt;&lt;br /&gt;Why does inline exist?&lt;br /&gt;     Inline is suppose to trade space for performance. Instead of have a routine defined once, you put the body of that routine inside the caller. The saves the time it takes to make a function call. The time it takes to make a function call is machine dependent and consist of setting up a new frame on the stack, saving and restoring registers, and a couple of branch/jump instructions. For a small routine, the overhead may take longer than the excution of the routine itself.&lt;br /&gt;&lt;br /&gt;     My suggestion is to not inline anything. Try the -finline_functions and -O2 option with GCC to see if it makes you code run any faster. Make sure you instrument you code first to guage performance before you start to inline anything to see if it really makes a difference. Linux kernel got a make over where the developers went through all the code and removed a bunch of inlines. The reason was inline can make the code expand which takes more memory. When the code gets bigger, you increase the likely hood of getting cache misses which would negate any benefit you get from inlining and probably make things worse. When you really need to improve your system performance, inlining will probably make very little difference relative to all the other things you can do, but it is a low hanging fruit that gets misused a lot.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-8619878843782320082?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/8619878843782320082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=8619878843782320082' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/8619878843782320082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/8619878843782320082'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/01/inlining-c-routines.html' title='Inlining C routines'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-623797384099143884</id><published>2007-01-26T14:42:00.000-08:00</published><updated>2007-01-26T15:40:56.323-08:00</updated><title type='text'>Debugging Corruption</title><content type='html'>The difficulty here is the problem is not found until someone uses the corrupted data. The code crashes or produces incorrect data, and the problem is assigned to the wrong developer.&lt;br /&gt;&lt;br /&gt;Questions to ask&lt;br /&gt;1. Check if your OS has ways for you to check your stack depth and validate that your stack has not crash into your heap.&lt;br /&gt;2. Check for buffer overflows of buffers on the stack.&lt;br /&gt;3. Check for any inline assembly or assembly code.  Do they properly protect the registers they use?&lt;br /&gt;4. Does disabling the interrupt or bumping priority effect the problem or make it go away?&lt;br /&gt;5. Does the problem only happen after a subroutine call?&lt;br /&gt;6. Is the stack getting corrupt or is it a general register?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here's a strategy for heap corruption:&lt;br /&gt;&lt;br /&gt;First thing to do is put up boundries, both physical and temporal. You want to catch the problem as soon as possible. The best result is to root cause the problem. The next best thing is to proof it's not your code and find someone else to hand off the problem too.&lt;br /&gt;&lt;br /&gt;To put a physical boundry around your code, just reserve large buffers before and after the data that's getting corrupted. If it's random data, then put these large buffers everywhere. Mark these buffers with some data that's humanly reable and seemly random. I suggest 0xdeadbeef, because it's an english word that's unlike to be used and it's an odd number. Odd number is important because the only time you see a number this big is when it's a pointer, and valid pointers are always even(unless you're running an 8 bit processor).&lt;br /&gt;&lt;br /&gt;When the problem occurs, dump the buffers to see if it's corrupted. If the program crashed, you'll need to generate a core dump for post-mortem analysis with GDB.&lt;br /&gt;&lt;br /&gt;To put a temporal boundry around your code, write routines which validates these large buffers have not been corrupted and place these checks whereever someone enters your module.&lt;br /&gt;&lt;br /&gt;The above works well on a singled threaded application that has no exception handler or ISRs. If you suspect an exception handler, then just put the validation routine in the exception handler. If you suspect another thread, try bumping the priority of the thread that your module runs to be the highest in your process. If that doesn't work and you suspect and ISR, then try disabling the interrupts.&lt;br /&gt;&lt;br /&gt;Debugging is part logical, luck, art, and intiutions. My strategy for debugging is not to find the root cause, but to narrow it down. Think of ways to quickly eliminate as many of the likely possibilites as possible. Your source code control is also a valuable tool. If the problem is a regression problem, find where the problem started to occur and see what check in occur from that point to the previous version of the code that did not have the problem. Managers and SQA love to use that latter method.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-623797384099143884?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/623797384099143884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=623797384099143884' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/623797384099143884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/623797384099143884'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/01/debugging-heap-corruption.html' title='Debugging Corruption'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-5770450890827060611</id><published>2007-01-19T19:13:00.000-08:00</published><updated>2007-01-19T19:32:47.516-08:00</updated><title type='text'>Slot Aloha for Bandwidth Request</title><content type='html'>This is a link level protocol for wireless point to multi-point configuration.  It'll work for both fix channel and frequency hoppers.  In each time period, allocate a time for the nodes to request bandwidth.  This time slice is contented in that any node can attempt to sent.  The base station will then anounce which node gets to send data.  This reduces the contention time of a standard aloha protocol.  It worked pretty well in the 2.4G and 3.5G bands with 32 nodes running heavy traffic.&lt;br /&gt;&lt;br /&gt;For nodes that get to send, it should piggyback its request for more bandwidth on the data frame.  The nodes should use an exponential backoff algorithm like the old 10/100 Ethernets when it detects that it's bandwidth request collided with that of another node's.&lt;br /&gt;&lt;br /&gt;I remember getting near an array of radios and feeling hair in the back of my hand tremble in awe.  Also climbing those 200' radio towers which are 1' wide when the wind is blowing made my knees tremble a bit.  Seeing the drunk free climb a 300' tower to pee off the top was priceless.&lt;br /&gt;&lt;br /&gt;I'm almost intested enought to google 3G or iMode to see how those protocols work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-5770450890827060611?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/5770450890827060611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=5770450890827060611' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/5770450890827060611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/5770450890827060611'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/01/slot-aloha-for-bandwidth-request.html' title='Slot Aloha for Bandwidth Request'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-5389941005904730974</id><published>2007-01-19T18:43:00.000-08:00</published><updated>2008-02-17T09:41:49.951-08:00</updated><title type='text'>Windows Freeware</title><content type='html'>1. Openoffice - replaces MS Office and also runs on Linux.&lt;br /&gt;&lt;br /&gt;2. Spybot - removes spyware&lt;br /&gt;&lt;br /&gt;3. iTunes - a decent way to backup your MP3 and you may occassionally need to buy something&lt;br /&gt;&lt;br /&gt;4. Classic Media Player - replaces Windows Media Player and does not require another application to play commerical DVDs.&lt;br /&gt;&lt;br /&gt;5. Deepburner - The only free DVD data burner I found.  There's also a paid version.&lt;br /&gt;&lt;br /&gt;6. MAME - plays old arcade games by emulating the hardware and running the same ROM that was in the original game.&lt;br /&gt;&lt;br /&gt;7. Daphne - plays old laser disc games like Dragon's Lair and Space Ace&lt;br /&gt;&lt;br /&gt;8. Virtual Pinball - Get the GnR table&lt;br /&gt;&lt;br /&gt;9. The emulator zone has many more emulators to old consoles(NES) and computer(Commodore 64).  I didn't have an interest to try any of those.  I did try the Apple IIe emulator once to play Bards Tale, but you can get the PC version now.&lt;br /&gt;&lt;br /&gt;10. Powertab - guitar tabs program with a play button.  It's not as popular as Guitar Pro and probably not as good, but it's free.&lt;br /&gt;&lt;br /&gt;11. Ultimate Guitar has all the tabs you would want.&lt;br /&gt;&lt;br /&gt;12. Audacity - record or edit your music.  It only records a single channel.  I use my digital 8 track to record and Audacity to edit.&lt;br /&gt;&lt;br /&gt;13. Internet Archive has free music and books.  It's famous for all the live Grateful Dead concerts, but check out the Derek Trucks band and the 78RPM stuff.&lt;br /&gt;&lt;br /&gt;14. DOS Box and VDMSound - These can help you play old DOS games.  I needed this in Win2K, but the latest XP seems to run those games fine without this.&lt;br /&gt;&lt;br /&gt;15. DVD Decryper, DVD Shrink, Rip4Me, and FixVTS - This combo will work for any DVD that your PC can read.  Some movie DVDs are not recognized by some DVD Drives.&lt;br /&gt;&lt;br /&gt;16. DVD2AVI will get the audio off of DVDs in case you want to make a CD from the concert you have on DVD.  Use Rip4Me to get the VOBs, then load it with DVD2AVI.  Audacity can edit the audio.  In DVD2AVI, press F5 and ESC to play a bit of the move.  Take note of the audio settings and click Audio-&gt;Channel Format-&gt;xxx to set the proper format.&lt;br /&gt;&lt;br /&gt;17. Auto Gordian Knot - Like DVD2AVI but works well with Dolby.  Takes a few hours.&lt;br /&gt;&lt;br /&gt;18. Putty - telnet and ssh client&lt;br /&gt;&lt;br /&gt;19. Cygwin - UNIX bash shell and it comes with standard UNIX tools&lt;br /&gt;&lt;br /&gt;20. VIM - VI like editor for those who want to do it all without a mouse&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-5389941005904730974?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/5389941005904730974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=5389941005904730974' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/5389941005904730974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/5389941005904730974'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/01/windows-freeware.html' title='Windows Freeware'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-822900030916778720</id><published>2007-01-19T17:22:00.000-08:00</published><updated>2007-02-01T17:17:36.673-08:00</updated><title type='text'>Free Windows Software Development Tools</title><content type='html'>I'm planning to learn C++ by writing a simple game. Getting the initial setup and learning the tools is very important. Here are a few different free configurations for Windows to boot strap a C++ development. I'm baised towards UNIXie tools.&lt;br /&gt;&lt;br /&gt;GUI Interface&lt;br /&gt;1. Bloodshed C++ IDE&lt;br /&gt;This includes the editor, compiler tools, and debugger. The compiler tools are GNU tools and it appears to be integrated with CVS, but I haven't tried that feature yet.&lt;br /&gt;&lt;br /&gt;Command Line Interface&lt;br /&gt;1. VIM*&lt;br /&gt;This is an updated VI with color. You can download kits to configure VIM for any programming language.&lt;br /&gt;2. Cygwin&lt;br /&gt;This is a UNIX bash shell so you can use the GNU tools directly from a BASH shell on you Windows machine.&lt;br /&gt;3. GNU Tools&lt;br /&gt;a. gcc - this include the compiler, assembler, and linker to turn your C++ code into an executable.&lt;br /&gt;b. make - automate the build. This is a very tough tool to master, but easily enough to get started on just by copying one of the examples from the document.&lt;br /&gt;4. Subversion** or CVS&lt;br /&gt;&lt;br /&gt;*VI and Emacs are the defacto UNIX editors. You only need to choose one as all modern UNIX based machines will have both. Many UNIX users only know one such as myself.&lt;br /&gt;&lt;br /&gt;**Subversion is suppose to be an updated version of CVS.  I tried to download the source, but it always fails.  Maybe the project is running low on funds and can't affort too many downloads.&lt;br /&gt;&lt;br /&gt;You may ask yourself why anyone would use the Command Line interface when nice GUIs are available? Flexibility, stuborness, and legacy(code and developers). I perfer to use a GUI IDE to manage my personal projects, but toolchain gurus like to hack the Makefiles.  On large projects, it's actually easier to use command line interface because you can write scripts.  The scripts can compile multiple projects, check for errors, generate reports, and run a regression test suite.  Also, on large embedded projects, there may be multiple CPUs on a single platform to compile code for and each uses a different toolchain.  I'm not aware for an IDE that handles this situation as gracefully from a configuration management's POV as its command line counterpart.&lt;br /&gt;&lt;br /&gt;2nd reason to use Command line is I got some an old setup from a previous job that's running a commerical RTOS.  I'm not sure if the hardware still works or I still remember how to setup the build environment, but it'll be interesting to rewrite the driver in C++ if I was demented enough.&lt;br /&gt;&lt;br /&gt;Thinking in C++: 2 volumes and it seems to have good reviews on Amazon.  I read a bit of this and have been writing code as I go along.  I believe the author made a mistake in regards to using volatile for mutli-threaded programming.  This is incorrect.  Nothing in the C/C++ standard to my understanding supports the multi-threaded model (such as ADA).  This is handled by POSIX standard libraries and probably some Microsoft libraries.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bluedonkey.org/cgi-bin/twiki/bin/view/Books/VxWorksCookbookCPP"&gt;http://www.bluedonkey.org/cgi-bin/twiki/bin/view/Books/VxWorksCookbookCPP&lt;/a&gt;&lt;br /&gt;This seems interesting for using C++ in an embedded environment.  I'll save the link to check out later.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-822900030916778720?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/822900030916778720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=822900030916778720' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/822900030916778720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/822900030916778720'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/01/software-development-tools.html' title='Free Windows Software Development Tools'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-5836877753173427170</id><published>2007-01-17T13:40:00.000-08:00</published><updated>2007-01-17T13:49:17.459-08:00</updated><title type='text'>How to Win Friends and Influence People - summary</title><content type='html'>I got this from the web, and I like it enough to back it up in case that site goes down. I remember the first rule from an ROTC class I had. It's been a while since I read the book, but it nice to see the points outlined here.&lt;br /&gt;&lt;br /&gt;How to Win Friends and Influence People&lt;br /&gt;This is Dale Carnegie's summary of his book, from 1936&lt;br /&gt;&lt;br /&gt;&lt;a name="one"&gt;Part One&lt;/a&gt; - Fundamental Techniques in Handling People&lt;br /&gt;1. Don't criticize, condemn or complain.&lt;br /&gt;2. Give honest and sincere appreciation.&lt;br /&gt;3. Arouse in the other person an eager want.&lt;br /&gt;&lt;br /&gt;&lt;a name="two"&gt;Part Two&lt;/a&gt; - Six ways to make people like you&lt;br /&gt;1. Become genuinely interested in other people.&lt;br /&gt;2. Smile.&lt;br /&gt;3. Remember that a person's name is to that person the sweetest and most important sound in any language.&lt;br /&gt;4. Be a good listener. Encourage others to talk about themselves.&lt;br /&gt;5. Talk in terms of the other person's interests.&lt;br /&gt;6. Make the other person feel important - and do it sincerely.&lt;br /&gt;&lt;br /&gt;&lt;a name="three"&gt;Part Three&lt;/a&gt; - Win people to your way of thinking&lt;br /&gt;1. The only way to get the best of an argument is to avoid it.&lt;br /&gt;2. Show respect for the other person's opinions. Never say, "You're wrong."&lt;br /&gt;3. If you are wrong, admit it quickly and emphatically.&lt;br /&gt;4. Begin in a friendly way.&lt;br /&gt;5. Get the other person saying "yes, yes" immediately.&lt;br /&gt;6. Let the other person do a great deal of the talking.&lt;br /&gt;7. Let the other person feel that the idea is his or hers.&lt;br /&gt;8. Try honestly to see things from the other person's point of view.&lt;br /&gt;9. Be sympathetic with the other person's ideas and desires.&lt;br /&gt;10. Appeal to the nobler motives.&lt;br /&gt;11. Dramatize your ideas.&lt;br /&gt;12. Throw down a challenge.&lt;br /&gt;&lt;br /&gt;&lt;a name="four"&gt;Part Four&lt;/a&gt; -&lt;br /&gt;Be a Leader: How to Change People Without Giving Offense or Arousing Resentment&lt;br /&gt;A leader's job often includes changing your people's attitudes and behavior. Some suggestions to accomplish this:&lt;br /&gt;1. Begin with praise and honest appreciation.&lt;br /&gt;2. Call attention to people's mistakes indirectly.&lt;br /&gt;3. Talk about your own mistakes before criticizing the other person.&lt;br /&gt;4. Ask questions instead of giving direct orders.&lt;br /&gt;5. Let the other person save face.&lt;br /&gt;6. Praise the slightest improvement and praise every improvement. Be "hearty in your approbation and lavish in your praise."&lt;br /&gt;7. Give the other person a fine reputation to live up to.&lt;br /&gt;8. Use encouragement. Make the fault seem easy to correct.&lt;br /&gt;9. Make the other person happy about doing the thing you suggest.&lt;br /&gt;&lt;br /&gt;I think my father has the audio book. I may pop that in the car.&lt;br /&gt;&lt;br /&gt;Here's my summary of Think and Grow Rich by Neoploen Hill&lt;br /&gt;1. Don't gave up&lt;br /&gt;2. Be persistent&lt;br /&gt;3. Learn from your failures&lt;br /&gt;It's pretty much one simple message over and over again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-5836877753173427170?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/5836877753173427170/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=5836877753173427170' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/5836877753173427170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/5836877753173427170'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/01/how-to-win-friends-and-influence-people.html' title='How to Win Friends and Influence People - summary'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-885043178734792139</id><published>2007-01-12T18:40:00.000-08:00</published><updated>2007-01-12T18:44:57.026-08:00</updated><title type='text'>Embedded Design for Performance (MIPS)</title><content type='html'>An embedded system is waiting for an external event to occur and then&lt;br /&gt;performance some action based on those events without user interaction. The&lt;br /&gt;main considerations are generally performance, footprint, and power.&lt;br /&gt;1. Keep the architecture as simple as possible, but no simpler&lt;br /&gt;Below are architectures list by there level of&lt;br /&gt;complexity.&lt;br /&gt;A. Polling Loop&lt;br /&gt;The CPU loops and polls all the external inputs. It's festible to write&lt;br /&gt;all or most of this in assembly. The latency for servicing any input&lt;br /&gt;is the worst time through the loop once. This is power hungry so it's&lt;br /&gt;no good for anything running on batteries.&lt;br /&gt;B. Interrupt Driven with Single Loop&lt;br /&gt;ISR will handle external events. The loop is left to do data crunching.&lt;br /&gt;Locking becomes an issue here. The latency for any interrupt is the&lt;br /&gt;processing time for any higher, possible same, priority interrupts plus&lt;br /&gt;any lock outs by the main loop or other ISRs. It's still festible to&lt;br /&gt;write most of all of this in assembly. The loop can poll or wait for an&lt;br /&gt;event. For power sensitive applications, the loop should wait. This&lt;br /&gt;applies to the more complex architectures, too.&lt;br /&gt;C. Single Thread&lt;br /&gt;Basically the same as B, but you have a stack and an RTOS running. The&lt;br /&gt;RTOS probably supports multiple threads and is just chewing up extra&lt;br /&gt;clock cycles. Benefits for an RTOS is that it should come with tools.&lt;br /&gt;Most code will be written in a higher level language such as C.&lt;br /&gt;D. Multiple Threads&lt;br /&gt;Similar to the single thread model plus scheduling overheads and more&lt;br /&gt;sychronization issues.&lt;br /&gt;E. Multiple Processes&lt;br /&gt;Each process should have its own memory space, so you get an extra TLB&lt;br /&gt;overhead. The scheduling algorithm is probably more complex and thus&lt;br /&gt;adds to the scheduling overhead. Sharing resources between processes&lt;br /&gt;is generally much more expensive.&lt;br /&gt;F. SMP Processors&lt;br /&gt;These are CPUs with multiple cores. The cores share memory and cache.&lt;br /&gt;The architecture will most likely be mutliple threads or processes.&lt;br /&gt;Sychronziation between cores is more expensive.&lt;br /&gt;2. Design around the Cache Flow&lt;br /&gt;To minimized cache misses, design modules and data based on when they'll&lt;br /&gt;be used by the CPU.&lt;br /&gt;2.1 Modulization&lt;br /&gt;Modulization is breaking a large piece of code into smaller managable&lt;br /&gt;pieces or modules. A module could be a file, library, object, or a&lt;br /&gt;section in a file. They're usually designed around a hardware component&lt;br /&gt;or an abstract object. For better performance, these modules should be&lt;br /&gt;designed around completing a task.&lt;br /&gt;Example of typical serial driver design.&lt;br /&gt;1. A method for the user to send and receive data.&lt;br /&gt;2. Software queuing code&lt;br /&gt;3. Hardware manipulators routines&lt;br /&gt;Example of a serial driver design around cache flow&lt;br /&gt;1. Transmit Flow&lt;br /&gt;a. A method for user to send data&lt;br /&gt;b. TX queueing code&lt;br /&gt;c. Hardware manipulators routines for transmission&lt;br /&gt;2. Transmit Flow&lt;br /&gt;a. Hardware manipulators routines for retrieving data&lt;br /&gt;b. RX queueing code&lt;br /&gt;c. A method for user to receive data&lt;br /&gt;The latter method will reduce cache misses.&lt;br /&gt;2.2 Cache Friendly Data&lt;br /&gt;Group data that are likely to be used together on the same cache line.&lt;br /&gt;Check your particular CPU to see what the cache line is.&lt;br /&gt;Example of how to do this for a CPU with 8 byte cache line.&lt;br /&gt;struct cache_friendly_s {&lt;br /&gt;/* cache line 8 bytes - cnt 0 */&lt;br /&gt;int32 a;&lt;br /&gt;int32 b;&lt;br /&gt;/* cache line 8 bytes - cnt 1 */&lt;br /&gt;char c[4];&lt;br /&gt;int32 d;&lt;br /&gt;}&lt;br /&gt;Notice the comments also has a count. This information is useful to&lt;br /&gt;prefech, which will be cover later.&lt;br /&gt;To help you count properly, make sure each data member is CPU aligned.&lt;br /&gt;If the CPU is 32 bits, allocated all int16 in twos and chars in 4s.&lt;br /&gt;There's two reasons for this. One it improves performance if all data&lt;br /&gt;is CPU aligned. Two, the compiler will likely do this for you if you&lt;br /&gt;don't by adding fillers.&lt;br /&gt;2.3 Don't Wait, Prefetch&lt;br /&gt;Prefetching data is having the CPU load some memory into cache that'll&lt;br /&gt;be needed by some instruction in the future. This is not guarantee to&lt;br /&gt;improve performance, and will actually hurt performance if prefetch&lt;br /&gt;is seldomly needed. It's a good idea to do this after the code has been&lt;br /&gt;instrumented so you can gauge how effect prefetching is. You can&lt;br /&gt;write inline assembly to prefetch or use __builtin_prefetch() in gcc.&lt;br /&gt;It's also possible to prefetch hardware registers.&lt;br /&gt;a. Reserve register to do prefetch with. Using gcc with a MIPS core,&lt;br /&gt;the compiler option --ffixed-t9 will reserve general purpose&lt;br /&gt;register t9 for the user to manipulate.&lt;br /&gt;b. Write inline assembly code to load the hardware register to the&lt;br /&gt;general purpose register.&lt;br /&gt;c. Write inline assembly to access that general purpose register.&lt;br /&gt;The concept to grasp here is that the load instruction (b) will not&lt;br /&gt;block the pipeline. Accessing the register (c) will block if (b)&lt;br /&gt;has not finished loading the hardware register.&lt;br /&gt;Beware:&lt;br /&gt;a. Ask yourself if it's OK to prefetch this register early.&lt;br /&gt;b. Don't make any library calls that is not compile with the same&lt;br /&gt;--fixed-xx option.&lt;br /&gt;c. Consider disabling all interrupts between prefetch and actually&lt;br /&gt;accessing the register because any files not compiled with the&lt;br /&gt;same --fixed-xx option may thrash this register, including your&lt;br /&gt;RTOS's scheduler and ISR handlers.&lt;br /&gt;d. Any inline assembly or assembly code will disregard this compiler&lt;br /&gt;option.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-885043178734792139?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/885043178734792139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=885043178734792139' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/885043178734792139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/885043178734792139'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/01/embedded-design-for-performance-mips.html' title='Embedded Design for Performance (MIPS)'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-5134607489625065711</id><published>2007-01-10T11:51:00.000-08:00</published><updated>2007-01-11T10:58:05.656-08:00</updated><title type='text'>ISR Efficiency</title><content type='html'>If the ISR is called often and the total processing is small, then the overhead of setting up the stack may come into play. A big part of this overhead, not readily obivious in C or C++, is setting up the stack. The number of registers the compiler decides to protect can be a large part of the processing.&lt;br /&gt;&lt;br /&gt;Check the assemble code to see how many registers the ISR protects. Below is a list of things that can reduce the overhead in C.&lt;br /&gt;&lt;br /&gt;1. Try to simplify the code as much as possible&lt;br /&gt;2. Reduce the number of variable accesses, both local and global&lt;br /&gt;3. Don't make subroutine calls - This may cause the compiler to save every register&lt;br /&gt;4. In-line any subroutine calls you have to make.&lt;br /&gt;5. Put subroutines you have to call but can't in-line into the same module as the ISR. Some compiler are smart enough to peek at all subroutine calls to figure out what registers are used instead of blinding assuming every register will be used.&lt;br /&gt;6. If an ISR only calls a routine sometimes, then it may be more efficient to put that routine in a different ISR and trigger the irq in the original ISR when the calls is needed.&lt;br /&gt;&lt;br /&gt;Let the disassembled code be your guide. Remember that in an ISR, even scratch pad and temporary registers that are normally not saved in subroutine calls have to be saved.&lt;br /&gt;&lt;br /&gt;Another method an ISR can reduce the processing to overhead ratio is to increase processing instead of reducing overhead. For example, if you're writing a driver that's getting data from a piece of hardware and the data usually comes in brust, consider polling for more data in the ISR. Even if there's no data now, retry a couple of times before exiting this ISR. This depends heavily on the application, but is another useful tool to have.&lt;br /&gt;&lt;br /&gt;References:&lt;br /&gt;  Embedded Systems Programming (latest issues)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-5134607489625065711?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/5134607489625065711/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=5134607489625065711' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/5134607489625065711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/5134607489625065711'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/01/isr-efficiency.html' title='ISR Efficiency'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-3874108313824616161</id><published>2007-01-02T17:36:00.000-08:00</published><updated>2007-01-10T11:50:37.125-08:00</updated><title type='text'>Cache Considerations when Queuing</title><content type='html'>Using a FIFO(stack) is more efficient than FILO(queue), because whatever was enqueue last is most likely to be in cache when you dequeue. This works well for a free list.&lt;br /&gt;&lt;br /&gt;I just did this and found the average performance for dequeuing from a free queue went up 3 times.&lt;br /&gt;&lt;br /&gt;When dequeueing, it may be a good idea to pre-fetch the next buffer or two on the list.  Pre-fetching still cause cycles even when the memory is already in cache, so this may or may not improve your performance depending on how much cache miss the dequeue operation is experiencing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-3874108313824616161?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/3874108313824616161/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=3874108313824616161' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/3874108313824616161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/3874108313824616161'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/01/efficient-queueing.html' title='Cache Considerations when Queuing'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-6164952316120524462</id><published>2007-01-02T15:36:00.000-08:00</published><updated>2007-01-02T17:06:17.177-08:00</updated><title type='text'>Register Corruption</title><content type='html'>This doesn't happen often, but few people are able to deal with it. Generally, someone will discover that if they rewrote a piece of code the problem goes away. Managment gaves them a pat on the back and everyone is happy until it happens again.&lt;br /&gt;&lt;br /&gt;The first time I remember chasing one of these was when I started a new job a few years back. The crypto library would fail every once in a while. The work around was to reboot or redo the operation again. SQA has a show stopper defect filed, but it wouldn't effect development until the code actually went Beta.&lt;br /&gt;&lt;br /&gt;It was running VxWorks 4.x on some CPU that's usually reserved for children's toys. Some crypto library would fail now and then. I tracked down the offending routine by simply checking for errors that are usually ignored. Some crypto developers wanted to ensure his own job security or enter into the International Obfuscation C Code context(real contest). To this day, I have very little idea what it was doing, but the math probably worked out fine. Unfortunately, it fooled the compiler when it tried to optimize. What I found was that some registers were being clobbered after a subroutine call that are supposed to be protected(note: some registers are not protected and can be clobbered by convention after a subroutine call). Of couse, this register held a value that is not always used, so the problem is not always detected. Debugging in VxWorks w/o an IDE is like debugging in GDB command line of a running process. Well, the compiler was already the latest and the community was no longer working on it for this particular CPU. I had to turn down the optimization to fix this problem. But the performance hit was too much, so I modified the build to only lower the optimization for that directory. Simple fix, but it took forever to find that problem.&lt;br /&gt;&lt;br /&gt;I recently ran into another register corruption issue, but that turned out to be much easier to resolve. Some routine that wrote to H/W would occassionaly fail during stress. Fortunately, it was fixed by disabling the interrupts, so I was pretty sure it was being preempted. Bumping the priority didn't help, so it was likely an interrupt. For performance reasons, disabling the interrupts before this call was not acceptible. The routine itself was written in in-line assembly which generally spells trouble. First check was that all registers used were marked clobbered in inline assembly instructions (that's the last ':'). Then I check the MIPs processors references for the registers, but that just said all the registers are general registers with nothing special except that reg0 is always zero. Luckily, a co-worker had See MIPS Run which listed the industry conventions, and reg1 was a temporary synthesize assembler register.  The assembler can clobber this anytime for command like li, and apparently the exception handler did not protected it as I believe it should. I changed the registers and it resolved this issue. I was even able to improve performance by using t1 and t2 registers which did not have to be protected after a subroutine call.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-6164952316120524462?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/6164952316120524462/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=6164952316120524462' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/6164952316120524462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/6164952316120524462'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/01/register-corruption.html' title='Register Corruption'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-1636150457572113724</id><published>2007-01-02T14:59:00.000-08:00</published><updated>2007-01-02T17:09:46.473-08:00</updated><title type='text'>Quickly Root Cause Easy to Reproduce Problems</title><content type='html'>Once you figure how what is causing the problem, you need to detect the problem ASAIH(as soon as it happens).  To do this, create a MACRO or routine to check for that condition.  Now sprinkle that check all over the place or use the binary search method to find the problem. This is so quick and easy I don't see why more poeple don't do it. I run into a lot of guys who think this method is some kind of hack and real programmers need to read and understand the whole code first. They'll usually find 100 things they don't like about the existing code and make a bunch of "good" changes that may or may not solve the problem. This type of code review should be replaced by a group code review when a module has pass its unit testing, but most organizations skip this step.&lt;br /&gt;&lt;br /&gt;If the crash goes away or changes behavior when you put your code in, then it's a random memory corruption issue or a race condition. Assuming it's not a race condition, see my post on Memory Corruption without MMU to hints to solve this problem. Of couse, if the piece of memory is written only once and you have a debugger, you can use the hardware breakpoint feature to catch who is corrupting this memory. Also try turning up the warning level on your compiler or run some form of lint. The latter may take some time to configure to run properly.&lt;br /&gt;&lt;br /&gt;See future post for race conditions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-1636150457572113724?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/1636150457572113724/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=1636150457572113724' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/1636150457572113724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/1636150457572113724'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/01/binary-seach-for-easy-to-reproduce.html' title='Quickly Root Cause Easy to Reproduce Problems'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-4748791691547716412</id><published>2007-01-02T13:52:00.000-08:00</published><updated>2007-01-02T14:57:03.536-08:00</updated><title type='text'>Kernel Crash w/Stack and Register Dump</title><content type='html'>Someone just came for help with a Linux 2.6 kernel crash. The exception handler caught a bad memory access and dump a pseudo stack trace with registers before the system rebooted. The pseudo stack dump has the calling routine's name and offset, but not automatic variables and arguments. The register dump has all general registers.  KGDB is not setup and the tool guys will never set it up.&lt;br /&gt;&lt;br /&gt;First step is to find the code that crashed and disassmble it(1). This gaves you the exact instruction(2). I suspect this is caused by a bad pointer reference. With luck, the pointer is in the register(3) or there's enought information in the registers to help pinpoint the problem. The disassemble code generally uses a0, s2, t3 and such to reference registers. Each CPU type has its own convention for how to map these to the actually register. Unfortunately, these conventions are not generally part of the CPU's H/W spec as they are industry conventions.&lt;br /&gt;&lt;br /&gt;After you figure out what pointer is causing the problem, you have to code review or add auto detecting code(4). I like the latter whenever possible.&lt;br /&gt;&lt;br /&gt;(1) Disassembly the .o file with objdump -S option to interlace the source code and assembly.&lt;br /&gt;(2) The point where the code crashed may not be where the PC is pointing to, but it should be closed, like the previous instruction. In a RISC architecture, where the instructions gets executed in the pipe lets you know how far back to go. Due to branch delay, it may even be the line right after the previous branch.&lt;br /&gt;(3) On RISC processors, the address must be in a general register to be referenced. CISC processors allow referencing pointers from memory, but I believe the address is still loaded into some register before the core can access it, but it's not explicit and you have to look at the CPU specification or ask you vendor.&lt;br /&gt;(4) Auto detecting code is anything from a simple ASSERT to complex data integrity checking routines. If performance is an issue, make this a compiler option. Many developers don't like to release code with these checks because it can cause a crash when the system would normally not crash. Well, I say release the code with the checks cause if it's broken, then why run a piece of code when you don't know how it's going to behave. More than likely, sweeping these issues under the rug will cause many unexplain problems to occur in the field, and it'll take much more effort to root cause those issues. Don't kill yourself trying to convince the old timers because they've worked on HA systems since before you were born and it's how they've always done it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-4748791691547716412?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/4748791691547716412/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=4748791691547716412' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/4748791691547716412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/4748791691547716412'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/01/kernel-crash-wstack-and-register-dump.html' title='Kernel Crash w/Stack and Register Dump'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-5754326715256423408</id><published>2007-01-02T09:51:00.000-08:00</published><updated>2007-01-03T16:46:04.894-08:00</updated><title type='text'>Tech Books that are Worth Their Weight in Gold</title><content type='html'>This list obiviously depends on what you're doing so I'll try to put it in context. Most all the information is on the web, but I still strongly recomment you buy these books if you get paid to know this stuff.&lt;br /&gt;&lt;br /&gt;IPv4 Networking Basics:&lt;br /&gt;1. Internetworking w/TCPIP Vol 1 by Comer (updated version is with Stevens)&lt;br /&gt;2. The Protocols by Stevens (I don't own this one but my previous work place had one)&lt;br /&gt;Either of these books will gave you the basic understanding you need, but you only need one so save you money and choose. For more details or updates, go get the RFCs.&lt;br /&gt;&lt;br /&gt;UNIX Programming including POSIX and Sockets:&lt;br /&gt;The Richard W. Stevens series of 3 books are the most useful UNIX programming books I'm aware of. It's a shame Richard is not around to do updates for LINUX (RIP). People in the industry refer to these as the Stevens books as no one really remembers the name of the books. You can make a career out of copying examples from these books, but protect yourself by changing the names of the functions and variables.&lt;br /&gt;&lt;br /&gt;Linux Kernel:&lt;br /&gt;Linux Device Driver by Rubini and Corbet. I have version 2, but will get version 3 when I need to do any work with Linux 2.6. This book is not a good reference or reading book. You need to write you own drivers with the book as a guide to learn this stuff, but it's better and easier than how the old timers learn this stuff, which is randomly picking an exising driver and picking it apart.&lt;br /&gt;&lt;br /&gt;CPUs:&lt;br /&gt;See MIPS Run by Sweetman is easy to understand and interesting reading. If you're using any RISC core, get this book. It's better written than most CPU books and has valuable information you don't get from the CPU reference manuals.&lt;br /&gt;&lt;br /&gt;Networking Basics:&lt;br /&gt;Interconnections by Perlman is great reading, but work througt the excerises at the end of each chapter. If you ever read an RFC or technical specifications for OSFP or other routing protocols and said WTF, then read this book first. She's one of the best tech book writers.&lt;br /&gt;&lt;br /&gt;Good Programming Habits C/C++:&lt;br /&gt;1. Kernighan and Pike - The book is name The Practice of Programming, but most people know it by the authors. It's a small and insightful book.&lt;br /&gt;2. Writing Solid Code, because it's much shorter than Code Complete. You can apply the teachings of each chapter as soon are you read it and belive me, they work. However, you'll find many experience programmers disagree with some information in this book (eg. Mcguire does not like defensive programming), and they'll gave you a hard time during code reviews. Stick to the book whenever possible causes it's much better than the "experience" programmers IMHO.&lt;br /&gt;&lt;br /&gt;Security&lt;br /&gt;1. Apply Cryptography by Schneier is so good, it made Schneier famous. After reading this book, you'll understand how to go about designing a secure system and also hacking a secure system. Don't carry this book on an international flight as it's probably illegal in some countries, seriously. You only need to read the first 100 pages or so unless you're going to implement a particular algorithm, which is highly unlikely for work related purposes as most of companies will buy the s/w libraries or hardware to do this.&lt;br /&gt;&lt;br /&gt;2. Smashing the Stack for Fun and Profit(article) by Alphe One is the bases for probably all computer worms and virus. He didn't invent the technique, just documented it.&lt;br /&gt;&lt;br /&gt;3. Hacking Exposed: I'm not sure if this is around anymore and all information is probably outdated, but the concepts for new hacks will likely be the same. This holds true for any hacking book, learn the concepts.&lt;br /&gt;&lt;br /&gt;After reading these three books and articles, you'll need to choose if you want to get paid or become infamous.&lt;br /&gt;&lt;br /&gt;Fibre Channel Networking:&lt;br /&gt;1. Fibre Channel, A Comprehensive Introduction by Kembel in case your manager won't spend the $2K for you to take the class. It's like the T11 documents, but slightly better written and comes in a nice hardback binding. You'll still need to reference t11.org, but check the book first.&lt;br /&gt;&lt;br /&gt;Kembels got other books that seem pretty good if you need to dive into loops and such. I've read them years ago, but didn't ever need to buy them.&lt;br /&gt;&lt;br /&gt;Algorithms:&lt;br /&gt;Whatever copy you got in college is good enought as they all seem to copy each other. Otherwise, get Kuths if you want detail analysis of each. Before you implement any of these algorithms, check out the BSD implmentation. They don't come with the GPL so it's easier to integrate with your code. Discalmer: I'm not a lawyer.&lt;br /&gt;&lt;br /&gt;Check out the GNU site for documents for GNU tools and compilers, and &lt;a href="http://www.open-std.org/"&gt;http://www.open-std.org&lt;/a&gt; for C and C++ standards.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-5754326715256423408?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/5754326715256423408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=5754326715256423408' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/5754326715256423408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/5754326715256423408'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2007/01/tech-books-that-are-worth-their-weight.html' title='Tech Books that are Worth Their Weight in Gold'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-116465314671943206</id><published>2006-11-27T10:40:00.000-08:00</published><updated>2006-11-27T10:45:46.730-08:00</updated><title type='text'>Nintendo Wii</title><content type='html'>I tried out the Nintendo Wii this weekend and it was pretty cool.  They only have the 1 cheezy driving game, but I'm interested in trying out some sports and fighting games.  I think my 2 and 3 years olds will like it so I hope the contols aren't too expensive and can take lots of abuse.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-116465314671943206?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/116465314671943206/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=116465314671943206' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/116465314671943206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/116465314671943206'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2006/11/nintendo-wii.html' title='Nintendo Wii'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-116407439596012742</id><published>2006-11-20T17:45:00.000-08:00</published><updated>2006-11-20T17:59:55.966-08:00</updated><title type='text'>Clearcase in Windows</title><content type='html'>This is a multiple platform SCC.  It runs in Linux, Solaris, Windows, and probably other platforms, but those are the ones I use.&lt;br /&gt;&lt;br /&gt;Everything is pretty intuitive except how to add an existing view in Windows.&lt;br /&gt;&lt;br /&gt;Start-&gt;Programs-&gt;Rational S/W-&gt;Rational Clearcase-&gt;Administrator-&gt;Regional Sync&lt;br /&gt;&lt;br /&gt;This will show you all the view in the vobs that are currently mounted on you machine.  Choose the view you want and click "Import".&lt;br /&gt;&lt;br /&gt;Now start Clearcase Explorer.  Click View-&gt;Refresh View Shortcuts, and the new view should appear in Explorer.  But they do not appear on you view drive, that you access through the standard Windows Explorer.  To do this, you need to click on the icons for the new views in the Clearcase Explorer's View window.  Then these views will be visible in your "view" drive.&lt;br /&gt;&lt;br /&gt;Now you can use your favorite Windows IDE to development.  Mine is VIM, but I needed to do this to use the QNX IDE to debug and gather runtime statistics on my target.  There's also a Linux and Solaris version of the QNX IDE.  The Solaris it dated so I didn't bother trying to use that one.  The IT department don't trust hacks like me to have Linux machine on my desktop.  Maybe they still remember the time I ran Nesus on the network.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-116407439596012742?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/116407439596012742/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=116407439596012742' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/116407439596012742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/116407439596012742'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2006/11/clearcase-in-windows.html' title='Clearcase in Windows'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-116379457664016697</id><published>2006-11-17T12:07:00.000-08:00</published><updated>2006-11-17T12:16:16.650-08:00</updated><title type='text'>Dual Monitor on XP</title><content type='html'>First, your video card needs to support dual monitor.  When you first connect both monitor, they may both work but are duplicates of each other.  Here's how to fix that problem.&lt;br /&gt;&lt;br /&gt;Startup the Dispaly configuration as follows:&lt;br /&gt;(Bottom Left)Start-&gt;Setting-&gt;Control Panel-&gt;Display&lt;br /&gt;&lt;br /&gt;In Display Configuration, click on the Settings tab.  If your video card supports 2 monitors, the picture should show 2 monitors.  Click on the 2nd monitor to select it.  Now select the option "Extend my Windows desktop onto this monitor." by click the box next to it.  The 2nd monitor is part part of the desktop.  You can access it by moving the mouse to the right.&lt;br /&gt;&lt;br /&gt;Say your 2nd monitor is on your left, you can drag the 2nd monitor icon and move it ot the left ot the 1st monitor.&lt;br /&gt;&lt;br /&gt;The 2nd monitor is probably on 8bit color right now.  Select the 2nd monitor, left click them mouse, and choose properties.  You can configure this monitor to the way you want it.&lt;br /&gt;&lt;br /&gt;I originally had hope to play games and have another application running at the same time, but that generally doesn't work as the game will take over and shut the 2nd monitor down.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-116379457664016697?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/116379457664016697/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=116379457664016697' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/116379457664016697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/116379457664016697'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2006/11/dual-monitor-on-xp.html' title='Dual Monitor on XP'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-116371419222919014</id><published>2006-11-16T13:53:00.000-08:00</published><updated>2006-11-16T13:56:32.236-08:00</updated><title type='text'>Getting virtual windows on XP</title><content type='html'>Go download MSVDM utility form the Microsoft site.  Installing this utility will gave you 4 virtual windows and works pretty much the same as an UNIXie desktop.  You don't even have to reboot XP after installing this to use it.  This even works well with 2 monitors.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-116371419222919014?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/116371419222919014/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=116371419222919014' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/116371419222919014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/116371419222919014'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2006/11/getting-virtual-windows-on-xp.html' title='Getting virtual windows on XP'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-116371236594077788</id><published>2006-11-16T13:10:00.000-08:00</published><updated>2007-01-02T12:36:51.075-08:00</updated><title type='text'>MAME and MAME Pinball Controlls</title><content type='html'>This pretty lame, but I had a difficult time figuring out how to configure MAME32 and MAME vPinball controls to work with my Hotrod Joystick.&lt;br /&gt;&lt;br /&gt;MAME32 was based on DOS, so it was non-intuitive for a GUI guy. Anyways, after the games starts up, press the "Tab" key on your keyboard to see a configuration window. For some games with 2 joysticks, it'll show a specify one joystick as left and the other as right. So if you see "Left-Left", that means left on the left joystick. This didn't click with me until I looked a picture of the controls for some game(maybe Assault).&lt;br /&gt;&lt;br /&gt;For single player Robotron and Smash TV, it's best to use one joystick for movement and another to shot. But Smash TV is only fun for 2 players. So I reammped the shooting control to the 6 bottons on the Hotrod and it worked out well.&lt;br /&gt;Right Up - top center button&lt;br /&gt;Right Down - bottom center button&lt;br /&gt;Right Right - the right buttons on top and bottom, but individually&lt;br /&gt;Right Left - the left buttons on top and bottom, but individually&lt;br /&gt;The left/right bottons and top/down bottons can be used in combination.&lt;br /&gt;&lt;br /&gt;Assault is a futuristic tank game. You use both joysticks to pilot a tank. Mapping the joysticks sticks properly.  Left - means your left joystick. Right - means your right joystick. I'll refer to left joystick as LJ and right joystick as RJ.&lt;br /&gt; To flip the tank to the left: LJ (left-down) &amp; RJ (left-up)&lt;br /&gt; To flip the tank to the right: LJ (right-up) and RJ (right-down)&lt;br /&gt; I sort of remember from the arcade that you can pull both joysticks away from each other and shot a power shot, but I haven't been able to do that so far. It may be that I'm just getting old.&lt;br /&gt;&lt;br /&gt;MAME pinball was different than MAME. There's a MAME Pinball editor that's always running. You need to configure the Keys in the editor and restart the table. The obvious choose for the new keys on Hotrod is to map the flippers to the keys on the side which were designed for pinball. But this made it hard to access the rest of the controls which are important to "bump" the table. The alternative mapping is to use the joystick for the flipper and bump. This works well, but takes a while to get used to.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-116371236594077788?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/116371236594077788/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=116371236594077788' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/116371236594077788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/116371236594077788'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2006/11/mame-and-mame-pinball-controlls.html' title='MAME and MAME Pinball Controlls'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37639941.post-116370974347134541</id><published>2006-11-16T12:06:00.000-08:00</published><updated>2006-11-16T13:10:16.720-08:00</updated><title type='text'>NFS by a Dummy</title><content type='html'>1. Go to the directory you wish to access and issue&lt;br /&gt; &gt; df .&lt;br /&gt;svr01:/fs3/projects&lt;br /&gt;&lt;br /&gt;2. Resolve the machine's IP address from its name&lt;br /&gt;&gt; nslookup svr01&lt;br /&gt;Server:   dns-xxx.abc.com&lt;br /&gt;Address:  192.168.1.10&lt;br /&gt;&lt;br /&gt;Name:     svr01.abc.com&lt;br /&gt;Address:  192.168.126.250&lt;br /&gt;&lt;br /&gt;3. I'm not sure if this is some strange misconfiguration, but I actually need to mount the DNS's IP address?!?  So on the machine where the mounting is needed, issue the following mount command to mount to the local /projects directory.&lt;br /&gt;&gt; mount 192.168.1.10:/fs3/projects /projects&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37639941-116370974347134541?l=nerdexpo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerdexpo.blogspot.com/feeds/116370974347134541/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37639941&amp;postID=116370974347134541' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/116370974347134541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37639941/posts/default/116370974347134541'/><link rel='alternate' type='text/html' href='http://nerdexpo.blogspot.com/2006/11/nfs-by-dummy.html' title='NFS by a Dummy'/><author><name>Mack</name><uri>http://www.blogger.com/profile/00347603367322439048</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
