Send GPS data over tcp

A time ago, I wrote about how you could only read GPS data from a USB GPS device from one COM port and how I managed to handle GPS data on different virtual COM ports so that the GPS data could be used in different applications.

One of these applications is one in Java that I develop myself. However, the RxTx driver I’m using is a little unstable, especially when the connection is lost and you try to re-establish the connection to the Serial Port. So I tried to find a solution and hub4com actually offers one as well. You can actually route the GPS data, read from a physical COM port, to a tcp port so that you can create a network connection to the machine and fetch the GPS data from there.

You can enable filters in hub4com and one of these filters is the telnet filter over a tcp driver. I modified the command so that it looks like this:

    --route=0:All \\.\COM6
    --baud=9600 \\.\CNCA0
    --baud=9600 \\.\CNCA1
    --baud=9600 \\.\CNCA2
    --use-driver=tcp *10110 *10110 *10110 *10110"

This now means the following:
Start hub4com,
read at speed 9600 baud,

route the first specified COM port to all the others

the first specified COM port, which is the one that we’ll be reading from

--baud=9600 \\.\CNCAx
write to these virtual COM ports with speed 9600 (the –baud parameter on these three lines might be omitted since you have specified hub4com to read at that speed)

Create a telnet-filter so that hub4com can answer telnet-like

redirect the input from the first specified COM port (COM6 in our case) to the telnet session

--use-driver tcp *10110 *10110 *10110 *10110
this will use tcp for communication and will listen on port 10110. Four concurrent telnet sessions on port 10110 are possible. If you only specify one *10110, only one connection at the same time will be allowed.

This now allows me to create a tcp connection on port 10110 and read the NMEA data from there. Much more stable.
Now, to wrap this all up into a windows service, I run the following bat file (everything on one line) to install that service:

    --displayname "hub4com" 
    --description "Routes the GPS data from COM6 to virtual COM14, COM15 and COM16 and allows 4 telnet connections to the raw NMEA data" 
    --exe "C:\com0com\hub4com.exe" 
    --params "--baud=9600 --route=0:All \\.\COM6 --baud=9600 \\.\CNCA0 --baud=9600 \\.\CNCA1 --baud=9600 \\.\CNCA2 --create-filter=telnet --add-filters=0:telnet --use-driver=tcp *10110 *10110 *10110 *10110" 
    --workingdir "C:\com0com"

The service now launches on system startup and I can use multiple COM ports as well as 4 concurrent telnet sessions to the host on which the GPS is connected. telnet localhost is more stable to use in Java than RxTx (at the moment of writing)

maven and UTF-8

When you want to compile your source code – Java in this case – on multiple machines, you might get into troubles when special characters are coming in. I mean, when you just type plain English, nothing’s wrong. However, when you start typing characters other than in the ASCII128 specification, you get into troubles. On the Internet, it is a known problem and thus, most websites are specifying charset=”UTF-8″ in their metadata, so that every character you see or insert, is the same on all platforms.

Now, when you create a text file on Windows, by default it’ll be in the Cp1252 encoding. When that is a Java source file that you want to build on a Ubuntu server, you come into troubles when these source files contain characters like á or è and especially Æ. Ubuntu uses UTF-8 as default encoding and you’ll end up in compile errors because the characters are converted wrongly.

This writing describes a solution to be able to build your project using maven on different platforms (Windows and Ubuntu).

To make your project platform-independent, you can choose to create UTF-8 encoded sourcefiles all the time. In Eclipse, you can find the option in the Preferences panel (Window > Preferences) under General > Workspace. Here, you can modify the Text file encoding to UTF-8.

Now, maven will build the project correctly on Ubuntu. However, it won’t build on your Windows machine anymore – since it doesn’t interpret the UTF-8 characters correctly. So we have to make sure maven starts building in UTF-8. It’s giving you a hint by displaying a warning message while building:

[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!

To get rid of that, we have to add some properties in the pom files, preferably the master-pom file so that you only have to specify it once. It’s described on the maven website and even more on However, both solutions were not enough to solve the problem on my machine. You have to specify the encoding that will be used for the project and configure it for all plugins that matter. In fact, that would cut down to the “build” and the “resources” plugin. If you could speak of “plugin” in these cases anyway…

When only specifying, maven would still display the warning, so it wasn’t sufficient:

[INFO] Building project
[INFO]    task-segment: [deploy]
[INFO] ------------------------------------------------------------------------
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!

As you can see, we’re in the resources:resources section, not in a “build” section, so that made me add a project.resources.sourceEncoding property. My adjusted master pom file thus contains:

<?xml version="1.0" encoding="us-ascii"?>
<project xmlns="...">

And that works. The project is now building on a windows as well as on an ubuntu server and interprets the source files as UTF-8 encoded text files.

Handle GPS data by two GPS Apps simultaneously

Given this situation: You have a GPS device that is connected to your computer (not handheld) via physical COM1. Now you want to use this data in two different applications, say: a Route Navigator and a GPS logger. You launch the Route Navigator, it’ll connect to the COM1 port and it’ll show you your position. Now, launch your GPS logger and try to connect on COM1. It’s not happening: that COM port is in use. You can connect to a COM port with only one application.

On a portable device, this is solved by installing a virtual COM port, which can be read by multiple applications simultaneously. Often, this is COM8 (so it is on my Windows Mobile 5 system). But what to do when you want this functionality on a normal pc?


Well, there is a very cool application that actually makes this possible. It’s called XPort. Just launch the application, hit “Find GPS”, select a virtual COM port in the right column and hit “Enable ports”. Now, you can connect with both applications to that selected virtual COM port. Or, you can select two virtual COM ports and have both applications connected on a different port.

There’s a little drawback. The application needs Administrative rights, so on your own computer at home it’ll work, but if you have to set this thing up on a terminal build in a truck and running Windows XP on which the GPS logger starts up silently and the Route Navigator launches in full screen, all automatically while a very limited user is logged on, XPort will be denied to launch the virtual COM ports since it should be run with administrative rights.


So we need an application that makes it possible to install the virtual COM ports as an administrator, then launch the mapping as a windows service.
I found com0com.
Using the application com0com, you can create virtual COM port pairs, each representing a virtual NULL Modem Cable. You can use the graphical interface, setupg or the commandline interface setupc. This last one can be used in scripts. I created three pairs, one for the Route Navigator, one for my software and one for later usage supposing that I might want to debug one day while the other apps are running. So my script looks like this:

setupc install 0 - PortName=COM14,EmuBR=yes
setupc change CNCA0 EmuBR=yes
setupc install 1 - PortName=COM15,EmuBR=yes
setupc change CNCA1 EmuBR=yes
setupc install 2 - PortName=COM16,EmuBR=yes
setupc change CNCA2 EmuBR=yes

This will create the following pairs:

CNCA0 <-> COM14
CNCA1 <-> COM15
CNCA2 <-> COM16


Part of the project is hub4com that makes it possible to get the input from one COM port an route it to several others. The first example they give, is exactly that what I need.

You have a GPS device that connected to your computer via a phisical COM1 port and you’d like to handle its data by two GPS applications. You can do it this way:[..]

Following the rest of the example, while using COM6 as GPS COM port, CNCAx as virtual input, COM1x as virtual output, it showed me this on the commandline:

C:\com0com\>hub4com \\.\COM6 \\.\CNCA0 \\.\CNCA1 \\.\CNCA2
Open("\\.\COM6", baud=19200, data=8, parity=no, stop=1, octs=on, odsr=off, ox=off, ix=off, idsr=off, ito=0) - OK
Open("\\.\CNCA0", baud=19200, data=8, parity=no, stop=1, octs=on, odsr=off, ox=off, ix=off, idsr=off, ito=0) - OK
Open("\\.\CNCA1", baud=19200, data=8, parity=no, stop=1, octs=on, odsr=off, ox=off, ix=off, idsr=off, ito=0) - OK
Open("\\.\CNCA2", baud=19200, data=8, parity=no, stop=1, octs=on, odsr=off, ox=off, ix=off, idsr=off, ito=0) - OK
Route data COM6(0) --> CNCA0(1) CNCA1(2) CNCA2(2)
Route data CNCA0(1) --> COM6(0)
Route flow control COM6(0) --> CNCA0(1)
Route flow control CNCA0(1) --> COM6(0)
Started COM7(0)
Started CNCA0(1)
Started CNCA1(2)

When I now connect the GPS logger on COM5, I see a lot of trash appearing. The reason is that the baud rate doesn’t match. It’s very important to read from the COM port at the same rate as the device produces it’s data. The GPS receiver in my case has a speed of 9600 Bd, but as you can see in the console log, hub4com is reading it at 19200 Bd. Too fast, thus the trash.

Of course, hub4com provides a way to set the baud rate, option --baud=9600 is bringing it down and the output is now

C:\com0com>hub4com --baud=9600 \\.\COM6 \\.\CNCA0 \\.\CNCA1 \\.\CNCA2
Open("\\.\COM6", baud=9600, data=8, parity=no, stop=1, octs=on, odsr=off, ox=off, ix=off, idsr=off, ito=0) - OK
Open("\\.\CNCA0", baud=9600, data=8, parity=no, stop=1, octs=on, odsr=off, ox=off, ix=off, idsr=off, ito=0) - OK
Open("\\.\CNCA1", baud=9600, data=8, parity=no, stop=1, octs=on, odsr=off, ox=off, ix=off, idsr=off, ito=0) - OK
Open("\\.\CNCA2", baud=9600, data=8, parity=no, stop=1, octs=on, odsr=off, ox=off, ix=off, idsr=off, ito=0) - OK
Route data COM6(0) --> CNCA0(1) CNCA1(2) CNCA2(3)
Route data CNCA0(1) --> COM6(0)
Route flow control COM6(0) --> CNCA0(1)
Route flow control CNCA0(1) --> COM6(0)
Started COM6(0)
Started CNCA0(1)
Started CNCA1(2)
Started CNCA2(3)

Maybe it’s just me, but it took me a full day to understand what is happening now after reading and re-reading all information I could find. Launching the Route Navigator on COM14 will give you a GPS signal and launching the GPS logger on COM15 or COM16 will give you a signal as well. So far so good. Until you close the application on COM14. It doesn’t matter which one that is, Route Navigator or GPS logger, it all gives the same result. When the application on COM14 is closed, the signal is lost on COM14 and COM15. Although the configuration of all 3 ports are identically, the hub4com ReadMe states (adjusted to fit my example) that

It will send data received from COM6 port to CNCA0, CNCA1 and CNCA2 ports
and it will send data received from CNCA0 port to COM6 port.

As seen on the commandline:

Route data COM6(0) --> CNCA0(1) CNCA1(2) CNCA2(3)
Route data CNCA0(1) --> COM6(0)
Route flow control COM6(0) --> CNCA0(1)
Route flow control CNCA0(1) --> COM6(0)

The data is routed to all three COM ports, the “flow control” is applied from COM6 to CNCA0 and CNCA0 to COM6 (with CNCA0 the input for COM14). No flow control for the others is configured. So my only guess was to create a flow control to all others as well. One of the extended examples (got by issuing hub4com --help) stated this

  hub4com --route=All:All \\.\CNCB0 \\.\CNCB1 \\.\CNCB2
    - receive data from CNCB0 and send it to CNCB1 and CNCB2,
      receive data from CNCB1 and send it to CNCB0 and CNCB2,
      receive data from CNCB2 and send it to CNCB0 and CNCB1.

So that’s almost what I wanted to do. Assuming the syntax is consistent with, say, connect:

      handle data sent to any port listed in <LstR>
      as data received by all ports listed in <LstL>.

(where I would have switched R and L by the way) and where --route=All:All says that "ports can talk to each other", I added the parameter --route=0:All to route all data always from 0 to the others, so from COM6 to COM14, COM15 and COM16:

C:\com0com>hub4com --baud=9600 --route=0:All \\.\COM6 \\.\CNCA0 \\.\CNCA1 \\.\CNCA2
Open("\\.\COM6", baud=9600, data=8, parity=no, stop=1, octs=on, odsr=off, ox=off, ix=off, idsr=off, ito=0) - OK
Open("\\.\CNCA0", baud=9600, data=8, parity=no, stop=1, octs=on, odsr=off, ox=off, ix=off, idsr=off, ito=0) - OK
Open("\\.\CNCA1", baud=9600, data=8, parity=no, stop=1, octs=on, odsr=off, ox=off, ix=off, idsr=off, ito=0) - OK
Open("\\.\CNCA2", baud=9600, data=8, parity=no, stop=1, octs=on, odsr=off, ox=off, ix=off, idsr=off, ito=0) - OK
Route data COM6(0) --> CNCA0(1) CNCA1(2) CNCA2(3)
No route for flow control
Started COM6(0)
Started CNCA0(1)
Started CNCA1(2)
Started CNCA2(3)

With this setup the data always flows from COM6 to the others no matter which port is read or left unread.
It took me about four days to find out how com0com and hub4com work, mainly because there’s not much information about it. There are quite a few examples, but none of them are explained in detail.

I sure hope the developers are still maintaining this application, since it really does what it has to and works like a charm. I hope the lack of updates since December 2009 is just because the application works perfectly 🙂

My final command is this:

   --baud=9600 --route=0:All \\.\COM11
   --baud=9600 \\.\CNCA0
   --baud=9600 \\.\CNCA1
   --baud=9600 \\.\CNCA2

I added the --baud=9600 to all other Null cable entrances, but that’s more a leftover from my tests. I think it’s sufficient to add the parameter before the list of com ports.

Install as Windows Service

Once configured, the Virtual COM ports stay active until you remove them. However, you have to launch hub4com every time you have rebooted the computer. To solve that, I’ve used runassvc, which allows a silent install as well. Without parameters, the application launches a GUI in which you can enter the required values. With parameters, like opened through a bat file, it launches and enters the parameters you have defined. Then, when you use --quiet as parameter, the GUI doesn’t launch, but the service is installed and started. My command looks like this

   --displayname "hub4com"
   --description "Routes the GPS data from COM6 to virtual COM14, COM15 and COM16"
   --exe "C:\com0com\hub4com.exe"
   --params "--baud=9600 --route=0:All \\.\COM6 --baud=9600 \\.\CNCA0 --baud=9600 \\.\CNCA1 --baud=9600 \\.\CNCA2" 
   --workingdir "C:\com0com"

Now, even when the computer is rebooted, as soon as it has started and before any user has logged on, the system is running so every application is able to read one GPS device even if another is already accessing it. It was tested successfully on a Windows XP and even on a Windows 7 machine, although on the last one you have to boot the machine in Test configuration (bcdedit -set TESTSIGNING ON) otherwise the com0com drivers won’t load.

Used applications

The applications I used to set up this environment, are

Further reading

It is also possible to reroute the GPS data to a tcp port. Read Send GPS data over TCP how to do this.

Interne Fotografie Opdracht

Interne Fotografie Opdracht

Toen ze me vorige week vroegen of ik een productieproces wilde fotograferen voor een klant van ons, moest ik uiteraard geen twee keer nadenken… Niet alleen gaf dit mij de kans om ook in een productie-omgeving te fotograferen, ook kon ik meteen het productieproces zien, iets waar ik voorlopig nog niet de kans toe heb gehad.

De foto’s dienen voor publicatie in een bedrijfsmagazine van een Nederlandse klant. Vermoedelijk zal ik het magazine nooit te zien krijgen, maar men heeft ons beloofd het artikel, waarin de foto’s gebruikt zullen worden, op te sturen.

Oracle 10g and W2K8R2

At the office, a lot of people are using MS Excel. And they’re using the ability to fetch external data into Excel. This external data is read from an Oracle 10g database. Now, given the fact that we recently changed to a new Citrix environment, using Windows 2008 R2 (thus x64) servers, you can already guess: Reloading the data in Excel just won’t work.

After a little search on the Internet, I found a question about the exact same problem I have: the question for a “Solution for ORA-6413 error showing connection not open

There’s just one answer.

Are you running a 32 bit Oracle client software on a 64 bit OS ?

It seems that this error is caused by a bug. The networking layer is unable to parse program locations that contain parenthesis in the path to the executable which is attempting to connect to Oracle, and 32 bit applications are installed in locations similar to “C:\Program Files (x86)\…” on 64 bit versions of Windows.

If that is the case, there are two solutions for this:

1) Use a version of the Oracle software that contains the fix for the bug (i.e. apply the latest available patch for the Oracle software)
2) Find the location of the application that is generating the error and relocate it to a directory without any parenthesis in the path.

