Thursday, December 05, 2019

Everyday Carry

Except for a few hours on Sunday, when I replace the gray shirt with a tie and white shirt, this is what I wear and carry every day.  I selected most of these items because I find them practical and durable.  A complete inventory is below the image.


From top to bottom:

Tuesday, October 01, 2019

Gotcha: go Foo().Bar()

To my surprise, but in accordance with the Go language specification, the following code invokes Foo() in the current goroutine and then starts a separate goroutine to invoke Bar():

    go Foo().Bar()


I incorrectly assumed that it created a separate goroutine to evaluate the entire expression.  I'm not sure why I assumed that.  If you want both Foo and Bar to be run inside a new goroutine, you need something like this:

    go func () { Foo().Bar() }()


Hopefully writing this down will help me remember.

Tuesday, September 24, 2019

Review: A Brief History of Time 👍

I've been a fan of theoretical physics for a long time, but had never actually read Dr. Hawking's wildly popular A Brief History of Time. I got a coupon to buy it for $2 and went for it.  Even if you're only interested in science or the history of science, regardless of your own science ability, I'd recommend this book.  It's highly approachable.

The first 80% of the book describes how we came to know what we do know about the universe.  It's amazing how cleverly people can discern truth from a pittance of data available from the stars.

The book paints an informative picture of human nature.  It takes us a long time to embrace the truth when it happens to conflict with our notions of tradition, right, or beauty.  For example, regarding a universe that expands, Hawking writes, "This behavior of the universe could have been predicted from Newton's theory of gravity at any time in the nineteenth, the eighteenth, or even the late seventeenth century.  Yet so strong was the belief in a static universe that it persisted into the early twentieth century."  Humans love to grow attached to ideas, regardless of their truth or utility.  It's cliche that good ideas are initially opposed and discarded, and it's apparently true in the history of cosmology and theoretical physics.

The final 20% of the book describes speculative theories that haven't yet been tested.  This part of the book is not as fun to read. It lacks the anecdotes of creative discovery that make the first part of the book so fun: finding that a theory agrees with natural observation, or making observations that hobble all known theories.  If you want to focus only on the best parts of the book, you can skip chapters 10-12, and perhaps chapter 9.  For that content, your time may be better spent skimming Wikipedia articles about the arrow of time, wormholes, and string theory.

Thursday, August 29, 2019

Review: The Mote in God's Eye 👍

I just finished The Mote in God's Eye by Larry Niven & Jerry Pournelle.  It was excellent.  It's my favorite kind of speculative fiction: imagine one small change to how the world works and then explore its consequences.  In this case, the exploration is packaged as a first contact narrative which makes the comparative anthropology feel natural and entertaining.

Ignoring superficial differences, alien biology deviates from human biology in one way.  That deviation leads to substantial differences in their evolution, societal organization, priorities, and motives.  Niven and Pournelle toss in a few other interesting ideas along the way.

I sometimes had trouble keeping the cast of characters straight.  I've never had a mind for large social networks, so that's probably as much my problem as theirs.  Either way, it didn't detract from the story or the ideas.  It's definitely worth reading.

Monday, August 12, 2019

Databases by code size

I was curious how various databases compare in terms of their total source lines of code.  For each database I cloned the source repository or downloaded a source tarball.  I deleted code related to tests, and producing documentation (some projects have more test code than database code, so this can make a big difference).  Then I ran scc.  The numbers below are what scc labels as Code.  Since the methodology isn't exact, I only retained two significant figures.

The results are sorted from smallest to largest by SLOC count.  Let me know if you find mistakes or want another database included in the results.

Saturday, November 24, 2018

Goodbye phone spam

I've been self-hosting voice calls and SMS for a while now.  Like most Americans, I get a ridiculous number of spam calls.  The main sources of phone spam for me are, in order:

  1. neighbor spoofing
  2. vendors who use my number long after our transaction has completed
  3. calls intended for a former owner of my number
I considered a few options to reduce spam volume.  Since I self-host my phone infrastructure, the following approach was easy to implement and has been really effective:
  • choose two phone numbers in an area code that has never called me before
    • 906 or 308 are good candidates for most people
  • let these numbers simmer for three months
  • give one number only to immediate family ("private" number)
  • give the other number to everyone else ("public" number)
  • block all calls without caller ID
  • block all calls whose caller ID has the same area code as my numbers
  • burn the public number annually
Letting numbers simmer with an intercept message stops a lot of spam in category #3.

Blocking calls from the same area code eliminates category #1 entirely.  Since I use an area code that has never called me legitimately, there are essentially no false positives.  In practice, this also blocks most calls from category #3, so I have belt and suspenders there.

Spam in category #2 is trickier to block since I initially want these vendors to contact me (dentist, mechanic, etc), but want the calls to stop once our working relationship is permanently finished.  Asking nicely works some of the time, but it doesn't help if a vendor sold my number or lost it in a data breach.  Burning my public number annually or biennially eliminates category #2 that can't be handled in another way.

This approach might not work for others, but has proven highly practical for me.

I considered having only a single phone number and using a white list.  Maintaining an accurate white list seemed like too much effort.  I also didn't like the risk of false positives.  For example, if my kids call me from an unexpected number, they should get through immediately.

My private number is essentially a long term token granting access to my attention day or night.  My public number is a short term token granting access during reasonable hours.  For example, when I ask not to be disturbed, my phone infrastructure routes the public number directly to voicemail but still routes the private number to my phone.

