tag:blogger.com,1999:blog-26987626414572711192024-03-13T15:26:59.807-04:00Comfortable DelusionsRandom stuff that's interesting to me at the time.Anonymoushttp://www.blogger.com/profile/00844490813462210586noreply@blogger.comBlogger54125tag:blogger.com,1999:blog-2698762641457271119.post-19734169602515190652014-02-12T17:13:00.001-05:002014-02-18T20:28:06.871-05:00A Cordial Hatred for UPSI like wine, and have been a member of a wine club for years. I recently moved to an apartment. This apartment has a leasing office on-site that is staffed from 10am through 6pm by a living, breathing and more importantly, package receiving adult.<br />
<br />
I got home from work last Friday to see a note taped to my door. Apparently UPS had come by and discovered that I wasn't home. They had a package that needed a signature and left a note to that effect. I signed the little card and noted that while I wasn't home, the leasing office is right next door and would be happy to receive the package, the same way the receive all kinds of other packages for me. Problem solved, or at least that's what I thought.<br />
<br />
Monday, I get an email at work from UPS saying they had again failed to deliver the package. I called their customer service center. They assured me that they'd deliver the package to the leasing office. I told them the hours of the office and got home to discover 2 new notes on my door. Apparently they'd tried to come around a second time that day at 6:20pm. The leasing office closes at 6pm.<br />
<br />
I figured they'd try again on Tuesday and the leasing office would almost certainly be open. Imagine my surprise when I get another failed attempt email at work. I called their customer service office and, after 20 minutes of trying to understand the broken english of one of their service agents discovered that I'd have to drive out to their shipping office and pick it up myself. Apparently the guy I talked to yesterday didn't know what he was talking about. UPS can't deliver a package that requires a signature to a leasing office. Fortunately, although they're unwilling to commit to a delivery window any smaller than a day, they're happy to require me to commit to a 15 minute window to come pick up the package.<br />
<br />
I had plans for the evening, but apparently they needed me to come pick it up that night or they were going to ship it back to the sender.<br />
<br />
<br />I guess I've had worse customer service, but nothing comes to mind. I have cancelled my wine club membership since it appears that there is no reasonable way to actually get wine delivered if you live in an apartment.Anonymoushttp://www.blogger.com/profile/00844490813462210586noreply@blogger.com0tag:blogger.com,1999:blog-2698762641457271119.post-24620804277791952292012-07-27T18:52:00.000-04:002012-07-27T18:52:05.037-04:00Car Audio SucksSeriously. Why do car audio systems look like they were made by and for teenage boys? A million useless, crappy features, but none of the ones that would actually be useful. And a design that clearly ignores a decade of Apple's work on making interfaces that are clean and efficient in favor of TOTALLY AWESOME DOOD designs.
Features you say?
A tuner so I can listen to radio would be ok.
I want at least two aux inputs. One on the back (that I can plug my ham radio into) and one on the front (for my buddy's iPod / whatever).
I want bluetooth with all the bells and whistles so that my phone can stream audio using A2DP as well as not sucking too much for phone calls. You want to really impress me? Implement the bluetooth protocols for sim offloading and then _be_ an android device. I step into my car and my handset greets the car-mount, and hands over it's responsibilities.
I want mixer functionality so I can have more than one channel playing at once. Want to really impress me? Throw in the ability to auto-mute one or more channels when there's sound on another. (phone call => mute the entertainment)
I do _NOT_ want a CD player. Stuck in the 90's much? I'm not going to burn a CD. I don't think I even own a functional CD burner anymore. Yeah, maybe a data-cd full of MP3s would be nice, but even that is crap when compared to any of the cloud services. Watch a DVD? This isn't my living room. Sirius radio? Are you kidding me? I can have more variety with better music from any of a dozen cloud based services.
Like the rest of the auto industry, these guys feel like they're in a coma. Wake the fuck up, car audio makers.Anonymoushttp://www.blogger.com/profile/00844490813462210586noreply@blogger.com2tag:blogger.com,1999:blog-2698762641457271119.post-90405922532087110332012-05-09T20:29:00.000-04:002012-05-09T20:29:18.394-04:00Yaesu FTM350-AR failSo, I've been looking at getting an APRS setup for a while now. The radio I really want for the job is the Yaesu FTM350. It has almost everything I want, and best of all I'm sure it'll interoperate nicely with my other Yaesu gear (the automatic range check, would be particularly handy)... but it's lacking two stupidly obvious features. These aren't difficult features to add, either, both being software. The first feature is the ability to output waypoints to a NMEA compatible GPS unit for display purposes. The Kenwood has been doing this for years now: http://www.tornadovideos.net/forum?func=view&catid=11&id=205&limit=10&start=650<br />
<br />
The Yaesu will actually write waypoint data in NMEA format to it's com port. You'd think that means it will do all of this... but apparently this is not the case. It will only write one waypoint: yours. It took some convincing on the behalf of Tim Factor (the Amateur Radio tech support guy for Yaesu) to make me believe that this was the case. I still can't figure out what the engineers who built this were thinking. Was it "well, clearly the user is going to want to send his current location from the GPS in the radio to... an after market GPS that already has the same data?" I presume it's intended to be read by a computer for transmission up to the internets... but this is a mobile rig. I don't have an internet connection in my truck. Of course if it was giving me waypoint information about all the stuff that's coming in over APRS, and I could display that on a GPS, well, that'd be useful. Incredibly useful. Worth buying the radio and GPS useful. If I was using it as a base station, I could feed it into a computer and upload it to APRS.fi or some such. It would make sense as a feature. But as implemented the feature is not just pointless, it's a demonstration of brain-dead stupid design.<br />
<br />
The new Yaesu also lacks digipeater functionality. This is a mobile rig, so clearly there aren't any situations where I'm going to want to use it as a repeater. You know, since it's got a built in cross-band repeater (which is one of it's major selling points, in my opinion), you wouldn't want comparable functionality for the APRS side...<br />
<br />
I'm super annoyed because this radio has so much promise. But such glaring omissions make me scratch my head. I keep hoping that some up-and-coming company will build a radio that plugs into an android phone and is fully controllable over USB. I'd pay real money for a radio that has an interface that was designed some time after the 90's, not to mention programmability that goes beyond stunningly limited.Anonymoushttp://www.blogger.com/profile/00844490813462210586noreply@blogger.com0tag:blogger.com,1999:blog-2698762641457271119.post-53106256959093821522012-05-09T20:22:00.000-04:002012-05-09T20:22:30.517-04:00Kettle Javascript failI was working on a javascript step in a Pentaho Kettle script and could not for the life of me figure out why it wasn't working as expected. An excerpt follows. It takes a bunch of boolean values and ORs them down to a single boolean.<br />
<br />
<span class="kd" style="background-color: white; font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; font-weight: bold; line-height: 17px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; white-space: pre;">var</span><span style="background-color: white; font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; line-height: 17px; text-align: left; white-space: pre;"> </span><span class="nx" style="background-color: white; font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; line-height: 17px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; white-space: pre;">is_holiday</span><span style="background-color: white; font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; line-height: 17px; text-align: left; white-space: pre;"> </span><span class="o" style="background-color: white; font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; font-weight: bold; line-height: 17px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; white-space: pre;">=</span><span style="background-color: white; font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; line-height: 17px; text-align: left; white-space: pre;"> </span><span class="p" style="background-color: white; font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; line-height: 17px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; white-space: pre;">(</span><span class="nx" style="background-color: white; font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; line-height: 17px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; white-space: pre;">is_variable_date_holiday</span><span style="background-color: white; font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; line-height: 17px; text-align: left; white-space: pre;"> </span><span class="o" style="background-color: white; font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; font-weight: bold; line-height: 17px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; white-space: pre;">||</span><span style="background-color: white; font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; line-height: 17px; text-align: left; white-space: pre;"> </span><span class="nx" style="background-color: white; font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; line-height: 17px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; white-space: pre;">is_fixed_date_holiday</span><span style="background-color: white; font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; line-height: 17px; text-align: left; white-space: pre;"> </span><span class="o" style="background-color: white; font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; font-weight: bold; line-height: 17px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; white-space: pre;">||</span><span style="background-color: white; font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; line-height: 17px; text-align: left; white-space: pre;"> </span><span class="nx" style="background-color: white; font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; line-height: 17px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; white-space: pre;">is_nth_day_of_month_holiday</span><span class="p" style="background-color: white; font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; line-height: 17px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; white-space: pre;">)</span><br />
<span class="p" style="background-color: white; font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; line-height: 17px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; white-space: pre;"><br /></span><br />
<div style="text-align: left;">
<span style="text-align: -webkit-auto;">And... it doesn't work as expected. Apparently the handling of boolean type data is somehow going insane. My final solution:</span></div>
<div style="text-align: left;">
<span style="text-align: -webkit-auto;"><br /></span></div>
<div style="text-align: left;">
</div>
<div class="p1">
<span class="s1"><b>var </b></span>is_holiday = <span class="s1"><b>false</b></span>;</div>
<div class="p2">
<br /></div>
<div class="p1">
<span class="s1"><b>var </b></span>holiday_name = <span class="s2">''</span>;</div>
<div class="p1">
<span class="s1"><b>if </b></span>(is_fixed_date_holiday == <span class="s1"><b>true</b></span>)</div>
<div class="p1">
{</div>
<div class="p1">
<span class="Apple-tab-span"> </span>is_holiday = <span class="s1"><b>true</b></span>;</div>
<div class="p1">
<span class="Apple-tab-span"> </span>holiday_name = fixed_date_holiday_name;</div>
<div class="p1">
};</div>
<div class="p1">
<span class="s1"><b>if </b></span>(is_variable_date_holiday == <span class="s1"><b>true</b></span>)</div>
<div class="p1">
{</div>
<div class="p1">
<span class="Apple-tab-span"> </span>is_holiday = <span class="s1"><b>true</b></span>;</div>
<div class="p1">
<span class="Apple-tab-span"> </span>holiday_name = variable_holiday_name;</div>
<div class="p1">
};</div>
<div class="p1">
<span class="s1"><b>if </b></span>(is_nth_day_of_month_holiday == <span class="s1"><b>true</b></span>)</div>
<div class="p1">
{</div>
<div class="p1">
<span class="Apple-tab-span"> </span>is_holiday = <span class="s1"><b>true</b></span>;</div>
<div class="p1">
<span class="Apple-tab-span"> </span>holiday_name = nth_day_holiday_name;</div>
<div class="p1">
};</div>
<div class="p2">
<br /></div>
<div class="p1">
<span class="s1"><b>var </b></span>is_working_day = (is_weekend == <span class="s1"><b>true </b></span>|| is_holiday == <span class="s1"><b>true</b></span>) ? <span class="s1"><b>false </b></span>: <span class="s1"><b>true</b></span>;</div>
<div class="p1">
<br /></div>
<div class="p1">
Yes. It really is that ugly.</div>Anonymoushttp://www.blogger.com/profile/00844490813462210586noreply@blogger.com0tag:blogger.com,1999:blog-2698762641457271119.post-60653372244373750562012-02-25T02:36:00.000-05:002012-02-25T02:36:42.406-05:00Burning Man TicketsThere's been a lot of upset about the current ticket situation for Burning Man. Major theme camps are reporting, on average, that they have about 1/4 to 1/3 the tickets they need. Many long time burners who have made huge and ongoing contributions to the event do not have a ticket.<br />
<br />
Of the 40k tickets that were sold via lottery, reports are that about 40% went to people who have never been before. There were several factors that no doubt contributed to this unprecedented upswing in demand. Some have pointed to "The Places You'll Go" video going viral shortly before ticket sales opened. Personally, I believe that the event selling out for the first time ever last year and the tales of tickets selling for $5k had a significant effect. Imagine you've never been, but you think you might like to go. You know that this year you'll need to buy a ticket in advance if you want to go. It also occurs to you that you could re-sell it at a profit if you decide not to go. So, there is a very strong incentive to finally get in line and buy that ticket. I expect that we will see a very large number of first timers at the burn this year. However, I think we'll also see a large aftermarket of ticket sales. And I would be very surprised to see these tickets being sold at face value.<br />
<br />
I don't think I even need to go into the economics that would attract a scalper to this situation. I will be deeply surprised if we don't see a substantial number of tickets going for scalper rates once the physical tickets have been mailed out. There are already reports of tickets being sold on stub-hub, ebay and other venues at a significant markup over face value.<br />
<br />
There are still 10k tickets which were originally slated for a First Come First Served style open sale. To address the issue of theme camps folding from lack of tickets, BMORG has decided to distribute at least some of these tickets through or directly to theme camps. I am not aware of the details of how they plan to do this, but I think it has largely been completed. I'm still waiting for news from my camp's lead about how this turned out for us.<br />
<br />
For those who are still looking for a ticket after this distribution, there are a few options. BMORG has made a lot of noise about the STEP program. I have looked at the terms of service for this program and am left wondering why BMORG thinks that any significant number of people would use it to sell their ticket. As near as I can tell, there are only two reasons for someone selling a ticket to use this system. The first is that it's what BMORG has asked people to use. Burners who can't attend the event may decide to support the org by using this system. I think that this may lead to a very few tickets going through STEP. The second reason I can think of involves liquidity. Since nobody has a hard-copy ticket at this time, it is a difficult and complicated thing to sell a ticket. How do you collect the money if you don't have a physical ticket to deliver in return? If you have a "ticket", and you really need money, right now... well perhaps this is enough of an incentive to take a loss and sell through the STEP program. But the vast majority of people who have a ticket and want to sell it will not fall into these categories. Veteran burners will almost certainly sell their ticket directly to another member of the community. People who are in it for a scalper's profit will obviously use tools which work for them. STEP doesn't appear to offer them any benefits compared to, for example, stub-hub and other sites dedicated to the re-selling of tickets.<br />
<br />
I think the real demand for tickets is not as high as the apparent demand from the ticket sales. I suspect that there will be a lively after-market in tickets at about the $500 to $600 mark, dipping lower in the weeks prior to the burn. But these are only my suspicions.<br />
<br />
Others have said that it's a big desert, and it certainly is... but the road south from Gerlach isn't that big. I believe that is the real bottleneck right now towards growing the event and making more tickets available. Exodus lines were up to 10 hours last year. The drive after that was nothing short of harrowing. The event can't significantly grow without increasing the capacity of the roads.<br />
<br />
So, how did we get in this mess? I've heard a lot of people blaming the lottery system. I think this is a classic case of correlation vs causation. I see no reason to believe that the old "First Come, First Served" system would have been "better" by any definition of the word. The lottery system as implemented offered two distinct advantages over FCFS. First of all, it gave BMORG an opportunity to screen out some known scalpers. I don't know how effective this was, but it is something that would be a lot harder to do in real-time with an FCFS system. Incidentally, that is my professional opinion as a fairly senior software developer who has worked on systems like this for going on 20 years. Secondly, the lottery system was technically feasible. Within the limited scope of it's design parameters, it actually worked: about 150k people wanted 40k tickets. These tickets were sold in an orderly fashion without server meltdowns or other screw ups. We can argue about the distribution, but in the face of overwhelming demand, we need to recognize that the solution is certainly not to go back to FCFS, a system which offers no advantages over the lottery.<br />
<br />
How do we, as a community, avoid this mess next year? I can think of only one solution. We need to reduce the demand for tickets. But how do you reduce the demand for tickets to something as awesome as that thing of ours out in the desert?<br />
<br />
The first idea that comes to mind is to increase the inconvenience. A large part of the filter effect that dissuades douce-bags from attending is the inconvenience. Let's keep it inconvenient! I think we should make it a lot less convenient to bring an RV or camper-shell. There are plenty of ways we could do this, but fundamentally, people are using them as a convenience and we need to reduce demand. Perhaps I'm just grumpy because I could never afford one. So, I'm not sure about this approach.<br />
<br />
There are a number of reasons people want a ticket. I suggest that some reasons are more valid than others. I would love to absolutely destroy the demand from people who want a ticket so they can resell it at a profit. I think the entire burner community can agree on that one.<br />
<br />
So, how can we destroy the opportunity to profit from a burning man ticket? Any scheme which allows someone to get a ticket and then transfer it to another person is innately vulnerable to arbitrage. Given that there is more demand than supply, there will always be people who are willing to pay more than the face value of the ticket. That means that any solution must make it impossible to transfer tickets. It is 2012. The technology for custom printing of tickets with a name, photo and ID number exists. As a community we still want to support the concept of anonymous entry and gift tickets. Let's allow people to buy as many tickets as they like. These tickets would be registered in the buyer's name and only assignable in person, at the gate. In other words, you can buy 4 tickets with your name, photo and ID on them. Arrive at gate with these tickets and 3 of your buddies, show only your ID and all 4 of you are admitted. For leaders with a strong history of service to the community, we can perhaps relax this rule and let them assign tickets for will-call distribution when they themselves arrive.<br />
<br />
I'll make one other observation. The people who make the theme camps and make the art are committed. They don't decide to go at the last moment, they plan ahead. Camp dues are paid 4 or more months in advance. Materials are purchased, infrastructure is prepared and art is built. This is the kind of commitment that makes Burning Man the incredible, unbelievable experience for which it is famous. Nothing can demand this level of commitment, except love. I think that as a community, our ticketing policy should reflect the concept of commitment. I want non-refundable tickets.<br />
<br />
Non-transferable, non-refundable tickets. With a reasonable compromise for those who want to gift and those who want anonymity. Destroy all profit opportunity and force all the financial risk onto people who are buying tickets. The burners I know won't hesitate. Newbies will may, and that's great. If they aren't willing to demonstrate that level of commitment to going, well, the playa has always been an excellent filter.<br />
<br />
I love burning man. It upset my reality and changed my life when it desperately needed changing. The most upsetting thing about this ticket business has been how helpless I have felt. I want very much to protect this crazy thing in the desert that has meant so much to me. I hope my ideas can help.Anonymoushttp://www.blogger.com/profile/00844490813462210586noreply@blogger.com0tag:blogger.com,1999:blog-2698762641457271119.post-48727035931908956192012-02-14T03:46:00.003-05:002012-02-14T03:46:36.753-05:00Keeping The Faith With RickI really think everyone should check out <a href="http://spreadingsantorum.com/">Rick Santorum</a>Anonymoushttp://www.blogger.com/profile/00844490813462210586noreply@blogger.com0tag:blogger.com,1999:blog-2698762641457271119.post-47853524164332434072011-06-29T15:15:00.000-04:002011-06-29T15:15:18.574-04:00I joined NAFAANorth American Fire Arts Association, now that's a good idea.<br />
<br />
<a href="http://www.nafaa.org/regs.html" target="_blank"><img src="http://www.nafaa.org/buttons/i_safety.png" width="150" height="50" border="0"></a>Anonymoushttp://www.blogger.com/profile/00844490813462210586noreply@blogger.com0tag:blogger.com,1999:blog-2698762641457271119.post-28119315895643205262011-06-24T13:16:00.000-04:002011-06-24T13:16:07.648-04:00Beginners Programming LanguagesSo, Chaz says he wants to learn to program. I figure Python is the way to go, but... maybe I'm wrong. These two look like they might be interesting.<br />
<br />
<a href="http://www.alice.org/">http://www.alice.org/</a><br />
<a href="http://scratch.mit.edu/">http://scratch.mit.edu/</a><br />
<br />
Clearly if he's going to do python, I need to get a better book for him. Recommendations follow:<br />
<br />
<a href="http://learnpythonthehardway.org/">http://learnpythonthehardway.org/</a><br />
<a href="http://www.greenteapress.com/thinkpython/html/">http://www.greenteapress.com/thinkpython/html/</a>Anonymoushttp://www.blogger.com/profile/00844490813462210586noreply@blogger.com0tag:blogger.com,1999:blog-2698762641457271119.post-70103432807684129092011-06-22T16:31:00.001-04:002011-06-22T16:32:15.430-04:00New ExperiencesIf <a href="http://xkcd.com/915/">Our brains have one just one scale, and we resize our experiences to fit</a>, then is it a good thing to expand the breadth of our experience? I have always worked on that assumption, and it seems to be deeply ingrained in our society. Children have little if any breadth of experience and they seem to be mostly happy. If every day is awesome because we've never experienced anything enormously better with which to compare it, is it possible that the quality of our lives is greater? I have always looked for new experiences and new extremes. In doing so, have I made the common experiences less enjoyable? I don't think so. I think that new experiences are rewarding because they are new. I guess I need to constantly be chasing new experiences, and I'm not sure that's even a bad thing... but it certainly can be tiring.Anonymoushttp://www.blogger.com/profile/00844490813462210586noreply@blogger.com0tag:blogger.com,1999:blog-2698762641457271119.post-19097523110510791532011-04-03T01:52:00.001-04:002011-04-03T01:54:23.763-04:00Tracing From An "idle in transaction" Postgres Backend To The Responsible Process On A Remote SystemWe've all seen those nasty little "idle in transaction" processes. So I can remember, here's how to go from an unhappy postgres backend to the guilty process on a remote system.<br />
<br />
1) Find the unhappy backend<br />
<br />
<pre>$ ps auxww | grep postgres | grep 'idle in transaction'
postgres <b>22838</b> 1.2 0.3 74476 31736 ? Rs 16:40 4:36 postgres: nutricate trans_production <b>10.177.66.254(47257)</b> idle in transaction
</pre><br />
2) We now have a remote IP and port number. PostgreSQL 9.0 is quite forthcoming about this, but older versions (and other servers) aren't quite so friendly. Once you have the PID of the unhappy postmaster, you can use either lsof or netstat to find out about the tcp connection, if ps didn't give it to you.<br />
<br />
<pre>$ sudo netstat -ep | grep $PID
tcp 0 138 db-trans01:postgresql <b>db-reports01:57882</b> ESTABLISHED postgres 702200 <b>22838</b>/postgres: nutr
</pre><br />
3) ssh into the remote server (db-reports01 in the above output) and use netstat again and grep for the port number (57882 in the output above) to figure out which process owns the other end of the tcp connection.<br />
<br />
<pre>$ sudo netstat -ep | grep 57882
tcp 0 90 db-reports01:57882 db-trans01:postgresql ESTABLISHED nutricate 672248278 <b>16388</b>/python2.6
</pre><br />
4) We now have the PID of the misbehaving process and can delve deeper to find out what it is, and eventually what it's doing.<br />
<br />
<pre>$ ps auxww | grep 16388
2000 16388 67.6 8.0 275056 89624 pts/8 Rl+ 16:26 212:26 /usr/bin/python2.6 lib/nutricate/django/reports/summarize_parallel.py root
</pre>Anonymoushttp://www.blogger.com/profile/00844490813462210586noreply@blogger.com0tag:blogger.com,1999:blog-2698762641457271119.post-70814502698036851422011-04-01T15:37:00.000-04:002011-04-01T15:37:13.571-04:00t-mobile Fails Security 101.I remember back when AdECN was in the process of being acquired by Microsoft. One of the things we went through was a security audit. We did pretty well, but they busted us for storing passwords in the database and made us code a change before the acquisition went through.<br />
<br />
With the recent rash of website hacks and password database leaks (I'd link them but there are sooo many), you'd think that a company the size of t-mobile would have clued into best practices around passwords and know better. Apparently not, and best of all they're even dumb enough to advertise it on their login page. "Lost your password? Have it sent to your mobile phone." So clearly the passwords aren't being stored using a one-way hash. Good grief.Anonymoushttp://www.blogger.com/profile/00844490813462210586noreply@blogger.com0tag:blogger.com,1999:blog-2698762641457271119.post-55370277863344213622011-04-01T15:05:00.000-04:002011-04-01T15:05:40.917-04:00Fire Poi!I've been playing with poi for a couple of years now... and for the last couple of month's I've been serious about it. So serious that I bought myself some fire poi. Expect a followup post about how awesome it is to spin them... and another about how badly I burned myself.Anonymoushttp://www.blogger.com/profile/00844490813462210586noreply@blogger.com2tag:blogger.com,1999:blog-2698762641457271119.post-27676986241310251782011-03-29T17:47:00.000-04:002011-03-29T17:47:37.570-04:00Posting code on bloggerSince I decided that I'd start blogging, I figured I'd better learn how to post code on my blog. The obvious approach is to use pre tags.<br />
<br />
<pre>class Greeter(object):
def __init__(self, message):
self.message = message
def repr(self):
return 'Greeter(%s)' % self.message
def print(self):
print self.message
if __name__ == '__main__':
g = Greeter('hello, world')
g.print()
</pre><br />
However, I've been using IDEs for almost a decade now... so the code looks somehow <i>wrong</i> when it hasn't been highlighted. Enter <a href="http://pygments.org/">pygmentize</a>, which takes code and spits out html. It does plenty of other clever things, too, but that's what I'm using it for. Setup is pretty simple. Install it however your OS requires / desires. On the command line, run<br />
<br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: small;"><b>pygmentize -S default -f html</b></span><br />
<br />
copy that output. On blogger, go to Design -> Template Designer -> Advanced -> Add CSS. Paste here.<br />
<br />
Now, type up most of your new blog post and then flip over to Edit HTML. Take your code and feed it through pygmentize:<br />
<br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: small;"><b>pygmentize -f html helloworld.py</b></span><br />
<br />
Take that raw html and paste it into your post. You now have colorized, highlighted code that might even be readable and awesome.<br />
<br />
<div class="highlight"><pre><span class="k">class</span> <span class="nc">Greeter</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="n">message</span>
<span class="k">def</span> <span class="nf">repr</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s">'Greeter(</span><span class="si">%s</span><span class="s">)'</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">message</span>
<span class="k">def</span> <span class="nf">print</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">print</span> <span class="bp">self</span><span class="o">.</span><span class="n">message</span>
<span class="k">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">'__main__'</span><span class="p">:</span>
<span class="n">g</span> <span class="o">=</span> <span class="n">Greeter</span><span class="p">(</span><span class="s">'hello, world'</span><span class="p">)</span>
<span class="n">g</span><span class="o">.</span><span class="k">print</span><span class="p">()</span>
</pre></div>Anonymoushttp://www.blogger.com/profile/00844490813462210586noreply@blogger.com0tag:blogger.com,1999:blog-2698762641457271119.post-49200253470516356142011-03-15T10:50:00.000-04:002011-03-15T10:50:56.441-04:00MacBook Pro Airport is disabled on wakeupIntermittently, my laptop would wake from snooze and the airport connection would mysteriously be disabled. I'd go up to the toolbar, right click and re-enable it and everything would be fine, but... it was annoying. I finally called Apple about it. They didn't have a root-cause, but they did suggest the following:<br />
<br />
<br />
<pre>sudo rm /Library/Preferences/SystemConfiguration/com.apple.PowerManagement.plist
sudo rm /Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist
</pre><br />
<br />
Which seems to have worked. I didn't have a reliable repro, su I'm not <i>sure</i> this worked, but I haven't had the problem since.Anonymoushttp://www.blogger.com/profile/00844490813462210586noreply@blogger.com0tag:blogger.com,1999:blog-2698762641457271119.post-6773920027848466292011-03-14T02:46:00.002-04:002011-03-17T14:58:46.683-04:00Please don't #prayforjapanThis post isn't about not caring or not thinking about Japan and the Japanese in the wake of the earthquake and tsunami. It's about not tweeting the <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">#<a href="http://twitter.com/#!/search/%23prayforjapan">prayforjapan</a></span> tag. The Japanese are calling it either <a href="http://en.wikipedia.org/wiki/2011_Sendai_earthquake_and_tsunami">東北地方太平洋沖地震</a> or <span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-family: sans-serif; font-size: 13px; line-height: 19px;"><a href="http://en.wikipedia.org/wiki/List_of_earthquakes_in_Japan">東日本大震災</a></span>. As much as I prefer not mangling names of things across cultures, romaji translations of either of those would make unwieldily tags. The western media have been calling it the <i style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-family: Times; font-size: medium; line-height: normal;">Sendai Quake</i> and that seems reasonable. How about tagging with <span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; font-size: small; line-height: normal;"><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><a href="http://twitter.com/#!/search/%23sendaiquake">#SendaiQuake</a></span></span>? Better still, <a href="https://twitter.com/#!/norishikata">Noriyuki Shikata</a> is using <a href="http://arch.twitter.com/search?q=%23hope4japan">#hope4japan</a>, which kind of settles it for me.<br />
<br />
As far as the praying goes, I have two thoughts. First of all, I always question the motives of anyone who prays in public. If you really do care about the ongoing tragedy in Japan, then by all means do something to help them. If you want to feel righteous and charitable, try doing something tangible like, say, <a href="https://american.redcross.org/site/Donation2?idb=0&5052.donation=form1&df_id=5052">donating money</a>. Secondly, <a href="http://www.adherents.com/largecom/com_atheist.html">the vast majority of Japanese are atheists</a>. I've never met an atheist who wasn't at least a little annoyed at being "prayed for".Anonymoushttp://www.blogger.com/profile/00844490813462210586noreply@blogger.com0tag:blogger.com,1999:blog-2698762641457271119.post-25149650401266331072011-03-13T22:09:00.000-04:002011-03-13T22:09:45.732-04:00Love/hate t-mobileTara and I recently got <a href="http://www.google.com/nexus/">Nexus S</a> phones from t-mobile. The phones are very cool but the voice quality is terrible. I just got off a call to their customer support and I could barely hear the guy. I recognized the Indian accent so I'm pretty sure my call was getting routed to ho-jai-gah land, but still. When you call the phone company's technical support line and you can't hear the guy on the other end, it does not inspire confidence. So, is this a t-mobile fail or is it a problem with the phone?Anonymoushttp://www.blogger.com/profile/00844490813462210586noreply@blogger.com0tag:blogger.com,1999:blog-2698762641457271119.post-42177105308719836722011-03-12T01:37:00.003-05:002011-03-12T01:55:34.312-05:00Google Voice for the win.I have a new Nexus S phone. I think it's super cool, and not in the least because it integrates with google voice. In fact, I understand it integrates pretty much perfectly. So... I'm making the switch. I tried porting my number with out success. I also note that Google Voice doesn't have any numbers available in the Santa Barbara area; I suspect the one has something to do with the other. I picked a Ventura number: 805-669-8839.
Following lifehacker's <a href="http://lifehacker.com/#!5311254/how-to-ease-your-transition-to-google-voice">advice on switching to google voice</a>, I configured my voice number to only ring through for people I know. Unrecognized numbers go directly to voicemail. But the whole point of GV is that the voicemail is actually useful. The iPhone's "visual voicemail" was a big step in the right direction, but GV's voicemail transcription... awesome. For anyone wondering, this is why I don't mind putting my phone number up there on the web: I'm not exposing myself to having my time or my phone minutes wasted.
Unfortunately t-mobile is refusing to allow me to redirect my mobile number's voicemail to GV voicemail. Apparently they won't let anyone on the flexpay contract do it. And they won't switch my contract to post-paid (or whatever it's called) for another 6 months. I even called the tech-support guys and asked them to override it, but no-can-do apparently. I guess they don't like the idea of people using GV, although this certainly doesn't stop it. I have to admit that I'm a little disgusted that t-mobile would sell me a Google branded phone and then try to block me from using a google service with it. I've set my t-mobile voicemail greeting to "I never check this voicemail box. Call my google voice number at 805-669-8839". I am hoping to port my old mobile number at some point, but for the next 6 months I'm not going to worry about it.Anonymoushttp://www.blogger.com/profile/00844490813462210586noreply@blogger.com0tag:blogger.com,1999:blog-2698762641457271119.post-44844499367894756092011-03-11T13:06:00.005-05:002011-03-11T14:12:46.078-05:00Mocking logging in python<div class="highlight"><pre><span class="kn">from</span> <span class="nn">logging</span> <span class="kn">import</span> <span class="n">getLogger</span><span class="p">,</span> <span class="n">StreamHandler</span>
<span class="k">class</span> <span class="nc">DirHandler</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">l</span> <span class="o">=</span> <span class="n">getLogger</span><span class="p">()</span>
<span class="n">l</span><span class="o">.</span><span class="n">addHandler</span><span class="p">(</span><span class="n">StreamHandler</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">process_dir</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">l</span> <span class="o">=</span> <span class="n">getLogger</span><span class="p">()</span>
<span class="n">l</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">'foo'</span><span class="p">)</span>
<span class="n">l</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">'bar'</span><span class="p">)</span>
<span class="n">l</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="s">'baz'</span><span class="p">)</span>
<span class="kn">import</span> <span class="nn">unittest</span>
<span class="kn">from</span> <span class="nn">mock</span> <span class="kn">import</span> <span class="n">Mock</span><span class="p">,</span> <span class="n">patch</span>
<span class="kn">from</span> <span class="nn">logging</span> <span class="kn">import</span> <span class="n">RootLogger</span>
<span class="n">target</span> <span class="o">=</span> <span class="s">'</span><span class="si">%s</span><span class="s">.getLogger'</span> <span class="o">%</span> <span class="n">__name__</span>
<span class="nd">@patch</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">TestProcessDir</span><span class="p">(</span><span class="n">unittest</span><span class="o">.</span><span class="n">TestCase</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">test_logging</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">mock_getLogger</span><span class="p">):</span>
<span class="n">mock_getLogger</span><span class="o">.</span><span class="n">return_value</span> <span class="o">=</span> <span class="n">Mock</span><span class="p">(</span><span class="n">spec</span><span class="o">=</span><span class="n">RootLogger</span><span class="p">)</span>
<span class="n">d</span> <span class="o">=</span> <span class="n">DirHandler</span><span class="p">()</span>
<span class="n">d</span><span class="o">.</span><span class="n">process_dir</span><span class="p">()</span>
<span class="n">method_calls</span> <span class="o">=</span> <span class="n">mock_getLogger</span><span class="o">.</span><span class="n">return_value</span><span class="o">.</span><span class="n">method_calls</span>
<span class="k">print</span> <span class="n">method_calls</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">method_calls</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">method_calls</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span>
<span class="k">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">'__main__'</span><span class="p">:</span>
<span class="n">unittest</span><span class="o">.</span><span class="n">main</span><span class="p">()</span>
</pre></div>
Things to note:
<ol>
<li>Where you patch is both critical and potentially confusing. I tried patching logging.getLogger, but since it's already imported, that didn't work. If your code under test does <code>from foo import bar</code>, then you need to patch <code>mycode.bar</code> rather than <code>foo.bar</code>.</li>
<li>Giving a spec to Mock proves that your code is at least calling your mock according to it's signature.</li>
<li><code>mock_logger.method_calls</code> is how to access the method calls. I know it's sad, but it took me a while to figure this one out.</li>
</ol>Anonymoushttp://www.blogger.com/profile/00844490813462210586noreply@blogger.com0tag:blogger.com,1999:blog-2698762641457271119.post-38275045480856346322011-03-10T17:00:00.007-05:002011-04-01T15:21:34.568-04:00Password ManagementPassword management is always a pain. We all know that we should be using unique passwords for every site, and that they should be enormously long, unguessable random strings. But even with a <a href="http://www.wikihow.com/Build-a-Memory-Palace">memory palace</a>, that's simply not terribly practical. So, just like everyone else I know, I was cheating. I had about a dozen passwords that I used for, well... everything. I kept one particularly weak one for the really junky stuff. Of course I knew this was a bad idea, but I figured "it can never happen to me". Then I watched it happen to <a href="http://www.locusmag.com/Perspectives/2010/05/cory-doctorow-persistence-pays-parasites/">Cory Doctorow</a>, and then a friend who shall remain nameless... and finally <a href="http://gawker.com/#!5712615/commenting-accounts-compromised-++-change-your-passwords">the great gawker leak</a>. Now, I couldn't remember if I had an account with gawker or any of it's affiliates or not... but either way, it was clearly time to do something about it.<br />
<br />
Back in the day at Afilias, we had a <a href="http://www.gnupg.org/">gpg</a> encrypted password file. The file was encrypted to all the admin's keys, so everyone with access could read it. Editing it was accomplished via a script. Not an ideal solution, but it worked for us. I wanted something a hell of a lot more user-friendly if I was going to be using it more than a dozen times a day. So, I adopted <a href="http://callpod.com/products/keeper">Callpod Keeper</a>. It's a solid solution, except that it wants $30/year to work in a useful way. Basically, I enter site, userid and password for all my password type stuff into the application on my Mac. Hit save and it encrypts and syncs through the cloud with my (excitingly new) Droid. From there I can copy the password and paste it into the password field in the browser. Problem solved, or at least rendered painless enough that I'm actually following best practices. It worked on my iPhone 3G too, but the lack of easy task-switching on my old 3G and general slow crappieness meant I hardly used the browser side of it anyway.<br />
<br />
Those of you who know me know that I'm cheap. Not absurdly cheap, but wasted money bothers me. $30/year rankles. I suspect that <a href="http://www.thelastlecture.com/">Randy Pausch</a> would chide me for squandering my decreasingly free time on something that's not "important" when I could just spend $30/year, but... I can't help but think that the awkwardly named keep<b>ass</b> stuff in conjunction with Dropbox would solve this problem... and cost $0... Droid: <a href="http://www.keepassdroid.com/">http://www.keepassdroid.com/</a> at the <a href="https://market.android.com/details?id=com.android.keepass">market</a> OSX: <a href="http://www.keepassx.org/">http://www.keepassx.org/</a><br />
<br />
And sure enough it does. Install both the droid and the osx versions for both keepass and dropbox. Generate a keyfile and put it somewhere other than your dropbox directory, with a copy on both the droid and the mac. Put your password database in your dropbox (in a private section). As long as you use a keyfile and keep it fairly much under wraps, even if someone compromises your dropbox (you're using a proper password for it now, right?), your passwords are still relatively safe.Anonymoushttp://www.blogger.com/profile/00844490813462210586noreply@blogger.com0tag:blogger.com,1999:blog-2698762641457271119.post-52943731454735666302010-10-19T15:51:00.006-04:002010-10-19T16:58:52.105-04:00Ranting about Microsoft and AdECNWell, I spent 3 years trying to drink the Microsoft koolaid (or borrowing their own words, eat the dogfood) and I think I can safely say that the reason I don't like it goes a little deeper than a lack of familiarity.
Bye bye Visual Studio, you crashed pretty frequently and you were slow. Really slow: while running on my beefy post-acquisition workstation VS was always slower than emacs on my crappy pre-acquisition computer. It's slower than IDEA on my pre-acquisition MacBook. I haven't been playing with IDEA for very long but I haven't made it crash yet, compared to crashing VS on a pretty much daily basis. I won't miss that tool at all.
I'll kinda miss .NET and C#, but having looked at Scala, I don't think I'll miss it much. I certainly won't miss the ill conceived and poorly implemented pile of dung upon which we were supposed to build the BI system. Even a company the size of MS should know better than to divide it's efforts across multiple implementations for solutions to, say the problem of cloud computing. For example, the cosmos storage and sputnik / scope debacle. Do we, er, I mean "they" really need a proprietary, internal only cloud computing solution when they already have a proprietary external product?
Convergence is a common buzzword at Microsoft and was an excuse at AdEcn to adopt the shoddy work of other teams. If things were built with quality, it would make sense to converge, but at Microsoft, or at least the parts of AdCenter with which I became acquainted outside of AdEcn, quality was more of a buzzword than a reality. I suppose that a triple-booked development team is likely to sacrifice quality, but I also suppose that triple booking them in the first place is a sign of gratuitous incompetence at higher levels of leadership.
Imagine a programming tool which takes 14 man days of senior developer time in order to support the smallest "non-change" imaginable? Absurd you say? Nope, that's sputnik. But surely it must be straight forward to see what the changes are and compare them to what they should be? This is generally the case in the world of enterprise software, but not so with SSIS and it's derivatives. I can not for the life of me understand how Microsoft has been successful with SSIS. The fundamental idea is solid, and the execution is excellent... in fact, it's an excellent tool, except for one critical problem: the format of the .dtsx file. These files are more unreadable than bad perl. Small changes to an SSIS package in the GUI editor can lead to enormous and generally unrelated changes in the .dtsx file, rending standard diff tools useless. The absence of a diff tool makes meaningful code-review impossible. Change control, at least in any traditional sense, is equally impossible. The monolithic nature of the editor and the runtime engine make unit testing effectively impossible. SsisUnit is an attempt to address these failings but implements only the first and easiest 10% of what would be necessary for a UT solution, mocking for example is conspicuously absent so testing a loop forces you to test all the functionality that is called inside the loop. Microsoft is apparently unaware of this issue or at least hasn't address it in any way that I could see and I asked on the internal distribution lists while I was an employee there. This is intended for enterprise use? Are you joking?
But the crappy software is to me just a symptom of Microsoft's deepest problem. I am referring to the lack of competent leadership. I will always be frustrated by how the upper echelons fumbled AdECN. First by crippling it with internal partners who were not invested in it's success and then with repeated blunders and meandering on the rush to market. Millions of dollars and four years of developer time and passion all wasted. The multiple competing solutions approach is another symptom of Microsoft's disease. Managers, particularly the higher level ones, don't seem to be capable of making the most important kind of decision; the decision to not do something. The giant is so scatterbrained that it can only barely manage to push out the products which are critical to it's existence. It leaks money, time and intention from a thousand suppurating projects. I will paraphrase a former co-worker.
<blockquote>The mission statement used to be "A PC on every desk, in every house", but now it's some generic new-age babble about potential.</blockquote>
This company has lost it's way. I'm glad that I will no longer be wandering down random paths with them.Anonymoushttp://www.blogger.com/profile/00844490813462210586noreply@blogger.com0tag:blogger.com,1999:blog-2698762641457271119.post-55966941134278577912010-07-13T15:32:00.002-04:002010-07-13T15:38:46.912-04:00CPM considered harmfulI work in online advertising. Those little ads tend to be sold in CPM. What does CPM mean, you ask? Well... since the advertising industry consists of Ad Men (think used car salesmen, but with a better suit and more cocaine / meth), there are no less than 4 possible interpretations of this fine acronym. We have:
"Cents Per Mille", "Cost Per Mille", "Cents Per Million" and "Cost Per Million".
I mean, it's not really that important, since it only relates to billing... Oh wait. Yes, the online ad industry really is that fragmented and yes, they're really too stupid to agree on a single interpretation of a critical unit of measure, let alone just picking a completely clear metric unit.Anonymoushttp://www.blogger.com/profile/00844490813462210586noreply@blogger.com0tag:blogger.com,1999:blog-2698762641457271119.post-47843924682405834462009-04-03T14:59:00.003-04:002009-04-03T17:15:24.642-04:00Man, I really should post more.Belated New Year's resolution: post at least once a week. And real posts, not just filler. Starting now. So, I'm trying to follow Peter's diet with Damien. The food choices are fine, but only two days in and I feel laggy and tired. Oh well, I'm sure I'll pick up over the weekend. It affected the massages I did last night. I got into a decent rhythm and flow, but was so zonky I forgot a bolster. I also didn't have the power and energy I usually have, which made it feel more laborious. I'm loosing some of my joy in massage, so I think it's time for me to do a trade.
This weekend I'm de-milling my parts kit (see the link) and, assuming the rest of the parts arrive, I might even finish up building my AK. I have no idea how useful this will be for hunting, but it's sure an interesting project. And affordable, too.
I did a bunch of research into rebuilding the rear of my Bronco to get rid of the spool and put in a proper Detroit locker. Turns out this would be the right time to switch it to a 35 spline nodular setup. I'm not sure what exactly that means beyond "awesome" to the point of effectively indestructible. Oh, and somewhat expensive:
35 spline Detroit locker $475
front and rear 4.56 gears $190 each
Strange nodular case $300
nodular pinion support $90
custom axles about $400 (need to pull one of the axles I have and get a quote)
I guess I should get off my duff and pull that axle this weekend. I need some jackstands to do it though. Or something. Maybe I can use wood blocks? Should be a fun weekend in a "getting things done" kind of way.Anonymoushttp://www.blogger.com/profile/00844490813462210586noreply@blogger.com0tag:blogger.com,1999:blog-2698762641457271119.post-9605301528671900332008-09-03T00:40:00.003-04:002008-09-03T00:43:58.458-04:00Just so I don't forgetI went to Burning Man and got two very clear things. First, I need more human contact. I mean, I pretty much knew this before hand, but man did the 11:11 ever make that clear. Second, I need to find a way to do more things for other people. I'm planning to enroll in a massage technician's class since that'd address both my needs.Anonymoushttp://www.blogger.com/profile/00844490813462210586noreply@blogger.com0tag:blogger.com,1999:blog-2698762641457271119.post-84969738878795085572008-08-12T01:36:00.002-04:002008-08-12T01:47:54.147-04:00Women who hug their exs.In the last month I've been hugged by at least two ex-girlfriends. These were both women who dumped me, rather than me dumping them. In both cases I'm a little conflicted between wanting them back (because I'm an idiot who wants things he can't have) and wanting to slap them for screwing with my head and my heart (not to mention my fantasy life). What is it women are thinking in these situations? I don't know of any ex of mine where physical intimacy, no matter how platonic the intentions, doesn't provoke thoughts and memories which are anything but platonic. And that immediately scratches at the breakup scars. It's a strange mixture of heartbreak and happiness. While I'll bitch about it, the truth is that as much as I hate reliving being dumped, I don't really want it to end.Anonymoushttp://www.blogger.com/profile/00844490813462210586noreply@blogger.com0tag:blogger.com,1999:blog-2698762641457271119.post-39161540777840993482008-08-06T02:50:00.003-04:002008-08-06T03:34:13.095-04:00I Beg Yurt Pardon?So, I'm considering going to Burning Man, well, for the last weekend anyway. It sounds like a really interesting experience and my summer hasn't been anywhere near interesting enough. I keep telling myself I'll do cool and interesting things, but lately I haven't been doing them. So yeah, I think I'll do this. Ratha, Damien and Jonathan are all going, but they're part of camps and are going for the whole week. I'd enjoy going for the whole week, but I think a weekend is enough to start with. I hope I can convince Alfred or at least one or two other people to go with me. It'd make renting a big honking van a viable option, and to be honest I'm not keen on driving the STi out on the playa.Anonymoushttp://www.blogger.com/profile/00844490813462210586noreply@blogger.com0