Blog | Admin | Archives

Chicago O’Hare

I believe Chicago O’Hare may be my personal worst airport ever. In addition to having already spent Christmas Eve stranded there, I now had the great opportunity of turning a 45-minute excursion into an hour-and-a-half wait-a-thon while the plan that was supposed to arrive at 10:13 didn’t come in until well after 11:30. Thanks O’Hare, you putz.

Clarification: I picked my parents up at the airport last night. I was supposed to pick them up at 10:15, but it ended up being about 11:45. Their departure was delayed for 30 minutes due to electrical problems at O’Hare, then they missed their scheduled take-off and they had to wait another thirty minutes in the take-off line. When they made it to Sea-Tac, they then had the chance to wait on the tarmac for a while until their gate became open from the on-time plane that was using it. Finally, thier luggage took about thirty minutes to make it to the carousel. And I blame this all on Chicago.

Sunny Day Sunday

Yesterday was a sunny and successful day. I woke up to my phone-alarm at 5:50 and showered, then had breakfast with Dan at Chaces’ Pancake Corral. After this, I headed home and switched the Highlander for the Truck and my bike. The next stop was Ian’s house for the TRC leadership meeting, which I thought was pretty productive. I had to leave that about 40 minutes early to make it to the South Bellevue Park & Ride, where I met up with Dan and biked West across the I-90 bridge. We made it to the Mercer Island-Seattle bridge deck around 11:40, and the Blue Angels arrived a bit after noon. The show was quite good – better than last year’s, if I remember correctly. It was fairly long – over 30 minutes – and displayed a good number of tricks, including four or five at the end of the show with all six planes working together. It was a good time. After the show, we ate at Subway on the island, then headed back to my truck which we took into Seattle to search for housing for me. We found a number of nice and a few sketchy places that I’m looking into, then enjoyed some Jamba Juice before heading back. I had dinner with the Marshes, excellent ribs by Jay and a great supporting cast including beans, vegies, salad, and bread by Kay. The Parkins were also in attendence, and the conversation was good. The night was wrapped up by watching fear.com, a pretty ridiculously bad movie, but, as I was explaining to Jason, not as bad as some films I have seen. It kept me up a little longer than I would have liked and then I compounded the problem when I stayed up and chatted online. The result is this – although I woke up at 5:50 to my phone alarm, I went back to sleep and only became cognisant around 9:00am. So that didn’t work so well. However, I should be back in my own bed tonight – when I visited yesterday to pick up some stuff, the toxicity part II was mostly dissipated, and the ventilated rooms, including mine, were quite nice to be in. Many thanks to the Marshes for letting me hole up here in the meantime. I enjoy avoiding affixiation.

Ryan’s Roundup

The final touches went onto the wood floor Friday night. This time, I wised up and thanks to the generosity of some friends, have been able to sleep away from the fumes for a few nights.

A week and a day ago, I hurt my heel while landing after attempting to catch a Frisbee. I mostly stayed off the sore spot, even while running in additional games, and it seemed to be getting better. However, the last couple of days, I put a lot of stress on it again, as it wasn’t hurting as much, and now its hurting again. It may be time to bite the bullet and take a week off so I can get back to full strength sooner rather than later. As some people wiser than myself suggested, it might also be a good idea to get it xrayed (along with the pinky of my right hand, another lingering injury) if it doesn’t get better sometime soon.

Today, while playing ultimate, I took my shirt off, and burned. The last time I did this it led to a very unpleasant experience – so apparently, I didn’t learn the lesson yet, but hopefully, it isn’t as bad this time. Or anywhere nearly so.

As far as goals, I woke up today at 5:45ish, before my alarm (in the form of a phone) tried to wake me. Weird! But I’ll take it. I also called some landlords in Seattle, but talked only to recording machines.

Two Goals

I am going to try some goals again, in a format that is less ambitious and perhaps more realistic. I will put forth two – an ongoing goal for the next 30 days and a short term, one-time goal to accomplish in the next 30 days. This has several improvements over my last attempt:

  • Smaller scale – more manageable and reasonable to achieve
  • Definitive time scale – in 30 days, I wil know percentage of completion on the ongoing task, and whether the short-term goal has been achieved.

Both of these improvements will, I hope, help me be more accountable to myself.

And now, for the goals.

  1. Over the next 30 days, I will be awake by 6:00 am every day.
  2. Within 30 days, I will have moved into a residence West of Lake Washington.

Comparative Advantage

Inspired by Bobby’s recent post.

Two countries, A and B.

Citizens of A can produce 10 bottles of milk a day or 10 loaves of bread.
Citizens of B can produce 5 bottles of milk a day or 2 loaves of bread.
These differences are due to superior technology or circumstances in country A. Country A has what is called a absolute advantage in both bread and milk, so why would country A care about what county B could do?

Comparative advantage is why.

Say that both countries have 10 people, and people like to eat as much bread and milk as possible. In addition, people prefer to have one bottle of milk with each loaf of bread, if possible. Now lets say there are 70 people in each country.

In country A alone, 35 people make milk, and 35 people make bread. 350 bottles and loaves are created each day, and each person gets to consume 5 bottles of milk and 5 loaves on bread. Everyone is fairly happy.

In country B alone, 50 people make bread, and 20 people make milk, producing 100 loaves of bread and 100 bottles of milk a day. People get to consume 10/7 of a loaf and 10/7 of a bottle each day. People in country B look to country A with envy.

