Posted by: jacobrmarcus | August 11, 2010

An Epic Journey for Tickets to Yogja

I have a friend from high school staying in Yogja, so Krycia and I decided that we would take the first weekend out of Jakarta to go there. I tried buying tickets for the flight online, but every time I would hit submit after filling in all of my information, the Air Asia site would take me to a screen with pictures of bumblebees on it that said “I’m sorry. Our server is busy now, but I assure you it’s not broken. Please try again later.” It never worked, so I tried calling. It took a long time to relay all of the information over the phone. I had to spell out everything like “J as in Jakarta. A as in America. C as in Canada…” At the last second my phone dropped the call. I called back and luckily they still had the information, but then my debit card got declined (I later found out that they don’t accept debit cards, only credit cards). They suggested I pay in cash at one of the Air Asia kiosks in Jakarta and told me the location closest to my hotel. I took a two hour taxi ride in traffic which barely moved most of the way to the mall where the kiosk was located. The mall was huge. It had several floors with almost every square inch taken for store space. After wondering around for a while searching for order in the madness, I found two security guards to ask. I was struggling to communicate myself, but then it seemed like they got it and told me to go to A-21. I realized that the floors and stores were numbered, so I tried finding A-21. I couldn’t find it. I did find an information desk. The person there pointed me down an aisle to the left. I still couldn’t find it. I went back and asked him to point to where I should go on the map. He pointed to the left and then outside of the mall! So I went outside of the mall and realized that the building across the street also had letters and numbers. I found A-21. It was a store called Esia, not Air Asia. I asked another security guard if an Air Asia store was anywhere around here. He paused for a second and then pointed behind me. My friends Will and Jess, a British couple who were on a 15 month tromp around Asia, had told me that the pause before giving directions was a sign that the person didn’t know. I asked the guard about the letter for the Air Asia store. After a long pause, he said “B” sounding unsure of himself. I then asked about the number and he said “B-10” after another long pause. I went to B-10 and sure enough nothing was there. The guard had completely made up the address, because I hadn’t gotten the hint that he didn’t know. I finally found the Air Asia at a tiny desk in a giant Target like store in the one of the other malls. The person manning the desk told me the server was down and that I should come back tomorrow. I told him I’d wait there just in case. Luckily, the server came back up and I got the tickets.

This tutorial discusses how to create scripts to generate interactive visualizations for the web using PHP and the Google Visualization API. The script will pull data from an HTML table on a website and use that data to generate the visualization. We will use an example of generating a map using the data from the population table located at http://dds.bps.go.id/eng/tab_sub/print.php?id_subyek=12%20&notab=1.

1) Download the HTML Table Extracting Script

In order to extract table data from a website, we use a script called tableExtractor.php
Download that script at http://wonshik.com/snippet/Convert-HTML-Table-into-a-PHP-Array by copying and pasting the code into a PHP file and saving it as tableExtractor.php
Googling “tableExtractor PHP” should also bring up the script.

2) Create a new PHP script

Create a new PHP script and save it in the same directory where tableExtractor.php is stored.

3) Extract the Table Data and Store it in a PHP Array

Paste the following lines of code into your PHP script:

include_once ‘tableExtractor.php’;


$path = ‘[PATH]’;
$anchor = ‘[ANCHOR]’;
$tbl = new tableExtractor;
$tbl->source = file_get_contents($path);
$tbl->anchor = $anchor;
$tpl->anchorWithin = true;
$d = $tbl->extractTable();

Replace [PATH] with the URL to the website that you want to extract data from. For instance, the first line might be replaced with (this is the URL for the population data we’re using in this example):


$path = ‘http://dds.bps.go.id/eng/tab_sub/print.php?id_subyek=12%20&notab=1’;

Replace [ANCHOR] with a line of HTML code on the website that you want to extract data from that occurs right before the code for the table occurs. The script will extract data from the first table it finds after the [ANCHOR]. For instance the second line might be replaced with:


$anchor = ‘<style id=”Untitled-3_11002_Styles”>’;

The script now extracts table from the data and stores it in the array $d.

4) Print out the Array

Paste the following lines of code after the first block of code:


foreach($d as $a) {
    foreach($a as $b)

    {
        echo $b.”<br>”;
    }
}