Since it is a bug in the Oracle client, relocating the application to a folder without parenthesis is just a work-around. I’d go for solution 1: use a new version of the software. Luckily I still have that download from my previous Oracle troubles, on my x64 Windows 7 machine, and remembering the download took more than 30 minutes, I’m glad I can start installing immediately… Just to find out that the installer crashes as soon as it get launched.

Then I remembered.

Only a couple of days after finding a solution for my Oracle 10g troubles on Windows 7, a colleague of mine couldn’t start the installer either. What I couldn’t remember, is what the solution was. Luckily, there’s Google to show me that there’s a simple solution. Just moving the installer files to C:\ solves it and the installer works fine.

I said it before and I’ll repeat it. It IS still Windows after all…
Edit: As mentioned in the comments, it’s indeed not fair to blame the guys from Redmond. Totally agree.
And I forgot to mention that not only the installer just works after copying it to the root, the solution mentioned above did indeed work on the servers so Excel is now able to connect to the Oracle database.


Just for my own reference.
java.lang.ClassNotFoundException is a build error, saying that you’re using a class that doesn’t exist, so the build fails.

java.lang.NoClassDefFoundError is a link error at runtime, saying that you’re using a class that was available at build time, but isn’t available at runtime anymore.

I know. Thanks. Now continue your work.

