Australia, Day 5

Day 5, Monday, February 8 2010
——————————-

Today is the day we decided to visit Rottnest Island which is just off the coast of Perth and can be reached by ferries going off from Fremantle or Hillary’s boat harbour. We decided to go from Fremantle and John brought us to the dock early in the morning.

Rottnest Island is a beautiful little island with a few nice beaches, only bicycles for travelling and can be ridden around in about half a day with bicycles. Rottnest is known for its cute quokka’s. They were first thought to be bigger sized rats, but are more small little wallabies and are quite tame on the island.

We hired ourselves two bikes and then started on a tour around the island. The second beach we saw, we locked up the bikes and then went down to the beach where we walked along the nice sand and enjoyed the view. After putting on our wet suits to protect us from the sun we went snorkelling. Sadly there wasn’t all that much too see, but it was still nice to go for a swim.

After that we carried on driving around the island and went to every one or other beach, finally realizing that at this rate we wouldn’t manage to get around the island at this pace as we kept swimming and sun bathing. It was quite fun.

At one lookout on the north west side of the island Iris found beatiful shells of her favourite sort which she was always hoping she could have in her jewelery. She picked up a bunch, hoping it wouldn’t be a problem at the airport later when going home…

In the end time did not let us go around the island so we just cut through the middle of it. This turned out to be a very good thing, as there were quite a few lakes in the middle of the island which looked beautiful. Sadly we didn’t have so much time anymore as we had to give the bikes back quite early, so we just hurried past and took a couple of pictures.

After giving the bikes back we spent our remaining time waiting for the ferry by enjoying the sun on the grass.

When we were back at home we then went about booking our flight to Alice Springs including the hostel and the Uluru, Kata Tjuta and Kings Canyon trip which we wanted to do. We wanted to leave on the 12th of February and start the trip on the 13th of February so we booked everything accordingly.

Australia, Day 4

Day 4, Sunday, February 7 2010
——————————-

Today we drove to the Pinnacle Desert, which is in the Nambung National Park. On the way we stopped for lunch at Rosie’s Chicken. Rosies chicken was this real outback road stop where a woman was sitting inside which was probably as outback ozzie as can be. She was barefoot, had a very weather beaten face and looked really fierce, yet still just laid back.

After lunch we arrived at the national park, where we could then see the pinnacles. The pinnacles are fascinating. It is so strange how these pinnacles come out of the desert and taken on many different shapes. Science still has not real understanding on how these pinnacles came about, but one of the latest ideas is that they are trees which somehow got preserved and through many many years are pressed to hard stone, which then erodes not as fast as the sand around them.

Another wonderful feat were the Stomatolites at Lake Thetis. Stromatolites are actually the beginning of life as we know it on a carbon basis. The stromatolites filtered the nitrogen out of the air, allowing more oxygen and carbon dioxide to be in the air. Stromatolites are a type of bacteria and in Lake Thetis one can still see their remains, and some of the last of the stromatolites which are actually still alive.

Australia, day 1

Day 1, Thursday, February 4 2010
———————-
I packed yesterday, so all I needed to do this morning was get up at the right time eat my last breakfast at home and wait for the ring at my bell. When Iris finally rang my bell, I was imersed in a T.V. show which actually fitted the picture; It was about Africa and its wild animals in the tropical parts. Now the continent doesn’t fit, but the wilderness certainly does.

Dragging myself to my feet, as I was rather tired from little sleep, I grabbed my bags and did one last check of the house before locking the door behind me. In the elevator going down I suddenly realize there is something I forgot: my watch. Pressing the emergency brake I send the elevator back up and get the watch. This is a typical scene for me. I think I am ready only to realize in the last second that there is something I forgot.

After dropping my G.A. off at the train station we start the journey to the airport with Silvano as our taxi. Thankfully the traffic is fine around 11 AM, so we arrive at the airport with out any problems. Finding our check-in terminal was not that simple as they did not yet show our flight at terminal 3. But remembering that Emirates flies from Terminal 2, we moved over to terminal 2 and there was our flight on the board.

These e-tickets nowadays are quite interesting, just show your passport and the print out and the boarding pass is yours.

After a last meal at the italian restaurant, where I found nothing better to eat than potatoe fries, we say goodbye to Silvano for 6 weeks. Iris is definitely a bit down, but she has good holidays to look forward to.

Finding our gate 53 and getting through the security checks would have been simple, had I not been stupid enough to empty my pockets before hand. 3 times I had to go through before it stopped beeping when I went through the metal detector. Stupid me and ridicoulous security checks.

After a half hour wait it is boarding time. We quickly find our seats and settle in. First we hope that the seat next to me will stay empty, but soon enough a man takes the seat next to me, with Iris at the window. Take-off is simple and soon enough we are in the air with the hostesses giving out food and things.

