Articles

Posture Power Feet Forward

Stand up. Look down at your feet. How are your toes pointed? If they are pointed forward and equally spaced, congratulations, you have good foot posture. Unfortunately, most people do not have good foot posture because they got into the habit of not exercising their full ankle range of motion, and, over time, lost that full range of motion. To make up for that range of motion, your feet either bow in or outward. It is more common for them to bow outward. If you move your feet so your toes are forward, you might notice a slight discomfort in your ankles. If you get into the habit of keeping your toes pointed forward when standing, you will be able to rebuild your ankle range of motion and this discomfort will go away and you can reap the benefits of having a powerful posture.

At first, this will feel like a chore because you have to constantly correct yourself, but you will eventually find yourself doing it totally automatically without noticing. This is the way it is with most body movements and postures, you have to focus on doing it right every time and eventually it becomes your habit. Your body can do it totally on autopilot.

Here are some places you can watch your posture:

I think correcting yourself in a few places consistently will fix your foot posture in all places. Having your toes forward will become the new normal.

Having your toes pointed forward as your default foot posture is very helpful for your overall posture. It keeps your hips nicely aligned with your pelvis, and it reduces the force caving in (pronating) or bowing out (supinating) the bottoms of your feet. Also, having a good ankle range of motion will keep your ankle muscles strong and make it easier for you to walk with good form. Lots of benefits accrue from a small change consistently applied to your body.

Overall, proper posture is very important for making sure your body has the lowest chance of injury and that you can generate the most force or strength your body is capable of. Make the change today and start feeling yourself on your way to unlocking your posture power!

published 2015-03-27

Add-on Habit Mobilization at Meetings

When you are at a meeting is one of the perfect times to work on mobilizing sticky tissue in your body. Usually at a meeting you need to talk and listen, but what you do with your hands usually does not matter (except maybe if you need to take notes). Reclaim this down time by adding on the habit of doing soft tissue mobilization while having a meeting of the minds with your coworkers.

My favorite somewhat-discrete mobilization to do at a meeting is to work on my calf muscles. I cross my legs, which puts my calf muscle nicely in reach of my hands. Then, I massage the knots and tight spots of the tissue during the meeting.

If you regularly have meetings, this can be a great way to remember to do some mobilization. Since there are parts of your body that are regularly getting tighter and stiffer, it is great to be able to regularly address these issues with an add-on habit.

Another mobilization target that you can do during a meeting is your upper Trapezius. You can jab your fingers into this muscle and do a functional release by moving your shoulder around looking for tight parts of the tissues. The upper Trapezius is another muscle that really commonly gets tight for people. This is the muscle tightness that makes a upper back massage feel so good when it releases the tightness.

Here is a quick list of body improvement techniques to try while sitting in a meeting:

published 2015-03-25

How I Cured My Chronic Back Pain

Before I got into the habit of addressing my chronic body aches, I noticed that I was starting to get pain in my lower back. This was probably from sitting in front of a computer for almost all of my waking hours. Back pain is one of pervasive job hazards of being a computer programmer or office worker. This pain seemed more serious to me than the other joint aches I had in my body and try to seek a way to correct it. I came upon a very easy exercise routine that helped me to not feel back pain for many years now.

I did plank (or planche) exercises every morning. Sounds like I a lot of work, right? In reality, it takes only about one minute a day. Pick a good time of day to add on your planks. Maybe right when you wake up, or right before you put on your work clothing. You can do it anywhere there is some open floor. I used to like to do mine on a yoga/exercise mat, but carpet works fine.

To do a simple plank, put your elbows and forearms down on the ground with your upper arm and elbow making a 90 degree angle with the forearms. Shoulders should be directly above the upper arm and in a neutral position. Flex your abdominal core muscles and squeeze your butt tightly. Your legs should be out back with your feet spaced at about shoulder width apart. Look straight down at the floor with your head and neck in a neutral position. The only points of contact with the floor are your forearms and toes. This should force you into a good position, but let me describe what a good position is anyway. A good position will have your butt slightly above your knees and your back will not be arched or caved in.

Hold this position for as long as you can at first. I eventually got up to two repetitions for one minute each. I believe for a lot of people this can be all it takes to go from feeling a slight regular pain to being pain free in your back. If you find that you need to lift heavy objects occasionally, this will probably not be enough exercise to keep your core in good shape and your spine well-protected. For this, you should look into doing more plank repetitions, progressively harder variations and other core strengthening exercises like stomach vacuuming and weight lifting. Sports like running and cycling are also good at building core strength if you work on having good form.

A little maintenance exercise can go a long way at addressing chronic aches and pains you have in your body. The same technique can apply to a variety of other pains you might be feeling.

published 2015-03-24

Add-on Habit Balancing while Dressing

This is an easy add-on habit that serves as a diagnostic tool and an improvement exercise. When you are putting your shorts, pants, or underwear, try to move your legs in a very methodical way where you are in complete control of the position at all times. If you can, do this without holding on to any object to help steady yourself. Try to maintain perfect balance while dressing and undressing yourself.

If this is difficult for you, steady yourself on an object and over-time reduce the amount of force you are placing on the object. With continued effort, you will eventually improve your balance enough to avoid needing an object. You might notice that you still are moving your body in an uncontrolled manner to steady yourself. Focus on a very smooth, slow, and controlled motion while dressing.

Once you can do this in a very smooth and controlled way, you can speed up to challenge yourself. Another modification you can do to challenge yourself is to go up on the ball of your foot that is resting on the ground. Or, if you are really extreme, balance on the heel of your foot.

Another place to apply this balance exercise is putting on your shoes, so once you feel pretty comfortable with your balance, try putting on your shoes while standing up. The goal is to be able to put on your shoes in a slow controlled motion with only one foot on the ground at a time.

When I started add on this habit, I noticed that I could balance while putting on my clothes, but it was always with big swings of my arms and legs. Over time, I have increased my balance margin of error. Sometimes, when I dress quickly I lose focus and revert back to my old ways. It is okay when this happens: refocus yourself and continue to improve your balance!

published 2015-03-23

Add-on Habit Transverse Abdominis while Flossing

Your abdominal muscles are composed of a few layers of sheets of muscles. The part people often focus on are their Rectus Abdominis muscles, also known as, "The Six Pack". While this muscle serves as a popular indicator of a person who is in shape, the other muscles in your abdominal region are arguably more important to overall core strength, spinal protection, and postural position.

I would like to focus on the Transverse Abdominis. The Transverse Abdominis are the most internal or deep abdominal muscle. They wrap around your whole front and stabilize the trunk when it contracts. They are also used during breathing where they help change the shape of the cavity your lungs are in.

An easy way to activate the Transverse Abdominis is to "suck in" your gut. This is also sometimes called "stomach vacuuming". Well developed, and strong Transverse Abdominis muscles will allow you to move your gut in so that it is more internal that your rib cage, and you will see the outline of your rib cage if you look at yourself in a mirror while doing the exercise. By holding your stomach inward, you are contracting and working the Transverse Abdominis. You can also work it by slowly and purposefully moving from all the way sucked in to all the way bulged out. When you bulge out your abdominal region, you are working other muscles more, but your Transverse Abdominis moves along with and will be stretched through its range of motion.

I add this stomach vacuuming exercise onto my habit of flossing my teeth twice a day. While I am flossing, I either keep my Transverse Abdominis contracted, or I move it in and out. You can add this on to any time where you are standing up. For example, you might do it in the checkout line at the store, or while you are washing your hair in the shower. There are really a lot of places you can add a few Transverse Abdominis workouts.

The benefits of working this muscle group is that, as it tones, your stomach will be much more flat because it will pull your stomach inward. It will also help you breathe more effectively and help you protect your spine from injury. When you make this muscle stronger, the harder-to-exercise complimentary muscles in your back will also get stronger because they will need to keep up with your stronger Transverse Abdominis.

I strongly recommend giving this a try, because when I started doing it, I noticed immediately that my stomach looked better and healthier. You do not need to be all the way to having a six-pack to be producing a much stronger and nicer looking group of core muscles.

published 2015-03-20

Your Body Should Not Harbor Pain

When you press firmly on your joints or muscles of your body, you should not feel pain. When you move through your normal, full range of motion, you should not feel pain. When sit motionless you should not feel pain. Unless you actually have a neuro-muscular disorder where that causes you to constantly feel pain, you should not feel pain.

Two years ago, I did not believe this. I had chronic pain in my ankle, hip, and shoulder. A spasm of the muscles in between my ribs would leave me feeling like I could not breath for a few seconds at a time about once a week. I told my doctor that I thought the sudden rib pain could potentially be something related to a heart attack. My grandpas all died an early death from a heart attack. My doctor quickly ruled that out though and said "You are having some musculoskeletal pain. Do not worry about it". My doctor did not believe what I wrote in the paragraph above.

There are too many people out there living with small aches and pains. They most often attribute the pain to getting old. Or, to some injury that they have decided will not heal. I was the same way. I thought I would permanently have this ankle pain from a then-two-year-old soccer injury. I thought my sudden rib pain was a condition I would have to come to accept.

I was so wrong. Over the last year, I have all but eliminated these chronic pains from my body. Through principals of Physical Therapy, anatomical awareness, body awareness, self-mobilization, and body weight exercises, I have corrected many problems with my musculoskeletal system, driving out the pain that was harbored in that part of my body.

You can work to rid your body of these aches and pains, but you have to believe that your body is not meant to harbor pain. That pressing on your tissues and joints should not cause you to feel the slightest discomfort. If you cannot bring yourself around to believing this, you will not have the motivation to correct the problems in your body. You will forever be resigned to being the person who has chronic aches and pains. You can go about living the rest of your life in pain, or you can choose to change your beliefs and believe that you can personally correct the problems in your body. Believe that you are in control of your body!

published 2015-03-18

Add-on Habit Shoulder Range of Motion while Applying Deodorant

The idea behind this add-on habit is that you improve your shoulder range of motion while you apply deodorant. Instead of bending your elbow while you lift your shoulder to put on deodorant, you keep your palm pointed forward (maybe toward a mirror) and your arm completely straight. In this position, your arm will be parallel to and in-line with your body. The goal is to regain and maintain full range of motion so that your arm can be pointing directly upward without rotating your rib cage or recruiting any of the muscles in your torso or neck. Do each arm while applying deodorant to it. Yay for multitasking!

When your first start doing this, you may find that you do not have full range of motion. Or, that your shoulder capsule is hurting, or your triceps are tight, or your rotator cuff muscles are restricting the motion. That is okay. The more time you spend at your maximum range of motion, the more likely you will be able to increase the range to the maximum. Massage your shoulder and triceps before and after this motion if you have time.

I started doing this add-on habit because I realized that my left shoulder capsule had pain before I could reach full range of motion. Since you generally should not have pain when you move your body around or press on it, I knew I needed to work on it. I have been doing this practically every day for a year now, and I can report that my pain at end range has drastically gone down. I still have some tightness in my triceps at left shoulder end range, so I will keep working on it. I plan to keep up this habit for the rest of my life because it is so easy to add, does not take extra time, and will keep my shoulders in good shape.

published 2015-03-17

Increase Your Margin of Error

Your body is an adaptive system. No two bodies are the same because they have all adapted to different stresses placed on them. Cyclists develop big quads, and rowers develop the shoulders and arms. Your body is strengthening in response to stress and atrophying from disuse.

The upside to this is that if you can keep the various parts of your body mildly stressed you can keep your body in a state of global improvement, where all parts are getting better simultaneously.

The downside is, if you are like me, probably do not have much of what engineers call a margin of error. The margin of error of your body is how far you have to challenge it beyond your normal routine before some part of the system fails. Your body is always adapting to your environment, and it works to minimize the energy expended. This was great for your ancestors who could eat fewer calories because the muscles they did not need were not getting big. But not so great for modern you living in a calorie-rich environment.

This adaptation means your body becomes just barely good enough to handle the maximum stresses placed on it throughout your routine. On my path to increasing my overall physical fitness, I had a few moments when I realized some routine task in my life was a lot easier than it used to be.

My wife and I do not sleep in a bed. We sleep on a mattress on the floor. When we get up, we go from squat to stand. I never thought about this motion being difficult for me, but once I had developed my squatting strength, I noticed I could much more easily get out of bed. On the flip side, before I started working on my squatting muscles, I was on the verge of not being able to get out of bed!

I have noticed similar situations when balancing on one leg to put on my shorts, easing myself down onto a toilet seat, and picking up my wife while hugging her (she wants me to say it is all due to her weight going down).

All these routine actions had such a low margin of error, that I was always living on the edge of making one stressful move that would lead me to fall or hurt my back. You may think you are far away from the old lady you see using a walker, but I am afraid that most of our margins of error are so small that we are not far away from that at all.

Let us build our margin of error in our daily activities. By putting short but intense stresses on all of the parts of my body, I believe I will continue to build my margin of error. Constantly listen to your body and look for where your margin of error has gotten too thin. You will know when it happens, it is called pain.

published 2015-03-16

Add-on habit serratus anterior at stop lights

An add-on habit is a habit you attach to something positive you are already doing. One positive, but somewhat time consuming, activity is driving my car from place to place. When stopped at stoplights, I work on my serratus anetior muscles. This has been very helpful in decreasing my sudden rib pains. Actually, I haven't had any sudden rib pain now in a few months. Maybe it's gone.

Please only try this while you have your car completely stopped at a traffic light. Do not do this while your car is moving.

Here is how you do it: grab the steering wheel at the standard ten o'clock and two o'clock postions. Adjust your seat so your butt is in the back corner of the seat and your back is straight. Look straight ahead. Engage the muscles in the sides of your ribs to pull your torso forward while keeping your elbows and shoulders locked. There should be very minimal bend in your back. The total movement of your torso will only be a few inches. You can do this very slowly and after you read the end range forward, push back. You can push yourself against the seat for some resistance without movement.

Stop if you feel pain. You will know if you are doing it correctly, it will feel very natural and you will feel the muscles on the sides of your rib cage activating.

published 2014-08-20

Add-on habit toothbrushing squat

You might have noticed that it is hard for people to form positive habits. There is a gap between how people wished they behaved and how the do. There are plenty of people who have advice for what you should be doing with your time, but few explain how you can actually transform your habits to implement their prescriptions.

A year ago, I wanted to do a better job of caring for my body. My main driving goal was to eliminate pain that I felt every day: my lower back hurt, sometimes I would have sudden rib pains that made it difficult to breathe for five seconds, my left hip and ankle are painful on occasion. One major motivator was Kelly Starrett's mobility workout of the day video blog series. Watching these videos made me realize that, with hard work, I could figure out what is wrong with my body and fix it.