Thursday, October 25, 2018

Soylent Eggnog

I usually drink Soylent for 2 meals every day. With the arrival of fall, I'm in the mood for some 'nog. Here's the recipe I use to make a Soylent that tastes pretty darn close to the flavor of eggnog.

Mix up 12 oz of Original Soylent like normal.  Add the following:

  • 3 tsp sugar
  • 1 tsp vanilla extract
  • 1/2 tsp nutmeg
  • 1/4 tsp rum extract
  • pinch of cinnamon

Tuesday, August 14, 2018

4X Solitaire

Ever since Civilization came out, I've enjoyed the 4X game genre.  If I'm in the mood for a simple 4X experience, I'll play Battle of Polytopia with its small map and sparse tech tree.  Sometimes that's even too complex, so I made a solitaire game with a 4X feel.

Setup


Start with a standard deck of cards.  Remove the jokers. Set aside the kings, face up:

Choose any king. This is your king and your suit. Turn this king face down among the other kings. Here I chose the king of diamonds:

 Leave the kings aside and shuffle the rest of the deck.  Deal three cards, face up, next to each other at the edge of the table.  This is your arsenal:

Turn over the king stack onto the deck.  All cards in the deck will be face down except for your king.  I often find it helpful to manually insert the kings into the deck at random locations like this (my king is sticking out to highlight that he remains face up):

Shuffle the deck.  Deal cards, face down, in a 7 by 7 grid. Of course, your king will still be face up:

Play


The 7 by 7 grid is the map.  Face down cards are parts of the map that you haven't discovered yet.  My initial territory is any face up card matching my suit.  When you start, your territory is only a single card; namely, your king.

To win you must discover the entire map and make it your territory. Try to do it in as few turns as you can.  On each turn, you can perform one of the following moves.

Explore


Turn all cards face up which are adjacent to a chosen face card of your suit.  A card that's fully surrounded has 8 adjacent cards.  A card near the edge may have fewer adjacent cards.

Here I've used my first move to explore the map around my king.  I expanded my territory by one square (the 6 of diamonds) and uncovered four squares of enemy territory.

Travel


You can swap a face card of your suit with any other space in your territory.  In the image above, I could move my king to the right by swapping him with the six of diamonds.  You don't have to travel to an adjacent space, that's just how the layout appears in this image.

Capture


You capture a space, making it part of your territory, by attacking it with a card in your arsenal.  The card in your arsenal must have the same suit as the card you're attacking.  Your arsenal card must also have a higher rank.  Once a card is captured, remove it from the map and place it on top of the arsenal card that captured it.  The captured card is now your arsenal card.

An arsenal card of your suit can be used against any suit.  Although, once it has performed its first capture, it's permanently fixed at that new suit (since the captured card is now your arsenal card).

For example, in the position above I used the eight of diamonds to capture the six of clubs. That gives this position:

The vacant space in the map is now part of my territory.

Conquer


The final move available during a turn is to conquer an opposing king.  To conquer an opposing king, he must be face up and at least 51% of his adjacent spaces must belong to your territory.  For example, if a king has eight adjacent spaces, at least five of them must belong to your territory.

Once you've conquered an opposing king, remove him from the map and place him near your arsenal.  All face up cards of his suit are now part of your territory too.

Tech Tree Variant


Many 4X games have a technology tree. Learning a technology grants the player a new ability.  A tech tree can be added to 4X Solitaire with a slight adjustment to the rules above.

After dealing your arsenal, but before shuffling kings into the deck, choose one arsenal card to be your technology.  The technologies are determined by the suit of the card you choose:

  • spades - flip over one card anywhere on the map
  • hearts - conquer with only 50% of a king surrounded
  • diamonds - explore an entire row/column instead of adjacent cards
  • clubs - capture any enemy card, except a king
Set your technology card aside and deal another arsenal card in its place.

If you choose to play your technology card during the game, you can play it only once and using it counts as a turn.

Friday, June 29, 2018

SMS over IRC

A couple years ago, I moved from Google Voice to custom infrastructure.  That system used XMPP to send SMS.  Now that I've moved from XMPP to IRC, I needed a new set up for sending SMS.  This post is about a small proxy I wrote to translate between SMS and IRC protocols.

When I'm connected to our family IRC server, I can send a message to any nick that's a valid phone number.  The server converts that message into an HTTP request to Twilio to send an SMS to that number.  I map our IRC nicks to our phone numbers to correctly set outgoing caller ID.

Some of my extended family (mom, dad, siblings, etc.) aren't connected to our IRC server.  I contact them frequently enough that I didn't want to use their phone numbers in IRC, so I've given them aliases.  The server pretends that they're on IRC under those aliases.  For instance, when I send a privmsg to the IRC nick "mom", it converts that into a Twilio API call that sends an SMS to my mom's phone number.  As far as my IRC clients are concerned, my mom is on IRC.

When sending SMS, Twilio provides helpful status updates via HTTP.  I've translated some of those into IRC messages too.  In an IRC client, it looks like this:

[12:01:02] michael: Any big plans for your birthday?
[12:01:03] mom: ⌛
[12:01:07] mom: ✓
[12:05:22] mom: I'm going to Cirque du Soleil with some friends


The first two emoji are synthetic messages generated by the IRC server.  ⌛ means, "Twilio has successfully delivered the message to the recipient's phone company" and ✓ means, "the phone company delivered the message to the recipient's phone".

