Windows 10

While several people already have Windows 10 installed, my computer didn’t offer me that possibility yet. Searching on the Internet, I found several sites explaining how to force Windows update to download and install Windows 10 but none of these descriptions worked for me. I found out that one step was missing in my case: automatic installation of updates. My Windows Update was set up to automatically download updates but I chose the time of installation.

So in my case, the steps to perform were:

  1. Open Windows Update
  2. At the left, click “Change Settings”
  3. Make sure the selection menu under “Important Updates” says “Install updates automatically”, and make sure that under Recommended updates, the “Give me recommended updates the same way I receive important updates” option is checked.
  4. Remove all files in C:\Windows\SoftwareDistribution\Download
  5. Then, hit the windows key and type “cmd”. Right click the command prompt and choos for “Run as administrator”
  6. enter the command wuauclt.exe/updatenow. Don’t hit enter yet
  7. In the Windows Update window, click “Check for updates” on the left hand side.
  8. Immediately after that, hit enter in the command prompt, executing the command you previously entered

At this point, Windows Update started to download Windows 10.

However, after installation and preparing setup, the update failed and I ran into error 80240020 – which is quite known, so it seems. So I followed these steps to remove all downloaded files and re-downloaded everything.

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 codehouse.org. 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 project.build.sourceEncoding, 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="...">
... 
<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <project.resources.sourceEncoding>UTF-8</project.resources.sourceEncoding>
</properties>
... 
<build>
<plugins>
<plugin>
  <artifactId>maven-compiler-plugin</artifactId>
  ...
  <configuration>
    ...
    <encoding>${project.build.sourceEncoding}</encoding>
    <sourceEncoding>${project.build.sourceEncoding}</sourceEncoding>
  </configuration>
</plugin>
...
</plugins>
...
</build>
</project>

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.

Ubuntu 10.04 networking

I had a hard time getting the Intel Wifi 5100 AGN, which is displayed using lspci as “Intel Corporation PRO/Wireless 5300 AGN [Shiloh] Network Connection“. A lot of people are complaining about it. It would be a bug in the kernel, in Ubuntu 10.04, whatever. Nobody seems to get a clear view why it isn’t working. And more, some people state that it “suddenly just works” after reboot. Well, it doesn’t. It’s just because of the modifications that they tried.

I myself tried a lot of those things – first the ones that didn’t require hacking some configuration files that weren’t supposed to be modified. When they didn’t work, I reverted them.
I tried several things, even reconfiguring the wireless router. I tried an open and even a WEP secured network, and it was stunning that those networks didn’t give any problem. Then, I switched back to WPA2 and the connection was lost again after a few seconds.

Accidentally came across this forum post which said to use ndiswrapper (which wasn’t installed so I had to apt-get install ndiswrapper-common).
Of course, I’m not entirely sure this was the fix, but it is stunning that after installing ndiswrapper, the wireless connection works. Even after reboot.

Besides, FYI, during my trials, I connected an old USB wireless adapter. A DLink DWL-122, rev A1. It is an obsolete piece of hardware. DLink doesn’t create drivers for Windows 7 or vista, so it only works in XP. They’re not even mentioning drivers for Linux. They state it is plug and play in Windows 7, but that is only for revision B and C, not the A I have. Besides, it only works with WEP protection, the hardware doesn’t support WPA.
Anyway, when I connected the USB adapter to the ubuntu installation, it was picked up and ready to use instantly. Another plus for Ubuntu and obsolete hardware.

Ubuntu @ Work

Sometimes I take some serious risks. Like, suddenly, I get the urge to install Ubuntu on my office’s laptop. A Dell Latitude E6500. But, there’s a Windows 7 installed, consuming the entire disk.
So, what I have to use, is the gparted disk resize functionality – something I never trust. But hey, who cares 🙂 So I downloaded the live CD of Ubuntu 10.04 netbook edition (two days before Ubuntu 10.10 should be released – I tend to download ubuntu releases a couple of days before a new version is released), I put in on a USB Flash drive (so that I don’t have to install it on the harddisk) but not much success. The first time it boots great, but then I want to configure some things, install other software (not to do on a live distribution) the OS starts complaining about not enough diskspace, wireless problems and on reboot, no live os was found.

So I took the chance and installed it on the hard drive – resizing the existing NTFS partition. Installation of Ubuntu is painless – as always – and on reboot, except for the check disk that was triggered when booting back into Windows, everything went smooth and Windows 7 just kept working fine. Only with 4GB less hard drive.

