08-31-09 - New Bike 2.0

I redid a bunch of stuff on my new bike and I'm much happier with it now. It doesn't look nearly as cool, but it rides better and is more functional for me. I went back to plain old drop bars. I don't really care about being in the drops, but I need the shorter reach to the brakes, and I like having the curve of the drops to brace against for hard braking. I also swapped the stem to a shorter, taller stem, to bring the bars up and back to me now. I've always scoffed at people with tall stems like the Nitto Technomic (or worse, upward-angled stems) because it basically means you fucked up and bought a frame that was too small for you. Yup, that's what I did, I'm a tard, though the frame isn't actually too small, it's just too low and long. One thing that many people don't account for is that because of the angle of the head tube, when you raise the stem, you also shorten the reach. To get your bars higher and keep the horizontal reach the same, you would actually want to switch to a longer reach stem. There's also a weird thing going on in my case because my head tube seems to be 74 degrees and most stems are 73, so the stem is actually angled down a bit.

Sadly it doesn't look nearly so elegant and clean now that it's actually functional :


Some more little random building/tweaking stuff I learned for my own reference :

I don't like the standard advised way of putting on brakes. The standard advice is to hold the brake at the desired separation with one hand and then tighten down the cable bolt with the other. This is incredibly hard to do without slipping, and if you slip you get too much slack which makes the brake pads too far apart (proper brake pad installation has them just barely off the rim). Instead, do this : first back out the barrel tension adjuster about 10 times around (a lot). Now, hold the brake all the way closed, tight against the rim. Tighten the cable bolt. At this point the brake is way too tight, so screw the tension adjust back in until it's relaxed to the point that the the wheel runs free. I find this much easier and gives a very nicely adjusted brake.

Brake cable clatter. My bike runs almost perfectly silent, it's magic, it's like a ghost slipping by in the night. Because of that I hear lots of little noises that you might normally ignore and they bug me and I fix them. One of the last little bits of noise was the brake cable instead inside the brake lever bodies rattling around. To fix this, just wrap the brake cable end in a bit of electrical tape before feeding into into the lever to prevent the metal-on-metal contact. This is *very* hard to do after the brake cable is installed, so just do it first as a preventative measure when installing new brake cables. (not sure if this is a good idea on STI levers; I did this on old-school aero brake levers).

Loose spokes. Apparently my wheelset was shipped to me with the spokes rather on the loose side. I read a few other posts around the net that indicate this is pretty common, the commercial wheelbuilders tend to make the wheels at rather low tension. If you're a small rider this may be okay, but for a big heavy oaf like myself, the wheels flex which causes the spokes to knock on each other and make a rhythmic "ping" as they go around. (you can isolate the sound to this problem if it happens even when you don't pedal, and it only happens when the bike is under load). To fix, just tighten your spokes. I haven't found any good information about how tight spokes should be or how you're supposed to tell that they're tight enough.

Saddle rails. There's some weird shit with saddles and seatposts. Unlike almost every other bike part, they seem to just be made really sloppily. The actual spacing seems to vary between 42 mm and 44 mm. Looking at some new saddle rails you'll even see that they vary in separation from back to front. Apparently you're just supposed to force them to the width you need and tighten the clamps and it works okay. A bigger problem is that old saddle rails are 7 mm in diameter and new ones are 9 mm ("oversized" like everything these days for lighter weight and more strength). For the most part old rails will work in new seatposts, but new rails may have trouble fitting in some old seatposts. The advised fix to that is just to widen the old seatpost clamp with a metal file. Ugly. (on a semi-related note : there are a whole lot of seat post sizes ; my three bikes are 25.0, 27.0, and 27.2 so I can't swap any parts, yay).


08-28-09 - Phone Text Problem

I wrote a couple of posts ago about how I was having some mysterious problem with my phone not delivering texts. I've now discovered that the problem is sometimes the texts randomly go into "pending" mode when I hit send. I've discovered no rhyme or reason for this, I just sent about 10 texts this afternoon and later discovered that 2 of them went pending, so I'm sure the person I was texting with was rather confused by my lack of response and then sudden jump ahead in the conversation flow.

Apparently the advised fix ( 1 or 2 ) to this is to yank the battery while the phone is on !? WTF world. Straighten your shit out. (though that doesn't actually deliver your pending texts - you have to forward them to the original recipient still).

I've been stealing my neighbor's wifi for the last week, and I guess they finally wized up and turned on security. Damn it. I was being nice too, only email and a bit of web browsing, no downloads. Of course browsing the web is pretty damn bandwidth heavy these days. There really needs to be a "light" mode of the web that lets you just get text and only crucial pictures, no embedded media, but dear god that would require the web to actually be sane.

Now I have to decide between the fucking awful DSL that's slow and overpriced or the fucking awful ghetto cable Broadstripe that's in bankruptcy and has frequent outages and lack of service people. One of the things I hate the most in life is when I have to make a decision where I know both choices suck absolute balls and I will regret it either way.

It's kind of good not having it. Maybe it will help me break the ctrl-alt-M constant email checking and let me get down to real work. Except I need net to talk to the RAD perforce server.

Both Broadstripe and QWest have outrageous contract deals that make me angry. Broadstripe has a $100 sign up fee, which pisses me off to no end. Broadstripe also requires a 13 month term; that's so obviously intentionally designed to fuck over renters who often have 12 month leases, they know they can get an extra month of free money out of you. QWest has all these crazy complicated pricing models with asterisks upon asterisks. They advertise things "like $19.99 for internet" (*) but that's only with a qualifying phone package (*) (= that costs at least $35/month) and (**) only if you sign up for a 2 year term with big cancellation fees. If you just sign up for month to month with no phone, it's $70/month for the high speed internet.

I'm pro free market and all in theory, but it seems like the consumer and competition would be better served if we had some laws forbidding all these kinds of contracts. If you want to offer a subscription service it has to just be a month to month rate with no conditions.


08-27-09 - Oodle Image Compression Looking Back Pictures

I thought for the record I should put up some pictures about what I talked about last time.

First of all the R/D trellis quantization issue. Very roughly what we're doing here is coding to a certain bit rate. The "RDO" lets us use a smaller quantization bucket size, which initially lowers distrortion and increases our rate, but then we hammer on some of the values - mainly we just force them to zero, which causes some distortion and decreases rate; we choose to hammer the values that save us the most rate per distortion. (99% of the time all you're doing is turning 1's into 0's, so it's a matter of picking the 1 to squash to 0 which saves you most the rate).

Here are the results on "Moses" at 0.5 bits per pixel :

No R/D : RMSE = 9.9381 :


Unconstrained R/D : RMSE = 9.7843 :


You should be able to see in the R/D image that some of the image looks better, but other parts look much worse. The RDO has stolen rate from places where it was expensive in terms of rate to encode a certain distortion, and moved those bits to parts of the image where you can get more distortion win at a cheaper rate. This is awesome if your goal is to minimize RMSE, but it's unclear to me whether this is *ever* good perceptually.

In this particular case, the RDO Moses image actually has a worse SSIM than the No-RD image; this type of mistake is actually something that SSIM is okay at detecting.

In practice I use some hacks to limit how much the RDO can do to any one block. With those hacks I almost always get an SSIM improvement from RDO, but it's still unclear to me whether or not it's actually a perceptual improvement on many images (in some cases it's a very clear win; images like kodim09 or kodim20 where you have big flat patches in some spots and then a lot of edge detail in other spots, the RDO does a good job of stealing from the flats to give to the edges, which the eye likes, because we don't mind it if an almost perfectly smooth area becomes perfectly smooth).

Now for the hacky perceptual smooth DC issue.

This is "kodim04" at 0.25 bpp ; no RDO ; no unblock , no perceptual DC quantization ; basically a naive DCT coder :


Now we turn on the hacky perceptual quantization that gives more precision to smooth DC's : (unblock still off) :


Note that the perceptual quant of DC means that we are using more of our bitrate for the DC band, so we give less bits to AC, which means using a larger quantizer for AC to match the bit rate constraint.

Now with unblocking , no perceptual DC quant : (RMSE = 12.8565 , SSIM = 58.62%)


With unblocking and perceptual DC quant : (RMSE = 12.9666, SSIM = 57.88%)


I think the improvement is clearest on the unblocked images - the perceptual DC quant one actually looks okay, the parts that are supposed to be smooth still look smooth. The one with uniform DC quant looks disgustingly bumpy. Note that the SSIM of the better image is actually quite a bit worse. Of course RMSE gets worse any time you do a perceptual improvement. You should also be able to see that the detail in the hat thatching is better in the nonperceptual version, but that doesn't bother the eye nearly as much as breaking smoothness.

ADDENDUM : some close up pictures of Moses' waddle area showing the R/D artifacts better. You should zoom these to full screen with a box filter and toggle between them to see most clearly. You should see the RDO killing blocks in the collar area very clearly. All you really need to do is look at the last picture of these four and you should be able to see what I'm talking about with the RDO :

Portion of Moses at 0.75 bpp : No lagrange optimization :


With Lagrange RDO :


Crop of No-L :


Crop of RDO :



08-25-09 - Oodle Image Compression Looking Back

I did a little image compressor for RAD/Oodle. The goal was to make something with quality comparable to a good modern wavelet coder, but using a block-based scheme so that it's more compact and simple in memory use so that it will be easy to stream through the SPU and SIMD and all that good stuff, we also wanted an internal floating point core algorithm so that it extends to HDR and arbitrary bit depths. I wrote about it before, see : here or here . That's been done for a while but there were some interesting bits I never wrote about so I thought I'd note them quickly :

1. I did lagrange R-D optimization to do "trellis quantization" (see previous ). There are some nasty things about this though, and it's actually turned off by default. It usually gives you a pretty nice win in terms of RMSE (because it's measuring "D" (distortion) in terms of MSE, so by design it optimizes that for a given rate), but I find in practice that it actually hurts perceptual quality pretty often. By "perceptual" here I just mean my own eyeballing (because as I'll mention later, I found SSIM to be pretty worthless). The problem is that the R-D trellis optimization is basically taking coefficients and slamming them to zero where the distortion cost of doing that is not worth the rate it would take to have that coefficient. In practice what this does is take individual blocks and makes them very smooth. In some cases that's great, because it lets you put more bits where they're more important (for example on images of just human faces it works great because it takes bits away from the interior patches of skin and gives those bits to the edges and eyes and such).

One of the test images I use is the super high res PNG "moses.png" that I found here . Moses is wearing a herring bone jacket. At low bit rates with R-D Trellis enabled, what happens is the coder just starts tossing out entire blocks in the jacket because they are so expensive in terms of rate. The problem with that is it's not uniform. Perceptually the block that gets killed stands out very strongly and looks awful.

Obviously this could be fixed by using a better measure of "D" in the R-D optimization. This is almost a mantra for me : when you design a very aggressive optimizer and just let it run, you better be damn sure you are rating the target criterion correctly, or it will search off into unexpected spaces and give you bad results (even though they optimize exactly the rating that you told it to optimize).

2. It seems DCT-based coders are better than wavelets on very noisy images (eg. images with film grain, or just images with lots of energy in high frequency, such as images of grasses, etc). This might not be true with fancy shape-adaptive wavelets and such, but with normal wavelets the "prior" model is that the image has most of its energy in the smooth bands, and has important high frequency detail only in isolated areas like edges. When you run a wavelet coder at low bit rate, the result is a very smoothed looking version of the image. That's good in most cases, but on the "noisy" class of images, a good modern wavelet coder will actually look worse than JPEG. The reason (I'm guessing) is that DCT coders have those high frequency pattern basis functions. It might get the detail wrong, but at least there's still detail.