The world is not quite ready for 64bit

64bitAs I told in the last few lines of my previous post, I had some issues installing the Oracle 10g client on my Windows 7 installation. After installing the 10g client, I immediately noticed it wouldn’t work: When opening the Microsoft ODBC Administrator, the Oracle datasource just wasn’t there. So I started to Google and the first hits I got were not very promising: 10g isn’t supported on Windows 7. It’s all over the place. Not supported. Won’t work. Why bother. One of the Oracle forum threads however shows that I had to use the 11g client. This isn’t supported either, but works at least. Better this than nothing, so I started to download the Oracle 11g 64bit client. Sure, my OS is 64 bit. 500MB. Damn.

When the download was finally finished, I installed this 11g client and noticed that indeed, the Oracle ODBC driver appeared in the ODBC manager. Hooray! So I set up the ODBC data source for the application that I tried to set up and indeed, I could choose the datasource, I selected it and … the application just crashed. Gone. Damn. As expected actually, since the software doesn’t support the 11g client. So I started to search further, noticed there was an update of the 10g client (with Vista support) so I started to download that one (another 500MB download) but I continued my search. I noticed a strange thing about another application, Powerbuilder 11, that has 11g support, but which refused to connect to the oracle database, although the 11g client was installed. It was a difficult search, but all of a sudden, I came across Google Groups where a few words were blinking.

