All posts by Daniel Bank

My name is Daniel Bank. I am a software engineer with a background in physics. My primary interests are mobile and web development, as well as automation. My hobbies include traveling, scuba diving, playing music, writing, learning about mythology and history, and playing games.

A Letter to Mr. Ishikawa

Mr. Tomimatsu Ishikawa
Mr. Tomimatsu Ishikawa

This is Mr. Tomimatsu Ishikawa (2/28/1918 – 7/17/2013), WW2 veteran, fighter for soldier’s rights, and scuba diver.  He served on a fleet oiler, the Irō, during the war and was one of the few survivors when she was sunk by an American air raid as part of Operation Desecrate One.  In his later life, he advocated for the Japanese government to properly recognize and inter the remains of his comrades who had died aboard the Irō.  On March 30, 2004, at the age of 86 years old, Mr. Ishikawa dove 90 feet to the ship’s wreck and performed a memorial ceremony for his friends.  Partly, the reason for this dive was personal.  He wanted to pay respect to his friends.  The other reason for the dive was to generate media attention and broader awareness about the situation of the Irō.

Yoko and Mr. Ishikawa
Yoko and Mr. Ishikawa

The guide who helped him complete his mission was my friend Yoko Higashide.  She was very close to Mr. Ishikawa and regarded him as a grandfather.  Before her meeting Mr. Ishikawa, Yoko had limited knowledge about the shipwrecks of Palau.  She had worked there as a dive guide for two years without knowing that there were any shipwrecks.  It was only when she started working at Fish ‘n’ Fins, an international dive shop, that Yoko started to know about the WW2 history of Palau.  Even as she would lead dives to the wrecks, she always felt bad to be diving on them.  In her words, “It’s like we are playing at a graveyard”.

Me holding my letter to Mr. Ishikawa
Me holding my letter to Mr. Ishikawa

In the summer of 2007, I had the privilege to go diving in Palau.  One of the dives I went on was the Irō.  It was not the first time I had been there, but this time was different because my guide was Yoko.  She explained to me about the ship’s history and told me Mr. Ishikawa’s story.  I was inspired by his determination to return to the Irō, even though it was deep and he was 86 years old.  I asked Yoko if she could help me write a letter in Japanese to Mr. Ishikawa.  I wanted to let him know that I was an American who was moved by his mission to pay respect to his fallen comrades.  You can see my letter to him at the bottom of this blog post.  To my surprise, he wrote me back a long letter.  Although I mailed him again in 2009, that was the end of our correspondence.  For me, though, the one letter was enough.  Our lives were connected from then on.

Mr. Ishikawa praying for his comrades
Mr. Ishikawa praying for his comrades

Now, when I dive on war wrecks I am reflective of the human suffering that led the ships to be where they are.  So I do not consider wreck diving to be a leisurely activity like diving on a reef.  It is a somber activity like visiting a graveyard or the site of an old battle.  It is important to go there to remember our history.  Regarding my experience of writing a letter to Mr. Ishikawa, I think it is a truly great thing that even though Japan and the USA fought bitterly within his lifetime, he still lived to see the day when Yoko and I could be friends and enjoy scuba diving together.  I hope that I can always be a peaceful person and make him smile down from heaven.

Please read Mr. Ishikawa’s story by Yoko.  It is the second link in the Related Media below.

Related Media:

Memorial Video of Mr. Ishikawa

Mr. Ishikawa’s Story by Yoko Higashide

Returning Mr. Ishikawa’s Ashes to the Iro by Yoko Higashide

Daniel’s Letter in English

Daniel’s Letter in Japanese (Typed)

Daniel’s Letter in Japanese (Handwritten)

Mr. Ishikawa’s Reply Letter

Beer Golf

Neon Beer Pong Sign


Beer Golf is a game played with ping pong balls, plastic cups, and beer.  It is played by my friends and I as an alternative to Beer Pong, another popular drinking game that we all enjoy playing.  With Beer Golf, your entire household becomes a golf course where each “hole” is an opportunity to drink.

Necessary Equipment:

A plastic cup

Ping pong balls for all players