When dinner is served the hostess realizes that the table of the man sitting next to me is broken, so she offers him a seat somewhere else. So the place next to me is indeed empty which gives me a bit more room to sit.

I end up watching a couple of movies, namely Sunny, with a change of meatballs and Up. I wasn’t able to finish Up, as the flight was over before the end.

But Iris and I were both happy to get off the plane and stretch ours legs, yet knowing that another 10 hours are ahead of us. The worse part is waiting in Dubai. There is just so many number of times that you can walk up and down the duty free shops and know that you don’t want to buy anything.

With another 3 hours to go, we sit down on two seats and start to wait for the time to pass. 5 hours is a far to long time to spend at an airport, especially if you don’t have the countries currency. There was no use in getting money from the ATM as we don’t have use for the foreign currency in Australia.

Finally boarding time arrives and after about half an hour we are seated. There is only one caveat; Iris is in seat 28b and I am in 27b. So she is sitting directly behind me, both of us between two people. The two ladies I am seated between are Italians but living in Perth. Iris is sitting between a man and a woman. I know nothing of the two.

This ten hours flight starts off with me ending the movie Up, and then watching “All about Steve”. Both are ok, but not spectacular. Thankfully I managed to sleep a couple of hours and then I awoke in the new day, ready to land in Perth.

Australia, day 3

Day 3, Saturday, February 6 2010
———————————
When we get up in the morning we all have a nice breakfast together. It is then decided, that we will drive to Hillary’s Boar Harbour and have a little outing there.

Before we went to Hillary’s Magda and Kevin had to go out, so Brian and John showed us their little pond right next door. Because of the ongoing drought it was rather shallow, but there were many birds bathing and enjoying the water and the sun as well. They said there were also quite a few turtles there which we didn’t see.

On the way to Hillary’s we take the scenic route which drives quite close along the shore so we have a beatiful view of Australia’s vegetation, bird life and of course of the beatiful blue ocean.

Halfway to Hillary’s we see a helicopter over the ocean, and realize that a person is being rescued out of the ocean. Since this is quite interesting we turn off to the next beach and end up on Floreat Beach, where we just manage to see how the person is being pulled out of the ocean and dropped off on the beach.

Afterwards the helicopter takes off and we just realize, that at the Floreat Beack parking lot a part of the parking lot is marked off as the landing zone for the helicopter, so we can watch how the helicopter lands. Brian then realizes, that this is a helicopter which he worked on and added the rescuing capabilities of the helicopter.

When we then get to Hillary’s we then visit the AQWA which is the Aquarium of Western Australia. It was a very nice aquarium with many nice fish, big aquariums for the fish and a nice big one where a conveyor goes underneath so one can enjoy looking at massive rays and sharks. There were even people diving with the creatures…

Hillary’s also has a nice promenade where you can walk down and do some shopping, so of course Iris had to see if she finds something, but thankfully she doesn’t spend ages in a shop just more an in and out kind of thing.

We were promised some nice yaughts, but I was rather bored with the motor boats, there weren’t that many that had any sails.

When we went back to the parking lot, we saw many white parrots which were sitting on the trees. Quite nice animals, they made a hell of a racket but they were nice to look at.

The evening was quiet, we just had supper together did a bit of talking and then went rather early to bed as Iris and I were pretty tired from the jet lag.

Australia, day 2

Day 2, Friday, February 5 2010
———————————
Finally we arrive on time in Perth at 7pm. We have been travelling for 26 hours and we are feeling it in our bodies. I’m quite awake from the couple of hours sleep I managed to got.

Passport control is a pain, as is always the case when travelling into a different country. We didn’t have to wait that long for our luggage, so soon we were on our way to the part of which we had the most fears; luggage control. Travelling into Australia means that your bags get scanned going into the country as well!

Iris had some mushrooms from Switzerland which her mother gave her to give our aunt. We were fearing they would be a problem, so we then just declared them, deciding not to try our luck as there were many signs up, warning about the fines they deal out when they catch you trying to smuggle something in.

The weirdest part of all was, that when we finally showed the guy the mushrooms he tells us they are from China. Now isn’t that a funny thing, we import Mushrooms, namely Morcheln and Steinpilze from Switzerland, bought in Coop and they are actually again imported from China! So stupid. Oh well, thankfully it went well and we got through with no problems as the mushrooms are fine to import.

An interesting fact is that, if you declare something and take the declared goods out of a suitcase, then that suitcase does not get scanned, yet any other luggage does get scanned, so I suppose if you really wanted to import something illegally then just bring something else with you which is in the same suitcase and then you can bring it in. Of course I wouldn’t bet my life on it…

