Cultural Differences

We had an interesting discussion in my web analytics class a few days ago. I was born in California, but grew up in Utah, which is culturally isolated by almost anyone’s standards, although that is beginning to change. With that little caveat, my intent is not to offend, but simply to explore some of what was said a little more. Our class notes can be found on the class website.

One cause of increasing awareness of differences is simply the decline of isolation. As communication becomes easier and easier, it is harder to remain in isolation and continue doing things the way we’ve always done. Adapting to a global world is becoming an ever-increasing necessity. Other reasons that there are cultural differences range from political and economic differences to differences in religion and the interaction of parents and children. We are different in the way that we see images, the way that we approach logical problems, and the way that we link cause and effect. Cultural differences exist in just about every way that you can imagine.

So what do we do about it. Probably the most interesting part of the class discussion was the ways that we deal with these differences. The ways that we adapt.

Without going into the details of each step, we start with denial, move into defensiveness, then begin to minimize our differences. After that we begin to accept and respect others cultures, followed by adaptation, and finally integration. After a bit of self-introspection and a few months in Seattle, I would put myself around stage 4 in acceptance. I’ve had enough exposure to know that my ways of thinking are not better than anyone else’s they are just different.

So what does all this mean for web analytics? It means that as marketing is not just about finding a marketing plan that accomplishes what you want it to. It means that audiences that were never intended to hear your message now have access to it. It means that a you must either create multiple message for each of your different audiences or you’ve got to somehow create one message that can span the diversity in all your audiences. How do you do that? That’s a topic for another day (read “I don’t really know”).

The Truth About Vista

A professor of mine shared this story and I had to pass it on:

“Today I had to drop by a local computer store and get, of all things, a floppy drive. Anyway while I was standing in this long, very slow line I overheard the computer expert at the counter say that Vista should be good, “because it is Unix based.” Well there you have it, the evil empire has seen the light and the universe’s imbalances have been mended since Windows is now based on Unix. I almost fell on the floor laughing. When I got up to the counter I told the guy “that was a funny one.” Well unbeknownst to me, he was serious. So to straighten him out I told him that he was only partially correct, the only similarities between Windows and Unix was that they use the same ball bearings.”

Coupling vs. Cohesion

Coupling & Cohesion are two terms often used in object-oriented software development. They sound rather similar, but have very different meetings.

Coupling refers to one components unnecessary dependence on another components implementation. Cohesion refers to multiple components linked in logical and smart ways.

Jeremy Leishman has shed a little more light on the topic. Coupling is the degree to which modules within a program rely on each other. If the modules interact through a stable interface without having to worry about the other’s particular implementation, they are said to be loosely coupled. This is good.

Cohesion refers to how well each individual module does its job. It measures how focused the responsibilities of each class are. In good object-oriented programming, responsibilities can be specifically assigned in ways that increase reuse and code management capabilities. Modules implemented this way are said to be highly cohesive. This is also good.

An example might help to clarify things a bit more. Let’s say we had an iPod object and a Song object. If the two were highly coupled, the Song class might look something like this (Ruby style):

class Song
def do(action)
if action == 1
# code to play song…
elsif action == 2
# code to pause
elsif action == 3
# code to skip

Any programmer that wants the iPod object (or the WinAmp object, or any other object) to interface with the Song object is now dependent on the special meaning of 1, 2, & 3 to use the Song object correctly. The iPod object and the Song object are highly coupled. Remember that highly coupled = bad.

Now consider another implementation of the iPod and Song objects. Highly cohesive objects talk to each other semantically. In other words, they tell each other what they want the other one to do. The more descriptive your methods are, the better they are.

class Song
def new(path_to_song)
#code to get the song from the filesystem

#code to play song

def self.pause
# code to pause song

This would allow the iPod object to call

currentSong =“/home/user/Music/1812_Overture.mp3”)

Now the Song object is said to be highly cohesive because it’s responsibilities are very focused and other objects that wish to interact with it can do so in a uniform way regardless of how the Song object is implemented on the backend. Other objects don’t need to know how the Song object works, they just know that it does and can talk to it in an intelligent way. Remember that highly cohesive = good.

Howto: Port forward to Your Virtual Machine

So sometimes I do things just for the fun factor. As mentioned in a previous post, I like having Windows server, but I prefer Linux for web-hosting. I finally found the solution to do both at the same time on one machine. In the real world people have been doing this for years, but it’s a first for me.

