Day 1: Always fun

Day 1 of Induction to jump-start a lower carbohydrate eating plan is always kind of fun. Note I say “lower”, instead of “low”, because I’m a believer that one’s nutrition should be tailored to activity level. At present, my activity is slow jogging, swimming, cycling, with moderate weightlifting. My injured shoulder precludes a lot of the intensity I’d like to bring to each sport, so I’m really not exhausting my glycogen stores.

Anyway, yeah, it’s a special sort of “fun”.

Day 1 of Induction to jump-start a lower carbohydrate eating plan is always kind of fun. Note I say “lower”, instead of “low”, because I’m a believer that one’s nutrition should be tailored to activity level. At present, my activity is slow jogging, swimming, cycling, with moderate weightlifting. My injured shoulder precludes a lot of the intensity I’d like to bring to each sport, so I’m really not exhausting my glycogen stores.

Anyway, yeah, it’s a special sort of “fun”.

A lot of people describe the first three days of Induction like having the flu. It’s an appropriate comparison! I always tend to get loose stools, be irritable, have headaches, feel as if I’m running a low-grade fever, and feel very low on energy those first three days. This time around, I decided to try to accelerate the process through exercise and a little targeted caffeine usage! Seems to be working; I’m feeling a lot better on Day Two.

Log, October 22 2012.

  • Weight: 237.8
  • Fitness: 45 minutes jogging between an eleven minute and a fifteen-minute mile.
  • Macros: 2030 calories. 153g fat, 25.5g carbohydrate, 6.5g fiber, 153g protein.
  • Micros: Took my supplementation. With last week’s news that a daily multivitamin reduces the risk of cancer in men, I’m sticking with that plan. Your supplements are your business, but mine include a good multivitamin, B complex, magnesium, coq10, and some fish oil tablets.
  • Overall: Felt like crap. Typical first-week blues on Induction.

Analysis

Livestrong is showing about 400 more calories than the macronutrients would suggest. That is usually a sure sign that someone messed up in the input for a food. Looking back at yesterday’s food log, it sure looks like the dressing, chicken legs, and hamburger counts may not line up correctly. I have used The Daily Plate for many years, but these kinds of discrepancies often make me wonder if I should try a new utility.

Feeling like crap is par for the course the first few days I’m on any new eating regimen, but low-carb is particularlly brutal. I mitigated it with two cups of coffee and a Diet Coke, but was definitely ready for bed by 9PM.

Going for a run on Day 1, and a swim the morning of Day 2, seem to really help with getting past the carb cravings earlier. I usually have the cravings through Day 3 at least, but exercise seems to have put those to bed. I chalk it up to burning through some of my stores of glycogen quicker so I’m not suffering insulin fluctuations.

Sneak preview of Day 2: Low-carb’s famous “water weight” loss is definitely swinging for me already. 237.8 on Day 1, 232. on Day 2. The first 3-7 pounds is mostly “water weight” for anybody on a low-carb eating regimen, and should be ignored (glycogen is an energy storage food that’s basically a mixture of glucose and water). That said, a shrunken liver and reduced glycogen storage in your cells does make many people feel “thinner” even if the body fat remains unchanged. A loss of five pounds in the first twenty-four hours is unusual; I chalk it up to my cardio. Expecting to feel the “bonk” in my training efforts here within the next few days, but no loss of strength/motivation/stamina yet.

Back in the saddle again…

Back in 2009, I reached an all-time low weight and body fat unseen since I was 19 years old: 200 pounds, with between 15%-20% body fat. From late 2009 to October 2011, I totally slacked off on my eating plan & exercise regimen. This led to regaining basically all of the 70 pounds I had lost. I was appalled at the family photos of our trip to Disneyland in October of 2011, and although I couldn’t get over my fear of what the number on the scale would be, I began quietly scaling back my eating, did some bicycling to & from work, and began going back to the gym on occasion.

In addition, this past year I had a wonderful season of bicycling that unfortunately ended with a bicycle accident & injury. I went from almost zero endurance experience to 12-15 hours/week of bicycling, rode my first Century ride on August 25 (the FrontRunner Century), and lost quite a bit of weight. I dropped from a high weight of probably around 270-ish October 2012 (those Disneyland pictures looked AWFULLY fat!), down to 250-ish by January, to 230-ish as I peaked for my Century. I broke my clavicle during a group ride on September 2, 2013, and today finally stepped on the scale to see the damage: back to almost 238 pounds. It’s time to get blogging and have some accountability as I lose it again!

Back in 2009, I reached an all-time low weight and body fat unseen since I was 19 years old: 200 pounds, with between 15%-20% body fat. From late 2009 to October 2011, I totally slacked off on my eating plan & exercise regimen. This led to regaining basically all of the 70 pounds I had lost. I was appalled at the family photos of our trip to Disneyland in October of 2011, and although I couldn’t get over my fear of what the number on the scale would be, I began quietly scaling back my eating, did some bicycling to & from work, and began going back to the gym on occasion.

In addition, this past year I had a wonderful season of bicycling that unfortunately ended with a bicycle accident & injury. I went from almost zero endurance experience to 12-15 hours/week of bicycling, rode my first Century ride on August 25 (the FrontRunner Century), and lost quite a bit of weight. I dropped from a high weight of probably around 270-ish October 2012 (those Disneyland pictures looked AWFULLY fat!), down to 250-ish by January, to 230-ish as I peaked for my Century. I broke my clavicle during a group ride on September 2, 2013, and today finally stepped on the scale to see the damage: back to almost 238 pounds. It’s time to get blogging and have some accountability as I lose it again!

BASELINE BODY COMPOSITION

I took my measurements today, and here’s where I stand:

  • 237.8 pounds
  • 29% body fat
  • 169 pounds “lean mass” (includes water weight, skeletal mass, muscle, organs, etc.)

