Saturday, November 20, 2010

Selective Memories

I recently read the New Yorker's piece on procrastination, and what resonated the most was the amazing complexity of Indian bureaucracy that prevented George Akerlof from even attempting to mail a package of clothes back to his friend in the States. My life over the past month has been an endless string of dealing with such bureaucracies and inefficiencies in Korea, and I can fully sympathize with Akerlof just giving up and not even trying. Bureaucracies in foreign countries are really complicated to deal with, even for seemingly simple things. And what I've noticed more and more is that almost everyone I talk to has an extremely selective memory about how to accomplish tasks. Most people like to say, "Oh, it's easy, you just go to so-and-so and it's done."

Oh really?

I remember back in middle school science class (or was it elementary school? or was it repeated in an intro math or cs class in university? hmm....) having an assignment to write instructions for preparing a peanut butter and jelly sandwich. A lot of people started with something like, "Put peanut butter on one slice of bread and jelly on the other and make a sandwich with them", to which the teacher would start to point out all the things missing with the algorithm. Where do you get the bread from? Which side of the bread do you put the peanut butter and jelly on? How do you spread it? How do the slices go together? What do you do after the slices are happy married in peanut butter and jelly bliss? The point was to get the students thinking critically about all the steps that are actually involved in accomplishing something.

Well, apparently most people didn't take that class, because the majority of people tend to be either lazy in conveying information or blissfully forgetful of how to actually accomplish things involving bureaucracies. Consider the case of mailing a package internationally. "Just go to the post office - it's really easy." Okay. Where's the post office? When is it open? How do I search for the post office locations and business hours? How do I get there? Where can I buy a box and packing tape? How do I fill out a customs form in a foreign language? Etc. These sorts of things require huge amounts of inertia (and probably half a day) for people unfamiliar with the country, and that inertia is often enough to cause complete paralysis of activity.

This sort of thing used to bug me to no end at Google, too. Many engineers assume that everyone else can fill in the details about how to do something, but often those details require intimate knowledge of their systems, and that knowledge is never documented. The coworkers I enjoyed working with were the ones who could anticipate what other people wouldn't know and send all of that information in their initial response (or politely provide help when requested), and the ones I hated working with were the engineers who would leave out huge, incredibly important steps, and then get annoyed with follow-up questions.

The ability to anticipate what others know is an extremely important skill, and one that most people are not very good at. If you want to improve your ability to communicate, this is a great area to work on.

Monday, November 15, 2010

American Nexus One in Korea

Yes, it's possible to use an American-purchased Nexus One in Korea. But it ain't easy. All you need is:

  • A long-stay visa. You're on your own for this one.
  • An Alien Registration Card. The only way to get one of these is to get some sort of long-stay visa.
  • A Korean-issued credit card. Get this after you get the Alien Registration Card. Since you have no credit rating in Korea, you will also need to open a Korean bank account as collateral. You can do this with a passport when you arrive, or with your Alien Registration Card later on.
  • A Korean citizen. Not for keeps - you can return them after signing up your phone.
  • A Nexus One.

Then simply go to the KT Service Center and have your Korean friend tell them you want to register your American-bought Nexus One on KT's network. Two hours later, they'll sell you a sim card for 5500 KRW (about $5), charge like a $30 registration fee, and you're good to go. Better than spending $600 for a new one.

The main point of this is that now you have maps with GPS. See http://thedarren.blogspot.com/2010/11/address-systems-are-broken-in-korea-and.html.

Enjoy.

Wednesday, November 10, 2010

Install AppEngine Python SDK on Ubuntu 10.10

AppEngine is still stuck on python2.5, but recent Ubuntu distros don't even have the python2.5 package available anymore, which makes getting AppEngine up and running a bit cumbersome. There is a third-party package available, but I like knowing the contents of what I'm installing. Here are the steps to install python2.5 on Ubuntu 10.10 without overwriting the existing python installation. This worked for me, but no guarantees it will work on your system. It's a good idea to try it first in a virtual machine to make sure it'll work. You can install VMWare Player for free from http://www.vmware.com.

This is mostly based on http://code.google.com/p/googleappengine/issues/detail?id=757#c51, but fixes some problems in that post.

1. Install some necessary libraries:

> sudo apt-get install libssl-dev           
> sudo apt-get install libjpeg62-dev        
> sudo apt-get install libfreetype6-dev     
> sudo apt-get install libsqlite3-dev       

2. Install the latest openssl from http://www.openssl.org/. Just click on the "Source" tab, and then get the LATEST. Currently this is http://www.openssl.org/source/openssl-1.0.0a.tar.gz. Save it as a file rather than opening with the Archive Manager.

Then:

> tar -xzvf openssl-1.0.0.a.tar.gz          
> cd openssl-1.0.0.a                        
> ./config                                  
> make                                      
> sudo make install                         

This installs stuff at /usr/local/ssl/ (header files, etc).

3. Install the latest sqlite from http://sqlite.org/. Currently, this is http://sqlite.org/sqlite-amalgamation-3.7.3.tar.gz.

> tar -xzvf sqlite-amalgamation-3.7.3.tar.gz
> cd sqlite-3.7.3                           
> ./configure                               
> make                                      
> sudo make install                         

4. Install python2.5 from source. Download at http://www.python.org/download/releases/2.5.5/.

> tar -xzvf Python-2.5.5.tgz                
> cd Python-2.5.5                           

Change Modules/Setup.dist: (just need to uncomment the following lines: 202, 206-209). It should look like this afterwards:

202: _socket socketmodule.c
203:
204: # Socket module helper for SSL support; ...
205: # socket line above, ...
206: SSL=/usr/local/ssl
207: _ssl _ssl.c \
208:    -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
209:    -L$(SSL)/lib -lssl -lcrypto

Then, you need to copy this setup file and do the install:

> cp Modules/Setup.dist Modules/Setup                                               
> ./configure                               
> make                                      
> sudo make altinstall                      

The altinstall (instead of plain "install") is important, because it will install it alongside the existing python distro (currently 2.6) instead of overwriting it. This means that when you run python, it will run 2.6, but you can explicitly use 2.5 by running python2.5.

5. Install Python Imaging Library. Download from http://www.pythonware.com/products/pil/. Latest version is currently at http://effbot.org/downloads/Imaging-1.1.7.tar.gz.

> tar -xzvf Imaging-1.1.7.tar.gz            
> cd Imaging-1.1.7                          
> sudo python2.5 setup.py install           

6. Finally, download and install Google AppEngine Python SDK from http://code.google.com/appengine/downloads.html#Google_App_Engine_SDK_for_Python.

Your system should now look like this:

> python --version          
Python 2.6.6                                                                        
> python2.5 --version       
Python 2.5.5                              

And when you run dev_appserver.py, explicitly start it via python2.5, like:

> python2.5 google_appengine/dev_appserver.py helloworld/     

Alternatively, you can change the first line of dev_appserver.py to read:

#!/usr/bin/env python2.5

instead of

#!/usr/bin/env python

You should now be able to run the entire Hello World python app described in the Getting Started tutorial at http://code.google.com/appengine/docs/python/gettingstarted/.

Enjoy!

Update: (May 13, 2012): Apparently there's an updated version here. I haven't checked it yet, but good luck! http://terse-words.blogspot.co.uk/2012/05/install-google-app-engine-on-ubuntu.html

Saturday, November 06, 2010

Communicating With Non-Native Speakers

It doesn't take much traveling around the world to learn that most people are really bad at communicating with people who don't speak their language. No rocket science there, but it's interesting to see how people's abilities to communicate differ.

First, a broad stereotype - men are much worse than women, and old people are much worse than younger people. Adding these up, older men are the worst, although older women tend to be pretty bad too.

You might ask, "But if you don't speak their language, then how could you possibly communicate?" Well, people who are good communicators follow a number of patterns.

First, they understand how to modulate the speed of their speech. This might sound dumb, but most people are really bad at this. You ask them to please speak slower, and they'll say the first 2-5 syllables slowly, and then revert back to full speed ahead.

Second, they understand that not knowing a word sometimes really just means not knowing a word no matter how many times it's repeated, so they try to explain things with different words. Bad communicators will repeat the exact same thing a few times and then get frustrated. (Bad communicators also make the logical fallacy of thinking that not understanding one thing means not understanding anything, and will vent their frustration about the dumb person on the other end of their conversation in easily understandable words.)