Incoming SMS work as you'd expect.  The phone number to which the SMS was sent, determines which IRC user receives the corresponding privmsg.  If the phone number has an alias, that alias is used as the IRC nick; otherwise, the phone number is used as the nick.

It all works really well in practice.  I can pretty much pretend that everyone I care about is on IRC all the time.

Twilio doesn't support group SMS, which is too bad.  I'd love to translate those into ad-hoc IRC channels.  Twilio supports MMS, but I receive them so rarely that I haven't added IRC support yet.

The code is available, in case you're interested.  It's a couple hundred lines of Go.

Thursday, June 28, 2018

Dadurday

As my five kids have gotten older, I've noticed the world and its activities encroaching more and more on our family time.  While we were traveling in Europe, we changed cities every two weeks and had no outside obligations, so our family spent lots of time together.  It was great.  Our friendships strengthened and we grew closer.

As we prepared to return home, my wife and I decided that we would establish the first and third Saturdays of each month as "Dadurday".  A day when the kids and I would block everything else out and just spend time together: no chores, no outside obligations.  So far we've watched a movie, played board games, read stories, watched the World Cup, collected coal to try to start a fire, had sword fights, and gone on walking adventures.  The kids seem excited about the whole thing and are constantly suggesting activities for the next Dadurday.

The outside has tried to occupy these days, as we suspected it would.  I suppose it's a corollary to Parkinson's Law that non-family activities expand to fill all available time.  Fortunately, Dadurday was on the calendar first.  When other activities try to crowd in, we politely decline and say that we have a previous obligation.  Just knowing that these unstructured, playful days with my kids are waiting for me every couple weeks makes me smile.

Of course, my kids have friends and other interests.  Most of the time they can be scheduled away from Dadurday, but sometimes there's a conflict.  As a family, we decided that each kid gets 3 exemptions per year that let them skip Dadurday if they want to do something else that day.  So far three kids have spent four exemptions total, all to attend birthday parties.

Between Dadurday and our family night on Mondays, I suppose that some people would think it's too much time together, but it's a great balance for us.

Tuesday, June 12, 2018

Goodbye XMPP. Hello IRC

Up until 2 years ago, my wife and kids and I stayed in touch with Google Hangouts.  I disliked being dependent on a third party, being unable to program the system to match our needs, and not having access to it on all the devices we care about, so we switched to XMPP.  It was an improvement and has served us well for the last couple years.

A couple months ago, we started seeing large delays in message delivery times.  We were also getting extended, repeated disconnects from the XMPP server.  Our messaging stack is selfhosted and open source, so I prepared for a debugging session.  As I got ready to dive in, I had a nagging feeling that there was way too much code at play here.  We ran Prosody, which is a great XMPP server, but it's 35k lines of code.  My SMS to XMPP gateway adds another 1k.  All we wanted to do was send small pieces of text between 7 people and set up some chat rooms.  That much code felt like overkill.

After a few hours work and 500 lines of Go, I had a custom IRC server with a built in BNC.  With another 200 lines, I had a working SMS to IRC gateway, so I can send and receive SMS from my IRC clients.  Obviously, setting up chat rooms was painless.

We had some minor glitches during initial deployment, but because the whole system is so small, it was a cinch to debug and repair.  It's been really solid since then.  The minimalism is refreshing.

The code is available in case you're interested. It won't compile by itself since it's part of a larger family server (git, movies, personal assistant, Asterisk dialplan, etc).

Wednesday, May 09, 2018

Easier random numbers in Go

Abstract: Replace import "math/rand" with import "github.com/mndrix/rand" and get high-quality random numbers every time.

Like many Go developers, I use Go's math/rand package for generating random numbers.  That package defaults to a predictable stream of outputs, so you have to seed the generator if you actually want random numbers. I'm embarrassed to admit how often I've forgotten to seed the generator.  In large projects, I see the generator being seeded multiple times across different files because everyone wants to be certain the generator has been seeded.

Even if I do remember to set a seed, I often get hung up on other questions like:
  • is my seed good enough?
  • are these random numbers high enough quality for my application?
  • do I need to reseed the generator after a while?
  • how often?
I just want random numbers without all this complexity.

More than 20 years ago, OpenBSD developers were seeing similar problems.  In 1996, they addressed it by introducing arc4random.  You call the function and get a high-quality random number every single time.  There's no seeding, no failure mode, no need to consume file handles, just random numbers.  It's refreshingly simple.

I wanted that same simplicity in Go, so I wrote github.com/mndrix/rand.  It's just a thin wrapper around Go's crypto/rand which gives those high-quality numbers the same clean interface as math/rand.  In many cases, you can just replace import "math/rand" in your code with import "github.com/math/rand" then delete your calls to math.Seed() and everything works.

Saturday, March 17, 2018

World tour: Morocco

Since leaving Hungary two months ago, we've been in Morocco.  I tried to visit North Africa sixteen years ago during a trip to France and Spain, but was thwarted at the last minute by some trouble with a train conductor.  That near miss made me all the more excited for Morocco on this trip.

We started in Marrakesh near the base of the Atlas Mountains.  I knew there were mountains in Morocco, but I had no idea they were so large.  The tallest mountain in the range is 13,670 feet above sea level and Marrakesh is at 1,500 feet so the mountains have a larger prominence than those along the Front Range or the Wasatch Front.  The Atlas were beautiful and covered with snow.  We didn't bring enough clothes to stay warm in the mountains in February, but I would love to come back to Morocco and hike all over the Atlas someday.