BASELINE FITNESS

  • I’m currently not able to cycle at my August intensity for more than about 30 minutes. I’m going to re-do my baselines with the expectation that I’m probably at least 10% off my 172-watt peak fitness back in August.
  • My lifts are very poor since my collarbone is still broken; I can’t do any upper-body lifts without the assistance of some sort of machine. I can still back-squat reasonably well, however: 90 pounds for 20 reps.
  • My swimming is abominable. Any progress at all would be great.
  • My run is better than it was when I was an absolute newbie, but not very good: I average about 1:20 per .091mi lap at the gym, and can push it to about 1:00 per lap (an 11-minute mile) but not for very long. My current 5K time is about 48 minutes, including one lap of walking for each 3 laps jogging.

IMMEDIATE GOALS

  1. Take my 29% body fat down to ~24% body fat over the next 7 weeks.
  2. Improve my Functional Threshold Power on the bike to the levels at which I was functioning in August. I was at 172 watts FTP back in August; 200+ is where I’ll need to be to have a hope of keeping up with the fast group ride on Sundays.
  3. Continue physical therapy through weight lifting with a focus on steady, incremental improvements.
  4. Improve my swim to 1600 meters without stopping.
  5. Improve my 5k run time from 45 minutes to 40 minutes.
  6. Prepare for my first triathlon next summer.

    How I’m going getting there

  1. Track everything I eat in Livestrong.com’s Daily Plate diligently. Weigh myself and check my body fat every Monday morning before breakfast to verify my progress. Reduce carbohydrates substantially at the start, while maintaining protein intake of about 150g per day and fat at sufficient levels to ensure I eat just under 2000 calories/day. This strategy has proven successful in the past, and I’m returning to that plan. I found that increasing my calorie intake on “cardio days” was counter-productive to my fat-loss goals; I’m going to aim for steady caloric intake, and cardio burn will just be extra fat loss. After my two-week low-carb induction, though, losing more than 3 pounds per week is not something I’m willing to do (the hit on lean mass is too great) and I’ll continually adjust my intake to stay around 2 pounds/week of fat loss. When I was in maintenance near 200 pounds three years ago, a daily carbohydrate intake of 60g-100g seemed sufficient, but my cardio efforts were nowhere near as frequent as they are now.
  2. Follow TrainerRoad.com’s Base 1 cycling program on the trainer or rollers at least twice a week, with light commuting to and from work.
  3. Lift twice a week, with a focus on core & full-body work with free weights. I should be able to do most of this at home with my barbell. I don’t expect to reach the 300lb+ deadlifts and 200lb+ squats I was pushing three years ago on a dedicated 6-day-split program, but I do expect to continue improving week-by-week.
  4. Swim twice a week for an hour after breakfast before work. Focus on drills, relaxation, and a smooth, long stroke. This is going to be a challenge, for sure, as I’m terrible at swimming despite Total Immersion and swim team participation. Just not relaxed enough in the water; I need to spend a lot more time in the pool to get to that point.
  5. Run at least twice a week for an hour at a time.
  6. Brick a swim/run, swim/bike, bike/run, or swim/bike/run session for 2-3 hours every Sunday.

One of my medium-term goals is to complete the J.L. Sorenson Indoor Triathlon on January 19, 2013. I think with this schedule, that’s totally achievable.

Long-term, I want to be 180 pounds by my fortieth birthday on April 27, 2013. I can’t imagine a better present to myself than to be a very healthy weight, low-body fat, and ready for the 2013 cycling and triathlon season!

Larry H. Miller Megaplex Bans Toe Shoes

Tonight, Christy and I had an interesting run-in at the local Larry H. Miller Megaplex at The District.

Tonight, Christy and I had an interesting run-in at the local Larry H. Miller Megaplex at The District.

We had purchased tickets well in advance of the show, and cheerfully handed the usher our tickets with a sunny “Good evening!” to the usher. She returned our cheerful greeting with a smile, gave us instructions to our specific theater as usual, then glanced down at my feet and said a few words that really surprised me.

“You can’t wear those here.”

“What?” I replied, completely not understanding what she said.

“Those are not shoes,” she replied calmly, “and next time you come, you will not be allowed to enter the theater if you’re wearing them.”

She was pointing, uh, pointedly at my Vibram Five Fingers KSO Trek shoes and Christy’s beautiful black Vibram Five Fingers Jayas. I agree, they look a little weird to the uninitiated. I’ve been an ardent proponent of them since April of 2011 when I put them on, wore them for two days, and found that the excruciating hip pain I’d been suffering from for weeks subsided enormously. Since then, I’ve been a big fan of the barefoot/minimalist movement, but wear my goofy “toe shoes” if I have to wear shoes at all. Needless to say, I was surprised to learn they are not shoes.

“What do you mean?” I replied. “I wear these every day. They have a protective sole, they are made out of leather, they are clearly shoes.”

“You cannot wear them here. They do not offer enough protection for your foot, and you could step on glass and cut yourselves. I’ll let you in for your show tonight, but you’d better not come back wearing them or we can’t let you in.”

Christy chimed in. “What are you talking about? I see people wearing flip-flops, sandals, and open-toed shoes all the time; their feet are far less protected than mine.”

“Who made this decision?” I contributed. “I would like a name, so that I can persuade them to change a ridiculous policy governing customer choice of footwear.”

“When your movie lets out,” she said, “come back here and I’ll give you a name. Enjoy your show.”

We continued to argue for a few minutes. However, the motherly usher courteously but firmly refused to engage in discussion further, insisting we were allowed to see our movie tonight, but that “management” had made the decision we could not see any further movies at the establishment wearing anything but — apparently — officially sanctioned footwear.

