Wednesday, August 15, 2007

Warning: this post will be boring if you've never rowed.

I made a tactical error today.

We went out for a row this morning, did our workout, and took it back in. The practice lasted about 90 minutes, and had maybe 5 max-pressure 20s, and some steady-state rowing as well. Nothing too hard, you're thinking. And you're right. Still, my overall fitness at the moment is merely "not horrible," and my rowing fitness is "horrible," so practice is still fairly tiring (and my soft soft hands are getting turned into ground beef in short order).

The point is, I was kind of tired, but whatever. Then I notice the ergs. And if you know me, you know there's nothing I like better than doing 2ks. My standard out of shape time is around 6:36, and I can usually do that without too much trouble. There's no one around...I sneakily slide over to an erg and start a 2k piece, holding 1:37ish no problem.

Within 250 meters, a small crowd has gathered around me, exactly as I've feared. Everyone loooooves to watch other people do 2ks. So here I am, getting stared down, and starting to feel the pressure. And then, this decrepit old erg I'm using suddenly jumps from 1:37 to 1:55 with no change in effort by me.

So now I look like the world's biggest fly and die-er, all because no one changed the batteries in this thing in the past decade. So I start to try harder and harder, and by the time I'm nearing maximum effort (this is about 750 meters in), the monitor is displaying a huge 1:45. And my maximum effort, even out of shape, is normally enough to get me a hell of a lot better than a good freshman in high school's 2k split...

Of course I can't explain that the monitor is wigging out to the people around me, nor would they believe me if I could (I certainly never believe people when "the monitor makes them slow"), so I cut my losses, stopped at 1000 meters in, and looked like the world's biggest non-erg-monster.

I'm going to need to do at least 1 face-saving sub 6:20 2k in the next month or so.


gavin said...

You should get someone to teach you the Japanese phrase for "I have to stop rowing because my pussy hurts." Might come in handy.

Big Awesome Matt said...

Somewhere in sunny southern California, Carlson is sleeping in the designated spot where Elle decided he should sleep. Suddenly, without warning, he is jarred from his slumber. Carlson had a terrible vision of one of his former rowers being unable to finish their 2k. He shivers at the thought, but just shrugs it off as a horrible dream.

But was it....?

Nate said...

"Ellie Ellie," gasped Matt as he ran into her master bedroom on the other wing of the house, "I just had a terrible dream and there was erging and a bad score and losing and and and"

"Shhhh, Matt," Ellie says, gently swaying her little trooper in his swinging crib. "It was all just a bad dream...come on, breaking six isn't everything, buddy..." And with that, she took out her bank statement and read him his favorite story until he gently slumbered.

Nate said...

gavin-- I think the international language of stopping at a thousand meters in is sufficient.

matthew said...

nate, i must concur that fly-and-don't-finish is indeed an international language- martin spoke it eloquently.

Sam said...

Yeah, that was a huge mistake. If you wanted to do a 2k, you should have done it at like 4am when you could be absolutely certain nobody would come around.
Letting people see you fail violates the rules of being awesome.

d said...

Next time, cherry pick the erg (didn't you all do that?) and I bet you can find some fresh AA's at the local 7-11.

Another thought: blame it on the sub-standard Unagi that didn't actually give you strength as advertised.

The CD said...

I'd say it's boring even if you have.

Nate said...

Sorry CD, I know you've gone to a 24 Hour Fitness and challenged the septuagenarian next to you to a 10 stroke bicep curl contest on the erg, but that's not rowing...

These are the conditions if you want your rowing-related shit-talking to count: either

1. Your best 2k is under 6:10


2. Your comment is interesting.

Sam said...

My comment doesn't have to be interesting. So, here's a paragraph chosen at random from RFC791 (Internet Protocol):

The number 576 is selected to allow a reasonable sized data block to be transmitted in addition to the required header information. For example, this size allows a data block of 512 octets plus 64 header octets to fit in a datagram. The maximal internet header is 60 octets, and a typical internet header is 20 octets, allowing a margin for headers of higher level protocols.

For more information on this topic, see

d said...


What are you doing reading RFCs? You should be reading stuff like this:

"The JCXZ and JECXZ instructions test the CX and ECX registers, respectively, instead of one
or more status flags. See Section , “Jump if zero instructions. The JECXZ (jump if ECX zero)
instruction jumps to the location specified in the destination operand if the ECX register
contains the value zero. This instruction can be used in combination with a loop instruction
(LOOP, LOOPE, LOOPZ, LOOPNE, or LOOPNZ) to test the ECX register prior to beginning
a loop. As described in Section , “Loop instructions. The LOOP, LOOPE (loop while equal),
LOOPZ (loop while zero), LOOPNE (loop while not equal), and LOOPNZ (loop while not
zero) instructions are conditional jump instructions that use the value of the ECX register as
a count for the number of times to execute a loop. All the loop instructions decrement the
count in the ECX register each time they are executed and terminate a loop when zero is
reached. The LOOPE, LOOPZ, LOOPNE, and LOOPNZ instructions also accept the ZF flag
as a condition for terminating the loop before the count reaches zero.”, the loop instructions
decrement the contents of the ECX register before testing for zero. If the value in the ECX
register is zero initially, it will be decremented to FFFFFFFFH on the first loop instruction,
causing the loop to be executed 232 times. To prevent this problem, a JECXZ instruction can
be inserted at the beginning of the code block for the loop, causing a jump out the loop if the
EAX register count is initially zero. When used with repeated string scan and compare
instructions, the JECXZ instruction can determine whether the loop terminated because the
count reached zero or because the scan or compare conditions were satisfied.”

David said...

how about some rtl for a clock domain synchronization circuit?

module syncBlock(sClk, sPulseIn, sRst, sValid);
input sClk;
input sPulseIn;
input sRst;
output sValid;

reg [1:0] sync;

assign sValid = sync[1];

reg sr_out;
initial sr_out = 1'b0;

always@(sPulseIn or sync[1])
if(sPulseIn) sr_out = 1'b1;
else if(sync[1]) sr_out = 1'b0;
else sr_out = sr_out;

always@(posedge sClk or posedge sRst)
if(sRst) sync <= 2'b00;
else sync <= {(sync[0] & ~sync[1]),(sr_out)};


d said...

Hi David,

Looks good. One question, though,
you wrote:

always@(posedge sClk or posedge sRst)

What happens on the trailing edge of Reset?

David said...

Nothing happens on the negative edge of either reset or clock. The process is not sensitive to falling edges. Had I wanted the asynchronous reset to operate on the falling edge of sRst, I would have used the keyword negedge.

some examples:

d register (negative edge of clock, no reset)

always@(negedge clk)
q <= d;

d register(negative edge of clock, asynchronous reset on positive edge or reset)

always@(negedge clk or posedge rst)
if(rst) q <= 1'b0;
else q<= d;

Nate said...

I'd mock the nerdiness here, but breaking 33 minutes for 10k is too special. Sam, you have a permanent license to be a boring CS fatass in my blog forever. Free reign buddy, go to you have to collect on Matt Carlson letting you do anything yout want, I believe...

d said...

Reset as a (positive) edge; I'll have to tighten up my consciousness around that one...