In Ubuntu, I installed the NVidia drivers for the screen and after that, the boot screen (ubuntu logo) and the terminal (you know, tty1 to 6, ctrl+alt+f1) didn’t have the 1920×1200 resolution anymore, just a 640×480.
Me not want.
So I kept searching and trying, even adjusting some grub scripts (one hint said to change the “linux” and “initrd” in /etc/grub.d/10_linux to “linux16” and “initrd16” but that didn’t work out and besides, it’s a dirty hack.
You can configure it nicely the way it should be: adjusting /etc/default/grub. Add the lines

GRUB_GFXMODE=1920x1200x32
GRUB_GFXPAYLOAD_LINUX=keep

and you’re all done. Not using the (deprecated) vga= method, just that. And run update-grub2 afterwards.
This is my working grub.cfg:

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.

GRUB_DEFAULT=4
#GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX="quiet splash"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480
GRUB_GFXMODE=1920x1200x32
GRUB_GFXPAYLOAD_LINUX=keep

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_LINUX_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"

Almost perfect. However, the splash screen is there for just a short amount of time. The console’s are at full resolution, so that’s ok with me, but it would of course be nice that the splash screen and moving dot’s are viewable. I stumbled on on another solution/work-around in which the author states he hates the set gfxpayload=keep solution and gives a better solution… In short, execute these commands

sudo apt-get install v86d hwinfo
sudo hwinfo --framebuffer

Then, edit /etc/default/grub

...
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset video=uvesafb:mode_option=1920x1200-24,mtrr=3,scroll=ywrap"
...
GRUB_GFXMODE=1920x1200

and additionally, thanks to a comment in the article, I added

GRUB_GFXPAYLOAD_LINUX=1920x1200

Edit /etc/initramfs-tools/modules to include uvesafb by adding uvesafb mode_option=1366x768-24 mtrr=3 scroll=ywrap, then execute commands

echo FRAMEBUFFER=y | sudo tee /etc/initramfs-tools/conf.d/splash
sudo update-grub2
sudo update-initramfs -u

Then reboot.

Ok, almost perfect. Only, this textual Grub menu… Ok, boring and not anno 2010. So, After a little search, I stumbled upon Burg.
In short

sudo add-apt-repository ppa:bean123ch/burg
sudo apt-get update
sudo apt-get install burg burg-themes

During installation, it’s installed in the MBR automatically, only, on reboot, my high-res grub menu and tty’s is gone again. Luckily, while the boot screen is displaying, you can hit ‘r’ and choose the wanted resolution (1920×1200 in my case). The tty’s are – sadly, 640 all over again, so I opened /etc/default/burg and noticed the GRUB_GFXMODE is set to “saved” (= the last chosen one in the boot screen) and GRUB_GFXPAYLOAD_LINUX is gone. Now, suppose for one reason or the other I choose another resolution in the boot screen, I want the same resolution in the tty’s, so I added the option GRUB_GFXPAYLOAD_LINUX=keep again. Sorry 🙂

And, since it is nice if, on reboot, the last selected OS is selected by default, I changed GRUB_DEFAULT=0 to GRUB_DEFAULT=saved so that when I have to reboot my Windows installation during the day, I can just reboot the pc, take a break and see that Windows is fully started when I return.

So, my final result is

# If you change this file, run 'update-burg' afterwards to update
# /boot/burg/burg.cfg.

GRUB_DEFAULT=saved
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodesetvideo=uvesafb:mode_option=1920x1200-24,mtrr=3,scroll=ywrap"
GRUB_CMDLINE_LINUX=""

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# If you want to enable the save default function, uncomment the following
# line, and set GRUB_DEFAULT to saved.
GRUB_SAVEDEFAULT=true

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
# In the boot menu, use hotkey 'r' to popup a resolution selection menu.
GRUB_GFXMODE=saved
GRUB_GFXPAYLOAD_LINUX=keep

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_LINUX_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"

# GRUB_THEME's value can be 'saved' or a specific BURG theme name, you can also
# set it to the pathname of a GRUB2 theme file.
# In the boot menu, use hotkey 't' to popup a theme selection menu
GRUB_THEME=saved

# GRUB_FOLD's value can be 'saved', 'true' or 'false'.
# In the boot menu, use hotkey 'F7' to show the full list, 'f' to toggle
# between folding modes.
GRUB_FOLD=true

# Add user with burg-adduser, then use GRUB_USERS to config authentication.
# The following example means user1 can boot Ubuntu, no password is needed to
# boot Windows, user1 amd user2 can boot other OS. Superusers can boot any OS
# and use hotkeys like `c' to enter console mode.
#GRUB_USERS="*=user1,user2:ubuntu=user1:windows="

# For a complete list of supported variables, refer to this wiki page:
# http://code.google.com/p/burg/wiki/ConfigurationVariables

GRUB_FOLD=true will make the “recovery” mode being folded into the menu option to boot normal ubuntu. So it’s available if you need it, but it’s hidden by default.

update-burg and you’re done.
Reboot and choose your theme by pressing ‘t’

And I’m done.

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

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.

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.

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.

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…

Open brief aan Wann.es

Lieve Wann.es,

Uiteraard begrijp ik je wantrouwen ten opzichte van het nieuwe systeem, beter bekend onder de naam Mac OS X. Veranderen, zeker naar iets dat zoveel vernieuwender en zoveel meer vooruitstrevend is dan het oude vertrouwde systeem dat we al die jaren gewoon zijn, is niet altijd even gemakkelijk.

Sta me toe om je een hand te reiken en je een beetje wegwijs te maken in de onbekende wereld van de Mac. Ik ga je voorbeelden beantwoorden en je zal zien, het grootste deel van je frustratie ligt in “gewoonte” en “kennis”.

  1. Een bepaalde extensie toewijzen aan een applicatie. Rechterklik (of ctrl-klik wanneer je nog een 1-knopsmuis hebt) op een bestand en kies voor “Get Info”. Ik heb mijn Mac ingesteld in het Engels, maar dat kon even goed het Nederlands zijn of het Katalaans, want zoals je weet, Mac OS X is out-of-the-box multilingual. Je krijgt het onderstaande scherm (die ik trouwens ook heb genomen met de out-of-the-box screenshot functionaliteit). Ik heb de verschillende opties dichtgeklapt om enkel de informatie over te houden die hier van belang is.
    Selecteer een andere applicatie onder “Open with:” en klik vervolgens op de knop “Change all…” die eronder staat. Je zal zien dat vanaf dan alle bestanden van dat type (niet van die extensie want Mac OS X herkent de feitelijke bestandstypes, ongeacht welke extensie ze hebben) zullen openen met het gekozen programma.
    Assign other application to a file type
  2. Numeriek toetsenbord heeft een komma ipv een punt. Helaas zal ik hier ook op moeten antwoorden “ja dat gebruik ik niet”. Ik werk op een laptop die bovendien een querty klavier heeft. Brengt me meteen bij een tegenargument: Bij Windows heb je de keuze tussen de layouts “US” en “US International”. Bij de eerste layout kun je geen deeltekens’s, tildes, hoedjes, accentjes… leggen op de gewenste letters, dus moet je de tweede nemen. Alleen is dit zeer frustrerend bij het programmeren omdat de " pas verschijnt na tweemaal duwen. (De eerste keer is om het deelteken in ë te kunnen maken). Bij dit probleem kan ik je niet out of the box verder helpen, want ik heb geen ervaring met wat “Belgisch” layout doet bij een klavier met nummeriek toetsenbord. Ukelele (mij ook onbekend) kan je inderdaad mogelijk verder helpen.
  3. iCal doet inderdaad niet mee aan het schrijven via andere applicaties naar Google Calendar. iCal heeft daar geen andere applicaties voor nodig: die kan dat zelf. iSync kun je gebruiken om je adresboek te synchroniseren met die van GMail.
  4. Sneltoetsen door vensters bladeren, dat kan op vele verschillende manieren. In de eerste plaats is er Exposé. De defaults zijn in de loop van de tijd veranderd, dus je moet even kijken hoe de instelling op jouw systeem zijn. Hiermee kun je een overzicht van alle vensters (alle openstaande of enkel die van een bepaalde applicatie) bekijken.
    Als ik me niet vergis ben je echter op zoek naar de shortcut voor windows-tab. Wel, probeer cmd-tab eens? Er bestaat een overzicht van alle default keyboard shortcuts (waaronder enkele waarbij je inderdaad minstens 2 personen nodig hebt om ze in te duwen) maar ook hier geldt: pas ze aan hoe je zelf wil!
  5. Home en End bestaan inderdaad niet. Cmd+pijltje is the way to do it. Ze staan 10cm uit elkaar, akkoord, maar is het zo’n grote moeite om met je linkerduim (!) de cmd-toets in te duwen en de rechterwijsvinger op een pijltje te duwen? Akkoord, in sommige programma’s (ik denk aan Dreamweaver, ik denk aan applicaties die ports uit een windows omgeving zijn) moet je eerder Fn+pijltje duwen. Hier bestaat hier en daar inconsistentie maar dan is nog maar de vraag: ligt dat aan het OS of ligt het aan de applicatie. Op het werk gebruiken we FirstClass als e-mail client en de normale toetsencombinaties (tot zelfs ctrl+backspace of ctrl+b) werken niet zoals je zou verwachten.

Het is een feit dat je moet wennen. Het is een feit dat je je te complex denkpatroon moet laten varen en terug logisch intuïtief moet leren nadenken. Toegegeven, het is vooral wennen maar na een tijdje zul je merken dat je met een Mac (met keyboard shortcuts!) veel sneller kunt werken dan met het Windows systeem. Akkoord, ik voel me bijna even goed onder een Ubuntu systeem op een PC als op mijn Mac. Op een Mac kan ik echter alles doen wat ik ook op mijn Ubuntu systeem kan (met uitzondering dan van het hercompileren van de kernel) maar met mijn Ubuntu systeem kan ik niet meteen alles wat ik met mijn Mac kan realiseren.

Het is een kwestie van gewoonte. En van kennis. En openstaan voor. Maar dat geldt voor alles. Je moet niet aan iets nieuw beginnen wanneer je per definitie tegen bent. Hoe goed die nieuwigheid ook mag zijn, je zal altijd het negatieve blijven zien. Want oh ja, er zijn ook negatieve punten aan een Mac. Ik denk bijvoorbeeld aan het verplaatsen van een folder of een bestand. Kopieren kun je. Drag en Drop kun je. Maar knippen-en-plakken mag je vergeten.

Hopelijk ben ik je van dienst kunnen zijn.
Met vriendelijke groeten…