The average wage in Morocco is quite low, so we found it affordable and convenient to hire a private van to drive us between cities instead of using the trains.  The highway system in Morocco is modern and well maintained.  Their rest stops are some of the best I've seen.  Each one had a selection of food vendors, at least one good playground and a small mosque where travelers could pray.  If we visit Morocco again, we'll definitely rent a car.

Anyway, Casablanca was next in line.  Our apartment there was just a couple blocks away from the tallest mosque in the world.

The mosque was really pretty.  It reminded me how much I like Arab architecture with its clean lines and subdued, natural colors.  The mosque was surrounded by quiet gardens:

Between the gardens were covered walkways.  Each one had ceilings with hand carved and hand painted decorations:

Other than the mosque, Casablanca, like most Moroccan cities, is not a destination for sightseers.  Unlike Europe, there isn't much of historical or architectural interest.  We were quite happy with that.  We just enjoyed walking through the city and living our life alongside everyone else.

After Casablanca, we went all the way north to Tangier.  Our apartment was on a hill overlooking the Strait of Gibraltar.  It was cool to see Spain on the other side and to watch all the container ships crossing between the Atlantic and the Mediterranean.  It rained almost the entire time we were there, but we managed one day at a nearby beach once the sun came out:

Our last stop was Fes.  Our apartment was inside the medina right next to the souq.  We went into the souq each day to buy groceries for that day.  There are hundreds of vendors, each with a small shop specializing in one or two items.  You buy bread at one place, eggs at another, fruit at yet another, etc.  It's sort of like a farmer's market the size of an entire city.  By the end, Kinsey was a pro and knew which shops had the best food of different kinds.  The fruit vendor that she preferred recognized our children as they walked through the souq and would give them free strawberries as they passed by.

Overall, I liked Morocco.  If we visit again someday, I'd try to spend most of our time in the rural areas.  The cities are a fun experience once, but the beautiful mountains and open spaces called my name.  I would also love to cross the Atlas and spend some time on the Saharan side of the country.  There's so much beautiful world and so little time.

Next stop: New York and Las Vegas

Thursday, February 08, 2018

World tour: Bulgaria & Hungary

After Jerusalem, our next stop was Sofia, Bulgaria.  I had been looking forward to this stop because it would be my first extended visit to the Eastern Bloc since serving as a missionary in the former East Germany.  After all the warm temperatures around the Mediterranean, we were also excited for some cold weather.  Bulgaria did not disappoint.  The mountains around the city were beautiful and covered in snow.  Sofia has some huge, forested city parks which were great for walking on cold days.  Despite the cold, Haven insisted on doing laundry in shorts and bare feet:


And of course, the cold didn't prevent our customary visits to every nearby playground:


I loved it in Bulgaria.  The scenery was beautiful, the people were helpful when asked but mostly kept to themselves, everything cost half of what it does in America.  It was also fun to practice the Cyrillic alphabet.  There were no tourists anywhere and the whole country had a quiet, modest and unassuming feel.  I would definitely go back.

Oh, we also did our first escape room as a family.  Copyright laws don't seem to be enforced much in this part of the world, so ours had an Indiana Jones theme.  Honestly, it was more entertaining than the last film approved by Lucasfilm.  Fan fiction for the win.


As we left Bulgaria to fly to Hungary, we got held up at passport control.  The passport agent didn't believe that we had five children and insisted that Kinsey was too young to be their mother.  She kept checking Kinsey's birth date against the children's birth dates and asking the children how old they were.  She was friendly about the whole thing, just being cautious about child trafficking I suppose.

I don't have much to say about Budapest.  It was a busy, modern European city.  It had some cool, old buildings and the Danube was pretty.  It also has the best public transit I've ever seen: clean, fast, frequent trains, always on-time.  Budapest also has a really good model train museum: Miniversum.  The Parliament building was also nice:


Some random observations from our trip so far:

First, we've used six different ride-hailing apps in nine different countries.  Uber works in some but not in others.  Each country has its own app for connecting with the local taxi network.  This industry is ripe for consolidation.  Someday, someone will come along, buy up all the little guys, polish up the experience and make lots of money.  TaxiMe in Bulgaria was one of my favorite ride-hailing apps.  They implement surge pricing through a real time auction.  If you request a ride and don't get a cab, you can place a bid higher the standard fare to lure a taxi.  All passengers in the vicinity are bidding against each other to win a taxi's attention.  It was basically a double auction with TaxiMe acting as auctioneer and it was fun.  I found myself wishing the taxis were busy so I could play the "game".

Second, American credit card companies can be overzealous with anti-fraud measures when traveling in the Middle East or Eastern Europe.  We rarely have trouble paying in-person with a chip card, but are almost always refused when paying online.  On several occasions, I've had to route my Internet traffic through one of my US servers to circumvent the anti-fraud measures so that I can complete a transaction.  So their "security" is not very secure, but it does restrict foreign credit card transactions to only the tech-savvy.  Having a small wad of local cash has proven helpful in many instances.  Card companies give better exchange rates, but cash is handy as backup.

Next stop: Morocco

Saturday, January 13, 2018

World tour: Levant

After leaving Athens, our world tour continued in the Levant: a brief stop in Beirut followed by two weeks each in Jordan and Israel.  A couple months ago, we happened to be in Spain during Catalan independence.  This time we were in the Levant just as the US recognized Jerusalem as Israel's capital.  It made the politics of the region especially obvious.