Try running the script. This should print out the data in the table. The first loop should be looping through all the columns of the table and the second loop should be looping through all the rows of the table.

5) Find the Format You Want the Data In

Go to http://code.google.com/apis/visualization/documentation/gallery.html and click on the visualization that you would like to create. In this example, we will use the “Geo Map”. Look at the code under the “Examples” section. The PHP script will generate code that looks like this example. Pay attention to how the data are loaded in. Some visualizations use the “data.setValue” command to load in data and some use the “data.addRows” command. This example will use the “data.addRows” command. To see how this works you can look at the “Examples” section of the Motion Chart at http://code.google.com/apis/visualization/documentation/gallery/motionchart.html. Look at the “data.addColumns” command. In this example, two columns will be added: one for the Province (instead of Country) and one for the Population (instead of Popularity). That means we need to have our PHP script include outputted HTML that looks something like this:

data.addRows([
[‘Nanggroe Aceh Darussalam’, 3930905],
[‘Sumatera Utara’, 11649655]
]);

Each row will be filled in with data from the table. Of course, the way each row looks will depend on the specific table. But in general, the number of entries in each row must be equal to the number of columns that are added using the “data.addColumns” command. The order in which the columns are added determines the order in which data appears in each row. In this example, we will use “data.addColumns” to add the Province column first and the Population column second. Therefore, the province must appear first in each row and the population must appear second.

6) Remove Unnecessary Header Information

Many tables have header information that will not be used in the visualization. In this example, we will not use the first few lines printed from the table. We need to skip the line that says “PopulationofIndonesiabyProvince1971,1980,1990,1995and2000” for instance. We skip lines by adding two counters to the loops. One counter ($row_num) keeps track of what row the loop is on and the other counter ($col_num) keeps track of what column we’re on. Make your PHP code look like this:


include_once ‘tableExtractor.php’;
$path = ‘http://dds.bps.go.id/eng/tab_sub/print.php?id_subyek=12%20&notab=1&#8217;;
$anchor = ‘<style id=”Untitled-3_11002_Styles”>’;
$tbl = new tableExtractor;
$tbl->source = file_get_contents($path);
$tbl->anchor = $anchor;
$tpl->anchorWithin = true;
$d = $tbl->extractTable();

$col_num = 0;
foreach($d as $a) {
    $row_num = 0;
    if($col_num >= 4) {
        foreach($a as $b)

        {
            echo $b.”<br>”;
            $row_num = $row_num + 1;
        }
    }
    $col_num = $col_num + 1;
}

Run the PHP script. The first line printed should now be the province data.

7) Store Data in Variables

In this example, we will need to store the province data and the population for the most recent year. Therefore, we will create two variables to store this information $province and $population. Change the loop as follows:


$col_num = 0;
foreach($d as $a) {
    $row_num = 0;
    if($col_num >= 4) {
        foreach($a as $b)

        {
            if($row_num == 0) {
                $province = $b;
            }elseif($row_num == 5) {
                $population = $b;
            }
            $row_num = $row_num + 1;
        }
        echo “Province:”.$province.”<br>”;
        echo “Population:”.$population.”<br>”;
    }
    $col_num = $col_num + 1;
}

Run the PHP script. You should see that we now have the province and the population data extracted from the table.

8 ) Remove Unnecessary Information at the End

Many tables have information at the end of the table that we will not need in the visualization. In this example for instance, we want to get rid of the line that says “Note : Including non permanent resident (homeless people, sailor, boat people and remote area community).” so the script doesn’t think that “Note” is a province of Indonesia. To accomplish this task, edit the loop in your PHP script to look like this:


$continue = “true”;
$col_num = 0;
foreach($d as $a) {
    $row_num = 0;
    if($col_num >= 4) {
        foreach($a as $b)

        {
            if($row_num == 0) {
                $province = $b;
            }elseif($row_num == 5) {
                $population = $b;
            }
            $row_num = $row_num + 1;
        }
        if($province == “INDONESIA”) {
            $continue = “false”;
        }
        if($continue == “true”) {
            echo “Province:”.$province.”<br>”;
            echo “Population:”.$population.”<br>”;
        }
    }
    $col_num = $col_num + 1;
}