A permanent ink marker

Plenty of beer

Number of Players:

Two or more people*

* Update: My friend assures me that the maximum number of players is four.  Not being a golfer, I was unaware of this Pace of Play rule.


  • Use the permanent ink marker to mark everyone’s ping pong ball with a name or symbol so it can be distinguished.
  • Fill the plastic cup with beer and choose a starting location for it somewhere in the house.
  • Choose the starting location for players.
  • Choose a par for the cup.  The par shouldn’t be too hard or too easy.  More on this later.
  • Each player takes turns throwing their ball towards the plastic cup.  Both the player’s feet must be behind the resting place of their ball.  The player is allowed to lean forward.  The player is allowed to leap and take jump shots so long as they do not step over the line.  The player is not allowed to brace themselves on furniture or other objects.
  • As with golf, the person who is the furthest away from the cup shoots.
  • The person who wins the cup gets to decide the cup location and par for the next cup.  Players start shooting from the location of the previous cup.

Drinking Rules:

  • The player with the most shots to complete the cup has to drink the beer in the cup.
  • If the player who decided the cup location and par shoots above that par, they automatically lose the cup and have to drink the beer in the cup.  This prevents people from choosing ridiculous hard cup.
  • Everyone who shoots below par gets to assign drinks to other players.  They can assign as many drinks as how far below par they were.  This prevents people from choosing ridiculously easy cups.
  • Everyone has to have a beer in their hand at all times.  Rule breakers have to drink.  The only exception to this rule is if you are playing with the Caddy Rule.

Caddy Rule:

  • If there aren’t enough balls for everyone who wants to play, you can play with the Caddy Rule.  Essentially the loser of the previous cup has to be the caddy for the winner (and is no longer an active player on the next cup).  They are required to hold the beer for the player, fill the cup with beer and place it at the chosen starting location, offer advice to the player, and compliment the player when they make a good shot.

Slightly Euphoric

Om in Lotus from
Om in Lotus from

I try to use words to encompass meaning. To better describe, I use more words. Sometimes I try to find the one word that would encompass all meaning. What would that word be? OM? Maybe, if I was a Hindu. So here we are again, describing the same uncertainty that a relativist view will always but unfortunately lead to. Yet here in the hopelessness of the problem, perhaps there is an answer. Not so much a “truth” that I can know is right. This answer is a different, more euphoric answer. I know it not. But as I reflect on it, I smile and I write. The moment will be fleeting. For as each blog post begins, surely it ends. My euphoria just like my pain; only temporary. But if I really knew this, I would know a “truth”. And as I said, I bear no truths… only an answer.

Calendoo – a Google Apps Script

Google Apps Script
Google Apps Script

Recently I discovered Google Apps Script, a comprehensive system for automating your Google accessories (Gmail, Drive, Calendar, Tasks, etc.).  It includes a web IDE for writing JavaScript code and easy-to-use API’s for each Google accessory.  When you finish writing your scripts, you can save them to your Google Drive and set up triggers to have them run automatically.  Within a few hours of discovery, I had written my own Google Apps Script, which I will now share with you.

First a little background on the problem I needed to solve.  I use the Google Calendar extensively.  In addition to the regular events I put on my calendar (lunch with friends, doctor appointment, anniversary), I also put reminders for tasks that need to get done.  I realize that Google already has a Tasks list for this very purpose.  Call me crazy but I find it easier to whip out the Calendar app on my phone and insert a new event.  The only problem is that I also procrastinate.  Weeks will go by and the task’s calendar event is still languishing on my Calendar.  At the end of every month, I have to clean up my Calendar and decide which tasks are actually important or not.  The ones that are all have to be moved to the next month.

Enter my new Google Apps Script, Calendoo.  Calendoo looks at yesterday’s calendar events and either advances them into the future, if they’re important, or moves them off the Calendar and into a Tasks list (called TasksFreezer), if they are unwanted.  In order for Calendoo to recognize which events belong where, you simply add a Calendoo symbol in the name of your calendar event.  The Calendoo symbols are as follows:

:. (colon period) = Unimportant event, advance yesterday’s unimportant events to next month.

:! (colon exclamation-point) = Important event, advance yesterday’s important events to today.

:? (colon question-mark) = Semi-important event, advance yesterday’s semi-important events to next week.

:- (colon dash) = Unwanted event, take it off the calendar and put it in the TasksFreezer Tasks list.

:+ (colon plus) = Wanted task, take it off the TasksFreezer Tasks list and put it on the calendar today at noon.

If you want to use the Calendoo script, read on for an explanation of how to set it up.

Google Apps Script: Make a copy
Google Apps Script: Make a copy

1. Import the script into your own Google Drive

Click on the link at the bottom of this blog post.  The Google Apps Script IDE page should open up showing the Calendoo code.  Click the [File] menu and choose [Make a copy].  The Calendoo script should be downloaded to your own Google Drive.  Access it by going to  The Calendoo script file should be in your root folder.  Click on it to open it.  At this point, you may have to go through a wizard for installing Google Apps Scripts in Google Drive if this is your first time using them.  The Google Apps Script IDE should open again, this time with the Calendoo script installed in your own Google Drive.

Advanced Google Services Dialog
Advanced Google Services Dialog

2. Set up APIs and Permissions for the script

Next, click on the [Resources] menu and choose [Advanced Google services].  An Advanced Google services dialog will appear.  Next to Tasks API, click the radio button to turn it on.  This allows the code to access Tasks API functionality (used for managing Task lists in your calendar).

Google Developers Console Page
Google Developers Console Page

Now you will need to enable the services.  Click the [Google Developers Console] link at the bottom of the dialog.  The Google Developer Console website should open.  In the list of APIs, click the radio buttons next to Calendar API and Tasks API to turn these services on.  Now close the Google Developers Console page and the Advanced Google services dialog.

Run the processEvents Function
Run the processEvents Function

Back in the Google Apps Script IDE, we need to run a function in the Calendoo script so it can request permissions from you the user (yes, this step is a little strange, I know).  Click on the [Run] menu and choose the [processEvents] function.  A dialog will appear saying, “This app would like to: manage your calendars, manage yours tasks, view your tasks”.  Accept the dialog and it will close.  The Calendoo app is ready for action, we just need to pull the trigger.

3. Set up a trigger for the script

Current Project's Triggers
Current Project’s Triggers

To create a trigger to run the script periodically, click on the [Resources] menu and choose [Current project’s triggers].  A dialog will appear with a link, “No triggers set up. Click here to add one now”.  Click on that link.  The dialog will now show the options for our new trigger.

New Project Trigger
New Project Trigger

Choose to run the processEvents function.  This is the main function that drives the entire Calendoo script.  Make the event Time-driven and set it to run everyday at Midnight to 1am.  This will cause the processEvents function to be executed everyday at midnight, pushing yesterday’s events forward.  Click Save.  The Calendoo script is now completely configured for your Google account.  Hurrah!

I hope you enjoy the Calendoo script.

Click here to view the Calendoo script and use it for your own Google Calendar.

Digitizing Old LEGOmation Movies

Elgato EyeTV Hybrid
Elgato EyeTV Hybrid

I recently got my hands on an Elgato EyeTV Hybrid which lets me connect my MacBook Pro to a VHS player.  After a relatively easy setup, I am now able to play the tapes on the VHS player and save them to the MacBook in a digital format.  Finally, all of my old home videos can be brought into the digital age.  As exciting as this is, it also scares me.  Most of my home videos are completely ridiculous.  I would be embarrassed if the internet bore evidence to what kind of a weird kid I was.

Really though, these videos are already part of the public domain in a limited sense.  That’s because when I was ten years old, my sister, my cousin, and I had our own Public Access TV Show.  For those too young to remember, Public Access was a local TV station in most cities that aired shows created by anyone who wanted to pay for one.  The way it worked was that you would send in your content (on VHS tape) and it would be aired at whatever time slot you had received from the station.  The idea seems almost paleolithic compared to today where anyone can create a YouTube channel and share videos with the entire world in literally a matter of seconds.