Here's Jericho on the terrace of the BYU Jerusalem Center describing some of Jerusalem's history. The Dome of the Rock is in the background.


Anyway, our flight from Athens to Amman was on Middle East Airlines through its main hub in Beirut.  We only spent 4 hours in the airport in Lebanon, but it was a fun introduction to the region.  There were European tourists wearing jeans and sweats, Lebanese business men wearing Italian suits, and Saudi women wearing abaya with niqab.  Signs were in Arabic or French with very little English and numbers all used the eastern Arabic system: ٠١٢٣٤٥٦٧٨٩.  Fortunately, the airport gates were all labeled with western Arabic numerals so we knew where to go.  The gate signs also served as a Rosetta stone so we could decipher eastern Arabic numbers.

Our flight path from Beirut to Amman is a good example of how this region's politics impact people's daily lives.  The distance from Beirut to Amman is only about 130 miles, as the crow flies.  Israel won't allow Lebanese planes to fly through their airspace.  Syria is in the middle of a civil war so they can't fly over Damascus either.  Instead, our flight flew over the Mediterranean to Tripoli then east through the mountains and deserts of Syria to cross Jordan's border.  Then they can fly freely into Amman.  On the positive side, the circuitous route gave us time to eat our in-flight meal:


I really liked Jordan.  It's only the second place on our trip so far to which I hope to return someday (Iceland being the other).  After arriving at the airport, we got a taxi to our apartment.  The driver of the small taxi assured us that all seven of us and our luggage could fit into his little taxi.  We managed to squish together with me in the front passenger seat and the other six of us on laps in the back seat.  As we got under way, the driver made known in very broken English and with a broad smile that if the police saw us, he would get in trouble so he expected us to pay the fare of two taxis instead of just one.  I smiled at his bargaining and assured him that we'd pay him a reasonable fare.  When we got to the apartment, I paid him what I had budgeted for the trip and he accepted with another big smile.  It was only about $40 and about half what we'd paid for two airport taxis in other countries but roughly double what he expected.

For the rest of our stay in Amman, we used Uber.  It's illegal in Jordan (driver subject to $200 fine and loses his car for two weeks), but in practice nobody seems to care.  Uber can get you almost anywhere in the city for $3.  The police almost caught us riding an Uber from the mall one day, but the driver had lived in Los Angeles and told the officer that we were his American friends.  He spent the rest of the trip telling me how much he liked America and how he hoped to return.  I assured him that we'd love to have him in our country again.

Bedouin are still prominent in Jordan.  For example, every morning a Bedouin man brought his sheep and goats to graze in the field across the street from our apartment.
Nearby restaurants would dump old bread into the field during the night and his sheep and goats would eat it the next morning.  When they were done, he'd move them elsewhere in the city to graze. Throughout the city, there are Bedouin living in tents and herding goats right next to luxury apartment buildings and shopping malls.

We visited Petra, which is really amazing.  The whole area looks like the red rocks of southern Utah, but the rocks are carved into buildings and decorative caves.

We planned to see more of Jordan, but half of us got colds and sore throats so we had to lay low for most of a week.  This is the first real illness we've had on the trip, which is great.

A few more random observations about Jordan:  The large shopping centers all have metal detectors as you walk in. There is always a male and a female security guard working together.  Male guests work with the male guard and female guests work with the female guard.  Jordan is a very modern and western feeling country, but you can clearly see the deference to Muslim modesty throughout the culture.  I loved hearing the Adhan (call to prayer) five times each day.  It was even played inside the grocery store so that everyone could hear it.  I expected people to drop everything and go pray, but they didn't.  Islam gives substantial leeway in when the prayers are performed so most people finish what they're doing and then go somewhere private to pray.  The large shopping centers all have dedicated prayer rooms so that guests don't have to leave the building to pray.  Oh, and spices, lots and lots of spices:


Jordan's pharmacy system is also really nice.  Pretty much everything is available without a prescription.  After being away from the States for three months, we'd run out of certain medications.  We tried to restock in Spain, Italy and Greece but they all required a prescription.  The Jordanian pharmacy gladly sold us what we asked for without questions.  The people in Jordan are also exceptionally hospitable.  When we arrived at our apartment, the landlord offered to walk 2-3 blocks with me to help me purchase a SIM card so one of our phones would work.  When I asked one driver if there was anywhere nearby to buy some lunch for the kids, he drove to an amazing schawarma restaurant, accompanied me inside, made some menu recommendations, translated for me as I ordered and walked me through the process of picking up the food from elsewhere in the restaurant.  The whole country was like this.  Most people spoke some English, but the ones who didn't all knew how to say "Welcome to Jordan".  About 30% of the country's population is refugees from elsewhere: Palestine, Iraq, Syria.  Welcoming people is a deep part of their culture.  They also like American movies.  We watched Star Wars: The Last Jedi in a beautiful theater in Amman.  The theater had assigned seats, like at an NFL game and Arabic subtitles, unlike an NFL game.


Depending on who you ask, Jordan has the second or third fewest water resources per capita of any country on earth.  In Amman, the water pipes are turned on once each week.  Each apartment has large water tanks on the roof which they fill up when the pipes turn on.  Not being familiar with the scarcity, we accidentally used up all our water 24 hours before the next delivery.  Our landlord graciously moved some water from another apartment in the building to help us out.  If there hadn't been water available in the building, you can hire private water trucks which can refill your tanks at market prices.  Quick economic tangent: as with most resource scarcities, the water scarcity in Jordan is caused by restrictions on the price system.  Water provided by the city costs 1/25 of the market price as charged by private delivery trucks.  The delivery trucks never run out of water, only the city.