Well, unfortunately the movie (starting at 7:30 PM) was nearly three hours long and we did not remember to return to the usher to obtain the name of the manager who made this ridiculous decision. That said, however, on Monday morning I intend to begin making phone calls to track down the purveyor of this decision and have a chat with them.

And if the Larry H. Miller Megaplex at The District continues to discriminate against customers based on their choice in footwear, I will be forced to personally boycott their business. My health and pain-free lifestyle are too imporant to me to cater to narrow-minded, anti-minimalist prejudice.

Matt’s Gadgets for 2012

Here are the gadgets I currently use on a daily basis:

Here are the gadgets I currently use on a daily basis:

  1. AppleTV for broadcasting my iPhone/iPad to my home theater system. Great for getting some tunes going to motivate me, and the room-filling home theater over HDMI really rocks even though it’s a little cheap. There are equivalents for Android & other systems (RokU et al) but for simplicity that even my wife can use, I’m amazed. And it does Netflix or movie rentals; the HD rentals are a little spendy, but near in cost to a 3-day Blu-Ray rental at your local Redbox.
  2. MythTV for my DVR. Yeah, it’s nerdy. Yes, a TiVo might do the job better. But I love having control of what & when I watch and being able to archive programs at will. Means I can sit down for an hour at night and watch a program I want to watch when I want to watch it, and skip all the commercials.
  3. iPhone 4. Yes, I have iPhone 4s envy (my wife has the 4s) but it’s not a big enough upgrade for me to really want to change yet. I think I’ll wait for the 5 or whatever comes after the 4s. This was a transforming technology, and Androids keep playing catch-up. The Samsung Galaxy 2S is the first Android device I’ve seen that is innovating ahead of Apple rather than trying to play catch-up. I’m a little too invested in the Apple ecosystem now to want to switch without a compelling reason, but the Galaxy 2S is a damn fine smartphone.
  4. Motorola H17 bluetooth headset. Tiny, reliable, great noise reduction, cheap to replace if I accidentally run it through the wash. About the only thing I want for is reasonable quality stereo bluetooth at a reasonable price (<$40, sounds good on both ends). I make do with earbuds for now; I think a new Bluetooth stereo headset is on the horizon.
  5. A pair of old Macbooks. Mine is Core 2 Duo, Christy’s is a Core Duo. She can’t upgrade hers beyond OSX Snow Leopard because her processors are 32-bit; I’m running Lion (and soon Mountain Lion) and have spent far less time fixing problems on my laptop ever since I made the “switch”. The only upgrade I need is a bigger, faster hard drive to feel like my laptop is reasonably competent for anything barring virtualization; I use a desktop at work for my virtualization needs and just use it remotely via RDP.
  6. An iPad 2. This has totally transformed how I handle my on-call time. With a tethering plan (or an iPad 2 with mobile data), I don’t bother taking along a full-fledged laptop when I’m on-call anymore. I just keep my iPad locked up & hidden in a non-obvious place in my car or with me when I go places, and I can handle any reasonable on-call need remotely without needing a WiFi hotspot or laptop to take care of business.
  7. An iPad 2 keyboard case. Doesn’t really matter which one. I use one that was pretty cheap and am looking to upgrade. Basically, anything that protects the screen (the “smart cover” DOES NOT do the job except to keep dust off!) and allows me to use a keyboard if necessary gets it done. And if I want the small/light form-factor thing, I just pop it out of the case in a second or two.
  8. An Amazon Kindle Touch. Maybe I’m just getting old, but reading for too long on the iPad screen gives me eyestrain. I’m taking some courses online, and buying my textbooks in electronic form then reading on the six-ounce Kindle is a much better experience than being tied to my laptop in order to study or having to haul around a five-pound textbook. The Kindle also links to annotations from other users, highlighting important passages to study/memorize.
  9. A Timex Global Trainer watch with heart rate monitor & footpod for tracking my workouts (and soon a cadence/speed meter for my bike). This is the next great frontier in personal assistants, I think: integrating one’s smartphone with fitness and sleep tracking. The Jawbone Up Band was an attempt — if a pretty sorry, unusable, low-quality one — in this arena. The Wahoo Fitness dongle gets the job done for iPhone today, but sucks battery life and the GPS in most phones is barely adequate for running & biking use. The future will be dongle-free, I believe; low-power Bluetooth HRMs, footpods, and eventually power/cadence meters are moving us in this direction.
  10. A USB battery. I usually just toss this into my backpack with my iPad, but if I need juice on the go, I have a 10000mAh battery with a USB plug-in on it waiting to help me extend the life of whatever needs charging. I consider a USB interface a prime requirement for any charger I use so that I can use one charger to charge basically everything.
  11. In the mail: a Seagate Momentus XT 750GB hard drive. I firmly believe that hybrid storage pools — a write intent log or cache with a giant flash read cache — are the future of storage in our personal computing devices. Solid state disks are too small and expensive at present, and have a definitive capacity limitation due to electromagnetic interference. In other words, they are a medium with a definite ceiling to how big they can get, and they are too expensive to produce. Hybridizing a solid-state disk with spinning platters offers solid-state performance where it counts — frequently-used data in a read cache and either an intent log or large write cache — and additional data reliability.