In some cases it makes a big difference to specifically inject noise in the decoder. One way to do this is to do a noisey restore of the quantization buckets. That is, coefficient J with quantizer Q would normally restore to Q*J. Instead we restore to something random in the range [ Q*(J-0.5) , Q*(J+0.5) ]. This ensures that the noisey output would re-encode to the same bit stream the decoder saw. I wound up not using this method for various reasons, instead I optionally inject noise directly in image space, using a simplified model of film grain noise. The noise magnitude can be manually specified by the user, or you can have the encoder measure how noisey the original is and compare to the baseline decoder output and see how much energy we lost, and have the noise injector restore that noise level.

To really do this in a rigorous and sophisticated way you should really have location-variable noise levels, or even context-adaptive noise levels. For example, an image of a smooth sphere on a background of static should detect the local neighborhood and only add noise on the staticy background. Exploring this kind of development is very difficult because any noise injection hurts RMSE a lot, and developing new algorithms without any metric to rate them is a fool's errand. I find that in some cases reintroducing noise clearly looks better to my eye, but there's no good metric that captures that.

3. As I mentioned in the earlier posts, lapping just seems to not be the win. A good post process unblocking filter gives you all the win of lapping without the penalties. Another thing I noticed for the first time is that the JPEG perceptual quantization matrix actually has a built-in bias against blocking artifacts. The key thing is that the AC10 and AC01 (the simplest horizontal and vertical ramps) are quantized *less* than the DC. That guarantees that if you have two adjacent blocks in a smooth gradient area, if the DC's quantize to being one step apart, then you will have at least one step of AC10 linear ramp to bridge between them.

If you don't use the funny JPEG perceptual quantization matrix (which I don't think you should) then a good unblocking filter is crucial at low bit rate. The unblocking filter was probably the single biggest perceptual improvement in the entire codec.

4. I also somewhat randomly found a tiny trick that's a huge improvement. We've long noticed that at high quantization you get this really nasty chroma drift problem. The problem occurs when you have adjacent blocks with very similar colors, but not quite the same, and they sit on different sides of quantization boundary, so one block shifts down and the neighbor shifts up. For example with Quantizer = 100 you might have two neighbors with values {49, 51} and they quantize to {0,1} which restores to {0,100} and becomes a huge step. This is just what quantization does, but when you apply quantization separately to the channels of a color (RGB or YUV or whatever), when one of the channels shifts like that, it causes a hue rotation. So rather than seeing a stair step, what you see is that a neighboring block has become a different color.

Now there are a lot of ideas you might have about how to address this. To really attack it thoroughly, you would need a stronger perceptual error metric, in particular one which can measure non-local patterns, which is something we don't have. The ideal perceptual error metric needs to be able to pick up on things like "this is a smooth gradient patch in the source, and the destination has a block that stands out from the others".