After doing all my installing, I then installed VMWare’s now free VMWare Server. I downloaded the Ubuntu Server distro and decided on the 6.10 release dubbed Edgy Eft. It doesn’t have the LTS, but is perfect for my needs because the repositories include everything I need for my Ruby on Rails setup (including Lighttpd).

Then I just had to figure out how to get traffic from my host to my virtual host. I wanted to use Bridged Ethernet and did that originally, but even though my VM grabbed an IP address on my Lan, when trying to access it from another computer, I was told that there was:

No route to host

If you’re smarter than I am, you can probably figure out a way around this, but I was just trying to get it to work. I turned to NAT. Go to VM > Settings > Ethernet in your VMWare Server Console, select NAT, and click OK.

Now boot your VM log in, and run an


to see what your IP Address is. Again in your server console go to Host > Virtual Network Settings. Select the NAT tab. Make sure to move this window so you can clearly read your VM’s IP address. VMNet8 is the default virtual adapter for NAT, so if this is your only VM go ahead and click the Edit button (if you have others, make sure to select the proper adapter for your VM from the dropdown menu, then click edit). Now click the Port Forwarding button and then the Add button. Fill in the host port, the VM ip address, and the VM port. For me this meant forwarding port 80 from the host to port 80 on the VM. Don’t forget a nice description. Click OK 4 times. Now just forward traffic through your router (as needed) and you’re good to go.

My Ubuntu VM is now serving Apache2+MySql+PHP5 to the world. Soon it will be serving Ruby on Rails.

For a graphical tutorial see:

Flashed my Bios with AsusUpdate…Ooops!

So, after deliberating and waffling back and forth, I’ve decided to reinstall Windows 2003 Server Enterprise on my server. Only a week ago I backed everything up, wiped it clean and did a fresh install of Ubuntu64 the Edgy Eft edition, but there were a few things that didn’t work as well as planned.

I love having a shell on my server for remote access, but the Samba server just doesn’t serve content quite as fast as the original SMB protocol that Windows uses (no I can’t back that up with tests, just feels slower). In addition, I could never get the BitTorrent client to work on Ubuntu even though one comes installed, and I very quickly began to miss my uTorrent.

My recent time spent playing with VMWare Fusion and VMWare Server gave me a sudden and wonderful idea. I decided to reinstall Windows, then throw VMWare Server on and put Ubuntu Server in a virtual machine. I dug around in the old computer parts box and dug up a Linksys NIC, threw it in for good measure, and we’re ready to go. The plan is to have one NIC dedicated to the Ubuntu VM. I thought about using Virtual PC, but I’ve heard that it’s a little problematic with Linux distros, so I figured I’d stick with what I’ve used in the past.

That’s where the thought process ended. I backed everything up again (a lengthy process, we’re talking over 200 gigs of data) and then reinstalled Windows. I’m using an Asus A8N5X Motherboard and an AMD Athlon 64 3200+ in this particular server. I swapped the ram in the desktop (don’t need a gig in there anymore since I never play games) to give my server 1 gig of ram as well.

Windows installed just fine, I threw in my Asus Drivers CD and installed all the important pieces there as well, and figured I might as well flash my BIOS while I was at it. As it turns out that was a mistake. The update utility looks fairly nice and allows you to flash your BIOS without using boot disks, an attractive proposition for someone who hasn’t had a 3.5” floppy drive for many years. The program itself began behaving strangely (this should have been a warning), but I persisted. Eventually I navigated my way through the jungle of poor software design and clicked the button that said “Flash.”

After completing this step, the computer told me it had to reboot. I watched the Asus logo come up and then my stomach sank when a little message popped up that said


My stomach sank. After I recovered from the initial shock, I restarted and entered the newly flashed BIOS. I disabled everything relating to 3.5” floppies which didn’t really make sense since I don’t have a floppy. If it can tell what kind of hard drives and CD drives I have, it’s a logical extrapolation that it could tell there was no disk drive. Anyway, I set the order of boot devices and restarted.

I was again greeted with the same friendly error. I had a heart-attack for awhile, booted into the recovery console a few times to try running




but neither of those seemed to work. I had just finished lamenting to my wife when I had one final thought. “Wait a second, there are two hard drives in that box.” Sure enough, I went back into the BIOS and found a setting I had missed the first time around. My non-Windows hard drive was now set as the #1 drive, and since there was no OS on it, there was no boot. Changing the order of the drives cleared everything up and I was good to go.

So if at first you don’t succeed, talk to your wife and everything will clear itself up.