2010
08.11

This note relates to Eclipse 3.6.0

Eclipse saves a user’s preferences in a special area of the workspace directory. In fact, it saves all the information in the sub-directory called “.metadata”. If you use multiple workspaces or need to create a fresh new workspace, when you first start the workspace, you will find out that all the key bindings and other preferences are lost. Copying the “.metadata” directory between two workspaces is not an option since it also contains the information about the projects.

The process needed to copy the user’s preferences between two workspaces is to export them from the workspace containing the favoured ones, and importing them in the desired workspace. In the process, Eclipse produces a text file with an “.epf” extension which can be used to port the preferences between workspaces.

To produce the exported preferences file, use the Eclipse menu:

  • File > Export… > General > Preferences > Next
  • At this page, select what should be exported. For exporting only key bindings, unselect “Export All” and check “Keys Preferences”
  • Specify a file to save the preferences to
  • Press “Finish”

To import the preferences file, using the Eclipse menu:

  • File > Import… > General > Preferences > Next
  • Browse for the desired preferences file
  • Click “Finish”

Although there exists, in the preferences page where key bindings are assigned, a button offering to export key bindings in a CSV file, I do not know how to use the produced CSV file restore key bindings in the different workspace. The .epf method, described above, is the only one I know, so far.

2010
08.11

This note relates to Eclipse SDK 3.6.0

Many development platforms and editors use the key combination CTL+Tab to switch between edited windows. In Eclipse, the default key combination is CTL+F6. However, the Eclipse platform is customisable and the key combination can easily be changed.

In using the Eclipse menu:

  • Window > Preferences > General > Keys
  • Select the command titled “Next Editor”
  • Click mouse in text box titled “Binding” and select all text
  • Press the key combination CTL+Tab. The text in the box should reflect the action
  • Press the button “Apply”

While you are at it, you should assign the binding “Shift+CTL+Tab” to the command titled “Previous Editor”

To back up your key bindings or port them into a different workspace, use the note in exporting and importing key bindings.

2010
08.05

This note relates to:

  • virtualbox-3.2
  • Ubuntu 10.04
  • linux-2.6.32-24-generic

After upgrading the latest kernel, VirtualBox stopped working. More specifically, VirtualBox complained that a host-only adapter, previously available, had disappeared and, consequently, could not start the intended virtual machine that was dependent on it.

The root cause appears to be that the VirtualBox kernel modules needed to be re-generated. Nevertheless, here is the process to fix it:

  1. Reconfigure VirtualBox
  2. Reboot Ubuntu

In details:

sudo dpkg-reconfigure virtualbox-3.2
sudo reboot

After this, VirtualBox performs as expected.

2010
08.04

This note relates to:

  • grub2 version 1.98
  • Ubuntu 10.04
  • Windows 7

Reference: Ubuntu Guide

If you install (or re-install) Windows after you have been using Linux for a while, you might find out that the disk’s MBR (Master Boot Record) has been overwritten to point directly to Windows. This notes explains how to set up the MBR to point to the original grub.

Here are the general steps:

  1. Boot from Ubuntu Live CD
  2. Figure out which partition holds your GRUB boot
  3. Recover MBR
  4. Add new version of Windows to GRUB

Following are the steps in details.

Find your Ubuntu 10.04 Live CD and Boot from it

Self-explanatory. In theory, any live CD that uses Grub 2 should work.

Figure out boot partition

Using a partition editor, you can review the available partitions and remind yourself the name of the partition where the boot is located. On the Ubuntu Live CD, “gparted” is the command. It is available under the System > Administration menu.

You can add “gparted” in a Debian-based system with the following command:

sudo apt-get install gparted

Restore Master Boot Record (MBR)

Run the following commands, substituting with the correct partition names:

sudo -i
mount /dev/sda3 /mnt
mount /dev/sda2 /mnt/boot  #skip this one if not have a separate /boot partition
grub-install --root-directory=/mnt/ /dev/sda

After this, remove Live CD, close tray and reboot. The original grub2 should load.

Add Windows to Grub2

Re-running the “update grub” should allow grub2 to discover Windows:

sudo update-grub

That should do it. Good luck.