Things I’m still considering:

  • Which concealed-carry firearm I want to buy. My wife and I aren’t interested in collecting guns, but after robberies on our street and the nearby Trolley Square Massacre (we eat there!), both of us feel it’s our obligation as citizens to protect ourselves and those around us. Taser and/or pepper spray are also on the list for non-lethal options, but a small firearm is important. I plan for this to become part of my wardrobe, praying I’ll never be forced to use it.
  • New Bluetooth headset. The Motorola H17 is great for calls, but I want to be able to listen to music or virtual coaching while running without wires dangling from me.
  • Some sort of audible swim-pacing device. I’m on the fence here. I’m a big believer in the Total Immersion approach, as it took me from a non-swimmer (bad swimmer, but comfortable in the water) to a decent swimmer.
  • A Bluetooth-enabled head-wearable video camera. For when I’m biking, in high-risk area, want to video blog (VLOG), or need a camera for conferencing with my work (think whiteboarding).
  • A newer MacBook to replace Christy’s aging system. Some apps already require “Lion or higher” to operate; this trend will only continue, much like Windows XP and Vista are being rapidly deprecated in the marketplace.
  • Some kind of computing device(s) to send with my daughter to college here in a year and a half.

Heh, way too much info. But occasionally people ask, so I’m answering in advance 🙂

Upgrading Mythbuntu from 10.04 to 11.10

I have been using MythTV for several years at home. My family loves the DVR; it’s easy-to-use, mostly bug-free, and has allowed us to enjoy television at our leisure rather than at the broadcaster’s schedule.

I have been using MythTV for several years at home. My family loves the DVR; it’s easy-to-use, mostly bug-free, and has allowed us to enjoy television at our leisure rather than at the broadcaster’s schedule.

In late 2011, I upgraded from a rather long-in-the-tooth but reliable Mythbuntu 10.04 LTS to Mythbuntu 11.10 Oneiric Ocelot. The transition was far from seamless. I’d been using the fglrx driver for my on-board ATI card, and found that although I could use it, I had better (and more stable) results using a software-only rendering path to my 720P 50″ Plasma TV. I also found that, by default, HDMI audio is disabled in Oneiric, resulting in no-sound, fast-moving video. The quick fix to this was:

* vi /etc/default/grub * Change this line: GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash” into this: GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash radeon.audio=1″

And all was well.

The cool part about this upgrade was that I got a lot of improvements “for free”.

  • The Mythfrontend viewer had always had difficulties reading certain transcodes of x.264 1080p content. Typically, it was just extremely slow doing so. Now that content plays perfectly without having to invoke an external player (I’d previously used mplayer for certain titles in my library to get around this).
  • DVD playback “just works” now without tweaking command-lines in the player. It’s pretty sweet, and you get all the menus and options you expect when viewing recordings.
  • DVD ripping has been removed from the GUI. It never worked consistently anyway, so I see why I was removed. However, I’ll probably put something homebrewed back in so that I can do automated injects & rips in the future.
  • Live TV still doesn’t work for me. Never has. It works fine if I use a detached front-end, but it’s never worked on my combined mythbackend/mythfrontend box using a couple of Hauppauge 1600-series tuners.
  • No patches to the PVR 1600 driver required for glitch-free recording. Yay!
  • ZFS support “just works” on the upgrade. I’d converted one of my disks to ZFS, and plan to shortly convert the rest of my media disks from XFS & EXT3 to ZFS. I really like knowing that what I’ve committed to disk is what was actually in RAM, and being made aware of any errors on the platters (or in a mirrored or RAIDZ pool, having those errors automatically corrected). Also the built-in compression is pretty slick, and I use it extensively for storing my collections of eBooks and other highly-compressible data.
  • Commercial skipping seems to be greatly improved. It used to incorrectly flag the last 30-second bites of certain shows (Castle and The Big Bang Theory come to mind) as commercials. That seems to be fixed.

The one downside of my upgrade, though, was that transcoding stopped working correctly for me. I had hobbled together a set of scripts that mostly worked well for permanently archiving content we really enjoyed. Some of it was automatic, but most of it was manual. I like to verify that commercial skips are properly placed before permanently deleting them in an archival file!

So I decided to put together a new transcoding toolchain. While the myth stuff is excellent for re-transcoding almost-lossless copies of your videos with commercials removed, it doesn’t save you much space without a really giant reduction in quality, and remains MPEG2 with all the size limitations that implies. Ultimately what I want is a great 720P x.264 copy of my videos tucked away on one of my ZFS archival drives. I want to automatically detect whether the video is formatted widescreen or 4:3, and crop away the excess if it’s 4:3. And if I’m not 100% certain it’s 4:3, just transcode widescreen and we’ll live with the black bars being baked into the video.

Quite a job! And it starts with Handbrake not being available for Ubuntu Oneiric Ocelot yet. I attempted to add the PPA like usual, and received a few errors.

$ sudo add-apt-repository ppa:stebbins/handbrake-releases $ sudo apt-get update .... Err http://ppa.launchpad.net oneiric/main Sources 404 Not Found Err http://ppa.launchpad.net oneiric/main amd64 Packages 404 Not Found Err http://ppa.launchpad.net oneiric/main i386 Packages 404 Not Found .... W: Failed to fetch http://ppa.launchpad.net/stebbins/handbrake-releases/ubuntu/dists/oneiric/main/source/Sources 404 Not Found

W: Failed to fetch http://ppa.launchpad.net/stebbins/handbrake-releases/ubuntu/dists/oneiric/main/binary-amd64/Packages 404 Not Found

W: Failed to fetch http://ppa.launchpad.net/stebbins/handbrake-releases/ubuntu/dists/oneiric/main/binary-i386/Packages 404 Not Found

E: Some index files failed to download. They have been ignored, or old ones used instead.

Dang. Looks as if I get to build it!

Will provide more details on that process at a later date. I tried building it, but kept getting this error that has me stumped: ass_shaper.h:24:29: fatal error: fribidi/fribidi.h: No such file or directory

Funny error, but a show-stopper at present! Guess I’ll stick with the old built-in Myth transcode stuff for a bit until I can figure this out.

Things I wished I’d known as a teenager

I now have two teenage children. As most parents of teens can attest, this is often a cause for introspection. Therefore, without further ado, here’s a list of things I wished I’d known when I was a teenager.

