<?xml version="1.0" encoding="UTF-8"?>
<rss version='2.0' xmlns:atom='http://www.w3.org/2005/Atom'>
<channel>
<link>http://www.ryantm.com/blog/</link>
<atom:link href='http://www.ryantm.com/blog/rss.xml' rel='self' type='application/rss+xml'></atom:link>
<title>Ryan Mulligan</title>
<description>Ryan's personal blog about getting better at everything.</description>
<language>en-us</language>
<item>
<pubDate>Wed, 18 Oct 2017 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/nixops-without-sharing</guid>
<link>http://www.ryantm.com/blog/nixops-without-sharing</link>
<comments>http://www.ryantm.com/blog/nixops-without-sharing#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Nixops without sharing</title>
<description><![CDATA[<p>
The default setup for nixops seems to be tuned for a setup involving
many machines where the a state file is necessary to properly manage
the machines. Unfortunately, the state file makes it hard to
collaborate because every nixops command modifies the state
file.
</p>
<p>
Suggested fixes include commiting the state file to git and
using a shared machine. The former fix breaks if collaborators each
run nixops commands in parallel, because they will have a merge
conflict on the state file. And the latter approach is tricky,
because two people really shouldn't be editing the same repository
at the same time.
</p>
<p>
Another option, the one that I use, is to configure nixops so the
state file is not necessary. Each collaborator will have their own
state file, but that's okay, because you won't use it for anything
critical. I expect that this will break some features of nixops, but
I haven't run into an issue for my use case of a few machines each
with their own deployments, I haven't needed anything aside from
<code>nixops deploy</code>, which works.
</p>
<p>
Note, this will only work if all the machines were provisioned outside of NixOps and therefore do not rely on hosting APIs (like EC2) to manage the machine lifecycle.
</p>
<p>
Here's how you do it: make a <code>shell.nix</code> file:
</p>
<pre class='language-nix'><code class='html language-nix'>with import &lt;nixpkgs&gt; {};&#x000A;&#x000A;stdenv.mkDerivation rec {&#x000A;  name = "nixops-shell";&#x000A;&#x000A;  buildInputs = [&#x000A;    nixops&#x000A;  ];&#x000A;&#x000A;  revision = "06c576b0525da85f2de86b3c13bb796d6a0c20f6"; # 18.03 on 2018-04-23&#x000A;&#x000A;  shellHook = ''&#x000A;    export NIX_PATH="nixpkgs=https://github.com/NixOs/nixpkgs-channels/archive/${revision}.tar.gz:."&#x000A;    export NIXOPS_STATE="./state.nixops"&#x000A;&#x000A;    function our_create () {&#x000A;      if [ `nixops list | grep -c $1` -eq 0 ]&#x000A;      then&#x000A;       (set -x; nixops create --deployment $1 "&lt;$1.nix&gt;")&#x000A;      fi&#x000A;    }&#x000A;&#x000A;    our_create host1 # change this&#x000A;    our_create host2 # change this&#x000A;  '';&#x000A;&#x000A;}&#x000A;</code></pre>
<p>
This nix expression for <code>nix-shell</code> installs nixops, pins
the version of nixpkgs used by nixops and creates two deployments:
"host1", and "host2". It expects that the <code>host1.nix</code> and
<code>host2.nix</code> deployment configuration files already exist.
</p>
<p>
If the <code>our_create</code> function checks if the deployments
exist in the state file, and adds them. If you want to add a new
deployment, you add another <code>our_create</code> line in the
shell.nix <code>shellHook</code>, exit the nix shell, and restart
it.
</p>
<p>
The shell.nix file should be commited to version control, and the
<code>state.nixops</code> file should be added to the version
control ignore file (for example, <code>.gitignore</code>).
</p>
<p>
There's one more thing you need to do to make this work. By default,
nixops stores an SSH key in the state file for logging in as
root. We need to add either a shared SSH key, or an SSH key for each
collaborator that gives them root access in each host deployment
configuration:
</p>
<pre class='language-nix'><code class='html language-nix'>{&#x000A;  host1 =&#x000A;  { config, pkgs, ... }:&#x000A;  {&#x000A;    deployment.targetHost = "1.2.3.4";&#x000A;    users.users.root.openssh.authorizedKeys.keyFiles = [ ./collaborator1.pub ./collaborator2.pub ];&#x000A;  };&#x000A;}&#x000A;</code></pre>
<p>
After the initial configuration, this will allow any of the
collaborators to use nixops commands to manage the machine using
their ssh key instead of the one provided in the state file.
</p>
<p>
With this configuration, we do not rely on any of the information
stored in the state file for basic deployment of nixos
configurations to nixos machines.
</p>]]></description>
</item>
<item>
<pubDate>Wed, 29 Apr 2015 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/add-on-habit-screen-time-equals-exercise-time</guid>
<link>http://www.ryantm.com/blog/add-on-habit-screen-time-equals-exercise-time</link>
<comments>http://www.ryantm.com/blog/add-on-habit-screen-time-equals-exercise-time#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Add on Habit: Screen Time Equals Exercise Time</title>
<description><![CDATA[<p>
Screen time when you are consuming media might not necessarily be a
positive habit to add on to, but many of us find ourselves in front
of screens watching videos, TV Shows, Movies, and reading books,
news, and blogs. By establishing add on habit, you can make this
relaxing time more productive and fun by adding on some exercises. A
lot of people have discovered the reverse of this. Lots of people
read and watch videos at the gym while they are on some exercise
machine. This is great and I am not proposing you do something this
strenuous. Instead, how about doing some simple stretches, leg
raises, planks, or squats while using those screens?
</p>
<p>
I think squats are especially good when you are watching a screen
that is far away. You can limit your time sitting and at the same
time open up your hips and build flexibility in your lower body and
lower back. Even a few minutes during your screen time will start to
show big gains.
</p>
<p>
Another great one I do is leg raises while laying down with my
tablet or book. When you are using your arms to stabilize the screen
(or book), your legs are basically doing nothing. Get them involved
in some hip adductor/abductor strengthening. One easy one is called
"clams". You lie on your side with one leg on top of the other with
your knees bent, and then you slowly separate your knees while
keeping your ankles together. The opening is like the mouth of a
clam. You can do this exercise on both sides. Rotating will help
keep your arms from getting tired too. There are a couple of
variations on this called "straight leg raises". You can also do
them on your back if you want to work on your hamstring
flexibility. I like to sprinkle in these leg exercises randomly as I
am using a screen or reading. It keeps me active during an otherwise
sedentary period.
</p>
<p>
I think stretching can be an especially good one to do while using a
screen. You can accumulate a good amount of time in various stretches
while watching something without even thinking about it. By hanging
out more in some of the end range of motion, you can develop more
comfort with being in that position. This is how Andrea developed her
flexibility to do the splits during high school. Lots of time spent
stretching while reading.
</p>
<p>
Screen watching and reading time can have pretty negative results on
your body and overall fitness. By adding a few of these habits into
your screen watching time you can augment these activities with
positive improvements to your body. Just a little motion and activity
can go a long way to reversing the negative effects of laying
motionless and leave you with more flexibility and strength.
</p>]]></description>
</item>
<item>
<pubDate>Wed, 29 Apr 2015 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/motor-control</guid>
<link>http://www.ryantm.com/blog/motor-control</link>
<comments>http://www.ryantm.com/blog/motor-control#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Motor Control</title>
<description><![CDATA[<p>
When you learn how walk, ride a bicycle, or any physical activity, you
are learning how to control your muscles in a specific way. This is
called motor control. Our bodies have a lot of muscles in them. It is
likely that you have not learned to control all of your muscles. There
is the coordination between these muscles to learn as well.
</p>
<p>
I have learned about muscles I can control as recently as a few weeks
ago. I learned that you can control the
<a href='https://www.youtube.com/watch?v=W0jqvl-8qqE'>muscles in the arch of your foot</a>
while standing. Also, I learned how to individually activate muscles
in my quadriceps and back muscles.
</p>
<p>
With good motor control, you can smoothly and strongly contract a
muscle without engaging the muscles around it. This can be hard at
first, because your brain has not necessarily figured out the exact
signals to send that create the motion you desire. An example of
this is your toes. If you are standing up, you should be able to
independently lift up your big toe from your small
toes. Alternatively, you should be able to lift up your small toes
while keeping your big toe on the floor. These are tricky to do if
you have not practiced them before, but with practice, you can
develop the control to do it. Another example is Spock's
<a href='http://en.wikipedia.org/wiki/Vulcan_salute'>Vulcan Salute</a>,
which also requires some practice to learn.
</p>
<p>
As a newborn, we barely know how to use any of our muscles, but as we
get older we begin to learn how to use more and more of them. These
obscure muscles and movement patterns above are examples of muscle
control that you might not get as you go through life. Learning how to
control the muscles in your body and activate them with strength,
speed, and precision lets you use your body optimally. You will have
more dexterity and strength if your brain has the ability recruit your
muscles at the right time.
</p>
<p>
I often talk about mobility and strength being important, but without
motor control, you cannot really have either. If you do not know how
to activate a muscle or do a particular pattern, how can you know if
you have the flexibility or strength to do it? Motor control is the
first step in any plan to improve functioning of an area of your
body.
</p>
<p>
This is why people do air squats (squats with no weight) before they
load up the bar. This is one of the reasons people focus on going
smoothly and slowly through a motion. You can only go smoothly and
slowly if you have the necessary motor control to activate all the
fibers in your muscle in the right order. When I started doing calf
raises regularly, I noticed that my muscles would twitch at certain
points in the motion. I could not go smoothly from flat-footed to toes
pointed. By working on it every day for a minute, I have been able to
smooth out the motion greatly. It is not a question of strength in my
muscle fibers it is a question of being able to sequence them
correctly to smoothly go through the motion.
</p>
<h2>Improving motor control</h2>
<p>
Motor control improvements start by trying to do a particular motion
or activating a particular muscle. Even if you cannot make it move,
trying helps build up the neurological pathways. When you get motion,
focus on repeating it continuously and making it bigger and more
pronounced over time. Another trick that sometimes works is to help
hold back the muscles that you do not want to activate. For example,
you can hold down your little toes while trying to lift your big
toe. Eventually you decrease how much you are holding the muscles
back, until you are able to activate the muscle individually without
restraining the other ones.
</p>
<p>
It is important to have a mindset of persistence when improving motor
control. It can take multiple sessions to see changes and
improvements. But continually working on it can lead to great
gains. This is the principle used to help people that have serious
neuromuscular problems, like losing the ability to move a finger,
hand, or arm. But the techniques work for healthy people too.
</p>
<p>
More motor control is, of course, something you want to have, and
you can achieve it without lengthy sessions, but you need to work on
it over multiple days to build up your control. The good part is
once you have control, it is difficult to lose it. It is not like we
forget how to ride a bike even after taking a break for a long
time. Motor control that you develop now, is likely to keep paying
you back for a long time.
</p>]]></description>
</item>
<item>
<pubDate>Tue, 28 Apr 2015 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/youtuber-review-mobility-wod</guid>
<link>http://www.ryantm.com/blog/youtuber-review-mobility-wod</link>
<comments>http://www.ryantm.com/blog/youtuber-review-mobility-wod#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>YouTuber Review: MobilityWOD</title>
<description><![CDATA[<p>
MobilityWOD (Mobility Workout of the Day) is the channel that got me
interested in improving my body. There are
<a href='https://www.youtube.com/playlist?list=PLB67wXqPqtMcNVA-UndNUy7bahGJzLQbT'>almost 200 video workouts</a>
that you can do to drastically improve your mobility and your
motivation to get better. The first workout is to stay in the bottom
of a squat for 5 minutes in a day. When I first started working on
this, I could not do more than 20 seconds at a time without a lot of
pain. Now I can do a couple of minutes at a time (maybe longer; I
have not tried) without a problem.
</p>
<p>
I think this channel is great at motivating you because Kelly
Starrett has a good coach persona. He sounds confident and egging
you on to do better in your workouts. The videos are filmed
extemporaneously, which gives them character, but sometimes leaves
you wondering what you are working on, or why a particular mobility
exercise will help you. He uses terms like "internal rotation", and
"external rotation", which will seem like jargon to someone who has
not studied musculoskeletal mechanics.
</p>
<p>
I also read the first edition of his book,
<a href='http://www.amazon.com/Becoming-Supple-Leopard-2nd-Edition/dp/1628600837/?tag=ryanmull-20'>Becoming a Supple Leopard</a>
(link goes to the new 2nd edition), that goes into more detail in a
much more organized way. If his videos seem intriguing to you, I
recommend getting the book, because it makes the subject a lot more
coherent than you get from the short videos. It also has a huge
selection of mobility exercises in the back of the book, that you
can use as a reference to solve your mobility problems.
</p>
<p>
Overall, I think going through the MobilityWOD playlist is a good
way to get excited about improving your body and learning how to do
it with explanations that mostly appeal to someone who is not an
expert in physical therapy.
</p>]]></description>
</item>
<item>
<pubDate>Mon, 27 Apr 2015 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/balance-update</guid>
<link>http://www.ryantm.com/blog/balance-update</link>
<comments>http://www.ryantm.com/blog/balance-update#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Balance Update</title>
<description><![CDATA[<p>
I added a couple of balancing habits to my day. When I put on my
clothes in the morning, I try to do very carefully and smoothly. I try
to make sure I am very balanced while doing it. Jumping around, or
shifting my weight quickly is considered a failure, and I need to keep
working on it. Also, I have been doing a similar routine when I put on
my shoes. This is made more challenging by some of my shoes being road
cycling shoes, which do not have much traction and have a lot of
straps to stick down.
</p>
<p>
It has been a couple of weeks since I started focusing on this and
trying to make it better. I am happy to report that I can already
notice some improvements. Before, I would often need to grab
something while putting on my cycling shoes, but now I am shifting
my weight quickly only some of the time. At least once, I was able
to do it very smoothly.
</p>
<p>
This is another achievement toward my goal of increasing my
<a href='../blog/increase-your-margin-of-error/'>margin of error</a>.
I did not need to have smooth balance while putting on my shoes and
clothes. I could have sat down in a chair to do it. In order to feel
like I am living my life safely, I need to feel like I have the
strength, flexibility, endurance, etc. above what I need on a normal
day. If I do not set my bar higher than a normal day, my body is
going to adapt to doing the minimum it can.
</p>
<p>
It is very empowering to think that a little focus for a few minutes a
day can have an effect in only a couple weeks! Focusing on a few
<a href='../blog/always-have-a-project/'>projects</a>
can lead to real gains in short time. This is true even when minimal
time is invested. The opposite is also true though. If you do not
keep challenging yourself, you will start to see real losses over a
short time scale. It is your choice which direction you want to be
heading. I do not care how fast or hard you are going but pick that
you will head in the direction of greater strength, flexibility,
endurance, and stamina. Choose to get better, a little at a time.
</p>]]></description>
</item>
<item>
<pubDate>Fri, 24 Apr 2015 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/competition-a-good-way-to-get-hurt</guid>
<link>http://www.ryantm.com/blog/competition-a-good-way-to-get-hurt</link>
<comments>http://www.ryantm.com/blog/competition-a-good-way-to-get-hurt#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Competition: a good way to get hurt</title>
<description><![CDATA[<p>
Looking back on the physical injuries I have had in my life, I see
a recurring pattern. Almost every time I was injured, it was because
I was competing. I was trying to outdo some other person, showing
off, or most often doing competitive sports. I do not believe that
competition is all bad, and I think that by competing I was able to
keep in great physical shape as a child, but I think the pattern is
alarming.
</p>
<p>
The often unchallenged assumption is that people should compromise
their body to gain an advantage in sports, weight lifting, and other
physical activities. I want to challenge it! I think that you should
perform below the threshold of hurting yourself. I remember playing
soccer in high school, I would keep playing even if I slightly hurt
my ankle. Now, I attribute this to the recklessness of youth and bad
coaching. I feel like I would have been much better off if I trained
hard enough to increase my skills and body strength to well above
the level I expected to need to be at and then perform with a nice
<a href='..//blog/increase-your-margin-of-error/'>margin of error</a>.
</p>
<p>
At the same time I was playing high school soccer, I was also on a
park district team. On this team, I was in better shape than most of
the other players. I was playing two different soccer games. One at
the edge of my limits and one with a healthy margin of error. Also,
since it seemed comparatively easy, I felt less need to be
competitive.
</p>
<p>
This sounds like a great way to operate, but I have not figured out
how to do it consistently. Whenever I am competing, I find myself
pushing myself to the edge of my limits. I feel no problem following
this advice in my own personal exercising though. As long as there
is no person I am trying to catch or no record to beat, I am safely
able to maintain my margin of error.
</p>
<p>
Competition is not the only source of injuries. Sometimes you can
randomly be injured by bad luck, or another person might be reckless
enough to injure you even when you are safely below your limits. For
me though, I feel competition is the most common time I have been
injured in the past, and I think it makes sense that you are more
likely to be injured when you are trying to perform at your maximum
ability.
</p>
<p>
Lately, I have followed some fairly strict protocol to avoid injury. I
avoid team competitive sports, I cautiously and never automatically
increase the difficulty of my efforts, I avoid comparing myself to
others, and
<a href='..//blog/listening-to-pain/'>I listen to my body</a>. If I
ever feel any pain, I take it very seriously.
</p>
<p>
This plan can be a bit lonely because you do not have someone to
encourage you or to antagonize you. Your motivation has to come from
different places. If you are not very competitive, it is probably
extreme overkill. But for me, I feel like it is an easy rule to
follow that leads to a reduction in injuries.
</p>
<p>
It is worth it to challenge your assumptions about trying hard. Are
you compromising your body for the sake of extra gains? Is it really
worth it? What if it leads you to a big injury that means you cannot
do the activity you love again? I try to organize my activities
based on avoiding injury. Another strategy is to train harder that
you need to. Another strategy might be to practice not caring about
the results of competitions. Anyway, avoiding injury should be a
chief concern and not one that is superseded by competition.
</p>]]></description>
</item>
<item>
<pubDate>Wed, 22 Apr 2015 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/posture-checkpoints</guid>
<link>http://www.ryantm.com/blog/posture-checkpoints</link>
<comments>http://www.ryantm.com/blog/posture-checkpoints#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Posture Checkpoints</title>
<description><![CDATA[<p>
Throughout the day I have developed little cues that cause me to
assess and fix my posture. By developing these triggers, I am able to
develop a continuous focus on good posture. I think this is a
temporary behavior. Once I have fully habituated to good posture, I
probably will not need to think about it nearly as much. But in the
mean time, I have posture checkpoints.
</p>
<p>
One major checkpoint for me is sinks. Whenever I am at a sink, I check
and reset my posture. Are my feet forward? Are my gluteal muscles
activated? Is my rib cage in correct alignment with the rest of my
body with my shoulders back? I do a quick check whenever I am at a
sink.
</p>
<p>
When I walk around the office, I try to think about my upper body
posture. I try to focus on keeping my shoulders back and my scapula
flat against my back rib cage. This habit alone probably reversed my
rounded shoulder posture that I had developed from sitting in front of
a computer with bad posture for almost two decades. Slowly over time,
my pectoral muscles stretched out and my upper back muscles started to
shorten and activate more. It is fun to feel how unobstructed your
breathing feels when your upper back muscles are activating nicely. It
feels good to be able to contract muscles that I did not even know I
had.
</p>
<p>
Another checkpoint for me is right before I go to bed. Even though I
know I am probably going to move into a bad position when I fall
asleep, I try to make sure that I have my body in a nice neutral
position before I fall asleep. Sometimes that means moving a pillow
into places to keep my spine and pelvis more neutral while sleeping on
my side.
</p>
<p>
I am also trying to develop a posture checkpoint related to sitting in
a chair. I have not yet managed to develop it well, and I still find
myself in a state of horrible posture while sitting in a chair or in
front of a computer. Somehow, this is the hardest bad posture habit
for me to break. I think it might be because I can focus so fully on
programming or other tasks that I totally lose focus of what my body
is doing, and it defaults to bad old habits.
</p>
<p>
Even though I have managed to reverse some of the ill effects of bad
posture while sitting in front of a computer, I have not managed to
stop doing it. I would definitely be open to suggestions for how to
periodically assess your posture while working in front of a
computer. One idea I've heard of is to have a device that vibrates at
a periodic interval to remind you of something. You choose what it
reminds you of, so I could choose sitting posture. Another idea would
be to not let myself think about anything else unless my posture is
good. Basically, make yourself so picky and annoyed by your bad
posture that you cannot do anything else until you correct it. I think
eventually this could work, but the pain and initial productivity loss
might not be worth it. One last idea would be to mostly ban sitting
from my life. For example, I could try to use my standing desks more
frequently and build up my standing endurance. This is something I
want to do anyway, but I feel like it is a false solution. I want to be
able to have a good posture, even when I am forced to sit.
</p>
<p>
Do you have any checkpoints where you correct your posture? What cues
do you have to think about your posture or body mechanics? Any ideas
how I can fix my posture while engrossed by a computer?
</p>]]></description>
</item>
<item>
<pubDate>Tue, 21 Apr 2015 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/dedicated-to-the-public-domain</guid>
<link>http://www.ryantm.com/blog/dedicated-to-the-public-domain</link>
<comments>http://www.ryantm.com/blog/dedicated-to-the-public-domain#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Dedicated to the Public Domain</title>
<description><![CDATA[<p>
At the bottom of every page on this website, I have a little Public
Domain icon. If you hover over it, it says:
</p>
<blockquote>
To the extent possible under law, Ryan Mulligan has waived all
copyright and related or neighboring rights to www.ryantm.com.
</blockquote>
<p>
I do not want to copyright my work, and I want to make it available
to anyone who wishes to use it.
</p>
<p>
I feel morally compelled to put my work into the public domain. To
the extent that my work is copyrighted or patented, I am warranting
the government to use force against people to compel them to the
terms of copyright and patent law. If I am able to free my works
into the public domain, the government loses a justification for
using force against the copier. When someone uses copyright law,
they are condoning the copyright system and the governmental
enforcement of it. It strikes me as uncivilized to see someone
copyrighting their work. They are reminding me that their big pal,
the government, can come around and force me to do or not do
something if they do not like what I have done. I do not want to put
the people that I meet in life into that kind of position. I do not
want them to have to worry about what governmental actions I might
invoke on them at a later time period.
</p>
<p>
Some people are not that worried about this governmental action
because they believe that they will make the right decision about
who to censor and who to let freely use the works. But we do not
live forever, who can guarantee that our estate will be so wise and
benevolent? Even if you did carefully construct your will and estate
to wisely choose who should benefit from your works, the government
might choose to enforce the copyrights against people they did not
like and wanted to harass. To me, it is better to take this off the
table while I am still around.
</p>
<p>
I feel that work in the public domain is inherently more valuable. It
can be freely remixed, translated, expanded, fixed, distributed, and
sold. Encountering such unencumbered information in the world is
refreshing and exciting. What might people do with my work or other
works in the public domain? This might be a good time to remind you
that the
<a href='https://github.com/ryantm/ryantm.com'>source code of my website</a>
is available for anyone to see and modify. Please make a pull request
or an issue if you notice something is wrong!
</p>
<p>
When you see a work in the public domain, you do not have to wonder if
you can use it. You can. You do not have to consult anyone before
using it. You just use it. There is a constant overhead or resistance
to using the works of most people. With a public domain dedication,
you are greasing the wheels of sharing and improving the value your
work delivers to those who come upon it. You are maximizing the
number of people that can benefit from it.
</p>
<p>
Using a public domain dedication seems more consistent with
reality. There is no force or logical reason stopping us from
copying and reproducing items we see around us. On the contrary,
almost everything we do is naturally copied from other people. Can
you imagine if someone copyrighted a language, or patented walking?
The concept of copyright and patents do not seem grounded in a
reasonable understanding of reality. I see them as a ideology
created by people trying to monopolize activities who convinced
enough people that they should give in to their base desire to be
unique and their narcissistic belief that they are capable of
producing some idea that the world owes them for.
</p>
<p>
It feels good to do work that is open and freely available. I know
that when I share it, there is no catch. There is no trap laid out for
unsuspecting people to fall in and get on my bad side. I am giving my
work as broadly and as freely as I can.
</p>
<p>
I hope that you will consider doing the same. Unfortunately, the
government has made the default be that works are copyrighted. Set
your work free with a public domain dedication.
</p>]]></description>
</item>
<item>
<pubDate>Mon, 20 Apr 2015 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/fix-yourself-by-searching</guid>
<link>http://www.ryantm.com/blog/fix-yourself-by-searching</link>
<comments>http://www.ryantm.com/blog/fix-yourself-by-searching#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Fix Yourself By Searching</title>
<description><![CDATA[<p>
When something is not right about our bodies, we should take matters
into our own hands. I am a strong believer in self help being the
basis for any self improvement or repair. This is true even when
guided by a Physical Therapist. Andrea tells me that the patients that
take interest in their therapy and do their home exercises are the
ones that consistently get better. For most cases, the ones that take
a lot longer to get better, or never get better are the ones not
paying attention or not doing their home exercises. If I do not care
or keep focus on my problems, I will not be able to affect changes in
my body. If I do not take care, who will?
</p>
<p>
One of the critical skills in self care is research. Being able to
determine what muscles, tendons, or joints are hurting you is an
amazing first step in fixing the problems. It does not always work,
and for those cases you can benefit from the help of a professional,
but you will probably be able to have a more informed conversation if
you do some research first.
</p>
<p>
To start, I like to search for a particular area followed by the word
"anatomy". After hiking six miles yesterday, the front of my right
lower leg hurts. So I did a picture search for "front lower leg
anatomy". This yields many high-quality pictures that help me to
narrow down what a muscle or group of muscles that is annoying me is
called.
</p>
<p>
After you narrow down which muscles it might be, you can do a video or
website search for that name followed by terms like "mobilization",
"stretch", or "strengthening" depending on your issue.  In my case,
searching "peroneal mobilization" leads to a website of one my
favorite YouTubers
<a href='http://www.athletestreatingathletes.com/mobilization-techniques/peronealshin-mobilizations/'>Athletes Training Athletes</a>
which I think would be a great tutorial for me to follow in this
case. I am amazed by the vast repository of images, websites, and
videos awaiting me by following a simple chain of research about parts
of my body. Often times you can find videos by Physical Therapists who
usually tell you exercises that are safe to perform. Of course, with
any research, you need to use your best judgment and listen to any
pain you feel to decide if the exercise is appropriate for you or not.
</p>
<p>
Andrea will sometimes advise her patients to "stay off of the
internet". The reason for this is that sometimes patients will read a
website that says something like this: "Pain in your leg could be a
sprain, fracture, or cancer." Some people assume the worse and get
themselves anxious. This is not what I mean by self help! Of course
you do not ignore all the symptoms. If they combine together to
indicate something major, you should see a doctor, but do not
automatically assume the worst! Most people probably have a sprained
ankle. Think about what is the most likely cause in your situation,
and start there. If interventions based on that theory do not seem to
work, evolve your theory, or see a professional.
</p>
<p>
I feel like there is so much information and help out there in the
world. Reach out for yourself and your body and seek whatever you need
to help yourself. It is often only a few searches away.
</p>]]></description>
</item>
<item>
<pubDate>Fri, 17 Apr 2015 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/add-on-habit-toe-touches-while-rinsing</guid>
<link>http://www.ryantm.com/blog/add-on-habit-toe-touches-while-rinsing</link>
<comments>http://www.ryantm.com/blog/add-on-habit-toe-touches-while-rinsing#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Add on Habit Toe Touches While Rinsing</title>
<description><![CDATA[<p>
Here is the newest add on habit I picked up lately: toe touch
stretches while rinsing my mouth with
<a href='http://www.target.com/p/up-up-anticavity-kid-s-fluoride-rinse-bubble-gum-flavor-16-9-oz/-/A-14950455'>up & up™ Anticavity Kid's Fluoride Rinse - Bubble Gum Flavor</a>.
</p>
<p>
Yes, I am particular about my mouth wash brand. I have been in the
habit of using fluoride mouthwash ever since I had to have a root
canal and, along with flossing, this has paid great dividends of not
needing any additional cavities or fillings (so far!) after my teeth
stabilized. Now I have added toe touching while doing this. Since I
use a very mild mouthwash, I am able to leave it in my mouth for a
couple minutes, so I have plenty of time to do a little stretching. I
do a few repetitions of trying to touch my toes.
</p>
<p>
Currently, I lack flexibility in my upper back and hamstrings to touch
my toes. I do active isolated stretching, with slow rhythmic
stretches. I start with my arms straight above my head and then slowly
move them down to as close to the floor as I can reach. I try to
engage my core muscles and move my weight around to stretch different
parts of the backs of my legs.
</p>
<p>
Getting some regular stretching time in will be good for counteracting
the tight muscles in the backs of my legs from sitting and also from
cycling. Combined with some mobilization of my muscles, I am hoping to
be able to touch my toes for the first time in my life. I feel like
toe touching is one of these fitness indicators that is ingrained in
my head. Maybe it is from one of those Presidential Fitness Tests I
had to do in grade school.
</p>
<p>
For me, it has been easiest to add on habits during my normal hygiene
habits in the morning and night. It feels good to be getting clean and
also working on my musculoskeletal system at the same time. If you
have not tried it yet, I recommend both mouth washing and toe touching
(independently or together), so go off and multitask to better health
and fitness!
</p>]]></description>
</item>
<item>
<pubDate>Wed, 15 Apr 2015 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/habit-formation-progression</guid>
<link>http://www.ryantm.com/blog/habit-formation-progression</link>
<comments>http://www.ryantm.com/blog/habit-formation-progression#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Habit Formation Progression</title>
<description><![CDATA[<p>
Here are the different stages I think people go through when they are
forming habits. Depending affinity for the habit people might quickly
skip over certain stages. Sometimes we have a bad experience with a
habit and we move backwards through the progression.
</p>
<h2>I do not know about doing this.</h2>
<p>
The first stage and the most common stage for people to be in. This is
the stage where they have never heard about doing this activity. Any
specific habit is probably not going to be popular or well known to
most of the people in the world. This is not really a stage, more of a
catchall for everyone not aware of a habit.
</p>
<h2>No one can do that.</h2>
<p>
When we hear about people behaving a certain way, it can be
unbelievable that they can do and like doing it. For open minded
people, this can seem like a invalid stage also, but there are a lot
of people who refuse to accept different ways of life and habits in a
very exclusionary way. For example, take someone who believes no one
can live without the Internet or electricity in their house.
</p>
<h2>Why would anyone want to do that?</h2>
<p>
At this stage, we believe people can do it, but it seems abhorrent to
do so. For example, waking up early can seem to be so bad that it is
hard to believe people actually want to do it. We accept they can do
it, but do not understand why they want to. They must be masochists.
</p>
<h2>I would never want to do that.</h2>
<p>
Now we understand why people do it, but we do not value what they get
out of it. Our values are not in alignment with doing this habit. It
does not feel like we will personally gain anything by doing it.
</p>
<h2>I can not do that.</h2>
<p>
At this stage, we see the value in the habit, and see ourselves being
happy doing it consistently. But, we do not know how to begin. Our
body and mind are not ready to embrace the full consequences of the
habit. We have not learned the necessary skills or do not have the
necessary equipment to begin.
</p>
<h2>I tried doing that but it did not stick.</h2>
<p>
At this stage you did it a couple of times, but stopped before it
stuck. This includes habits restarted every time New Year's comes
around. A lot of habits might accumulate at this stage. They are the
habits you see your best self doing, and the habits you once had fully
internalized but have since stopped.
</p>
<h2>I have made it part of my routine.</h2>
<p>
I figured out how to fit this in to my daily, weekly, or monthly
routine. I can keep doing it regularly if I focus on it. I need help
from add-on habits and maybe other people to keep doing it.
</p>
<h2>
This is really hard and I have think about it a lot and I do not
want to continue.
</h2>
<p>
Once a habit becomes part of your routine, you start to adapt to
it. This can be really hard and make you feel like the habit is a huge
burden on yourself. You feel yourself changing and the change does not
necessarily feel all good. You feel yourself wanting to resist the
change. For example, I decided I would commute to work on a bike last
December. At first this felt all-consuming, like my entire life now
revolved around my habit of spending a hour on a bike a day. This
point is hard to get past and often makes you want to give up a
habit. This is the hardest stage. Once you get over it you are likely
to get to the end of the progression.
</p>
<h2>I am getting used to this.</h2>
<p>
The habit is getting easier to do and it takes much less effort and
willpower to continue.
</p>
<h2>I miss doing this.</h2>
<p>
At this point, the habit is so part of your routine that you miss
doing it. If a day goes by where you cannot do your activity, you feel
a small loss. You actively try to arrange your entire life so you can
keep up the habit. These are the powerful forces of addiction. They
can be forces for good or bad depending on the habit.
</p>
<h2>What habit?</h2>
<p>
When a habit is completely internalized, you think nothing of it. For
example, you might think nothing of putting on your shoes before you
go outside for a walk. At this stage, the habit is so ingrained that
it is hard to separate it from your identity and sense of self. If
someone takes away your habit, you will be indigent. But you do not
even notice when you are doing it.
</p>
<p>
This is the habit progression as I see it. Did I miss a stage? What
stage are you at on the habits you are trying to add into your life?
How can you bump the positive ones up a level?
</p>]]></description>
</item>
<item>
<pubDate>Tue, 14 Apr 2015 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/always-have-a-project</guid>
<link>http://www.ryantm.com/blog/always-have-a-project</link>
<comments>http://www.ryantm.com/blog/always-have-a-project#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Always Have a Project</title>
<description><![CDATA[<p>
Wanting to keep improving means always having a project that you are
working on. In the context of improving my physical health, I now
always have a few projects I am working on. Having these projects
helps focus my improvement activities and helps keep my positive as I
notice myself improving in those areas.
</p>
<p>
Working on increasing the mobility of the tissues in my upper left arm
is one of my projects. I can feel that when I raise my left arm
straight up, my shoulder sometimes pops and I feel the left scapular
muscles on stretch or sticking. It is quite different from how the
same motion consistently feels on the right side. To work on it, I
have been mobilizing the tissues in the area and trying to think about
daily habits that might be contributing to the tightness. I have not
been doing as much strengthening as I should. If my triceps were in
better shape, I think it would help the situation a lot.
</p>
<p>
Another project is my left hip. My left hip joint harbors some pain
when I touch the joint capsule. I have been working on trigger points
in my IT band and gluteus medius. Also, I am focusing on activating my
gluteus medius to keep my hip in better positions. Recently, Andrea
helped me loosen up my IT band considerably by attacking some trigger
points in it, and I noticed I am getting less medial pain in my knee
while biking even while increasing intensity.
</p>
<p>
The other project I am working on is getting a six-pack. I know what
you are thinking, "how cliché". But I feel like having strong core
muscles and a lean body is an important general indicator of health
and seeing my muscles starting to grow out of nowhere when I look in
the mirror is a great feeling. Spousal compliments in this area also
reinforce and encourage. For this, I am trying to do planks somewhat
regularly and I am bicycling to work almost every day for roughly 50
miles of cycling a week. By making sure to engage my core muscles
while cycling, I think it is slowly helping build these muscles.
</p>
<p>
These are just my current top-of-my-mind projects on body health. If
one of them starts to get completed or stops improving quickly, I
might switch over to another goal, or seek outside help to help
improve. I think it is important to have some focus. Having just a few
goals to work on lets you assess your situation and progress
better. It also lets you pay attention to the small factors that might
be affecting these particular projects.
</p>
<p>
Another reason to have projects is that if you do not, what will you
work on? Being aimless in your health or other life goals is a sure
way to look back and feel like you wasted your time. They say when
people retire if they have a hobby or friends to hang out with they
will live for a lot longer. I think this same concept applies in a
less extreme way to all of the various aspects of your life. If you do
not have a project in that area of your life, that area is probably
slowly dying.
</p>
<p>
Maybe a project you focus on does not work out, but at least you
worked on it. I feel much better knowing I put effort into trying to
improve, than I do from looking back at places in my life where I did
not try. More often, you will find the focus will cause you to improve
significantly in the areas you are focusing on.
</p>
<p>
What projects are you working on?  Do you have a set of projects in
different areas of your life? These projects are my projects in the
area of musculoskeletal health. I have other projects in other areas
of my life. What areas are you trying to constantly improve in?
</p>]]></description>
</item>
<item>
<pubDate>Mon, 13 Apr 2015 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/posture-power-butt-squeezed</guid>
<link>http://www.ryantm.com/blog/posture-power-butt-squeezed</link>
<comments>http://www.ryantm.com/blog/posture-power-butt-squeezed#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Posture Power Butt Squeezed</title>
<description><![CDATA[<p>
The next critical posture point is the hips. First, do not forget to
<a href='../blog/posture-power-feet-forward/'>keep your feet forward</a>
The easiest way to get your hips in proper alignment is to squeeze
your butt. When you flex your gluteal muscles the hips get pulled into
proper alignment with respect to your legs and lower back.
</p>
<p>
Having good hip posture can help with lower back and lower extremity
issues. The proper hip rotation can give your lower back the right
curvature and move your knees into a better position that supports
your weight.
</p>
<p>
When I use my standing desk, I notice that when I flex my gluteal
muscles, there is less stress on my knees and the surrounding
tissues. This might seem surprising, but our bodies are a chain of
muscles and bones that all connect together. I love the feeling of
locking into a good posture. I feel like all my muscles are flexing
just right and supporting my weight and taking the load of my joint
tissues.
</p>
<p>
Making a habit of squeezing your butt at some regular times of the day
will help improve your tone and the endurance of the muscle group, so
it will be more likely to work while you are going about your
day. Unfortunately, modern life with lots of sitting has made these
muscles flabby. While you are sitting it is hard to activate your
gluteal muscles. The more you sit, the more they atrophy and your
ability to activate the muscles diminishes.
</p>
<p>
Luckily you can reverse the trend and send recruit these muscles to
aid you in attaining posture power. The goal is to form the habit
where you assess and work on your posture regularly throughout the
day. At first, this will seem almost hopeless, but if you keep it up,
you will start noticing that you automatically assume the correct
posture as you go about your day.
</p>]]></description>
</item>
<item>
<pubDate>Fri, 10 Apr 2015 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/youtuber-review-smart-stretch</guid>
<link>http://www.ryantm.com/blog/youtuber-review-smart-stretch</link>
<comments>http://www.ryantm.com/blog/youtuber-review-smart-stretch#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>YouTuber Review Smart Stretch</title>
<description><![CDATA[<p>
As part of a new series, I will review YouTuber channels that I find
useful and interesting. First up is
<a href='https://www.youtube.com/user/smartstretch/videos'>Smart Stretch</a>.
</p>
<p>
I like Smart Stretch because the channel is thorough, soothing, and
covers stretching most of the body. Watching the videos puts me into a
good mood and makes me feel confident that the videos demonstrate good
form.
</p>
<p>
If your hamstrings are tight, and they probably are if you are reading
this while sitting in a chair, he has a video on
<a href='https://www.youtube.com/watch?v=KvLSoHeSDBY'>active isolated stretching of the hamstring</a>.
</p>
<p>
It is also inspiring to see someone with so much flexibility. It gives
me an aspirational inspiration.
</p>]]></description>
</item>
<item>
<pubDate>Wed, 08 Apr 2015 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/how-i-cured-my-chronic-ankle-pain</guid>
<link>http://www.ryantm.com/blog/how-i-cured-my-chronic-ankle-pain</link>
<comments>http://www.ryantm.com/blog/how-i-cured-my-chronic-ankle-pain#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>How I Cured My Chronic Ankle Pain</title>
<description><![CDATA[<p>
Actually, it was not me. Andrea gets all the credit for this one!
</p>
<p>
My chronic ankle pain started four years ago when I was playing soccer
with my co-workers, and I got an ankle sprain that I did not think was
that bad. I was barely feeling the acute pain after only a couple of
days: a happily swift recovery.
</p>
<p>
Unfortunately, I began to notice that I had a twinge of pain in my
ankle when I walked on it. It would be particularly bad after getting
up from a chair and it would come and go. It never annoyed me enough
to seek help but I asked Andrea (my girlfriend and student of physical
therapy at the time) to look at it. She performed all the ankle tests
she knew and none of them produced any obvious results. It seemed like
my ankle was strong and healthy. The question was, why was the pain
still there though? It would bother me occasionally and at some point
I was resigned to having these ankle pains for the rest of my life.
</p>
<p>
Luckily for me though, a physical therapy student eventually becomes
an experienced physical therapist. Experienced physical therapists
know that the body is a complex system with the parts of the body
connected in a chain. Also, pain felt in one place might be caused by
a problem in another.
</p>
<p>
One night, I said "I wonder if I will have this ankle pain forever."
Andrea said, "You know, I wonder if it is actually your hip." She
did a couple of tests and suggested some hip strengthening exercises
that I could do that might help.
</p>
<p>
It amazes me that since that night, I basically have had no episodes
of this chronic pain that had been slightly annoying me for almost
three years. That is some precision knowledge deployment there! As
long as I keep my hip strong, I probably will never have to feel that
pain again.
</p>
<p>
I think a lot of people might be able to benefit from similar
experiences. Do not stay quiet about your chronic pains, even if they
are small. Research them, try doing light strengthening exercises to
help alleviate the issue. If it does not get better, seek the advice
of your doctor or physical therapist. The longer you wait to treat a
chronic malady the harder it will be to remediate.
</p>]]></description>
</item>
<item>
<pubDate>Tue, 07 Apr 2015 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/why-slouching-is-bad</guid>
<link>http://www.ryantm.com/blog/why-slouching-is-bad</link>
<comments>http://www.ryantm.com/blog/why-slouching-is-bad#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Why Slouching Is Bad</title>
<description><![CDATA[<p>
When I was little I got some cues from adults that slouching is bad
and that I should try to maintain good posture. Until recently, I
never really took their advice to heart. I do not recall anyone
explaining to me why I should not slouch and at some point, no one
reminded me about slouching anymore during class or at home in front
of the computer. I will try make a case for why it is bad.
</p>
<p>
Even though I have internalized this case, I still have not conquered
my slouching habits. When I am focusing and using a computer, my
posture suffers greatly. But, by being mindful of my posture, I think
I am steadily increasing the percentage of time that I am not in a
terrible position.
</p>
<p>
I see you shifting in your chair as you read this. Get comfy and
balanced as we build our case against slouching.
</p>
<p>
When you slouch you support your body through your spine and the discs
in your spine. It is like you are hanging your body off of your
spine. With good posture, your body weight is supported through your
muscles that wrap around your body. Your muscles are much better at
taking load and abuse of the weight of your body than your vertebra
and discs. Your muscles heal more quickly and respond to stresses by
getting stronger. Your bones and discs are not good at responding to
stresses and eventually can be worn down from repeated stresses. When
slouching, people tend to have the head far out of alignment from
where it would be in a neutral postural position. The more out of
alignment it is the more force your body (probably your spine if you
are slouching) needs to generate to keep you from falling over.
</p>
<p>
I think that the sudden rib pain I was feeling in my left ribcage was
because I was crushing the little muscles that are between the
ribs. Since I started slouching less and building up the muscles that
support this region, I have not had any shooting or sudden pain in my
ribs.
</p>
<p>
Slouching also reduces the size of your lung cavity. Some of the
muscles that are responsible for posture are also responsible for
breathing. If you maintain a good posture, these muscles will be
stronger and more capable in helping you breathe. If you slouch for
most of the day, you might even find these postural breathing muscles
have atrophied to the point where they can barely be activated. The
muscles that move when you breathe while slouching will have to work
harder. You also probably will not get the full range of motion of
your diaphragm. You will not be getting good "deep" breaths that fill
your lungs.
</p>
<p>
Lastly, by slouching or resting your body on the back of a chair, you
are depriving yourself of balancing practice. When you use your
postural muscles, they have to maintain your balance so you do not
move or fall. This might not seem like much, but having good balance
and proprioception is important for all the movements you make with
your body. Good sense of body position will make you more likely to
assume a good position while performing an activity that you have not
developed your skill at. Overall, the better your balance and postural
muscles are the less likely you will put yourself into a compromising
position and get yourself hurt.
</p>
<p>
Well there it is, the case for why we should not slouch. It is a noble
goal, but also a hard to achieve one. Be mindful of your position and
you will improve your posture over time. Choose to go down the path
toward improved posture one step at a time. We have years of bad
habits to break down, but thankfully we all have plenty of time to do
it!
</p>]]></description>
</item>
<item>
<pubDate>Mon, 06 Apr 2015 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/cultivating-your-time</guid>
<link>http://www.ryantm.com/blog/cultivating-your-time</link>
<comments>http://www.ryantm.com/blog/cultivating-your-time#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Cultivating Your Time</title>
<description><![CDATA[<p>
I used to spend a lot of my time playing video games. I played for
many hours on the weekends and on some week nights after work. It felt
fun and fulfilling in the moment, but the aftertaste was not good. I
felt like I was wasting the little time I have to live; that I was not
living well. I tried giving it up a number of times, but I kept
falling into my habit of gaming for hours.
</p>
<p>
I like to think of our time as a field has various crops being
cultivated in it: families, jobs, hobbies, cooking, leisure, etc. By
continuing to live we invariably live in some way that uses our
time. You can look at your field of time and see what is using it
up. Maybe your job and commute is a big orchard in the middle of the
field; maybe you have carved out a small garden where you tend to your
favorite hobby. Whatever you spend time on is what is growing in your
field. Some of the cultivars are carefully planted and produce a sweet
fruits. Some are weeds, filling in the land by default. Some of the
land is mortgaged and you must grow cash crops on some of the land to
pay back the debt.
</p>
<p>
How you think about what is growing in your field is different from
how I feel about what is growing in mine. I feel like activities like
playing games and reading news are weeds. They grow to fill in all the
space not being used by the more structured farming. The trouble with
weeds is if you remove them all from your field, you leave behind
empty space that has to be filled in with something. The field of your
life cannot be empty, because you are always living. So what grows in
place of the weeds you banned from your field? More weeds.
</p>
<p>
Reducing video game playing and news reading does not work for me. If
I ban video games, I find myself doing some other activity that does
not seem valuable either. Instead, I have found what works is to
carefully cultivate habits that crowd out these weeds. Perhaps making
health and exercise my ground cover, writing these posts a few rows of
trees, and calling my parents and sister regularly a soothing grove.
</p>
<p>
It is like a game to keep the field growing what you want it to be
growing such that it crowds out all the wasted time, the weeds in
your field. One cool part about this for me is it satisfies some the
same desires satisfied by playing video games: how can I optimize
and plan my habits so that I feel like I am building a lovely field
that I will be proud to have created? This is the question I am
answering and I hope you will too for yourself.
</p>]]></description>
</item>
<item>
<pubDate>Fri, 03 Apr 2015 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/what-is-a-trigger-point</guid>
<link>http://www.ryantm.com/blog/what-is-a-trigger-point</link>
<comments>http://www.ryantm.com/blog/what-is-a-trigger-point#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>What is a Trigger Point?</title>
<description><![CDATA[<p>
A Trigger Point is a spot in your muscle that has gotten irritated
and forms a tight balled up part of the muscle. Trigger points are
painful to touch or at least when moderate pressure is applied. When
your muscles have bad trigger point or lots of trigger points in
them, they can become tight overall and pull on the tissues and
joints they are connected to.
</p>
<p>
Trigger points can often be treated so they go away completely and
changes in body mechanics, stretching, and massage can keep them from
coming back.
</p>
<p>
There are a bunch of common places where trigger points form. The
first place I learned about is the calf muscles. My calf muscles were
very tight and had a few different trigger points in them. Andrea
taught me that if I press on the trigger points and massage them they
will hurt, but afterward they will feel more relaxed. Sometimes you
have to push hard enough that the muscle becomes inflamed for a few
days in order to make a change in the tissue, but I recommend starting
with light pressure and seeing it that helps.
</p>
<p>
Another common place to have a trigger point is in your upper
trapezius. You will commonly see people massaging the area where the
trapezius meets the upper shoulder. If you have a desk job and your
upper body posture is not good, you will probably have an insanely
tight upper trapezius with plenty of trigger points in it.
</p>
<p>
Since you should <a href='../blog/your-body-should-not-harbor-pain/'>not be harboring pain</a>,
trigger points should be addressed. Ideally, all of your muscles
will not have any painful regions in them when you massage them. It
is amazing to feel how different your calf muscle can feel if you go
from having lots of tightness to having a supple and smooth
muscle. It can almost turn into an obsession to clean out all of the
trigger points that are in your muscles.
</p>
<p>
Be careful and go easy at first. If you go too hard. you can bruise
your muscles or cause a nasty inflammation that makes the muscles
tense up even more. After you have worked on an area, give it a
chance to rest and recover before going at it again. Also, keep in
mind that maintaining your muscles can take less time than waiting
for trigger points to build up and get worse before working on them.
</p>]]></description>
</item>
<item>
<pubDate>Wed, 01 Apr 2015 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/listening-to-pain</guid>
<link>http://www.ryantm.com/blog/listening-to-pain</link>
<comments>http://www.ryantm.com/blog/listening-to-pain#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Listening to Pain</title>
<description><![CDATA[<p>
In addition to recognizing your body should
<a href='../blog/your-body-should-not-harbor-pain/'>not be harboring pain</a>,
you should listen intently and react quickly to the pain you
feel. Throw out the phrase "no pain no gain", and the idea of
"powering through" a workout or exercise. You only get one body; do
not screw it up with short-term thinking! If you knew could only have
one car for the rest of your life, would you be a more careful driver?
I am surprised when I see people beating on their bodies when they are
clearly feeling pain.
</p>
<p>
I am not saying you should never feel any pain, just that if you
continue to have pain doing an activity, you need to change the way
you are going about it. For all but a professional athlete, this
should be easy advice to follow. Look at what you are doing and what
hurts and try to figure out what is going on. Take it easy. Slowly
build up your workload. Work complimentary muscles to help support
problematic areas. Look for problems in your form, posture, and
technique. But, for the sake of your one and only body that you were
given in this life, do not keep doing what you are doing!
</p>
<p>
Recently, I have been biking to work almost every day. It is a 6.5
mile bike ride each way. I noticed that my knees were starting to
hurt. I took many corrective actions. First, I immediately decreased
my cycling intensity so the pain subsided. Second, I mobilized the
tissues surrounding the knee joint and continued to strengthen my hip
muscles. Third, I researched bike posture and fitting to see if I had
a problem. I found that bike seat was too low and this was putting
additional pressure on my knees because I was not going through a
complete-enough range of motion in my knee. Increasing my saddle
height has reduced my knee pain significantly, and I have been able to
pedal harder than before too!
</p>
<p>
If you keep riding into your pains and aches without regard for them,
you will find yourself at a surgeons office. After surgery, you will
probably never be able to reach your peak functioning
again. Preventing injuries before they become serious requires
building up the habit of listening to your body. You never know when a
slight twinge can develop into a trigger point or muscle tear. You do
not need to be paranoid but at the same time do not be blind when an
injury is brewing in your body.
</p>]]></description>
</item>
<item>
<pubDate>Tue, 31 Mar 2015 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/muscle-bundles</guid>
<link>http://www.ryantm.com/blog/muscle-bundles</link>
<comments>http://www.ryantm.com/blog/muscle-bundles#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Muscle Bundles</title>
<description><![CDATA[<p>
When I first started learning about muscles in school, I learned the
major names for muscles: Quadriceps, Biceps, Hamstrings, Calves, Abs,
Pecs. These names are a simplification because they make it seem like
there is only one muscle in these places, when actually these are
names for groups of muscles. The muscles in our bodies form a complex
overlapping, neighboring, and layered system of muscles. Do an image
search for "quadriceps cross section", to see what I mean. There is an
amazing array of muscles and tendons that are next to one another in
the same area.
</p>
<p>
Having all of these tissues packed next to each other has interesting
consequences: strong tissues can compensate for weak ones, tissues can
adhere to one another forming what are called adhesions, they can rub
or snap against each other, and, through tightness, they can limit the
range of motion of one another. This creates a complex system of
interrelations between different muscles. If one of your leg muscles
gets stuck to another, it can start to atrophy as it no longer is
supporting a load. This can further be compensated for by another
nearby muscle taking over the job. Eventually, you lose (or never gain
in the first place) the ability to activate a particular muscle with
your brain, which is called poor motor control.
</p>
<p>
This problems can also be reversed. Adhesions can be broken up, you
can build your muscle control for a particular muscle, you can stretch
your muscles so they do not limit each other, and you can develop a
training routine that makes sure your muscles get the individual
attention they deserve.
</p>
<p>
Once I started to understand these concepts and work through these
problems and interesting thing happened. I started realizing there
were muscles that I did not know I had. An example of this was my
<a href='../blog/add-on-habit-serratus-anterior-at-stop-lights/'>serratus anterior muscles</a>.
I started being able to activate or flex muscles in my body in ways
I had never done before. This is especially empowering and
interesting. When you see a new muscle sticking out from the bundle
of muscles it becomes easier to understand how to train that muscle
and how to treat the problems with it. I am not saying you need to
look like a body builder, but as you go a little bit toward that,
you will start to notice some muscles you see in those pictures.
</p>
<p>
Going down the path of improving your own body's bundles of muscles
requires understanding this concept of the complex systems of your
muscles. The more you learn about this subject, the more you can
address problems, and improve your body's muscular system.
</p>]]></description>
</item>
<item>
<pubDate>Mon, 30 Mar 2015 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/habit-triggers</guid>
<link>http://www.ryantm.com/blog/habit-triggers</link>
<comments>http://www.ryantm.com/blog/habit-triggers#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Habit Triggers</title>
<description><![CDATA[<p>
A trigger for a habit is an event that happens right before you do
your add-on habit. If the trigger is already a memorable and strong
part of your routine, it can serve as a good foundation to lay on
other habits.
</p>
<p>
I am working on developing the habit of writing after I get home from
work. The habit is writing and the trigger is getting home from
work. You can think of these trigger to habit as like neural pathways:
they get stronger the more them and atrophy with disuse. Every time I
write a post after coming home from work, my mind becomes more
accustomed to this being the automatic behavior. It becomes the
behavior that my subconscious mind becomes addicted to. It is the
pattern that it cannot help but fulfill. Your habits become drugs you
are addicted to.
</p>
<p>
Have you ever noticed that you remember very well the first few times
you are learning how to do a task, but after it becomes part of your
routine it fades into the background of your life as an automatic and
effortless action? This is how it feels when you reinforce the
pathways between triggers and habits. At first they are weak and you
can easily stop doing the add-on habit. But by reinforcing the pathway
time and time again, you can hardly help yourself from doing it.
</p>
<p>
A good trigger is something in your life that is already a positive
part that you want to keep. A good trigger is something you do
regularly and easily. I have wrote about some of these triggers before
but here is a combined list of triggers you might be able to use to
add on positive habits yourself:
</p>
<ul>
<li>Brushing your teeth</li>
<li>Flossing</li>
<li>Getting dressed (before or after)</li>
<li>Taking a shower</li>
<li>Putting on deodorant</li>
<li>Going to work</li>
<li>Coming back from work</li>
<li>A day of the week</li>
<li>Walking through a doorway, hallway, or passageway</li>
<li>Sunrise or sunset</li>
<li>Getting in or out of your car</li>
<li>Stopped at a stoplight or in traffic</li>
<li>Before you eat</li>
<li>After you eat</li>
<li>While you wait for the microwave/oven/cooking</li>
<li>Waiting in a line</li>
<li>At a meeting</li>
<li>Before, during, or after exercise</li>
</ul>
<p>
Many of these triggers are probably already available in your
life. Are you taking advantage of them to help develop positive habits
in your life? How many of the triggers above produce a positive
behavior for you? How many of them trigger a banal habit "look
at my cellphone"? What are some other triggers you can think of that
we can benefit from adding a habit onto?
</p>]]></description>
</item>
<item>
<pubDate>Fri, 27 Mar 2015 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/posture-power-feet-forward</guid>
<link>http://www.ryantm.com/blog/posture-power-feet-forward</link>
<comments>http://www.ryantm.com/blog/posture-power-feet-forward#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Posture Power Feet Forward</title>
<description><![CDATA[<p>
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.
</p>
<p>
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.
</p>
<p>
Here are some places you can watch your posture:
</p>
<ul>
<li>At a sink</li>
<li>In the shower</li>
<li>In front of the refrigerator</li>
<li>In a checkout or order line</li>
<li>At a urinal (if you use those)</li>
</ul>
<p>
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.
</p>
<p>
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.
</p>
<p>
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!
</p>]]></description>
</item>
<item>
<pubDate>Wed, 25 Mar 2015 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/add-on-habit-mobilization-at-meetings</guid>
<link>http://www.ryantm.com/blog/add-on-habit-mobilization-at-meetings</link>
<comments>http://www.ryantm.com/blog/add-on-habit-mobilization-at-meetings#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Add-on Habit Mobilization at Meetings</title>
<description><![CDATA[<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
Here is a quick list of body improvement techniques to try while
sitting in a meeting:
</p>
<ul>
<li>Calf mobilization</li>
<li>Ankle rotations</li>
<li>Upper Trapezius</li>
<li>Shoulder rolls</li>
<li>Neck stretches</li>
<li>Tricep mobilization</li>
<li>Rotator cuff mobilization</li>
<li>Rectus Abdominius mobilization</li>
</ul>]]></description>
</item>
<item>
<pubDate>Tue, 24 Mar 2015 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/how-i-cured-my-chronic-back-pain</guid>
<link>http://www.ryantm.com/blog/how-i-cured-my-chronic-back-pain</link>
<comments>http://www.ryantm.com/blog/how-i-cured-my-chronic-back-pain#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>How I Cured My Chronic Back Pain</title>
<description><![CDATA[<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>]]></description>
</item>
<item>
<pubDate>Mon, 23 Mar 2015 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/add-on-habit-balancing-while-dressing</guid>
<link>http://www.ryantm.com/blog/add-on-habit-balancing-while-dressing</link>
<comments>http://www.ryantm.com/blog/add-on-habit-balancing-while-dressing#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Add-on Habit Balancing while Dressing</title>
<description><![CDATA[<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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
<a href='../blog/increase-your-margin-of-error/'>margin of error</a>.
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!
</p>]]></description>
</item>
<item>
<pubDate>Fri, 20 Mar 2015 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/add-on-habit-transverse-abdominis-while-flossing</guid>
<link>http://www.ryantm.com/blog/add-on-habit-transverse-abdominis-while-flossing</link>
<comments>http://www.ryantm.com/blog/add-on-habit-transverse-abdominis-while-flossing#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Add-on Habit Transverse Abdominis while Flossing</title>
<description><![CDATA[<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>]]></description>
</item>
<item>
<pubDate>Wed, 18 Mar 2015 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/your-body-should-not-harbor-pain</guid>
<link>http://www.ryantm.com/blog/your-body-should-not-harbor-pain</link>
<comments>http://www.ryantm.com/blog/your-body-should-not-harbor-pain#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Your Body Should Not Harbor Pain</title>
<description><![CDATA[<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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!
</p>]]></description>
</item>
<item>
<pubDate>Tue, 17 Mar 2015 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/add-on-habit-shoulder-rom-applying-deodorant</guid>
<link>http://www.ryantm.com/blog/add-on-habit-shoulder-rom-applying-deodorant</link>
<comments>http://www.ryantm.com/blog/add-on-habit-shoulder-rom-applying-deodorant#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Add-on Habit Shoulder Range of Motion while Applying Deodorant</title>
<description><![CDATA[<p>
The idea behind this <a href='../blog/add-on-habit-toothbrushing-squat/'>add-on habit</a>
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!
</p>
<p>
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.
</p>
<p>
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.
</p>]]></description>
</item>
<item>
<pubDate>Mon, 16 Mar 2015 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/increase-your-margin-of-error</guid>
<link>http://www.ryantm.com/blog/increase-your-margin-of-error</link>
<comments>http://www.ryantm.com/blog/increase-your-margin-of-error#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Increase Your Margin of Error</title>
<description><![CDATA[<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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!
</p>
<p>
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).
</p>
<p>
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.
</p>
<p>
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.
</p>]]></description>
</item>
<item>
<pubDate>Wed, 20 Aug 2014 09:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/add-on-habit-serratus-anterior-at-stop-lights</guid>
<link>http://www.ryantm.com/blog/add-on-habit-serratus-anterior-at-stop-lights</link>
<comments>http://www.ryantm.com/blog/add-on-habit-serratus-anterior-at-stop-lights#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Add-on habit serratus anterior at stop lights</title>
<description><![CDATA[<p>An <a href='../blog/add-on-habit-toothbrushing-squat/'>add-on habit</a> 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.</p>
<p>Please only try this while you have your car completely stopped at a traffic light. Do not do this while your car is moving.</p>
<p>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.</p>
<p>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.</p>]]></description>
</item>
<item>
<pubDate>Sat, 16 Aug 2014 17:06:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/add-on-habit-toothbrushing-squat</guid>
<link>http://www.ryantm.com/blog/add-on-habit-toothbrushing-squat</link>
<comments>http://www.ryantm.com/blog/add-on-habit-toothbrushing-squat#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Add-on habit toothbrushing squat</title>
<description><![CDATA[<p>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.</p>
<p>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 <a href='http://www.mobilitywod.com/'>Kelly Starrett's mobility workout of the day</a> 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.</p>
<p>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. <b>How do we go from our desire to have a habit to actually having one?</b></p>
<p>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.</p>
<p>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.</p>
<p>What I did last year is add air squatting on to brushing my teeth. You can try this yourself, watch <a href='http://www.mobilitywod.com/2010/08/episode-01-the-first-of-many-beat-downs/'>Starrett's original squat video</a> 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.</p>
<p>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.</p>
<p>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.</p>]]></description>
</item>
<item>
<pubDate>Wed, 05 Jun 2013 09:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/imap-rss-reader</guid>
<link>http://www.ryantm.com/blog/imap-rss-reader</link>
<comments>http://www.ryantm.com/blog/imap-rss-reader#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>IMAP RSS reader</title>
<description><![CDATA[<p>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.</p>
<p>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.</p>
<p>I used a virtual private server from <a href='https://www.digitalocean.com/'>DigitalOcean</a>, 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 <a href='http://plusbryan.com/my-first-5-minutes-on-a-server-or-essential-security-for-linux-servers'>initial server lockdown guide</a>.</p>
<p>Packages to install:</p>
<ul>
<li><b>rss2email</b> feed fetcher and emailer</li>
<li><b>postfix</b> handles email delivery</li>
</ul>
<p>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.)</p>
<pre><code class='html language-bash'>r2e new EMAILADDRESS&#x000A;r2e opmlimport subscriptions.xml</code></pre>
<p>
If you want all of the RSS entries that are currently in your feeds, to show up in your inbox
</p>
<pre><code class='html language-bash'>r2e run</code></pre>
<p>
If you want only new RSS entries, first run
</p>
<pre><code class='html language-bash'>r2e run --no-send</code></pre>
<p>
Some of your feeds might fail. You can delete them with
</p>
<pre><code class='html language-bash'>r2e delete FEEDNUMBER</code></pre>
<p>
You can add new feeds with
</p>
<pre><code class='html language-bash'>r2e add FEEDURL</code></pre>
<p>After rss2email is running how you want it to, set it up as a crontab. Edit /etc/crontab to contain an entry like</p>
<pre><code class='html'>0 *	* * *	ryantm	r2e run</code></pre>
<p>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.</p>]]></description>
</item>
<item>
<pubDate>Mon, 28 Jan 2013 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/voting-against-an-amendment</guid>
<link>http://www.ryantm.com/blog/voting-against-an-amendment</link>
<comments>http://www.ryantm.com/blog/voting-against-an-amendment#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Voting against an amendment</title>
<description><![CDATA[<p>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!”.</p>
<p>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:</p>
<ol>
<li>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.</li>
<li>You plan to vote against his amendment and against the adoption of the resolution.</li>
<li>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.</li>
<li>You do not believe the man, and would like to table the resolution until better proof is made available.</li>
<li>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.</li>
</ol>]]></description>
</item>
<item>
<pubDate>Fri, 25 Jan 2013 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/emacs-marmalade-with-demoted-errors</guid>
<link>http://www.ryantm.com/blog/emacs-marmalade-with-demoted-errors</link>
<comments>http://www.ryantm.com/blog/emacs-marmalade-with-demoted-errors#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Emacs Marmalade with-demoted-errors</title>
<description><![CDATA[<p>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:</p>
<pre><code class='html language-lisp'>(dolist (p my-packages)&#x000A;  (when (not (package-installed-p p))&#x000A;    (package-install p)))</code></pre>
<p>wrap it with the with-demoted-errors macro, which will change the errors from crashes to messages in the *Messages* buffer.</p>
<pre><code class='html language-lisp'>(with-demoted-errors&#x000A;  (dolist (p my-packages)&#x000A;    (when (not (package-installed-p p))&#x000A;      (package-install p))))</code></pre>
<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.</p>
<p>You also need to consider how your subsequent elisp will handle the lack of the packages you desire.</p>]]></description>
</item>
<item>
<pubDate>Sat, 03 Nov 2012 01:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/observational-humor-case-study-1</guid>
<link>http://www.ryantm.com/blog/observational-humor-case-study-1</link>
<comments>http://www.ryantm.com/blog/observational-humor-case-study-1#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Observational humor case study 1</title>
<description><![CDATA[<p>My <a href='http://www.toastmasters.org'>Toastmasters</a> Club, <a href='http://www.powerhousepros.com'>Powerhouse Pros</a>, 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.</p>
<h2>The set up</h2>
<ul>
<li>One speaker, Bobby, quoted someone who said that you only need to do humor in public speaking if you want to get paid.</li>
<li>Bobby also said you need to love your audience as a speaker</li>
<li>In Bobby’s introduction he said that his Toastmaster Contest Trophies were “closeted”</li>
<li>Our president and Toastmaster Emily provided a pop quiz as part of her theme about Multitasking</li>
</ul>
<h2>The monologue</h2>
<ol>
<li>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</li>
<li>I…. Just… Sorry [I am fake crying here]… I love you guys so much — callback to Bobby saying we need to love our audiences</li>
<li>I also prepared a pop quiz for tonight’s meeting</li>
<li>1. True or false: Men are funnier than women</li>
<li>2. True or false: Humor can improve with practice. (That wasn’t funny, it was just a listening comprehension test</li>
<li>3. Performing two or more jokes at the same time can cause fatal results.</li>
<li>— The quiz used similar structure to the quiz questions that all of the participants took.</li>
</ol>]]></description>
</item>
<item>
<pubDate>Sat, 03 Nov 2012 01:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/low-fuss-syncing-for-chrome-secure-shell-sessions</guid>
<link>http://www.ryantm.com/blog/low-fuss-syncing-for-chrome-secure-shell-sessions</link>
<comments>http://www.ryantm.com/blog/low-fuss-syncing-for-chrome-secure-shell-sessions#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Low-fuss syncing for Chrome Secure Shell sessions</title>
<description><![CDATA[<p>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:</p>
<ul>
<li>No global configuration</li>
<li>No portable configuration</li>
<li>Configuration defaults not sensible especially font, color, scrollback buffer size</li>
</ul>
<p>I discovered a way to synchronize most session configuration of Chrome Secure Shell using Chrome bookmark syncing.</p>
<ol>
<li>“Sign in” to Chrome on all your machines and make sure bookmark syncing is on.</li>
<li>On all of your machines, install Chrome Secure Shell</li>
<li>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</li>
<li>Create a bookmark folder for your SSH sessions.</li>
<li>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.</li>
</ol>
<p>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.</p>]]></description>
</item>
<item>
<pubDate>Sun, 19 Aug 2012 01:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/pv-gs180-windows-7-drivers</guid>
<link>http://www.ryantm.com/blog/pv-gs180-windows-7-drivers</link>
<comments>http://www.ryantm.com/blog/pv-gs180-windows-7-drivers#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>PV-GS180 Windows 7 drivers</title>
<description><![CDATA[<p>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.”</p>]]></description>
</item>
<item>
<pubDate>Sat, 04 Aug 2012 01:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/libmysqlclient-dev-is-a-dependency-of-node-js-db-mysql-installation</guid>
<link>http://www.ryantm.com/blog/libmysqlclient-dev-is-a-dependency-of-node-js-db-mysql-installation</link>
<comments>http://www.ryantm.com/blog/libmysqlclient-dev-is-a-dependency-of-node-js-db-mysql-installation#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>libmysqlclient-dev is a dependency of node js db-mysql installation</title>
<description><![CDATA[<p>I was trying to install db-mysql and I ran into this error:</p>
<pre><code class='html language-bash'>> db-mysql@0.7.6 preuninstall /home/ryan/git/mb-js/node_modules/db-mysql&#x000A;> rm -rf build/*&#x000A;npm ERR! db-mysql@0.7.6 install: `node-waf configure build`&#x000A;npm ERR! `sh “-c” “node-waf configure build”` failed with 1&#x000A;npm ERR!&#x000A;npm ERR! Failed at the db-mysql@0.7.6 install script.&#x000A;npm ERR! This is most likely a problem with the db-mysql package,&#x000A;npm ERR! not with npm itself.&#x000A;npm ERR! Tell the author that this fails on your system:&#x000A;npm ERR!     node-waf configure build&#x000A;npm ERR! You can get their info via:&#x000A;npm ERR!     npm owner ls db-mysql&#x000A;npm ERR! There is likely additional logging output above.&#x000A;npm ERR! System Linux 3.2.0-26-generic&#x000A;npm ERR! command “nodejs” “/usr/bin/npm” “install”&#x000A;npm ERR! cwd /home/ryan/git/mb-js&#x000A;npm ERR! node -v v0.8.2&#x000A;npm ERR! npm -v 1.1.36&#x000A;npm ERR! code ELIFECYCLE&#x000A;npm ERR! message db-mysql@0.7.6 install: `node-waf configure build`&#x000A;npm ERR! message `sh “-c” “node-waf configure build”` failed with 1&#x000A;npm ERR! &#x000A;npm ERR! Additional logging details can be found in:&#x000A;npm ERR!     /home/ryan/git/mb-js/npm-debug.log&#x000A;npm ERR! not ok code 0&#x000A;</code></pre>
<p>The way to fix it is:</p>
<pre><code class='html language-bash'>apt-get install libmysqlclient-dev</code></pre>]]></description>
</item>
<item>
<pubDate>Sat, 07 Jul 2012 01:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/why-does-my-garlic-burn-when-i-sauté-it</guid>
<link>http://www.ryantm.com/blog/why-does-my-garlic-burn-when-i-sauté-it</link>
<comments>http://www.ryantm.com/blog/why-does-my-garlic-burn-when-i-sauté-it#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Why does my garlic burn when I sauté it?</title>
<description><![CDATA[<p>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.</p>]]></description>
</item>
<item>
<pubDate>Wed, 04 Jul 2012 01:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/rainbow-smudge-artifact-on-pro8200</guid>
<link>http://www.ryantm.com/blog/rainbow-smudge-artifact-on-pro8200</link>
<comments>http://www.ryantm.com/blog/rainbow-smudge-artifact-on-pro8200#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Rainbow smudge artifact on Pro8200</title>
<description><![CDATA[<p>I have a <a href='http://www.amazon.com/gp/product/B00465W7EC/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B00465W7EC&amp;linkCode=as2&amp;tag=ryanmull-20&amp;l=as2&amp;o=1&amp;a=B00465W7EC'>ViewSonic PRO8200 1080p DLP Home Theatre Projector</a>. 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!</p>]]></description>
</item>
<item>
<pubDate>Sat, 30 Jun 2012 01:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/how-to-survive-angels-landing</guid>
<link>http://www.ryantm.com/blog/how-to-survive-angels-landing</link>
<comments>http://www.ryantm.com/blog/how-to-survive-angels-landing#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>How to survive Angel's Landing</title>
<description><![CDATA[<p>
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:
</p>
<ul>
<li>Go early. The first shuttles start as early as 6AM some times of the year. We got going on the hike at about 8 AM in June and the first part of the trail (even before the refrigerator canyon) was shaded. This made the first part of the trail much more enjoyable.</li>
<li>Use open-finger gloves. Gloves let you hold onto, and run your hand along the chains without hurting your hands. I bought some gloves on sale at REI for $12. Amazon has some nice pairs as well. <a href='http://www.amazon.com/gp/product/B00165HPWY/ref=as_li_tf_tl?ie=UTF8&amp;camp=1789&amp;creative=9325&amp;creativeASIN=B00165HPWY&amp;linkCode=as2&amp;tag=ryanmull-20'>Avenir Classic Cool Cycling Gloves (Black, Large)</a></li>
<li>Use a hydration backpack. A hydration backpack allows you to drink water while keeping your hands free. Some of the spaces along the route are tight enough that you will not have space to put down a bag. I used the <a href='http://www.amazon.com/gp/product/B006ZV58E6/ref=as_li_qf_sp_asin_tl?ie=UTF8&amp;camp=1789&amp;creative=9325&amp;creativeASIN=B006ZV58E6&amp;linkCode=as2&amp;tag=ryanmull-20'>Camelbak Vantage Hydration Pack</a>, which is a lovely versatile pack.</li>
<li>Use the three-point technique as much as possible. The three-point technique is where you always have three points in contact with the ground or chain at all times. For example, both hands on the chain and one foot on the ground. Or one hand on the chain and two feet on the ground.</li>
<li>Keep your weight over your feet. It might seem counter intuitive if you are not a rock climber, but you get a lot more traction if you keep your weight above your feet. Sticking your butt out while scrambling upward can help keep your weight over your feet and avoid slipping.</li>
<li>Avoid sand. Parts of the trail are covered in sand. Avoid stepping in or near these parts of the trail because sand is effectively a lubricant. The one time I slipped on the trail was in a spot with sand. Luckily it was no where near the edge and I did not actually fall over.</li>
<li>Don’t look down. Some people get sick when they look down from heights. If you do, I don’t recommend going. If you insist, don’t look down. Some parts are scary even for us regular folk.</li>
<li>If you follow these tips, you should have a much more pleasant hike. Best of luck on your Angel’s Landing hike.</li>
</ul>]]></description>
</item>
<item>
<pubDate>Tue, 23 Dec 2008 08:47:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/how-to-make-your-own-free-website-in-twenty-minutes</guid>
<link>http://www.ryantm.com/blog/how-to-make-your-own-free-website-in-twenty-minutes</link>
<comments>http://www.ryantm.com/blog/how-to-make-your-own-free-website-in-twenty-minutes#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>How to Make Your Own Free Website in 20 Minutes</title>
<description><![CDATA[<p>
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.
</p>
<p>
The company we will use to host this site is called <a href='http://www.nearlyfreespeech.net'>NearlyFreeSpeech.NET</a>.
</p>
<h2>Signing up</h2>
<ol>
<li>Visit <a href='http://www.nearlyfreespeech.net'>NearlyFreeSpeech.NET</a> now.</li>
<li>Click "Sign Up Now" in the top left.</li>
<li>Click "Create a membership."</li>
<li>Fill out the form and click "Sign Up for NearlyFreeSpeech.NET."</li>
<li>Check your email for the confirmation email.</li>
<li>Click the link in the email, or follow the other sign in methods. Remember the password in the email as well.</li>
<li>Enter your password to log in.</li>
</ol>
<h2>Making your site</h2>
<ol>
<li>Click "Create a new account" on the right sidebar.</li>
<li>Fill out the form and click "Save Changes."</li>
<li>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.)</li>
<li>Click "sites," then "Create a New Site" on the right sidebar.</li>
<li>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."</li>
<li>Click "Continue."</li>
<li>Unless you already have a domain name, select "No" and click "Continue."</li>
<li>Click "Create Now."</li>
</ol>
<h2>Adding your first web page</h2>
<ol>
<li>Open a text editor (on Windows try Notepad).</li>
<li>
<div>
Enter the following text:
</div>
<pre><code class='html language-html'>&lt;html&gt;&#x000A;  &lt;head&gt;&#x000A;    &lt;title&gt;My First Page&lt;/title&gt;&#x000A;  &lt;/head&gt;&#x000A;  &lt;body&gt;&#x000A;    &lt;h1&gt;Hello World Wide Web!&lt;/h1&gt;&#x000A;  &lt;/body&gt;&#x000A;&lt;/html&gt;</code></pre>
</li>
<li>Save your text file as "index.html".</li>
</ol>
<h2>Uploading your first web page ( on windows )</h2>
<ol>
<li>Open Windows Explorer (Shortcut: type "windows+r" then type "explorer" and press enter).</li>
<li>Type "ftp.phx.nearlyfreespeech.net" into the address bar.</li>
<li>Enter your username, "YourUserName_YourWebsiteShortname" and the password you received by email.</li>
<li>Click and drag your index.html file into the directory.</li>
</ol>
<h2>Uploading your first web page ( on Linux )</h2>
<ol>
<li>Open a terminal</li>
<li>type</li>
</ol>
<pre><code class='html language-html'>rcp index.html YourUserName_YourWebsiteShortName@ssh.phx.nearlyfreespeech.net:/home/public</code></pre>
<h2>Visiting your site</h2>
<ol>
<li>Visit your site at http://YourWebsiteShortName.nfshost.com.</li>
<li>Enjoy</li>
</ol>]]></description>
</item>
<item>
<pubDate>Sun, 21 Dec 2008 07:58:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/writing-review-1</guid>
<link>http://www.ryantm.com/blog/writing-review-1</link>
<comments>http://www.ryantm.com/blog/writing-review-1#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Writing Review</title>
<description><![CDATA[<p>
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.
</p>
<h2><a href='..//blog/memory-foam-mattress/'>Cheap Memory Foam Mattress</a></h2>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<h2><a href='..//blog/cutting-out-the-middleman/'>Cutting Out the Middleman</a></h2>
<p>
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.
</p>
<h2><a href='..//blog/title-insurance-prices/'>Title Insurance Prices</a></h2>
<p>
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.
</p>
<p>
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.
</p>
<h2><a href='..//blog/opportunity-monitoring-company/'>Opportunity Monitoring Company</a></h2>
<p>
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.
</p>
<p>
There is an additional opportunity to post explaining how the calculations done by this company would work in practice.
</p>
<h2><a href='..//blog/capital-preservation/'>Capital Preservation</a></h2>
<p>
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.
</p>
<h2><a href='..//blog/systematic-exploration/'>Systematic Exploration</a></h2>
<p>
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 <b>random exploration</b>. 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.
</p>
<h2><a href='..//blog/admitting-you-suck/'>Admitting You Suck</a></h2>
<p>
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.
</p>
<h2><a href='..//blog/cancun/'>Cancun</a></h2>
<p>
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.
</p>
<p>
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.
</p>
<h2><a href='..//blog/non-violent-iraq/'>Non-violence in Iraq</a></h2>
<p>
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 <a href='http://en.wikipedia.org/wiki/Gandhi'>Wikipedia pages about Gandhi</a>.
</p>
<p>
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. <b>I will try to focus on improving my conclusions next week</b>.
</p>
<h2><a href='..//blog/programmer-labor-unions/'>Programmers Will Form Labor Unions</a></h2>
<p>
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.
</p>
<p>
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.
</p>
<h2><a href='..//blog/what-i-learned-playing-muds/'>What I Learned Playing MUDs</a></h2>
<p>
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.
</p>
<h2><a href='..//blog/google-finance-definitions/'>Google Finance Definitions</a></h2>
<p>
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.
</p>
<h2><a href='..//blog/money-burning-charity/'>Money Burning Charity</a></h2>
<p>
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.
</p>
<h2>Reader Comments</h2>
<p>
My friend <a href='http://www.alanlynn.com'>Alan Lynn</a> has this to say:
</p>
<blockquote>
<p>
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.
</p>
<p>
If somebody finds your blog a month from now, would they find your articles valuable enough to read through your archives?
</p>
</blockquote>
<p>
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.
</p>
<p>
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.
</p>]]></description>
</item>
<item>
<pubDate>Sat, 20 Dec 2008 07:58:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/money-burning-charity</guid>
<link>http://www.ryantm.com/blog/money-burning-charity</link>
<comments>http://www.ryantm.com/blog/money-burning-charity#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Money Burning Charity</title>
<description><![CDATA[<p>
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 <b>destroy all of the money donated to it</b>.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
Unfortunately, <b>the burning would not negate the bureau-potism caused by the inflationary system</b>: 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.
</p>]]></description>
</item>
<item>
<pubDate>Fri, 19 Dec 2008 08:09:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/learning-to-write-well</guid>
<link>http://www.ryantm.com/blog/learning-to-write-well</link>
<comments>http://www.ryantm.com/blog/learning-to-write-well#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Learning to Write Well</title>
<description><![CDATA[<p>
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.
</p>
<p>
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 (<a href="mailto:ryan@ryantm.com">ryan@ryantm.com</a>). 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.
</p>
<p>
I think that over time this feedback will become a fun game for improving my writing.
</p>]]></description>
</item>
<item>
<pubDate>Thu, 18 Dec 2008 08:02:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/google-finance-definitions</guid>
<link>http://www.ryantm.com/blog/google-finance-definitions</link>
<comments>http://www.ryantm.com/blog/google-finance-definitions#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Google Finance Definitions</title>
<description><![CDATA[<p>
Have you ever visited <a href='http://finance.google.com/finance?q=goog'>Google Finance</a> and wondered what all of those abbreviated names at the top of it are? Well I am going to explain them to you.
</p>
<p>
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.
</p>
<p>
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.
</p>
<dl>
<dt>Open</dt>
<dd>The price for one share as of the beginning of trading.</dd>
<dt>High</dt>
<dd>The highest traded price of the day.</dd>
<dt>Low</dt>
<dd>The lowest traded price of the day.</dd>
<dt>Vol</dt>
<dd>The number of shares that have changed hands today.</dd>
<dt>Mkt Cap</dt>
<dd>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.</dd>
<dt>52Wk High</dt>
<dd>The highest price of the stock in the last 52 weeks.</dd>
<dt>52Wk Low</dt>
<dd>The lowest price of the stock in the last 52 weeks.</dd>
<dt>Avg Vol</dt>
<dd>The average number of shares that change hand each day.</dd>
<dt>P/E</dt>
<dd>The <a href='http://en.wikipedia.org/wiki/PE_ratio'>price per earnings ratio</a>. It is the number years before the earnings per share would pay back the purchase price.</dd>
<dt>F P/E</dt>
<dd>The P/E using the company's forecasted earnings for the next 12 months. Probably less reliable.</dd>
<dt>Beta</dt>
<dd>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.</dd>
<dt>EPS</dt>
<dd>Earnings per share. It is the net income minus dividends divided by total number of shares.</dd>
<dt>Dividend</dt>
<dd>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.</dd>
<dt>Yield</dt>
<dd>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.</dd>
<dt>Shares</dt>
<dd>The total number of shares outstanding.</dd>
<dt>Inst. Own</dt>
<dd>The percentage of shares owned by mutual funds, pension funds, hedge funds, banks, and insurance companies.</dd>
</dl>]]></description>
</item>
<item>
<pubDate>Wed, 17 Dec 2008 08:15:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/what-i-learned-playing-muds</guid>
<link>http://www.ryantm.com/blog/what-i-learned-playing-muds</link>
<comments>http://www.ryantm.com/blog/what-i-learned-playing-muds#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>What I Learned Playing MUDs</title>
<description><![CDATA[<p>
Multi user dungeons (MUDs) are online games that use text as the primary means of interaction. I created a MUD called <a href='http://www.deimosmud.com'>DeimosMUD</a> 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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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 <a href='http://en.wikipedia.org/wiki/Fixing_Broken_Windows'>fixing broken windows</a>.
</p>
<p>
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.
</p>
<p>
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, <a href='http://www.mudbrowser.com/muds/1'>play DeimosMUD</a> to get a taste of what it must have been like.
</p>]]></description>
</item>
<item>
<pubDate>Tue, 16 Dec 2008 08:26:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/programmer-labor-unions</guid>
<link>http://www.ryantm.com/blog/programmer-labor-unions</link>
<comments>http://www.ryantm.com/blog/programmer-labor-unions#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Programmers Will Form Labor Unions</title>
<description><![CDATA[<p>
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.
</p>
<p>
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.
</p>
<p>
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 <b>painfully similar to a career electrician or welder</b>--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.
</p>
<p>
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. <b>These gains will only increase in the short term as more career programmers are marginalized by their own commoditization.</b> By employing more and more programmers at lower and lower wages, companies employing this strategy will achieve absurd windfalls necessary to spark unionization.
</p>
<p>
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.
</p>
<p>
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. <b>There will be no poor programmers to utilize</b>. When this logical conclusion of globalization occurs, a increasing stability in programmer workforces will occur.
</p>
<p>
When this stabilization occurs all of the factors will be in place for programmer labor unions to arise.
</p>]]></description>
</item>
<item>
<pubDate>Mon, 15 Dec 2008 07:36:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/non-violent-iraq</guid>
<link>http://www.ryantm.com/blog/non-violent-iraq</link>
<comments>http://www.ryantm.com/blog/non-violent-iraq#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Non-violence in Iraq</title>
<description><![CDATA[<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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 <a href='http://en.wikipedia.org/wiki/Khudai_Khidmatgar'>Khudai Khidmatgar</a> 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.
</p>
<p>
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.
</p>
<p>
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.
</p>]]></description>
</item>
<item>
<pubDate>Sun, 14 Dec 2008 08:06:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/cancun</guid>
<link>http://www.ryantm.com/blog/cancun</link>
<comments>http://www.ryantm.com/blog/cancun#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Cancun</title>
<description><![CDATA[<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>]]></description>
</item>
<item>
<pubDate>Sat, 13 Dec 2008 07:36:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/admitting-you-suck</guid>
<link>http://www.ryantm.com/blog/admitting-you-suck</link>
<comments>http://www.ryantm.com/blog/admitting-you-suck#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Admitting You Suck</title>
<description><![CDATA[<p>
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.
</p>]]></description>
</item>
<item>
<pubDate>Fri, 12 Dec 2008 07:43:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/systematic-exploration</guid>
<link>http://www.ryantm.com/blog/systematic-exploration</link>
<comments>http://www.ryantm.com/blog/systematic-exploration#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Systematic Exploration</title>
<description><![CDATA[<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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?"
</p>]]></description>
</item>
<item>
<pubDate>Thu, 11 Dec 2008 07:49:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/capital-preservation</guid>
<link>http://www.ryantm.com/blog/capital-preservation</link>
<comments>http://www.ryantm.com/blog/capital-preservation#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Capital Preservation</title>
<description><![CDATA[<p>
One financial skill that I have been most interested in lately is <b>capital preservation</b>. 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.
</p>
<p>
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%.
</p>
<p>
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 -- <b>one of the most important financial concepts</b>. The more capital you have that generates additional capital, the higher and more quickly your capital preservation rate will climb.
</p>
<p>
<b>Most financially illiterate people actually try to do the exact opposite.</b> 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%.
</p>
<p>
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.
</p>
<p>
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.
</p>]]></description>
</item>
<item>
<pubDate>Wed, 10 Dec 2008 07:56:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/opportunity-monitoring-company</guid>
<link>http://www.ryantm.com/blog/opportunity-monitoring-company</link>
<comments>http://www.ryantm.com/blog/opportunity-monitoring-company#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Opportunity Monitoring Company</title>
<description><![CDATA[<p>
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 <a href='http://www.davidegrayson.com'>David Grayson</a> 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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>]]></description>
</item>
<item>
<pubDate>Tue, 09 Dec 2008 20:28:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/title-insurance-prices</guid>
<link>http://www.ryantm.com/blog/title-insurance-prices</link>
<comments>http://www.ryantm.com/blog/title-insurance-prices#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Title Insurance Prices</title>
<description><![CDATA[<p>
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.
</p>
<p>
<iframe src="http://spreadsheets.google.com/embeddedform?key=p0Gie-mTABIbojC4sMPHibQ" width="310" height="725" frameborder="0" marginheight="0" marginwidth="0">Loading...</iframe>
</p>
<p>
<a href='http://spreadsheets.google.com/pub?key=p0Gie-mTABIbojC4sMPHibQ'>Go here to see the results in real time!</a>
</p>]]></description>
</item>
<item>
<pubDate>Tue, 09 Dec 2008 07:50:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/cutting-out-the-middleman</guid>
<link>http://www.ryantm.com/blog/cutting-out-the-middleman</link>
<comments>http://www.ryantm.com/blog/cutting-out-the-middleman#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Cutting Out the Midddleman</title>
<description><![CDATA[<p>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 <a href='http://en.wikipedia.org/wiki/Bullwhip_effect'>Bullwhip Effect</a>. 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.</p>
<p>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. <strong>Each of these people makes enough money to do real estate transactions full time</strong> (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 <a href='http://en.wikipedia.org/wiki/Flat_fee_MLS'>Flat-fee MLS</a> listing. With a flat listing fee you can save up to 3% of the sale price of your home.</p>
<p>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.</p>
<p>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 <a href='http://www.pololu.com'>new manufacturers</a> are.</p>
<p>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 <a href='../blog/memory-foam-mattress'>sells cheap memory foam mattresses direct</a>. 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.</p>
<p>What middlemen have you dealt with recently and how could you have avoided it?</p>]]></description>
</item>
<item>
<pubDate>Mon, 08 Dec 2008 07:50:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/memory-foam-mattress</guid>
<link>http://www.ryantm.com/blog/memory-foam-mattress</link>
<comments>http://www.ryantm.com/blog/memory-foam-mattress#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Cheap Memory Foam Mattress</title>
<description><![CDATA[<p>
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.
</p>
<p>
After searching the internet for about a day, I stumbled upon The Foam Factory's website for <a href='http://www.mattressbymail.com/memorymattress.html'>Memory Foam Mattresses</a>. 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.
</p>
<p>
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.
</p>
<p>
I have only slept in it for 2 night so far, and I don't have any complaints, but stay tuned for an update.
</p>]]></description>
</item>
<item>
<pubDate>Sun, 05 Oct 2008 19:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/compact-flourescent-lightbulb-efficiency</guid>
<link>http://www.ryantm.com/blog/compact-flourescent-lightbulb-efficiency</link>
<comments>http://www.ryantm.com/blog/compact-flourescent-lightbulb-efficiency#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Compact Fluorescent Lightbulb Efficiency</title>
<description><![CDATA[<div class='right-image'>
<div class='inner-image'>
<img alt='Compact Fluorescent Bulb' src='../images/cfl.jpg'>
<div class='attribution'>
by <a href='http://www.flickr.com/photos/jenorton/' rel='nofollow'>lowjumpingfrog</a>
</div>
</div>
</div>
<p>
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.
</p>
<h2>Energy Efficiencies</h2>
<p>
The <b>input</b> of lightbulbs is their power consumption. Power consumption is measured in Watts. The <b>output</b> of lightbulbs is how bright it is. Brightness is measured in lumens.
</p>
<p>
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.
</p>
<table>
<tr>
<th colspan='4' style='text-align: center'>
<a href='#Table1' name='Table1'>Table 1</a>
</th>
</tr>
<tr>
<th></th>
<th>
Input Power (Watt)
</th>
<th>
Output Light (Lumen)
</th>
<th>
Luminous Efficacy (Lumen/Watt)
</th>
</tr>
<tr>
<th>
Incandescent
</th>
<td>
60
</td>
<td>
850
</td>
<td>
850/60 ≅ 14.16
</td>
</tr>
<tr>
<th>
Compact Fluorescent
</th>
<td>
13
</td>
<td>
900
</td>
<td>
900/13 ≅ 69.23
</td>
</tr>
</table>
<p>
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.
</p>
<p>
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.
</p>
<table>
<tr>
<th colspan='2' style='text-align: center'>
<a href='#Table2' name='Table2'>Table 2</a>
</th>
</tr>
<tr>
<th></th>
<th>
Luminous Efficiency
</th>
</tr>
<tr>
<th>
Incandescent
</th>
<td>
14.16/683.002 ≅ 2%
</td>
</tr>
<tr>
<th>
Compact Fluorescent
</th>
<td>
69.23/683.002 ≅ 10%
</td>
</tr>
</table>
<p>
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%.
</p>
<p>
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.
</p>
<p>
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.
</p>
<h2>Financial Efficiencies</h2>
<p>
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.
</p>
<p>
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 <b>the NPV for the CFL investment is $44.73</b>. Since this number is positive, it means that investing in CFLs is a good option compared to investing in US Bonds.
</p>
<p>
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, <b>the break even point for the CFL investment is at 8 months</b>. At 8 months, you will have recouped your investment and made 17 cents.
</p>
<p>
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 <b>2422%</b> over 9 years.
</p>
<p>
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.
</p>]]></description>
</item>
<item>
<pubDate>Mon, 15 Sep 2008 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/linux-webcams-at-best-buy</guid>
<link>http://www.ryantm.com/blog/linux-webcams-at-best-buy</link>
<comments>http://www.ryantm.com/blog/linux-webcams-at-best-buy#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Linux Webcams at Best Buy</title>
<description><![CDATA[<p>
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.
</p>
<p>
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.
</p>
<table>
<tr>
<th>Name</th>
<th>Works out of box</th>
<th>Resolution</th>
<th>Choppy</th>
</tr>
<tr>
<td>Creative Live Cam Pro</td>
<td>No</td>
<td></td>
<td></td>
</tr>
<tr>
<td>Dynex</td>
<td>Yes</td>
<td>1280 x 1024</td>
<td>Yes</td>
</tr>
<tr style='background-color: #98fc66;'>
<td>Creative Other One</td>
<td>Yes</td>
<td>800x600</td>
<td>No</td>
</tr>
</table>
<p>
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.
</p>]]></description>
</item>
<item>
<pubDate>Fri, 11 Jul 2008 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/ruby-socket-persistence</guid>
<link>http://www.ryantm.com/blog/ruby-socket-persistence</link>
<comments>http://www.ryantm.com/blog/ruby-socket-persistence#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Ruby Socket Persistence</title>
<description><![CDATA[<p>
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.
</p>
<pre><code class='html language-bash'>irb(main):001:0&gt; require 'socket'&#x000A;\=&gt; true&#x000A;irb(main):002:0&gt; sock = TCPSocket.open("google.com",80)&#x000A;\=&gt; #&lt;TCPSocket:0xb7c73c44&gt;&#x000A;irb(main):003:0&gt; sock.fileno&#x000A;\=&gt; 3&#x000A;&#x000A;&#x000A;note that the file number of the socket is 3. Now look at the output of lsof:&#x000A;&#x000A;ryan@rtmlap:~$ lsof -c irb&#x000A;COMMAND  PID USER   FD   TYPE  DEVICE    SIZE    NODE NAME&#x000A;irb     5645 ryan  cwd    DIR     8,2   12288 1441793 /home/ryan&#x000A;irb     5645 ryan  rtd    DIR     8,1    4096       2 /&#x000A;irb     5645 ryan  txt    REG     8,1    3564 1177574 /usr/bin/ruby1.8&#x000A;irb     5645 ryan  mem    REG     8,1   67408  539926 /lib/tls/i686/cmov/libresolv-2.7.so&#x000A;irb     5645 ryan  mem    REG     8,1   38412  539915 /lib/tls/i686/cmov/libnss_files-2.7.so&#x000A;irb     5645 ryan  mem    REG     8,1  254076 1208067 /usr/lib/locale/en_US.utf8/LC_CTYPE&#x000A;irb     5645 ryan  mem    REG     8,1  190584  522320 /lib/libncurses.so.5.6&#x000A;irb     5645 ryan  mem    REG     8,1  196560  522360 /lib/libreadline.so.5.2&#x000A;irb     5645 ryan  mem    REG     8,1   17884  539913 /lib/tls/i686/cmov/libnss_dns-2.7.so&#x000A;irb     5645 ryan  mem    REG     8,1   40016 1210577 /usr/lib/ruby/1.8/i486-linux/socket.so&#x000A;irb     5645 ryan  mem    REG     8,1 1364388  539898 /lib/tls/i686/cmov/libc-2.7.so&#x000A;irb     5645 ryan  mem    REG     8,1  149328  539906 /lib/tls/i686/cmov/libm-2.7.so&#x000A;irb     5645 ryan  mem    REG     8,1   38300  539902 /lib/tls/i686/cmov/libcrypt-2.7.so&#x000A;irb     5645 ryan  mem    REG     8,1    9684  539904 /lib/tls/i686/cmov/libdl-2.7.so&#x000A;irb     5645 ryan  mem    REG     8,1  112354  539924 /lib/tls/i686/cmov/libpthread-2.7.so&#x000A;irb     5645 ryan  mem    REG     8,1  787660 1177653 /usr/lib/libruby1.8.so.1.8.6&#x000A;irb     5645 ryan  mem    REG     8,1    7552  522335 /lib/libnss_mdns4_minimal.so.2&#x000A;irb     5645 ryan  mem    REG     8,1   25700   98159 /usr/lib/gconv/gconv-modules.cache&#x000A;irb     5645 ryan  mem    REG     8,1   15312 1207882 /usr/lib/ruby/1.8/i486-linux/readline.so&#x000A;irb     5645 ryan  mem    REG     8,1  109152  522259 /lib/ld-2.7.so&#x000A;irb     5645 ryan    0u   CHR   136,1               3 /dev/pts/1&#x000A;irb     5645 ryan    1u   CHR   136,1               3 /dev/pts/1&#x000A;irb     5645 ryan    2u   CHR   136,1               3 /dev/pts/1&#x000A;irb     5645 ryan    3u  IPv4 1897889             TCP rtmlap.local:45854-&gt;jc-in-f99.google.com:www (ESTABLISHED)&#x000A;</code></pre>
<p>
Alright, so now here's the snippet that shows persistent sockets:
</p>
<pre><code class='html language-ruby'>#!/usr/bin/ruby&#x000A;#simple_connector.rb&#x000A;require 'socket'&#x000A;&#x000A;puts "Started."&#x000A;&#x000A;if ARGV[0] == "restart"&#x000A;  sock = IO.open(ARGV[1].to_i)&#x000A;  puts sock.read&#x000A;  exit&#x000A;else&#x000A;  sock = TCPSocket.new('google.com', 80)&#x000A;  sock.write("GET /\n")&#x000A;end&#x000A;&#x000A;Signal.trap("INT") do&#x000A;  puts "Restarting..."&#x000A;  exec("ruby simple_connector.rb restart #{sock.fileno}")&#x000A;end&#x000A;&#x000A;&#x000A;while true&#x000A;  sleep 1&#x000A;end&#x000A;</code></pre>
<p>
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.
</p>
<p>
And there you have it, a socket that persists beyond a single program.
</p>]]></description>
</item>
<item>
<pubDate>Mon, 30 Jun 2008 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/lsof-lists-open-file-descriptors</guid>
<link>http://www.ryantm.com/blog/lsof-lists-open-file-descriptors</link>
<comments>http://www.ryantm.com/blog/lsof-lists-open-file-descriptors#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>lsof Lists Open File Descriptors</title>
<description><![CDATA[<p>
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:
</p>
<pre><code class='html language-bash'>lsof -c command-name&#x000A;lsof -p port-number</code></pre>]]></description>
</item>
<item>
<pubDate>Sat, 07 Jun 2008 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/how-to-win-at-scrabulous-using-regular-expressions</guid>
<link>http://www.ryantm.com/blog/how-to-win-at-scrabulous-using-regular-expressions</link>
<comments>http://www.ryantm.com/blog/how-to-win-at-scrabulous-using-regular-expressions#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>How to Win at scrabulous Using Regular Expressions</title>
<description><![CDATA[<div class='right'>
<img src="http://www.ryantm.com/images/Scrabble_board_in_play.jpg" alt="Scrabble" width="186" align="left" height="140" />
</div>
<p>
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.
</p>
<p>
Quick example:
</p>
<pre><code class='html language-bash'>$ wget http://www.ryantm.com/scrabble-word-list.tar.gz&#x000A;$ tar -xvzf scrabble-word-list.tar.gz&#x000A;$ cat scrabble-word-list | egrep "^A[EPABVT]{4}$"&#x000A;ABATE&#x000A;</code></pre>
<p>
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.
</p>
<p>
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:
</p>
<pre><code class='html language-bash'>$ cat scrabble-word-list | egrep "^[EABTTE]*D$"&#x000A;ABATED&#x000A;BATTED&#x000A;BETTED&#x000A;TABBED&#x000A;TATTED&#x000A;TEATED&#x000A;</code></pre>
<p>
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.
</p>
<h3>The General Principle</h3>
<ol>
<li>Take what letters you have an form at set: [BZTQEAI]</li>
<li>Find a starting or ending place: ^ACE or Y$</li>
<li>Put it together with the number of letters you want to use: "^ACE[BZTQEAI]*"</li>
<li>Double check the word with reality</li>
<li>Repeat until you are satisfied with your word score.</li>
</ol>]]></description>
</item>
<item>
<pubDate>Fri, 30 May 2008 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/why-google-gears-and-yahoo-browser-plus-dont-change-the-game-yet</guid>
<link>http://www.ryantm.com/blog/why-google-gears-and-yahoo-browser-plus-dont-change-the-game-yet</link>
<comments>http://www.ryantm.com/blog/why-google-gears-and-yahoo-browser-plus-dont-change-the-game-yet#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Why Google Gears and Yahoo Browser Plus Don't Change the Game Yet</title>
<description><![CDATA[<p>
Hank Williams over at the Why Does Everything Suck blog is saying <a href="http://whydoeseverythingsuck.com/2008/05/yahoos-new-browserplus-game-changer.html">Yahoo Browser Plus is a Game Changer</a>, 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 <strong>get their software on computers</strong>.
</p>
<h2>Developers, Developers, Developers, Developers</h2>
<p>
Getting this <strong>Browser++</strong> software on computers has already been shown to be quite difficult. Until these add-ons get close to the <a href="http://www.adobe.com/products/player_census/flashplayer/version_penetration.html">market penetration of flash</a> they are going to have a particularly<strong> tough time attracting developers</strong>. I was also surprised that while Yahoo Browser Plus seems to be better than Google Gears in a lot of ways, they have <strong>no version targeting Ubuntu Linux</strong>, something that Google Gears has been serious about since the beginning. <em>If you want to attract good developers to your product, you need to run on Linux</em>.
</p>
<h2>Socket Applications Won't Suck as Much</h2>
<p>
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.
</p>
<h2>Future of Browser++</h2>
<p>
I am particularly hesitant to use Browser++ tools to develop my web applications, because <strong>the web is supposed to work everywhere</strong>. 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. <strong>The game hasn't changed, it is changing</strong>.
</p>]]></description>
</item>
<item>
<pubDate>Thu, 29 May 2008 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/delegating-your-openid-authentication-doesnt-work-with-drupal-6</guid>
<link>http://www.ryantm.com/blog/delegating-your-openid-authentication-doesnt-work-with-drupal-6</link>
<comments>http://www.ryantm.com/blog/delegating-your-openid-authentication-doesnt-work-with-drupal-6#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Delegating Your OpenID Authentication Doesn't Work With Drupal 6</title>
<description><![CDATA[<p>
When I read that <a href="http://drupal.org/drupal-6.0" title="Drupal 6">Drupal 6</a> 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 <strong>delegate the authentication</strong> to another company. In my case, I picked this <a href="http://www.myopenid.com">good OpenID providor</a>. I figured out how to do this by watching <a href="http://video.google.com/videoplay?docid=2288395847791059857">Simon Willison's google video talk</a>. All you do is add these few lines to the head element of your OpenID url, but replace 'ryantm' with your username:
</p>
<pre><code class='html language-html'>&lt;!-- / Open Id --&gt;&#10;&lt;link href=&#39;http://www.myopenid.com/server&#39; rel=&#39;openid.server&#39; /&gt;&#10;&lt;link href=&#39;http://ryantm.myopenid.com&#39; rel=&#39;openid.delegate&#39; /&gt;&#10;&lt;meta content=&#39;http://www.myopenid.com/xrds?username=ryantm.myopenid.com&#39; http-equiv=&#39;X-XRDS-Location&#39; /&gt;</code></pre>
<p>
The great part about this is that it works with <strong>any OpenID providor</strong>. 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 <strong>no chance of lock-in</strong>.
</p>
<p>
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 <strong>any url was a valid OpenID</strong>.
</p>
<p>
Anyway, I've created a <a href="http://drupal.org/node/264307">bug report</a> for this so you can follow what's going on. Please add comments to the bug if you are having this problem as well.
</p>]]></description>
</item>
<item>
<pubDate>Sun, 25 May 2008 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/haml-why-you-should-use-it</guid>
<link>http://www.ryantm.com/blog/haml-why-you-should-use-it</link>
<comments>http://www.ryantm.com/blog/haml-why-you-should-use-it#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Haml: Why You Should Use It</title>
<description><![CDATA[<p>
<a href="http://nex-3.com/posts/76-haml-2-0">HAML 2.0</a> is out. I've been using HAML since back when I made my <a href="http://www.sassins.com">Assassins Game Hosting Service</a> 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.
</p>
<p>
<strong>HAML gets rid of end tags.</strong> 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.
</p>
<p>
<strong>HAML generates pretty source.</strong> 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 <a href="http://www.adobe.com/products/dreamweaver/">terrible</a>, <a href="http://office.microsoft.com/en-us/frontpage/default.aspx">horrible</a> 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.
</p>
<p>
<strong>HAML is integrated with Ruby. </strong>ERB's Ruby integration is a joke. All it does it execute Ruby between &lt;% %&gt; 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.
</p>
<p>
<strong>HAML installation is easy.</strong> You can try HAML out right away with little effort, and no conflict with your current Rails installs just do the following:
</p>
<pre><code class='html language-bash'>gem install haml --no-ri</code></pre>
<pre><code class='html language-bash'>haml --rails path/to/app</code></pre>
<p>
I should also mention that HAML is used in my favorite <a href="http://staticmatic.rubyforge.org">static HTML generator</a>, Staticmatic.
</p>]]></description>
</item>
<item>
<pubDate>Wed, 14 May 2008 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/email-reminder-scheduler-replylatercom</guid>
<link>http://www.ryantm.com/blog/email-reminder-scheduler-replylatercom</link>
<comments>http://www.ryantm.com/blog/email-reminder-scheduler-replylatercom#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Email Reminder Scheduler - ReplyLater.com</title>
<description><![CDATA[<p>
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 <a href="http://www.replylater.com">ReplyLater.com</a>. ReplyLater.com lets you schedule email reminders by simply sending emails. Let me show you what I mean.
</p>
<p>
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:
</p>
<pre>BusinessDevelopmentGuy@google.com, 2weeks@replylater.com</pre>
<p>
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.
</p>
<p>
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.
</p>
<p>
<a href="http://www.replylater.com">ReplyLater.com</a> is free to use, so theres no reason you can't go to <a href="http://www.replylater.com">the website</a> and check it out and start using it now! Any comments or suggestions are appreciated.
</p>]]></description>
</item>
<item>
<pubDate>Fri, 11 Apr 2008 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/more-evidence-that-programmers-arent-smarter-than-other-people</guid>
<link>http://www.ryantm.com/blog/more-evidence-that-programmers-arent-smarter-than-other-people</link>
<comments>http://www.ryantm.com/blog/more-evidence-that-programmers-arent-smarter-than-other-people#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>More Evidence That Programmers Aren't Smarter Than Other People</title>
<description><![CDATA[<p>
So Google App Engine(GAE) came out and it has generated quite a buzz in the blagosphere especially surrounding the idea of <a href="http://www.tbray.org/ongoing/When/200x/2008/04/09/Google-Users-API">sharecropping</a>. 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.
</p>
<p>
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.
</p>
<p>
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:
</p>
<blockquote>
+1
</blockquote>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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."
</p>]]></description>
</item>
<item>
<pubDate>Wed, 09 Apr 2008 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/google-accounts-sucks</guid>
<link>http://www.ryantm.com/blog/google-accounts-sucks</link>
<comments>http://www.ryantm.com/blog/google-accounts-sucks#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Google Accounts Sucks</title>
<description><![CDATA[<p>
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.
</p>
<p>
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!
</p>
<p>
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.
</p>
<p>
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
</p>]]></description>
</item>
<item>
<pubDate>Tue, 08 Apr 2008 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/your-own-fast-image-gallery-on-rails</guid>
<link>http://www.ryantm.com/blog/your-own-fast-image-gallery-on-rails</link>
<comments>http://www.ryantm.com/blog/your-own-fast-image-gallery-on-rails#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Your Own Fast Image Gallery on Rails</title>
<description><![CDATA[<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<img src='../images/fast-gallery-requests.png'>
<p>
Fig 1: Firebug shows AJAX requests from visiting one image
</p>
<p>
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.
</p>
<p>
I will try to explain the essential components.
</p>
<h3>1. The Populator (populates the cache when needed)</h3>
<pre><code class='html language-javascript'>window.onload = function() {&#x000A;  if (YAHOO.env.ua.ie || YAHOO.env.ua.gecko || YAHOO.env.ua.webkit) {&#x000A;    setInterval(populate, 200);&#x000A;  }&#x000A;&#x000A;  function populate() {&#x000A;    var items = $('items');&#x000A;    if (needsNext() &amp;&amp; gettingMoreNext == false) {&#x000A;      id = lastObject(items).id;&#x000A;      gettingMoreNext = true;&#x000A;      new Ajax.Request('/snapshots/'+id+'/next?'+queryString, {asynchronous:true, evalScripts:true, method:'get'});&#x000A;    }&#x000A;&#x000A;    if (needsPrevious() &amp;&amp; gettingMorePrevious == false) {&#x000A;      id = firstObject(items).id&#x000A;      gettingMorePrevious = true;&#x000A;      new Ajax.Request('/snapshots/'+id+'/previous?'+queryString, {asynchronous:true, evalScripts:true, method:'get'});&#x000A;    }&#x000A;}</code></pre>
<p>
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:
</p>
<pre><code class='html language-ruby'>def previous&#x000A;  item_parial = render_to_string(:partial=&gt;"snapshots/show", :locals=&gt;{:snapshot=&gt;@snapshot}&#x000A;  render :update do |page|&#x000A;    page.insert_html :top, 'items', item_partial&#x000A;    page &lt;&lt; "newStuff('previous');"&#x000A;  end&#x000A;end&#x000A;</code></pre>
<p>
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.
</p>
<h3>The Navigator</h3>
<p>
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 <a href="http://developer.yahoo.com/yui/history/" title="Yahoo! UI Library: Browser History Manager">Yahoo! UI Library: Browser History Manager</a> 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:
</p>
<pre><code class='html language-html'>&lt;script src="http://yui.yahooapis.com/2.5.1/build/yahoo/yahoo.js"&gt;&#x000A;&lt;script src="http://yui.yahooapis.com/2.5.1/build/event/event.js"&gt;&#x000A;&lt;script src="http://yui.yahooapis.com/2.5.1/build/history/history.js"&gt;&#x000A;&lt;iframe id="yui-history-iframe"&gt;&#x000A;&lt;input id="yui-history-field" type="hidden" /&gt;</code></pre>
<p>
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
</p>
<pre><code class='html language-javascript'>function stateChange(state) {&#x000A;  if (ignoreOneChange) {&#x000A;    ignoreOneChange = false;&#x000A;    return;&#x000A;  }&#x000A;  var ar = state.split("/");&#x000A;  var our_id = "";&#x000A;&#x000A;  for(piece in ar)&#x000A;    if (ar[piece].indexOf &amp;&amp; ar[piece].indexOf("?") != -1)&#x000A;      our_id = ar[piece].split('?')[0];&#x000A;&#x000A;  toElm = document.getElementById(our_id);&#x000A;  if (toElm)&#x000A;    itemTo(document.getElementById(our_id),false);&#x000A;  else&#x000A;    window.location = state&#x000A;}&#x000A;&#x000A;YAHOO.util.History.register("items", window.location.toString(), stateChange);&#x000A;YAHOO.util.History.initialize("yui-history-field", "yui-history-iframe");&#x000A;&#x000A;var bookmarkedState = YAHOO.util.History.getBookmarkedState('items');&#x000A;if (bookmarkedState != null)&#x000A;  window.location = bookmarkedState;&#x000A;</code></pre>
<p>
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.
</p>
<p>
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.
</p>
<pre><code class='html language-javascript'>function updateUrl() {&#x000A;  var newState = "/snapshots/"+currentItem.id+"?"+queryString;&#x000A;  if ($('yui-history-iframe')&#x000A;    $('yui-history-iframe').contentWindow.document.title = document.title;&#x000A;  YAHOO.util.History.navigate("items", newState);&#x000A;}&#x000A;</code></pre>
<p>
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.
</p>
<p>
Well that about sums up everything I learned about fast galleries. Hopefully this helps you make fast galleries on your own site.
</p>]]></description>
</item>
<item>
<pubDate>Fri, 08 Feb 2008 08:11:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/why-i-stopped-reading-the-newspaper</guid>
<link>http://www.ryantm.com/blog/why-i-stopped-reading-the-newspaper</link>
<comments>http://www.ryantm.com/blog/why-i-stopped-reading-the-newspaper#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Why I Stopped Reading the Newspaper</title>
<description><![CDATA[<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
Newspaper Attractors (ranked most useful to least useful):
</p>
<ul>
<li>Can converse easily with other newspaper readers</li>
<li>Tells you the sentiment of the masses</li>
<li>May contain a few useful ideas or trends</li>
<li>Might miss out on something</li>
</ul>
<p>
Newspaper Detractors (most painful to least painful):
</p>
<ul>
<li>
False positive on idea or trend
</li>
<li>Takes time to read</li>
<li>Encourages emotional response rather than active thinking</li>
</ul>
<p>
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.
</p>
<p>
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:
</p>
<blockquote>
<p>
If you keep doing what you've always done, you'll keep getting what you've always gotten.
</p>
</blockquote>
<p>
Only when you change yourself and not follow the trends can you accomplish something that is actually newsworthy.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
If you see any merit in what I say, you should try a <a href="http://www.stevepavlina.com/blog/2005/04/30-days-to-success/">30 day trial</a> 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.
</p>
<p>
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.
</p>
<p>
For more information about predicting the future, I recommend all of the works of <a href="http://www.fooledbyrandomness.com/">Nassim Nicholas Taleb</a>.
</p>]]></description>
</item>
<item>
<pubDate>Thu, 07 Feb 2008 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/primary-post-mortem</guid>
<link>http://www.ryantm.com/blog/primary-post-mortem</link>
<comments>http://www.ryantm.com/blog/primary-post-mortem#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Primary Post-Mortem</title>
<description><![CDATA[<h2>Timeline</h2>
<p>
500 Woke up<br />600 Made sure signs haven't been removed by vandals (No signs had been removed)<br />615 Arrived at first polling place to poll watch<br />815 Went to Quad<br />830 Put up Ron Paul sign at YMCA<br />900 Arrived at  second polling place to poll watch<br />900-1100 Visited 3 more polling places encompassing 5 precincts. Watched election judges to make sure things were going smoothly<br />1120 Gave 4 signs to Michelle, she was putting signs up at polling places that got missed<br />1130 Generated 1 sure vote by driving Kevin to the polls<br />1215 Went home<br />1215-1800 Was at home unsure of what to do<br />1800 Went to original polling place to watch them close the polls<br />2010 Observed results from my 6 polling places and retrieved signs<br />2045 Showed up at Merry Ann's diner where David was waiting with a laptop and TV.<br />2130 Helped David retrieve some of his signs<br />2200 Watched election results with David's family<br />
</p>
<h2>Thoughts</h2>
<h3>Don't Procrastinate</h3>
<p>
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.
</p>
<h3>Drive People If You Can</h3>
<p>
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.
</p>
<h3>Lists Would Have Been Nice</h3>
<p>
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.
</p>
<h3>Fill Your Time</h3>
<p>
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.
</p>]]></description>
</item>
<item>
<pubDate>Tue, 05 Feb 2008 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/vote-ron-paul-today</guid>
<link>http://www.ryantm.com/blog/vote-ron-paul-today</link>
<comments>http://www.ryantm.com/blog/vote-ron-paul-today#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Vote Ron Paul Today</title>
<description><![CDATA[<div class='right'>
<img src='../images/ron_paul.jpeg'>
</div>
<p>
Today is super Tuesday. Please go out and show your support for the ideals of Ron Paul.
</p>
<ul>
<li>Limited Government</li>
<li>Mind your own business foreign policy</li>
<li>Sound spending</li>
<li>Follow the constitution</li>
</ul>
<p>
Get up and VOTE NOW, for Ron Paul and all of his delegates.
</p>]]></description>
</item>
<item>
<pubDate>Mon, 04 Feb 2008 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/profitable-education</guid>
<link>http://www.ryantm.com/blog/profitable-education</link>
<comments>http://www.ryantm.com/blog/profitable-education#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Profitable Education</title>
<description><![CDATA[<p>
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:
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
What do you think about this system? What other issues does it have?
</p>]]></description>
</item>
<item>
<pubDate>Mon, 04 Feb 2008 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/no-shoes-for-6-months</guid>
<link>http://www.ryantm.com/blog/no-shoes-for-6-months</link>
<comments>http://www.ryantm.com/blog/no-shoes-for-6-months#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>No Shoes for 6 Months</title>
<description><![CDATA[<img src='../images/five-fingers.jpg'>
<p>
Last August, my friend Alan sent me <s><a href="http://anthropik.com/2007/06/learning-to-walk/">an article</a></s> 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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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 <a href="http://www.barefooters.org/">barefooting</a> 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.
</p>
<p>
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.
</p>
<p>
But as it got cold, answers came. While I was siting on my porch my friend's (<a href="http://graysonfamily.org/%7Edavid/">David Grayson</a>) dad came by and told me about some interesting barefoot running stories he had read.<a href="http://ryantm.com/why-shoes-are-bad-for-us.pdf">
</p>
<p>
</a><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_kIdEgOAP3dM/R6fGKIQDkEI/AAAAAAAAAAU/tIlQjOlYJXo/s1600-h/large.jpg"></a>
</p>
<ol>
<li>
<a href="http://ryantm.com/why-shoes-are-bad-for-us.pdf">Why shoes are bad for us (pdf)</a>
</li>
<li>
<a href="http://ryantm.com/men-who-run-forever.pdf">Men who run forever (pdf)</a>
</li>
</ol>
<p>
These stories lead me to <a href="http://www.vibramfivefingers.com/products/products_classic.cfm">Vibram's new five-toed shoes</a>. Which are quite good at protecting your feet in dry and chilly weather. Also, they fix most of the problems of traditional shoes because they
</p>
<ul>
<li>Have a completely flat sole</li>
<li>Fit your feet like a glove</li>
<li>
Allow your toes to downwards as easily as upwards
</li>
</ul>
<p>
This 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.
</p>
<p>
So next time your are testing the flexibility of shoes make sure the toes can go down below the line of the sole.
</p>
<p>
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.
</p>
<p>
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.
</p>
<img src='../images/720_chocolate_moose.jpg'>
<p>
That's where <s><a href="http://www.mtonka.com/ecommerce/product?product%5fid=39">Minnetonka's Double Bottom Mooseskin</a></s> 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.
</p>
<p>
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.
</p>]]></description>
</item>
<item>
<pubDate>Sat, 02 Feb 2008 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/inform-yourself-about-nuclear-waste</guid>
<link>http://www.ryantm.com/blog/inform-yourself-about-nuclear-waste</link>
<comments>http://www.ryantm.com/blog/inform-yourself-about-nuclear-waste#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Inform Yourself About Nuclear Waste</title>
<description><![CDATA[<p>
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.
</p>
<p>
Yesterday I received
</p>
<img src='../images/ameren.png'>
<p>
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.
</p>
<p>
You might also notice that there are two types of nuclear waste. <span style="font-weight: bold;">High-Level Nuclear Waste </span>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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
[1] N. Tsoulfanidis    and R.G. Cochran, “Radioactive Waste Management,” <i>Nuclear Technology,</i>    93 (1991), pp. 263–304.
</p>]]></description>
</item>
<item>
<pubDate>Fri, 01 Feb 2008 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/blog-redux</guid>
<link>http://www.ryantm.com/blog/blog-redux</link>
<comments>http://www.ryantm.com/blog/blog-redux#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Blog Redux</title>
<description><![CDATA[<p>
I decided to start two don't break the chain habits today, 1 Feb 2008.
</p>
<ol>
<li>Write a blog post every day.</li>
<li>Do sit ups or push ups and stretching every day.</li>
</ol>
<p>
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:
</p>
<blockquote>
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.
</blockquote>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>]]></description>
</item>
<item>
<pubDate>Mon, 06 Aug 2007 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/lawrence-lessig-predicts-government-ruining-the-internet</guid>
<link>http://www.ryantm.com/blog/lawrence-lessig-predicts-government-ruining-the-internet</link>
<comments>http://www.ryantm.com/blog/lawrence-lessig-predicts-government-ruining-the-internet#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Lawrence Lessig Predicts Government Ruining the Internet</title>
<description><![CDATA[<blockquote>
<p>
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.
</p>
<p>
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?”
</p>
<p>
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.
</p>
<p>
So this is the big terror. They’re just sitting there waiting for the inevitable to happen, and then ‘Slam!’
</p>
</blockquote>]]></description>
</item>
<item>
<pubDate>Fri, 13 Jul 2007 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/how-to-unlock-your-iphone-faster</guid>
<link>http://www.ryantm.com/blog/how-to-unlock-your-iphone-faster</link>
<comments>http://www.ryantm.com/blog/how-to-unlock-your-iphone-faster#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>How to Unlock Your iPhone Faster</title>
<description><![CDATA[<p>
<img src='../images/iPhone.png'>
</p>
<p>
If you have two fingers or a godlike thumb you can unlock your iPhone faster.
</p>
<p>
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.
</p>
<p>
This operation, if done correctly, takes less time than sliding your finger along the interface.
</p>
<p>
Any other gesture saving tips?
</p>]]></description>
</item>
<item>
<pubDate>Mon, 09 Jul 2007 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/jumping-out-of-bed</guid>
<link>http://www.ryantm.com/blog/jumping-out-of-bed</link>
<comments>http://www.ryantm.com/blog/jumping-out-of-bed#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Jumping Out of Bed</title>
<description><![CDATA[<p>
I read <a href="http://www.stevepavlina.com/blog/2006/04/how-to-get-up-right-away-when-your-alarm-goes-off/">"How to get up right away when your alarm goes off"</a> 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.
</p>
<p>
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.
</p>
<p>
I'm also contemplating starting a <a href="http://en.wikipedia.org/wiki/Polyphasic_sleep">polyphasic sleep schedule.</a> 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.
</p>
<p>
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.
</p>]]></description>
</item>
<item>
<pubDate>Sun, 24 Jun 2007 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/official-irc-for-muds</guid>
<link>http://www.ryantm.com/blog/official-irc-for-muds</link>
<comments>http://www.ryantm.com/blog/official-irc-for-muds#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Offical IRC for MUDs</title>
<description><![CDATA[<p>
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
</p>
<pre><div id='mud'>@ irc.freenode.net</div></pre>
<p>
This IRC is also for MU*s of any kind.
</p>
<p>
If you aren't familiar with IRC here is an easy way to get started:
</p>
<p>
go to <a href="http://www.mibbit.com">http://www.mibbit.com/</a>
</p>
<p>
Fill in the fields like this:
</p>
<pre>Nickname: YourNameHere&#x000A;Server:   irc.freenode.net&#x000A;Channel   #mud</pre>
<p>
then click "Login".
</p>
<p>
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.
</p>]]></description>
</item>
<item>
<pubDate>Sat, 16 Jun 2007 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/how-to-move-your-mud-to-bluehost-for-only-695-per-month</guid>
<link>http://www.ryantm.com/blog/how-to-move-your-mud-to-bluehost-for-only-695-per-month</link>
<comments>http://www.ryantm.com/blog/how-to-move-your-mud-to-bluehost-for-only-695-per-month#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>How to Move Your MUD to Bluehost for Only $6.95 Per Month</title>
<description><![CDATA[<p>
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.
</p>
<p>
Obtain an account on bluehost. (www.bluehost.com)
</p>
<p>
Click sign up now. Enter domain name: www.yourMUD.com/org whatever you want. I personally recommend you add domain privacy with Bluehost.
</p>
<p>
Enter all of your information about select that you are going to pay for 24 months right away.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
Presumably you have the files of your other mud somewhere on another shell. If this is the case do:
</p>
<pre><code class='html language-bash'>scp your-user@otherhost.com:~/path/to/mud/ your-user@yourMUD.com:~/mud/</code></pre>
<p>
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)
</p>
<p>
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.
</p>
<p>
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:
</p>
<pre><code class='html language-bash'>telnet quarkmud.com 6666</code></pre>
<p>
you'd just substitute your domain name and port there.
</p>
<p>
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:
</p>
<pre><code class='html language-bash'>#&#x000A;#~/persistent_processes.sh&#x000A;&#x000A;#DeimosMUD&#x000A;DM=`ps ex | grep circle`&#x000A;if [ -z "$DM" ]; then&#x000A;  echo "Restarting DeimosMUD"&#x000A;  cd /home/your-user-name/mud/&#x000A;  ./bin/circle 6666 &&#x000A;fi&#x000A;</code></pre>
<p>
Make sure the file is executable with:
</p>
<pre><code class='html language-bash'>chmod +x persistent_processes.sh</code></pre>
<p>
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".
</p>
<p>
There you have it, now you have a stable MUD running for a good price.
</p>
<p>
Performance Note:
</p>
<p>
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.
</p>]]></description>
</item>
<item>
<pubDate>Tue, 05 Jun 2007 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/duct-tape-marketing</guid>
<link>http://www.ryantm.com/blog/duct-tape-marketing</link>
<comments>http://www.ryantm.com/blog/duct-tape-marketing#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Duct Tape Marketing</title>
<description><![CDATA[<p>
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.
</p>
<p>
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)
</p>
<p>
My plan as I know it so far:
</p>
<p>
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.
</p>
<p>
Then I can go buy a bagel.
</p>
<p>
Takeaways:
</p>
<ul>
<li>You cannot survive on your technical skill alone!</li>
<li>People will not find you unless you market yourself.</li>
</ul>]]></description>
</item>
<item>
<pubDate>Mon, 28 May 2007 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/staticmatic</guid>
<link>http://www.ryantm.com/blog/staticmatic</link>
<comments>http://www.ryantm.com/blog/staticmatic#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>StaticMatic</title>
<description><![CDATA[<p>
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 its backbone. It's called <a href="https://github.com/staticmatic/staticmatic">StaticMatic</a> and it's a gem so...
</p>
<pre><code class='html language-bash'>sudo gem install staticmatic</code></pre>
<p>
Then after you get it installed you need to do
</p>
<pre><code class='html language-bash'>staticmatic setup my_app_name&#x000A;staticmatic build my_app_name</code></pre>
<p>
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.
</p>]]></description>
</item>
<item>
<pubDate>Sun, 27 May 2007 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/haml-and-sass-rakefile</guid>
<link>http://www.ryantm.com/blog/haml-and-sass-rakefile</link>
<comments>http://www.ryantm.com/blog/haml-and-sass-rakefile#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Haml and Sass Rakefile</title>
<description><![CDATA[<p>
Here is a rakefile I cooked up for generating a website form static haml and sass files.
</p>
<pre><code class='html langauge-ruby'>require 'haml/engine'&#x000A;require 'sass/engine'&#x000A;&#x000A;task :default => [:web]&#x000A;task :web => [:haml,:sass]&#x000A;&#x000A;desc 'Compile haml templates to html'&#x000A;task :haml do&#x000A;  dirs =  Dir['**/*.haml']&#x000A;  dirs.each do |f|&#x000A;    File.open(f, 'r') do |fi|&#x000A;      File.open(f.gsub('haml','html'),'w') do |d|&#x000A;        d << Haml::Engine.new(fi.read).to_html&#x000A;      end&#x000A;    end&#x000A;  end&#x000A;end&#x000A;&#x000A;desc 'Compile sass templates to css'&#x000A;task :sass do&#x000A;  dirs =  Dir['**/*.sass']&#x000A;  dirs.each do |f|&#x000A;    File.open(f, 'r') do |fi|&#x000A;      File.open(f.gsub('sass','css'),'w') do |d|&#x000A;        d << Sass::Engine.new(fi.read).to_css&#x000A;      end&#x000A;    end&#x000A;  end&#x000A;end</code></pre>]]></description>
</item>
<item>
<pubDate>Wed, 23 May 2007 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/ron-paul-for-president-2008</guid>
<link>http://www.ryantm.com/blog/ron-paul-for-president-2008</link>
<comments>http://www.ryantm.com/blog/ron-paul-for-president-2008#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Ron Paul for President 2008</title>
<description><![CDATA[<p>
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. <a href="http://www.youtube.com/profile?user=RonPaul2008dotcom">Watch Him.</a>
</p>]]></description>
</item>
<item>
<pubDate>Thu, 17 May 2007 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/muding-website</guid>
<link>http://www.ryantm.com/blog/muding-website</link>
<comments>http://www.ryantm.com/blog/muding-website#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>MUDing Website</title>
<description><![CDATA[<p>
I'd like to announce that there is a website for the MU* framework I'm building. The website is <s><a href="http://quarkmud.com">QuarkMUD.com</a></s>. We aren't quite ready to release anything, but you can see our documentation and our tests (we are using test driven development).
</p>]]></description>
</item>
<item>
<pubDate>Sat, 05 May 2007 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/rubinius</guid>
<link>http://www.ryantm.com/blog/rubinius</link>
<comments>http://www.ryantm.com/blog/rubinius#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Rubinius</title>
<description><![CDATA[<p>
Today on Freenode #ruby-lang, I was talking to "Defiler" about <a href="http://rubini.us">Rubinius</a>. 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.
</p>
<p>
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.
</p>
<p>
This works:
</p>
<pre><code class='html language-ruby'>obj.methods[:my_fibonacci] = other_obj.methods[:fibonacci]</code></pre>
<p>
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.
</p>]]></description>
</item>
<item>
<pubDate>Wed, 02 May 2007 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/in-the-future-there-will-be-no-files</guid>
<link>http://www.ryantm.com/blog/in-the-future-there-will-be-no-files</link>
<comments>http://www.ryantm.com/blog/in-the-future-there-will-be-no-files#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>In the Future, There Will Be No Files</title>
<description><![CDATA[<p>
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:
</p>
<ol>
<li>
You have to keep track of where they are.
</li>
<li>
You have to worry about backing them up and storing them.
</li>
<li>
You have to make sure they are in the right place.
</li>
</ol>
</li></ol>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<ul>
<li>People never burn CD's because they don't care where their music is. (Hint: it's everywhere)</li>
<li>
I can look at an old version of something I was working on without hassle ever.
</li>
<li>
I can mix two data sources together to form new mixed content. This doesn't just apply to music and videos. I can also mix text data with <a href="http://www.abridgegame.org/darcs/">patch grammar</a>, for instance.
</li>
<li>
There is no downtime when switching to a new machine. I can get my stuff from anywhere, anytime.
</li>
</ul>]]></description>
</item>
<item>
<pubDate>Sat, 05 May 2007 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/real-learning</guid>
<link>http://www.ryantm.com/blog/real-learning</link>
<comments>http://www.ryantm.com/blog/real-learning#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Real Learning</title>
<description><![CDATA[<p>
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)
</p>
<ul>
<li>BNF grammar</li>
<li>Recursive descent parsing</li>
<li>Ruby module programming</li>
<li>Data structures</li>
<li>Behaviorally driven development</li>
</ul>
<p>
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.
</p>]]></description>
</item>
<item>
<pubDate>Thu, 26 Apr 2007 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/how-the-press-works</guid>
<link>http://www.ryantm.com/blog/how-the-press-works</link>
<comments>http://www.ryantm.com/blog/how-the-press-works#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>How the Press Works</title>
<description><![CDATA[<p>
Here is a flow of how the press of America works from my current model of it.
</p>
<p>
4:00 USA Today does interesting story<br />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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
Here is where the news is unfolding, (there is an audio clip of me talking in one of the comments), <a href="https://davidegrayson.livejournal.com/17231.html">https://davidegrayson.livejournal.com/17231.html</a>
</p>]]></description>
</item>
<item>
<pubDate>Wed, 25 Apr 2007 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/campus-assassins-in-usa-today</guid>
<link>http://www.ryantm.com/blog/campus-assassins-in-usa-today</link>
<comments>http://www.ryantm.com/blog/campus-assassins-in-usa-today#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Campus Assassins in USA Today</title>
<description><![CDATA[<p>
My website <s><a href="http://www.campusassassins.com">http://www.campusassassins.com</a></s> is featured in this <a href="http://www.usatoday.com/news/education/2007-04-24-student-assassin-game_N.htm">USA Today Article</a>. Hopefully my quotation in it is correct:
</p>
<blockquote>
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."
</blockquote>
<p>
Our site uses Ruby on Rails.
</p>]]></description>
</item>
<item>
<pubDate>Tue, 24 Apr 2007 00:00:00 PST</pubDate>
<guid>http://www.ryantm.com/blog/passing-infinite-functions</guid>
<link>http://www.ryantm.com/blog/passing-infinite-functions</link>
<comments>http://www.ryantm.com/blog/passing-infinite-functions#comments</comments>
<author>ryan@ryantm.com (Ryan Mulligan)</author>
<title>Passing Infinite Functions</title>
<description><![CDATA[<p>
Can you write the following code in your language without it hanging?
</p>
<pre><code>some_function( 5, infinite_loop())</code></pre>
<p>
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.
</p>]]></description>
</item>
</channel>
</rss>