PB is 32 bit and requires 32 bit client libraries.

How embarrassing. Of course! Powerbuilder didn’t say it couldn’t find the Oracle installation, it said it couldn’t load a specific DLL (a specific 64bit DLL). And that’s the reason why my 32bit installations of Oracle doesn’t appear in the ODBC manager: it only shows 64 bit ODBC drivers! So, I didn’t cancel my 64bit download of Oracle 10g, but I added two other downloads: 32bit version of the latest 10g and the 32bit version of 11g. (you can guess the filesize).

At the installation (I speak 2 hours later and a little modification later), I ran into this other problem. The installer didn’t continue since the OS version isn’t supported. It requires at most Windows 6.0 and I have Windows 6.1 (yes, Windows 7 is version 6.1). But there’s a quick and simple work-around by faking that the OS is supported. The installation worked. Powerbuilder could now connect to the Oracle database (using these 32bit data sources) but my problem on Heat was still standing: no 32bit ODBC drivers in my ODBC manager. There had to be a way to set them up. And there is. It’s called the “32bit version of the ODBC manager” which is the second hit when you enter “ODBC” in the start menu search field.

And now everything falls into place. The fact that Powerbuilder couldn’t see any of the System DSN’s, is part of the same problem: it can’t see any of the 64bit System DSN’s, but it CAN see all the 32bit System DSN’s.

