Multiple criteria decision analysis application in real estate

Lately, I’ve been toying around with the idea of buying a new house. I recently had a discussion with real estate agent and loan specialist, and have been compiling information on how to assess the affordability of a new home. Buying a property is something I have been putting off since I started working at CheckSum in December 2011, Retrospectively, I should have done so around 2014 when prices were significantly lower. I have a few incentives for wanting to move by this point, and I think it’s about time to see what is currently on the market. I started browsing the real estate registries in the area, and quickly became overwhelmed by the amount of options and multiple criteria which I would need to consider when choosing an ideal location. I had the idea to start a spreadsheet and somehow come up with a ranking system which scores various factors I considered important (What are the monthly payments? How many square feet? How long would it take to drive to work? … etc).

I went on to search the internet, and discovered that MCDA (multiple criteria decision analysis) is a real discipline, and various people had submitted Microsoft Excel templates for performing MCDA analysis, however I found the templates generally inadequate for my particular situation. Take for instance, this template (link) provided on This excel spreadsheet provides a macro interface for creating criteria, and assigning weight factors to those criteria. For instance, they provide an example MCDA application for evaluating web browsers in terms of plug-ins, support, documentation, and speed.

Figure 1. Excel decision matrix provided on

The interpretation of this chart is fairly straight-forward. You define criteria, assign each criterion a factor weight, and then record the data for a particular browser. At the end, the score for a web browser is computed by multiplying all the factor weights by the criteria recorded for that browser; and then summing up all the results to produce your final score.

This sort of analysis is severely limited, for instance, in the case where you want a property within a certain price range or number of square feet with maximum and minimum limits. For this sort of analysis, you would not want to use a linear metric as this example does, but rather a metric which scores highest when the value is within a certain range. For instance, if my criteria is to find a house with an area between 1,400 sq. ft. to 1,900 sq. ft., you would want the score for this criterion to be higher if it is within this range than if it is outside. For this, you would need to apply a non-linear equation to the data.

Being that the templates I found online were lacking and not suited for my purpose, I decided to create my own method for MCDA. For this, I considered three possibilities for non-linear equations: 1) exponential curves, 2) parabolic curves, and 3) bell curves. My goal with each of these methods was to create ways of computing formulas which accept a weight, low limits, and high limits as variables, then applies a mathematical equation to the data to assign a score. In the following sections, I discuss the three MCDA methods I came up with, and later provide my own Microsoft Excel MCDA template.

Method 1. Exponential curves

An example exponential curve is the following equation y = 2x. This equation usually has a curve which explodes to infinity as x gets large, which is shown in the following example:

Figure 2

I found using exponential functions, you can meet the criteria by implementing a piece-wise exponential function. A function I came up with is the following:

Equation 1

In this equation, a is the ideal value for the criteria. The value p is the criterion weight, and k is a factor which determines how steeply the equation drops off.

Figure 3

Figure 3 was plot with the parameters k = 0.2, p = 2, a = 5. The equation produces a piece-wise graph of two exponential curves which intersect at coordinates xayp. The slopes of the exponential curves slightly before and after yp are ±k.

I wasn’t very fond of how sharply the equation peaked. In most cases, you would want a function which remained relatively flat between two limits. Through experimenting, I determined a way of combining piece-wise exponential in a way which allowed for no variance

Equation 2

In Equation 2, a is your minimum limit, and b is your maximum limit.

Figure 4

Figure 3 was plot with the parameters k = 0.1, p = 2, a = 5, and b = 10. The graph consists of two exponential curves with a flat area. Between x = a and x = b, the graph above shows that the value of the weight remains constant at p. For x slightly lower than a, the slope of the exponential line is k, and for x lightly larger than b, the slope of the exponential line is -k. For data that lands between a and b, the score remains at a constant 1. As x approaches ±∞, the value of y approaches 0.

Method 2. Parabolic curves

A simple parabolic curve is the equation yx2.

Figure 5

The next idea was to use parabolas to define weight values. To do this, I came up with the following equation:

Equation 3

In this equation, a is the lower limit, b is the upper limit, and p is the criterion weight. Unlike the equations for the exponential curves, Equation 3 does not have an extra k parameter as in the exponential function in Equation 2, the rate at which the parabola slopes is entirely determined by the upper and lower limits. By taking the derivative, we find that when the curve crosses the axis, the slope is ±4p/(– a).

Figure 6