Instead we came up with just a simple hack that works amazingly well. Basically what we do is adaptively resize the quantization of the DC component, so that when you are in a smooth region ("smooth" meaning neighboring block DC's are similar to each other), then we use finer quantization bucket sizes. This lets you more accurately represent smooth gradients and avoid the chroma shift. Obviously this hurts RMSE so it's hard to measure the behavior analytically, but it looks amazingly much better to our eyes.

Of course while this is an exciting discovery it's also terrifying. It reminded me how bad our image quality metrics are, and the fact that we're optimizing for these broken metrics means we are making broken algorithms. There's a whole plethora of possible things you could do along this vein - various types of adaptive quantizer sizes, maybe log quantizers? maybe more coarse quantizers in noisy parts of the image? it's impossible to explore those ideas because we have no way to rate them.

As I mentioned previously, this experiment also convinced me that SSIM is just worthless. I know in the SSIM papers they show examples where it is slightly better than RMSE at telling which image is higher quality, but in practice within the context of a DCT-based image coder I find it almost never differs from RMSE; that is, if you do something like R-D optimized quantization of DCT coefficients with Distortion measured by RMSE, you will produce an image that has almost exactly the same SSIM as if you did R-D with D measured by SSIM. If RMSE and SSIM were significantly different, that would not be the case. I say this within the context of DCT-based image coding because obviously RMSE and SSIM can disagree a lot, but that axis of freedom is not explored by DCT image coders. The main thing is that SSIM is really not measuring anything important visual at all. A real visual metric needs to use global/neighborhood information, and knowledge of shapes and what is important about the image. For example, changing a pixel that's part of a perfect edge is way more important than changing an image that's in some noise. Changing a block from grey to pink is way worse than changing a block from green to blue-green, even if it's a smaller value change. etc. etc.

It seems to me there could very easily be massive improvements possible in perceptual quality without any complexity increase that we just can't get because we can't measure it.

08-25-09 - Linkage

I found a picture of myself on SqueezeChart which is a little bit disturbing. There's way too much representation of the modern Russian/PAQ tweaker crew on there. Personally I think anyone who doesn't release source code or a publication to their compression algorithm should be black listed. If you don't make your method public it may as well not exist.

Performance it's the name of the game. MC Spandx. This video confuses me because I can't figure out if it's making fun of racers or celebrating them.

Gravel Beach is a very cool blog by a beach scientist in the Seattle area. Lots of good pictures and info about beach accretion and geology and whatnot.

We watched Hard Ticket to Hawaii the other day. It's incredibly, it's perfect, it was far better than I ever imagined it could be from the famous clips : 1 or 2 . It's just so mind blowing on so many levels.

While up there at Scarecrow, had a peak at the awesome graffiti on Tubs ; ( more photos ).

Bald Man Watching is a nice blog of Seattle street art. Apparently I just missed "Atroleptic". WTF why do I always find out about things too late !?

A while ago I wrote about how I wanted to invent a backpack that was suspended off your back somehow so that air could get in and you wouldn't sweat so much. Well, guess what, that already exists and has for a while. If you go to any technical backpacking place like REI / Mountain Hardware / etc. you'll see lots of them ( For example ). They're quite awesome. There seem to be two main styles now. One is just a tight mesh that's soft and just held slightly off the backpack body by some pads without a hard frame. The other style is actually a hard frame that fully supports the backpack well off your back, and then has a cloth mesh sprung off the frame that your back rests on. The latter style lets lots of air in. Both seem very awesome for cycling. I haven't yet found the ideal cycling backpack. I would like it to be more variable sized. It should have drawstrings so that you can cinch it up into a tiny little ball when it's empty, but if you relax it all the way out it should be very large just in case you need to carry home a piano on your back.


08-20-09 - Moving

Moving makes you realize what's really important to you. You save out from the mass packing those handfull of things that you really must have. For me it was : laptop (LDO), bike stuff (water bottles and helmet), coffee gear (kettle, cone, cup, grinder, beans). Everything else I own can fuck off. That's all I need.

(Unfortunately the movers packed up my coffee gear which I told them not to pack so I had to spend half the night digging through boxes to find it).

I'm at the 15th Ave Online Coffee because I have no internet in my house, and it's really creepy here. The vibe is so bizarre. It's eerily quiet, but disturbed by the very loud hum of the refrigerators.

It appears the cable providers here no longer offer anything but digital cable (you can only get "basic" with non-digital cable). I fucking despise digital cable. I like my TiVo, I don't want your damn DVR box. Digital cable also takes longer to change channels, and while overall the signal quality is better, it has much worse artifacts when there's a signal glitch - it tends to drop out completely or turn into pure noise instead of degrading gradually. I'm tempted just to go with no TV at all and use the internet, but for regular shit like "The Daily Show" or cooking shows it's too much pain to download them all. Real TV series (ala The Office / Dexter / whatever) I'm perfectly happy just getting off the computer. Apparently the cable in my neighborhood is Broadstripe which has ridiculously bad reviews (and also recently went into chapter 11). Another option is DSL + DirecTV, which I also don't want. Waaa I just want internet and Comedy Central waaa.

The Russians or Chinese really need to offer a TV torrent subscription service. They could just set up a bank

My new house is so big and empty. I don't really like having two stories. It's way bigger than I would like, but c'est la vie. It's also so quiet it's kind of strange. I know, I know, I'm a big whiner, I'm not actually complaining about how quiet it is here, it's just kind of a shock. I actually really like living in the heart of the city with people going by and noise during the day, I just want it quiet at night when I'm trying to sleep. In theory it's possible if houses are designed right (living room on the street size, bedroom on the back side, and the back side is treated as a quiet zone by all residents) but in practice that never works.


08-19-09 - Done Bike

I got the cables on, and after a few more stupid mistakes and redos, it came together pretty fast. The finished bike :



(yes the bar tape is fucked up because I had to take it off and redo it and had already cut it; I have to order new tape and do it anew).

Some links I used :

Sheldon Brown - Cables
Sheldown Brown - Derailer Adjustment-How To
Park Tool Website - installing new chain
Park Tool Website - derailleur overhaul
Park Tool Website - Cranks
Park Tool Website - cables
Park tool - bar wrapping
good - how to adjust headset
Bicycle Repair Washing Cleaning Your Bike
The Compulsive Soul's Guide to Cleaning the Bicycle

Some random things I've learned :

Having a clamp on front derailleur instead of a braze-on is kind of nice because it gives you infinite easy adjustment capability. However, it means the front derailleur clamp needs to be *REALLY* tight or it will slip. Even very tiny slips will fuck you up because the FD cage needs to be right next to the chainring, so even an 0.5 mm slip is no good. I read some advice on the net to put a piece of electrical tape inside the FD clamp to keep it from scratching the downtube. This is terrible terrible advice. The tape makes the FD clamp slippy which makes it impossible to get a good adjustment.

Some good advice from the internet : for wrapping bar tape, inside out electric tape on the bars is awesome. Take some electrical tape and wrap just one loop around the bars in the curving part, wrap it very tight so it stretches. Now when you put on the bar tape it will hold in the corners much nicer. Another good piece of advice is to work your hands around the bar tape in a rotating fashion like you would when riding to get it to tighten up before applying the end piece of tape. Also in general, really pull the tape very tight as you wrap, you want to really stretch it as you put it on.

If you want to seal on electrical tape really clean and tight, you can use a little heat - even a hair dryer will do the trick. It gets the tape a tiny bit melty and it contracts and shrink-wraps and gets rid of any little bubbles or folds. Warning though, it makes it much harder to remove.

Once you have all the tools, putting together a bike is really very easy. I don't think there's a single hard step; even getting all the cable adjustments just right is pretty trivial. The guide sheets that come with Shimano gear are actually really excellent. I always consult my two bike books plus the internet to get many opinions, but I could've actually just used the product installation sheets and been fine.

You can't cut cables and housing with basic wire cutters, but any good quality long-lever wire cutters will do the job just fine. You don't need a fancy "cable cutter" tool, just use high-leverage cutters and make a quick hard cut. Once the cut is made, if you want everything to be just perfect, a dremel rotary grinder does a really nice job of cleaning up the cable ends. A push-pin makes a perfectly good "awl" to open up the cables (mainly an issue because the dremel will melt the outer plastic).

A work stand makes life so much easier and is totally worth the $100. Even if you're just servicing bikes and not building, I highly recommend it.

The correct chain size seems too tight! Don't worry, trust the Park Tool / Sheldon Brown advice of going big-to-big plus 1 inch. You will think "no way is this long enough to work once it goes through the rear derailleur". Yes, in the big-to-big position this will pull your rear derailleur really far forward - that is the intent! You should really never be in that gear combination, the goal is just to make it *possible* to get into that gear so that you don't break the bike if you do it by accident. The more important thing is that when you're in the small-to-small gear the read derailleur doesn't coil up right onto the sprockets so that the jockey wheels almost touch the sprockets. The rear derailleur is meant to be tugged out under tension, not slack and balled up.

Ferrules don't seem to go into the brake barrels. I tried to get them in at first and was dismayed, but then I noticed that both of my other bikes don't have them either. It seems the brake barrels are made so small that you can only just get the cable housing in, the ferrules are too fat. Ferrules do work of course at the lever end of the cables.

It seems to me you can adjust a headset just fine with only one headset wrench. I don't have two so I just did it with one and it seems perfect and tight to me. We'll see if this comes back to bite me.

Oh, there's some clusterfuck with saddle rail spacing. I didn't even know this, but there appear to be two different sizes. I'm not even sure what they are because I can't find anyone else talking about this, but I think they're something like 42 mm and 44 mm - which is too different to be compatible. You must have the right seat post for your saddle. If you look at pretty much any saddle online it won't say anything about the rail spacing. I assume if you buy a new saddle and new seat post they will match, but if you are trying to match an old-to-new you may have a rail spacing problem. If anyone can find any authoritative info on this issue I'll add it. (I'm not talking about the rare 30 mm very narrow Keirin NJS rail spacing).

Don't cut anything or put cable crimps on until you're sure everything is right. When you wrap the bar tape, just temp tape it down and leave the rest hanging off at first. When you thread the cables, just leave all the excess length hanging out and bolt them down. Then go through and check everything and adjust it. You can even do all your derailleur adjustment with the cables just long and flopping around. Once you're sure it's all good, then cut and crimp. Once you crimp, you can't run the cable back through the mechanism to get it out, so you can't make any big changes if you discover you did something wrong.

And in general about the bike. The good :

Holy shit the shifting feels good. Better than any new bike I've ever ridden in a shop. I assume this is partly because it's all brand new Ultegra, and unlike most shops I didn't try to save money on cheap cables or cheap housing or anything. Maybe partly because it's down-tube shifting which does give you a shorter tighter line. I also assume it's partly because I did everything slowly and carefully and tried to get everything just right. There's no slack anywhere, you just think in your head that you want to shift and it's already done and it's whisper quiet. Amazing.

The compact double front chainrings are great. I thought they might make the front shifts rougher because it's a much bigger step for the chain, but I see no problems at all with it. It gives me a much easier gear for the steep hills here. I'm very happy with 12-27 on the back too.

It feels crazy fast and nimble. Mainly I think it's because the drive train is so stiff, there's no play in the bottom bracket or the chain, you touch the pedal and you instantly go without all the mush I have in my old bike.

The bad :

I made a huge mistake. The geometry is not what I thought. I tried to be really careful ordering the frame, getting all the sizes right and checking angles, but somehow the frame is not what I expected. The way bikes are measured is really insufficient, the main measurement used is the seat tube length. So my new frame has the same seat tube length as my old bike - but the bottom bracket on my new bike is much lower to the ground. The result is that the top of the seat tube is much lower, so the top tube is lower, the whole bike feels lower even though it's the same "size". The size anomaly comes because the angle of the chain stays is a lot steeper on my new bike - they go up a lot to attach to the wheel, while on my old bike they are closer to horizontal. Then the fork on the new bike is shorter, and the wheel is much closer to the down tube. I'm not happy about the geometry change, I thought I was getting the same geometry as my old bike (which seems impossible to find in new bikes sadly; I don't understand why classic road geometry has been so abandoned, it's totally the way to go). I think that I can switch to a really short stem (60 or 70 mm) to fix the geometry, but it's a rather annoying issue.