We have created a new variable called $continue. Initially, $continue is set to “true”. Whenever $continue equals “true” then we know that we have a valid province. When we hit the province with the value “INDONESIA”, then we stop getting valid provinces so $continue is set to “false”. This solution is particular to this example. For other tables, you may want to stop based on the value of $col_num or something like that, but try to make the script as general as possible so that if the table changes a little it doesn’t break your script.

9) Format the Output for the data.AddRows Command

In Step 5, we found what format we needed for the data.AddRows command. Now is the time when we output the data in that format. Change the loop in our PHP script to look like this:


$continue = “true”;
$col_num = 0;
foreach($d as $a) {
    $row_num = 0;
    if($col_num >= 4) {
        foreach($a as $b)

        {
            if($row_num == 0) {
                $province = $b;
            }elseif($row_num == 5) {
                $population = $b;
            }
            $row_num = $row_num + 1;
        }
        if($province == “INDONESIA”) {
            $continue = “false”;
        }
        if($continue == “true”) {

            preg_match_all(‘/[A-Z][^A-Z]*/’,$province,$results);
            $province_with_spaces = ”;
            foreach($results[0] as $s) {
                $province_with_spaces .= $s;
                $province_with_spaces .= ‘ ‘;
            }
            $province = trim($province_with_spaces);
            if($province == ‘Nanggroe Aceh Darussalam’) {
                $province = ‘Aceh’;
            } elseif($province == ‘Kep. Bangka Belitung’) {
                $province = ‘Bangka Belitung’;
            } elseif($province == ‘D K I Jakarta’) {
                $province = ‘Jakarta Raya’;
            } elseif($province == ‘D I Yogyakarta’) {
                $province = ‘Yogyakarta’;
            }

            $population_formatted = str_replace(‘,’,”,$population);
            echo “[‘”.$province.”‘,”.$population_formatted.”]”.”<br>”;
        }
    }
    $col_num = $col_num + 1;
}

Try running the PHP script. You should see output formatted a lot like the example in the “Geo Map”. Notice that we had to replace the commas in the numbers using the PHP str_replace command. We also had to make sure the province names matched up with the province names that Google uses. Those names can be found at http://en.wikipedia.org/wiki/ISO_3166-2:ID. Depending on the table, there may be more formatting you have to do before outputting the table entries. We are not yet done though. We have to add the commas after each row, but this is a little tricky because the last row should not have a comma. Change your PHP script to look like this:


include_once ‘tableExtractor.php’;
$path = ‘http://dds.bps.go.id/eng/tab_sub/print.php?id_subyek=12%20&notab=1&#8217;;
$anchor = ‘<style id=”Untitled-3_11002_Styles”>’;
$tbl = new tableExtractor;
$tbl->source = file_get_contents($path);
$tbl->anchor = $anchor;
$tpl->anchorWithin = true;
$d = $tbl->extractTable();

$data_num = 0;
$continue = “true”;
$col_num = 0;
foreach($d as $a) {
    $row_num = 0;
    if($col_num >= 4) {
        foreach($a as $b)

        {
            if($row_num == 0) {
                $province = $b;
            }elseif($row_num == 5) {
                $population = $b;
            }
            $row_num = $row_num + 1;
        }
        if($province == “INDONESIA”) {
            $continue = “false”;
        }
        if($continue == “true”) {
            $data_num = $data_num + 1;
        }
    }
    $col_num = $col_num + 1;
}
$last_data_num = $data_num-1;

$data_num = 0;
$continue = “true”;
$col_num = 0;
foreach($d as $a) {
    $row_num = 0;
    if($col_num >= 4) {
        foreach($a as $b)

        {
            if($row_num == 0) {
                $province = $b;
            }elseif($row_num == 5) {
                $population = $b;
            }
            $row_num = $row_num + 1;
        }
        if($province == “INDONESIA”) {
            $continue = “false”;
        }
        if($continue == “true”) {

            preg_match_all(‘/[A-Z][^A-Z]*/’,$province,$results);
            $province_with_spaces = ”;
            foreach($results[0] as $s) {
                $province_with_spaces .= $s;
                $province_with_spaces .= ‘ ‘;
            }
            $province = trim($province_with_spaces);
            if($province == ‘Nanggroe Aceh Darussalam’) {
                $province = ‘Aceh’;
            } elseif($province == ‘Kep. Bangka Belitung’) {
                $province = ‘Bangka Belitung’;
            } elseif($province == ‘D K I Jakarta’) {
                $province = ‘Jakarta Raya’;
            } elseif($province == ‘D I Yogyakarta’) {
                $province = ‘Yogyakarta’;
            }

            if($data_num == $last_data_num) {
                $population_formatted = str_replace(‘,’,”,$population);
                echo “[‘”.$province.”‘,”.$population_formatted.”]”.”<br>”;
            } else {
                $population_formatted = str_replace(‘,’,”,$population);
                echo “[‘”.$province.”‘,”.$population_formatted.”],”.”<br>”;
            }
            $data_num = $data_num + 1;
        }
    }
    $col_num = $col_num + 1;
}