Monk and Moo
Monk and Moo

Our TV show was called Monk and Moo.  Monk (short for Monkey) was my cousin.  She was the camera person and director.  My sister was Moo, the lead actress, host, and producer.  My role on the show was as more of an extra, filling in when necessary and doing small sketches (my name didn’t make it to the title of the show either).  My major contributions to Monk and Moo were my animation shorts.  I made several of these kinds of clips where I would use my LEGO’s and do a kind of animation called stop motion animation.  The master of this style is, of course, Ray Harryhausen.

Ray Harryhausen and the Medusa
Ray Harryhausen and the Medusa

The premise of stop motion animation is simple.  First, you place the objects being animated in a position.  Then you film that frame of the scene for a split second and stop the video.  Rinse and repeat.  The result is a jerky but consistent sequence of film where your object appears to move around.  Granted I wasn’t a master of this technique.  Most my videos feature at least one second of footage where you can see my hand placing a LEGO guy because I didn’t correctly stop or start the film.

Another stumbling block I had when doing stop motion animation was that I could only have dialog and music if I left the camera filming.  If I kept the music playing while starting and stopping the film, the result was a choppy garbled mess of a sound track.  Such was the result of my first attempt at LEGO-mation.

Some samples of my LEGO-mation movies are below:

A Trip Down Memory Lane with the Macintosh Plus

The Macintosh Plus
The Macintosh Plus

An online friend of mine recently brought to my attention PCE.js, a browser-based emulator of the Macintosh Plus.  Click the link and experience it for yourself.  This emulator is solid gold.  The machine it is emulating is solid gold.  It’s a throwback to a world of computing almost 25 years ago.  Those were the days of System 7 (which, in my opinion, is still a more intuitive interface than every other Mac OS since then).  At the time, I was three years old.  The Macintosh Plus was the first computer my family owned and it will always have a dear place in my heart.  Between the ages of three and seven, I was inseparable from the Macintosh Plus.  I fondly remember playing games like Dark Castle, Dungeons of Doom, Rogue, StuntCopter, and more.  By the way, for anyone who saw the Angry Video Game Nerd’s review of Dark Castle for CDi, the Macintosh version was much easier to control with a mouse and keyboard.

Firstly, when you open the emulator you might be astonished by the specs of the machine.  It has 4MB of memory and about 20MB of disk space.  Really powerful stuff for 1986.  Now I can run System 7 in a web browser on my computer while I simultaneously listen to music and write this blog post in another window.  And my computer is still only using 12% of its CPU.  I know it’s not a fair comparison, but I always have two feelings when I reflect on this.  One feeling is, “How did I think that was so awesome back then?”  The other feeling is, “What if I could see then how powerful the computer I use now is?”  There is also a third follow-on feeling, “How awesome are computers going to be thirty years from now?”

Erase Disk next to Empty Trash
Erase Disk next to Empty Trash

Now for a little side lesson in Human Machine Interaction.  Open the PCE.js emulator.  If you go to the Special Menu of the Finder, you will see it has some familiar options: restart, shut down, empty trash, and… erase disk?  Wait a second, are we sure we want to put that potentially disastrous functionality next to all these other innocent ones?  Well why not?  Every computer user can read the options can’t they?  Not if you are three-year old Daniel Bank who likes computing even though he can’t read.  Three-year old Daniel memorizes where things are physically on the screen and clicks OK until dialog windows go away.  Maybe you can see where this is going (hint: I was trying to empty the trash and I accidentally reformatted my dad’s external hard drive… he was not happy).

Lastly, this post wouldn’t be complete if I didn’t talk about HyperCard.  Essentially, it was a stack of “cards” that you could add scripting to.  You could save your stack as a file and share it with others who could then open it with a HyperCard viewer.  The scripting really made things interesting because you could transition to different cards when a part of one card was clicked, you could prompt the user for input, you could keep track of variables, and so on.  Sadly, you won’t be able to experience HyperCard in the emulator because it only has a viewer.

Clock Tower in Dark Castle
Clock Tower in Dark Castle