Watching videos will not make you better on its own. You have to develop habits where you continually work on improving your physical condition. Maybe this sounds great to you; maybe you've watched a few of Starrett's videos. How do we go from our desire to have a habit to actually having one?

I've stumbled on a way to reasonably decent plan for how anyone can develop a new positive habit. The idea is that you take a positive habit from your life that you already have and add your new habit on to that one. I call it an "add-on habit" or "adding on a habit". What does it mean to "add on" a habit? It means you use your ingrained habit as a cue or stimulus for your new desired habit. For example, you might do the habit you want to install right after or even during a currently in place positive habit.

One positive habit I have that my parents ingrained in me (Thanks Mom and Dad), is brushing my teeth. Every morning and night I brush my teeth. I've done it so long now that it is completely automatic. There is no resistance in my mind about brushing my teeth. It's almost completely guaranteed that I will do it. You might have a similar habit; you might have the habit of brushing your teeth.

What I did last year is add air squatting on to brushing my teeth. You can try this yourself, watch Starrett's original squat video for how to do the squat. Then do it while brushing your teeth. If you do it in the morning and night, you will have accumulated about 4 minutes a day of squatting without much effort. The best part about this is you don't have to out-of-nowhere remember to do squats, you know that you always do squats when you brush your teeth.

I am surprised by how effective this technique is for developing new positive habits. One possible trap to avoid is you do not want to add a positive habit onto a negative one. For example, don't do air squats while eating unhealthy food. If you manage to kick the bad habit later, you will have also kicked the positive add-on habit.

Try this with other habits and let me know what habits you are able to create. I will be sharing additional add-on habits that I have developed over the course of this past year in future posts.

published 2014-08-16

IMAP RSS reader

Google Reader was going away; I needed a replacement. I tried lots of other webapps but none of them seemed to have the feature where you have to explicitly mark something as read. Also, wouldn't it be nice to take control of my feed reading data, securing it from prying eyes? My solution is to use a server to fetch RSS feeds and turn them into email. It turns out that IMAP is already a great protocol for handling a steady stream of messages. I have been using this system for a week and it has worked well, syncing across multiple devices and operating systems.

I would like to give you a high-level look at how I did it. This is not meant to be a step by step guide. I might make one of those later but that requires a lot more work. If you have trouble, please let me know, and I will try to improve this guide.

I used a virtual private server from DigitalOcean, which let me use the latest version of Ubuntu Server. The particular server you use should not matter too much. Please make sure to lock down your server appropriately. I followed this initial server lockdown guide.

Packages to install:

Downloaded subscriptions.xml OPML file from Google. Configure rss2email on the server to send email to the email address prepared for RSS reading. (I suspect you can use Gmail or some other webmail provider. I used a mailbox on the same server using Dovecot and Postfix.)

r2e new EMAILADDRESS
r2e opmlimport subscriptions.xml

If you want all of the RSS entries that are currently in your feeds, to show up in your inbox

r2e run

If you want only new RSS entries, first run

r2e run --no-send

Some of your feeds might fail. You can delete them with

r2e delete FEEDNUMBER

You can add new feeds with

r2e add FEEDURL

After rss2email is running how you want it to, set it up as a crontab. Edit /etc/crontab to contain an entry like

0 *	* * *	ryantm	r2e run

You should now have a RSS fetcher that sends emails. If you used a webmail provider, you already probably have cross-platform reading support. If you rolled your own mailbox, you can try other email readers. I think Thunderbird works well.

published 2013-06-05

Voting against an amendment

At the Clark County Republican Central Committee meeting, there was a resolution about gun control and the recent Sandy Hook incident. The resolution had language talking about the killer using an assault rifle. A man made a motion to amend the resolution because he said that it had been recently learned that the killer had an assault rifle in his car, but did not use it in the killings. He vaguely asked to amend it to remove mention of the assault rifle from the resolution. The man argued that we should remove mention of the killer using an assault rifle because, otherwise, we would be lying. When the vote commenced and the nays voted, the man who made the motion got up, and pointed at people close by to him who voted nay and shouted “Liar, Liar, Liar!”.

The man who made this motion was wrong and extremely impolite to call these people liars. Here are some reasons for voting nay without needing to lie:

  1. You agree with the man, but disliked his vague amendment. You would like to propose a more clear (or better worded) alternative after the motion is dispensed with. Or, you want to vote against amendments in general, unless the exact changes are clearly presented.
  2. You plan to vote against his amendment and against the adoption of the resolution.
  3. You agree with the man, but not with the resolution as a whole and want it to contain lies to make it less likely to pass.
  4. You do not believe the man, and would like to table the resolution until better proof is made available.
  5. You dislike the man (who wouldn’t dislike someone who shouts at people and calls them liars?) and want to vote against anything he proposes.
published 2013-01-28

Emacs Marmalade with-demoted-errors

www.marmalade-repo.org was down today, which caused my emacs to crash on start up. Here is a quick way to get around the crash. Instead of:

(dolist (p my-packages)
  (when (not (package-installed-p p))
    (package-install p)))

wrap it with the with-demoted-errors macro, which will change the errors from crashes to messages in the *Messages* buffer.

(with-demoted-errors
  (dolist (p my-packages)
    (when (not (package-installed-p p))
      (package-install p))))

This isn’t so great because you might not notice when it fails, but maybe that is okay if you don’t try to get packages every time you start up.

You also need to consider how your subsequent elisp will handle the lack of the packages you desire.

published 2013-01-25

Observational humor case study 1

My Toastmasters Club, Powerhouse Pros, has a section of the meeting called Observational Humor. It is a chance to tell jokes about your observations throughout the meeting. I will give you the setup of the jokes and my monologue. Keep in mind that these jokes are meant to be funny and custom-tailored to the audience.

The set up