Third, they show a greater degree of verbal flexibility and creativity. They can make the mental leaps from what I'm trying to say to how it should actually be conveyed. Essentially, they can think like someone speaking their language as a non-native. Women are typically said to have better verbal skills than men, so again, no surprise.

Fourth, they're good at charades.

One of the worst communicators I've dealt with recently is a woman who works at the real estate agency that I used to find my apartment. She likes to repeat the same word over and over again as if hearing it a dozen times will somehow make me understand it, even if I've never heard it before. Most conversations result in her making ten phone calls ending with her son (who speaks pretty good English), giving me the phone, and having her son tell me, exasperated, "My mom says everything's fine and you can go." Seriously, that couldn't be communicated? I even asked in proper Korean, "Is everything okay?", and a simple "Ne" escapes her abilities. We can't even communicate on paper, because I can't read her chicken scratch script, and she's unable to write in print.

Ironically, communicating with someone who is too good a communicator can often be bad for your language learning, since they can fall into a pattern of speaking too slowly, too easily, and only using words they know you will understand. If you really want to get good at the language, then you probably need to speak with a lot of bad communicators.

Tuesday, November 02, 2010

Address Systems are Broken in Korea and Japan

Japanese and Korean people like to contest my assertion that the address system is broken in their countries. "It's not broken, it's just different", they'll say. And of course they don't have any problems with it, since they're fluent in their respective languages.

BOOM. There it is. If you need to be fluent in the friggin' native language in order to get from one place to another, something's wrong with the addressing system.

For background, Korea and Japan both have a strange system whereby street numbers don't mean a damn thing. Okay, they mean something - they're the order that houses/buildings went up on the street. That's super useful, perhaps if you're a street historian.

As a result, most conversations over addresses go something like this:

Person 1: Hey, can you meet us at X? It's right by Yeoksam Station.
Person 2: Sure. How do I get there?
Person 1: Just go to the station, go to Exit 7, walk diagonally across the street towards the Buy the Way, turn right at the guy selling kimchi dumplings, head 200m down the alleyway, get the password from the starry-eyed cat on top of the trash can, and use it to open the hidden door next to the noraebang.
Person 2: How do I find the door if it's hidden?
Person 1: See ya soon!
Person 2: FML.

Now, you might ask, how does mail get to its destination? How do deliveries make it to offices? Well, there is a "real" addressing system that involves a postal code as well as what I guess I would call a township code. The postal code references the general area, and the township code references a small geographic block within the town. I thought this was great, cause then I could just write this down and hand it to a cabbie, who could input all of it into his GPS system.

It's not a surprise what happened. Complete FAIL.

I told the cabbie the name of the place first, and the general location. He hadn't heard of it. I told him it's a bar/restaurant, and it's by a specific station. Then I showed him the exact address from the website.

Half an hour later, we're in the middle of some residential neighborhood with streets approximately 3 feet wide and a truck full of chickens approaching us head-on. And he says, in Korean, "Here it is."

Me: Uh, no. It's a bar, not a house. It's on a main street. This clearly isn't it.
Cabbie: Then the address is wrong.

Ten minutes of phone calls later between the cabbie and the bar, we learned that the actual place was about 500m away.

In summary, I feel really bad for mailmen in Korea.

Monday, November 01, 2010

My Lame Superpower

If I had to choose a lame superpower, it would likely be the ability to displace inefficient walkers. Like, a simple Darth Vader hand motion to just push them to the side of the road. Clearly this is just a limited form of telekinesis, and the real thing is way better, but that's why it's a lame superpower and not a full-fledged superpower.

Which brings me back to inefficient walkers. Man, I really hate these people. Bear in mind that I have absolutely nothing against slow walkers. I personally enjoy walking slowly, taking in the scenery, digesting lunch, chatting with a friend, whatever. But I am always conscious to not impede the progress of everyone else.

Here are some warning signs that you're an inefficient walker:

* You dart into an opening between people, and then slow down 50%.

* You are holding hands with people on both sides, and the road or path you are walking on is less than 500 meters wide.

* You enter a moving walkway that moves slower than grandma manages with her walker in a boulder field, but you choose to stand directly in the center, thereby allowing no one to pass.

Ah, to be a lame superhero. If only.

What's your lame superpower?