So my problem is just that I installed the 64 bit version of Windows 7. If I would have installed the 32 bit version, I wouldn’t have had any problems I guess…

Running 64 bit Windows 7, my Oracle 10g problems are thus solved by

  • Installing the 32 bit versions of the Oracle clients (both 10g and 11g work without a problem – so far)
  • Setting up the ODBC data bases using the 32bit version of the ODBC manager (which is included by default)

It took me only three days to figure that out.

Windows 7

Windows 7

I just finished a two hour telephone call with Microsoft support. I just wanted to quickly install Windows 7 on my computer.

Problem is this “upgrade” version. You are licensed to install an upgrade version of Windows 7 when you have Windows XP installed on your computer. You find everywhere on the Internet (third party and Microsoft) that you CAN NOT upgrade your Windows XP, but you have the ability to perform a “clean install”.

So, since I knew that and since I had the option to “upgrade” my installation, I chose that option. The installer immediately warned me that this wouldn’t work, since I had a Windows XP installed, so I had to return and choose for the “clean installation”. As expected.

Installation went smoothly. There where all other Windows installations bugged you asking for advanced network options, usernames, keyboard layouts, … this Windows installation just installs. And so we come to the point where the product license had to be entered. The product license is invalid.

I retried, I entered the – signs manually (the installer inserts them automatically), I tried with capslock, without capslock… nothing helped. So I searched for the Microsoft Support number. Online and with another computer of course. The first thing I thought when I was connected with Microsoft was “OMG”. The computer voice was so low, I could hardly understand what they were saying. But, luckily for me, the support guy was understandable and in contrary to all other helpdesks, I could speak to someone almost immediately and thus without listening to some crappy music for several minutes. Microsoft support seems to know what they’re doing. They’re not suggesting “reboot your computer” and don’t answer any other run-over-a-pre-defined-list questions. Straight to the point. And while they’re waiting for their computers to search for information, they note my information so they don’t loose any time.

I had to give them my product key and this was the hardest thing to do of the entire phone call. When you spell some letters, they resemble another one, so he noted the key wrongly for three times. When he finally got it right, he could see nothing was wrong with the number, so he would redirect me to someone of technical service.

This second guy immediately knew who I was, so I didn’t have to explain everything overnew. He suggested to continue without Product Key and reinstall from the same dvd. This would be seen as an “upgrade” of a newer version and thus the key would work. I tried and indeed, that was the solution.


So it takes twice as long to install Windows 7. So far the “fast installation”.

However, after that, Windows 7 works like a charm. So much faster than Windows XP, so much more userfriendly, faster, not only in response time but also as in “userexperience”… Overall VERY happy with the result.

And what you immediately see is that they have learned a lot from Mac OS X. A lot.
Now I only have to try to install some (old) applications. So far, everything looks good, except for the Oracle 10g client. It isn’t supported nor working on Windows 7. It seems that the v11 client isn’t supported either, but it should work. So I’m now downloading the 500MB package and will see what that’ll do…