I now have two teenage children. As most parents of teens can attest, this is often a cause for introspection. Therefore, without further ado, here’s a list of things I wished I’d known when I was a teenager.

It’s not illegal to drive without shoes on. In fact, only one state in the nation — Mississippi — mandates shoes for any form of non-commercial motor-vehicle usage, and they simply specify you must be shod to ride a motorcycle.

All humans have a distinctive smell. You can’t smell yours, and typically neither can your immediate family, but everybody else can. Deodorant and daily — sometimes twice-daily — showers moderate this, but don’t eliminate it. The most typical smell is whatever you eat a lot of. I — according to some very candid co-workers — usually smell like bacon. This would be a problem if I were in the wild and likely to be eaten by predators.

Facial and body hair retains odors. That’s part of the job. That’s why most girls smell much nicer than boys: they have less hair, and often trim or shave regardless. If you can smell yourself and don’t want to, invest in a good pair of electric clippers. Yes, you can reach every spot on your back if you are creative.

Nobody else thinks about you as much as you do. Not your parents, not your siblings, not your friends, and least of all those who dislike you. So stop worrying about what they think about you! If you are on someone’s mind, you’ll usually hear about it.

People may like or dislike you for any reason or no reason at all. You can’t control anybody else’s emotions. That doesn’t mean “don’t try”, though. You can turn an enemy into a friend with diligent, regular attention and care to the relationship. The easiest way to get this going — documented by Benjamin Franklin — is to ask them for a favor. Getting them to loan you something that you return when you said you would, along with a polite thank-you note, works really well for this purpose. It can be a textbook, a hair curler, a computer memory stick, or something along those lines. It must not be of such low value they won’t miss it, nor of such high value they would refuse to loan it to you. They’ll convince themselves they actually like you because otherwise why would they loan you something? At least as long as you return it with your thanks this method works amazingly well, and you may well create a life-long friendship as a result.

People may like or dislike you for any reason or no reason at all. Before attempting to convert a foe into a friend, you may want to list out the Pro and Con reasons for having them as a friend. You may just decide you’d rather not have them as a friend.

Some friends aren’t worth keeping. If after every time you hang out with them you get in trouble, feel drained, or get caught up in their drama, it may be best to distance yourself from them.

If a member of the opposite sex creates their own special, non-offensive nickname for you that nobody else uses, that means they are romantically interested in you. This is true even as an adult. A weak protest at this appellation, along with a smile, laugh, or assignment of your own nickname for them in response, is an indicator of returned interest.

Small problems can become big ones. Don’t ignore aches and pains; document them and be aware of your own health history. A massive infection in my tonsils nearly killed me at seventeen. Learn how your body responds to everything.

If you want to be strong with bigger muscles, teenage years are ideal for this development. Every time you sit down to eat anything, just eat some protein along with it, such as meat, poultry, eggs, or fish. Lift increasingly-heavy weights 2-3 times a week, and focus on building muscles in your back, butt, and legs. Building size in those “core” muscles makes it easier to build size in the arms, chest, and elsewhere. There are many, many variations on this theme, so if you choose to follow someone’s muscle-building “program”, remember that all good muscle-building programs have these core teachings in common, and it’s important to try out a number of different options before deciding one or the other is “the true way” to do it.

Teenagers are extremely impressionable. If you find someone who will pay attention and talk with you, and makes you feel understood, it’s extremely easy for that person to manipulate you. Beware any individual with an agenda who does so.

Related to the last point, there’s a reason evangelistic (recruit-seeking) movements are so popular with young people. It’s because your brains aren’t finished developing until around age twenty-five. If they can lock you into a way of thought as a teenager or young adult, it’s very likely they will have you for life. Typical movements include any of an extraordinary number of religions, ways of eating, lifestyle choices, sexual behaviors, and more.

Critical thinking is your best friend as a teenager. Your hormones go absolutely crazy during this time. When your body is screaming that you really want to have sex with that attractive person over there, at times like this it’s possible for logic (reason) to help you act in a way consistent with your goals, rather than consistent with the impulse of your testicles or ovaries. Critical thinking really comes into play BEFORE you end up in difficult situations, by helping you avoid them in the first place.

A lot of people will tell you that the math you learn in high school is stuff you’ll never use again. Depending on what you choose as a career, this may be true. About one in five people will use those skills regularly as an adult; those people are often highly-paid. In many aspects of my career, I often feel as if I get paid for my mastery of basic high-school math.

You can’t get fat from eating fat. You get fat from eating starches & sugars (carbohydrates) and some other inflammatory and hormone-producing foods. If you find you need to lose a few pounds, ditch the refined carbohydrates (breads, sugary foods, etc.) from your diet. Your body will thank you.

You’ll go a long way toward mastering your appetite if you understand this concept: “People overeat because they are getting fat.” The choice of foods you eat push your body to make itself fat or lean by changing its hormonal environment. If you choose poorly, your body begins to store fat, depriving your muscles and organs of vital energy, and you feel hungry all the time. If you choose wisely, you remain satiated and can trust your hunger to indicate when you actually need to eat.

Drink when you’re thirsty. The whole “eight glasses of water a day” thing is a guideline, not a rule. During light activity and average or cold temperatures, your body will typically tell you when you need to drink. The two exceptions are when you are engaged in heavy exercise or it is very hot. Create a strict hydration schedule to ensure you need to urinate at least every hour when you’re dealing with extreme heat or exercise.

People will sometimes tell you not to drink caffeinated beverages when you’re thirsty because it’s a “diuretic”. “Diuretic” means “makes you need to urinate”. WATER is also a diuretic. Water is your best and safest choice, but don’t be afraid you’re going to suddenly shrivel up and die from dehydration due to a can of Diet Coke. You won’t; the very slight diuretic effect of caffeine is indistinguishable from water in average concentrations (that of a cup of coffee or less).