The monologue

  1. Opener: My mentor Bobby Williams says you only need to do observational humor if you want to get paid — a probably true statement paralleling a memorable quote from his speech, got good laughs
  2. I…. Just… Sorry [I am fake crying here]… I love you guys so much — callback to Bobby saying we need to love our audiences
  3. I also prepared a pop quiz for tonight’s meeting
  4. 1. True or false: Men are funnier than women
  5. 2. True or false: Humor can improve with practice. (That wasn’t funny, it was just a listening comprehension test
  6. 3. Performing two or more jokes at the same time can cause fatal results.
  7. — The quiz used similar structure to the quiz questions that all of the participants took.
published 2012-11-03

Low-fuss syncing for Chrome Secure Shell sessions

Chrome Secure Shell is a relatively-new SSH and terminal emulator as an App for Chrome. I am investigating whether I can use it as an alternative to PuTTY. As I explore this option, I am going to be trying to address my main gripes with PuTTY:

I discovered a way to synchronize most session configuration of Chrome Secure Shell using Chrome bookmark syncing.

  1. “Sign in” to Chrome on all your machines and make sure bookmark syncing is on.
  2. On all of your machines, install Chrome Secure Shell
  3. On each machine, click on Import in the Chrome Secure Shell connection dialog. Navigate to your ~/.ssh/ directory, and import everything from that directory into Chrome Secure Shell by selecting all the files and clicking Open
  4. Create a bookmark folder for your SSH sessions.
  5. Inside the folder, for each of your sessions add a bookmark with this URL: chrome-extension://pnhechapfaindjhompbnflcldabbghjo/html/nassh.html#user@host:port The port can be left out if is the default SSH port 22.

With that set up, the bookmarks should sync to all of your machines and you will be able to log in without more configuration. Enjoy.

published 2012-11-03

PV-GS180 Windows 7 drivers

On Windows 7, you can download a video off of the PV-GS180 video camera without any additional drivers being installed. You go to the video preview mode on the camera, change the menu USB function to “DV DATA,” and plug it in to a USB 2.0 port. Then, you open Windows Movie Maker, and click File -> Import from Device, and then select the device called “Video Edit.”

published 2012-08-19

libmysqlclient-dev is a dependency of node js db-mysql installation

I was trying to install db-mysql and I ran into this error:

> db-mysql@0.7.6 preuninstall /home/ryan/git/mb-js/node_modules/db-mysql
        > rm -rf build/*
        npm ERR! db-mysql@0.7.6 install: `node-waf configure build`
        npm ERR! `sh “-c” “node-waf configure build”` failed with 1
        npm ERR!
        npm ERR! Failed at the db-mysql@0.7.6 install script.
        npm ERR! This is most likely a problem with the db-mysql package,
        npm ERR! not with npm itself.
        npm ERR! Tell the author that this fails on your system:
        npm ERR!     node-waf configure build
        npm ERR! You can get their info via:
        npm ERR!     npm owner ls db-mysql
        npm ERR! There is likely additional logging output above.
        npm ERR! System Linux 3.2.0-26-generic
        npm ERR! command “nodejs” “/usr/bin/npm” “install”
        npm ERR! cwd /home/ryan/git/mb-js
        npm ERR! node -v v0.8.2
        npm ERR! npm -v 1.1.36
        npm ERR! code ELIFECYCLE
        npm ERR! message db-mysql@0.7.6 install: `node-waf configure build`
        npm ERR! message `sh “-c” “node-waf configure build”` failed with 1
        npm ERR!
        npm ERR! Additional logging details can be found in:
        npm ERR!     /home/ryan/git/mb-js/npm-debug.log
        npm ERR! not ok code 0

The way to fix it is:

apt-get install libmysqlclient-dev
published 2012-08-04

Why does my garlic burn when I sauté it?

When I want to make something garlicy, I usually try to sauté it in a pan. Unfortunately, when I add olive oil and garlic cloves or minced garlic. It usually ends up burning up and making a nasty mess. The key to sautéing garlic in oil is to use a low flame and cook for longer. It should be hot enough that there is just a hint of bubbling but no more.

published 2012-07-07

Rainbow smudge artifact on Pro8200

I have a ViewSonic PRO8200 1080p DLP Home Theatre Projector. After cleaning my house, the projector got a artifact that looked like a rainbow smudge. It is not the same as the “rainbow effect” that I read about while trying to research this problem. I thought maybe the front lens got dirty while I was cleaning, so I cleaned that with a microfiber cloth. It didn’t help. I thought maybe some dust had gotten inside and I blew compressed air into the side of the projector. Amazingly, that fixed the problem!

published 2012-07-04

How to survive Angel's Landing

I recently hiked Angel’s Landing at Zion National Park with my girlfriend. We are both 26 and in fairly good shape. The hike to Scout Lookout is strenuous, uphill for 2 miles. The last 0.5 miles up to Angel’s Landing is technical and dangerous. The sign says 6 people have died since 2004. We brought about 3.5 liters of water and we ran out at the last mile going down. Here are my tips for making it more likely that you will survive:

published 2012-06-30

How to Make Your Own Free Website in 20 Minutes

By following this post you will have a website that you can visit in your web browser just like this one, for nearly free(less than 5 cents a year) in 20 minutes. In addition to being easy to set up, your website will be on top of a highly scalable and reliable architecture which will handle traffic spikes with ease.

The company we will use to host this site is called NearlyFreeSpeech.NET.

Signing up

  1. Visit NearlyFreeSpeech.NET now.
  2. Click "Sign Up Now" in the top left.
  3. Click "Create a membership."
  4. Fill out the form and click "Sign Up for NearlyFreeSpeech.NET."
  5. Check your email for the confirmation email.
  6. Click the link in the email, or follow the other sign in methods. Remember the password in the email as well.
  7. Enter your password to log in.

Making your site

  1. Click "Create a new account" on the right sidebar.
  2. Fill out the form and click "Save Changes."
  3. At this point NearlyFreeSpeech.NET will give you 2 cents for free for a 30 day trial usage. (After 30 days, you will have to pay at least 25 cents to keep your site running.)
  4. Click "sites," then "Create a New Site" on the right sidebar.
  5. Pick a name for your site that will become part of the URL of your site. For example, a short name of "ryantm" would give "http://ryantm.nfshost.com."
  6. Click "Continue."
  7. Unless you already have a domain name, select "No" and click "Continue."
  8. Click "Create Now."

Adding your first web page

  1. Open a text editor (on Windows try Notepad).
  2. Enter the following text:
      <html>
        <head>
          <title>My First Page</title>
        </head>
        <body>
          <h1>Hello World Wide Web!</h1>
        </body>
      </html>
  3. Save your text file as "index.html".

Uploading your first web page ( on windows )

  1. Open Windows Explorer (Shortcut: type "windows+r" then type "explorer" and press enter).
  2. Type "ftp.phx.nearlyfreespeech.net" into the address bar.
  3. Enter your username, "YourUserName_YourWebsiteShortname" and the password you received by email.
  4. Click and drag your index.html file into the directory.

Uploading your first web page ( on Linux )

  1. Open a terminal
  2. rcp index.html YourUserName_YourWebsiteShortName@ssh.phx.nearlyfreespeech.net:/home/public

Visiting your site

  1. Visit your site at http://YourWebsiteShortName.nfshost.com.
  2. Enjoy
published 2008-12-23

Writing Review

As promised, I will review the writing of my latest blog entries. By reviewing on my own writing, I hope to learn more about my writing and improve it. If you have any comments about my entries, I would love to hear them, and I will post them in my reviews.

Cheap Memory Foam Mattress

One sentence that strikes me as particularly bad is, "One was how good the bed felt underneath me, and two was the price." My sentence construction here is very unbalanced. The first part of the sentence is a complete idea, while the second part is explained in the next sentence. When sentences become this unbalanced it becomes hard to read them.

This post has a very generic opening. I do not sound excited about this mattress, even though I really am. Starting the post with Tempurpedic instead of an exciting explanation of memory foam was a mistake. It would have been more appropriate to postpone this post until after I could make a better recommendation about the bed. Ending by saying that I have only slept in it for two days instead of a call to buy this mattress is a weak closing.

Now that I have had two weeks to sleep in the mattress, I've found it to be extremely comfortable. I wake up without any back pain or soreness. Also, I can sleep in any position without feeling pain: on coil mattresses I could never sleep on my side, but on memory foam I can. Sleeping on my side was especially helpful while I was sick.

Cutting Out the Middleman

This was one of my best posts of the group. I am passionate about cutting out middlemen everywhere and I think this showed in both the length and quality of this post. I should not have opened the post by talking about the theory of supply chains. This is slightly boring and actually off topic from what I discussed later. Instead, I should have made strong points about why middlemen are bad. Points that I would back up in the body of the post.

Title Insurance Prices

Some of the writing is repeated twice in this post. I should have worked to clean up this duplication. Also, there are unnecessary words in my prose. For example, "and the person you are selling it to" is "the buyer." In addition, title insurance is not an "idea" it is a service.

Consumers reporting the prices they pay for services might make a really popular web application. The prices of services are very irregular and it is hard to know if you are getting cheated. By reporting and aggregating prices, people could be more satisfied about the prices they pay.

Opportunity Monitoring Company

The problems with this post are mostly content related. The idea behind this company is not fully thought out, so some parts of this post were quite vague. I did not explain why an opportunity monitoring company would be an exciting place to work at well enough. There was no plan to generate revenue either.

There is an additional opportunity to post explaining how the calculations done by this company would work in practice.

Capital Preservation

This post was pretty crappy. Capital preservation is a good idea, but the post suffered from problems that detracted from the idea. Defining capital and income at the start of this post would have made my explanation clearer. The post ended by talking about something unrelated to capital preservation because I got distracted talking about the behaviors of financially illiterate people. My use of bold text makes the post easier to skim. What might help even more would be to have section headings, and also more links. My posts, in general, are devoid of good links and headings, which help to keep a reader's attention, by breaking up large blocks of prose.

Systematic Exploration

I am a hypocrite for supporting the ideas in this post. I have not systematically explored my work environment even though I could probably do it in less than two hours. Also, my attempted systematic explorations of the Walmart near my apartment failed to find what I was looking for. This week I happened to find what I was looking for by random exploration. I made good use of the word "you" in this post, and I had some good examples. A lot of my other posts could be improved by using anecdotes like I did in this post.

Admitting You Suck

I wrote this post when I was very ill, and it shows. It is barely coherent and too short. It sucks! It would have been a lot nicer if I admitted in the post that I sucked, instead it reads like I am telling you that you suck, without first admitting that I suck as well.

Cancun

This post could have a much better title. It is a travel guide to Cancun, but I instead just wrote "Cancun" as the title. Also, I try to appeal to every type of Cancun traveller instead of focusing on the one that I am, or ones that I know I can help. My knowledge of the party scene in Cancun is totally lacking, but yet I thought I could give useful advice about it. I should not have tried.

I enjoyed writing about travel, so I want to write about my other experiences; like my road trip across the US, and my trip to Jamaica.

Non-violence in Iraq

This was a most popular post by number of comments. Jacob Lee's comment was exciting because it made me rethink America's effect on Iraq. Also, iprefermuffins pointed out that I spelled "Gandhi" wrong, which is particularly lame because I had spent hours reading Wikipedia pages about Gandhi.

I did a good job of avoiding passive sentences in this post. Nothing is cut and dry in geopolitical problems, but writing passive sentences does not spark debate or make people think. I was happy with the length of this post as well. I demonstrated again that I am bad at concluding blog posts. My conclusions tend to not reinforce what I have written and instead go off in strange directions. The reason for this is that I see that I am almost done and I rush to finish. I will try to focus on improving my conclusions next week.

Programmers Will Form Labor Unions

I was surprised this entry did not generate any disagreement. I think this just shows how few readers I actually have at this point, which is kind of disappointing. I need to focus on building my readership by writing more valuable posts. This post is not particularly valuable because it is not directly applicable. It just some speculation about the future.

This post was well structured, except for the conclusion. It introduced three conditions for unionization then talked about each point. Use of more examples, anecdotes and evidence would have made this post a lot more valuable.

What I Learned Playing MUDs

I like this post. One thing that could improve it are sub-headings. It is fun to recall what I learned from my hobbies and try to distill it into some useful form. It would be fun to make other distillations about the past. Maybe a post about what I learned in college, high-school, from playing sports. All fun topics to explore in the future.

Google Finance Definitions

This post is a departure from my others. It seems to be improperly formatted to give the best explanation: some of the explanations are part of a description list while two are just paragraphs. Also, I could have added a lot more value by talking about how you should interpret these numbers instead of just providing definitions for them. I just noticed that I failed to highlight a link in the middle of the post. With more work, this format of post could provide a lot of value to people.

Money Burning Charity

This post is pretty crappy. It starts off advocating for this new type of charity I invented, but as I think about it more I find the idea is a bad one. After I realized it was a bad idea, I should have reformatted the post as a joke, or scrapped it entirely. Posting it in an inconsistent state was irresponsible of me.

Reader Comments

My friend Alan Lynn has this to say:

I think the approach of writing a blog post every day is inherently quantity over quality, unless you have a lot of time to invest. You've picked some good topics recently, but the content often seems undeveloped.

If somebody finds your blog a month from now, would they find your articles valuable enough to read through your archives?

My current strategy is to learn to write by writing a large number of sentences. My main motivation currently is not to provide value to others but to improve my writing skills and habits so that I can later provide value to others. I think that posting every day is important until I get into a strong habit of posting new ideas I have.

If it is possible, I would like to increase my quality without investing more time. If I get better at researching and writing content, I will be able to achieve this. I hope that I can revisit some of this underdeveloped content later and develop small sections of it.

published 2008-12-21

Money Burning Charity

Charities usually have a mission. The mission says who to help and how. It helps to be specific. Charities that focus on cleft lips tend to do better than ones focusing on heart disease. The charity I thought of is quite specific with its mission. The mission is to destroy all of the money donated to it.

By destroying all the money donated, this charity will be bolstering the value of the currency donated. For example, when you donate one million USD to this charity, everyone else's US Dollars become more valuable. It is the opposite of inflation. Instead of goods and services costing more because there are more dollars around to buy them, they cost less because there are less dollars around to buy them.

By reducing prices in general, this charity makes it easier for consumers to buy necessary items. Instead of each paycheck being able to buy less and less goods and services, it will be able to buy more and more.

If popular enough, it may make a slight dent in the rampant inflation caused by the central banks of the world. In fact, to make it more effective, instead of destroying the money donated to it, it will first invest the money and only half the proceeds. This will create a machine that destroys every increasing amounts of money.

Unfortunately, the burning would not negate the bureau-potism caused by the inflationary system: the system that favors those who are close friends with the government by buying their goods and services with inflationary dollars. It would also not help people pay off loans. Most of the money in existence in the world is because banks loaned it into existence, and when they charge interest on top of the created money, it becomes impossible for people to pay off all the debt in existence even by using all the credit in existence. This charity would be destroying credit, without quenching the debt that created it.

published 2008-12-20

Learning to Write Well

The purpose of starting this blog again is to learn to write well. So far I have been trying to learn to write consistently first. The only way to learn to write well is to first develop a steady stream of writing. I have been cranking out a stream of marginal paragraphs for the last ten days, but I have not been applying an editorial process to my words. All I have done is briefly review each post before posting it. Since I want to get better at writing, I need to apply a feedback cycle to my work.

I have decided that every Sunday I am going to post a critique of the last seven posts that I have made. Starting this Sunday I will post a grammatical, stylistic, and content critique of all of my posts. This critique will give me a chance to examine my mistakes and keep me conscious of areas I could improve in. I encourage anyone reading this to do one of two things. Either one, post a critique of my posts on your own website, or two, send me your comments by email (ryan@ryantm.com). If you write a post I will link to it, if you send me comments I will credit your comments in the post. I will include all the comments I receive along with my own.

I think that over time this feedback will become a fun game for improving my writing.

published 2008-12-19

Google Finance Definitions

Have you ever visited Google Finance and wondered what all of those abbreviated names at the top of it are? Well I am going to explain them to you.

The big unlabeled bold number is the current stock price in the currency it is traded in. If you look at something on the London Stock Exchange this number represents how much the stock is valued in Great Britain Pounds. The New York Stock Exchange is in Dollars.

The green or red plus/minus with a number and a percent in parenthesis right under the current stock price is the price move. If it is a positive number it is the difference between the day's low price and the current price. If it is a negative number it is the difference between the day's high price and the current price. Whether it is negative or positive is determined by the current price's relation to the opening price of the day.

Open
The price for one share as of the beginning of trading.
High
The highest traded price of the day.
Low
The lowest traded price of the day.
Vol
The number of shares that have changed hands today.
Mkt Cap
The 'market capitalization' is the product of the total shares outstanding and the current price. This is what the market thinks the company is worth.
52Wk High
The highest price of the stock in the last 52 weeks.
52Wk Low
The lowest price of the stock in the last 52 weeks.
Avg Vol
The average number of shares that change hand each day.
P/E
The price per earnings ratio. It is the number years before the earnings per share would pay back the purchase price.
F P/E
The P/E using the company's forecasted earnings for the next 12 months. Probably less reliable.
Beta
The coefficient of volatility of a stock. A beta of 1 means the stock is highly correlated with the general price of the market. A higher number means it is more volatile than the market, and a beta of less than 1 means it is less volatile than the market.
EPS
Earnings per share. It is the net income minus dividends divided by total number of shares.
Dividend
The number of cents the company will give you per share you own. Companies typically issue this number of cents to stock owners 4 times a year.
Yield
This is the annual rate of return you can expect to receive from the dividend issues if the company keeps issuing the dividend. Compare this to the yield on a savings account.
Shares
The total number of shares outstanding.
Inst. Own
The percentage of shares owned by mutual funds, pension funds, hedge funds, banks, and insurance companies.
published 2008-12-18

What I Learned Playing MUDs

Multi user dungeons (MUDs) are online games that use text as the primary means of interaction. I created a MUD called DeimosMUD back in the year 2000, and it is still running today. Over this time, I have spent countless hours working on it. The hours were spent coding new features for the game, building new worlds, and mainly dealing with people. The time I spent dealing with people's complaints, training people, arbitrating disputes, and punishing offenders far outweighed the time I spent doing anything else. Some people would say that the reason I spent more time on these issues was because I was an inept administrator of MUDs, and they would be right. I started this game just after 8th grade! Handling these issues taught me a lot.

Solving these human caused problems was great for learning how to deal with people in general. My work helped me became a much better moderator and arbitrator. It also helped develop my leadership skills. The hardest people to lead are those that are working for you for free, and everyone on my MUD was volunteering.

I learned that people can have entirely different motivations from you and they can end up doing things that you do not like. For example, the people who made areas on my MUD, builders, would often make the equipment in their areas have better abilities than all of the available equipment. This would ensure that players would want to visit the builders' new zones. The zones did not have to be fun to play, well laid out, or balanced to get players; they just needed to have the best equipment. The builders wanted their new zones to be popular, but I wanted the abilities of players to not get inflated. Player ability inflation deprecates older areas, and makes the game easier to play which is usually a bad thing. I never actually solved this problem of motivations, but I think even just recognizing it was a step in the right direction from my state total ignorance. If I were to try to solve this now, I would try to think of a system that set up larger incentives for the elements I would like to see in an area.

Discipline was something I learned a lot about as well. When I first started the game, I was very lax on discipline. I thought it would be okay to just sit by while people were bad mouthing me and the other MUD administration. This was because I personally believe in free speech and do not really care when other people insult me. I learned that this was not the right approach at all. People who insulted the administration would take the lack of punishment from the insults as license to all sorts of other bad activities: harassing players, exploiting bugs, and conspiring against players and administrators. I learned that the discipline for petty crimes was necessary if I wanted to head of the bigger problem; a lot like fixing broken windows.

Making a MUD also developed my own personal game design aesthetics. At first, I favored the absurd over the realistic. Areas that did not make sense with the theme of the game (Medieval Fantasy) or game mechanics that were just silly, were frequently made. Eventually I rejected this absurdity and started to focus more on simplicity. Instead of making more complex game mechanics, I was trying to think about what I could take out. I now believe the idea that something is done not when you have added everything but when there is nothing left to take out. I feel that simple game mechanics that lead to complex player behavior are greatly superior to complex mechanics.

I had a lot of fun with my MUD and I learned a lot from it. It was my principle hobby for at least 6 years. The end product is still around, but all the memories of the experiences and fun are hard to share. You can still, play DeimosMUD to get a taste of what it must have been like.

published 2008-12-17

Programmers Will Form Labor Unions

We will have programmer labor unions. Labor unions arise when a workforce is stable, there are few opportunities for advancement, and the owners of the businesses are achieving large returns on capital. When these three conditions occur programmers will unionize.

A good number of programmers I have met just like to program. They happily write code that someone else tells them to write and they do not think about writing code for personal gain beyond a salary from their employer. If this dominant attitude continues, programmers will continue to have few opportunities for advancement. If a programmer does not seek to expand his skills beyond mere programming, she becomes interchangeable with other programmers. Another opportunity for advancement is management. Programmers are often also adverse to management. This aversion decreases the opportunities for advancement available to the average programmer.

Programming, as a field, is just old enough that We are starting to see career programmers: people who have remained the same role of writing code under someone else's management with someone else's specifications for their entire working life. This is painfully similar to a career electrician or welder--two highly unionized trades. Certainly the trade of programming as a career programmer advances as new technologies become available but if these new technologies do not change the attitude of the career programmer he remains without advancement opportunities.

It has been shown that large returns on capital are possible by employing a large number of programmers. Microsoft and Google have shown returns on capital that would have astounded the industrialists. These gains will only increase in the short term as more career programmers are marginalized by their own commoditization. By employing more and more programmers at lower and lower wages, companies employing this strategy will achieve absurd windfalls necessary to spark unionization.

The biggest stopping point to unionization currently is stability of the workforce of programmers. Enough programmers do not stay at the same job long enough to make unionization seem necessary. What this group of career programmers may come to realize though, is that even though they do not stay at the same job, they are staying at the same kind of job. The same kind of job doing generally the same kind of work.

Another contributor to instability is globalization of the programmer workforce. The recent labor pool expansions in India, China, etc. have lead to a destabilization in the programmer workforce in developed countries. Jobs moving across the world are hardly jobs ripe for unionization. This destabilization will not last because as the world programmer's standards of living equilibrate, employers will find no refuge in lower standard of living areas. There will be no poor programmers to utilize. When this logical conclusion of globalization occurs, a increasing stability in programmer workforces will occur.

When this stabilization occurs all of the factors will be in place for programmer labor unions to arise.

published 2008-12-16

Non-violence in Iraq

I have come up with a solution for how to get America out of Iraq quickly. The solution is non-violent resistance. If the Iraqis decide to stop providing services and goods from Americans, and stage non-violent sit-ins at Baghdad the US army will have no choice to but to leave. The Iraqis must become stronger, they must decide that it is not worth working and living, if they are doing so under an oppressor.

People say that by leaving Iraq the Americans will destabilize the region. An Iraqi people strongly willed enough to oust the Americans with non-violent resistance, is an Iraqi people strong enough to stand up against the insidious foreign rule from other Middle-eastern countries.

The non-violence is crucial. It is already clear that violence does not work for ousting the US army. Violent people will be branded as terrorists, non-violent people will be true martyrs. People can not rally around the banner of violence. They can, however, take up the cause of non-violence.

The non-violent resistance will be a public relations boon. New media always likes to cover the story of David vs Goliath; even more so if David does not have a sling. Imagine how it would look to see reports of the US army firing into a non-violent army. Think of how badly the Khudai Khidmatgar made the British look. Images of the American army doing the same would shatter the American conscience of being the world 'goody-two-shoes', and bring us Americans back to reality.

The ousting not only must be non-violent but it must also be secular. If the Americans are ousted for non-secular reasons, the non-secular ruling class will have even more power in the ensuing government. The Americans should be ousted because they have no right to be in Iraq. Under international law (think not of the charade of UN resolutions), it is clear that America is an invading imperialist with respect to Iraq. Invading imperialists should be repelled no matter what their religion or social practices are. It should be reason enough that Americans have no right to be in the country. There is no need to bring up such inanities as Americans being infidels or spawn of Satan, or whatever gibberish these religious folks come up with. Do it for secular reasons.

Where is Iraq's Gandhi? Where is the leader who will bring about this non-violent uprising that will free Iraq from its complacency and ill fate? Any Iraqi could be the next Gandhi. All they need to do is stand up and be the first not to cast the first stone. The first to preach of non-violence and throw down their work and take up the cause of non-violent resistance against this foreign oppressor.

published 2008-12-15

Cancun

Cancun is a city on the northeast corner of the Yucatan peninsula in the state of Quitana-Roo in the country of Mexico. It is known primarily for its party scene but there is a lot to do besides that. I have visited Cancun four times in my life and each time I had a wonderful time.

If you are going to Cancun to party (which I never have), I recommend you stay at a hotel that is all-inclusive. If you get your drinking done during the day time you will not be so compelled to waste your money on the over priced drinks at the clubs and bars. One hotel that I stayed at, the Tucancun, is a good choice for this schedule.

If you are not into partying you should stay at a hotel closer to Playa Del Carmen. The beaches are much nicer and Playa Del Carmen is a closer to the Mayan ruins and amusement parks. Most of the travel packages you get will include a bus ride to your hotel when you get there and back to the airport in the end, so there is no need to rent a car. Also, if that wasn't enough, there is an excellent public van system called the "cambia" which is subsidized by the government making it dirt cheap to go anywhere along the highway west of Playa Del Carmen. You can even take the "cambia" into Cancun.

One place you must visit if you go to Cancun is Tulum. The Mayan ruins at Tulum are excellently preserved and well maintained. The site has bathroom facilities and ethnic shopping opportunities. The best part of Tulum is that you can climb down the cliffs overlooking the ocean to a beautiful white sand beach. The water is perfect so bring your bathing suit.

If you are interested in seeing more Mayan ruins, there is also Chichen Itza. It features a Mayan castle (Castillo), a 150 meter ball court, many other well preserved ruins. The time I visited they were still letting people ascend the Castillo, but after some tourists got injured by falling, the stairways have been closed to the public. The Castillo is built so that during the spring and fall equinoxes, the sun will hit it just right and make it look like a giant serpent is crawling down the side of the castle. If you are flexible with your trip timing this could be an excellent time to go.

The city of Playa Del Carmen offers some newly built up-scale shopping areas, and a ferry to Isla de Mujeres. Isla de Mujeres is a island just big enough to have its own airport. It also sports a marine ecological preserve where snorkeling is allowed. Back when I visited last, the preserve still had some nice fish and other life to look at. With the continual snorkeling that they are allowing, it is hard to believe that it will stay nice forever.

Mexico is on good terms with the USA, but bringing passports is a must. A couple of times my dad only brought birth certificates for my sister and I, but this proved to be a hassle and usually resulted in automatic customs inspection.

published 2008-12-14

Admitting You Suck

The best way to learn is to admit you suck and then fix it. If you think that you do not suck at something you are done learning it. Being done learning is bad. When you stop learning, you stop improving, and it is only a matter of time before you suck so much that you can not deny it. Not sucking is always a moving target, and it is always relative. Remember you suck and fix it.

published 2008-12-13

Systematic Exploration

Whether you are visiting a new place, or visiting a very familiar, systematic exploration can help you become familiar with your surroundings. Systematic exploration is the process of exploring every possible dimension of the place you are in. A simple example is that you go to the grocery store. Instead of visiting only the aisles that contain things of interest to you, visit every aisle in sequence. While you are doing this hold in your mind the intention that you will find something cool that you've never seen before. This works for new grocery stores and ones you have frequently used. One time, I was in Walmart and I decided to systematically explore the grocery section. Just from this decision I found some great textured vegetable protein hidden in the freezer section.

This technique also works if you start a new job. When you start the job, visit every person's office, visit every workstation on the shop floor, look inside every tool chest. People might think you are nuts but in no time you will not have to interrupt people to find things for you and soon you might even be telling others where things are.

Systematic exploration can help you learn more about where you live. Instead of just driving or walking from where you are to where you want to go, take different routes each time so you can explore where different shops and entertaining things are. Just last week I found an awesome view of east Las Vegas by systematically exploring some roads. I also stumbled upon a large yard that was completely filled with Christmas lights and people touring a chocolate factory. Now I know how to find a great view and a chocolate factory, which was totally worth the extra gasoline I had to use to do it.

All of us have a little extra time each week, extend your commute a little bit so that you can find something interesting. Consider exploring to be a fun date in itself. Instead of planning where to go say, "How about we go exploring?"

published 2008-12-12

Capital Preservation

One financial skill that I have been most interested in lately is capital preservation. Capital preservation means that once you decide to invest some money, you try to never spend that money on a non-investment related activity, or lose it on bad investment. Operating from this frame of mind does two things for you. One, it keeps you thinking about ways to invest your money, and two it forces you to save for the future.

One of my life goals is to invest more and more of my net income over the course of my life. As a start out, it should be tough to save more than 50% of my current income, but as I start earning more money, living more efficiently, and making more money from investment opportunities, this percentage should get higher. There really is no limit to how high this percentage can be, for instance, if you are one of the richest people in the world, you have so much money that you can even possibly spend it all on yourself, so you have to invest it. One of the richest people in the world might have a capital preservation rate of 99.999%.

Increasing your capital preservation rate is a good idea because the more capital you have, the more additional income you can generate from it. Take the simple example of a savings account. When your account earns interest, if you keep the interest in that account, that interest also earns interest. It is called compounding -- one of the most important financial concepts. The more capital you have that generates additional capital, the higher and more quickly your capital preservation rate will climb.

Most financially illiterate people actually try to do the exact opposite. Instead of trying to increase their capital preservation rate, they try to decrease it. If you spend every dollar you make on non-investment activities, your capital preservation rate is 0%. It does not matter if you make $1 million dollars a year, or $10 dollars a year. If you spend it all, your capital preservation rate is 0%.

It is actually possible to have a negative capital preservation rate. If you spend more than you make on non-investment activities you have a negative rate. It does not matter if you are spending money that was in a bank account, or money you got on credit ( credit card, loan, etc.). Either way you have a negative capital preservation rate.

The most illiterate people actually try to maximize their negative capital preservation rate. They will try to borrow as much money as they can from banks, and credit cards for non-investment expenditures. While they think they are living like a rich person, really they are as far from it as possible. A truly rich person tries to maximize their capital preservation rate, the richest have a rate so close to 100% that they stop caring.

published 2008-12-11

Opportunity Monitoring Company

Often I think of ideas for companies that sound great. Upon further inspection, I find that there is some small economic detail that needs to be true before the idea can be a success. For example, my friend David Grayson and I thought up an idea for putting LED stickers on the bottom of glass beer bottles. We figured that we could sell them to beer distributors as a way to promote their glass bottle offerings. The trouble is, the cost of LEDs plus batteries plus stickers is currently too much to make the offer tenable. The price of the promotion needs to be some small fraction of the gross margin on the bottles for this to be attractive to the distributors.

We had this idea about a year ago and we haven't though much about it since. It would be great if there was a company that aggregated ideas like the one above and came up with the criteria for when the idea would actually be economically viable. The company would monitor the inputs: the prices of LEDs, stickers, and batteries. It would also monitor the constraints: the gross margin on glass beer bottles, the total consumption of these bottles. The company might even work with distributors to get them on board before the idea even becomes tenable. The company would then take these inputs and constraints and come up with a equation for when the idea would make economic sense.

By periodically reviewing a large pool of ideas with similar structure to the one above, the company would routinely find ideas that have recently become economically viable. Having a large pool of ideas to select from that have recently become economically viable would be a very valuable service. The company could distribute this value in the form of information, or in the form of implementing the idea using one of its subsidiaries.

This type of company would be extremely exciting to work for because they'd always be dealing with the newest possible ideas that could actually work. It would be exciting to run a report daily, and see that two of our 1 million stored ideas have become economically viable over night.

published 2008-12-10

Title Insurance Prices

Title insurance is this idea that the title of your home might be encumbered by some liens and the person you are selling it to might be worried that they don't have the right to buy the property and would get embroiled in legal issues. Title insurance insures agains tthis happening, and in the case that it does they are the ones who pay for it. They should only be charging a rate that is close to what they pay out handling these claims, but I don't believe this is happening. I tried to search for title insurance prices on google but it came up with nothing. I decided that I will try to compile a list of prices people paid for title insurance.


Go here to see the results in real time!

published 2008-12-09

Cutting Out the Midddleman

Cutting out the middleman is one of the best things you can do to improve service, satisfaction, price and overall system efficiency. In supply chain theory there is a concept called the Bullwhip Effect. It says that the more middlemen you introduce into a supply chain the less efficient it can be. As a distributor makes an order he causes demand to whip up as seen the upstream supply chain members and even when obeying the most efficient ordering algorithm, the upstream member has to order more than the demand, leading to a amplification of the demand. Left unchecked this demand can get out of hand and become a giant surplus.

Middlemen are not only inefficient, but they are also costly. Consider how many people are required to deliver a piece of real estate(e.g. your home for example) to you. You have the 2 realtors and their brokerages, 2 lawyers and their firms, a house inspector, a pest inspector, two banks, a title insurance company, an appraiser, and city, county, state, and federal government agents. Each of these people makes enough money to do real estate transactions full time (except the government, they do not know how to make money.). People are the largest expense of any company, and they certainly are the largest expense of any real estate transaction. If you can get rid of any of these middlemen or decrease their compensation you can save a lot of money on a real estate transaction. One example to look into, if you are selling your home, is Flat-fee MLS listing. With a flat listing fee you can save up to 3% of the sale price of your home.

Middlemen can also leave you less satisfied. When is the last time you bought a new car and felt satisfied? With the way car dealers haggle, you know that someone else out there is getting a better price, and you always have to weigh the stress induced by haggling you before you get into it. The fact is car dealers make their money by selling cars in volume and since they buy their cars at a fixed price from the manufacturers, they care a lot about selling each car for as much as they can. It would be great if we could cut out the car dealerships and buy cars from an automotive department store? This is what CarMax has done with used cars. They sell all makes of used cars at a reasonable sticker price and they do not haggle. This leaves their customers feeling more satisfied: they got the same deal anyone else would have gotten, and they did not have deal with the stress of haggling.

The effect of the Internet that has done the most good for humanity has been removing middlemen. It is has become so easy to set up an online store that many factories and manufacturers are beginning to sell their goods online. Even if they haven't begun to do so, the new manufacturers are.

A lot of great businesses were founded with the idea of taking out the middleman. GEICO takes out the middleman of having an insurance agent. The Foam Factory sells cheap memory foam mattresses direct. If you are thinking of starting a business, one of the surest ways to achieve customer goodwill is to take out a middleman. When you take out a middleman, customers go from spending more money to less. When you save customers money, they love you.

What middlemen have you dealt with recently and how could you have avoided it?

published 2008-12-09

Cheap Memory Foam Mattress

The Tempurpedic mattress commercials have always intrigued me. The promise is great: a material that conforms to your body without poking you the way coiled spring mattresses do. This was enough to make me want to try one. I went to a local mattress store to try one and was amazed by two things. One was how good the bed felt underneath me, and two was the price. The beds cost at least 5 times as much as comparable coiled spring mattresses. This was confusing because the process for making a foam bed is actually a simpler process than constructing many metal coils and putting them in the right orientation. With a foam bed all you need is a mold of the right size and the right mix of materials at the correct temperature. My gut told me someone would be selling these beds for less.

After searching the internet for about a day, I stumbled upon The Foam Factory's website for Memory Foam Mattresses. With prices 5 times less than Tempurpedic, comparable quality, and free shipping these beds are amazing. I bought a Twin 5" LUX-HQ 4" 4.5LB Memory for $254.99 + 20 for the nicer cover and had it shipped to me.

The mattress came compressed in tight plastic wrapping, which made it take up less space than it does now. After I took it out of the plastic wrap it started to expand. Once fully expanded it was ready to use, and felt great to lie down in. The strangest sensation is when you go to plop down on your bed, you expect it to feel the same way a coiled spring mattress feels, but it feels totally different. So far I haven't gotten used to this difference.

I have only slept in it for 2 night so far, and I don't have any complaints, but stay tuned for an update.

published 2008-12-08

Compact Fluorescent Lightbulb Efficiency

Compact Fluorescent Lightbulbs (CFLs) are quite the rage in home lighting these days. I've replaced most of the bulbs in my house with CFLs. Let us examine the energy and financial efficiencies of these bulbs.

Energy Efficiencies

The input of lightbulbs is their power consumption. Power consumption is measured in Watts. The output of lightbulbs is how bright it is. Brightness is measured in lumens.

The most common type of CFL is the 13 watt lightbulb. It is the replacement for the common 60 Watt incandescent bulb. Table 1 shows relevant inputs and outputs for these two bulbs.

Table 1
Input Power (Watt) Output Light (Lumen) Luminous Efficacy (Lumen/Watt)
Incandescent 60 850 850/60 ≅ 14.16
Compact Fluorescent 13 900 900/13 ≅ 69.23

CFLs have a higher lumen output and a lower watt input resulting in almost 5 times greater efficacy. Note though, that I don't say efficiency. Efficiency is a dimensionless quantity, and Lumen/Watt is not dimensionless. If you had a lightbulb that gave off 1000 Lumens at 9 Watts. You would compute its luminous efficacy to be 111 (1000/9). 111 is greater than the maximum energy efficiency you could have (100%). If your lightbulb is greater than 100% efficient it would mean that it actually created energy out of nowhere.

To compute a bulbs efficiency we need the theoretical maximum luminous efficacy. The theoretical maximum represents a lightbulb that turned all of its power into visible light photons. The theoretical maximum luminous efficacy is 683.002 Lumen/Watt. Give this, the luminous efficiency is given by the luminous efficacy divided by the maximum efficacy. The results of this computation are seen in Table 2.

Table 2
Luminous Efficiency
Incandescent 14.16/683.002 ≅ 2%
Compact Fluorescent 69.23/683.002 ≅ 10%

So in the case of CFLs 10% of the power consumed is being converted into light. Ideally we want 100% of the energy to be converted into light, but 10% is 5 times better than the incandescent bulbs at 2%.

If we swap incandescents for the more efficient CFLs we will realize a significant energy savings. Incandescents use 60 watts and CFLs use 13 watts. The difference is 47 watts. If we take that over the useful life of a CFL bulb, 10,000 hours, we get 470 kW hours of savings. At a usage rate of 3 hours per day, you can use 51.5 kW hours fewer a year.

From an energy perspective, CFLs represent a significant improvement over prior bulbs. Energy savings alone is not a reason to do something though. If CFLs cost $500 per bulb you would not want to pay for one. Let's see if we can really afford these bulbs.

Financial Efficiencies

To decide whether to invest in CFLs we need to decide if the Net Present Value (NPV) of the bulb switch investment is positive. To upgrade the bulbs capital must be invested. Since you have to have at least one kind of bulb the capital invested is the difference in price between a CFL bulb ($2.74) and a incandescent bulb ($0.36). This investment yields two distinct returns. The first is the energy savings. If we assume an energy cost of 10 cents per kilowatt hour, the switch saves 43 cents each month. The second is replacement savings. Incandescent bulbs are rated for 1000 hours of use and CFLs are rated for 10,000 hours of use. Each year we forgo the replacement cost of an incandescent bulb.

Since cash in the future is not as good as cash now (cash now can be invested in other things) we must use NPV to calculate how much this is worth to us. The NPV calculation discounts cash returns in the future. The rate of discount is based on some rate of return we think we can get doing something else. For instance, at the time of writing the US 10 year bond is at 3.83%. So if you invested your capital in a US bond instead of a lightbulb would you come out ahead? That's what we aim to ask by using NPV. It turns out that the NPV for the CFL investment is $44.73. Since this number is positive, it means that investing in CFLs is a good option compared to investing in US Bonds.

It is useful to look at your break even point. Say you are only living in a place for a short time. If you move before the break even point you will have wasted cash buying CFLs. If you move after the break-even point, the CFLs will be worth it to you. The break even point is the time when the Net Present Value first becomes positive. In this case, the break even point for the CFL investment is at 8 months. At 8 months, you will have recouped your investment and made 17 cents.

Another useful number is your return on investment. The capital outlay is $2.37 and the total return is $57.42. The return on investment is 2422% over 9 years.

CFLs appear to be a good investment vehicle for people looking to earn great returns on their capital. Unfortunately it does not scale well. Once you have invested capital in all of your lightbulbs you cannot continue to achieve such large returns on investment.

published 2008-10-05

Linux Webcams at Best Buy

Want to buy a web-cam sold at Best Buy that works on Linux by default? I've already done the leg work for you. I bought most of the web-cams that Best Buy sells and tested them on my Ubuntu 8.04 (Hardy Heron) installation.

One surprising constraint I learned is that the web-cam needs to be a low enough resolution for it work. One web-cam had a capture resolution of 1280x1024 but it was quite choppy at this resolution. I wasn't able to reduce the capture resolution easily so this web-cam was effectively too good for my computer.

Name Works out of box Resolution Choppy
Creative Live Cam Pro No
Dynex Yes 1280 x 1024 Yes
Creative Other One Yes 800x600 No

Some people say you should patch your kernel with modules to get your web-cams to work. I say don't buy web-cams that don't work out of the box. If you buy a product that doesn't work out of the box, return it! When you return it you are voting with your money for web-cams that work out of the box.

published 2008-09-15

Ruby Socket Persistence

It's surprisingly simple to persist your socket connections while restarting a Ruby program. The key lies in understand how Ruby handles file descriptors. A file descriptor is a number that represents an open file that is buffered in the OS Kernel. Now I've only tried this technique on Linux so I don't know if it works on Windows, so chime in on the comments if it does or does not work. Let's start by exploring file descriptors a little bit so we can improve our Linux knowledge. If you want immediate gratification you can skip down to the bottom-most snippet.

irb(main):001:0> require 'socket'
\=> true
irb(main):002:0> sock = TCPSocket.open("google.com",80)
\=> #<TCPSocket:0xb7c73c44>
irb(main):003:0> sock.fileno
\=> 3


note that the file number of the socket is 3. Now look at the output of lsof:

ryan@rtmlap:~$ lsof -c irb
COMMAND  PID USER   FD   TYPE  DEVICE    SIZE    NODE NAME
irb     5645 ryan  cwd    DIR     8,2   12288 1441793 /home/ryan
irb     5645 ryan  rtd    DIR     8,1    4096       2 /
irb     5645 ryan  txt    REG     8,1    3564 1177574 /usr/bin/ruby1.8
irb     5645 ryan  mem    REG     8,1   67408  539926 /lib/tls/i686/cmov/libresolv-2.7.so
irb     5645 ryan  mem    REG     8,1   38412  539915 /lib/tls/i686/cmov/libnss_files-2.7.so
irb     5645 ryan  mem    REG     8,1  254076 1208067 /usr/lib/locale/en_US.utf8/LC_CTYPE
irb     5645 ryan  mem    REG     8,1  190584  522320 /lib/libncurses.so.5.6
irb     5645 ryan  mem    REG     8,1  196560  522360 /lib/libreadline.so.5.2
irb     5645 ryan  mem    REG     8,1   17884  539913 /lib/tls/i686/cmov/libnss_dns-2.7.so
irb     5645 ryan  mem    REG     8,1   40016 1210577 /usr/lib/ruby/1.8/i486-linux/socket.so
irb     5645 ryan  mem    REG     8,1 1364388  539898 /lib/tls/i686/cmov/libc-2.7.so
irb     5645 ryan  mem    REG     8,1  149328  539906 /lib/tls/i686/cmov/libm-2.7.so
irb     5645 ryan  mem    REG     8,1   38300  539902 /lib/tls/i686/cmov/libcrypt-2.7.so
irb     5645 ryan  mem    REG     8,1    9684  539904 /lib/tls/i686/cmov/libdl-2.7.so
irb     5645 ryan  mem    REG     8,1  112354  539924 /lib/tls/i686/cmov/libpthread-2.7.so
irb     5645 ryan  mem    REG     8,1  787660 1177653 /usr/lib/libruby1.8.so.1.8.6
irb     5645 ryan  mem    REG     8,1    7552  522335 /lib/libnss_mdns4_minimal.so.2
irb     5645 ryan  mem    REG     8,1   25700   98159 /usr/lib/gconv/gconv-modules.cache
irb     5645 ryan  mem    REG     8,1   15312 1207882 /usr/lib/ruby/1.8/i486-linux/readline.so
irb     5645 ryan  mem    REG     8,1  109152  522259 /lib/ld-2.7.so
irb     5645 ryan    0u   CHR   136,1               3 /dev/pts/1
irb     5645 ryan    1u   CHR   136,1               3 /dev/pts/1
irb     5645 ryan    2u   CHR   136,1               3 /dev/pts/1
irb     5645 ryan    3u  IPv4 1897889             TCP rtmlap.local:45854->jc-in-f99.google.com:www (ESTABLISHED)

Alright, so now here's the snippet that shows persistent sockets:

#!/usr/bin/ruby
#simple_connector.rb
require 'socket'

puts "Started."

if ARGV[0] == "restart"
  sock = IO.open(ARGV[1].to_i)
  puts sock.read
  exit
else
  sock = TCPSocket.new('google.com', 80)
  sock.write("GET /\n")
end

Signal.trap("INT") do
  puts "Restarting..."
  exec("ruby simple_connector.rb restart #{sock.fileno}")
end


while true
  sleep 1
end

When the program is first run it prints 'Started.' Then it opens a socket to Google and requests the homepage. Then it waits indefinitely until it receives the INT signal (CTRL-C or kill -term PID). After that it runs exec which spawns a new program in the place of the current one. It spawns the same program, with additional command line arguments "restart fileno." When the program starts again these additional arguments make it follow the other path, which uses IO.open(file_descriptor) to open the file descriptor from the file descriptor number that we passed in on the exec line. Then it reads the socket Kernel buffer, which already contains the Google homepage.

And there you have it, a socket that persists beyond a single program.

published 2008-07-11

lsof Lists Open File Descriptors

lsof is a linux command that lists the open file descriptors on your system. I like to use the following options to help reduce spam:

lsof -c command-name
lsof -p port-number
published 2008-06-30

How to Win at scrabulous Using Regular Expressions

Scrabble

This will tell you how to win at Scrabulous using a few simple Linux commands and a working knowledge of Regular Expressions. The basic principle behind this approach is to quickly write regular expressions to search for every possible word you can make a specific part of the board. By cating a scrabble word list into a pipe and using egrep with regular expressions, you can quickly and easily match patterns against your tiles and the state of the board.

Quick example:
$ wget http://www.ryantm.com/scrabble-word-list.tar.gz
        $ tar -xvzf scrabble-word-list.tar.gz
        $ cat scrabble-word-list | egrep "^A[EPABVT]{4}$"
        ABATE

We've found a valid 5 letter scrabble word that starts with an A (^ means start of line), contains 4 of the set E,P,A,B,V,T ($ means end of word). Expanding on this concept you can do all sorts of awesome patterns.

Say you want to make a word that goes from what you currently have to a triple word score 5 tiles away that connects to a D. You just do something like this:

$ cat scrabble-word-list | egrep "^[EABTTE]*D$"
        ABATED
        BATTED
        BETTED
        TABBED
        TATTED
        TEATED

Then suddenly you've got a list of words that work for what you want. I did * here instead of {4} * means match as many characters as you can. It's usually a good idea to start with * and narrow it down with {number} if you need to. You might notice that one of them doesn't work (TABBED), because you don't have two B's. The regular expression matcher doesn't care how many times you put a letter inside a set ([]) and it will match it as many times as it can. You can filter these words quickly yourself though, because you know you don't have two B's.

The General Principle

  1. Take what letters you have an form at set: [BZTQEAI]
  2. Find a starting or ending place: ^ACE or Y$
  3. Put it together with the number of letters you want to use: "^ACE[BZTQEAI]*"
  4. Double check the word with reality
  5. Repeat until you are satisfied with your word score.
published 2008-06-07

Why Google Gears and Yahoo Browser Plus Don't Change the Game Yet

Hank Williams over at the Why Does Everything Suck blog is saying Yahoo Browser Plus is a Game Changer, but I don't think so. While I agree that Yahoo Browser Plus is more well put together than Google Gears, both in terms of downloading and installing modules, and that their model for designing new modules is more open-source and organic, they need to get their software on computers.

Developers, Developers, Developers, Developers

Getting this Browser++ software on computers has already been shown to be quite difficult. Until these add-ons get close to the market penetration of flash they are going to have a particularly tough time attracting developers. I was also surprised that while Yahoo Browser Plus seems to be better than Google Gears in a lot of ways, they have no version targeting Ubuntu Linux, something that Google Gears has been serious about since the beginning. If you want to attract good developers to your product, you need to run on Linux.

Socket Applications Won't Suck as Much

A web application that I'm working on would particularly benefit from the widespread penentration of the Browser++ software. I'm making a browser based MUD client. Right now the only way to reasonably do this is to have a persistent socket server on the web server that is hooked up to the browser via AJAX. This works pretty well, but an version built similarly to Yahoo's IRC chat, would shuttle most of my server load to the users computers, where they have typically resided for socket based clients in the past. This seems like it would be a great candidate for a Browser++ application but there are a couple of hangups so far.

Future of Browser++

I am particularly hesitant to use Browser++ tools to develop my web applications, because the web is supposed to work everywhere. If the software doesn't have enough penetration it doesn't make sense to build a solution that you want to work everywhere on these tools. The unfortunate problem with this is that it is a chicken and egg problem. Macromedia solved this problem by integrating Flash over many many years. They didn't just release Flash and then say "okay now the game has changed, everyone can run streaming video on the web." This happened over time. The game hasn't changed, it is changing.
published 2008-05-30

Delegating Your OpenID Authentication Doesn't Work With Drupal 6

When I read that Drupal 6 supported OpenID, I was happy about it. I use OpenID for logins whenever I can, but I have it set up in a sort of novel way. My novel way is to have my open id be www.ryantm.com and then have that website delegate the authentication to another company. In my case, I picked this good OpenID providor. I figured out how to do this by watching Simon Willison's google video talk. All you do is add these few lines to the head element of your OpenID url, but replace 'ryantm' with your username:

<!-- / Open Id -->
<link href='http://www.myopenid.com/server' rel='openid.server' />
<link href='http://ryantm.myopenid.com' rel='openid.delegate' />
<meta content='http://www.myopenid.com/xrds?username=ryantm.myopenid.com' http-equiv='X-XRDS-Location' />

The great part about this is that it works with any OpenID providor. So if at some point myopenid.com crosses my path, I can just delegate my OpenID authentication to another providor, and all of my OpenID logins will still work. In a sense, I've given myself complete flexibility with no chance of lock-in.

Unfortunately Drupal 6's OpenID support isn't up to snuff to handle my OpenID Delegation. It seems that while they seem claim they've implemented the entire OpenID spec by the wording on their marketing pages it doesn't work for me. I tried www.ryantm.com and http://www.ryantm.com and it keeps rudely telling me that's not a valid OpenID. I was under the impression that any url was a valid OpenID.

Anyway, I've created a bug report for this so you can follow what's going on. Please add comments to the bug if you are having this problem as well.

published 2008-05-29

Haml: Why You Should Use It

HAML 2.0 is out. I've been using HAML since back when I made my Assassins Game Hosting Service in 2007. If you are still using ERB or some other templating language for your web applications here is why you should given HAML a try.

HAML gets rid of end tags. By using Python like indentation it removes the need for you to type all of those pesky HTML endtags. Also, it lets you quickly see the nesting of tabs simply by the indentation of the line you are on. This quick look at nesting is espcially helpful when your HTML files start to get longer than 80 lines or so. HAML generates pretty source. I am anal about how my HTML souce looks. I want it to be indented with spaces at every nesting point. If you've ever seen the HTML source for a webpage generated in on of the terrible, horrible WYSIWYG editors, you know exactly what I don't want. Every time I look at the source of pages generated by those tools a little piece of me dies. HAML is the complete opposite of this. It generates the cleanest possible HTML document it can. The file format convinces you to write cleanly, but it also smooths over some errors you could make. For instance, if you include unnecessary newlines in your source file, HAML removes them, leaving on the effectful newlines. HAML is integrated with Ruby. ERB's Ruby integration is a joke. All it does it execute Ruby between <% %> with a little extra handling for loops and if statements. HAML's Ruby integration is like a Red Corvette. You can use = for ruby code with output, or == for ruby strings, or - for Ruby code without output. Also, now with HAML 2.0 error handling for Ruby and HAML is great a well. HAML installation is easy. You can try HAML out right away with little effort, and no conflict with your current Rails installs just do the following:
gem install haml --no-ri
haml --rails path/to/app
I should also mention that HAML is used in my favorite static HTML generator, Staticmatic.
published 2008-05-25

Email Reminder Scheduler - ReplyLater.com

Have you ever wanted to remind yourself of an email? People frequently remind themselves of emails by leaving those emails in their inbox. If you're busy, like me, your inbox reminders will grow uncontrollably. That's why I developed ReplyLater.com. ReplyLater.com lets you schedule email reminders by simply sending emails. Let me show you what I mean.

Say I want to send an email to a company about a business proposal I have. I want to make sure they reply to me within a certain timeframe, or I want to followup again. The way I used to do this is by sending the mail to myself and leaving it in my inbox until I have the time to look through my inbox for things to do. Instead now I just address the email like this:
        BusinessDevelopmentGuy@google.com, 2weeks@replylater.com
Good, I'm giving BusinessDevelopmentGuy 2 weeks to get back to me, but after that I'm going to get a email reminding me about this. There are plenty of other applications to this as well. You can remind yourself about future events and obligations, like birthdays, anniversaries, little league games, vacations, etc. ReplyLater.com is free to use, so theres no reason you can't go to the website and check it out and start using it now! Any comments or suggestions are appreciated.
published 2008-05-14

More Evidence That Programmers Aren't Smarter Than Other People

So Google App Engine(GAE) came out and it has generated quite a buzz in the blagosphere especially surrounding the idea of sharecropping. But that isn't want I want to talk about. I want to talk about the growing amount of evidence that strikes down the idea that programmers are smarter than the average person.

There is a certain mythos surrounding the idea that some of us can "talk to the machines," while others cannot. This misunderstanding has been capitalized by many programming types to act in a condescending manner against the people who do not know about computers. This has led to the mistaken belief that programmers are smarter than the average person. This is not the case. Programmers are humans like everyone else who have chosen to study an area very deeply. Many other humans have chosen to study other areas deeply as well, for instance, have you ever met a sculptor, or a advertiser, or a politician? Every area where people are engaged they are studying things at a deeper level than average. This deeper level of study does not make them smarter, it just means they have more contextual information. Now that I've introduced this flawed belief of programmer intelligence, I'd like to offer some evidence that caused me to write this article. When Google release their App Engine, they made a Google Code issue tracker for it. This tracker has since, at the suggestion of Google employees, become a dumping ground for feature requests for GAE. One feature, which I was particularly interested about--being a ruby programmer--, is Ruby support. Now Google Code ranks issues on the issue page by the number of people that have starred an issue and starring an issue lets you receive updates when the issue's status changes ( i.e. the feature is implemented). Unfortunately this also means you receive comments every time someone comments to the thread, and unfortunately as well, there are a lot of average Ruby programmers that showed up on this issue thread. The result is that since I have starred the issue, I've received over 300 emails from people who have written comments that say:
+1
Yep that's right, that's all it says. I've been receiving them at what seems like two a minute, though that's an exaggeration. People have tried to quell the mob of idiots by numerous posts telling people to stop, and that it only counts if you star it, but no one listens. They just keep posting "+1" by the hundreds. While these actions were surprising to me, they should not have been. People are going to keep following the crowd and writing plus one because they are people. Programmers aren't different or better. Programmers are still humans. One last thing I'd like to say that is probably the reason programmers have thought so highly of themselves and in some cases acted condescendingly to non-programmers. I believe that computer programming is an essential skill, along the lines of literacy, and speaking. The reason I categorize it with these is because, just like writing, reading and speaking, programming is game changing. With computer programming people can take an idea and propagate it massively and automatically. Properly programming something can change the way every other human who interacts with that program behaves and lives. This is powerful stuff that shouldn't be relegated to one group of skilled persons. Anyone with programming skills can work to automate their job of doing menial tasks. For example, when I worked at Caterpillar as an engineering intern, they had about 3 people who's primary job was to make charts and give presentations to management about these charts. The charts graphed the quality of the machines we were shipping and the manufacturing defects that were caught. I noticed that these 3 people were spending at least 3 hours a day using excel to generate these charts. So I created a Visual Basic program (the only programming language I had available to me) to generate these charts automatically in a fraction of the time. The reason I bring this up is not that I think these people should have been writing programs to do their graphs for them. I bring it up because what if they could? What if they could sit down and automate the task in front of them, and then move on to doing other useful activities for the company. This behavior of automation of jobs at the lowest level is why I say programming changes the game like reading, writing and speaking. When people at the lowest level learned to read and write it changed the game. Literate people can communicate much more effectively with their peers and get their ideas across to a lot of people. This idea automation through literacy is paralleled by task automation through computer programming. Look at what this means, just as you can't have an elite group of scribes that does all your information dissemination, you can't have an elite group of programmers to do your job automation. The idea of a programmer as a skill or trade needs to be broken down before we can see the true gains in productivity that computers promise. So I kinda jumped around a bit here, I first cut down programmers to average, then I said, "wouldn't it be great if the average person knew how to program." I guess those ideas a bit hypocritical but they both serve to explain why I think that programmers aren't as elite as they signal to others, and that others need to learn programming. I can hear it every time someone goes, "ooh I'm not good with computers."
published 2008-04-11

Google Accounts Sucks

Google Accounts is inadequate for my usage of Google's services. First, I have a google apps account for my email, I'd like this to be my primary account. Unfortunately there are certain Google applications that only work with a Google Account and Not a Google Apps for your Domain Account. These services include 4 that I know of: Google Reader, Google Adsense, Google Adwords, and Google Checkout. What is most disappointing to me is that Adsense and Adwords are supposed to be Google's flagship moneymaker products, the ones they should be caring most about. The only google application to be responsible about this is Google Analytics, it lets you add other email accounts to have access to the application, and because of this it works properly with my account setup.

In order to use these second class Google citizens, I have to log out of one Google account and into another. This leads to confusion between my tabs; ever left Google Reader open while checking your ad revenue, too bad, you can't! Here's a special gripe about Google Reader. They have this nifty feature that lets you email your friends an item that you particularly like, but it just assumes that it will check your Gmail account contacts. If your login to Google Reader is ryan@ryantm.com and ryantm.com is hosted google app, then it should check your contacts over there. Instead I get a blank auto-completer even though my auto-completer works in my email account. Anyway, Google, get your act together. You should have been able to figure out accounts better than this, instead you're doing accounts in the same crappy way as everyone else: total chaos
published 2008-04-09

Your Own Fast Image Gallery on Rails

If you've ever used Facebook's photo application you might have wondered how they make the images go so fast. Since I wanted to have fast viewing of our snapshot galleries over at Brawl Snapshots, I set out to figure out how to do it.

The main component of a fast gallery is caching. By telling the browser to load images in hidden divs before they are actually displayed to the user, the browser cache is primed for the quick switch.

The way you request these images in the background is the meat of the problem and the solution depends on what you are trying to do. With Facebook, each gallery has a limited number of photos in it, so Facebook loads all of the imag URLs, comments, and other meta data when you look at the first photo in the gallery. In the case of Brawl Snapshots this approach wouldn't work because some of our galleries have over 4000 images in them. Loading and rendering the meta-data for 4000 images just to view one would be a little wasteful.

Firebug shows AJAX requests from visiting one image Fig 1: Firebug shows AJAX requests from visiting one image

So instead of loading all the data up front I opted to use some AJAX requests to populate my cache as needed. When you go to a image in the Brawl Snapshot Gallery, it first loads the image you are on then it uses AJAX to asynchronously load the next and previous image in the background. After those finish we load the next's next and previous's previous image as well (see figure 1). This gives our viewers a buffer of two really quick images, which gives us ample time to load some more for all but the quickest users.

I will try to explain the essential components.

1. The Populator (populates the cache when needed)

window.onload = function() {
  if (YAHOO.env.ua.ie || YAHOO.env.ua.gecko || YAHOO.env.ua.webkit) {
    setInterval(populate, 200);
  }

  function populate() {
    var items = $('items');
    if (needsNext() && gettingMoreNext == false) {
      id = lastObject(items).id;
      gettingMoreNext = true;
      new Ajax.Request('/snapshots/'+id+'/next?'+queryString, {asynchronous:true, evalScripts:true, method:'get'});
    }

    if (needsPrevious() && gettingMorePrevious == false) {
      id = firstObject(items).id
      gettingMorePrevious = true;
      new Ajax.Request('/snapshots/'+id+'/previous?'+queryString, {asynchronous:true, evalScripts:true, method:'get'});
    }
}

I set the populate function to run every 200 milliseconds with the setInterval() function. Inside the populate function we test if we need to get more, or if we are already getting more snapshot pages. If we aren't then we launch an AJAX request to get more. When the AJAX requests return the scripts inside them are automatically evaluated. The code on the server side looks like this:

def previous
  item_parial = render_to_string(:partial=>"snapshots/show", :locals=>{:snapshot=>@snapshot}
  render :update do |page|
    page.insert_html :top, 'items', item_partial
    page << "newStuff('previous');"
  end
end

What this does is push the new snapshot into the top of the #items div, and then notify our page that it worked by called newStuff. Previous pushes onto the top of the #items div, and Next pushes onto the bottom of the #items div. This orientation is important because it lets us navigate through the cache later.

The Navigator

If you've followed these rough steps and modified them for your needs, you should have a list of divs inside an #items div that are in gallery order. Now you want to navigate through them using Javascript. To do this we have to make use of the Yahoo! UI Library: Browser History Manager which will give you cross browser history and make the back button work. Without this library it is very hard to make the back button work on a Javascript navigated gallery. Luckily Yahoo lets you only include the parts of its libraries upon which Browser History Manager Depends:

<script src="http://yui.yahooapis.com/2.5.1/build/yahoo/yahoo.js">
<script src="http://yui.yahooapis.com/2.5.1/build/event/event.js">
<script src="http://yui.yahooapis.com/2.5.1/build/history/history.js">
<iframe id="yui-history-iframe">
<input id="yui-history-field" type="hidden" />

This code only needs to be included once for your gallery viewer, not for each item. Now let's look at the top of the fast.js file where we do some more history initializations

function stateChange(state) {
  if (ignoreOneChange) {
    ignoreOneChange = false;
    return;
  }
  var ar = state.split("/");
  var our_id = "";

  for(piece in ar)
    if (ar[piece].indexOf && ar[piece].indexOf("?") != -1)
      our_id = ar[piece].split('?')[0];

  toElm = document.getElementById(our_id);
  if (toElm)
    itemTo(document.getElementById(our_id),false);
  else
    window.location = state
}

YAHOO.util.History.register("items", window.location.toString(), stateChange);
YAHOO.util.History.initialize("yui-history-field", "yui-history-iframe");

var bookmarkedState = YAHOO.util.History.getBookmarkedState('items');
if (bookmarkedState != null)
  window.location = bookmarkedState;

stateChange is a function that I register with the history manager to be called every time the browser's location changes. The purpose of stateChange is synchronize the state of the browser with the history, so this is why if the requested spot in history is in the current cache we immediately jump to that image, otherwise we have to tell that page to load with window.location. Then I make sure there is no current bookmarkedState. If someone were to bookmark an AJAX snapshot with ID 30 the URL might look something like: http://bs.com/snapshots/10#/snapshots/30 so you can see why you might want to revert this to http://bs.com/snapshots/30. You need to do this since web servers are not sent any part of the URL after the octothorpe(#) you would end up at snapshot 10 when you wanted to be at snapshot 30.

The last thing to cover is how to insert something into the history. Basically whenever we click a Next link we run some javascript. In this case we run nextItem(), which calls updateURL if it is successful.

function updateUrl() {
  var newState = "/snapshots/"+currentItem.id+"?"+queryString;
  if ($('yui-history-iframe')
    $('yui-history-iframe').contentWindow.document.title = document.title;
  YAHOO.util.History.navigate("items", newState);
}

This tells the history manager to navigate to the new state. We also set the title of the iframe here so that the history in Internet Explorer contains the page titles. When the url is updated we need to make sure that the title of the page is updated as well. In order to do this I have an element inside each item div that contains the title it should be, and then I look it up to put as the document title when that snapshot is viewed.

Well that about sums up everything I learned about fast galleries. Hopefully this helps you make fast galleries on your own site.

published 2008-04-08

Why I Stopped Reading the Newspaper

It's been about 4 years since I stopped watching TV regularly, and about half a year since I stopped reading the Newspaper. My reasons for stopping are similar to my reasons for not drinking alcohol. I believe that you need a reason to exhibit an action and you don't need a reason to not exhibit an action. When someone asks me, "Why don't you drink." I say, "I need a reason to drink, not a reason to stay sober." I try to extend this thought process to many of my other habits.

The idea is that you should examine the things that you've learned to do, your habits, and make sure you have reasons for doing so. I'm not suggesting you go through all of your habits at once. Doing so would be counter-productive because you can't possible think about all of your habits at once, there are too many! Instead, just look at ones that are taking up a lot of your time, and are higher level behaviors. What I mean is that you shouldn't examine why you use your left hand to write. You should examine why you go to work everyday, or why you wake up and read the newspaper every morning, or why when you come home from work you sit down and watch television.

Let's do a thought experiment now. Say you want to examine newspaper reading. If you agree with what I've said above, you need to look for a reason to read it.

Newspaper Attractors (ranked most useful to least useful):

Newspaper Detractors (most painful to least painful):
It's nice to be able to converse with people about current events because it gives you something novel and common to talk about. However with some thought, it is usually not hard to find something that is novel and common to talk about. Especially if you can make yourself genuinely interested in the activities of other people. If you are interested in their activities you instantly have a communal interest.

The only reason to know the sentiment of the masses, or the trends is so that you can go against them. Following the trends will just put you in the same boat as other mindless people who read the newspaper. To do anything useful in life, you need to buck the trends, follow the unbeaten path. This reminds me of the phrase:

If you keep doing what you've always done, you'll keep getting what you've always gotten.

Only when you change yourself and not follow the trends can you accomplish something that is actually newsworthy.

Now look at the detractors, how much time do you have to spend reading the newspaper every day just to get a little nugget of truth from the steaming pile of crap and hype? People I know spend anywhere from 15 minutes to 30 minutes a day reading the newspaper. I'm sure other people read more. If you do this everyday it really starts to add up. Think about what would happen if you instead used that time to exercise or just sit and meditate about your life. You'd be engaged in activities that have direct applicability to your life and survival, instead of reading about some esoteric far off conception of other humans.

Even with the time issue aside, you can get false positives from the newspaper. If I had a dollar for every time the Business section of the Chicago Tribune changed from Bull to Bear on the front page, I'd be a very rich man. What the newspaper tries to convince you are sure trends are actually just the feelings and emotions of other humans. Lots of experimental evidence has shown that humans can't predict much of anything useful about the future. This is doubly true when you are trying to predict what other humans will do. When you predict the future, the other humans are too, which creates a very chaotic environment that the so called liberal "sciences" have made little inroads on.

I don't trust the journalist to make predictions about events just like I don't expect myself to be able to predict the future. Yet this is what most people get from the newspaper. They claim that they have a window into the future actions of other humans because they can read the market is going to collapse or that green is the new fashionable color for this season.

People would be a lot better off, on a whole, if people stopped deluding themselves that they are made smarter by the words in the newspaper. Being in the know about current events, or activities does not make you more able to predict wide trends. Instead, it does the opposite: since you think that you have better knowledge of the world you predict on an even grander scale.

This is crazy. I have a hard enough time predicting what I'll be doing tomorrow, and I have a lot of control over my own actions and behaviors. How can I possible predict what other humans are going to do tomorrow, or next week, or next year. The person who claims he can do this is deluding themselves with the help of the newspaper and other pseudoscience information sources.

If you see any merit in what I say, you should try a 30 day trial where you don't read the newspaper. It truly is a different perspective to only look up the news that you actually care about, and to do it on your own time.

Some people have told me that recently the financial markets have not been doing well. Some might argue that this is crucial information to know, but I don't see how it is directly applicable to my life. What is directly applicable is how I can learn how to change myself. How I can learn how to think better and change my behaviors to reflect better thoughts. That's what I care about and that's what I'm trying to pursue.

For more information about predicting the future, I recommend all of the works of Nassim Nicholas Taleb.
published 2008-02-08

Primary Post-Mortem

Timeline

500 Woke up
600 Made sure signs haven't been removed by vandals (No signs had been removed)
615 Arrived at first polling place to poll watch
815 Went to Quad
830 Put up Ron Paul sign at YMCA
900 Arrived at second polling place to poll watch
900-1100 Visited 3 more polling places encompassing 5 precincts. Watched election judges to make sure things were going smoothly
1120 Gave 4 signs to Michelle, she was putting signs up at polling places that got missed
1130 Generated 1 sure vote by driving Kevin to the polls
1215 Went home
1215-1800 Was at home unsure of what to do
1800 Went to original polling place to watch them close the polls
2010 Observed results from my 6 polling places and retrieved signs
2045 Showed up at Merry Ann's diner where David was waiting with a laptop and TV.
2130 Helped David retrieve some of his signs
2200 Watched election results with David's family

Thoughts

Don't Procrastinate

I'm glad that I did a lot of my campaigning in the morning because the rainstorm in the afternoon and night was so bad. The lesson to be learned here is do not procrastinate when weather conditions are changing rapidly.

Drive People If You Can

It would have been nice to be able to drive more people to the polls to vote. This is a very beneficial activity because you get guaranteed votes. This is especially true in a republican primary in a heavily democratic area. The number of votes that decided the outcome in my precinct was less than ten.

Lists Would Have Been Nice

Pollwatching is only effective if you have a list of positive people who you are making sure show up. If you don't have a list it's more of just a watching role. Compiling lists of a candidate proved difficult. We didn't start with good lists. It would have been much better if we had started with lists of all of the people who voted republican in the last presidential primary. That list would have been much shorter and allowed us to focus our attention and time a lot better.

Fill Your Time

I did not have enough activities to participate in to completely fill my day with campaigning. I still don't know what I could have done during the middle of the day. I guess the best advice is to carefully plan ahead of time what to do if you end up with free time on election day.

published 2008-02-07

Vote Ron Paul Today

Today is super Tuesday. Please go out and show your support for the ideals of Ron Paul.

Get up and VOTE NOW, for Ron Paul and all of his delegates.

published 2008-02-05

Profitable Education

I came up with an idea for a "for profit" education system when I was arguing with a friend about where a libertarian view of the world would take us in 100 years. I'm not sure if this idea is a great idea, but I think it's an idea that you really have to try out to see if it will work. No amount of speculation or thought experiments will tell you the results of this. Even if education "experts" were to swear back and forth to me that this is the dumbest idea ever I'd still want to try it when I have the excess capital to do so. So here it goes:

At age 5-7, parents, or students themselves (in the case of an orphan) apply to go to my school. I would select from the applicants who to let into the school. These school would operate like a boarding school: students would be fed meals, given housing, clothing, affection, and any other essentials necessary for survival. Neither the parents or the students would pay anything for the teaching or feeding or housing up front. Students would be taught through whatever method I and the teachers I hired found to be most efficient at the time. The reason we are motivated to teach the kids the best way possible is because of the strong incentives for creating very productive citizens.

Using the best knowledge I have of education so far, I would want to use an un-schooling technique for teaching these children. I would strongly facilitate and cultivate whatever activities they had interest in pursuing. The main reason I believe this technique will work is because people would pursue activities that they are passionate about. In the current modern school setting, this passion cultivation is minimal. Most courses are highly specified and do not cater to individual tastes. I believe that my program would create people who are passionate about their chosen interest/field and willing to work hard to further their knowledge in that field and its supporting activities.

In exchange for this housing, feeding, loving, and educating, I will ask that former students return a percentage of their gross revenue to school. These revenues would allow the school to continue operating for more students, and help return the investment made on that student. Profits made through this process would be the profits of the education company and its shareholders.

The legality of this contract is one of the largest up front issues I see. Students under the age of 18 (minors) cannot make a legal contract with a school that says they will pay a portion of their gross income to the school. This common law would make it difficult to have legal recourse against students who took the benefits of the school but they chose not to return their fair share. I think that if argued it a court it might be possible to win a case around this issue, and I also believe that students will, for the most part, honor their bargain as long as the school was nice to them and taught them properly. This would be sure to make the schools be held more accountable to their treatment of the students, because if the students find out that they were treated poorly, or not taught in an acceptable way, then they would simply stop honoring their end of the deal.

What do you think about this system? What other issues does it have?

published 2008-02-04

No Shoes for 6 Months

Last August, my friend Alan sent me an article about going barefoot. It talks about how hard-soled shoes make you walk in a way that forces you to put your heel on the ground before the ball of your foot (cow-stepping). If you take of your shoes and walk naturally you will realize that you stop walking this way. You start walking in a way called fox-stepping, where you put the ball of your foot down firs then slowly roll down your foot to your heel then apply the weigh of your body. This method of walking puts less stress on your joints as you walk.

When you put your heel on the ground first you are putting all of the weight of your body on your leg bones which are completely straight. Anyone who has ever ridden a bike knows that if your seat is too high, and your legs become fully extended it is hard to pedal and bad for your joints. This is because your body is not built to be under stress at full extension. Your joints are made for bending, not for holding a rigid shape as if there was no joint at all.

When you fox-step you avoid this stress. Instead of transferring all your weight to your foot while your knee joint is fully locked, you transfer the weight when your joints are bent. As an added bonus, when you fox-step you look more sure of yourself. Your body takes on a more natural posture, and that posture looks quite a bit more confident.

To start, I tried walking around my block barefoot on asphalt and concrete. I quickly learned that the surfaces that humans have designed for themselves to walk on are actually terrible for human foot traffic. The rigidness of a concrete sidewalk is not a good walking surface for bare footers. I then tried walking in the grass next to the sidewalk and found joy. I loved walking barefoot on the ground where I could feel the different textures. After trying the grass I went out into the street to see what that would feel like. The asphalt of the street had a great texture for walking barefoot on. So right off the bat I liked walking barefoot more than with shoes on 2 out of 3 surfaces. Over time I came to dislike walking barefoot on only 3 types of surfaces, and loved walking on all of the rest.

The three surfaces I did not like walking on are concrete sidewalks, hot asphalt, and grocery store like tiled floors. Besides these surfaces, it has been a joy to walk barefoot.

To start my barefoot trial, I decided to spend the 7 day vacation to Mauii, Hawaiii completely barefoot. I only put on shoes once, and only for about 1 minute during the entire 7 days. During the time I experiencing lava rocks, hot asphalt, beaches, restaurants, wood, 5 mile muddy hiking trail, airports, airplanes, cars, etc. It was a good experience and by the end I was starting to get callouses on my feet. Learning a barefooting lifestyle under the artificial constraint of not wearing shoes for an entire vacation was a great way to introduce it to my feet and mind.

I decided to continue to go barefoot when I came down to Champaign-Urbana for school. The number one question I got from inquisitive young minds is "What are you going to do when it gets cold?" A question to which I had no answer.

But as it got cold, answers came. While I was siting on my porch my friend's (David Grayson) dad came by and told me about some interesting barefoot running stories he had read.

  1. Why shoes are bad for us (pdf)
  2. Men who run forever (pdf)
These stories lead me to Vibram's new five-toed shoes. Which are quite good at protecting your feet in dry and chilly weather. Also, they fix most of the problems of traditional shoes because theyThis last point is probably the most important for fox-stepping. Traditionally when people test the flexibility of shoes they only test how much the toe portion of the shoe bends up. This is not good for fox-stepping because the main mechanism of walking is to first put your toes and balls down on the ground first, which is most easily done when the toes have a lot of downward flexibility.

So next time your are testing the flexibility of shoes make sure the toes can go down below the line of the sole.

These shoes were great for a time, but as it started to get wetter and colder I realized that I needed something else. The reason for this is the Vibram Five-Fingers are not waterproof and they are definitely not well insulated. This combination made it hard to wear socks to keep warm, because if it got wet then the socks just made it worse anyway.

This doesn't mean I don't recommend the shoes, they are great for running in and I will definitely wear them when it gets warm and dry again. But in the winter I needed something dryer and warmer.

That's where Minnetonka's Double Bottom Mooseskin came along. If properly waterproofed it can stand up to the cold and water reasonably well, even in below freezing temperatures. I've been wearing these shoes for the last couple of months with no problems.

People are asking me what I'm going to do when it gets warm. The answer of course is go barefoot again! It's great fun. Later I will probably write a post about the people who have been negative about my bare-footing experience, and how I learned about people's health department misconceptions.

published 2008-02-04

Inform Yourself About Nuclear Waste

The most common argument of Nuclear Power detractors is the production of large quantities of radioactive waste. I'm going to take a look at nuclear waste generation so that you can get a better feel for the issue.

Yesterday I received this document in the mail with my power bill. The second page contained these charts:This made me want to calculate the upper bound of my household's Nuclear Waste production. The reason I say 'upper bound' is because the values for nuclear waste generation are just given as an upper bound on how much waste per 1000 kilowatt-hours produced. The actual nuclear waste generation might be lower than this.

You might also notice that there are two types of nuclear waste. High-Level Nuclear Waste is what I would call the typical nuclear waste. It is the spent fuel, control rods and all other materials used directly in the fission reaction. High-Level Nuclear Waste accounts for 99% of the radioactivity of all nuclear waste[1]. The other type is called Low-Level Nuclear Waste. Low-Level nuclear waste is mostly things like radioactive protection suits and other things that are indirectly exposed to the radiation of a fission reaction. These materials account for only 5% of the radiation and are thus much easier to handle and transport safely.

Now back to the calculation. I looked at all my power bills from 2007 and totaled my kWh usage. In 2007, my house used 8208 kWh of electricity. Of that power, 7% of it was generated by Nuclear Power according to Ameren. So I take the total 1000 kWh (8.21) and multiply it by the total produced from known sources .0001 in the cases of both high and low. I get .000821 lbs of High Level Nuclear Waste and .000821 ft^3 of Low Level Nuclear Waste. One caveat on these numbers, as Ameren points out in their footnote, is that they didn't know the waste produced by 13% of their power because they bought it from other power companies. I neglect this mainly because I'm using .0001 as my figure for Nuclear Waste, even though the actual numbers may be lower.

Next, I decided to see what would happen if all of my power was generated by Nuclear. So I take .0001 and multiply by 100/7 to convert the waste numbers to 100% of the waste. I think this is pretty valid because the only other wastes from nuclear power operation seem to be water vapor and waste heat, which most people argue are not pollution. This gives me <.0014 lbs and <.0014 ft^3 for High and Low wastes respectively. Multiplying this out I get: .011726 lbs and .011726 ft^3 respectively again.

Since I found it hard to wrap my head around such small numbers, I decided to look at the entire state of Illinois, my home state. For this calculation, I assume my power consumption is representative of all of the people of Illinois of which there are about 12,831,970 at the time of writing. This gives us 75.23 tons of High Level Nuclear Waste per year, and 5573 cubic yards of Low Level Nuclear Waste per year. This is if all of our power was produced by Nuclear Power.

So 75.23 tons for Illinois sounds like a pretty big problem but let's look at a minimum of the amount of Carbon Dioxide emissions this would remove. Ameren claims that it emits 1574 lbs of CO2 per 1000 kWh so that gives me the total output of CO2 at current power consumption levels and distribution is 82,890,625 tons per year. By going to a full nuclear power generation model, we could be reducing the carbon footprint of Illinois by 82 Million tons!! So when deciding between Nuclear Power and other options we must weigh in our head the relative advantages of both. If you think that reducing the C02, Nitrogen Oxides, and Sulfer Dioxide in the air will help improve air quality and reduce the risk of global climate change, then you have to weigh this against the negatives of having Nuclear Waste around.

Some people think that this great reduction isn't worth the risk of Nuclear Waste. I do not. I think that humans, when given the chance to solve a problem will be able to come up with a workable solution to dealing with Nuclear Waste.

[1] N. Tsoulfanidis and R.G. Cochran, “Radioactive Waste Management,” Nuclear Technology, 93 (1991), pp. 263–304.

published 2008-02-02

Blog Redux

I decided to start two don't break the chain habits today, 1 Feb 2008.

  1. Write a blog post every day.
  2. Do sit ups or push ups and stretching every day.

I have been spending too much of my time reading and processing other people's writings and not enough time practicing thinking and writing down my thoughts. As such, I propose that I practice thinking and communicating by writing down what I'm thinking at least once a day. I don't think that every post I write will be good, or even polished, but I think that getting into the habit of writing will allow me to improve upon my communication skills. Keep in mind that Albert Einstein once said:

Reading, after a certain age, diverts the mind too much from its creative pursuits. Any man who reads too much and uses his own brain too little falls into lazy habits of thinking.

I need to get un-lazy and start thinking for myself and communicating my thoughts with others. Too many times have I thought something interesting, and kept it to myself. Hey, even if the ideas aren't that good at least they will be out in the open so others can think about them and revise them if they find any value in them.

The second habit is to get myself back in shape. I've been having some lower back pains from playing dodgeball recently. By doing sit ups, I will be strengthening my abdominal muscles which will help to strengthen their complementary lumbar muscles. Hopefully this will help alleviate my back pain. Also, I want to be able to touch my toes! Currently, I can't touch my toes while keeping my legs straight. I would like to be a lot more flexible than I am now.

Well, if you are reading this and you know my personally please try to help me keep up these habits. I put a calendar on the door to my room in my house, and it will have markings for each of the habits.

published 2008-02-01

Lawrence Lessig Predicts Government Ruining the Internet

If you remember, after 9/11 the government dropped the Patriot Act within about 20 days and it was passed. I mean, the Patriot Act is huge. I remember someone asking a Justice Department official, how did they write such a large statute so quickly, and of course the answer was that it’s been sitting in the drawers of the Justice Department for the last 20 years waiting for the event that would allow them to drop it.

Of course, the Patriot Act is filled with all sorts of insanity about changing the way civil rights are not protected anymore in the United States. So I was having dinner once and Richard Clarke was sitting at the table and I said to him, “Is an equivalent, is there a Patriot Act — an i-Patriot Act — just sitting waiting for some substantial event for them to come and have an excuse to radically change the way the internet works?”

And he said, “Of course there is.” And I swear this is what he said, and quote, “Vint Cerf is not going to like it very much.

So this is the big terror. They’re just sitting there waiting for the inevitable to happen, and then ‘Slam!’

published 2007-08-06

How to Unlock Your iPhone Faster



If you have two fingers or a godlike thumb you can unlock your iPhone faster.

Put your human skin at the 1 position and move it ever so slightly to the right (the less you move it the better). Then press the 2 position with your skin.

This operation, if done correctly, takes less time than sliding your finger along the interface.

Any other gesture saving tips?

published 2007-07-13

Jumping Out of Bed

I read "How to get up right away when your alarm goes off" by Steve Pavlina on last Thursday Night. Ever since when my alarm goes off I've been jolting myself out of bed. I am working to build this habit. I did not follow his advice of practicing because I didn't feel that I needed it. I was correct.

This new behavior has had some benefits already. I feel more productive in the early morning, and I also feel less tired. I am definitely going to practice this next semester at school. A lot of times last year I would sleep in and laze away the morning. This always ended up making me more tired.

I'm also contemplating starting a polyphasic sleep schedule. It sounds like a lot of fun to try it because it changes your whole perspective on time. The main reason that Steve Pavlina stopped doing polyphasic sleep, after doing it for a year, was that he felt like he was spending less time with his wife. Even though he was with her the same amount of time, it felt like less, because she was only up for 2/3 of the time he was. I don't have this problem so maybe it will be easier to implement. If I form a relationship while on this schedule I will already have the expectation of how much time to spend with that person.

Some ideas I have to combat loneliness are to start a IRC chatroom for polyphasic sleepers, and to start a group that talks about problems they face, and how we can attempt to convert more people to the schedule. I wouldn't try to do this until after I had adopted that sleep schedule though.

published 2007-07-09

Offical IRC for MUDs

The MUD IRC room is a great place to network. Many informed MUDers gather there to discuss MUD design, play, and implementation. The official IRC chat for MUDs is


#mud @ irc.freenode.net


This IRC is also for MU*s of any kind.

If you aren't familiar with IRC here is an easy way to get started:

go to http://www.mibbit.com/

Fill in the fields like this:


Nickname: YourNameHere
Server: irc.freenode.net
Channel #mud

then click "Login".

This will open a connection. You now can chat!
My nickname is RyanTM. Type something like :

"RyanTM: Hello sir"

And I'll try to respond quickly to you.

published 2007-06-24

Orson Welles Narrates a Cartoon

published 2007-06-21

How to Move Your MUD to Bluehost for Only $6.95 Per Month

Recently someone posted on The MUD Connector about having problems with their host. I offered the suggestion of using a non-mud-host specific hosting provider to run a mud, like I do on Deimos MUD. (quarkmud.com 6666) Here is a tutorial for doing it yourself.

Obtain an account on bluehost. (www.bluehost.com)

Click sign up now. Enter domain name: www.yourMUD.com/org whatever you want. I personally recommend you add domain privacy with Bluehost.

Enter all of your information about select that you are going to pay for 24 months right away.

now you are thinking: woah why is he saying to go for 2 years right away, right? Here's why: It only costs $166.80 for 2 years! Plus Bluehost has a great money back guarantee if you don't like their service. So if you 1 year from now you decide that your MUD isn't going to exist anymore you just ask for a refund. Also, they throw in the free domain name, which is valued at $10 so that's great as well.

Now comes the slightly hard part. You have to get shell access. This involves proving you are a citizen of the USA. If you aren't citizen of the USA, sorry. To do this you need to email them a copy of your drivers license or passport. The info on it should match up with the info you entered above. I'm not exactly sure where to email this to, so just call Bluehost (The number is on their website frontpage) and ask them what to do. They are fairly helpful.

Okay now you have shell access. This tutorial isn't really how to set up a new MUD but more to move your MUD to Bluehost. I might do a later tutorial about how to set up a new MUD if people are really interested.

Presumably you have the files of your other mud somewhere on another shell. If this is the case do:


scp your-user@otherhost.com:~/path/to/mud/ your-user@yourMUD.com:~/mud/

That could take a while to finish because your MUD probably has a crapload files. If your MUD has a MySQL database instead, you'll still be okay. You just dump your database on your host and then upload it into the MySQL database on Bluehost (which you can create really easily with the Bluehost cPanel)

There are many other ways to get the files onto the server and I can't cover them all, but some include FTP, RSync, and Subversion.

Okay now that this is done you need to compile your MUD on Bluehost. This could be more difficult than your previous MUD host. For instance, my circleMUD would compile fine on the old gcc that Wolfpaw was using, but Bluehost has a much newer GCC so I got a whole bunch of warnings and errors. The best way to fix these is to just go error by error, then warning by warning, until they are all fixed. After I fixed them all my MUD compiled okay. And I was able to run it. After it was running I could connect to it with:

telnet quarkmud.com 6666

you'd just substitute your domain name and port there.

One last thing you should know is that sometimes Bluehost kills processes that have been running for a really long time. If this happens you want your MUD to come back up in a reasonable time. You cannot solve this the traditional MUD way of just having an autorun script that is constantly running. Instead you have to use a cron job. You can make the cron job using the cPanel interface again. It is best to make a script that will be run to check if your MUD is still running. Here is my script for doing so:


#
#~/persistent_processes.sh

#DeimosMUD
DM=`ps ex | grep circle`
if [ -z "$DM" ]; then
echo "Restarting DeimosMUD"
cd /home/your-user-name/mud/
./bin/circle 6666 &
fi



Make sure the file is executable with:

chmod +x persistent_processes.sh


This checks if there is a process running that contains the word 'circle.' If there is not, it restarts the server using the proper shell command to restart the server. I set this script to run every minute using the cron task. To do this go to "Cron Jobs" on the cPanel and then select "Advanced Unix Style." Then fill all of the boxes on the left in with asterisks and type the path to the file you saved above. The path should be something like "/home/your-user/persistent_processes.sh".

There you have it, now you have a stable MUD running for a good price.

Performance Note:

My performance on Bluehost has been better than Wolfpaw. Players all reported the speed increase which was quite nice to experience especially for less money.

published 2007-06-16

Duct Tape Marketing

Yesterday I started reading Duct Tape Marketing by John Jantsch. This book is seriously great! As the owner of a small business, I keep getting ideas in my mind about how to improve it's marketing while reading it.

I've never actually read a Marketing book before. I've always focused on reading programming and entrepreneurial books before. I've realized though that if I want to get serious about supporting myself through my own businesses I have to learn how to market, because as Jantsch says, "every business is actually a marketing business." (pg xi)

My plan as I know it so far:

If I want to eat food, I need to convince other people to give me money. People only exchange money for value, so I need to show them how my business is valuable to them. If I just make something that is valuable, it's not good enough, because noone will know that I've made it and they will think whatever I've made is generic crap. That's why I need to market what I've made. To show people what I make is good stuff and they can get my good stuff by giving me money.

Then I can go buy a bagel.

Takeaways:

You cannot survive on your technical skill alone!
People will not find you unless you market yourself.

published 2007-06-05

The Onion Deals a Crushing Blow to Creationists Everywhere

Take that "the eye is to complex to have evolved" people! Clearly all of evolution theory is correct, except for the Triassic period. That period was the time when God decided what goes and what doesn't.

I Believe In Evolution, Except For The Whole Triassic Period

The Onion

I Believe In Evolution, Except For The Whole Triassic Period

I consider myself a rational person. When I have a question, I turn to science and logic to find the answer. Regarding the origins of life,...

published 2007-05-30

StaticMatic

Going along the lines of my last post there is a new rubygem that is focusing on building a framework for static webpages using haml and sass as it's backbone. It's called StaticMatic and it's a gem so...

sudo gem install staticmatic


Then after you get it installed you need to do

staticmatic setup my_app_name
staticmatic build my_app_name


This will give you a directory structure of my_app_name -> site, src. The site dir contains your site built from the source. So every time you do staticmatic build my_app_name you will be building your site/ dir from your src/ dir. This could use the improvement of a Rakefile to make the directory not matter, so I think I'll be attempting to add my Rakefile into the project.

published 2007-05-28

Haml and Sass Rakefile

Here is a rakefile I cooked up for generating a website form static haml and sass files.

require 'haml/engine'
require 'sass/engine'

task :default => [:web]
task :web => [:haml,:sass]

desc 'Compile haml templates to html'
task :haml do
dirs = Dir['**/*.haml']
dirs.each do |f|
File.open(f, 'r') do |fi|
File.open(f.gsub('haml','html'),'w') do |d|
d << Haml::Engine.new(fi.read).to_html
end
end
end
end

desc 'Compile sass templates to css'
task :sass do
dirs = Dir['**/*.sass']
dirs.each do |f|
File.open(f, 'r') do |fi|
File.open(f.gsub('sass','css'),'w') do |d|
d << Sass::Engine.new(fi.read).to_css
end
end
end
end

published 2007-05-27

Ron Paul for President 2008

If you are looking for someone to vote for in 2008 you should consider Ron Paul. He has many of the core libertarian platform beliefs and he's not afraid to say that other candidates are full of crap. Which he so eloquently exposes. This guy is awesome. Watch Him.

published 2007-05-23

MUDing Website

I'd like to announce that there is a website for the MU* framework I'm building. The website is QuarkMUD.com. We aren't quite ready to release anything, but you can see our documentation and our tests (we are using test driven development).

published 2007-05-17

Rubinius

Today on Freenode #ruby-lang, I was talking to "Defiler" about Rubinius. It sounded great. I'm going to look into working on this open source project over the summer, because it seems worth it, and I could end up learning a whole heck of a lot.

Evan, the founder of Rubinius, claims that it is 98% first class. I am interested to find out what that means, but I already know somethings it means. For instance, Methods are first class.
This works:

obj.methods[:my_fibonacci] = other_obj.methods[:fibonacci]

Also, you can undo the effects of including a module very easily. Defiler says you just remove the module from the "ancestors" of the object and then the include is undone. That's a lot nicer than the messy code I'm going to have to write to undo a 1.8.5 ruby module include.

published 2007-05-05

In the Future, There Will Be No Files

That's right. In the future, there will be no files. Why? Because files are an arbitrary construction that is an artifact of computers. Here's a small list of the problems with files:

  1. You have to keep track of where they are.
  2. You have to worry about backing them up and storing them.
  3. You have to make sure they are in the right place.
All of these reasons serve to create a great barrier to people when they are dealing with computers. Only people who understand files can be any good at using a computer. This is a shame because it creates an arbitrary barrier to entry for computers that doesn't need to be there are at all.

So far people have been focusing on number 2. There are lots of home backup products on the market, and even more websites are starting to get into the business of backing up your files. When a website backups of your files they are also starting to take care of 1. implicitly.

Eventually someone is going to take care of all of these things on one platform, and people will never care about files again. Here is my list of use cases that will tell me that files are dead.

published 2007-05-02

Real Learning

Developing the "secret project" that Alan and I are working on has been a lot of work. Throughout the project, Alan has been saying "This is crazy.", which I tend to agree with him sometimes. We have been learning a lot through the project and also accomplishing our goals a lot too. Here's what we've been learning. (By learning I mean, actually learning it, not the crap they do at Universities)

All of these are leading us to be better programmers and letting us learn a lot. Also the end product should be a lot of fun when we get it done.

published 2007-05-05

How the Press Works

Here is a flow of how the press of America works from my current model of it.

4:00 USA Today does interesting story
6:00 Radio talk shows pick up story and try to get people mentioned in the article on the air to talk about it the controversy of the story.
16:00 TV news stations try find local versions of interesting story by contacting the people mentioned in the story because they might have leads to the local version of the story.

It's interesting to see how this works first hand. It seems that a lot of it is quite derivative, more than I had originally suspected. I guess this is a good thing though because it makes a person a lot less likely to 'miss' what is happening in the world, because all the different localities pick up the story and talk about it in their own context.

Here is where the news is unfolding, (there is an audio clip of me talking in one of the comments),
http://davidegrayson.livejournal.com/17231.html

published 2007-04-26

Campus Assassins in USA Today

My website http://www.campusassassins.com is featured in this USA Today Article. Hopefully my quotation in it is correct:

I hope it's just a localized anomaly," [I] said. "I don't think it will affect things in the long run. But definitely people will have to re-evaluate how they play the game."

Our site uses Ruby on Rails.

published 2007-04-25

Passing Infinite Functions

Can you write the following code in your language without it hanging?

some_function( 5, infinite_loop())

You can in Haskell because it is lazy. Which means that it doesn't evaluate things unless it must evaluate them. If some_function only used 5 then infinite_loop would never even get called.

published 2007-04-24