Einde van een tijdperk

Einde van een tijdperk

… het begin van iets nieuws.
Vorig jaar maakte ik me klaar om naar Texas te vertrekken.
Vandaag maak ik me klaar om voor de eerste keer in vier jaar ergens anders te gaan werken. Dit voelt vreemd. Alle kennis die je hebt opgebouwd, de expertise, de collega’s… In één klap weggeveegd.

Ander en beter. Waarschijnlijk was dit net de motivatie die ik nodig had om te veranderen, zeker wanneer ik vergelijk met de hints die zo her en der verschenen… De collega’s. Ik zal ze missen. Ik heb er altijd graag gewerkt.

De tijd is rijp om naar de toekomst te kijken. De toekomst zegt dat ik het beu was om elke dag in de file te gaan staan. De toekomst zegt dat ik nood had aan een andere uitdaging. De toekomst zegt dat ik nood had aan afwisseling. Niet moeilijk dat ik zo enthousiast was toen ik gecontacteerd werd voor mijn huidige job. Ik kijk er wel naar uit. Dit is spannend en vooral, de uitdaging is hetgeen mij zo aanspreekt in deze job.

Hoe voel ik me? Een beetje triest misschien, maar veel plezier aan mijn job heb ik de laatste tijd ook niet meer beleefd.
Ander en beter.
Ik ben benieuwd…

Amerikaanse Etenswaardigheden

Na zo’n paar weken Amerika, zijn er toch wel een aantal zaken die je beginnen opvallen, wanneer je met Amerikanen aan tafel zit, of zelfs naast de-ene-al-wat-knapper-dan-de-andere Amerikaanse.

Het begint al van voor je binnenkomt. In elk restaurant staat er de ene of de andere zeer vriendelijke (en indien vrouwelijk hoort daar ook nog “bijzonder knappe” bij) pipo waar je best tegen zegt "A table for one please" en niet "Can I have something to eat" want in dat laatste geval kijken ze nogal heel vreemd.

Dan nemen ze je mee naar een tafel, soms in een uithoekje, soms naast een of andere vreemde Amerikaan(se) en vragen dan wat je wil drinken. Ze stellen uiteraard altijd martini ofzo voor, maar wanneer je zegt dat je gewoon water wil, is dat ook prima. Of Ice Tea, want da’s duidelijk ook heel erg populair. En dat is gewone koude thee. Geen Lipton Ice Tea zijnde de frisdrank, neen, dit is echte thee alsof je die met theezakjes hebt klaargemaakt. Ongezoet. Je krijgt er wel zelf suiker of pseudo-suiker bij. Je kunt ook gewoon frisdrank nemen, cola of zo. Wat ook opvalt, is dat die laatste drankjes gewoon worden aangevuld. De eerste keer was dat wel wat schrikken. Je krijgt dan zo’n enorme cola (alles in Amerika is iets groter) en wanneer die bijna op is, nemen ze die gewoon mee (waarvan je denkt, gast, die was nog niet leeg) en vervolgens krijg je nog zo’n vol glas (waarvan je denkt, gast, die heb ik niet besteld) en blijkt dat ze dan vergeten die cola’s op de rekening te zetten (waarvan je denkt, gast, eigen schuld, gauw betalen en wegwezen) en waarvan je dan uiteindelijk door begint te krijgen dat die drankjes gewoon inbegrepen zijn. Alles is inbegrepen, behalve de alcohol. En de drankjes errond zijn ook niet gratis (waardoor ze je een of andere martini ofzo proberen aan te smeren).

De kaart heb je gekregen op het moment dat je gaat zitten, dus daar kun je in kijken om iets te bestellen. Je kunt ook proberen te verstaan wat ze aanraden als "Special of the day". Maar daar slaagde ik over het algemeen niet in. En wanneer ze je drinken brengen, vragen ze of je nog wat tijd nodig hebt of dat je al wil bestellen. Je kunt dan bestellen en blijkbaar heb ik een zeer goede keuze, want ik nam altijd heel toevallig het favoriete gerecht van de garçon of van de dienster "Excellent choice, that’s my favorite". Blijkbaar heb ik goede smaak. En dan stellen ze zich ook voor "My name is John, if you need anything, just ask me!"