I'm not loving the bullhorns. The main complaint I have is just that they're too long, you have to stretch too far forward to get to the brakes. I guess they're not really meant for the brake usage like I'm doing, but a lot of people do it these days, it's not good. If you compare to how far forward you would be on the hoods on normal drop bars, it's a good 'nother two inches to get to the ends of the bulls - and the bullhorns I have ( Nitto RB-018 ) are just about the shortest you can buy, most of then are even much longer which would be insane (and many of them are actually drop-down to make you lower which is also nuts). The flats on the sides don't look that long when you have them off the bike, but they're actually way longer than you need, you could get away with a few inches less. I think I might go back to plain old drops. (on the plus side, I saw some forum posts saying it was hard to get bar end brake levers in the RB-018, which seems to just be nonsense, the Soma Pursuit levers go in just great).

The Selle Italia Gel Flow saddle ain't got no gel. I think it would be an okay saddle for use with padded big shorts, but it's too hard for city riding that you do without padded shorts. Amateurs don't know this, but serious bike saddles are intentionally made very hard because you're supposed to have the padding in your shorts. It's stupid to ride a hard saddle on a city bike though, because you're just riding directly on the hard. On the other hand, the super-padded saddles made for the casual market are even worse. There aren't many good saddles that are made for serious riding without padded shorts. I might try a Specialized Body Geometry Avatar. On the plus side, I did find the Specialized sizing advice based on measuring your sit bones to be pretty good.

Anyway, I'm gonna try riding it for a few weeks and see how everything feels and then make a few changes. Right now I'm thinking go to a shorter stem to reduce the reach and just go back to normal drop bars. The handlebar that I want is just the top part of normal drops and brake hoods with no actual bottom drop part. Maybe I'll get that custom cut.

This was always intended as a learning experience, but it got a bit out of hand and turned into a serious build. Part of the problem is there's such a small price step for incrementally better stuff, it's very tempting to upgrade each piece. Like a full 104 grouppo (without STI levers) is maybe $400, while full Ultegra is $550. Of course you should upgrade. A cheap saddle is maybe $75, a great one is $150, well that's your butt and gonads, it's important, upgrade. Cheapo wheels are maybe $200, awesome Mavic Open Pros are only $300, of course you should upgrade. And before you know it you spent $2000.

Oh well, I'll do better on the next one.

In general I really advise against trying to buy a frame on ebay. Yes, you can find great bargains, but people don't measure things right, and measurements are crucial. Usually they will only post a "size" (which is a seat tube length). But is that the actual seat tube length c-c (center to center) or c-t (center to top) ? Or is the manufacturer's nominal size which may not exactly match the c-c or c-t seat tube lengths? They never post other crucial sizes, and if they do they're probably wrong. Pretty much the only way I would ever buy a frame on ebay again is if it's a frame where I know the exact model and year and manufacturer's nominal size, and I can look it up in the original catalog and find all the measurements. Even then I might have to cut out a cardboard replica of the frame to see it in person before buying. And by then the auction is over or somebody else insanely overbid it out of reasonable price range. It's just not worth it.

08-19-09 - Bike Ride Thoughts

I can't stand biking with people who are all type-A about it. They track their cadence and their heart rate, they train in tapers, they measure their blood sugar. It's all so analytical and thorough and careful and uptight and exactly everything that I'm trying to get away from when I take off on the bike. I want to ride away from computers and work and being right and worrying about every little thing. I ride out until it's just my legs and the wind and the road and we see what we can do together.

My favorite part of the ride is around mile 20 when I start to get a little light headed, and the monotony of the rode has murmurred to me like a mantra "pedal pedal pedal pedal" lulling me into a sleep-like zen state. Then everything disappears from my head and there is only breath and legs and spilling pedals and the road flying underneath. At that moment I can see the world without analyzing it, without wanting anything from it, without seeking anything in it. Normally when you're driving around you're looking for your destination, or even just looking for good views, or just looking at the houses and judging them, evaluating them - your analytical mind is going over everything you see, you don't just see it, you see it and process it, your mind attacks it, takes it apart. In the zen state I reach a point where the world is just going by and the analytical mind turns off and the world is just *there*.

People who are all analytical and careful about how they ride are like people who want to be really clean and proper during sex; no! this is the time to be loose and wild and relax and just go with what your body tells you to do!

Biking and bike racing are all about managing your self. You have only so much energy, you need to decide how to use it. If you burn it all up early you'll bonk and have a terrible ride. Over time you get to know your own body, you know you can sprint up hill A without going into the red, but not if you're having an off day. If a big hill is coming up, you know you have to take it easy for a bit to recoup so you can have energy to take it on. I think all these same skills are very important in life and work. You need to be aware of yourself and what drains you and how much energy you have, and how to prepare for things.

It occurred to me that one of the big things I do when I'm in dating mode is I very carefully manage my self. I try to make sure I'm in a good mood and have energy when I go on a date. I don't just rush straight from work or a hard workout to a date when I'm all exhausted and in a bad mood. I'll avoid making dates when I know I'd have to go through traffic to make the time, because then I would arrive all agitated and pissed off. Sometimes I'll push into the "red zone", forcing myself to be energetic on a date when I really just want to go to bed.

I stop all that once I get into a committed relationship. I know in my past I've been disappointing to my lovers because I'm a lot of fun during the dating phase, we do lots of new stuff, I'm talkative and energetic. Then over time as we settle in together, I stop doing all that because it's a fucking pain, and I'm just more myself, which is a boring homebody who hates to talk. I know you need to keep doing things together, so I'll still find things for us to do and we'll go out on "date nights" or whatever, but it's not the same. I just realized a big piece of the difference is this managing myself issue.


08-18-09 - Tuesday

Broken emails? I've heard some reports that emails weren't getting to me while I was gone. If you sent me an email over the past few days and I didn't reply to it (eg maybe I didn't get it), can you send it again? You can CC "cbloom.cbloom" at google-mail

When I was sitting in the Philadelphia airport I noticed one of those wifi "honey traps" that people talk about. I foolishly took a look at the wifi list to see if there was anything available. The list was something like "attwifi", "strbks", "Free Public Wifi". Hmmm, guess which one is just begging you to use it? The "Free Public Wifi" showed a different icon indicating it's a direct peer to peer link or something, not a broadcast access point.

Ugh. I'm really unhappy with Visual Assist X. All my fears about moving from VS 2003 to 2005 and the pain of having to get on VAX are coming true. Not only is the usability of VAX much worse because of the fucking awful suggestion box that they refuse to fix (you can see my Whole Tomato forum thread about it here in which they make up ridiculous reasons why it "has to be" the way it is; umm, no it doesn't, just make it like VA.NET).

This photo from Vintage Seattle is just proof that in every way people were way more awesome in the past. Nowadays people would be like "whaaa the shop is dirty; whaaa that's a big scary looking dead animal" ; in the past they were just like "pass my sword, bitch, I needa cut me some lamb, then we're gonna fuck and smoke and punch babies".

I did the inspection for my new house today. The owners are total nits about minor damage, which is really fucking annoying. It means I have to be crazy careful about noting all prior damage. And they sprung some crazy bullshit on me. Part of the reason I took the place originally was because the kitchen has these great huge butcher block counter tops. Today during inspection they hand me a lease addendum sheet that includes a bunch of extra conditions for care of the place, one of which is "do not cut or place hot objects on the kitchen counter tops". Umm, WTF !? Do you understand WHY people get butcher block counter tops? It's not because they look pretty and quaint and rustic, it's so you can fucking cook on them and not worry about. They're supposed to get scratched and water-marked and heat-stained, it's part of the charm. I cannot fucking stand people who are anal about keeping their kitchen immaculate. Your stove should have burned-on food, it should have black heat marks, your counters should have food stained grout, it should all be delightfully USED.

Anyhoo, I haven't signed the lease addendum yet. I think I might refuse. In any case, I think I just decided while I was writing this that I'm just gonna ignore those instructions in any case and fucking do whatever I want to the counter tops.

Poker blog from Brian Townsend is a nice read for me. Of all the big online pros, BT (sbrugby/aba) is the one I relate to and respect the most. For reference, he was the superstar of 2007, the first really huge online kid big winner. He won around $6 M in 2007 playing NLHE at the highest level. Then people finally quit playing him in NLHE (and in fact, all of the biggest money NLHE games dried up around that time, because it became too clear that a few amazing players could easily dominate them, and because Guy la Liberte quit playing so much). In 2008 the big money games switched to PLO and BT tried to follow the big money and play PLO at the highest stakes even though he had no expertise in it. He quickly lost around $5 M, mainly to Europeans like Antonius who had PLO experience, but also to Ivey who came on the scene and started dominating everyone. But unlike most of the crazy online kids who just gamble and go through huge swings, BT took his lumps, withdrew his remaining money, and started over again, grinding up PLO from the lowest stakes, learning the game, slowly getting better, moving up levels as he got better, and in 2009 he made it back to the biggest PLO games in the world and won in them again.


08-15-09 - Regenesis

I'm obsessed with the concept of tearing things apart to rebuild them anew, rebuild them fresh, with new ideas, and without all the old problems.

The classic one is just tearing up your life from time to time; change jobs, move cities, don't talk to old friends, tear everything up and rebuild. The fantasy is that you can start over without all the baggage of how people know you and the history you've laid down, you can build up a new you the way you want to be now. It never seems to work out.