Run the PHP script. It should generate the same list of data in rows as before but this time with a comma at the end of each row except the last one. The script uses two loops that are very similar. The first loop goes through all the data and stores when the last data row occurs. The second loop goes through the same data but then this time outputs the data with a comma after every row except for the last one.

10) Add in the Rest of the Google Visualization Code

Now that we have formatted all the data we need to add in all the other code. Change your PHP script to the following:


include_once ‘tableExtractor.php’;
$path = ‘http://dds.bps.go.id/eng/tab_sub/print.php?id_subyek=12%20&notab=1&#8217;;
$anchor = ‘<style id=”Untitled-3_11002_Styles”>’;
$tbl = new tableExtractor;
$tbl->source = file_get_contents($path);
$tbl->anchor = $anchor;
$tpl->anchorWithin = true;
$d = $tbl->extractTable();

$data_num = 0;
$continue = “true”;
$col_num = 0;
foreach($d as $a) {
    $row_num = 0;
    if($col_num >= 4) {
        foreach($a as $b)

        {
            if($row_num == 0) {
                $province = $b;
            }elseif($row_num == 5) {
                $population = $b;
            }
            $row_num = $row_num + 1;
        }
        if($province == “INDONESIA”) {
            $continue = “false”;
        }
        if($continue == “true”) {
            $data_num = $data_num + 1;
        }
    }
    $col_num = $col_num + 1;
}
$last_data_num = $data_num-1;

echo “<html>\n”;
echo “<head>\n”;
echo “<script type=’text/javascript’ src=’http://www.google.com/jsapi’></script&gt;\n”;
echo “<script type=’text/javascript’>\n”;
echo “google.load(‘visualization’, ‘1’, {‘packages’: [‘geomap’]});\n”;
echo “google.setOnLoadCallback(drawMap);\n”;

echo “function drawMap() {\n”;
echo “var data = new google.visualization.DataTable();\n”;
echo “data.addColumn(‘string’, ‘Province’);\n”;
echo “data.addColumn(‘number’, ‘Population’);\n”;
echo “data.addRows([\n”;
$data_num = 0;
$continue = “true”;
$col_num = 0;
foreach($d as $a) {
    $row_num = 0;
    if($col_num >= 4) {
        foreach($a as $b)

        {
            if($row_num == 0) {
                $province = $b;
            }elseif($row_num == 5) {
                $population = $b;
            }
            $row_num = $row_num + 1;
        }
        if($province == “INDONESIA”) {
            $continue = “false”;
        }
        if($continue == “true”) {

            preg_match_all(‘/[A-Z][^A-Z]*/’,$province,$results);
            $province_with_spaces = ”;
            foreach($results[0] as $s) {
                $province_with_spaces .= $s;
                $province_with_spaces .= ‘ ‘;
            }
            $province = trim($province_with_spaces);
            if($province == ‘Nanggroe Aceh Darussalam’) {
                $province = ‘Aceh’;
            } elseif($province == ‘Kep. Bangka Belitung’) {
                $province = ‘Bangka Belitung’;
            } elseif($province == ‘D K I Jakarta’) {
                $province = ‘Jakarta Raya’;
            } elseif($province == ‘D I Yogyakarta’) {
                $province = ‘Yogyakarta’;
            } elseif($province == ‘Papua’) {
                $province = ‘ID-IJ’;
            } elseif($province == ‘Maluku’) {
                $province = ‘ID-MA’;
            }

            if($data_num == $last_data_num) {
                $population_formatted = str_replace(‘,’,”,$population);
                echo “[‘”.$province.”‘,”.$population_formatted.”]”.”\n”;
            } else {
                $population_formatted = str_replace(‘,’,”,$population);
                echo “[‘”.$province.”‘,”.$population_formatted.”],”.”\n”;
            }
            $data_num = $data_num + 1;
        }
    }
    $col_num = $col_num + 1;
}

echo “]);\n”;
echo “var options = {};\n”;
echo “options[‘region’] = ‘ID’;\n”;
echo “options[‘dataMode’] = ‘regions’;\n”;
echo “var container = document.getElementById(‘map_canvas’);\n”;
echo “var geomap = new google.visualization.GeoMap(container);\n”;
echo “geomap.draw(data, options);\n”;
echo “};\n”;
echo “</script>\n”;
echo “</head>\n”;