Wanneer je dan rondkijkt en je mede-restaurantgasten observeert – en niet te lang naar links blijft kijken – dan kun je zien dat de mensen allemaal met hun rechterhand aan het eten zijn. Ze hebben enkel een vork vast. En wanneer je goed kijkt, dan zie je dat ze het vork terug in hun linkerhand nemen, in hun rechterhand nemen ze hun mes, ze snijden een stukje vlees af, leggen het mes neer, nemen het vork weer in de rechterhand en prikken het stukje vlees daarmee terwijl hun linkerhand tussen hun benen zit. Nadat het stukje vlees in hun mond terecht gekomen is, nemen ze het vork weer in de linkerhand, het mes in de rechter… Niemand blijkt door te hebben dat het gewoon veel gemakkelijker is om die twee dingen vast te houden. Moet je veel minder handelingen doen. Maar ja, extra lichaamsbeweging kan voor de meesten ook geen kwaad.

Wanneer je een steak eet, of iets anders van vlees, krijg je trouwens zo’n enorm steak mes. Maar echt enorm. Ik kon mijn hand er bijna niet rondklemmen, zo breed was het. Is ook wel nodig om door zulke stukken vlees te geraken. En je krijgt twee vorken. Waarvoor het er twee zijn, is me nog niet duidelijk. En zelfs de Amerikanen zelf weten het eigenlijk niet goed. Vermoedelijk 1 voor het vlees en 1 voor de sla. Want ja, sla in overvloed, maar groenten zijn er schaars. Blijkbaar moet je die ook apart bestellen, maar ook dat heb ik niet doorgehad. Maar waar dat tweede vork voor dient, dat weten ze dus niet met zekerheid te vertellen.

Tijdens het eten komen ze vragen of alles naar wens is. Dan zeg je dat alles inderdaad goed is, en dan zijn die mensen toch zo overgelukkig! En soms komt er zelfs een mijnheer met plastron af. En die vraagt dat ook. Of die vraagt of ik niks tekort kom, of ze me goed soigneren. En ook die mens wordt gelukkig wanneer je zegt dat het ook inderdaad zo is. Die meneer in de plastron is vermoedelijk de grote baas.

Maar dan, wanneer je nog niet helemaal klaar bent met eten, komen ze al af met een schotel voorbeeld-dessertjes of de dessertkaart. En wanneer je dessert neemt, dan gooien ze de rekening al op tafel nog voor je je dessert half op hebt "Whenever you’re ready, sir". Wat ik ook een keer heb meegemaakt, is dat de rekening op tafel gezet werd en dat hij dan pas vroeg "Of wil je nog iets hebben?". Jah, echt uitnodigend is dat niet natuurlijk. Alles is duidelijk fast food. Snel alles binnenwerken en maken dat je weg bent. Geen wonder waarom McDonalds in Amerika is gestart. Maar tegelijk vraag ik me ook af of een "fast-food restaurant" eigenlijk nodig is. Uit een gewoon restaurant ben je even snel weg.

En wanneer je niet alles opkunt, dan krijg je zonder enig probleem je eten mee naar huis. Da’s daar heel normaal. Elke dag zag ik daar mensen met een doggy bag naar huis gaan – en zelfs ik heb mijn dessert ooit meegekregen. Alle restaurants hebben hun voorraad bakjes klaarstaan – hetgeen natuurlijk logisch is. Je hebt ervoor betaald en anders belandt het toch maar in de vuilbak.

Voldaan wandel je terug langs de pipo’s die je hebben binnengelaten en meestal zeggen ze nog iets van een "have a nice evening" en dan kun je rustig terug naar je hotel gaan en nagenieten van wat je die dag beleefd hebt…