I love the Lance Armstrong myth, even though it has only a small basis in reality. The myth is that before cancer, Lance was a very mediocre cyclist. The disease and chemo destroyed his body, wasted his muscles, made him emaciated, and turned him into a blank slate. Then when he got into recovery he resolved to become a great cyclist, and went into training hard. Any normal human who becomes a cyclist has all the baggage of muscles that were used for walking and playing catch and all the normal things that you do as a kid growing up, but Lance had shed all that to the disease. Thus as he trained up his musculatural, putting pounds of muscle on week after week by riding the bike, he built up a body that was specifically built for cycling. The myth is that only through the disease tearing him down to nothing could he rebuild the super-human cycling metabolism and physique.

It's not true, but I love it. (almost all of the great sports stories are myths that aren't quite true, that let us turn sport into parables, we constantly make up David vs. Golliath myths in sports, or Agincourt longbowmen vs the French, etc.)

Working on this fucking physical therapy every day that seems to never get me anywhere, I dream of tearing down. I imagine that if I could just wipe the slate and rebuild, I could easily fix everything. I actually think that's true in my case; my biggest problem now is that my neuromuscular system has picked up some very very bad habits over the years. Because of my shoulder injury, my long thoracic nerve developed "guarding" which basically means it doesn't fire the serratus. It's perfectly capable of doing so, and my serratus is plenty strong, but my brain doesn't tell it to. Furthermore, years and years of horrible computer use posture mean that whenever I stop thinking about it I slip into a nasty hunch, and even if my back doesn't hunch, my shoulders try to creep forward and up reflexively anytime I need to do something with my arms. If only I could tear down and rebuild, move out of this body into a bowl of stem cells and start anew.


08-14-09 - Travelling

I'm on my way to New York. I was thinking about not taking my lappy, but at the last minute I caved in. If I was more confident that this would be a pleasant trip I would have left it, because I do take great delight in just getting away from the computer and the internet hive from time to time, but I'm worried this trip is going to suck balls and I'm going to have to hide in my room, and then I will desperately crave my lappy.

Typing on my actual laptop keyboard is hurting my wrists already, and I can feel it wreaking havok on my shoulders and neck. If you regularly use a laptop, be aware that you are intentionally destroying your body.

ADDENDUM : for some reason my email isn't working, so if you're sending me mail, I can't respond. I'm sure I could work it out but I'm on vacation so I'm not dealing with god damn internet problems.

I'm sitting on the plane next to an old couple. The woman was reading "People" ; she was skipping the articles, because lord knows the articles in People are far too serious to bother with; she seemed to mainly be interested in the pictures of celebrity couples, who was dating who. As if that wasn't bad enough, the husband would occasionally lean over and say "now that's a fine looking woman", invariably in regards to some 20 year old starlet who has absolutely no redeeming physical characteristic other than that she's professionally made up and 20 years old, at which point the wife would scowl silenty and flip the page.

I would travel a whole lot more if flying and airports were more pleasant. Like if I could take a plane in the Pan Am era, I would just travel whenever I have free time. As it is, travel makes me so miserable that I feel like I need at least a week for it to be worth the misery of a travel day on each end. And of course, flying is only very miserable if everything goes completely according to plan; there's a high probability of cancelled flights and lost luggage, which turn the very miserable into nearly-suicide-or-homicide-inducing. If I could teleport, I would go to all kinds of crazy places, because I actually adore being in foreign countries and off the beaten path places where you have to mime what you want because you have no common language and all that.

There's an article in the September Atlantic about health care. It's quite good, it summarises my own viewpoint quite thoroughly. I think the problems with health care are very obvious (though obviously not obvious enough, because almost everyone gets them wrong - it has nothing to do with universal health care or single payer or electronic records). Perhaps the most important problem is the whole idea of using insurance to pay for things that aren't just catastrophic accidents with huge costs. Insurance in general is a horrible thing which is only to be used as a necessary evil. Sadly consumers are unbelievably fucking retarded, and they would gladly severely overpay for a subscription in order to get "free stuff" rather than just pay for each item/service individually out of pocket. While I think the Atlantic article is very good at getting to the crux of what the real problems are, it is (like me) light on solutions. His HSA suggestion is an okay start, but the more you think about the details, the more problems arise. How exactly do you encourage people to pay for preventive care, how do you subsidize people who can't pay enough into their HSA themselves? How do you motivate people to control their costs once they are already paying beyond the out of pocket maximum? It's also all completely irrelevant mental masturbation, because we have zero chance of actually doing anything serious to reform health care.

It's quite ridiculous the way the Republicans are reacting to health care reform. For one thing, the proposed bill does almost nothing. For another, their stance now has basically become that of an ultra-liberal Johnson democrat. They are demanding infinite care health care for all. God forbid you ever control costs on the eldery! I mean, of course it's ridiculous that all of their attacks are just completely fictitious made up nonsense, but even if you ignore that, the positition that they're taking on the made up bill they're attacking is quite strange. I really think the Republican party basically has no political identity any more except "people who are not in NY or CA and are angry/jealous that NY/CA dominate the US".

I'm in "The Hamptons" now and it's really one of the creepiest places I've ever been (similar to Carmel or Vegas). You've got all these rich New Yorkers who dress up in the uniform of white with ridiculous name brand sun glasses and strappy shoes and such and try to pretend like they're the "it" people. Then they're surrounded by the locals and service people that are the total Long Island cheeseball guido stereotype - muscley guys with berets and pouty lips and dark tans. Everything is so incredibly self conscious, and everyone's idea of what's good is entirely based on what other people are saying is good; it's the kind of place where The Emperor's New Clothes could literally happen. On the plus side, the beaches are actually really nice.

I met a girl in Seattle just before leaving and I'm quite smitten; I can't get her out of my head. I wish we were both unemployed so we could just ride around the city all day, go hiking during the week when it's not crowded, take long road trips, travel, and just do whatever feels right at each moment. When I was unemployed in San Francisco I really wanted to meet a girl who was unemployed so we could just run around together and be free. I did meet a few, but most unemployed people are either huge losers and flakes, or they're all stressed and obsessed with finding a job, which is not fun to be around. It's hard to find someone who was in the situation I was in, being unemployed but having a bit of money and just enjoying it and not being a total hippie/hobo wanderer.

I've developed this really bad habit of just checking my email reflexively any time I'm sitting at a computer and have a lull. So as I'm writing this, each time I take a pause, I hit ctrl-alt-M which fires up my Eudora, and I'm not on the net so it just shows error boxes. I close it and come back to this and then a few seconds later, boom ctrl-alt-M just fires again. For one thing yikes my muscle memory for key combos is strong. But more importantly that's just a really bad kind of habit to have. I might have to pull a Casey and cut myself off from email and web browsing for a while. It's become a crutch that I use to feed the ADD and save myself from painfully intense focus.

My brother thinks you should spend money to have fun any time you can, that memorable experiences are worth almost infinite amounts of money, so no price is too high. So, you know, thinks like a $250 helicopter tour of Hawaii or a $150 concert ticket to see Radiohead or whatever are all good deals. I sort of agree in theory, but in practice I find that those expensive things often aren't actually that much fun. For example, I find that most $5 concerts in small sweaty hipster clubs are better than big stadium shows for major bands. A lot of fancy hotels are just weirdly stuffy and unpleasant to be in, and the beds aren't even that great. Expensive tours are often really annoying with lots of waiting around. I have been trying lately to just be more liberal with money and try to buy happiness whenever I can, but I find it really hard to find. There are a few cases where I think it's worth it - I'm never cheap with food any more (though a $2.50 Vietnamese sandwich is usually better than a $50 nouveau bullshit CIA sear-and-sauce faux-fancy meal), and I think the next time I fly I'll go ahead and go first class, or at least go Virgin America if possible. This fucking plebian cattle car flight bullshit is not worth the savings.

I do like my brother's philosophy of trying to make trips more memorable, more interesting, more exciting. Don't just go visit the Grand Canyon and look at it like every other bum - take the mule ride down to the river, or raft it, do something. Do the shit everyone else wishes they were doing; why not?

The fucking tards on the airplane are all annoyed when they have to wait, they start huffing and stamping their feet like agitated cows, but then when it's their own turn to go through security or get their bags off the plane, they don't have their shit ready to go, and they take their sweet time ever so slowly going through their stuff. It's fucking hypocritical and inconsiderate and retarded. Par.

BTW this is yet another case where I'm not even talking about expecting people to actually be good. Expectations are so far into the gutter I just want them to be halfway reasonable and they still fail. Really you would like people in the airport to be quick and efficient and considerate, but without getting all uptight and impatient, they should still be relaxed and friendly. Lol. It sounds silly to even state what good people should be like because it never ever happens. So, now we lower expectations. If people would just pick one bad way to be and be self-consistent, I could tolerate that, like if they were all antsy and uptight and in a rush, but they actually went fast and had their shit together, that's fine, or if they're slow but they're actually relaxed and friendly and don't give you passive aggressive looks when you have to take time for something perfectly reasonable, that would be fine too. But no, they have to fail in every possible way and be both impatient dicks and also incompetently slow. Who the fuck doesn't know that you need to have your ID in your hand at the fucking security, and take off your damn shoes and fucking get your shit together. The fucking TSA should just taser people who are too retarded to go through security quickly.