2010
06.17

How to force 32-bit installation via WUBI

This note relates to WUBI for Ubuntu 10.04.

Reference: Can I force Wubi to download and install a 32 bit version of Ubuntu?

On machines that feature a 64-bit processor and not much memory (less than 1GB), it might be beneficial to install a 32-bit version of Ubuntu as opposed to a 64-bit version. This reason is that the performance price in processing is probably less than the performance price in swapping due to restricted memory. 64-bit versions of kernels and applications tend to use more memory than their 32-bit counterparts.

WUBI detects the computer configuration and selects the most appropriate version of Ubuntu. On a machine equipped with a 64-bit processor, it generally elects to use a 64-bit version of Ubuntu.

To force WUBI to use a 32-bit version of Ubuntu, use the “–32bit” command line option. Instead of starting WUBI via its icon, open a command-line prompt and run:

wubi --32bit

Continue the remainder of the installation as usual.

2010
06.17

Ubuntu inside Windows using WUBI

WUBI is an Ubuntu installer that enables a user to run Ubuntu without having to repartition a Windows disk. In my opinion, this is by far the best approach to allow users stuck in Windows land to try Ubuntu.

Get it here: http://www.ubuntu.com/desktop/get-ubuntu/windows-installer

I have recommended WUBI to many in the past, and it has always been successful. Obviously, I am a fervent Ubuntu user. But, the push for Ubuntu, or any Linux distribution, is not so much for “infecting” the rest of the world. The main reason I bring it up is for development reasons. It is so much easier to install and configure development tools in Linux, that effort required in explaining the same steps in Windows is becoming impractical.

However, until WUBI came along, the dilemma was between explaining how to install development tools in Windows, or how to install a fresh OS alongside Windows. With WUBI, it is so easy to install Ubuntu “inside” Windows that the contest is trivial.

WUBI creates a large file within Windows and installs Ubuntu into it. Then, it tweaks the Windows boot manager to allow booting into Ubuntu. When Ubuntu is running, it “sees” the the special file has its hard disk. This process eliminates the need to repartition a hard drive, a specialised activity that can go wrong even for experts.

If, by any chance, a user wanted to remove WUBI from his/her system, an uninstaller is provided, which simply reclaims the space needed by the Ubuntu files. No messy removal, no repartitioning.

With Ubuntu 10.04 LTS, it seems that WUBI is now officially supported by Ubuntu. I do not know when that change came about, but it is a welcomed one. This means that users of WUBI can expect future seamless transitions to new versions of the OS.

If you have not tried Ubuntu yet and are running Windows, I recommend to take a little bit of time (an evening) and try WUBI.

2010
05.03

Backup package configuration on Ubuntu

If your Ubuntu machine crashes, you can always restore it fairly quickly since Ubuntu is a breeze to install. If you backup your data, then you are cooking with gas. However, after years of installing various packages, it might take a while to remember them all.

Reference: http://ubuntuforums.org/showthread.php?t=261366

The article referenced above shows how to save the list of all installed packages, as well as how to reinstall them all. The commands are shown below:

1. To get a list of all packages currently installed

dpkg --get-selections > packages.txt

2. To install all packages obtained by such a list

sudo dpkg --set-selections < packages.txt
sudo dselect

A comprehensive backup process should include that list as well as a copy of /etc

2010
04.28

Middle of the night, trying to re-install Ubuntu on a crashed machine. Worse of luck.

Turns out, I am attempting to install Karmic 9.10 on a platform with a newly formatted SATA drive. Here are the symptoms:
1. Boot up using Desktop i386 Live CD
2. Select installing Ubuntu
3. Go through installer dialogs: language, time, keyboard. Those are fine
4. Select partition dialog fails to show any drives

Booting into live desktop and using GParted shows the drive just fine. So what is going on?

Reference: http://ubuntuforums.org/showthread.php?t=1304772

Turns out, there is interactions between dmraid and SATA drives. Quick solution:
1. Boot into live desktop
2. Start Synaptic Package Manager
3. Search for “dmraid”
4. Uninstall all “dmraid” related packages
5. Proceed with install

2010
01.13