echo “<body>\n”;
echo “<div id=’map_canvas’></div>\n”;
echo “</body>\n”;

echo “</html>\n”;

The echo’s now produce HTML code instead of text so you will no longer see text output if you run the PHP script. Instead, you should see the visualization. View the source of the HTML page with the visualization to see what the echo’s are now producing.

Posted by: jacobrmarcus | August 11, 2010

How to Make Interactive Visualizations for the Web

This tutorial I made for the BPS crew discusses how to create interactive visualizations for the web using the Google Visualization API.

1) Choose a visualization

Go to the following web page and look at the visualizations there.
http://code.google.com/apis/visualization/documentation/gallery.html
Click on the one that you would like to create. Read the “Data Format” section. This describes what format the spreadsheet of data should be in to create
this visualization.

2) Create a spreadsheet

In Excel, create a spreadsheet that follows the format described in the “Data Format” section of the visualization that you would like to create.

3) Move the spreadsheet to Google

Go to http://www.gmail.com. Log in.
After you are logged in, click on the “Documents” link in the top right corner. In the top left corner, click on “Create new” and then click on “Spreadsheet”. Copy and paste your Excel spreadsheet into the Google spreadsheet. Click on “File” and then click on “Save and close”. Name your spreadsheet.

4) Make your spreadsheet public

Check the box next to your spreadsheet, then click “Share” and then “Sharing Settings”. Under “Permissions”, click “Change” and then click “Public on the web” and finally “Save” and “Close”. Your spreadsheet is now public.

4) Create the visualization

Click on your spreadsheet’s name to go back to editing the spreadsheet. In the top left hand corner, click on “Old version” and then “Back to old version”. Highlight all of the cells in the spreadsheet. Then in the top menu, click on “Insert” and then click on “Gadget…” Choose the visualization that you would like and then click “Add to Spreadsheet”. Scroll to the top of the document. Click “Apply and close”. You should see your visualization now.

5) Publish your visualization

In the top right corner of the visualization click on the upside down triangle. Then click “Publish Gadget…” Copy the text in the box. Open notepad and paste in the text you copied. Then click “File” and “Save as…” For the “Save as type” select “All Files” and then name your notepad document anything you want as long as it ends in .html

Now when you click on the document it should open in a web broswer and you should see your visualization. Now ask the webmaster to put the html file containing your visualization online!

6) Learn more

Further documentation is available at http://code.google.com/apis/visualization/documentation/

Posted by: jacobrmarcus | August 11, 2010

Make Everyone Count by Counting Everyone

My first two days in Jakarta, I attended a workshop on the development of a sample registration system (SRS) in Indonesia. A SRS is a system for registering deaths in a sample of locations throughout the country. A debate arose at the workshop over the proper scope of the new registration system. Some people argued for an ambitious plan to cover around 14 million in the sample, while others wanted to start small and build up from there. The former group thought that if the government did not initially aim for a large enough sample, it would never achieve the goal of complete vital registration for the country. The latter group thought a system with too large a sample would collapse.

The participants in the workshop, made up of the Ministry of Health staff, BPS administrators, international researchers, and a few donors, also discussed what geographical units should be sampled. One of the researchers stressed that the geographical unit sampled should already have government administration. For instance, one might think to use census administration blocks as the sampling unit, because the population in those blocks has been clearly delineated, but then two existing municipalities might overlap in a single block making the assignment of responsibilities in administering the SRS more complicated.

Another point came up again and again: the SRS must be only an interim solution. The system should provide the foundation for eventually achieving complete vital registration for all of Indonesia. The Indonesian government had a legal responsibility to count all deaths, to make everyone count by counting everyone.