Anyway, enough about Jordan.  From Amman we crossed the King Hussein Bridge into Israel.  The process usually takes about 4 hours.  We got there in time for the first bus of the day and there weren't many tourists so we crossed in only 2 hours (for a 3 mile drive; thanks politics).  The Jordanian side of the transfer was relaxed and disorganized.  The Israeli side was organized and strict.  Both sides were friendly.



In Jerusalem, we visited Yad Vashem (a Holocaust musem), the Garden of Gethsemane (pictured above), Mount of Olives and the Old City.  The holy sites are so crowded and touristy that I can't really recommend them.  Some people have a really spiritual experience in these places, but they weren't for me.  Walking around the Old City was cool though.  It was fun to see all the Bar Mitzvah celebrants walking through the city gates.  Gideon found a paper map of the Old City in our apartment, so he guided us during our explorations:

The Old City also has some nice squares and quiet little corners where you can just enjoy the ambiance:

Unlike Jordan, everything in Israel is really expensive.  Food and taxis are almost 10x more expensive on the Israeli side of the border.  It's no worse than New York City or Boston, but it was a bit of a shock after Jordan.  Random tidbit: burger joints in Jerusalem don't sell cheeseburgers because Orthodox Jews don't eat meat and dairy together.

My favorite thing about Israel is probably Hebrew.  I'm kind of a language nerd, so Hebrew was really fun.  Prior to the mid 1800s, Hebrew was pretty much a dead language.  It was only used for Jewish liturgy and spiritual purposes, but had no native speakers or use in modern life.  Now it's spoken natively by millions of people and the primary language of commerce throughout Israel.  Hebrew is the only example of a natural language being resurrected from the dead like that.  It was cool to drive through Jerusalem and Tel Aviv and see the scale of the success of that linguistic experiment.  Since the country favors Hebrew so strongly, there was almost no signage in English.

Both Israel and Jordan have substantial restrictions on the free practice of religion.  The Church of Jesus Christ of Latter-day Saints has church units in both countries, but they mostly accommodate foreigners (State Department employees, students, etc).  Most locals are prohibited from participating, so meetings are done in English instead of the local language.  Amman has an Arabic branch since Jordanian Christians are allowed to convert to a religion of their choice.  Between Athens, Amman and Jerusalem, we had five consecutive weeks where we understood what people were saying to us at church.  In Jordan, our church meetings were on Friday (out of respect for the Muslim holy day) and in Israel they were on Saturday (ditto for Jewish shabbat).

It's also been interesting to see the extent to which English has become the world's lingua franca.  Our flight from Tel Aviv to Sofia had a Hungarian crew with mostly Israeli and Bulgarian passengers, but everyone on board was communicating in English.  It's more true than ever, "the world is flat."

Next stop: Bulgaria and Hungary.

Thursday, January 11, 2018

Review of Gett XL in Israel

I recently visited Jerusalem and Tel Aviv with my wife and five children.  Since we couldn't all fit in a single taxi, we wanted a large van to take us from Jerusalem to Tel Aviv and then later from our apartment in Tel Aviv to Ben Gurion Airport.  We'd had good luck with Gett for calling taxis, so we tried Gett XL to pre-book a van that could hold all of us.  Gett XL worked perfectly for us.

It was really easy to book the van through Gett's Android app.  We entered the pick-up time and location and the desired destination.  Gett instantly quoted us a price and sent an SMS confirmation after we scheduled.  About 30 minutes before the van was scheduled to pick us up, we received another SMS with the driver's contact information.  About 5 minutes before the scheduled pick-up, the driver pulled up in front of our house.  We received a notification through Gett that he had arrived.

The vans were clean, comfortable and spacious.  The drivers were polite and helpful and drove patiently through traffic.  If you need to hire a large van in Israel, I definitely recommend Gett XL.

Saturday, December 23, 2017

World tour: Marseilles, Italy, Athens

After leaving Spain, we spent ten days in Marseilles, France.  Since we live in apartments in most cities, we frequent nearby parks where the younger boys can burn off some steam.  Their favorite playground in Marseilles (in Parc Borely) had a small, car-themed roller coaster for kids.  I don't know which they enjoyed more: the roller coaster or riding the subway to get there.



On the first night in a new city, I usually walk around the neighborhood trying to find groceries for breakfast for the next day. In Marseilles the closest store was a Turkish grocer with plenty of dried fish heads and exotic olives. Fortunately for the children, they also carried peanut butter. That's a rare treat in Europe so I stocked up and we ate it with our baguettes for a few days.  On the way home from the Turkish grocery, I happened across a cathedral with its stained glass windows all lit up.  These kinds of random encounters are some of my favorite parts of an unplanned, spontaneous trip.



Most places in Europe have a surprisingly familiar feel. They're not much different than big cities in the States.  Aside from the local language, it's often small differences that seem most memorable.  For instance, sliced bread in Marseilles (and Athens too) has no heels.  They're removed at the factory.  At church on Sunday, everyone kisses hello instead of shaking hands: one kiss on the left cheek, then one on the right.  This was the custom throughout Italy too. Alcohol is used more freely as an ingredient without any obvious labeling.  So far, we've accidentally purchased alcohol while trying to buy pop, birthday cake and candy.