Equation 3 was plot using p = 2, a = 5, and b = 10. The result is an inverted parabola which crosses the x axis at xa and xb.  The slope of the parabola at these points is ±1.6. The parabola peaks at coordinates x = (ab)/2, yp (in this example, {x,y}={7.5,2}.

For data points which far exceed the optimal values, the weights tend towards positive or negative infinity. In some situations, you may want an exceptionally high score for one criterion to overshadow a bad score for another criterion. Unlike the exponential plot in Figure 4, the function goes off to infinity as x gets large. For that reason, I was less interested in this method, and chose to look for a different technique.

Method 3. Bell curves

Bell curves, to include the famous Gaussian function, are very commonly used in statistical techniques, which makes them quite appealing for this application. In most applications, the functions use powers of e (2.7182818….), however for this case, we are using powers of 2 which are easier to visualize. The following is an example equation and plot of a simple bell curve:

Equation 4
Figure 7. Simple bell curve function

Instead of using piece-wise exponential functions, and since the exponential functions I had come up with earlier seemed to resemble bell curves (see Figure 4), I thought I’d try to implement an MDCA scheme using various bell curves. After some experimentation, I came up wtih the following function:

Equation 5

In this equation, a is the lower limit, b is the upper limit, and p is the criterion weight. Like the parabolic function in Equation 3, the slope is computed by how wide the limits are spaced.

Figure 8

Equation 7 was plot using p = 2, a = 5, and b = 10. The resulting graph is a bell curve with a peak at coordinates =(b)/2, = p (in this example, {x,y}={7.5,2}). One useful feature of this graph is that at the coordinates xa and xb, the value of the function at these points is exactly one-half the value at the peak. Computing the slope of the curve at the limits can be a bit more tedious, since the derivative of Equation is quite complex. However, plugging in xa into the derivative function yields:

Equation 6

Evaluating the slope equation using the parameters used in Figure 7, the slope at xa is approximately 0.5545, which means that at the point xa, an decrease of 1 for the data point will lead to a score around 0.5 less.

I eventually settled on this method since the function results are bounded unlike the parabolic method, and it didn’t require peace-wise equations or an extra slope variable as did the exponential method.

A new Microsoft Excel MCDA template

Using Method 3, I developed a new template for computing MCDA scores for properties. I implemented the MDCA scheme described in Method 3 into the housing data, played with the min and max values, weights, and tested the data against various different properties. Figure 9 shows some example data. The columns B through F contain the data I collected for various properties, and the columns H through L contain the MCDA weight scores for all of the data.

Figure 9. Table showing input data in columns A:F, and MCDA analysis in columns G:L.

The fields in columns H though J starting in row 5 implement the bell curve equation shown in Equation 5. In rows 2 through 4 starting in column H, the user can enter the min (a), max (b), and weight (p), which are plugged into the equation.

When choosing values for the Min, Max, and Weight, consider that data points that are half-way between max and min will receive a score equal to the weight of that column; and data points equal to the max or min will receive half that amount. Therefore, if you you for instance want houses in 2013 to receive the most points, choose your max and min such that 2013 is half-way between (this may require choosing a max date which is some time in the future). You will want to space out the max and min enough so that the score for properties below the max and min doesn’t drop off too sharp. After plugging in data and playing with the numbers, you can eventually feel confident that the MCDA scheme is able to predict which properties you will likely be more interested in.

Figure 10. Showing the field formulas implementing the bell curve equation in Equation 5. The Min, Max, and Weight fill into the equation as ab, and p, respectively.

Notice in the cell field, I include dollar signs before the numbers in the references for the parameter fields. This dollar sign prevents the auto-increment feature in Excel from messing up the link if you copy the cell to another location in the table. The fields were designed so you should only need to fill in the equation for one cell, in this case, H5, and then the equation can be dragged down all columns and rows to copy the equation to adjacent cells.

After rows H though L are completed, the final MCDA score is computed by summing up all the scores for all criteria to the right.

Figure 11

After the MCDA scores have been computed, you can sort all the rows by MCDA score fairly easily.

I’ve been filling up a spreadsheet with pertinent information about the properties, and I believe that this analysis is able to correctly predict properties I may be interested in buying. Some of them may be houses you may normally glance over and not give a second thought, including a purple house that somehow keeps showing up the highest-ranked property in my list. (Think I might have to factor in the cost of a new paint job, if I go with this property…)

A pink house that keeps scoring the highest with my MCDA analysis method

MCDA Example Download

To download the MCDA example Excel spreadsheet, click here. The spreadsheet is filled with example dummy data which you can play with to see the utility of the MCDA scheme which was implemented.

Ancient programming projects, part 1

Once in a while, I think most people develop a certain amount of nostalgia for their childhoods. This past week, I’ve somewhat started a trip down memory lane, and have resurrected some of my earliest projects, which brings me plenty of good memories. I will maybe share more of these projects in some of the future posts.

First, a bit of background: When I was young, my parents would never allow me to have a video gaming console, even though I wanted one badly and all my friends were immersed in the technology glut of always wanting to upgrade to fastest and computationally powerful gaming consoles. While I was living in Chicago, I briefly owned a Sega Genesis console, which my dad had bought for me along with a few games to play. I am not sure what happened to the console eventually, but it seemed to just disappear from my life; perhaps my dad saw I was spending a large amount of time with it and eventually gave it away without me knowing? Eventually, I was given a Nintendo Game boy, and after a rather uncomfortable episode of my dad discovering I had stolen batteries from him to power it on, he essentially destroyed the Game Boy. This was around 1995.

Sometime around then, my dad bought me a copy of Microsoft Visual Basic 4.0 (computer application), and told me if I wanted to make games, I would have to create them myself. Around that time, he imposed stricter controls on how I could to spend my time around the computer, which could easily lead to all forms of addictive behaviors. The goal was that if I were to play games, I would have to first create them myself. I was up for the challenge. I immediately immersed myself in self-learning, and began to teach myself how to program in Visual Basic. I remember beginning small, creating small forms which displayed simple messages, then over time, the quantity and quality of my projects gradually increased over time. I discovered a web site called  (now, which is a forum in which you could submit code projects for several different languages, and compete against other submissions for the honorary title of “Coder of the Month”. When I began using this site, I did not think I could ever compete against some of the contest winners, however within a couple of years, I won coder of the month for a Scorched Earth-style ballista game which I had created. From 1997-2000, I had developed an increasingly expansive and diverse code portfolio. The majority of this code library was lost over time due to inadequate file management. The only evidence of my work during these years are the thirteen code projects which I can still download from planet source code (link) even though the site went through a major data loss in 2015. To get these projects working, I set up a 32-bit Windows XP virtual machine, since I doubt Visual Basic will work on 64-bit Windows 10. Most of the projects I was able to get to run, however the graphical interfaces all seem like they had shrunk in size, and much of the animations which had relied on a slow computer speed seem to have sped up due to the improved processing power of my current computer. I tried compiling some of these projects for Windows 10, and surprisingly, I was able to get some projects to work. I ended up converting all the projects to Visual Basic 6.0, which is the version which I have kept in my software collection.

Random Shape Generator

One of the projects that turned out surprisingly well was a screen saver I had created which generated random shapes. I cannot get this screen saver to work in Windows 10, but it works fine in Windows XP. In this project, it started by me experimenting with a series of vectors with varying length and diverging at random angles, and I wondered what it might look like if you take this series of vectors and then keep repeating it several times. For instance, your typical square consists of a single vector with an angle of 90° repeated end-to-end four times; and most common geometric shapes could be reconstructed using this same process. What I was surprised to learn is that as long as the series of vectors doesn’t have a tendency to shoot off in 180° will eventually end up exactly where they started. In the process, the repetition of groups of vectors would create a shape which has interesting features. Some how out of your chaotic array of random vectors, there tended to appear order, and that to me was beautiful. I took this concept, and figured out how to turn it into a screensaver. I added some variability into color gradients used to draw the shapes which added an extra dimension to the graphics. These color gradients also behaved in a random way.

In the above video (best viewed in high-resolution full-screen), I took around 10 minutes of screen video of the screen saver running on the Windows XP virtual machine I set up, and overlaid it with some Bach. The screen saver appears to run faster now than I remember it running almost 20 years ago, and at some point the animations appear jumpy. However, it’s a relic of the past which has a certain amount of meaning for me, and I think most people can appreciate.

In Windows XP, the screen saver installs and has various customization features. On the Screen Saver setup screen, the screen saver resizes to display in a miniature preview screen image. When you click on the settings button, you can adjust the number of shapes which show up on the screen at once, the time between screens and shapes, and line thickness. An “about” button shows a dialog which gives credit to another Planet Source Code contributor who had provided much of the code I used to develop the screen saver.

Display Properties -> Screen Saver window
Screensaver setup screen, showing customizable fields

Another piece of software included with the screen saver submission allowed for designing various shapes. The interface provided a way of defining the number of vectors in a segment, the length and angle of those vectors, the gradient colors, and display settings such as grid and axis display.

Shape creation software

The Visual Basic source code and installer packages can be downloaded using the following links. Keep in mind, it probably won’t work on Windows 10 — and need I even mention, DAD, it won’t work on Macintosh (unless you start a Windows XP virtual machine, which you can do using Parallels). The recommended operating system is Windows XP (which very few people even use anymore). Also, note that the software also has quirks. I think this should be understandable, because it was developed by a 16-year-old.

Source Code:


Germany Part 2 – Hamburg

(Second post — for first post, click here)

From Bonn to Hamburg (April 28)

We decided to end the bicycle ride in Bonn, because there were various issues contacting the friend in Krefeld we were going to stay with there. We decided on an alternate plan: we would travel up to Hamburg and stay a couple nights there before travelling in Berlin. We scheduled train tickets to Hamburg and then to Berlin, and because the trip from Hamburg to Berlin required we leave early in the morning, we decided to try to find a hotel next to the train station. I looked up hotel reservations online, but unfortunately, all the hotels near the city center were out of our price range. We ended up settling on a Holiday Inn with was a few kilometers away, however the lodging price was still a bit high for what we were hoping for.

Until our train was scheduled to leave, we wandered around downtown Bonn, browsed various markets, passed by some monuments, stopped by Nordsee for lunch. The street musicians we encountered were quite good.

Some of the produce markets in central square
Various markets
More produce markets
Beethoven momument near the post office
Near the catholic church
Another view of the catholic church
Giant heads of  Roman martyrs Cassius and Florentius
Nordsee is a popular stop for lunch, featuring mostly seafood dishes.
Lunch at Nordsee
Streat musicians on the streets of Bonn
More street musicians at Bonn

The train left around 10 o’clock in the morning, and it wasn’t until late in the day we reached Hamburg (it is, besides, around an 8-hour 300 mile trip). When we finally got to Hamburg, we looked up the directions to the hotel and went straight there. The hotel staff upgraded our room to one of the executive suites near the top floor, which had a great view of the industrial side of Hamburg.

Waiting for the train to Hamburg
View outside the window of the hotel

One of the major items on my agenda at this point was to figure out where I could launder my clothes, since I had no clean clothes left. I asked the staff at the lobby where a coin laundry location was nearby, and they referred me to a nearby hotel and sold me some laundry detergent. I took a couple loads of laundry to the neighboring hotel, however I found quickly that I would have issues operating the machinery. The machines were free to operate; however, they were quite different than the machines I was used to. I required a quick German lesson to understand the operating instructions, however I think I didn’t quite understand the instructions, because I ended up having my clothes locked in the machine for a couple hours, unable to figure out how to end the cycle so the doors would unlock. When the doors finally unlocked, it hadn’t spun the clothes, so they ended up soggy. Additionally, I somehow set the dryers into a mode where they wouldn’t actually dry the clothes but just tumble them. At the end, it was getting too late, so I settled on clean — but soggy — clothes; better than having smelly clothes, at least.

… help?
… someone?

Hamburg (April 29)

In the morning, we first made our back to the train station for breakfast at one of the bakeries and made changes to the train schedule to Berlin. After that, we made plans to head in the direction of the Brahms museum, which we wanted to visit there. Hamburg is a city with rich musical history, to include many Baroque composers. Brahms lived the first part of his life in Hamburg. On the way there, we saw the City Hall, where we saw a memorial to George Philipp Telemann (Baroque composer).

Morning view from the hotel window
Hamburg train station
Hamburg city hall
Memorial to George Philipp Telemann at the Hamburg city hall
At the Binnenalster lake park
At the Laeiszhalle

We finally made it to the Brahms museum. The museum was near a barque museum, which is in a house that Gustav Mahler lived for a while. The Brahms Museum was one of six museums in the “Composer’s Corner”, which honored various musicians whom are tied to Hamburg — to include Georg Philipp Telemann, CPE Bach, Fanny & Felix Mendelssohn, Johannes Brahms, and Gustav Mahler. We decided to see two of the museums, one for various baroque composers, and the other for Brahms. The museums were fascinating, containing original manuscripts, recreations of opera stages, some of the original instruments, and tools used for creating manuscript copies. The Brahms museum had a re-furbished piano, which was the piano owned by one of the Brahms’s students; so no doubt, Brahms probably had played on it before. The museum director invited me to play it, so I played the Brahms Intermezzo Op. 118, no. 2. It was a little difficult to play, since the piano action was a little different than I was used to. While we were there, we were the only visitors at the museum. I left with a few souvenirs from the gift shop, including a porcelain bust to add to my collection of composer busts purchased at museums dedicated to the composer.

Tools for creating manuscripts, to include a rastrum for drawing staves, a hammer, and various different punches for notes
Model of baroque opera stage
The Brahms museum
Piano belonging to one of Brahms’s students
Playing a little Brahms

Afterwards, we decided to go out for some authentic Hamburg hamburgers. I’m not sure, but it is rumored that hamburgers originated in the city of Hamburg, however nobody seems to know for sure. We found an authentic Hamburg hamburger place called “Burger King” (not sure what that means in English), and they had very delicious hamburgers there. We both had the house special, which they called the “Whopper” (not sure how to pronounce it). But the burger was far better than any burger I’ve ever tried in the states.

Authentic Hamburg hamburger restaurant
The counter in the hamburger restaurant
The Hamburg “Whopper”

Afterwards, we wanted to get into the Miniature Wonderland (Miniatur Wunderland) museum. Unfortunately, we couldn’t get in that day, and the waiting time for the museum was days long. The museum featured impressive miniature creations (model trains, cities, etc). Instead, we took a walk around the city, and saw many of the historic landmarks. It wasn’t a huge disappointment; at least we were able to see the Brahms museum, which was the main attraction.

The Miniatur Wunderland (you can see the sign in gold letters on the side of the building)
An old ship loading alley
Hamburg Opera House

A ferry passing by. In the background, you can see many cranes (Hamburg is a major port city)

After walking around Hafencity for a while, we decided to head back to the city center near the City Hall. Afterwards, we went to one of the shopping centers where my dad got ice cream (I don’t eat ice cream myself). We stayed here a while because it began to downpour, and we didn’t want to walk around while it was raining.

Interesting reservoir area, which the city uses to control flooding
City hall building
Fountain in the city hall courtyard

After it stopped raining, we made our way back to the hotel. Later for dinner, we stopped at the Alt Deutsche Küche Elbbrücken (the Old German Elb Bridge Kitchen).

Lamb chops on a skewer with potato salad, and a small salad

Hamburg to Berlin (April 30)

The next morning, we got up at 4 o’clock in the morning, and rode our bikes to the train station. There we had breakfast then got on the 6:30 train. The train ride was several hours long, so I read some books which I had brought. When we got to Berlin a little before noon, we had to swap the tube in my bicycle, which had failed. Since it was too early to check into the hotel, we rode around a bit, riding by the Victory Column, Brandenburg Gate, the Kaiser Wilhelm Memorial Church (which had been bombed in World War II, and was being preserved in ruined state as a museum), Checkpoint Charlie (which is still manned as a form of historical reconstruction project), the TV Tower, and passed briefly by the museum block. We had lunch at Hackescher Markt, which consists of a series of stores located underneath the railroad tracks.

On the train from Hamburg to Berlin
The Victory Column
Kaiser Wilhelm Memorial Church

The Brandenburg Gate
Checkpoint Charlie
Berlin TV Tower (“Fernsehturm”)
Neptune fountain near the TV Tower
Neues Museum
Berliner Dom
Restauration 1840 restaurant, Hackescher Markt
Currywurst and Fleischklops (meatlof)

Afterwards, we headed to the hotel, checked in, and paid a visit to the Rewe (grocery store) at the train station. That night, we ate at a Peter Pane (burger restaurant) near the Ibis hotel which we were staying at, which is across the street from the train station.

East german crosswalk signs (aka the “Ampelmann”) – Go
Ampelmann Stop
About to attempt a street crossing. Hoping I don’t get run over.
Berlin Train Station horse statue
The Rewe (grocery outlet)

Berlin Day 2 (May 1)

We started the day by grabbing breakfast at the Le Crobag in the train station. I grabbed a sandwich and a couple Berliners (jelly doughnuts).

Ich bin ein Berliner

This day was the German Labor day, meaning many businesses were closed. Fortunately for us, many of the museums which are normally closed on Mondays were opened for Labor Day. We wanted to go to the Pergamum museum first, but as we got to the ticket stand, we found many of the exhibits in the museum were going to be closed. Instead, we went to the Berliner Dom, and went on a museum tour of this building. The Berliner Dom is a Lutheran cathedral with very impressive architecture, at which many of the German royalty were buried. It is somewhat a state church. The museum tour talked much about the history of the building, of how it was built, how it suffered damage during WW2 and was later rebuilt. We visited various different levels of the building, going up along the dome walk path, and then down into the crypt, where many of the German nobility are entombed.

Berliner Dom (Berlin Cathedral)
Impressive organ in the Berliner Dom

Looking up towards the dome
The alter
Another view of the organ
King Frederich the First’s tomb
There was a sign at this point in the tour saying that the ascent might cause physical exhaustion.
A mural of Martin Luther
A room with various cathedral models
Starting to suffer physical exaustion
… don’t think I can go any further …
*Whew*, made it.
At the top, looking towards the TV tower
One of the cathedral spires

Berliner Dom crypt
Tomb of Frederick William II

After touring the Berliner Dom, we decided to visit the Natural History Museum next. This museum was close to the hotel, and I had seen signs for it advertising some of the dinosaur bone exhibits they had on display. But first, we decided to visit the Goete Institute which my sister Diane attended when she stayed in Berlin, have Döner nearby, then text her images. She always seemed to appreciate when we texted her images of us eating her favorite German food. (Actually, she quite hated us for it.) Döner usually consists of meat or Falafel and various vegetables (cabbage, tomatoes, lettuce) in a focaccia-like bread, topped with a special sauce.

Entrance to Berlin Goete Institute
Döner fast-food counter
Döner Ingredients
Döner Kebab — hmmmmm

After lunch, we peroused the streets for a bit. Occasionally, we would see placards on the street with names of Jewish people who had lived or worked at those locations, who had during World War 2, been sent to concentration camps and later executed. We stopped by the Foundation New Synagogue, which is now a permanent venue for exhibitions.

Jewish memorial placards in the sidewalks of Berlin
Placard for Jews who died at Auschwitz concentration camp
Foundation New Synagogue, Berlin

We then made our way back to the hotel to unwind for a hour. Afterwards, we went off to the Natural History museum. The Natural History museum had various very impressive exhibits, including a extensive rock and mineral collection, one of the most impressive taxidermy collections, various dinosaur bone collections, and an enormous collection of pickled fish (very creepy exhibit). Some of the notable exhibits include Tristan the tyrannosaurus rex (the largest and most complete T-Rex collections which was excavated in Montana) and Knut the Polar Bear (you might have heard about it in the news).

Berlin Natural History Museum
Brontosaurus fossil
Various dinosaur fossils
Extensive mineral collection
Extensive pickled fish collection
Knut the Polar Bear

Afterwards, we tried to get into a pathology museum, but it was about to close; so we headed back to the hotel. We later stopped by the Rewe, then went to dinner at Zollpackhof Restaurant. Afterwards, we went back to the hotel and retired for the evening.

Brauts and pretzel
Schweinshaxe (pork knuckle)

Berlin Day 3 (May 2)

This day, we intended to go to the district with the museums, and see how many we could fit in our schedule. Many of the notable museums in Berlin are located in a section on an island in the Spree river. We bought a general museum pass which would allow entry into most of these museums.

Before visiting the museums, we first went to the Memorial to the murdered Jews in Europe. I can’t seem to figure out what the monument symbolizes. The monument consisted of stone blocks of varying sizes, and a concrete ground which was uneven with various dips and ridges. There really doesn’t seem to be very much information on the site, but supposedly there is somewhere an information center has an archive of over 3 million Jews which were murdered by the Nazi regime. The monument has received much criticism for it’s level of vagueness.

Memorial to the murdered Jews in Europe

The first museum we visited was the Neues museum, which consisted of a wide range of artifacts from the stone, bronze and iron ages, to include many artifacts of Roman colonization. The museum contained a large collection of Egyptian artifacts (sarcophagi, ancient writings and tablets). Because we had much planned for the day, we need to hurry through the exhibits; so I wasn’t able to glean much from the exhibitions.

Egyptian writings

We next went to the Pergamon museum next door. We ended up having to wait in line for over an hour to get in; and retrospectively, we should have gone to this museum first when the line wasn’t nearly as long. However we got in. This museum is notorious because it has some of the more impressive exhibits. The museum actually contains the Ishtar Gate, a massive structure which was transported from the dig of Babylon in Iraq. They were only able to include a portion of the palace, however the entire palace was transported back to Berlin, many of which is stored in archives. The museum also has reconstructed Roman buildings, and a collection of Islamic art.

Ishtar gate

Market gate of Miletus

Floring from the Market of Mlietus

400-year old carpet from an unknown manufacturer

Afterwards, we met with a friend of my dad’s from several years back, when he made a medical trip to Cameroon. We sold her my dad’s bicycle, which meant we wouldn’t need to worry about hauling two bicycles from then on. We had lunch with her at Peter Pane again, and talked about her plans to come to the United States for a tour this year.

Chicken hamburger with garden salad

Berlin to Leinach (May 3)

The next day, we checked out of the hotel, had brekfast at the train station, and boarded a train to Würzburg. Our final destination was Leinach, and it would require three train transfers to get there from Berlin. We left fairly early. On the way, I finished the book I was reading, mad a few emails, then began another book. On the last train, it was a bit crowded, and we were uncertain where to get off; however, we did get off at the right time, so everything worked out. When we arrived, we were picked up by Hans Wagner, loaded our baggage in his car, and I rode over to the Wagners’ house while my dad rode my bicycle over to their place. There, we had dinner and talked most of the afternoon. Much of the conversation was in German, and since I could barely understand what was being discussed, I eventually got tired and headed off to bed.

Leinach (May 4)

We began the day with a typical German breakfast (bread rolls with meat and cheese and coffee). We started the day by taking the Wagner’s dog Gustav for a walk in some nearby wine country, then later went to Karlstadt am Main to peruse the city. We visited a bakery there and picked up some pastries.

Map of the wine country area
Hannas ready to throw Gustav’s toy
Gustav fetching his toy

Overlooking Himmelstadt towards the south
Overlooking Laudenbach towards the North
Karlstadt am Main city center
Hannas and I in Karlstadt am Main
Delectable pastries at a bakery

We headed back to the Wagners’ house, discussed more, and eventually decided to go to dinner at Landgasthof “Zum Bären” UG restaurant in Thüngersheim.

Landgasthof “Zum Bären” UG
The dining area we ate in was a cellar
Zum Bären
Couldn’t resist Spargel just once more
Me with Hannas and Katja

That evening, a friend Herbert Feucht dropped in to say hello, and we talked the rest of the evening. I think mostly about politics. It was a long conversation, and it’s interesting to hear different perspectives on various matters.

Leinach to Frankfurt (May 5)

In the morning, we got on the train to Frankfurt. My dad rode my bike to the train station while I loaded the car with the baggage and rode over with Hannas and Katja. At the train station, we said our good-byes. The train ride was a little uncomfortable, since there was a group of children which had completely occupied the bicycle holding area, so I had to stand most of the way with the bike. We got to Frankfurt, and first found a Mediterranean restaurant. I had a Mediterranean skewered Chicken dish there.

Saying goodbyes to Hannas and Katja
Skewered chicken and pita dish

We checked into the hotel, then brought my bicycle into the bicycle shop to be dismantled and loaded back into the bicycle box we had transported it to Germany in. It would take a few hours to do, so in the meantime, we walked around the city and shopped for gifts to bring home. I ended up getting a bunch of German chocolates. We later picked up the bicycle at 5:00 PM and dropped it off in the lobby of the hotel. I spent the rest of the afternoon wandering around the city on my own, looking for gifts and stopping at the grocery store.

Frankfurt had a much more modern feel than most other German cities I visited. The town had construction projects all over. It also seemed to have a much more diverse culture, relatively fewer Caucasians, a large amount of people who appeared to be tourists from other countries.

Statue of Goethe

For dinner, we went to the closest place I could find, and I ended up ordering ramen noodle soup. That night, it was very difficult trying to get to sleep. We needed to keep the window open to stay cool, however there were a lot of late-night dwellers outside. There were some people who were yelling in the streets (I couldn’t understand what). This went on essentially all night.


Flight Home (May 6)

We decided to make two trips to the airport, the first to carry the bicycle box and my dad’s luggage. I would then stay at the airport and watch the luggage while my dad went back and got my luggage. It was a bit tricky to try to carry everything at once. Once he returned, we could then check in the luggage and bicycle, and find breakfast somewhere in the airport. We were both tired and a little cranky after a night with very little sleep. We were able to check in with no issues, then we stopped by the duty-free shop for more gifts and to use up the rest of our Euros that we had.

The flight home required a transfer in Chicago. When we got to Chicago, my dad was under the impression we had one fewer hours to transfer planes than we actually had (I’m guessing because he calculated time differences wrong), so when we arrived at the gate after rushing and running a bit, we were relieved to find out we hadn’t missed the flight to Seattle. We arrived back at Seattle, and my mom was waiting to pick us up.

Overall the trip was a great time. Not exactly what people would consider a restful vacation, but lots of memorable moments.

Germany Trip Part 1

From April 27 to May 6 this year, my dad and I went on a 2-week trip to Germany. This would be our second trip together since 2013. Our intention was to start out in Bennigen, where some old friends of my parents lived; then ride along the Neckar and Rhine rivers up to Krefeld, to visit with other friends. This trip was estimated to be around a 360 mile route, and would require 7 riding days. The intention for the rest of the time was to explore Hamburg and Berlin, visit some of the museums and monuments.

My dad had a bicycle in Germany already, and I was to take my Novera touring bike over on the airplane. To do this, it involved dismantling the bicycle, loading it into a specialized box, and checking it in as over-sized luggage onto the plane flight. For packing, the intention was to pack light — bringing bicycle clothes for a maximum of three days (hopefully to wash them along the way). The weather was going to be mostly cloudy with possible rain in the 40’s, so I was sure to pack cold-weather and rain gear. I carried all the bicycle panniers as carry-on items to save on luggage costs.

The flight (April 21)

On the flight to Germany, we flew Lufthansa on a Boeing 747, and strangely they did not charge for shipping the bicycle. It was a bit difficult lugging everything around the airport and onto the train to Frankfurt, but we somehow managed. We took the train to Frankfurt, and at the train station, I watched all the baggage while my Dad took the bicycle box to the bicycle shop to have it re-assembled. The bike shop in Frankfurt would store the bicycle box until we returned. While my dad had the bicycle reassembled, I unpacked all the panniers, and filled them with the items from the duffel bag. I then wait for my dad to return with the bicycle, at which point we could attach all the panniers and strap the duffel bag to the back of the bicycle. After loading the gear onto the bike, everything was much simpler to wheel around.

All my luggage
After repacking at the train station
On the train (hopefully) to Bennigen

The train ride to Bennigen gave me some practice loading the bicycle on the public trains. Most of the trains had bicycle-friendly compartments, typically with belts for attaching to the bike to prevent it from rolling around; in others, actual bicycle racks. We couldn’t get a direct train to Bennigen, since the ticket counter said they could not secure us a spot on the train since we had a bicycle. So instead, we were directed to Bennigen on a route which would require four train transfers. On our second train, at some point, the train stopped mid-track, and would not go any further because of supposed track damage — so we were essentially stranded in an unknown location somewhere Karlshrue. Fortunately, there was some college student girl who knew English adequately enough to be able to help us get our bearing again. We had to take a train which took us in the opposite direction, then take another crowded local city train in Stuttgart — which happened to be loaded with guys in their 20’s who had been drinking heavily, were passing out beer, and were causing a ruckus — which then dropped us off a block from the main train station. From there, we were able to find the right trains to Ludwigsburg and then to Bennigen — after a total of 7 trains, arriving at the desired location several hours later than anticipated. I met my parent’s childhood friends who lived in Bennigen, and stayed at their house the first night.

Cycling Day 1 – Bennigen to Heilbronn (April 22)

30.69 miles from Bennigen am Neckar to Heilbronn (Garmin)

We set out towards the West along the Neckar river. Along this section of path, we would encounter many small towns, and see quite a few vineyards, which were cultivated along interesting stone structures built into the sides of hills.

Ready to start the journey
Riding pass various fields near Kleiningersheim
Wine field structures near Mundelsheim

We spent the first night in Heilbronn, which is a city which may have some family history. It is believed that my great-grandfather lived in or near this city before migrating to the United States. We found a quaint hotel, and were able to store our bicycles in the garage of the hotel.

Heilbronn hotel and owner


Cycling Day 2 – Heilbronn to Heidelberg (April 23)

58.44 miles from Heilbronn to Heidelberg (Garmin)

Heilbronn is a city which may have some family history. I will need to iron out some of the details, but I believe my great-grandfather lived in or near Heilbronn before migrating to the United States near the beginning of the 1900’s. The weather was mostly clear the entire day. I started out in shorts and a shirt with short sleeves hoping that it would warm up. We stopped during the ride at a Biergarten near Binau for some lunch, and had some wurst, at which point I needed to put on some more clothing layers since it was still in the 40’s. Along the way, we saw several castles, passed through many small villages which almost seemed a relic of the past – old-style buildings and very few signs of industrialization, many agriculture fields. I noticed a tendency as we traveled downstream for cities to look more and more industrialized. We reached Heidelberg finally, and lodged at the Tannhaeuser Hotel.

Near the Old Post Office in Heilbronn, near the train station
The location of the invention of the printing press
More countryside
Passing through a small town
One of the castles along the way
Crossing the Neckar at Neckarsteinach
More castles
A little bit of Apfelstrudel to finish the day
On the Karl Theodor bridge in Heidelberg, which was rebuilt after WW2


Cycling Day 3 – Heidelberg to Worms (April 24)

34.77 miles from Heidelberg to Worms (Garmin)

As we left Heidelberg, we appeared to be entering more heavily industrialized area. There were much fewer small towns and many more factories and buildings. This trend continued until we reached Manheim, where the Neckar river intersected the Rhine river.North of Frankenthal, we rode along the East side of the Rhein for a while past a vast agricultural area. We had bratwurst at a small food stand in Lampertheim, the last city before reaching Worms. We finally crossed the Nibelungen bridge into Worms.

Chemical processing plants in Mannheim
Brats and Raddler in Lampertheim
Crossing the Rhine into Worms over the Nibelungen Bridge

In Worms, we stayed at Hotel Hüttl, right across from a Lutheran church and close to the Wormser Dom. There was also a quite impressive reformation memorial in Worms, which consisted of statues of important figures of the Protestant Reformation (to include Luther, John Huss, Wycliffe, Frederick the Wise, and various others). We finally had dinner, and I was a bit relieved that we didn’t need to go on a diet of worms, but instead enjoyed my favorite dish I had in Germany — white asparagus and potatoes.

Luther memorial
Luther memorial
Holy Trinity Church, across the street from the hotel
Wormser Dom
Entry to the Wormser Dom
Front of Wormser Dom
Organ in the Wormser Dom
Ancient city walls
Remnants of Roman walls
White asparagus and potatoes


Cycling Day 4 – Worms t o Bingen (April 25)

57.55 miles from Worms to Bingen. Break in data was done on train. (Garmin segment 1, Garmin segment 2)

Our plan starting out the day was to find a hotel in Mainz-Kastel on the east side of the river, and eventually have to take a ferry across the Rhine later on. I started the day by checking for hotels in Mainz, however I was not finding many cheap hotels which had vacancies. We decided to just wing it and see if we could just find something.

The weather this day was mostly overcast, with a few periods of drizzle. Somewhere near the town of Eich, we became confused because the bicycle guide map was indicating trails which didn’t even exist, meaning we took a couple wrong turns and ran into some dead ends.

Along the rout to Mainz

As we were making our way into Mainz, we decided to find a hotel in a smaller city, either in Budenheim or Heidesheim. We saw signs for a hotel in Budenheim, but realizing they were not convenient to find, made the decision to continue on to Heidesheim, which we knew had only one total hotel. On arriving at the hotel, we discovered that the hotel, also, had no vacancies; and the reason for this was because there was a major convention happening in Mainz, so all hotels within several miles of Mainz were completely full.

At this point, my dad was intending to continue riding all the way to Bingen, which was a plan I was not happy with. It was already 5:30 PM, meaning This was already our longest riding day yet (already close to 60 miles). It would take us at least another hour to ride to Bingen (11 miles away), we were uncertain we would even be able to even find a hotel here, the weather wasn’t particularly good, we were tired and hungry… Anyways, I was ready to call it a day, and not motivated to ride any more. So I devised a plan: Get out my phone, turn on data roaming, and make sure we have a hotel reservation somewhere, then we will take the train. I was able to make a hotel reservation at one of the recommended hotels in the bicycle book in Bingen. Then we would hop on the train. The plan worked well, and provided a good escape from a stressful situation. I was able to get a reservation at Hotel Krone which had excellent bicycle accommodations and a friendly staff, and a great view out the window. We finished the day at Zum geschwollenen Herz restaurant (To the swollen heart).

On the train to Bingen
One of the castles in Bingen
Hotel Krone


Cycling Day 5 – Bingen to Koblenz (April 26)

39.70 miles from Bingen am Rhein to Koblenz (Garmin)

This section of the bicycle rout was perhaps my favorite, and it was especially nice to have clear skies all day. There was very little industrial areas, and occasional small towns that we passed along the way, and an abundance of castles.

Boppard restaurant area
Old city Boppard
Half chicken at Boppard
Lasagna in Boppard
Hungarian-style Wienerschnitzel at Koblenz


Cycling Day 6 – Koblenz to Bonn (April 27)

45.70 miles from Koblenz to Bonn (Garmin)

In light of our experience with hotels, I made a reservation for our hotel in Bonn on my cell phone. On leaving Koblenz, there was a little bit of confusion in the route. It took us past the Memorial of German Unity, and the directions for crossing the Moselle river and finding the bicycle path were a bit unclear. I think we wondered off into an RV park, and had to turn around. We eventually saw more industrial areas, which we needed to navigate around. Eventually, the trail became clearer. We eventually made it to Remagen, and saw the remnants of the Ludendorf bridge, which is a historic WW2 landmark. Someone I know, who just recently passed away, was one of the first waves of American troops which crossed the bridge in WW2.

In Remagen, we found a Döner place, where we had to go just so we could text images of Döner to my youngest sister. Döner was her favorite meal while she was staying in Germany, so it would only be fitting that she would appreciate images of us eating Döner, especially since she just had a baby and was nursing and was ravenously hungry all the time.

We eventually made it to Bonn, and our first stop was at the front door of the house where Beethoven was born and lived for a few years. We then went to the Beethoven museum, which had a few Beethoven artifacts, manuscripts, and writings. As my tradition, I bought a bust of Beethoven to add to my collection of composer busts purchased near the birthplace of the composer.

Memorial of German Unity
Memorial of German Unity
West end of Ludendorff bridge at Remagen
East side of Ludendorff bridge
Döner kebab at Remagen

Arrival at Beethoven’s birthhouse in Bonn


Total Route

The bicycle journey ended in Bonn. The next week, we mostly traveled by train and walking to other areas in Germany.

Total route, showing each day segment. Total 266.85 miles.

The following images give a fuller perspective of the distance traveled.

In light of American politics…

In light of last year’s elections, I thought I’d express some of my ideas concerning the state of American politics and some of my own thinking about how to understand American politics. I realize this is a bit late, and the election was several months ago; and no doubt, people are now sick and tired of hearing about this. I haven’t posted about politics yet on this blog, and don’t intend to say much more about it in the future.

This past election year has been especially draining for many people, because the American public was presented with a choice between two terrible options: Trump or Clinton. Clinton was a horrible candidate because, although she could claim much more experience in the political world, with whom it is unclear to me whether she has any positive accomplishments, and has a proven track record of making poor decisions. Additionally, it was clear that she had many conflicts of interests which ended up profiting her personally. With Trump, it was impossible to get a clear picture of how he would act as a candidate. At some point in his life, he has espoused views on various topics which represented policies espoused by both Democrats and Republicans. It was never clear that he had a real understanding of some of the very fundamentals, about what the purpose or structure of government was as stated in the Constitution. In the end, Trump successfully was able to detect unease among the working-class factions of society, cater to them the words he felt they wanted to hear from a presidential candidate, and secure their votes. I suspect in the long run, they may be disappointed and realize they were duped into electing someone who does not in fact have their interests in mind. In some sense, Trump played the political scene like a very highly-intelligent and successful individual (which he likely is, considering his track record of success in real estate), however I have suspicions he may have been playing Americans as pawns in a chess game. After being sworn into office, he appears to be reversing many of the political views which helped him get elected.

Often times, I think people are fooled by political rhetoric made by politicians during their campaigns. There is an idea that there are opposing philosophies in government: Republicans vs. Democrats, the Left-wing vs. the Right-wing, conservatives vs. liberals, globalists vs. nationalists. I have refrained from using the above labels for my own views, considering their definitions are a bit fuzzy and change over time. While some of these dichotomies do have fundamental philosophical differences, when push comes to shove, the elected political leaders in the United States typically act the same, regardless of the party they adhere to or political philosophies they espouse during their campaign. The fact is that the American populace is collectively incapable of deciding on candidates which espouse a political philosophy which would lead to more limits on government power. You can expect like clockwork that America will decide on leaders which intend to increase the scope and power of government, only so long as they are convince that they will benefit as a result. Candidates which espouse an agenda which puts limits on government power are typically labelled as fringe candidates and radicals, and are vulnerable to the attacks of either party, which are quick to point out when a certain group is going to reduce spending on welfare or warfare ventures which are in line with the particular party. When a candidate suggests that the government shouldn’t spend so much money on welfare programs, the leftists will be correct in criticizing the money spent in the failing national defense policies, and talk about how that money should be put to better use to provide free health care or education; or conversely, when politicians promise more socialized healthcare or medicine, the right is correct in pointing out the this form of spending is wasteful and typically does not accomplish the desired effects, but instead tends to promote policies which increase the American empire and presence in failing overseas military ventures. Regardless if which party is eventually elected, the candidates have a tendency to abandon the ideologies which helped garner votes from the factions they catered to, abandon their campaign promises, and the effect is for the gradual increase for all levels of government power, both for Democratic and Republican agendas. Politicians on the right sign into law some of the largest social programs, and politicians on the left pave the way for more military intervention overseas and surveillance programs.

In evaluating a candidate, what most appeals to me personally is not only a view that the government ought to be limited in its scope, but also a sense that the views the candidate espouses are deeply-held beliefs, which stem from a grounded and consistent philosophy and understanding of history. Political debates are especially mind-numbing to me, since they don’t ask the sort of questions which get to the root of want the core beliefs of a candidate actually are; and rarely if ever illuminate any substantial differences between the candidates. I would prefer the debates to center around fundamental philosophical questions, such as: Is it alright for the government to steal your wealth using the threats of imprisonment or lethal force if it is not okay for you to steal somebody else’s money at gunpoint? Is it okay for the government to force you to act against your own conscience? Is it right for the government to force you to make certain decisions about the education of your children or how you spend your wealth? Are there even any limits to what the government can do? Is it right for the government to force you to act charitably? What lessons can we glean from history and from studies into the effects of certain political policies? Unfortunately, the public media is not helping the American public become more informed concerning these questions. As Neil Postman points out in his book “Amusing Ourselves to Death: Public Discourse in the Age of Show Business” (which although written several decades ago is especially relevant today), the age of television has turned politics into a form of entertainment, in which ideas are passed to you in the form of irrelevant images and catch phrases, and very rarely conveys relevant information. People have stopped thinking critically about the truth of the arguments espoused by the public media, and instead have adopted a feel-good moral attitude which opposes the urge to think critically about the views expressed, and make decisions based on an awareness of history or moral / philosophical principles.

There is a growing demographic of people who espouse socialist political view, and not only am I shocked that they express an ignorance of history especially from within the last century, I am bewildered that they haven’t thought through the implications of what their views imply in actuality from a philosophical level. Not only do the ideas of socialism are immoral and break at least three of the 10 commandments (though shalt not steal, covet, kill), it has a proven track record of leaving individuals as well as entire countries destitute, creating the conditions for economic instability and eventual collapse. We are today seeing this in many countries in Europe, Venezuela, Brazil, and Zimbabwe. Although proponents of socialist views will often point that the version of socialism they support is different in nature than the socialist political systems which have failed, to me, it appears to be the exact same fundamental political philosophy about what the role of government is: to take from the economically successful minority and redistribute to the economically unsuccessful majority with an end goal of reducing or eliminating class distinctions. The socialist ideas imply the existence of a God state, which shepherds us since we are incapable of caring for ourselves, and which we pray to for wisdom and healing. Ironically, as many who hold to these views are self-proclaimed atheists, their desires for a God state appears religious in nature.

The tendency I would like to see is for governments to reduce the scope of their power, and allow for more individual liberty. In my view, governing power ought to for the most part be as decentralized as possible, even as much so it is at the level of the individual, family, or community. This isn’t to say that there is no role for a state or federal (or for that matter, global) governing body, and I certainly would not claim to be an anarchist. However there certainly ought to be more thought into how to limit these powers and defining the roles of these governing bodies, as for instance, Article 1 section 8 of the constitution sets out to do.

The political opinions I hold of free-market decentralized government may be considered impractical to a lot of people, since the possibility of it being tried anywhere in the world any time soon is unlikely; and possibly has never been tried in entirety before. Human beings are flawed creatures and any human being put into a position of power will in one way or another be corrupted. It is therefore expected that the tendency over time is for power to be concentrated into fewer hands over time. At certain points in time, revolutions have taken place which have stripped the ruling class of their power; however, decentralization of power occurs very rarely and is most often been short-lived, as humans make their attempts to maintain and strive for more and more power. From history, it has been clear that flaws of human character will eventually lead to the demise of even the most well-designed political systems humans can come up with.

And so for the time being, I expect the American political house of cards to eventually become too burdensome, and eventually collapse under it’s own weight — just as has eventually happened to every empire in human history. History keeps repeating itself, and I think we can expect that it will continue doing so. It is difficult to find hope for the immediate future, considering the trends. I feel as though I’m a passenger in an airliner with pilots which have had too much alcohol, who are about to run the aircraft into a mountain side. All I can do is encourage others to be aware of their situation, and brace for impact, pray and trust in God to bring you through, and maybe try not to peek out the window too much.

Blog update

I have just updated my blog from to a WordPress blog hosted on my Synology DS1515 server. I have manually exported much of the text and images from my old site to the WordPress blog, therefore a lot of the formatting may not appear correct. I will gradually correct the formatting as I find time. I realize it’s been several years since I updated my blog site, however I intend to post more regularly going forward. I have a lot of content planned over the next several months, so stay tuned!

Belize Update

I realize I’ve been kind of quiet about it on my blog, but for the next few months, I will be in Belize learning electronics from my Uncle, who works quite a bit with electronics. Today is close to my third week in Belize, and it’s been pretty busy so far. I don’t have much opportunity to use the internet, so that’s why I’m just now writing for the first time.

Living out here in the jungle, there are no public utilities, so my Aunt and Uncle provide their own infrastructure. For electricity, the house is powered off of two large arrays of solar panels, which charge an array of 12 lead-acid batteries. The DC voltage is converted into 120 V AC supply using a converter and inverter. During cloudy days and days during heavy energy demand such as when the washer and dryer are being used, a gas generator is used to power the house up. I’ve found I have to be very careful to turn off lights behind me and unplug all unused electronics, because it is easy to overload the system and cause it to shut down. I simply need to plug in my laptop sometimes, and the entire house loses power.

Water is collected from rain water. The roof of the house is designed so all the water that hits the roof flows into gutters, and is collected in large tanks. The water is then heavily filtered and supplied to the house at 40 psi. There is no hot water, so all my showers have been cold lately; it’s not a big deal in this climate, anyway. Right now, I’m staying in the guest house, which is its own separate building apart from the main house, consisting of a bedroom and bathroom. The house has it’s own separate water collection system, and the electricity is supplied using an extension cord from the main house.

The first few days here, I worked through a few Electrical Engineering problems, refreshing myself on concepts that have been taught to me during my time at the University of Washington. After my crash refresher course, I was put on a project of getting a 6502 microprocessor emulator device my Uncle built before I was even born to work again, and to upgrade the memory on the board. Originally, the project entailed just getting the circuit working. I was a bit intimidated looking at the tangled mass of wires, some of which have become disconnected, so I need to figure out where they used to go. Also, I was relatively new to soldering when I came down, and the last couple weeks has been a crash course into how to solder together prototype circuits. Soon, the project evolved into modifying the circuit to include an updated SRAM, since they evolved since he designed the circuit. Later, I found there were major revisions to the circuitry I needed to make to cause the circuit to run properly, so I ended up taking a lot of the circuitry apart and rebuilding it, and improved on the design quite a bit. I’m in the process of testing the logic and rewiring the circuit, and I have a feeling this project might take a while longer before I’m even ready to start programming it with Forth (a stack-based microcontroller programming language which very few people use, because it was oversold in the 1970’s). After that, I might design a control circuit for a gas generator, which automatically starts and shuts down the generator to ensure adequate battery voltage. Also, one of the Mennonites at a hardware store is requesting a microprocessor-based grain dryer controller, which might become one of several entrepreneurial opportunities I’ll have while down here in Belize.

Being here with my Uncle is like having a personalized electronics tutor. I have been learning about electronics pretty much non-stop the last few days, and my brain has sometimes been in information overload mode. I have been learning all sorts of things about power electronics lately, which my uncle is currently writing a book on.

Anyway, I have a lot more to say, but I’ll save it for a future post. I will at least attempt to write once in a while, and I’ll try to upload images some time.


Hello to all… Yesterday I finally graduated with a BS in Electrical Engineering after 2½ years at the University of Washington, Seattle. I don’t know if it would have been possible without the support of my friends and family, and especially my Mom and Dad. Anyway, here’s a small selections of photos from yesterday…

IMG_0145 IMG_0211
Left: In front of Suzallo Library.

Right: Me with Dr. James Peckol, with who I’ve had for a total of four classes, EE 271, EE 399, EE 472, and EE 478. He has a reputation of being one of the most demanding professors in (especially in regards to documentation), although, he perhaps prepares you better for industry than most professors.

Now that I’ve graduated, I have to now do a lot of organization, moving, and preparing for my Summer ventures to Central America for a while.

Embedded Keyboard Project, Part 6

Since my last post, our team has completed the final project. On Monday, we conducted the final demo, and just today, we submitted the lab report. Here is the final layout of the keyboard:


Completed keyboard project

As you could see, my lab partner Whitney did a fine job organizing all the electronics, securing them to the keyboard. He made a nifty stand for the LCD display using plastic risers and hot glue. As you can see, we’re now using a Seeeduino board instead of the Arduino board — which is for the most part the same circuit, except it has a few added features and a slightly different board design. Also, note the use of the infrared optoelectronic distance sensor on the lower left side of the board. We decided to make the circuit a little more complex, so we added what is known as a D-beam, and it is used in a lot of Roland synthesizers, for instance, the Lucina AX-09 (video — WARNING: click only if you can handle extremely cheesy product infomercials). We implemented the D-beam using a Sharp 2Y0A21 distance sensing device, and we freed up an analog input on the keyboard controller for the analog sensor signal. We programmed the keyboard to process the same range of pitch bend as the Roland model in the video clip I posted above, which is about a whole step of range. The analog data coming from the sensor is really noisy, so it adds kind of like a chorus effect to the sound quality which we really couldn’t filter out very well.

We reconfigured the entire keyboard to run off of USB power, which is 5 volts, 2.5 watts. The entire circuit ended up only running off of 1.2 watts. We could probably cut down on power even more, especially with the LCD, which consumed a half a watt.

Since our synthesizer output standard MIDI out, it was compatible with another group’s project, which was designing the actual synthesis. In the following video, I used our project as a keyboard interface to their synthesizer using our MIDI output. Here is a video I shot of us connecting our projects together:

Note: Video was deleted at some point. In process of trying to find it again…

The overall cost of all the circuit components is just short of $100, which is more than the original keyboard was worth. We actually probably had the cheapest circuit out of all the groups. If we had more time, ideas I had for further developing our design would be to add a recording / playback feature, which I could very easily do with an SRAM chip, integrating the controls into the LCD menu. Since we ended up getting the synthesizer chip working in serial mode, all the parallel signals could be freed up to drive an SRAM chip. Here are the files that we created for our project:

final_presentation.ppt – Class presentation (Microsoft PowerPoint)
final_report.pdf – Final lab report (Adobe Acrobat) – Project source code (zipped)

Some of the other groups in the class ended up creating really cool embedded projects. Perhaps the most expensive project implemented was a series of robots which implemented swarm intelligence. The robots would scan an area for a target of a specific color, and when it found the target, it would wirelessly broadcast a message the other robots that it found the target, and emit infrared radiation in all directions. The other robots would then turn and locate the robot, and move in towards it. Here are some photos I took of their project:

IMG_0095 IMG_0106
Another cool project was one group that worked with a touch-screen LCD, which had applications which allowed you to draw pictures, play music, and operate a remote-controlled toy car. Here are some images of their project:

IMG_0115 IMG_0119
Another group designed an automatic plant watering system, which allows you to automatically water your plants when it senses the soil is too dry. You can also monitor if your plants are being watered on Twitter. I thought this was a really creative design idea.

Also notice the very creative white-board artwork. Over the weekend, there was an art competition in the lab. Here are some examples of peoples’ creativity:

IMG_0100 IMG_0124
IMG_0092 IMG_0096
Notice that sleep is a common theme in the artwork. No doubt, many groups had to pull overnighters this weekend on their projects, and sleep deprivation seems to be a common theme in classes like this. Working on these projects, you completely lose perspective of time, and can easily spend over 10 hours on a project in one sitting. Well, continuing on with the artwork… One group decided to take their artwork a little further and etch their artwork onto a circuit board.

IMG_0121 IMG_0122
And here is my team’s artwork, which my lab partner drew. It isn’t nearly as creative, simply because we didn’t have to spend overnighters in the lab this weekend, since we had our entire circuit working last Monday and completed on Friday.

One of the most amusing pieces of art in the embedded classroom is the “Wall of Death”, which is a hodgepodge of broken microcontrollers, comic strips, and student artwork.

There were some other cool projects created this quarter, some which worked others that didn’t. Dr. Peckol usually publishes all of our embedded projects on his web page. Our projects should be up and running on his site within a week or two. You could visit our class project showcase here (if it is even up yet). More photographs can be found on my Flickr page.