Don’t drink sugared sodas or eat candy. They really, truly rot your teeth, brain, and body. If for some reason you do, engage in some light exercise right after ingesting it, and brush your teeth within 60 minutes.

Baldness is going to hit 3 out of every 4 men in life, some of them in their teenage years. It’s better to plan for it and be happily surprised later in life than it is to fret about it. Most treatments have nasty side-effects, and shaved or close-cropped bald heads — aside from the requirement to wear a hat outdoors in sunshine — look great.

Most teenagers, if provided a car, will wreck it, typically when alone or with other new drivers in the car. Learn the public-transportation system in your area well, keep your bicycle in good repair yourself, and practice driving regularly your first year with an experienced driver at your side if possible.

Stuff a handful of bills into your sock and go sightseeing around your hometown with a friend a few times a year. There’s a lot more to see and do close to your house than you ever imagined.

Choose your values; don’t let your values choose you. If you believe something, question why you believe it, then ask yourself and others to analyze your questions.

Correlated point: choose your anti-values, don’t let them choose you. If you disbelieve or are opposed to something, question why you disbelieve it, then ask yourself and others to analyze your questions.

You tend to mimic your friends, and they tend to mimic you. This applies to many things, including lifestyle, diet, behavior, and appearance. Be aware of whatever values you choose.

There are a zillion different religions on the planet. In my opinion, each has a specific reason for existing, and understanding the niche that religion fills for people is very helpful to gain insight about yourself and humanity as a whole. Before deciding one religion is the “one true and only way” due to the happy accident of your birth, why not explore as many as you reasonably can for a year or two? You’ll make a much more informed decision. If you’re of the Judeo-Christian persuasion, I think it’s very helpful to remember that Jesus didn’t choose to be baptized until he was an adult of around thirty years of age.

Well, there’s more, but that’s all I have for today.

My 100-line Python program

I’ve been using Python for a few years, but mostly for extremely simple and short stuff. By and large, truly, I’ve mainly just referenced someone else’s libraries in Python to do something that I couldn’t do easily in Bash.

I’ve been using Python for a few years, but mostly for extremely simple and short stuff. By and large, truly, I’ve mainly just referenced someone else’s libraries in Python to do something that I couldn’t do easily in Bash. Today, I decided to finally knuckle down and undertake a conversion script I normally would have done in Bash using grep, awk, and sed, and instead do the whole thing in Python.

Now, I realize this isn’t very Pythonic. It’s quite procedural, no classes or functions. There are several sections where I think I could dramatically shorten it by splitting some of the more repetitive areas out into classes. But for a first real attempt at using Python as a replacement for Bash shell scripting, it was fun!

Takes input from a file with a format like this:

filername-nfs:/vol/some_volume_name/some_qtree_name 20G private on some_hostname mounted at /some/path/to/nfs/mount

Now, the goal here is to automagically spit out a series of commands that I can copy/paste and run in various windows. I need it to calculate the size of all the qtrees in a volume and add 20% (divide by 0.8) and give me an integer to use in gigabytes. So imagine you just received a file containing, say, fifty different mounts in this format for perhaps 10 different hosts and two or three different Netapp Filers. At that point, the time savings become obvious! Using just the one sample above, the output from this file looks like this:

Volume size commands: rsh filername vol size /vol/some_volume_name +25G

some_hostname /etc/fstab entries: filername-nfs:/vol/some_volume_name/some_qtree_name /some/path/to/nfs/mount nfs rw,bg,nointr,hard,timeo=600,wsize=32768,rsize=32768,nfsvers=3,tcp 0 0 some_hostname mkdir & mount commands: mkdir -p /some/path/to/nfs/mount mount /some/path/to/nfs/mount

filername /etc/exports entries: /vol/some_volume_name/some_qtree_name -rw=some_hostname-nfs:root=some_hostname-nfs

filername /etc/quotas entries: /vol/some_volume_name/some_qtree_name tree 20G

Here’s the script.

convert.py

#!/usr/bin/env python
# Short little script to awk up things and do replacements in several files.
# Basically the same thing I do from bash, but in python.
import sys

# Debug this session?
debug = False

# Set the options we’ll spit out for mounts.
# Typically, you don’t need to alter this.
# But for Sun 7000-series filers, you need to add “,noacl” after “tcp”
nfsOptions = ” nfs \
rw,bg,nointr,hard,timeo=600,wsize=32768,rsize=32768,nfsvers=3,tcp 0 0″

# Name of the file we’re working from.
myFile= open( “qtrees.txt”, “rU” )

allQtrees=[]
for myRow in myFile:
    try:
        # Filter out empty lines
        if not myRow.isspace():
            # Filter out comments
            if “#” not in myRow:
                # Remove newlines
                rsplitRow=myRow.rstrip(‘\n’)
                # Split into space or tab-delimited fields like awk.
                allQtrees.append(rsplitRow.split())
    except ValueError:
        pass

# Initialize a few variables…
mountContainer = {}
mountFiler = {}
mountVolume = {}
numRows = len(allQtrees)
for column in range(numRows):
    # 0: nfs path, 1:size, 2:private/public, 3:, 4:host, 5:, 6:, 7:mountpoint
    # print allQtrees[column]
    myColumn = ( allQtrees[column] )
    fullNfsPath = myColumn[0].split(“:”)
    nfsFiler = fullNfsPath[0]
    nfsPath = fullNfsPath[1]
    nfsVolumeAndQtree = fullNfsPath[1].split(“/”)
    #print nfsVolumeAndQtree
    nfsVolume = nfsVolumeAndQtree[2]
    nfsSize = myColumn[1]
    privateOrPublic = myColumn[2]
    nfsHost = myColumn[4]
    mountPoint = myColumn[7]