After Marseilles, we spent ten days each in Genoa, Florence and Rome.  Our house in Genoa was above a bakery and a pizza restaurant so it always smelled delicious.  Because Genoa is so hilly, they have public elevators that serve the same purpose as public buses but bring you from one part of town to another by traveling vertically.  The hills also make for some nice views of the city:


Florence had some great statues and architecture.  It also had many more tourists than our previous destinations.  As we walked through the city, we heard more English and Chinese than we heard Italian.  Since we're all early risers, we visited most sites as soon as they opened and before most tourists were awake.  That worked great.  When we arrived at Galleria dell'Accademia to see Michelangelo's David, we were the only ones in the room.  By the time we left, the place was packed.

We also celebrated Thanksgiving in Florence.  We couldn't find turkey or pie, but rotisserie chicken, dates, figs and cookies were delicious:



The age of things in Europe is always surprising for an American. For example, our house in Florence was constructed in 1470.  It's been around longer than Europeans have known about our continent.  I've also been impressed with the kindness of people throughout Italy.  For example, on our second Sunday in Florence, it rained on us the entire time we walked to church.  When we arrived, our coats were soaked.  The people at church couldn't speak English, but they welcomed us with a smile, helped us out of our wet coats and gave us warm, dry sweatshirts.

Rome is always fun.  I've been there a few times and always enjoy wandering around and seeing random ruins in the middle of the city.  The kids have been really interested in Roman mythology for the last couple years, so it was particularly fun to explore the city with them.  They'd narrate each statute with a full genealogy of the relevant gods and their myths.  We were also in St Peter's Square at the same time that Pope Francis was giving a general audience, so the timing on that worked out great.  Oh, and Roman broccoli is snazzy:


Athens was our last stop on this leg of the journey.  Jericho accidentally left his backpack, with his laptop in the taxi from the airport.  We had no luck recovering it, so my first stop in the city was to find a cheap, used laptop for him to do his school work.  We ate baklava and cheesecake and visited the Acropolis.  Jericho passed the sacrament in the small English-speaking branch of the Church that we attended in Athens.  We also met a family at church that had just moved from Jordan, our next stop, so they gave us some pointers.  All around, it's been a fun month.


Wednesday, November 08, 2017

World tour: Spain

We started our time in Spain with a brief stop in Madrid followed by ten days in each of Toledo, Cordoba, Valencia and Barcelona.  We spent about five weeks in Spain altogether, covering all of October.

The stop in Madrid was a logistical detail leftover from Ryanair canceling our flights to Spain.  Our real journey began in Toledo.  When we arrive in a new place, we usually try to walk from the train station to our house so that we can get a feel for the city.  That's not always possible, but it usually works well.  In Toledo, it was a great walk.  The route took us near a couple of ancient bridges into the city, past some great views of the Alcazar on the hill and through a canyon along the Tagus river:


One of our goals for living abroad is for our kids to learn how to navigate through places they're unfamiliar with.  We take turns having each kid lead us to our destination by following signs or maps.  Sometimes we get lost, sometimes we arrive unscathed and we almost always have fun.  Here's Gideon leading the way through Toledo's old city:


One challenge we've noticed with traveling and living abroad is that all seven of us are in tight quarters most of the time.  In Wyoming or Iceland, when you want some private time, you walk into the wilderness, sit on a rock and stare at the clouds.  Elbow room is easy to come by in those geographies.  In the Spanish cities where we traveled, personal space is harder to come by.  Our houses in both Toledo and Cordoba had courtyards where we could be outside while still being walled off from the hustle of the surrounding city.  We instituted a family rule that the courtyards were silent places.  If anyone wanted quiet, they could retire to the courtyard for a little peace.  It's not quite a rock in the prairie, but it got the job done.  In Toledo, Haven also found some peaceful spots along the Tagus:


In Cordoba, our house was a couple blocks away from the Mezquita-Catedral.  This building had been a mosque for almost 500 years during the time that Muslims controlled Spain.  After the Reconquista, it was converted into a Catholic church.  They basically just changed the sign on the door and converted the minaret into a bell tower.  Walking through the church, it looks just like a mosque but with Christian chapels around the outside wall.  It was fascinating.  Anyway, the Cathedral has a large irrigated courtyard planted with orange trees and date palms.  During a morning visit, a branch full of ripe dates fell from a palm tree, so we all ate dates in the shade of the Mezquita.  It's a beautiful place:

In Valencia, our house was near the beach and the city's main port.  We watched container ships come and go while playing in the sand:

Valencia also has a giant playground inspired by Gulliver's time with the Lilliputians.  A giant statue of Gulliver is tied to the ground so that children can climb and slide and jump all over him.  It's hard to communicate the scale of the playground, but here's a picture of all five children scattered along Gulliver's left leg:


The timing worked out great to travel through Spain during the Catalan referendum on independence.  We were in Toledo on the day of the vote and in Barcelona when the Catalan Parliament declared independence from Spain.  The politics had very little impact on people's daily lives.  We saw no protests and only talked to one person who mentioned the situation.  The most visible sign of the process was flags flying from apartment balconies.  In Cordoba, the apartments draped a Spanish flag over the balcony to signal support for Spanish unity.  In Valencia, about half the flags were Spanish and half were the Estelada, signaling support for Catalonian independence.  In Barcelona, we saw the Estelada almost exclusively.  It was joined by flags saying "Si" or "Hola Republica".

Next stop: Marseille, France.  We'll only be there for 10 days, so I might lump it in with a blog post about Italy next month.