Posted by: jacobrmarcus | August 10, 2010

Suiting Up in Bangkok

Michael and a few of his friends had organized a trip to Bangkok with the purpose of getting tailored suits. A $1000 suit in the states could be purchased in Bangkok for $200. From the airport, we got a taxi straight to the tailor’s. I quickly felt in over my head after we arrived. Hundreds of different fabrics filled the walls. I don’t even own a tie. The tailors were very nice, but aggressive about selling their products. It seemed like there was a special deal for everything if I just went for one more shirt or if I just bought one more pair of pants or if I bought the last sheet of fabric for a jacket. Coffee and beer flowed freely. Whereas one of Michael’s friend purchased a seersucker suit and another a plaid jacket with purple flowered fabric lining on the inside, I decided to play it safe. I got a dark blue suit, khaki pants and a white t-shirt. The tailors took my measurements. They must have started working on the clothes immediately after we left, because we had to return that night to get fitted. In the meantime, we went to get Thai massages. We avoided the places that looked like thinly veiled brothels and settled on a more reputable, clean looking place. We went back to the tailor’s after the massages. They had our clothes ready, but they weren’t perfectly fitted yet. We tried the suits on and they made another set of measurements. The clothes were all ready to go an hour or so before we left for the airport. I try to wear my pants as much as possible now. It’s a little hot to be wearing the suit right now.

Posted by: jacobrmarcus | August 10, 2010

Sliding Doors

On Friday, Michael and I left for Bangkok. Unfortunately, we misjudged the amount of time it would take to get to the airport and missed our flight by a few minutes. You know that cliché about the guy who rushes to the flight, misses it and then the flight crashes? That didn’t happen. But we realized that our night, perhaps our lives had been forever altered. Every choice we made was now significant, because it would never have happened if we had made our flight. We had a nice dinner with some of Michael’s friends and then went to bed. We had to get up at 5 the next morning to catch our new flight. We woke up to a storm. It was pouring rain and thundering outside. We tried calling a taxi, but all of them were reserved and we were put on hold. We went outside and tried hailing one, but the streets were empty. Are we going to miss another flight? Finally, a taxi came and we hopped in. We got to the airport, checked in and boarded the plane. It was still storming. We were seated in the exit row. Michael observed that “We’re in the exit row of plane that we weren’t supposed to be on.” I got very superstitious. The flight, much like the night before, was uneventful. We arrived safely in Bangkok.

Posted by: jacobrmarcus | August 10, 2010

Will Rwanda be the next Singapore?

Kelly told me a story about how she once was eating at a coffee shop with her bag in the seat next to her. A pregnant woman came up to her and started crying and speaking very quickly in a different language. Kelly tried to figure out what the woman wanted. Then, abruptly, the woman walked away. Kelly turned to the seat next to her and saw that her bag was missing. She called the police. Within a couple of minutes, several policemen arrived. They took her over to the station. A policeman presided over a bank of television screens showing comings and goings around the entire city. The police quickly found the footage of the coffee shop. She saw herself there, saw the pregnant woman come up to her and a man come from behind and take her bag. The police followed the man on the tape and found where he currently was in the city. They went and picked him up. Kelly didn’t want to press charges. She was just happy she got her bag back. The police though were going through her bag asking her what everything was worth. She kept telling them that nothing was worth much. Then they pulled out $250. Apparently, any stolen property worth that much is classified as grand theft. The man got 7 years in jail and the pregnant woman got deported.

On the other hand, I never saw a homeless person in Singapore. Every Singapore citizen at birth gets a tax sheltered account which holds contributions from the government and a pay check once employment begins. The account can be used to buy subsidized housing or to pay for expensive medical procedures. In 1960, per capita GDP was $4,264*. Now, it’s $37,726.

With elections near in Rwanda, I’ve been reading a little about Paul Kagame. Both Paul Kagame and Lee Kuan Yew, Singapore’s founding father, have been criticized for their record on human rights while in the same breath being praised for their development policies. Will Rwanda be the next Singapore?

Posted by: jacobrmarcus | August 10, 2010

A Tully’s? Have I left Seattle Yet?