# We’re creating several Lists of Lists to be put into Dictionaries here.
# Main purpose is to make it easier for me to visualize the data, I’m sure
# there’s a more efficient way than creating all these structures.
    # Wrap this list by hostname
    try:
        listByHost = mountContainer[nfsHost]
    except:
        listByHost = []
    listByHost.append([nfsFiler, \
        nfsPath, \
        nfsSize, \
        privateOrPublic, \
        nfsHost, \
        mountPoint])
    mountContainer[nfsHost] = listByHost

    # Wrap this list by filer
    try:
        listByFiler = mountFiler[nfsFiler]
    except:
        listByFiler = []
    listByFiler.append([nfsFiler, \
        nfsPath, \
        nfsSize, \
        privateOrPublic, \
        nfsHost, \
        mountPoint])
    mountFiler[nfsFiler] = listByFiler

    # Wrap this list by volume
    try:
        listByVolume = mountVolume[nfsVolume]
    except:
        listByVolume = []
    listByVolume.append([nfsFiler, \
        nfsPath, \
        nfsSize, \
        privateOrPublic, \
        nfsHost, \
        mountPoint])
    mountVolume[nfsVolume] = listByVolume

# Unwrap mountVolume for a list of volume sizes.
for volume in sorted(mountVolume):
    volSize = 0
    print
    print “Volume size commands:”
    for size in sorted(mountVolume[volume]):
        qtreeSize = int(size[2].strip(‘G’))
        curSize = str(qtreeSize)
        #print “Qtree size of ” + size[1]  + ” is ” + curSize
        volSize = volSize + qtreeSize
        #print volSize
    volSize = int(volSize / 0.8)
    volSizeStr = str(volSize)
    print “rsh “ + size[0].strip(“-nfs”) + ” vol size /vol/” + volume + ” +” \
            + volSizeStr + “G”

# Unwrap mountContainer for a list of mounts by host.
for host in sorted(mountContainer):
    mkdirCmds = []
    mountCmds = []
    print
    print “%s /etc/fstab entries:” % (host)
    for mount in sorted(mountContainer[host]):
        print mount[0] + “:” + mount[1] + ” “ + mount[5] + nfsOptions
        mkdirCmds.append(mount[5])
        mountCmds.append(mount[5])
    print “%s mkdir & mount commands:” %(host)
    for path in mkdirCmds:
        print “mkdir -p “ + path
    for path in mountCmds:
        print “mount “ + path

# Unwrap again for /etc/exports & /etc/quotas on filer
for filer in sorted(mountFiler):
    print
    print “%s /etc/exports entries:” % (filer.strip(“-nfs”))
    for volQtree in sorted(mountFiler[filer]):
        print volQtree[1] + ” -rw=” + volQtree[4] + “-nfs:root=” + volQtree[4] + \
        “-nfs”
    print
    print “%s /etc/quotas entries:” % (filer.strip(“-nfs”))
    for volQtree in sorted(mountFiler[filer]):
        print volQtree[1] + ” tree “ + volQtree[2]

if debug:
    for name in dir():
        myvalue = eval(name)
        print name, “is”, type(name), “and is equal to “, myvalue

myFile.close()

Assessment Essay

Tonight, i wrote the following essay for my entrance assessment to Western Governors University. I hope you might find it informative and entertaining. It was fun to write!


In 1998, Terry Weissman of the fledgling Mozilla Foundation faced a daunting task: to create a public bug-tracking system capable of handling millions of bug reports. Unfortunately, the Foundation’s internal, Netscape-specific bug-tracker was insufficient for a global audience. Terry, therefore, decided to re-write this bug-tracker, called “Bugzilla”, in the Perl programming language, and released the source code to the world.

Shortly thereafter, a nascent community of enthusiasts embraced and later extended Bugzilla. With enthusiasm and gusto, the community ushered in new version after version of the bug-tracking software. However, there was one important item missing from their project: documentation on how to install and maintain Bugzilla.

That’s where I came in.

In 1998, I was a UNIX system administrator for iMall, an e-commerce startup with big dreams and a tiny pocketbook. One of my tasks as a new employee was to implement a replacement bug-tracking system. iMall had a growing stable of programmers and support engineers, and the software license for their existing bug-tracker was both too expensive and proved to perform too poorly under heavy load.

I lined up a series of vendors for the executive team, but the products were usually dismissed in short order for being too expensive. During my research, I often encountered notes in Internet newsgroups about a new open-source product called “Bugzilla”. Finally, after several disappointing weeks of vendor negotiations, I decided to install this free software product in hopes of pleasing the executive team.

Bugzilla proved extremely difficult to install. Although the product – once installed – was fairly user-friendly and included sufficient documentation for users entering and maintaining bugs, the spartan README file included with the software distribution was wholly insufficient to the task of easily installing Bugzilla on a UNIX host. As I continued my attempts to make this software work, I kept copious notes in a text “Bugzilla help file” on my workstation.

Eventually, I succeeded in installing the product, and a brief user evaluation proved Bugzilla was popular with the software engineers within the company. I presented Bugzilla to the executive team, and they were immediately enthusiastic. They told me to spend roughly half of my administrative hours per week maintaining and improving the product, the second half managing our growing system administration team.

Within weeks my “Bugzilla help file” had grown to several pages of quotations from newsgroup archives and humorous anecdotes. I realized my document might have value to others, and posted a copy to the netscape.public.mozilla.webtools newsgroup. Shortly thereafter, I found myself posting my FAQ once per month to satiate the ever-increasing demand for decent Bugzilla documentation.