HyperCard actually represented probably 80% of my play time on the Macintosh Plus.  Sometimes I played other people’s stacks, but mostly I was creating my own.  I created dozens of HyperCard games and finished maybe a handful of them.  Mostly my stacks consisted of just a title screen and maybe the first few cards of an actual game.  I was learning the fine art of creating VaporWare.  The first words that I actually wrote with a pencil were go next, a command from the HyperCard scripting language to move to the next card.  This was the start of a mad desire to create my own software gaming studio that lives on to this day.

So ends my nostalgic reflection on the Macintosh Plus as experienced through PCE.js.  Tremendous kudos to James Friend for making this emulator.  I have no idea how he did it but it is an awesome example of running a virtual machine in a browser.

On Marrying a Chinese Woman

Daniel and Haiying in Shenzhen, 2006
Daniel and Haiying in Shenzhen, 2006

In the summer of 2006, I went on a Study Abroad Program in China which changed the course of my life. The first Friday night of my stay at Ren Min University, I was casually walking the school grounds when I came across a square where many people noisily conversed. As I approached, I realized everyone was speaking English. It turned out to be a weekly event called English Corner, a time when people would come and practice speaking English with each other. Naturally a laowai like myself drew a big crowd. I felt like a celebrity with all the students gathered around me asking me questions. After several minutes, I noticed a beautiful girl in the back who was listening and not asking many questions. I felt bold so I started talking to her. Our conversation went something to the effect of, “Hi, what’s your name?”

“My name is Sea Eagle. My English teacher suggested Heidi but I thought that was too old fashioned so I translated my name by myself.”

“Oh… Sea Eagle… That is an interesting name.”

We kept talking for another hour and exchanged email addresses. Then she left and I scolded myself for not offering to walk her home or asking for her phone number. Fate was on my side because she returned to tell me that she could not read my handwriting. Having been given the second chance, I then offered to walk her home. And the rest is history.

Daniel and Haiying with her family in Liangping, 2011
Daniel and Haiying with her family in Liangping, 2011

The real purpose of this blog post actually is to describe my thoughts and lessons learned on international relationships. This post is based on my own experiences married to a Chinese woman.  It in no way reflects every international relationship.

Firstly I think that I was predisposed to seek love in a foreign land. I am attracted to difference. Different appearance, different culture, different language, all of these aspects intrigue and excite me. I also think that such a kind of love is a positive and important influence on humanity because it brings communities closer.

While differences can be exciting and provide a great impulse during the formation of an international relationship, they become challenging as you grow more accustomed to each other. As an example, in China serving food to guests is simply good manners. With my own family, however, this is never done. I don’t know if other American families do this but we don’t. It’s not that we don’t care about guests. We just trust that they will serve themselves whatever food they want to eat. So when I am eating food with my family in China, I am uncomfortable being served. Sometimes I will try to tell people I don’t want any more, “bu yao xie xie,”.  I do it even when I am not full because I prefer to serve myself.  This is just one example where cultural differences can be uncomfortable or lead to disagreements. Other examples include what is acceptable humor, gift giving customs, and child rearing.

Another aspect of international relationships that is difficult is the distance. You spend months only able to communicate on the computer or over the phone. When your unhappy, you can’t feel each other which makes comforting each other especially hard. My wife equated it to tending a fire. When you are close, the fire burns very hot. When you are apart, it cools down and only the glowing embers remain.

Daniel and Haiying in Liangping, 2011
Daniel and Haiying in Liangping, 2011

My advice on surviving the dangerous long distance phase of the relationship is to always have a plan about the next time you are going to see each other as well as how you eventually be together. Having a plan can reduce the inevitable feelings of worry, hopelessness and loneliness which shake your resolve. My wife and I endured more than five years living in different countries. Having plans was what kept us going.

A more subtle problem with the long distance is that you never really get to experience what life with the other person is like. You grow comfortable in having autonomy while also having that warm feeling that someone in the world cares about you. When you finally are living together, married life can be an abrupt end to that autonomy.