08-13-09 - Bike progress

Step 1 : get bike in the mail and take it apart :

new bike

Step 2 : realize you have to take it to a shop to get the headset changed; get back bike, realize you don't have the tools to pull the bottom bracket, so take it to another shop. Clean and degrease. Sand off rust. Spray with frame saver (rust proofer). Clean again to remove excess frame saver. Touch up paint chips. Wax. All clean and naked :


Step 3 : wait for more parts to come in the mail. Realize some of them are wrong and have to send them back. Realize you don't have the tools to put on the new style bottom bracket (*), so buy those. Finally once everything is in order, you can put the parts together (this step is actually really easy) :


It looks like a finished bike now, but it has no cables on it yet, which is the hardest part (that's when you do all the adjusting). I also realized that I started wrapping the handlebar without the cable under it, so I have to redo that :( I was kind of thinking of running the brake cables in the old fashioned external big loop style, but after seeing the bike put together I don't think that's a good idea, and it doesn't work with the pursuit levers anyway.

(*) the new Hollowtech II bottom bracket is really strange. It requires yet another whole new set of custom tools (sigh). 99% of the difficulty with working on bikes is every generation is different and requires different tools. The new bottom bracket is very strange, it's not an axle supported by ball bearings, instead it's just a cylinder stuck into a larger cylinder. I guess the larger cylinder actually has a ring of bearings in it so it winds up being the same thing.

Also, you can't really see it in the shitty pictures I took, but the bike has a Shimano Ultegra Stem with hidden binder bolt from Peter White Cycles . This is just about the sexiest piece of bike hardware I've ever seen in my life.


08-11-09 - Blogs

Hideous Belltown is pretty excellent; definitely in the snarky cbloom / Surly Gourmand vein.

I've been reading through Maciej Ceglowski's Idle Words which is just full of gold. He's got a great post on Paul Graham which leads me to another review :

I fucking despise Paul Graham. He's the Malcolm Gladwell of bloggers. Every time somebody finds out I'm a programmer and I write a blog, they ask if I read Paul Graham like they're letting me in on some secret gold. For some reason this sort of vague trite cutesy anecdote writing is very popular with the semi-intelligent set. These guys tell some little story or make some stretched metaphor, and wind up making a point which is either just wrong, or completely trite and uninteresting. Paul Graham commits the added sin of being one of those fucking dot-com luckboxes who wrote some fucking lisp scripts at the right time and now thinks he has all kinds of business insight because he was successful. There's nothing worse than the condescending "words of wisdom" from some jackass who luckboxed their way into riches, it's like when some awful poker player happens to beat you in a tournament and then wants to talk about their clever strategy of playing super loose and passive in order to see more showdowns.

On a semi-related note, I enjoy reading the page 2 interview in the NYT sunday business section because it is just such amazing comedy gold. Every week they publish an interview with some CEO where they ask them about what management lessons they've learned and their secrets of success and whatnot. Every single seek without fail it's a stream of platitudes of the most ridiculous order. You learn business gems like you should hire good people and make them happy, communicate personally and give them clear direction and strong leadership. Wow! Now I can be a CEO too!

And this just in - sweet jesus, is The Surly Gourmand actually ME in disguise? Maybe so.

Some links :

Sebastien Tellier is ridiculously awesome.

Old Road Bike FAQ has some gooders.

Why Should Engineers and Scientists Be Worried About Color? ; old article from IBM, very good.

Some random dude's photos


08-10-09 - Information Sharing

I'm really quite upset by all the new ways of "sharing information" that are really just information obfuscation.

The thing that makes me so upset about Twitter is that I know interesting people who are posting interesting things on twitter - but it's just a shitty unsearchable, unclarified version of what they should be writing. If you have a thought that's worth sharing, it's worth taking a second to flesh it out and write it in at least semi-proper sentences.

Everything you spew into the interent is getting recorded forever and adding to our pile of information overload. Take a second, make it worth everyone's time to read.

Part of the problem is everyone jumps on new tech trends even when there's no need to. Text is a wonderful thing. It's searchable, random access, printable, I can snip out the bits I want to save or re-read.

I don't even like audio/video for information presentation. I've been meaning to watch Casey's video on GFK for like two years now, but I have to actually sit and watch it for AN HOUR. One of the amazing wonderful things about this great technology called "text" is that you can skim past the parts that are boring and that you already know, and then when you get to something tricky you can stick on it for a while or read it over and over, etc. Text is user-pace-controlled which is wonderful. Text is curteous to the client. Text compliments the intelligent of the client, it lets them make their own decision about they consume the information.

Slides of course are fucking garbage. It's hardly even worth downloading them; hell even going to talks at conferences is of very limited value. It's almost always better to just read a paper if there is one. In fact, conferences would be a hell of a lot better if they published the papers first and everyone read them *before* the conference, and then you could have a Q & A with the author about topics that are beyond what's in the paper, instead of just having them stand there are tell you about key points in the paper.

Today, it's Mike Acton's sketches on concurrency that are making me mad. It looks like there's some interesting stuff in there, but WTF Mike, this is like a Andy-Kaufman-esque performance piece indicting the ridiculousness of modern internet information sharing techniques.

I think in many ways the internet would be a better place if it was still plain text. Yes I am a luddite.


08-07-09 - Frizzle Bizzle

When you buy a giant SUV, you relinquish your right to weave around in traffic and try to cut ahead of people and change lanes abruptly.

VS2005 has this fancy import/export settings thing. Hey, cool, that's nice, I can use it to keep the settings of my various machines in sync. Except that it doesn't work. It doesn't import/export settings for addins. Hey, that would've been pretty easy to support but I'm not surprised, I'll let that slide. It also doesn't import/export the "VC Directories". Hmmm now I'm left wondering what else it doesn't import/export.

I despise that if I even accidentally touch my mouse to a disconnected network share drive, the computer stalls for like a minute.

One of my compact flourescent bulbs burned out. WTF am I supposed to do with this thing? I'm guessing 90% of people just throw it in the trash.

Some damn hobo stole our glass recycling bin. They've been coming for quite a while and taking glass out of it, I'm fine with that, though I wish they'd do it during the day instead of in the middle of the night, because it's quite noisy. But taking the whole damn bin is not cool. Curse you, hobo.

I have a lot of problems with text messages; people claim to have never gotten texts that are definitely filed in my "sent" folder. Texts to and from me appear to have random super-long delays sometimes, like occasionally even hours. For the communication medium that is our new standard, it seems to really fucking suck. Of course it may be partly because of my ten year old phone, but I've observed other people have these same problems.

The grey skies all this week have been a horrible foreshadowing of the winter to come when it will be nothing but grey and sadness all the time.

In college I used to do this thing called the "neverending juice". I would make a pitcher of frozen juice, then when it gone down to 1/4 - 1/8 remaining, I'd put in a new frozen juice thing of a different flavor, then when that got down to 1/4-1/8 I'd add another. Each generation, the flavor would get more complex. I suppose in theory it was mildly food-poisonous, but I never got past 5 generations.

There's this fantasy (often exploited in movies) that you can get over relationship problems by just getting in a big fight and yelling the things you really feel at each other. In reality, that would be a huge disaster, because in my experience at the core of all relationship difficulties are some fundamental core problems that can't be solved, and you just try to pretend they're not there and not talk about it. The actual yelling of truths would be things like "I just don't really enjoy being around you!" or "I think you're only with me because you're broke and I have money!" or "You're getting old and ugly and I'm not attracted to you any more!" or "You're an insecure coward who covers it up by trying to act tough!" or "your complete lack of life outside of me and work makes you boring and needy" or "you make yourself feel smarter by making others feel dumb" or "you're not committing to our relationship because you think you're too good for me", etc. When somebody says something to you that you know about yourself and hate, it doesn't help anything, it makes you feel awful, and you can't actual fix it, because in reality knowing is absolutely no part of the battle.

Being rich means not having to wear underwear with holes and stains. Being rich means always using heavy duty aluminum foil. Being rich means using shear bandaids instead of plastic. Being rich means using brand name kleenex and toilet paper. Oh yeah baby, living large.

I crashed my bike a few days ago, ironically while riding home from physical therapy for my bike crash injuries. When you live in a hipster neighborhood, you have to just commit random ironic acts from time to time. I actually crashed because I was riding along on the side of the road and had my eyes on the cars and ran right into a giant pile of sand. Suddenly my bike was stopped, and I kept going, and then I was on the pavement. I bruised my hip pretty badly, but nothing permanent. It made me realize that I've been riding too considerately; I'm too nice to cars, I endanger my own life by riding way over on the right edge of the road to stay out of their way. The edges of the road are a very dangerous place for a bicycle, because that's where all the detritus of the road is scattered. In Seattle it's particularly bad because we have no fucking goddamn street sweeping, so you get things like giant piles of sand on the side of the road.


08-05-09 - Relacy License Notes

The lock-free code I posted with Relacy has a clarification to the license agreement added. If you have downloaded this please read and make sure you are in compliance. I've copied the added text here :

ADDENDUM ON RELACY LICENSE : (revised 9-14-09)

Relacy is now released under the BSD license :

    1 /*  Relacy Race Detector
    2  *  Copyright (c) 2009, Dmitry S. Vyukov
    3  *  All rights reserved.
    4  *  Redistribution and use in source and binary forms, with or without modification,
    5  *  are permitted provided that the following conditions are met:
    6  *    - Redistributions of source code must retain the above copyright notice,
    7  *      this list of conditions and the following disclaimer.
    8  *    - Redistributions in binary form must reproduce the above copyright notice, this list of conditions
    9  *      and the following disclaimer in the documentation and/or other materials provided with the distribution.
   10  *    - The name of the owner may not be used to endorse or promote products derived from this software
   11  *      without specific prior written permission.
   19  */

My work with Relacy is 100% free for any use. However, the original Relacy license still applies to all work product made with Relacy, such as my code above.

The version of Relacy that I built my code with was released under a previous less clear and restrictive license. Dmitry says the new BSD license applies.


08-04-09 - Health Care

Okay, I've been resisting writing about health care, because it's just so depressing and pointless. As usual, the Dems are proposing some very modest reforms that really don't get at the root of the problem at all. And as usual the Reps are going into insane reactionary mode for no reason and attacking them in ways that are just nonsense. The Dem plan does almost nothing to change the way current health plans work, or the way Medicare works, both of which are fucked. The Reps are using this bizarre bullshit that the Dems are going to let old people die - the ironic thing is that if that were actually true I would be way more excited about reform.

We desperately need to do two things that we aren't going to do :

1. Remove doctors from the position of hallowed unquestionable saints. We need more transparency and consumer power. The consumers need to be able to make more of an informed capitalist decision about their own care, and furthermore the health insurance companies need more real tracking of doctor's performance so they can decide who should get paid. There's this false idea floating around that in the ideal system, doctors have unlimited freedom to provide care and the health insurance company gets out of the way. That's retarded. The health insurance company should be your agent to ensure that the insurance pool you're paying into is used well - it should only be spent on people who have real serious health problems, and it should only be used by doctors in ways that are really necessary and cost effective.

I often think about health insurance by comparing it to car insurance. What if your car was wrecked and you took it to a shop and the mechanic just said "trust me; I'm not going to tell you how much I'll charge, and no you can't find out how well I've done in the past" and the insurance company couldn't check to make sure the damage was real and the repairs necessary and fairly priced. Of course that would be a disaster of extortion. The service provider needs to be kept in check by both the client and the insurance company, that's what motivates them to provide good services cheaply.

2. Ration care. Rationing is crucial to controlling costs, and also crucial just for being rational sane policy makers. Of course we all implicitly put prices on lives every day. When you choose to buy a cheaper car that's not as safe, you are putting a price on your life. When the city chooses not to spend the money for separate bike lanes, they are putting a price on life. When you have limited funds, you should allocate them to the place that provides maximum benefit. The correct policy is a kind of rate-distortion analysis slope chasing thing. You set a certain slope - a [Life Value]/[Cost] slope - and any time that slope is better than some threshold, you spend the money, if it's worse than that threshold, you don't. To do otherwise is just retarded.

"Estimates show that about 27% of Medicare's annual $327 billion budget goes to care for patients in their final year of life." - this is a little tricky because it's hard to tell when exactly it is an old person's last year of life. In that final year, 40% of their cost is spent in the last month of their life, presumably because they become in-patients and undergo various emergency life extension attempts. There are tons more statistics like this. The crucial thing is that we're obviously wasting massive amounts of money on these things.

It's important to frame the rationing question the right way; what we're really doing is "health care optimization"; the point is that with cost held constant, we are trying to save more lives. By letting one geezer die, you would have enough money to help ten black people avoid diabetes. And in fact, when you optimize money allocation for the public health, you'd see that actually we'd be better off if a lot of this money we're wasting on health care was spent on more general societal things like safer roads, better standards for bumpers on large trucks, more public parks, more food inspections, etc.

Anyway, my point is not to convince you that optimization is necessary - it's inherently obvious that we should do optimization, and anyone who says otherwise is just a hopeless tard that you can't even debate with. The sad thing is that in our political system it has zero hope of happening. Politicians will say "are you suggesting we should choose to let someone die because they are too old and too sick?" ; of course I'm saying that, it's the only reasonable position to take, and of course hospitals already do it, they just draw the line way too far out; if we seriously want to limit costs we need to draw that line in a bit, and more importantly perhaps just change the entire attitude that the point of the health care system is to spend arbitrarily large amounts of money to make arbitrarily small incremental improvements in life span.

Furthermore, because of the power of doctors and the AMA, #1 is not going to happen either. Doctors don't want patients to know their success rates or their costs, or to see their real alternative treatment options. When you go into a doctor, you should get information like : you could do this or this, for each option it will cost X, and the success rate is Y - but doctors don't want you to have that, they want you to be ignorant, because it lets them charge you too much and treat you poorly without you knowing about it. When you go in with a sprained ankle, right now they send you for an x-ray and maybe an MRI right away. Instead someone needs to say "you could get an MRI, but it costs $10,000 ; or you could just go home and ice it and see if it gets better in a few days".

08-04-09 - CINIT

Two questions I can't find answers to :

1. Is there a way to tell from a piece of code that you are being called from cinit ? eg. in C++ when a constructor causes some code to run, and that calls some function, and then I get called, is there anything I can check to see that I'm currently in cinit, not main?

(obviously a very evil thing I could do is run a stack trace and see what's at the top of the stack). I can't find anything in C that I can check, because the C stdlib is initialized before me, so to my cinit code it looks just like I'm in the app run.

The reason I want this is mainly for asserting & validation - I want to make sure that my own cinit code isn't calling certain things (such as memory allocation) so I want to put in checks like ASSERT( ! in_cinit() );

2. Is there a way to disallow cinit code in certain modules? For example, having cinit stuff in any library is very unsafe because you have to be wary that your OBJ could get dropped from the link and the cinit stuff will not be run, plus you have order of run issues, it's something I can handle fine in my own projects, but not something I want to force on clients. So I want to make sure that my actual deliverable libraries have no cinit stuff - but I do want cinit stuff in my test apps, so I don't want to just break it entirely. I'd really like a compiler error so I know I did a booboo right when I write it.


08-03-09 - How to Reply to Emails

Yet another in the ongoing cbloom.com feature : Teaching You Fucking Tards How to do the Most Basic Life Tasks Correctly.

(I'm not even going to talk about the classic amusing blunders like the "reply-all" when you are trying to reply to just one person on the mail).

When someone sends out a detailed email with multiple points in it, like




You don't just hit "reply" and then randly write a stream of goop. You also don't just reply to only point A or point A & C or whatever. The correct way to reply is :

quote :
[ A ]

Reply to A

[ B ]

Reply to B

[ C ]

Reply to C

Furthermore, if the points A, B & C were very long, you should not quote the entire thing, but rather abreviate them, either using cut and ellipsis, or by extracting just the specific sentences you need to reply to, but you should leave enough context that it's clear what you're replying to.

Finally if there are multiple people on the email, make sure it's clear who you are quoting. A lot of emailers will automatically insert something like :

you wrote :
[ A ]

which is quite useless when there are many people on the mail. You should go in and manually delete the word "you" and change it to the name of the writer :

Douchey McDickWad wrote :
[ A ]

(I'm imagining the NBC "the more you know" thing going by, but instead it says "I shouldn't have to tell you this" or "you fucking tard").

I'm really sick of sending someone an email like : "can you tell me about X? also what's this thing Y? and furthermore Z". And I get a reply that's just like "blah blah Y blah blah Y blah". Uh, hello? What about X and Z ? Fucking compose your email.

In other "people fucking suck" news : my bike has been sitting in the shop done for a few days and they never called me. I finally called in and the person gave me a bunch of attitude, I was like "is my bike done?" and they were like "well, did we call you?", and then lo and behold it was done and they were like "oh".

In "people are rad" news, I went to 2020 Cycles (I was avoiding it because it seems ever so precious and hipster, and because Sharp said they did bad to his bike (if you've eaten recently, don't follow that link, because it's the most nauseating hipster bullshit you will ever see; oh yeah, we're a bike shop, but we have indie music shows and we cultivate community and have local artists and fucking vegan coop hand-knit bicycle seats and we all wear american apparel and grease your ball bearings with the grime from our bodies! yeah!) ); anyway, they pulled my bottom bracket while I waited, and charged me only $5 for it, and they were super nice and helpful and friendly and knowledgeable. Fucking Recycled Cycles charges $20 for every little service thing, no matter how trivial. (a fucking bottom bracket lockring spanner is yet another obscure tool I don't have; hopefully this is the last of those problems. Every time I try to do anything crafty, be it woodworking or working on my car or bike, I always run into instructions like "now use your rotary mitering lathe bit with the quadrangle star attachment on your half wilsonized wall-mount jig saw" and I'm like WTF I don't have that shit this is ridiculous).

Also : the new Surly Gourmand is a riot.

I�m sure some people really like Perche� No, but those people are probably retarded.


08-02-09 - Private Beaches

Seattle's got a number of private beaches which are just begging me to sneak into them. The whole idea of the private beach seems very elitist to me after living in CA where there's a wonderful law making all beaches public property. It makes me picture the European Riviera where you have to be a member of a beach club and buy a chair or something to get beach access, and you must be able to point your nose upward to get in.

One is Windermere Park on Lake Wash. It's got a pretty serious gate at Ambleside which you can see from street view . Apparently they lock the gate at 7 PM each night and check membership during the day. That gate definitely looks hoppable, but another entry option would be to kayak up from UW. Windermere Park is labelled on Google Maps which is a bit misleading as it's not a public park.

Perhaps even more appealing is the Blue Ridge Private Beach . I guess Blue Ridge used to be a private community before it was annexed by Seattle, and it still has some of that left over; there are still homeowner rules and membership fees. The park is not labelled on maps, but you can clearly see the path to the beach in satellite view. The fencing around the park looks like pretty serious barbed wire, so the best entry option seems to be walking the train tracks up from Golden Gardens or down from Carkeek.

BTW, I've never understood how people die on train tracks or why there are so many signs about how "dangerous" it is. All around Carkeek there are these signs to stay off the tracks and that the trains are "fast and quiet". Uhh... I'm pretty sure if one of our trains surprises you, you must be absolutely drunk out of your mind, like almost unconscious. I mean, I understand with like a bullet train, those are in fact fast and quiet (though they also run on very straight tracks, so you can see them coming for miles), but our trains go maybe 60 mph and rattle and screech like motherfuckers. You could be a deaf giant sloth and still have no trouble avoiding a train. The signs should really say "warning : don't get black-out drunk on train tracks". Or the sign should just have a handgun on a chain and say "please kill yourself here so you don't derail the train".

08-02-09 - Books

Some recent book reviews :

"The Thought Gang" - Tibor Fischer. Absolute drivel. Not one redeeming thing about it. Tries so hard to be clever but there's not one interesting thought in the entire thing. The Z's and made up words and obscure vocabulary are ever so precious and pretentious and tedious. The side characters (mainly Hubert) are almost lively and wacky enough to get it back onto the rails as a Clouseau-esque madcap crime romp, but the boring Eddie and his awkward forced attempts at philosophizing jolt you back into the shitty worthlessness that is this book.

"My Life in France" - Julia Child. This was pretty mediocre. It was written "with" (aka "by") a real author, but apparently he's also a terrible writer, because the prose is very stiff and unpleasant. There are obviously parts where it's trying to get you excited and convey the wonderful food epiphany that Julia had in France, but it doesn't come across in the awkard writing. The thing I really appreciated was the feel I got for Julia's energy and character. She's extremely awkward, and kind of a bitch, but she's full of excitement and very welcoming to the people she loves. The thing I found really inspiring was the way she just casts aside people who would hold her back. They move to France and the other Americans working with Paul are boring drips, so she has nothing to do with them; one of her co-authors isn't pulling her weight, so she gets cut. Over and over there's a sort of unapologetic selfishness that I find very refreshing and admirable; it's not mean spirited or sour at all, she has great enthusiasm for the things she loves, and if you're not making things better, you're out, tant pis. If you want a memoir about the golden age of the foodie revolution, read Jacques Pepin's "The Apprentice" instead.

"Travels with my Aunt" - Graham Greene. Meh; this didn't really do anything for me. It's sort of obvious exactly what's going to happen from the very beginning; obviously the boring stick in the mud guy is going to get taken around by his aunt and discover his love for excitement and transform, blah blah. It's got a bit of a "Harold and Maude" vibe to it (which was also just awful BTW) in that "Maude" is just this absurd character who seems to have no concept of laws or responsibility and seems to magically skate through life unharmed. The book also is just terribly constructed, random bits will be incredibly drawn out, and then huge things will happen suddenly in one paragraph.

Some douche recommended Decca Aitkenhead's "The Promised Land" to me; it's just awful. First of all she's the worst kind of clubber (or just generally the worst kind of person) ; she wants to spend all her time talking about how great *her* group is, the fact that it was always better in the "old days", that it's not good now that it's sold out and gone mainstream, she's got this absurd hypocritical snobbery; it's actually quite hilarious when she describes her group's type of ridiculous rave dancing as if it's so cool, and then in her travel writing she mockingly pokes fun at other group's style of foolish rave dancing. You fucking twat, the whole wonderful thing about rave dancing is that it is always ridiculous, and everybody knows it's fucking ridiculous but they don't care because they're high and the good people relax their need to look cool and be self conscious.

There's a blurb on the cover of "The Promised Land" comparing it to Bill Bryson. They mean that to be a positive thing, but in fact it's a warning : they're both fucking annoying cunts. It reminds me a lot of "A Walk in the Woods" actually - in both books the author does the experience all wrong, doesn't prepare, doesn't research, and then just whines and complains and writes snarky condescending annoying uneducated drivel that's supposed to be funny but is just sour and sad for them. They both completely fail in what I want from a travel book, which is to be inspired and excited and to read about people who really dive into the experience and do it more immersively than I could myself. There's a whole category of modern travel writing where the author acts all superior to what they're observing and sort of bored and complain about the annoyance of travel. God, if I wanted that I would just listen to myself! I don't understand why you retards keep buying these books, and I really wish you would stop recommending them to me. Both Decca and Bill manage to take something that I really love and make me feel sour and unhappy about it and make me less enthusiastic about leaving my house (partly because I might encounter a fucking cunt like Decca or Bill).

I don't find condescending superior snarky writing to be at all funny any more. Maybe that's because I've been doing it myself for so long and I fucking despise myself, so what I want in a book is the opposite, I want an author who's energetic and accepting and positive and open minded and jumps right in to other people's customs and tries to see what's good about them.


08-01-09 - Eggs

Two techniques for cooking eggs :

Oeufs au Miroir : this is just the best way to make a fried egg with a soft yolk. It's far easier to control and hit the perfect doneness level than with the traditional technique, and the white is more set. (with a normal fried egg you have the dilemma that you want the yolk just barely cooked, but undercooked white is disgusting, so you have to flip the egg just briefly and try not to break the yolk and be careful not to overcook it).

The technique is very simple : heat a nonstick pan to medium high as you would for a fried egg. Put butter in pan and let it get very hot but not browning. Gently crack in eggs. Immediately put a lid on the pan and turn it down to medium - medium low. The carryover heat in the pan should brown the bottom of the eggs well, you should hear it crackling. Do not take off the lid if at all possible - you need the steam in the enclosure to stay trapped inside. You want to judge doneness with your ears. When the crackling slows and the eggs become quiet, they're probably done. The top of the egg should be glassy and smooth (hence the "miroir") the yolk should be just starting to gel like a creme anglaise. If you like you can flip the egg over when serving so it looks like a fried egg (one side is fried, one side is steamed).

The traditional French technique for Oeufs au Miroir calls for adding a few drops of water to the pan when you crack them in, to aid in the steaming. I find that our shitty over-large eggs are so full of water that this isn't necessary and don't usually bother.

Scrambled eggs : most Americans make disgusting overcooked rubbery scrambled eggs; the traditional French technique for scrambled eggs calls for cooking them very low and slow with added dairy, which makes them almost a soup, which I also find disgusting. I think the sweet spot is somewhere in the middle, I want them cooked through, no raw or runny bits, but just barely set.

The hard thing about cooking eggs is that they cook very fast, so they quickly go from "just right" to "overcooked". This is why so many professionals are terrified of cooking eggs. Part of the difficulty is that if you plate them hot, they will carryover so even if they were perfect in the pan, they are overcooked when you eat them.

I actually think both of these things can be addressed pretty easily with the application of reason and logic. The way you solve the difficulty of eggs flying so fast past the target doneness is just to cook them slower. Similarly the way you solve the difficulty of carryover is just to plate them at closer to room temperature. Hence we have a very slight modification to traditional scrambled egg technique that I think makes it much easier to do well :

Heat a pan to medium high and butter, just like for a fried egg. Crack eggs into pan, they will be crackling and cooking very fast at this point. Immediately turn the pan *OFF*. We are going to scramble them entirely with the residual heat in the pan and let it cool down. Stir the eggs a bit gently, the pan should still be very hot at this point and cooking fast, but also cooling fast. You can control the amount of cooking a bit by the amount of stirring - more stirring = less cooking. The eggs will be done in about a minute; as they get close to done the pan should be coming down to lukewarm, so you don't have so much risk of flying past doneness. Plate and again stir vigorously so they don't trap too much heat as they sit on the plate.

Breakfast scrambled eggs I like just plain. For dinner scrambled eggs, add a tiny dash of cream and a tablespoon of grated parm part way through cooking. Parmesan is an operator which converts eggs into dinner. Top with chives or parsley.

old rants