Over time, this document became huge, comprising thousands of words and dozens of pages. I often pondered the monstrosity I had created. I eventually realized that, faced with such a mountainous document, most new users still preferred to ask frequently-answered questions in the newsgroup rather than dig through my disorganized FAQ. I felt that perhaps what these new administrators lacked was an index, a table of contents, and specific task-based documentation.

As a result, I undertook to write the first edition of a comprehensive response to this need: The Bugzilla Guide in DocBook SGML markup. On December 20, 2000, I released the first edition of the Guide to correspond with the 2.11 release of Bugzilla. By the 2.12 release several months later, I’d devoted hundreds of hours to revisions of the Guide based on suggestions by early reviewers, and by 2.13 it had become an integral part of the Bugzilla release cycle, updated with each new feature. The Guide became an indispensable resource for first-time Bugzilla administrators around the world.

Today, as Bugzilla heralds the recent 4.0 release in early 2011, my copyright notice is no longer contained in the masthead of the accompanying Guide. I relinquished my copyright on the document to the Mozilla Foundation several years ago. Few remember the heady days of early development between 1998 and 2000, when for lack of decent documentation Bugzilla languished in obscurity. Yet today, each time a user describes a successful install of the product in the forums and mailing lists that replaced the old Netscape newsgroups, I get a thrill knowing that I helped that administrator find his way that day.

What’s on your Pandora?

What’s on your Pandora? Here’s mine.

Let’s see… on my list:
* Breaking Benjamin.
* 80’s Dance Parties. When you just didn’t get enough of “The Wedding Singer”.
* Barry White Radio. Bow-chicka-bow-wow. But I think Barry may be lost on anyone younger than 30…
* BT Radio. Sweet techno tunes.
* Celtic Woman Radio. White folks singing about white women stuff in the Old Country.

What’s on your Pandora? Here’s mine.

Let’s see… on my list: * Breaking Benjamin. * 80’s Dance Parties. When you just didn’t get enough of “The Wedding Singer”. * Barry White Radio. Bow-chicka-bow-wow. But I think Barry may be lost on anyone younger than 30… * BT Radio. Sweet techno tunes. * Celtic Woman Radio. White folks singing about white women stuff in the Old Country. * Club / Dance. Black folks rapping about black people stuff in the city. * Daughtry Radio. When you just don’t have enough Nickelback clones in your rotation. * Dream Theater Radio. When 7/8 time just isn’t cool enough to listen to anymore. * Enya Radio. Yeah. I’m a wuss. * Hot Chocolate Radio. See Barry White Radio. * Jim Brickman Radio. Relaxing piano tunes. A bizarre amount of Mormon hymns played on a piano show up on this station for some reason. * John Mayer Radio (which has a LOT of crossover to Michael Buble radio for some reason…) * Linkin Park Radio. In The End, When They Come For Me, The Fallout from What I’ve Done is Burning In The Skies. * Lord of the Rings Radio (when I want some epic orchestral soundtracks!) * The Rippingtons Radio (Weather Channel Music. Don’t ask.) * Salsa Radio. Andale! * The Stars And Stripes Forever Radio. I use this once a year: at my club’s annual model airplane show. * Techno. Because “thumpa-thumpa” music with few or repetitive lyrics makes it easier for me to think. * Today’s Hits Radio. Top 40.

Hope that gives you some variety!

Utah Helis and More

Last night I went to the Utah Helicopter Association meeting in American Fork at the Rec Center. I often miss the meeting, but went this month because I’ve spent some time revamping the Utah Helicopter Association Web Site.

Last night I went to the Utah Helicopter Association meeting in American Fork at the Rec Center. I often miss the meeting, but went this month because I’ve spent some time revamping the Utah Helicopter Association Web Site. The new site sports easy-to-use photo galleries into which members of the club can upload photos, a public forum for anyone (though moderated so it stays on-topic), and a club calendar that — again — any member of the club can update.

I’ve done a lot of work on RC club web sites over the years, and a self-managing site seems to be the future. I try to set it up so that the officers have effective “admin” privileges over the whole site — they can create or delete any content — but that as the webmaster I’m the only one who can modify the layout, code, and modules. This division of labor REALLY helps. It allows me to focus on what I’m really good at: back-end systems integration, database management, and systems administration. The members and officers can handle keeping the content on the site up-to-date as long as I have a few computer-savvy people willing to post updates here and there.

This really takes the workload off a webmaster. If I spend all of my spare time updating content on the site, burnout sets in really quickly. If, on the other hand, I only have to pay attention to FUNCTIONALITY of the site, and other people step in to post blogs, forums, calendars, photos, etc. it’s a HUGE weight off my shoulders. The only really painful thing has been that I’ve had to learn some User Interface things… it turns out that nobody wants to design the layout of the site either, so as the webmaster that really gets to be my job.

It’s been very informational, anyway. With the aid of The Gimp, I can throw up a fairly amateur-looking web site with pro features in a few hours. Which for a Radio Control club is just about the right balance; it doesn’t need to look professional. But if I wanted to make a business out of this, I’d definitely need to improve my graphic design skills. That’s part of the package customers expect: a slick-looking site with professional usability features. And typically content forwarded from their old site, too.

As far as the diet & exercise program goes? Well, had some donuts at last night and this morning. Really need to make sure I’m totally on the wagon. This week has been much more like “start tracking your weight again and eat a tiny bit better” than truly back on my eating plan. And I need to do more lifting than just weighing the bar. On the plus side, I’m building some better habits: stepping on the scale every day, tracking every morsel that goes into my mouth, and thinking about that scale weight whenever I put something down my gullet. On the minus side, I haven’t exercised the restraint necessary to drop the weight yet, and when I look at the nutrient ratios I am realizing that my typical eating plan SUCKS compared to where I need to be to get lean again.