Finally, there are a lot of negative stereotypes that can impact an international relationship. In my case, I am a white man and my wife is an Asian woman. There is a bias that white men seek Asian women for exotic pleasure (the dragon lady) or because they are submissive (the china doll). Sadly I have met many such men in my travels. At the same time, Asian women are seen as seeking nothing more than wealth from their relationships with foreigners. My wife was accused of as much by a United States Citizenship and Immigration Services (USCIS) agent during her first interview for a visa to come to the United States.

Daniel, Haiying, and Arthur in Tempe, Arizona, 2013
Daniel, Haiying, and Arthur in Tempe, Arizona, 2013

International relationships have their up’s and down’s just like any other relationship. If you can navigate the cultural differences and the hard logistics questions, international relationships can be immensely rewarding and will expand your horizons. My wife and I have known each other for seven years now and been married for three. One year ago, our lives were blessed with a little baby boy. I hope our little family can be healthy and strong for the rest of our lives. I wish the same thing for everyone.


The Icosahedron
The Icosahedron


Icosahedron is variation of the game Scattergories by Hasbro.  It is a fast-paced heads-up style game where winning involves wit, luck, and knowing your audience.  The game is called Icosahedron because of the twenty-sided dice which is used to play it.  The idea for the game originated when my friends and I were bored on a Friday night and were looking for a new game to play without going out to buy one.  Icosahedron has since become our preferred game because it is quick, easy-to-play, and suitable for a wide variety of players.

Necessary Equipment:

A Scattegories dice (the Icosahedron).

Number of Players:

3+, it’s best played with an odd number of players


  • The game consists of two active players, who are in a one on one competition, and everyone else, who act as moderators of the competition.
  • The active players alternate rolling dice with the current champion rolling first.  If there is no current champion, everyone should argue about who goes first.
  • When a moderator thinks of a category, they will announce that they have a category.  This indicates that dice rolling can commence.
  • As the dice is rolled, the moderator will call out their category.  The first active player to successfully call out an answer that begins with the letter facing up on the dice earns one point.
  • If an answer uses two consecutive words that begin with the letter which appears face up on the dice, it is a “double” and is worth two points.
  • If both players answer simultaneously, neither player gets a point.  A new category is decided and the next player rolls the dice.
  • The success of an answer is subject to a vote by the moderators.  If the majority agree with the answer, it is deemed correct.  Thus it is important to know your audience.  If an answer is technically correct but obscure, it will be voted down.  It is also possible for an answer to be incorrect but be voted up.
  • If the moderators are split on whether an answer is correct, the answer is correct.  This is why the game is best played with an odd number of players (so ties don’t happen).
  • The first active player to earn two points wins the round and is the new current champion.
  • The game restarts and the person to the left of the loser plays against the current champion.
  • At any time after the dice has been rolled, one of the moderators (or active players if they cannot answer) can start counting down from five seconds.  After five seconds without a successful answer, a new category is decided and the next player rolls the dice.
  • Arguing is a cardinal aspect of the game.  Healthy debate is strongly encouraged.  If you feel that an injustice has occurred, it is your duty and obligation to argue your point vigorously.  Remember, the game cannot continue until arguing stops so feel free to filibuster the game.  Icosahedron is a microcosm of the U.S. congress.

Drinking Rules:

If you plan to consume alcoholic beverages while playing this game, the additional punishment rules are simple:

  • When an active player scores a point, the loser drinks.
  • If an active player scores a double, the loser drinks twice.
  • If a moderator calls out a category that neither player can answer, they have five seconds to answer their own category.  If they cannot, they drink.
  • If the current champion makes it back to playing against the same person that they beat to become champion, they go “around the world” and everyone drinks a social.

Category Ideas:

If you need help thinking of category ideas (beyond those that you might find in the regular game of Scattergories), below are some category ideas:

– Palindromes

– Words with five syllables

– Elements of the periodic table

– Occupations

– Countries and cities

– Comic book characters

– Parts of the human body

– Weapons

– Beers

– Adjectives

Shameful Categories:

People who attempt to use the following categories should be rightly boo’ed:

– What letter am I thinking of?

– Clandestine activities (and other strangely worded categories)