I eased my way into traveling by starting with a trip to Singapore to visit my friend Michael. The first day there, Michael suggested I wander around Orchard Road while he worked. Orchard Road was a long succession of giant malls. Passing by a Starbucks and a Tully’s, I went into a Borders bookstore and bought a book on learning to speak Bahasa Indonesian.  I met up with Michael at a Thai place for dinner and then for drinks by the Marina. The second day in Singapore, I hung around the business district, met up with Michael at an Indian place for lunch, and grabbed dinner in Chinatown. The third day, I went to Universal Studios with Michael’s friend Kelly who had the day off from work. We watched the Shrek 4-D movie, rode the Mummy roller-coaster twice, and walked around Little Broadway and Little New York. I had just been to New York the week before. I met up with Michael for dinner on Arab Street. On the fourth day, I went to the Casino. I walked around a bit searching for a table with a minimum bet of less than 25 singh (about $20). I finally found a roulette table where the minimum bet was 5 singh. There were a few guys there very carefully placing thousands of dollars worth of chips on different numbers. It looked like they had a system. I placed 5 singh on black. “No, no” I was admonished by the Casino staff. “The minimum bet on black and red is 25 singh.” “It’s almost as good as a coin flip” I thought. “Probably, the best bet in the whole casino.” I put down 25 singh. I won and, in a second, had doubled my money. With newfound confidence, I went over to the blackjack tables. I made the minimum bet of 25 singh and got a blackjack. I placed another bet of 25 singh and got another blackjack. Now, I was up 75 singh. I put down another bet of 25 singh and got yet another blackjack, but the dealer on this hand got a blackjack as well, so I lost the bet. I figured I’d stop while I was ahead and changed in my chips. After the Casino, I met up with Michael for Lunch with Old Friends (LWOF). The name was at first a joke for getting lunch with a few people he had just met, but then the lunch became a regular occurrence. There is high turnover among expats in Singapore, so a regular lunch date with the same people quickly becomes LWOF.  Later that day, I had a nice bike ride around East Coast park with paths along the shoreline and views of the city in the distance. Alas, Singapore isn’t all malls and skyscrapers!

Posted by: jacobrmarcus | August 10, 2010

Permethrin is unhealthy for mosquitoes and other living things

The travel doctor suggested that I soak all my clothes in permethrin before I left. Permethrin is toxic to mosquitoes and, judging from the label on the back of the package, toxic to humans as well. The label warned that if I accidentally consumed the substance in the process of treating my clothes, I needed to contact poison control immediately. Fair enough. But the label further warned that if I inhaled it or if a drop of the fluid splashed onto my skin, that I should also then immediately contact poison control. Can I wear my clothes after they’ve been treated? I called the travel clinic to double check if it was really, absolutely necessary to use the stuff. The nurse scared me. “They don’t call dengue fever break bone fever for nothing.” “Alright, I’ll use it.” I opened the package. It contained several sets of plastic gloves, plastic bags to soak the clothes in, and containers of the permethrin fluid. I folded my clothes, stuffed them into the plastic bag, put on a pair of gloves and poured the fluid into the bag. It smelled like motor oil. I left my clothes to soak for a few hours, came back and carefully hung them to dry. I hadn’t let any of the fluid touch my skin and had inhaled a hopefully, benign amount of the fumes. I had used 2 containers of the permethrin for the bednet, two pairs of pants and two shirts, but still had about 4 more containers. The label on the package strongly advised against pouring out the contents of the containers in the sink or throwing them out with the trash. Unfortunately, the special waste disposal areas in Seattle were closed on Fridays and I was leaving the next day, so I put the left over containers in a paper bag, drew a skull and crossbones on it and stapled it shut. If anyone needs any permethrin, let me know.

Posted by: jacobrmarcus | August 10, 2010

Day 0

My name is Jake Marcus and I am a post-bachelor fellow at the Institute for Health Metrics and Evaluation (IHME) and a student in the Master of Public Health program at the University of Washington. I am currently in Jakarta working for Badan Pusat Statistik, the Indonesian government’s bureau of statistics.

Hi, Mom! You’re probably my only reader, but a hearty salamat datang to anyone else who is passing through. If you’re interested in other IHME life years*, then check out the blogroll.

The picture is of Manado in the Indonesian province of North Sulawesi and was taken by Krycia Cowling.

« Newer Posts

Categories