Finally through all the checks we finally meet Magda, Kevin, Brian and John. That was a nice meeting. So nice to see people when so much time has passed since the last meeting. I get into the car with Brian, and the rest into Kevin’s car and we drive the 20 minutes back to their home.

At home they show us their house, with the pool, and rather interesting layout which I quite like. Our room is very nice and we put in our luggage, and take our long needed shower. After talking a bit we then go to bed and enjoy our first nights sleep in Australia.

Adding Verdana / Tahoma / winfonts LaTeX support in Ubuntu 9.04

To be able to use windows fonts like Verdana, Tahoma and so forth in Latex documents on an Ubuntu Jaunty Jackelope you need to install the winfonts package from CTAN. The following steps explains what I undertook to use these fonts:

1. First download the winfonts package from CTAN
2. Find your Tahoma and/or Verdana fonts on the web or your Windows computer
3. Extract the files in your home
4. Copy the contents of the winfonts directories doc, fonts, tex, ttf2tfm to /usr/share/texmf-texlive/ respectively
5. Copy the fonts to /usr/share/texmf-texlive/fonts/truetype/public/msttcorefonts
6. Run the following commands

sudo update-texmf
sudo update-fmtutil
sudo update-updmap
sudo texhash
sudo updmap-sys --enable MixedMap winfonts.map

7. In your LaTeX document switch to Tahoma with the following commands:

usepackage[T1]{fontenc}
fontfamily{tahoma}selectfont
renewcommand{sfdefault}{tahoma}
renewcommand{familydefault}{sfdefault}

I solved this problem with some help from these entries:
http://www.latex-community.org/forum/viewtopic.php?f=5&t=2110&p=8558

Further the documentation for the winfonts is here.

Implementing Ajax push with RichFaces

The following snippets illustrates how to implement an ajax push in a JSF application where RichFaces is set up. I am using this with a JSF application with Tomahawk extensions and RichFaces just for Ajax and Menus

Add the following in the XHTML:

<!-- Register an ajax listener on the bean -->
<a4j:push interval="1000" eventProducer="#{bean.addPushListener}"
    reRender="ajaxPanel" enabled="#{bean.pushing}" id="pushLstnr" />
<!-- the panel to be updated -->
<a4j:outputPanel id="ajaxPanel" ajaxRendered="true">
<h:messages layout="table" errorStyle="color:red"
      fatalStyle="color:red" infoStyle="color:blue" showDetail="true"
      showSummary="true" styleClass="loginError" />
</a4j:outputPanel>

Add the following to the Bean:

/**
  * Registers the ajax listener
  *
  * @param listener
  */
public void addPlanStatePushListener(EventListener listener) {
  synchronized (listener) {
    if (this.ajaxPushListener != listener) {
      this.ajaxPushListener = (PushEventListener) listener;
    }
  }
}

Now all you have to do is execute this call in your code where you need to update your browser:

// send event to browser:
ajaxPushListener.onEvent(new EventObject(this));

Have fun
Robert

DHCP Internet and own DNS Server

If you’re running your own DNS Server and your internet connection is using DHCP to get the WAN IP, then you might run into the same problem I have.

I have configured my own LAN DNS-Server on a local IP and configured this in /etc/resolv.conf. Periodically the DHCP Client refreshes the WAN IP, thus overwriting my resolv.conf settings.

This problem can be resolved by adding the following line to your /etc/dhcp3/dhclient.conf file:


interface "eth0" {
prepend domain-name-servers 10.0.0.1;
}

In this way your DNS Client will first add your defined domain-name-server to the list sent from your provider

Creating icons for eclipse applications

I’ve been starting to get quite annoyed with problems surrounding creating icons for use in eclipse applications. Windows needs either alot of icons in 8bit and 32bit or one ico containing all of those images. Anyhow after some trying I found out how I could get this done.

  1. First you create your icon in a large enough size so you don’t loose any information
  2. Then you use gimp and create all the 32bit versions by just resizing the image to 48×48, 32×32 and 16×16. These you can keep in the RGB mode and then save as BMP’s
  3. All the 8-bit images created nearly the same. You just need to change the mode to indexed and then change the maximum number of colours to 255 for 8bit.
  4. You can create an ico file with the imagemagick package in linux with the following command:
    convert image1_16_8bit.bmp image2_16_32bit.bmp.... -channel Alpha -negate image.ico
  5. Then go into the Eclipse product page and choose each icon respectively

Running Task asynchronously in Eclipse RCP and JFace

These code snippets show how it is possible to executes task in Eclipse by showing a progress dialog, which is possible to hide

This is the code to start the job:

// create action to be called after the action is completed
// this action shows a success dialog if the job executed without
// an exception, otherwise it shows an error dialog
final CompletionAction completionAction = new 
        CompletionAction(AdminClientActivator.PLUGIN_ID, parent.getShell(), view);
completionAction.setOkTitle("Job sucess");
completionAction.setOkMsg("Sucessfully executed job");
completionAction.setFailTitle("Job failed");
completionAction.setFailMsg("There was an exception while executing job");

RSPClientJob job = new ClientJob("Long job...", completionAction);

// if short action, otherwise is long Job.LONG
job.setPriority(Job.SHORT);
// show a dialog immediately
job.setUser(true);
// start as soon as possible
job.schedule();

This snippet is the Job class:

/**
 * Abstract {@link Job} class for executing tasks with a progress dialog
 * @author Robert von Burg
 */
public class ClientJob extends Job {
  private CompletionAction completedAction;

  /**
   * @param name
   * @param completedAction
   */
  public ClientJob(String name, CompletionAction completedAction) {
    super(name);
    this.completedAction = completedAction;
  }

  protected IStatus run(IProgressMonitor monitor) {
    // activate the progress bar with an unknown amount of task work
    monitor.beginTask("Loading Hibernate configuration", IProgressMonitor.UNKNOWN);
    // perform the job
    try {
      // execute task work...
      Thread.sleep(10000);
      // at the end of the successfully ended work, set the completion
      // task to be ok
      completionAction.setOk(true);
    } catch (Exception e1) {
      logger.error(e1, e1);
      // if the work failed then set the completion
      // task to be NOT ok and set the exception so it
      // can be shown to the user
      completionAction.setThrowable(e1);
      completionAction.setOk(false);
    }
    // stop the monitor
    monitor.done();
    // execute the completion task
    complete();
    return Status.OK_STATUS;
  }

  /**
   * completes the task by showing the user a dialog about the execution 
   * state of the job
   */
  protected void complete() {
    setProperty(IProgressConstants.ICON_PROPERTY, ImageFactory.
                getImg(ImageFactory.IMG_OK));
    Boolean isModal = (Boolean) this.getProperty(
                IProgressConstants.PROPERTY_IN_DIALOG);
    if (isModal != null && isModal.booleanValue()) {
      // The progress dialog is still open so
      // just open the message
      showResults(completedAction);
    } else {
      setProperty(IProgressConstants.KEEP_PROPERTY, Boolean.TRUE);
      setProperty(IProgressConstants.ACTION_PROPERTY, completedAction);
    }
  }

  /**
   * Asynchronous execution of an {@link Action}
   * @param action
   */
  protected static void showResults(final Action action) {
    Display.getDefault().asyncExec(new Runnable() {
      public void run() {
        action.run();
      }
    });
  }
}

And since we want to notify the caller about task completion we use this interface:

/**
 * Interface for notifying objects to be refreshed
 * @author robertb
 */
public interface Refreshable {
  public void refresh();
}

And task completion is handled with this Action:

/**
 * The completion task, which either shows a success dialog, or an error dialog, 
 * depending on the ok state set and then notifies the {@link Refreshable} to 
 * refresh its contents
 * @author robertb
 */
public class CompletionAction extends Action {
  private boolean ok;
  private String okTitle;
  private String okMsg;
  private String failMsg;
  private String failTitle;
  private Throwable throwable;

  private Refreshable refreshable;
  private Shell shell;
  private String pluginId;

  /**
   * @param pluginId
   * @param shell
   * @param refreshable
   */
  public CompletionAction(String pluginId, Shell shell, Refreshable refreshable) {
    this.pluginId = pluginId;
    this.shell = shell;
    this.refreshable = refreshable;
  }

  public void setOk(boolean ok) {
    this.ok = ok;
  }

  public void setOkTitle(String okTitle) {
    this.okTitle = okTitle;
  }

  public void setOkMsg(String okMsg) {
    this.okMsg = okMsg;
  }

  public void setFailMsg(String failMsg) {
    this.failMsg = failMsg;
  }

  public void setFailTitle(String failTitle) {
    this.failTitle = failTitle;
  }

  public void setThrowable(Throwable throwable) {
    this.throwable = throwable;
  }

  public void run() {
    // first refresh
    refreshable.refresh();
    // then show the dialog
    if (ok) {
      MessageDialog.openInformation(shell, okTitle, okMsg);
    } else {
      Status status = new Status(IStatus.ERROR, pluginId, 
                throwable.getLocalizedMessage(), throwable);
      ErrorDialog.openError(shell, failTitle, failMsg, status);
    }
  }
}

I put this together with help from the following site:
Job Concurrency

Thanks
eitch