Posts Tagged ‘english’

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?

XPort

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.

com0com

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

hub4com

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:

  --connect=<lstr>:<lstl>
      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:

hub4com
   --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

RunAsSvc.exe
   --install
   --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"
   --quiet

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

Infected

Oh no! My computer is infected by a massive amount of trojans! O-M-G!
Panic panic

I’ve seen it: they’ve been scanning my hard drive, scanned some exe’s and dll’s and here’s the proof!
It never happened in my entire life and now…

Wait. Is that Safari? Ohhh.. Right…
I’m on a Mac.

Losers.

Unbelievable

Unbelievable

I’m shocked.

Lately, I receive a lot of spam on my blog. Not automated, but just some under-payed drug addicts from Poland and the Ukraine who desperately need some cash and thus manually spam around. As I found in my analytics, the search term “BL00DY TEETH” is one of the ways they arrive here. Indeed, I did some pretty gross posts a couple of years ago when my wisdom teeth had to be removed.

One of the images I posted together with the story, was a very bloody one (which I wanted to post as top image for this post, but I changed my mind since I want to keep this blog safe for all ages.)

I removed the category on which they land when using that as a keyword, then I did a search on the keyword myself (warning: save search is off!).

And that is the point in time I startled.

I realised I didn’t just shock the world around me at that time by posting an image like that, I also started to attract dirty minds and fetishists to this website. And three other weblogs (the kinds you really don’t want to land upon, trust me) just copied the image, didn’t even take the time to rename it, and posted it without credits on their blogs.

Oh well.
At least the originals are still around here. Somewhere.

It’s just another poof. Whatever you post online, will stay online forever. And ever.

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.

Canon 50mm f/1.4 USM

Canon 50mm f/1.4 USM

This week I’ve borrowed a Canon 50mm f/1.4 USM lens from a colleague and I have to say that I like the possibilities of it. Sure, it’s a fixed one, but given the aperture value, it allows a shallow DOF, the kind I like so much, or shooting in low light environments without the need of a flash and still produce a nice crisp result.

Above image is one without any post-processing, taken with that lens.

I had the impression however that it takes some more time to autofocus than what I used to with my Sigma but I have to admit it was rather dark at that point of shooting. In normal (artificial) light conditions, it does focus quite well.

Over the weekend, I did a pregnancy/belly shoot entirely with that lens and I’m happy with the result.

Classes

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.

Macaroni covered in honey

Macaroni covered in honey

When I have pasta for lunch – spaghetti, macaroni, … – I always finish with some dry pasta and put a little sugar on it. Some people like it, some will throw me a disgusting look. I’m with the first group.

For some time now, I replace sugar with honey in my morning tea. So guess what wonderful idea I got this weekend: pasta covered in honey.

Ok. That didn’t work out as expected since the taste of honey dominates, so I’ll stick with sugar.
It was worth to give it a try.

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.

WTF??

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…

Happy Holidays!

Happy Holidays!

Flakes are fluttering down softly
Illuminated by a moonbeam so bright
Just maybe they’ll form all together
A beautiful white blanket overnight

If so or even if not
From us you will receive, rimmed in red and white
The wish for a blissful Christmas and
A great sparkling new year full of delight!

Return top