This note relates to Mozilla Firefox 3.5.7 running on Ubuntu Karmic (9.10).

The problem is that Firefox appears to be freezing for a quick moment, every 4 to 5 seconds. This is annoying when editing text and watching a video on YouTube.

I came across this helpful post: http://support.mozilla.com/en-US/forum/1/524464

My approach to the fix is to give up on session restore, altogether. I do not like it, anyway. The post above might help you with tweaking better values if you wish to retain this feature.

1. Open firefox to this page: about:config
2. In the filter box, type: browser.sessionstore
3. Double click on “browser.sessionstore.interval” and enter a larger value of your choice (I used 100000, but the next step might make this irrelevant)
4. Double click on “browser.sessionstore.resume_from_crash”, resetting the value (i.e. make it “false”)

This fixed the annoying behaviour. I hope it works for you.

2009
12.18

If you have built a Google Wave Robot that interacts with a gadget, you have probably come to a number of frustrating dead ends. As of this writing, the ability for a robot to observe changes in the state of a gadget is easily determined using the Wave Robot API. However, the difficulty comes in attempting to have the robot change the state of the gadget.

References:

Reading the library code for the Java Wave-Robot-API (http://wave-robot-java-client.googlecode.com/svn/trunk/), it becomes apparent that facilities available to a robot to perform changes on gadget states have a very coarse resolution. In that, I mean that there appears to be only the ability of changing a whole gadget state, not a single field.

When a robot receives a set of events from the Wave server, it has an opportunity to return a number of operations to be executed. This is the opportunity to modify content of the Wave. Techniques to observe the discussion between a Wave server and a robot are explained in another post.

When it comes to changing the content of the text, a robot can perform operation with fine resolution. This means that the operations deal with small changes. These operations are not likely to collide with operations of other users concurrently editing the same content, and if they do, the collision does not yield a large error. To understand better this phenomena, look at discussions on Operational Transforms, which are used internally by Wave to keep track of changes.

However, when it comes to managing elements (gadget are elements), there appears to be capabilities designed in the protocol to transform properties/fields of the element, however the library code is not making use of them. Therefore, at this time, it is unclear if these functions are available.

The problem is compounded by the fact that “whole-element” operations do not always work as expected. One such operation is “DOCUMENT_REPLACE_ELEMENT” which, according to the library code, should enable a robot to replace a gadget (or any element) with another copy. Using the facilities to replace an element fails and the Wave server returns an error.

This is an interesting side observation. Since the operations performed by a robot are returned as a reply to the incoming events, the Wave server contacts the robot again with incoming events containing the error. Currently, the Java Wave-Robot-API is not able to decode these events, so they show up in the logs as a critical error, where the following is observed:

java.lang.IllegalArgumentException: No enum const class com.google.wave.api.EventType.OPERATION_ERROR

If you see the above, it means that the Wave server was not able act upon a returned operation.

To come back to the whole replacement of an element, a robot must first perform a DOCUMENT_ELEMENT_DELETE operation, followed by a DOCUMENT_ELEMENT_INSERT operation. In Java, using the current Wave-Robot-API (published 2009-09-16), the following code would be needed:

        TextView textView = blip.getDocument();
        if( null != textView ) {
            GadgetView gv = textView.getGadgetView();
            Gadget gadget = gv.getGadget( gadgetUrl );
            if ( gadget != null ){
                // --> make changes to gadget state here <--

                int gadgetPos = textView.getPosition(gadget);
                gv.delete(gadget);
                textView.insertElement(gadgetPos, gadget);
            }
        }

What does this mean? Basically, if a robot and a user are attempting to use a gadget simultaneously, the changes that a robot makes will wipe out the changes from the user. Also, as the gadget is removed and added, there is a visual cue that this happened if the user is looking at the wave. This is far from an acceptable work-around.

Even when the bug above is fixed, the resolution of the changes will still be too coarse. The only long-term acceptable solution will be based on the DOCUMENT_ELEMENT_MODIFY_ATTRS operation, but it is not clear when this will happen.

Therefore, the really exciting Wave applications, where robots and gadgets interact to provide a truly immersed environment, will have to wait or suffer the visual glitches.