Now lets consider the possibility that these two countries trade. Why would they do this? Remember, everyone wants to consume as much as possible. Why would country A trade, then? Wouldn’t they lose out? No, says comparative advantage. Take a look:

While A has an absolute advantage in all goods, B has a “comparative advantage” in milk. This is because to produce five more bottles of milk, B only gives up two loaves of bread. For A to produce five more bottles of milk, A must give up five loaves of bread, an unhappy proposition. (If this doesn’t make sense, recall that a Citizen of A can produce 10 bottle OR 10 loaves, and a citizen of B can produce 5 bottles OR 2 loaves, but each citizen can’t produce both at the same time.)

Now, since B has a comparative advantage in milk, lets have all 70 B people produce milk – for a total of 350 bottles of milk. Then lets take 35 A people and have them produce bread – for 350 loaves of bread. We’ll then take the rest of the A people and split them between milk and bread – for another 175 loaves of bread, and another 175 bottles of milk. If you are keeping track, you may have noticed that the total world production just went up – without increasing anybody’s ability to produce. Before, we had 450 loaves of bread and 450 bottles of milk (350 from A + 100 from B of each). And now we have 175 + 350 = 525 bottles and 525 loaves of bread. 75 extra bottles and loaves are floating around the world.

But, you say, B has only milk, and A has way too much bread. So, the two countries trade at a rate they both find acceptable. Because of the comparative advantages of each nation, this rate will naturally fall somewhere between a milk to bread ratio from 1:1 to 5:2. Lets say it settles in at 2 bottles of milk for a loaf of bread. So B trades 234 bottles of milk to A for 117 loaves of bread. They now have 116 milks and 117 loaves, and each person gets to consume more milk and bread in B (before, they only had 100 of each).

Over in A, they now have 234 bottles + 175 bottles = 409 bottles and 525 – 117 = 408 loaves of bread. Once again, each person gets more (before, they only had 350 of each). All of this comes about, remember, without any increases in productive capability – just specialization and trade.

Referer Spam Countermeasures

Like all spam, referer spam takes what could be useful – in this case, information where people come from to a site – and make it mostly useless – just more links for google to index. However, one of the unique aspects of referer spam also makes it easier to counter than many other types of spam. Generally, referer spam must surpass a threshold – usually, the top ten referrers, to be listed at all on a site. This means that instead of spreading out the referrers, referrer spam generally all points to one place. Which makes it easy to implement a simple anti-referer-spam script like the one I came up with to help fight referer spam on Theo’s blog:

// Ryan's anti-spam hack starts here
$spam_words = file('spam_words');
if(isset($_SERVER['HTTP_REFERER']))
{
foreach($spam_words as $spam_word)
{
if(stristr($_SERVER['HTTP_REFERER'],rtrim($spam_word)) !== false)
{
die("You look like you're trying to refer spam this site with this word: $spam_word".
'If not, sorry for the inconvenience and please '.
'<a href="'.$_SERVER['PHP_SELF'].'">click here to continue</a>');
}
}
}
// End Ryan's anti-spam hack

Then, as a companion, a post-facto script that can be called from the command line or from the web:

<?php
require('./conf/_config.php');
mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
mysql_select_db(DB_NAME);
$spam_words = file('spam_words');
foreach($spam_words as $spam_word)
{
// echo $spam_word;
$spam_word = rtrim($spam_word);
$sql = "DELETE FROM `evo_hitlog` WHERE `referingURL` LIKE '%$spam_word%'";
echo $sql . "n";
mysql_query($sql);
}
?>

Then, the admin can simply periodically check their top referer output, and if they see a bad guy creeping up, add an appropriate word to their spam_words file and run the killoldspam.php script. The bad stuff goes away and can never come back. Best of all, its not very intrusive to the average visitor, even when they are accidently flagged. Javascript or a meta or http redirect could make it less annoying still.

Downgrading

Not long ago, I “upgraded” to Trillian 3.0 Basic, since Trillian 2.0 Pro was crashing when I started it up. However, Trillian 3 is awful:

  1. It isn’t skinnable. While its default skin in not bad, it wasn’t as good or nearly as compact as my skin of choice, Beacon Pro. Of course, the “Pro” version allows skins, but more on that later.
  2. It takes forever to load. Ok, not quite forever, but it does take at least 5 times as long, and perhaps 10 times as long to load. Since Trillian 2.o Pro did everything I wanted it to, the extra time waiting for it to start – disk reading and processor fully utilized the entire time – did not make me happy.
  3. It doesn’t take plug-ins. This is probably something that their “Pro” version allows, but all I wanted was HTML profiles – nothing else remotely interested me. I’m not going to shell out another $25 just so I can get one plugin and one skin.
  4. Which brings me to the last topic, the one year deal-io. I paid $25. Most places that I do that are nice and give lifetime upgrades. Not Ceurelian Studios. This fact – which to their credit they do not try to hide in any way – almost made me balk at buying the Pro version, but it ended up being a good decision when I did. However, if they want people to buy 3.0 Pro, their shareware offering in 3.0 Basic really doesn’t do the selling job very well.

So last night, I downgraded to Trillian 2.0 – and in the process, upgraded my IM experience. It isn’t crashing anymore, loads quickly, has my favorite skin, and I can view HTML profiles as they were meant to be viewed. Good stuff.