This may not seem like much excitement for an entire month in a foreign country.  That's partly by design.  We want this year to be more like living abroad than an extended vacation.  Most days for us are just like most days for you: we exercise, go to work, buy groceries, cook dinner, help the kids with school work.  We explore the city a couple days each week and go to church on Sunday.

The surprises of travel spice things up a bit, but not as much as you might expect.  I broke one of my ribs in Boston, so exercise has been tricky.  We ate galleta Maria with hot chocolate for breakfast every morning since that's what the Spaniards do. While trying to catch a train from Barcelona to France, we discovered that we were departing on All Saints' Day and buses to the train station were canceled. We're always glad to find a pay toilet since we know it'll be clean and fully stocked.  Small surprises like this, against a backdrop of structure, make it fun and educational without being stressful.

Wednesday, September 27, 2017

World tour: Iceland

After our last minute pivot to Boston, we left for our first destination abroad: Iceland.  When scheduling flights from the US to Europe, Icelandair had some of the least expensive flights.  They also let us stopover in Iceland for up to 7 days for the same cost as flying directly to Europe.  Since we wanted to see Iceland anyway, the stopover worked great.  They turned out to be a really comfortable airline too; more pleasant than others I've tried.

We rented a small house on the south coast near Strandarkirkja.  It's about an hour's drive south of Reykjavik (which we didn't visit).  We loved the rural feel in this area.  The closest town was about 15 minutes away.  There were only about 5-10 houses near us.  Everything else was open fields, lava rocks, ocean and the occasional rainbow:


During the five days we were here, the sun shined for about 12 hours total.  It rained the rest of the time.  I thought that was pretty good weather for autumn in the north Atlantic. The kids enjoyed walking along the rocky beach near the house on one sunny day.  The water was too cold for swimming, but they enjoyed throwing rocks and watching sea critters:


When we travel, we try to live like the locals and to avoid the most popular destinations for foreign visitors.  So instead of eating at restaurants, we buy groceries at a local store and cook our meals at home.  Instead of visiting Blue Lagoon, we went to a small community pool in Hveragerði, etc.  A slow pace in small venues suits us well.  Anyway, as you can imagine, seven Americans wandering around a small town grocery store in Iceland draws plenty of attention.  Our meager attempts at Icelandic were laughable, but everyone we encountered spoke excellent English.  Iceland is roughly the same size and population as Wyoming and they speak their own language so very few goods are manufactured specifically for the Icelandic market. That meant that their grocery store is an amalgamation of items imported from UK, Norway, Sweden and Denmark with labels in the same assortment of languages.  It was fun to decipher all the languages.  We ate horse sausage with dinner one night and had Icelandic lamb another night.  We also enjoyed the name of local milk brand:

Iceland is a remarkably beautiful place.  It reminds me a lot of Wyoming: open, windy, treeless expanses in a harsh climate.  The barren landscape that we saw may not be for everyone, but we really liked it.  Other areas, like Hveragerði were gorgeous in a more traditional way:



Our only regret about Iceland is that the stopover prevented us from spending more time here.  We enjoyed the country so much that we think we'll stay in Iceland again on our way home in the spring.

After Iceland we had planned to stay in London for a few days before flying to Madrid.  However, three days before departing Iceland, Ryanair canceled our flight to Madrid so we had a quick, overnight turnaround in London instead (the only flight remaining).  We should be able to see London in the spring when we return to the UK.  We did enjoy seeing London at night as the plane landed:


Next stop: Spain

Thursday, September 21, 2017

World tour: Boston

First step in the world tour: pack our bags.  With the many planes, trains and buses we'll use over the next year, there's not much room for luggage.  Each person gets a carry-on and a laptop bag.  Brigham helped me load it all up:

And Gideon created a small token of our departure:


To kick things off, we had planned to surprise the kids with a trip to Orlando.  The ever thoughtful Hurricane Irma had her own surprise in mind: cancel our flights three days before departure.  Since we couldn't reach Orlando, we did a quick pivot to spend the week in Boston (from which our Europe flights departed anyway).  It all worked out surprisingly well.  We found a small house near Revere Beach.  Haven and Jericho insisted that the water was warm enough for swimming:


Wonderland station on the Blue Line was only a 20-minute walk from our house, so we used the T most days to travel into the city.  Our daily walks near the ocean to and from the subway became a pleasant feature of the trip.  On one walk, Brigham got bored and decided to use a small shell to collect sand from the beach and construct his own private sandbox in the shade of a gazebo.  As you can imagine, this was a very slow process:

In the city, we visited the New England Aquarium, some historic sites and Boston Common.  Walking through Boston Common one evening after dinner, we were 150 ft away from a shooting.  We heard the shots being fired and saw some of the participants dive to the ground.  The crowd scattered and we followed suit.  We joked later that we dodged a hurricane and bullets within a few days and that this trip was turning out to be more exciting than we'd expected.

We also toured Plimouth Plantation to learn about Pilgrims and contemporary natives.  The Plantation is probably the best living museum I've ever been to.  There's a lot to explore and the staff is all very knowledgeable and glad to answer questions.

On our last day in Boston, we tried to attend a local ward's Sunday meetings.  It turned out that they had stake conference that day so nobody was at the meetinghouse.  Two other groups of travelers showed up with the same plans.  After they all left, we stood outside the locked building in the shade and sang primary songs and had our own little Sunday school lesson as a family.  It was a pretty great way to spend a Sunday:

Next stop: Iceland