Friday, November 21, 2008

Discovering Dojo for Domino: Part 4 - Event Handlers, the DOM and Data Stores

Work and family have been pretty busy, so this next post has taken a little longer than I expected

OK, so dijits are pretty and all web 2.0-ish, and the date picker is nice, but there is more to dojo than that. The whole point of a javascript framework is to simplify common tasks and allow you to extend your application.

Basic event handling


Firstly, a common task on a web form: the user clicks a radio button and some of the fields are hidden or shown, depending on the choice. No too difficult, but tedious if you want to change the properties on multiple items. With the dojo.query method, this becomes alot simpler:

Step 1  Set the event handler for dojo. Your field HTML Attributes become:
"dojoType='dijit.form.RadioButton' onclick='clickRadioButton' "
Notice that I have assigned a text string to the onclick event, not called a function directly. This is because dojo provides event handlers which can override and extend the default event handlers. This is the function which will be called when the event fires.

Step 2  Load the dijit code in your JS Header
dojo.require("dijit.form.CheckBox");

Step 3  Add a function to your script library to handle the onClick event. For example:
function clickRadioButton(  ){
if( this.getValue == 'Hide' ) {
dojo.query('.myClass').style('display', 'none' );
} else {
dojo.query('.myClass').style('display' , '' );
}
}
this within the function is the dijit object, and has access to all the dijit functions, including getValue. This useful function gives you pretty much a value you can test as you would in Notes, so this.getValue will give you the following:





dijitEventReturns
TextBoxonChangeText within the field
DateTextBoxonChangea Javascript date/time object
TimeTextBoxonChangea Javascript date/time object
CheckBoxonClickCheckbox label if being selected, false if being unselected
RadioButtononClickthe label of the selected radio button
FilteringSelectonChangethe alias of the selected option


Accessing the DOM


The dojo.query function takes any valid CSS3 selector (e.g. '.myClass', '#myDiv' , 'TD' etc) and returns an array of node elements. You can chain queries to get items nested within others. Dojo has functions which modify element properties and these can modify all node elements in a collection without the need to iterate over each item in turn. So
dojo.query('#myDiv').query('.myClass2').style('display' , 'none' );
would get all elements with the class 'myClass' inside the div 'myDiv' and set they display property to 'none'.

There are a range of functions for getting and setting various node attributes which can be used in this way.


Filtering Selects and Data Stores


A Filtering select is a dojo dijit like a combo box. As discussed in my previous post, there are problems with using a filtering select with a Domino dialog lists because they generate incomplete HTML.

What dojo actually does is parse the DOM and load your select options into an internal data store and point the dijit to that data store. Examining the dijit object using Firebug, I found that the options are loaded, but they contain a trailing end of line character (\n), which breaks the select in firefox but appends a trailing space in IE. Neither is pretty. I wrote the following function to 'fix' the data in the data store:

function fixSelect( dijitID ){
// get the data store used by the select
var thisStore = dijit.byId( dijitID ).store;

// function to update store items
var itemUpdate = function(listItem){
if( listItem.name[0].indexOf( "\n" ) > 0 ){
listItem.name[0] = listItem.name[0].split( "\n" )[0] ;
}
};
// function to handle errors
var gotError = function() {
// your error handling goes here ;
}

// now call the fetch.
var items = thisStore.fetch( {
onItem: itemUpdate,
onError: gotError
});
}


This looks a little complicated, because the fetch method is asyncronous. This means we cannot simply call store.fetch, assign the results to a variable, then iterate over the results. Instead we pass fetch(() the function to call as each item is returned (there are also ways to work on the complete item set). The first parameter passed to the function is the returned item, which our function can then do something with.

The other alternative is to use a text field, define it as a FilteringSelect dijit in the HTML Attributes and point it to a data store you have created yourself. This is what you will need to do to use AJAX to replace your list choices.

Data stores are a powerful construct with what seems like a whole api of their own and I have only just skimmed the surface so far. I intend to post more when I get my dynamic picklists working (by this I mean AJAX updates of the select choices depending on a choice in another field).

Some more on using DateTextBox


The date format used by dojo is yyyy-mm-dd, and dates are stored in the text field (and returned to Domino) are in that format. You can change the display format or let dojo detect your users locale and use the appropriate format, but you can't change the format in which the data is submitted.

If you want to pre-populate your field with a date (such as @Today) you actually need to split the date and re-format it into the appropriate string first

Monday, November 17, 2008

Discovering Dojo for Domino: Part 3 - Dijits for Domino

The next thrilling episode in my dojo adventures ...

Firstly, some references: the three primary references I used are The Book of Dojo - Part 2 which gives you an overview of dijits and how they work in general, the Dojo Campus - Feature Explorer which has examples and shows the related code, the dojo API Reference. I also found the following part of the dojo campus through Google: http://docs.dojocampus.org. I can't find a link to it on the main DojoCampus page, but it's very useful.

To create digits, you can add to your http markup, or you can create components programmatically.

Example through markup (from Dojo Campus):
<input id="q01" type="text" name="firstname"
value="testing testing"
style="width: 100px;"
dojoType="dijit.form.TextBox"
uppercase="true" />
For now, I'm going to leave programatic creation alone. While this would create the visual elements, I'm not sure they would be saved to disk if you are submitting a standard form to your server (rather than POSTing it to an agent). I haven't investigated though and this may be a valid alternative in some circumstances.

The API reference lists all the methods and parameters. Methods include standard event handlers (onClick, onChange, etc), and there are a whole lot of parameters, but some of the most useful are things like: class, style, uppercase and trim. For example, setting trim=true will have the text box automatically remove leading and trailing white space - no extra coding required.

As with the core, you simply need to reference the dojo script libraries in your form's HTML Head Content (see my previous post. You also need to 'dojo.require' the appropriate libraries for the widgets in your JS Header (see Part 1).

For widgets, the only extra part is the style sheets. There are three common themes, the most common of which is the Tundra theme. These come already installed with 8.5, and are located in [program folder]\Domino\data\domino\js\dojo-1.1.0\dijit\themes.

You need to reference the themes in your HTML Head Content along with the script libraries, so my 8.5 test form now contains:
"<link rel="stylesheet" type="text/css" 
  href="/domjs/dojo-1.1.0/dijit/themes/tundra/tundra.css" />" +
"<script type="text/javascript"
  src="/domjs/dojo-1.1.0/dojo/dojo.js"
  djConfig="parseOnLoad:true, isDebug:true"></script>"
The doc.dojocampus.org site also recommends:
It is recommended you include the theme CSS file before dojo.js to avoid any potential latency issues.
If you use the Tundra theme, you also need to include the class in you form's HTML Body Attributes
"class='tundra' "
First, I created a simple text field. You can add the additional dojo code to either the field properties box (HTML Tab - Other) or the HTML Attributes of the field in the design pane. Both work. The properties box is very small and in general the design pane is easier to work with. The only advantage of the properties box is you don't have to change code if you paste it in there, whereas with the design pane you need to enter a formula which returns a text string. This means you may need to escape double quotes with a backslash, or change double quotes to single quotes.

For the text field, I added the following to the design pane:
"dojoType='dijit.form.TextBox' uppercase='true' trim='true' "
I added the appropriate 'require' statement to the JS Header of the form and I now have a working dijit which automatically converts the text to upper case on exiting the field and trims white space from both ends (and is styed quite nicely too).

Other basic dijits I've tested (check out the Dojo Campus - Feature Explorer for the relevent require function and html attributes):

  • Date picker - just a text field, but can be trimmed or a constraint applied
  • Time picker - I'm not sure I like this widget much, but again you can apply constraints to define the format
  • Number Spinner - Allows user to either type a number or click Up/Down to adjust. Max, Min and number of decimal places can be define.
  • Combobox - like a standard html combo box but users can enter values not in list. I had problems with this - see below.
  • Filtering Select - like a standard combo box but uses 'Google Suggests' style interface. Again this doesn't work 'out of the box' with Domino, unlike most other widgets



Filtering Select & Combo box

Neither of these work properly with Domino. The reason is that Domino (prior to version 8.5) does not generate valid HTML for a <Select> element - it does not close the <Option> tag with </Option>.

The Combobox will work in IE, but not Firefox. I'm not sure about other browsers. The Filtering Select will work in IE if you add an alias to your picklist (so that Domino generates a value property for the <Option> tag. I am working with IE on an intranet for my current project, so I don't need to worry about the other browsers for now. For filtering selects that don't need an alias I have modified the formula to be something like:
list:="":@DbColumn(....)
list + "|" + list
That way I get the alias, IE is happy and the dijit works, and I get the label returned in my field. If you need to (and are braver than me), you can apparantly modify the dojo files to handle the bad HTML. The Dojomino blog explains how. This is a good reference site, but currently a bit out of date. They have announced that they are releasing an update but it hasn't been posted yet.

All of the dijits include the ability to validate the field. Field prompts are styled as a small tool-tip to the right of the field, error messages are displayed as the user leaves the field, and dijits such as the date and time text boxes handle all the heavy lifting around validating the content. However this is UI level validation only, and does not prevent the form from being submitted with incorrect values.

My next challenges:
  1. Modifying the options of combo box 2 when the user makes a selection from combo box 1 and
  2. Form level validation

Stay tuned ..

Saturday, November 15, 2008

Discovering Dojo for Domino: Part 2- Runing Dojo on Domino 8.5

Part one of my adventures in dojo can be found here

Next, I tried to run this on my 8.5 Beta 1 Domino server at home.

First problem: the dojo files are not installed under the /html folder but in a new folder in the file structure /js. I could not load the javascript file at all. After searching through the N&D 8.5 Beta forum I found that you can reference this folder using /domjs.

So my HTML Head Content was changed to
<script type="text/javascript" 
 src="/domjs/dojo-1.1.0/dojo/dojo.js"
 djConfig="parseOnLoad:true, isDebug:true"></script>"

And, of course, the files shipped with Beta 1 are dojo 1.1.0. Fortunately the Dojo Quick Start Guide also links to the earlier version (not that I could spot any differences!)

Everything worked OK until I tried to run the example which retrieves text as json. I kept getting a 404 - file not found error. Rather than wasting time trying to find the typo in the file path I created a simple test agent which output the example json text, because agents and views (using ?ReadViewEntries) are the two most common ways of generating json in Domino.

The only thing I had to do was find out the appropriate mime type for the output. I initially used text/html and everything worked. Firebug helpfully displayed the following message:
Consider using mimetype:text/json-comment-filtered to avoid
potential security issues with JSON endpoints
(use djConfig.usePlainJson=true to turn off this message)

So I modified the HTML head content again, removing the debug parameter and replacing it with the suggested json parameter:
<script type="text/javascript" 
 src="/domjs/dojo-1.1.0/dojo/dojo.js"
 djConfig="parseOnLoad:true, usePlainJson:true"></script>"

and set the content type. My agent is simply:
Sub Initialize

Print "Content-type: text/html"
Print |
{
foo: "bar",
name: "SitePen",
aFunction: function(){
alert("internal function run");
},
nested: {
sub: "element",
another: "subelement"
}
}
|
End Sub

Sweet!

Next - on to digits

Thursday, November 13, 2008

Discovering Dojo for Domino: Part 1- The basics

My journey in learning to use Dojo with Notes and Domino web enabled applications.


I have recently taken over supporting some Domino applications that use dojo, so I thought I had better learn a thing or two about it. I have never used any of the javascript frameworks, and my javascript knowledge is patchy. It's all been learned through 'copy and paste' from other peoples work and the web. Some things I think I know pretty well but there are gaps.

I'm going to write up my experiences as I go. So this is not a structured tutorial and may lead off down the wrong path at times. Feel free to comment on better approaches if you see me doing something wrong.

So - where to start? The best place I found is the Dojo Quick Start Guide

Now I don't just want to learn dojo, I want to learn dojo for use with Domino. And if your are a Notes / Domino developer you know that some things work just like in the web examples and some things don't.

The first challenge is always, where to put the various code snippets that are shown in the examples. I started by creating a form and a javascript script library to go with it. I am going to have a 'dojo template' form with the basics in it, and a template javascript library. Each time I need a new form, I will copy the templates and start from there. In this post I'll describe how to get to the basic 'yeah it works' stage.

The basics: Getting the code


Well I haven't actually done this myself. The environment I am working in has the dojo scripts on the server already (Domino 7.x). You can download the source files and place them on your server, you can put them in your database as a file resource, or you can reference them directly from a CDN - instructions on the download page.

Dojo comes in three parts -
  • core: the basics. Event handlers, DOM manipulation, graphics effects
  • digit: 'Great interface widgits'. This is what I am really after
  • dojoX: complex widgits, graphing and charting

I'll deal with the core first, then move on to digits. I probably won't get to dojoX

How to add dojo to Domino


The Quick Start guide has some simple HTML and scripts you can then play with. I put the example HTML on the form and marked it up as Pass-thru HTML. I could have left the script directly on the page as well. However the point of this excercise is to learn how to use dojo with Domino so I put some of the code in the in a script library and some in the Javascipt Header section of the form.

The following is included on the tutorial first page:
It's important to note that you should not set on an onLoad function directly on the tag when using Dojo. dojo.addOnLoad(someFunc) is prefered over and window.onload = someFunc;
and provides examples such as the following:
dojo.require("dijit.form.Button");
dojo.require("dijit.TitlePane");
dojo.addOnLoad(function(){
dojo.byId("testHeading").innerHTML = "We're on our way!";
console.log("onLoad fires after require() is done");
});

I put the dojo require() and addOnLoad() functions in the js header (passing a funtion name init() to the addOnLoad function), created an init() function in my scipt libary and put any example code in the init() function. I also created a style sheet and embedded it on the form for the simple styles used in the examples.

So the break-up went like this:

HTML Head Content
<script type="text/javascript" src="[relatve file path]/dojo.js"
djConfig="parseOnLoad:true, isDebug:true"></script>


JS Header
[Resource: "libJSMyTestForm"]
dojo.require("dijit.form.Button");
dojo.require("dijit.TitlePane");
dojo.addOnLoad(init)

Script library libJSMyTestForm
function init() {
dojo.byId("testHeading").innerHTML = "We're on our way!";
console.log("onLoad fires after require() is done");
}

I added the HTML to the form, style to my style sheet, opened the form in a browser et voila - working dojo!

Moving on.. just a little


I was able to work through the tutorial fairly easily. It quickly demonstrates getting parts of the DOM and modifying them (throwing in a fade-out here and a slide-left there as well as the standards of replacing innerHTML and classes). It moves through basic event handling (registering an onClick function for a single element and using dojo.connect to register the event for multiple elements) to animation effects (slides, fades, etc) and the events that these animations themselves have. For example animations have beforeBegin and events, allowing you to easily chain animations.

The tutorial then covers basic Ajax - fetching text, posting a form, and fetching json. By the end of an hour or two, you are flying like a pro: dynamically changing your form, adding animations, playing with event handlers and Ajax.

But this is where my javascript knowledge starts to hit it's boundaries. The examples are full of code like this:

var init = function(){
var contentNode = dojo.byId("content");
dojo.xhrGet({
url: "js/sample.txt",
handleAs: "text",
load: function(data,args){
// fade out the node we're modifying
dojo.fadeOut({
node: contentNode,
onEnd: function(){
// set the data, fade it back in
contentNode.innerHTML = data;
dojo.fadeIn({node: contentNode}).play();
}
}).play();
},
// if any error occurs, it goes here:
error: function(error,args){
console.warn("error!",error);
}
});
};
dojo.addOnLoad(init);

Now I know there are different ways of declaring functions - using the FUNCTION statement, assigning a function to a variable and using the new function() constructor, and in-line as shown above.

But why? And where do you use one instead of the other? What is the scope of in-line functions like those above? What if I want to use an existing function in one of my script libraries? simply adding the function name followed by () did not seem to work. Why?

So now I think I have to divert from my journey to dojo enlightenment and seek a side-road through Advanced Javascript.

Can anyone recommend a good reference?

UPDATE: fixed the HTML Head Content - I had closed off my <Script> tag in the wrong place. Sorry for anyone who tried to copy it earlier (note to self: do not manually type code from memory. Always copy and paste working code!)

Monday, November 3, 2008

A New Job - and how to debug javascript in IE

I've been very quiet, because I haven't spent much time on-line in the last month.

It's not so much that I haven't been using a computer but a new job has meant some other priorities in the initial few weeks.

My new job is in many ways similar to my last one - Notes & Domino development. However my new job involves no admin or support work. While I didn't mind the admin work which was strategic - involvement in upgrade or roll-out planning, etc, I don't miss the day-to-day fixing mail routing / reviewing DDM alerts etc.

Other big advantages of my new job:
1) It's closer to home, so travel time is 1/2 hr to 1 hr less per day
2) The standard work day is shorter (7.5 hrs instead of 8 ) and
3) I now catch public transport to work so my husband has taken over the school / kindergarten drop-off and pick-up duties.

All this has meant more time for the family, and less stress on me.

My previous employer was strictly a Notes / Domino shop. The new employer is a larger professional services company, of which the IT consulting group is about 20, with a Notes & Domino team of 2.

Technically, my first challenge with the new job was learning how to drive Outlook. Yes, I have gone over to the dark side. At first, I found it shiny and new, and liked it a lot. It was quick. In Notes, I was nearly always running with the latest beta version, and my last laptop had exceeded the 'you have tweaked too much please re-build me now' stage that Windows XP seems to reach every 2 years or so. On a shiny new laptop with nothing else installed Outlook flies by comparison. And I like changing the color of my calendar entries, little things like that.

But I really miss my conversation threads. And Sametime. My new employer has no live chat services or similar services at all. And I don't like the way you have to turn off the reading pane on *every* folder individually. And the search is pretty ordinary - I don't think attachments are indexed, but I'm not sure.

Actually I miss Notes 8 altogether. The projects I have worked on so far have been general Notes client work for a customer with version 7 and changes to a web app for a customer with 6.5.

What is good is that the company has a strong .Net team and I'm hoping for a little cross-polination: sharing of javascript tools and libraries, standard approaches to UI, things like that.

Latest technical tip: I finally found out how to debug properly in IE. I usually build and debug in Firefox with Firebug, but the web app I was built for IE only, and some of the code was working fine in FF but not IE. So after much searching I found this page which explains how to use Visual Web Developer Express (free version) to connect to IE. It's a pretty awesome debugger. One thing I did find using VWD with Domino is it doesn't automatically recognise javascript libraries referenced from the jsheader on Notes forms. All you need to do to make it work is add a foward slashes and a script tag at the top of your script library and it then works a charm.
//<script>

Tuesday, September 16, 2008

Shared Actions and Refresh Design

I had an interesting issue with Shared Actions in Notes Views today.

I had built a new application (or more accurately a group of features) for a customer, but due to the customer's requirements I had to retro-fit my new code into and existing .NSF. The existing code was to be retained, with a front page for the user's to choose the new features or the existing features (not my choice in implementation, but beyond my control).

The existing application had over 300 views. It was not part of my brief to do anything about this. A template was delivered to the customer with the combinded code. After testing and implementation the customer discovered that a small sub-set of the old views had the wrong action buttons.

The customer sent me back a copy of the database, taken from the production database. What appeared to have happened was this:

Before the new template was applied:

Shared Actions (as they appeared in the Actions list)
  - Action A
  - Action B
  - Action C

View Actions
  - Action A (shared action)
  - Action B (shared action)
  - Action D (standard action)
  - Action E (standard action(

After the changes were applied (the database was set to inherit from the new template, and 'Refresh Design' was used to update the database)

Shared Actions (as they appear in the list
  - Action 1
  - Action 2
  - Action 3
  - Action A
  - Action B
  - Action C

View Actions
  - Action 1 (shared action)
  - Action 2 (shared action)
  - Action D (standard action)
  - Action E (standard action(

So what seems to have happened is that the view points to the action's offset in the shared actions list, not the action name or some unique identifier.

A further complication was that fixing the views in the template then refreshing the design did NOT fix the production database.

The only solution was to fix the views in the template, then delete the views from the production database then copy and paste them back in directly from the template.

I am not at all comfortable about a solution that involves directly modifying the production database. I also have no idea why this only affected a small group of views, other than these were the only ones that used the shared action that was previously the first action in the list.

Thursday, September 4, 2008

Syncing the iPod Touch calendar

I have an iPod Touch. I was given this as a Christmas present, and at first I wasn't sure how much I would use it as I am not a big music fan. I quickly found myself addicted though - by the apps, video for the kids to watch while travelling, etc. I still don't like iTunes very much, and jail-broke the iPod after about 3 months.

I use Lotus Notes at work and have a Blackberry, and the company runs a BES for Domino. For the last two years I have just taken full sync for granted. I have to say I don't miss the old days of connecting pda / phone to the pc, syncing with the pc, pushing to the server & missing updates to my calendar made by my manager between cycles. The Blackberry has been a fantastic solution for that.

However I use Google for personal mail and calendar. I have been able to sync the mail app on the iPod with Google via WiFi from the start but have not used the Calendar because I couldn't work out how to get the data transferred. iTunes only supports syncing the calendar with Outlook on a PC or iCal on the Mac. I don't use either of these.

So today I installed NemusSync on my iPod touch. link. This is a third-party app (available through Cydia and Installer.app) which allows you to sync your iPod / iPhone calendar directly with your Google Calendar without the need to pull the data down to your desktop.

I had trouble at first. I downloaded the app and set up the Google calendar details. I hit the sync button and went to my calendar - the calendar opened for a few seconds then closed. And again. And Again.

I went back into the NemusSync settings and cleared all the data from the calendar (no loss, I had not entered anything there). Back into the calendar app - same result

Then I cleared all data from NemusSync. The calendar app would then work correctly.

I searched but could not find any reason for this.

So I went back into Nemussync and tried again. This time, I made only one change at a time then tested the Calendar app. I set up the link to the calendar. Tested OK. Set up import only. Tested OK. Synced both ways. Tested OK. Set up default calendar. Tested OK.

So now it is up and running well. Full bi-directional sync. I haven't tried repeating appointments, or meetings with invitations but for my personal calendar I don't need those.

A nice little utility

A new job is in the wind

I have found a new job.

I have been casually looking for a new job for a couple of months now. I have been in my current job for nearly 10 years, and my employers are wonderful people, but I am finding that the amount of travel and the hours involved are just getting too much for me.

I live in Melbourne, Australia, quite close to the CBD and have been driving out to the suburbs for work for many years. And almost all our customers are waaaaaaaay out.

My new job is in town - just 15 minutes from home by public transport. It means that my husband will also have to do all the morning drop-off, but as he is semi-retired now this should work out OK. The work day is slightly shorter - 7.5 hrs instead of 8. So all up I will gain at least an hour a day. This may not sound like much but to a busy working mum it currently sound like luxury.

In addition, my current role has recently involved a much higher proportion of admin support work than ever in the past. The job used to be about 90/10 between dev and admin but has recently been more like 60/40. And the admin work has been support / fix type work rather than infrastructure / planning / upgrade projects. And a lot of the development has been just building something that someone else has spec'ed.

In contrast the new job is all development. I will also be in control of my projects from start to finish - requirements, through to implementation. It is with a very small consulting arm of a mid-sized accounting firm so I will be interested to find out how much interaction my group has with the larger organisation.

Now the hard part is working out my notice for the current employer. I am so ready to move on

Sunday, August 24, 2008

Playing with Domino 8.5 server

So, a lazy Saturday night in front of the TV, watching the Olympics. What is a geek girl to do? Why set up and test a new server of course.

I've been wanting to have a play with X-pages, so tonight I installed a Domino 8.5 server on my laptop. I had previously had an 8.0.1 server installed for some application testing I did a couple of months ago, so this was an upgrade rather than a full install.

I am running Windows XP and installed the server directly onto the laptop. I know I should find out how to use VMWare and set that up, but I really don't have the time. Also, as I just want to play a bit, not really test out the server it seems too much effort at the moment.

The install went well (although it took an inordinate amount of time I thought). I did have some trouble getting the HTTP server to load (could not open port 80). I found I had to disable my AV software temporarily to get the HTTP server to load. Restarted AV & it all ran happily together.

Although I did this to play with X-Pages, I got distracted by the new iNotes. It looks good, seems pretty fast, and a big improvement. My company is still running 7.0.3 on our edge-facing web server (it is Red-Hat and needs an OS upgrade to go to 8). So then of course I had to check out the iNotes interface on my iPod touch.

After fighting with Windows for some time, I managed to get the iPod to connect wirelessly to my PC, and connect to my Domino server. I think the new interface is nice. Only mail is implemented for now (no calendar or contacts), but I did test attachments - Word, Excel and PDF files all load and display well. I know this is a feature of Safari, not iNotes but it does mean iNotes Ultralight will be a viable means of accessing corporate data. If your CEO has an iPhone, does it really matter if access is on-line or stored on the device? Will he even know the difference?

Just watched the final of the Women's basketball. USA defeated Australia (again). I thought maybe this time the Opals would succeed. Silver is still good.

Sunday, August 3, 2008

Reactivating this blog

So..

Originally I started this blog just to put up a summary of our trip for family and friends.

I've decided to try and make it an on-going thing.

I am a Lotus Notes developer and admin, so some of the content may be technical, some will be personal, and some just random stuff.

Today was a very mixed day for me. I played in a tennis tournament, did very well (made the semi-finals). But it was also a hellish day as this morning someone vandalized my car in the street: brick-shaped dents in the bonnet, multiple cracks in the windscreen. All day on the phone trying to arrange repairs.

On the sort-of technical front, I joined GONAD.



When I received the email from Rob, with phrases like 'Greetings Sister', gmail chose the following adds:


So now Google thinks I'm a mason. Am I paranoid, or do we trust Google with way to much personal information about us and our web habits?


Friday, January 18, 2008

Trip Summary


A brief description of our trip can be found in the first post on this blog, here

On the whole, this trip was fun. It was challenging to travel in China with no ability to speak Chinese, and to arrange our hotels and transport as we went. However for the kids, I would could in future break the trip up a little more with additional day activities that allowed for running and climbing.

The scenery in China everywhere we went was spectacular, and although I found almost all of China grimy, with thick, grey air and dust everywhere, it was much cleaner than on our last trip 14 years ago. There is very little rubbish in the streets, and most of the public toilets we used were clean. The Chinese do not seem to seem to care about clearing away rubble from building sites and there is so much demolition and re-building going on that this also contributes to the feeling of chaos.

We ate in the streets often, and only experienced a couple of mild doses of upset tummies. General hygiene practices do seem to have improved.

There were far fewer police and army evident as we traveled around than I remember from last time.

The people were mostly friendly: a 'thank you' in Chinese makes them happy you have tried their language. Prices are almost always written or entered onto a calculator. If you look lost, someone with a little English will often volunteer to help but you do need to be prepared to get by by pantomiming, jesturing, and pointing to phrases in a book.

Tom was fussed over everywhere. If the Chinese thought he was under-dressed for the weather they scolded him and me. They patted his head and gave him food and pinched his cheek. If he said hello or thank you in Chinese they laughed delightedly. In general he took everything in his stride. He happily raced off through crowds without fear and did not treat anything or anywhere as strange or unusual.

I think Jack appreciated the trip but was disappointed we didn't manage to pick up many cheap games for him. He is old enough to appreciate travel in a foreign country, spectacular scenery and new experiences, but young enough to get bored by the constant travel and lack of play time. He is turning out to have an exceptional sense of direction, and whenever we stopped to get our bearings he was always right about which way we should head.

The next trip - I would just like to add a few 'wind-down' days at the end, and maybe a couple in the middle. We were on the go so much that one day blurred into the next after a while (part of the reason I started this diary).

I've now uploaded my photos to Facebook: http://www.facebook.com/album.php?aid=12575&id=703192551

Trip Day 22 - Home

Early start at 5:45 and off to the airport.

The free shuttle to the airport express picked up from our hotel so we got on that, rather than struggle with our bags to the MTR. Cathay has baggage check-in at Kowloon Station which makes things easy, especially as we had arrived with 2 pieces of check-in luggage but were leaving with 4, plus our carry on bags.

With plenty to of time to spare we ate a leisurely breakfast and boarded the plane. As this flight is during the day, it was far less stressful than the overnight flight at the start of the trip. The kids behaved well, and we got back into Melbourne around 9:30 pm.

By the time we got through immigration, baggagge collection, customs and quarantine is was nearly eleven. John went to pick up the car from the long-term carpark while I waited with the kids in the airport. It only cost us $99 for the three weeks which was surprising. This was no more costly than a taxi, and we probably would not have fitted all our luggage in for the return journey.

Trip Day 21 - Hong Kong

Jan 15 - Tuesday

We slept till after 9 this morning then went with John to the tailor for his final suit fitting and went out for Yum Cha. This was very good and very filling.

John headed off for some more computer bits while I took the kids back to the hotel.

Jack and John then set off in search of games while Tom and I watched some TV and rested. We then headed out for for some last shopping. I got some ipod covers and a remote control car for Tom.

Back to the hotel, and I bought a jacket and some deserts for the boys. In the process lost the ipod covers and had to go back for more. The boys and I had an early night while John went out to drink with a friend.

Trip Day 20 - Guanzhou, Shenzhen, Hong Kong

Jan 14 - Monday

We went out for a couple of hours. John wanted to find a market described in Lonely Planet where they sell live animals from cages and slaughter then butcher them for the customer.

Fortunately we did not find it. The taxi driver took us to a street where they sell pets, and this was next to a meet market, but all the animals were already dead and skinned. It is quite possible that the government has cracked down on some of the less sanitory food handling practices.

The kids enjoyed looking at the fish and turtles, puppies and kittens. We also picked up a number of aquarium decorations - fake rocks and plants which cost from a few yuan, which at home cost $10 and more.

Back to the hotel, checked out and got a bus to Guangzgou East station where we got tickets on the next train to Shenzhen.

We had trouble finding the departure gate and missed our train. However we got on the next one with no problems. There were no ticket checks on the train, just at the entry and exit barriers.

At shenzhen we checked our luggage at the Left Luggage counter and caught the local metro. We found one of the large computer markets we were looking for, but while there was plenty of hardwarwe, there was very little software. As we wereracing we bought a dozen CDs at $2 each. We expect most of them to fail or be demos only, but if only a couple are good then Jack still got good value.

Next we head back on the metro and go to the large mall nearby. I leave John and the kids and check it out.

The clothes are cheap but not exceptionally so. Bargaining is the norm here and I got a few things at a little less than Dimmy's prices. With more time to check out competitors and simply walk away from a few shops I could probably have done better, but I'm not good at bargaining and was very short on time.

I get a few items for Tom, a couple of t-shirts for myself, and some shoes for Tom.

We then go back for our luggage (this took some time as the station was huge and the Left Luggage counter at the far end from the mall) and walked across the border to Hong Kong.

It was then just a matter of getting on th HK MTR back to our hotel.

Trip Day 19 - Guilin to Guanzhou

Jan 13 - Sunday

We had a couple of hours to spare this morning so went looking around the hotel. Unfortunately it seemed to be mainly a residential area, and the wind is very cold. The kids get bored quickly so I take them back to the hotel through the lake park again.

As we walk along, Jack insists on walking and jumping along the rocks right at the edge. As he has complained several times about how he is not allowed to do anything, I warn him once then let it go. Inevitably he falls in. Fortunately it was right outside the hotel.

This means more washing in the basin, and we have to pack wet clothes. I aim the hair dryer at his boots, as he doesn't have any spare footwear. They are damp but not soaking by the time we leave. He has a choice between very thick long pants or shorts to change into and he throws a tantrum insisting he can't wear either. He chooses the thick pants but has only a light jacket to change into, so is a bit uncomfortable on the way to the airport.

It was 18 deg when we arrived in Guongzhou, so he was OK there. Again we have only one room, but it has a king-size bed and they said they could bring up a folding bed.

Before heading out to find the computer market, I suggest jack change into his shorts. However when we get out on the street, he says it is too cold. We give him the room jay so he can go back to change. When he gets back down, he tells us he dropped the key in the corridor and it slipped under the door of the room opposite.

John decides we don't have time to deal with it, so we head off.

We find the nearest metro station and get to the computer market only to find it is about to close. John does a quick dash around and funds some of the software he is after, but games are only in Chinese.

We head off to the major shopping street and find pants for Jack, bags and a PC game from a bookshop.

Dinner is noodles and dumplings then we head back to the hotel. When we get back, language problems prevent us explaining what happened to the room key. Housekeeping let us in - they seem to think we left the key in our own room. Cardboard takes care of the power a lot where you are supposed to put the key, but no spare bed has arrived.

As Jack lost the key he gets to sleep on the floor with the spare bedding again. This time it is not as thick and comfortable, but probably still no harder than the beds

Trip Day 18 - Guilin

Jan 12 - Saturday

An early start for a change. We were picked up at 8:00am and bused down river for a 3 hr cruise. The river is very low in winter and it seems this is the most navigable stretch at this time.

We have a nice cruise, lunch on the boat, and share the table with a women from Bunbury WA and her chinese/Canadian partner and an American who is living in northern China. The scenery along this stretch of river is spectacular: steep sided limestone pillars rising out of a flat plain. These are the vertiginous cliffs so often seen in Chinese paintings.

We return to the hotel and John has a sleep while I take the boys for a long walk through the riverside park and along the main street. We stop for cakes, popcorn and fries at MacDonalds, lollypops then icecream.

It is really chilly and we buy a furry hat for Jack and Chinese style earmuffs for Tom and I. These are a piece of wire with polar-fleece covering that sit over your ears and go around the back of the head/neck a bit like some headphones and are quite effective.

Back to the hotel, and we wake John, who was still asleep. A couple of hours later we head down for dinner. By now it has dropped to nearly feezing and the kids are cranky so once again it is hotel food.

Trip Day 17 - Macau and Shenzhen, then on to Guilin

Jan 11 - Friday

Its getting harder and harder to get the troops moving in the mornings. It was after 10 before we headed out for breakfast.

We checked out of the hotel and took a taxi to the pier and left our luggage. We went for a stroll around the nearby streets.

We found a square with a playground and a coffee shop nearby. This allowed the kids to run off some excess energy.

We returned to the port and boarded the boat to Shenzhen.

Last time we came through Shenzhan I saw a Nike factory outlet shop and commented it would be good to look there for tennis gear. John insisted on trying to find it. We got a private taxi who's driver said he knew where it was. We did get to a Nike store, but I'm not sure it was the ame one. I got some tennis shoes, and a skirt at another sports clothing shop in the same building.

We continued on to the airport and flew to Guilin. It was after 10 by the time we reached our hotel, and were unable to get a second room.

Our room had a king-size bed and a small sofa, so we put Tom on the sofa and John, Jack and I shared the bed.

Trip Day 16 - Hong Kong to Macau

Jan 10 - Thursday

A lazy morning in the hotel. Being constantly on the move is starting to get to all of us. John and I also discovered we have left our winter coats behind somewhere - last positive sighting was Shanghai. John's was a cheap one, but mine was a good gortex one from a Katmandu sale.

We took the MTR to the ferry and across to Macau via fast hydrofoil. Unfortunately there is no outside access or viewing area, so you have to sit in your seat like on an airplane, and I spent the whole trip staring fixedly at the tv screen in front to avoid sea sickness.

We took a taxi to our hotel. Macau is subtly different from Hong Kong, but I'm not sure why.

More bedding saga. When we arrived at the hotel we were told there were no extra beds to put in the room. When we checked the room there was 2 single beds only. And they were hard as concrete. However there was 2 spare doonas and pillows so we made a bed on the floor for Jack. This was actually softer than the bed I shared with Tom.

Chinese beds can be really, really hard. I'm really looking forward to getting home to my own bed.

John went out to arrange the next days travel. When he returned we went out for a walk around to look at the city. Jack is getting a little picky about eating from night markets, and we didn't see any restaurants we liked the look of in the area and John had already walked a couple of kilometers, so we returned to the hotel to eat there. This was not a good move as it was expensive, most dishes had chilli, and was not very good.

After dinner, I got cross at both the kids, who were arguing and fighting, at John for making no attempt to settle them, and went out for a walk on my own. Without complaining kids and tired husband I found a number of interesting looking eateries quite quickly. I found several nice bakeries and bought cakes for desert.

On arriving back at the hotel, everyone had calmed down, we ate the cakes and went to bed.

Trip Day 15 - Taipei to Hong Kong

Jan 9 - Wednesday

Breakfast, then taxi to the airport. Flew back to Hong Kong. Really getting sick of airports.

After checking in to the hotel the boys and I went looking for phone accessories in a street I had found out about on the net (John had business calls to make).

I did not manage to find an audio plug converter for the BB, or covers I liked for the BB or iPod. The only thing I got was screen protectors and a noisy toy for the boys.

I took the boys back to the hotel as they were getting tired and ratty.

In Hualien, the waste buckle on my backpack somehow got lost. I needed to look for a new buckle. The hotel concierge suggested the nearby night market, so I left the boys in the hotel room while I went to look. I could not find any, but did pick up a luggage strap which could be threaded through the straps and help take some of the weight.

Back to the hotel for a poor nights sleep sharing a bed with Tom and Jack, who are both restless sleepers.

Trip Day 14 - Taipei

Jan 8 - Tuesday

John went off to catch up with friends again so I took the boys to see Taipei 101 - the world's tallest building.

We took a taxi - we did not manage to use the subway in Taipei because our hotel was a little too far from the nearest station. Getting around in taxis can be challenging, as the drivers don't speak any English. However the map we had showed the building, and it is known as 101 (one-o-one) even by Chinese speakers.

The building was certainly impressive, although expensive (350 NT-nearly 25AUD each for both Jack and I). The audio tour explained most of the features visible through the windows.

The centre of the building has a large wind damper which reduces the building's movements. It is a large heavy metal ball on cables and hydraulic pistons and can be viewed from the middle of the observation deck. This has been nick-named 'Damper Baby' and a cartoon character with a large round head has been used on all the promo items. Very Chinese. They love cutesy cartoon characters.

After we left 101 we went looking for lunch. Before leaving home a friend had sent me the URL for a dumpling place she recommended. It had three outlets in Taipei so we went looking for the one nearest to 101.

Addresses in Taipei are a little odd. Streets are laid out on a grid. The main roads have names, either north/south or east/west of the main axes. They are then numbered in sectors as you move away from the centre axes. Side roads are numbered along with the houses. The address we were looking for was street X East, sector 4, lane 168. This turned out to be quite a large road with lots of side alleys so we were missing part of the address. We jumped b a taxi to try the second address which was in a shopping centre on the main road. My Chinese turned out to be good enough to explain the sector and number.

We found the restaurant and it was worth the hunt. The dumplings were Shanghai style with soup inside the pastry as well as meat. They were very tasty and we stuffed ourselves silly.

We returned to the hotel - hotel name card got us there - and had a rest.

I then took our washing to a nearby laundromat. Clean clothes at last.

I caught up with John. One of the friends he wanted to catch up with was sick, so his morning had not been as good as ours. He had managed to get to a computer store and pick up a second EEE PC for Doug.

Dinner was the night market again. We found fried dumplings this time, very tasty and Jack was happy. The people of Taipei love their food, it is cheap and tasty. It is so easy to over-eat here as you try to taste everything on offer.

Trip Day 13 - Taipai

Late breakfast then off to the National Palace Museum. Tom did get quit bored but we managed to get through most of it.

Afterwards we headed to a computer & electronics strip for some browsing. We picked up cheap bits like headsets and cables but nothing major.

The kids had a few dumplings at the NPM, but we hadn't eaten since breakfast. It was now nearly 6:00 so we went to a night market near the hotel again.

We went back to the hotel and John hit the western bar strip to catch up with friends.

Trip Day 12 - Toroko Gorge

Jan 6 - Sunday

We slept late and only just made breakfast. I must admit I am getting tired of hotel buffet breakfasts, I think I'd rather just eat from roadside vendors, but time was short.

We we arranged for a bus tour for the day. Unfortunately the cross-island highway is closed, so we had to do an up and back trip.

The scenery was as spectacular as I remember, although some sections have been replaced by newer tunnels, including the most spectacular, narrow part of the gorge. This is now a 2km walking stretch, where the busses drop tourists at one end and pick them up at the other.

We had the obligatory stop at a local jade and stone shop, then a stop at the 'beach' for half an hour. This was a stony beach facing the Pacific Ocean. The stones were marble and the surf relaxing, so it was a worthwhile break.

Jack has picked up quite a rock collection which will need to be culled before our next flight. Tom had great fun tossing stones into the waves.

The bus returned us to the station and we returned to Taipei by train. We took a taxi to the hotel and checked in - two rooms this time but unfortunately on different floors.

The hotel has fee wireless and broadband which is great, as the iPod let's me get onto my email, and John van connect up his EEE.

We went to a night market and ate a selection of BBQ meats. It was nearly 10 before we returned to the hotel and got off to bed.

Trip Day 11 - Hong Kong to Taiwan

Jan 5 - Saturday

We got up early and took the train to the airport. We few to Taiwan and caught the bus into Taipei, arriving at around midday.

The earliest train we could get to Hualien was 6:30 so we left the bags and headed off to the Nova Center, which is a 10 floor computer, electronics and camera market.

John found and purchased an EEE pc, and I got a cover for the iPod. Jack got to spend nearly 1/2 an hour playing Halo on an xbox.

An English-speaking assistant helped me connect to the centre's free wireless so we could write out the address of our hotel in Hualien, and told us we could purchase stored value cards at 7-11 stores.

We picked up a couple of wireless access cards, spent the remainder of our waiting time (about an hour) in Starbucks while the kids watched the iPod, then caught our train. John managed to get connected to wifi, but I didn't.

Arriving in Hualien we caught a taxi, checked into our hotel, had a very basic dinner of boodle soup with seafood and retired for the night.

Trip Day 10 - Shanghai to Hong Kong

Jan 4

Walked around the hotel area and had fried bread for breakfast from a roadside stall. Keith and Jessie had been very impressed with the Shanghai Urban Planning Exhibition, so we jumped on the subway for a quick visit.

The exhibition was quite impressive and Tom was facinated by the scale model of the city. It was interesting, particularly as the planners seem to think that within 10 years all the buildings. Will be free standing and have neat little gardens around them - there will be no more rows of dilapidated little shops lining the streets. Somewhat depressing actually.

The rest of the day was spent returning to Hong Kong. We took a taxi to the airport, flew to Shenzhen, bus to HK, arriving around 8:30 pm.

Dinner was once again from the night market, then back to the hotel. John went off to an internet café. He keeps making jokes about Jack having xbox withdrawal, but I think John is having internet withdrawal. He usually spends 2-3 hrs a day reading, emailing, etc. He has had 1/2 an hour every second day or so.

My impresssion of China so far: a lot easier to get around than last time, and no gouging foreigners with extra charges. There was more English on the streets, even if it was just numbers and hello/goodbye. Tom was an endless source of amusement to everyone. There was fewer military around the towns and cities than last time, and fewer bicycles.

Trip Day 9 - Around Shanghai

Jan 3

We slept in, so skipped breakfast in the hotel and set off to explore central Shanghai. We took the subway as there was a station right next to our hotel.

We walked along some of the pedestrian part of Nanjing Road, then had lunch in a fancy Beijing duck restaurant. I took the boys for a ride on a little shuttle train/bus along the length of the pedestrian section. This struck me as no different to a thousand other shopping strips in a thousand other cities.

John went back to the hotel to catch up on business while I took the kids to Renmin (peoples) park hoping to find some open space for them to run. The park was very formal with no open lawn, but there was a large playground area where they worked off some excess energy for a couple of hours. We had a ride on some bumper cars then went looking for lollies for the kids.

We found an electronic games /amusement parlour on the top floor of a shopping centre, and checked out some of the games.

We were just heading back to the subway to catch the train back to our hotel when John's nephew Keith rang. We had been trying to contact them for a few days, but both mobile calls and SMS are patchy in china, especially to/from international numbers.

We took the subway to the station nearest to their hotel then walked 10 minutes. The Shanghai subway is pretty easy to navigate.

We chatted for a couple of hours then headed back to the hotel, had a quick dinner, then off to bed.

Trip Day 8 - Around Shanghai


Jan 2

A business associate of a friend of John's, who has a business in Melbourne but comes from Shanghai, insisted on showing us around today.

He picked us up with car and driver and took us to a shopping district, which is a collection of shops in the Ming style of building. Interesting but very touristy. With William along Jack was able to get some Gameboy games at 1/4 the price originally quoted.

This was followed by the local source for $2 shops to get gloves for Tom. It was much colder than I had expected.

We had a nice lunch with William's wife and friends in a local restaurant, then were taken for a stroll along the river in the Bund district. This qa the first place we encountered beggars in any number and aggressive vendors.

We then went across the river to Pudong and the Oriental Pearl Tower. We went to the top observation level for a panoramic view of the city. Unfortunately a group of about 200 soldiers (they appeared to be recent recruits) were doing the same so it was very crowded.

We returned to the hotel for a rest, then William picked us up for dinner. We went to the Golden Jaguar buffet - a large establishment but good food with lots of fresh dishes (mostly seafood) in local and Japanese style with a few western dishes. Both kids found plenty to like and we ate way more than necessary trying to sample everything.

Thursday, January 17, 2008

Trip Day 7 - Wuhan to Shanghai


Jan 1

Got to sleep in today.

The shower on the boat was above the toilet and very grotty, so we had given it a miss. The hotel was three star, but the bathrooms were clean, the shower large, the water got and plentiful. After so many years of water restrictions, it feels sinful to stand under the shower until your skin wrinkles, but so nice to be clean. The only probelem is we are all running out of clean clothes.

John went out to find a travel agent while tea, biscuits and fruit are once again our only meal.

We took a taxi to the airport and flew to Shanghai. Tom fell asleep almost immediately after take-off and didn't want to wake to wake up. We had the first serious crying since the flight from Melbourne. Not bad as we have been constantly on the go in a foreign country.

We booked a hotel from the airport, then caught the mag-lev train into the city. This train travels at up to 430 km/hr.

The hotel is 4 star and a very good price. Winter discounts are quit generous. We get a single room again as we were told it had 2 double beds. When we arrive at the hotel, the beds turn out to be very small doubles so we get a folding bed as well.

Outside our window the kids see a KFC. As they have been very good about the food, and basically surviving on fruit and biscuits for the last 24 hrs we agree to treat them. We get take away and bring it back to the room, then John and I go down to the hotel restaurant for dinner.

The hotel information folder states that the dinning room can hold 1000. It doesn't look that big, may be 3-500, but it is almost full. We stuff ourselves, and it all comes to less than $50, tastes nice and is well presented. It is undoubtably not top level, but pretty good value.

The kids seem to have behaved in our absence so we end the first day of the new year in Shanghai in some style.

Trip Day 6 - Down the Yanze to the Three Gorges Project (TGP) dam and on to Wuhan


Dec 31

A leisurely start to the day at 7:30am. The boat started and left it's night mooring to take us a little further down river.

This morning's excursion to a spring, and we travel by small boat - two abreast and we all have to wear life vest.

We have a brief 'dragon boat' race where we all have to paddle, but no-one tries very hard or pays any attention to the drum up front. The motors are turned back on and we continue up a narrow gorge to a floating pontoon. We then walk along a very long pontoon up a side gorge to some step which rise a couple of hundred feet up the cliff side to a precarious walkway sticking out from the cliff side which double back along the way we came. I suspect that prior to the flooding the step/walkway went the whole length of the narrow gorge, up one side and back the other.

We finally passed an unimpressive spring and continued back to the mooring. Another musical story was put on for the tourists, then back to the boats. It was an enjoyable walk in the fresh air with great scenery.

When back to the bid boat we continue down river for the last stretch to the dam wall. We we are herded into buses for a two hour tour of one of china's proudest constructions. It is not the longest - that is Aswan, it is nor the highest - I gather the Hoover wins there, but it does have the most concrete!

We continue by bus to Yichang, then transfer to another bus to Wuhan. A number of our fellow travelers from the cruise boat were continuing on and we all traveled together.

We stopped on the way out of town for dinner (4:30) but didn't eat as the only choices were greasy and looked full of chili. We snacked on the last of our fruit and biscuits. The bus was delayed because a group of passengers only decided to eat at the last minute, then wandered out when they were ready, not the slightest bit concerned that the bus was waiting and the driver shouting at them.

The next entertainment was a couple having a domestic - she was standing up and screeching at him. It only stopped when a guy in another seat offered to change seats with her. I don't know what he did but she was royally pissed.

The trip to Wuhan was 4 hrs, then the bus dropped everyone at their hotels. As we were the last drop-off, this added another hour. It was now nearly 11pm.

There was some confusion when we went to check in - phone calls were made and lots of nervous giggling. I suspect the travel company in Chungqing did not send the booking through. We were eventually given two rooms and all sorted fairly quickly.

So we passed the new year asleep in a three star hotel in an industrial city on the Yangtze in the middle of China.

Trip Day 5 - On the Yangze and side river


Dec 30

Slept on and off. After the boat departed the temple, it cruised for a while then stopped. I woke when the boat started again about 6:30 am. Dozed until about 7:30 when all passengers were roused and told we were about to enter the first of the three gorges.

It was barely light and nearly freezing but the scenery as spectacular as promised. While the gorge itself was short and no better than some in Australia, ours don't have one of the longest and most powerful rivers flowing through at pace.

Breakfast had to be purchased. A helpful young woman with some English called Lucy explained what was on the menu and which items we could have more of. You could have as much watery unseasoned congee as you wanted, a boiled egg, two steamed buns (unfilled) and as much pickled veg and peanuts as you could eat. Jack took one look at the huge pile of peanuts and immediately returned to the cabin.

None of us could stand the congee, so Tom and I ate the steamed buns while John ate the eggs. We bought instant noodles for Jack and returned to the cabin to fill up on biscuits and jerky.

Around 9:30 the boat docked and we transferred to a smaller boat for a trip up a side river for what is known as the Lesser Three Gorges tour. Impressive scenery but the inside cabins were smoke filled and outside frigid. It appears there are about 150 passengers on our boat.

Two hous later we pass through the third of these gorges and are then transferred to even smaller boats (it took about 6 of these smaller boats to take all the passengers). As all announcements are in Chinese we don't know what is happening but we just follow the crowd.

We motor further up the ever narrowing gorge. We are treated to a horn played from a precariously perched hut on the hillside, singing girls on a barge and folk songs from our boatman with responses from the crowd. As this all takes place gliding along a blue-green river winding between vertical cliffs it is entertaining and relaxing. This side trip cost is a reasonable 8 Yuan - about 1.20.

We return to the mid-size boat. On the dock where we transfer there are a number of vendors but the only food is small BBQ birds on sticks. John buys half a dozen. Not as plump as quail and including heads and feet, I expect the kids to turn up their noses, but provided I tear the meat off the carcass, Tom tucks in. Eventually even Jack tries some and likes it.

Back in the boat we turn up a different river to the one we traveled up, and half an our later we pull into an obviously new town perched high above the eventual flood level. This means a climb of about 8 flights of stairs from our boat to the roadway.

We climb aboard large electric golf carts (seating about 20) and are raced through town to a replica ancient Chinese village / fort. The houses are mostly closed up, except for ones with food or souvenir vendors. The place has a feel of Sovereign Hill, but without the furniture and working exhibits. It also feels unfinished so maybe they will add more later.

Before returning to the carts we fill up on pancakes, fried eggs, BBQ buns and spiced roast potatoes from roadside vendors.

We return to the mid size boat to retrace our route back to the Yangtze. The kids are bored with looking at cliffs but amuse themselves playing chasey on the outside deck. Then Tom takes off his coat and runs around some more. All the grandmothers are terribly concerned and try to scold him but he just laughs and runs away, which they love. He has learned to say Ni Hao (hello) which wins him lots of friends. He keeps returning to me with nibbles and treats given to him by the passengers. He is a terrible flirt.

John had been up on the pilot's deck for most of the return trip. For some inexplicable reason the boat pilot showed John how to drive the boat and let him do so for about an hour. As the pilot did not speak English and John's Chinese is very minimal I'm not sure how this was accomplished.

Back to our original boat and I get mandarins and bananas from the dock. For the first time I suspect I am ripped off. I could not understand the price quoted, and only have a couple of yuan in change so give a 20, but get no change. Mostly the traders have been very fair.

Some hot food is again on sale in the small dining area although it is only 4:30 pm. John and I eat but the kids don't like the look of it. Jack again has packet noodles and Tom fills up on fruit.

We pass through the second gorge around sunset, and dark falls before we make it all the way through.

Around 8:30 a knock on the door informs us there is another temple tour at 9:30. As Tom is already asleep and John is not interested, jack and I are the only ones to go.

First we are treated to some locals putting on a musical telling something about the river history I think. The singing seems to be quite good although I know very little about traditional Chinese music, but unfortunately it is amplified to the point where the woman's high notes are actually painful. As we are in the back row we slip in ear plugs.

The temple is a working buddhist monastery. We follow the group but are not allowed through one of the rooms. Neither is another woman and her teenage son who turn out to be from Mongolia. We are allowed to wander through the garden and rear museum. It all looks to be post WW2 concrete inside although the outside looks as you might expect.

A couple of cheap souvenirs later and we are back on the boat and finishing up yet another long but fun day.

Trip Day 4 - Explore Chungqing and start our three gorges trip

Dec 29

We beakfasted in the hotel then John went out to change money. The boys and I went for a walk.

John called me about an hour later. He had only been able to get 200 RMB (about AUD65) changed at the bank. He could only get 2000 RMB at the ATM. As we had to pay for our trip and all expenses until we reached Shanghai, this was not enough. So I had to return to the hotel to get my cards and hit the ATM also.

We returned to the hotel to use the internet, and I got a chance to charge my iPod while we did.

We checked out, left our bags at the desk and had lunch at the hotel (again). Jack had liked the beef dish he had last night and was happy to have it again.

As the tour company was picking us up at 2:00, we were limited in exploring this city. From what we saw as well as read, Chongqiing is a city which has undergone most of its growth in the last 50 years and there was very little sign of older settlement.

We did venture out on foot again, and came across a new hotel building in what I think of as the 'modern pagoda' style - all red, blue and gold with lots of curved roofs and big pillars. Other than that the architecture was pretty much basic concrete block style. A few of the most modern building did exhibit some architectural independence - curved glass wall and the like but these could belong in any city in the world.

Our driver picked us up at 1:45 and took us to the tour company office where we sorted out payment and tickets for the cruise.

It was about 2:15 and we were told to return at 4:00. As the office was attached to a hotel at a huge road fly-over intersection there was not much to do. We managed to find our way down and under one road to a park which ran along the riverbank between two roads but had a view of the river. We wandered back to the hotel coffee shop and had a drink while we waited.

We were herded back onto the minibus that had picked us up earlier at 3:45 and driven to a major bus depot, with a stop on the way at a grocery store. Given how much the other passengers were buying we assumed we would be arriving too late for dinner. Stock in the shop consisted of dried and packaged foods. John came out with a selection which included yak jerky - he insists the tour guide on the minibus insisted he buy it - then we returned to the minibus.

We, our luggage, and the other passengers we deposited at the road-side. We were told 'five'. We optimistically assumed this meant 5 minutes. Unfortunately not.

I had been trying to get Tom to say a couple of Chinese phrases: Hello - 'Ni hao' and Thank You - 'Shieh Shieh'. This was the first place that hawkers and peddlers bothered us and Tom picked up his first spontaneous Chinese phrase: Bu yaou (don't want).

The other passengers started looking at their watches when no bus arrived by 5pm. At 5:15 a bus finally arrived and loaded everyone. It then drove around the block and stopped again while tickets where checked and much arguing ensued. I think we had more passengers than seats.

We finally got underway around 5:30 only to get stuck in rush hour traffic followed by endless roadworks.

The motorway we were on plowed straight through the countryside. Endless road cuttings restricted the view (think of the scene in the Cars movie which shows the interstate cutting arrow-straight through the terrain) but the falling dusk ended any hope of seeing anything. Apart from being hilly I could tell very little.

So what had supposed to be a 3 hour ride departing at 3:pm finally got us to our boat at 10. We were shown our cabin, and as hinted we didn't have to share so Tom would get his own bed. We sorted out the key deposit and were given little paper tickets for 'the temple' which was at 11:30. I assumed this was next morning so we all climbed into bed.

The boat was very noisy, lots of talking, card games an mahjhong so I put in some ear plugs.

At about 11:45 the tour guide knocked on all the doors - it turns out the temple tour was that night, so we gave it a miss. This explained why no-one else had gone to bed.

End of another day.

Trip Day 3 - Travel to Chungqing in central China

Dec 28

Breakfast again at the same congee place as yesterday, then we boarded the bus for Shenzhen.

One and a half hours later we arrive at the border post. I think this is some distance into China, but is on a motorway with no exits. We have to take our bags, go through HK immigration (exit), Chinese immigration (entry) and customs. HK residents get much quicker passage and by the time we get to the bus boarding station on the other side there is no sign of our bus or our fellow passengers. A bus company employee rushes up to us and points to 11:30 on his watch. By 11:40 a bus arrives and we continue onto Shenzhen airport, another 20 minutes away.

We arrive in Chongqing and use the travel service in the airport to book hotel rooms (2 doubles) for the night. We also arrange our river trip. John had wanted to catch the hydrofoil, but the travel agent insisted this would mean a very early departure and a poor experience. You actually have to catch a bus for 3 hrs to where the boats depart, and the hydrofoil has very small aircraft style windows with no deck. So we book a 2 day trip starting the following afternoon. We still had to take the 3 he bus trip to where the boats departs unless we want to spend a third night aboard. The girl also insist we don't need a ticket for Tom. We are traveling second class on a local tour boat in a 4 birth cabin and only have to pay for Tom if he has his own bed. The implication is that unless the boat is totally booked out they are not going to put someone else in the cabin with us and Tom can use the 4th bed for free.

Unfortunately we had not come across a bank of china so far. There may have been one at Shenzhen airport - it's quite large - but we were short of time and couldn't look far. So we still only had HK dollars but no RMB. We had to give the travel agent. Deposit in HK$ and promised to pay in full in local currency tomorrow when they would return the HK cash.

The tour company drove us to our hotel where it turned out that each room contained 2 double beds. So after the squash in HK we end up with too *many* beds.

A brief walk around the surrounding streets showed liberal consumption of peanuts. Our Chinese note about peanut allergy was written in the full Chinese characters not simplified, and we were unsure of the literacy of the local food vendors so we ate in the hotel.

I tried on a couple of coats in the market but could not find anything to fit. The stall holders were friendly and not too pushy. The all smiled at Tom and patted him on the head. He took this very well, only turning shy on a couple of occasions.

As neither John nor I had working mobiles, John purchased a couple of pre-paid SIM cards while he was out.

The boys settled in their room without too much trouble, and so we come to the end of day 3.

Both boys are turning out to be pretty tolerant travelers, although I am struggling to answer all Jack's questions such as: How can you rent a country? (after my potted history of Hong Kong's British rule and return to Chinese control) and detailed questions about exchange rates, floating and fixed currencies, the value of money and gold, etc.)

Trip Day 2 - The kids and I go to Disneyland while John arranges travel to China

Dec 27

Our plan is to go to Chongqing and take the Three Gorges trip down the Yangze. Yesterday John discovered it is much cheaper to take the bus across the border to Shenzhen then fly to Chongqing, but this will take longer and he'll have to organise part of it today (yesterday, unbelievably, was still Boxing Day and a public holiday in HK). So we put off departure for 24 hours.

Tom woke around 7am but Jack and John showed no signs of stirring. Tom and I went for a walk. Last night's markets are gone and the streets dingy and dirty. We do find a reasonable looking congee place not far from the hotel so we head back to collect or sleeping beauties. The café does have a menu in English but most of the congee dishes seem to involve pig offal in one form or another. Beef congee and prawn dumplings prove a happy choice and we set off for the day.

While John organises travel and catches up on sleep I take the boys to Hong Kong Disneyland. It is not as good as Dreamland on the Gold Coast, with far fewer rides. There is nearly as much merchandising as there was in Disneyworld, Florida, bu the park is only 1/4 of the size. The kids have fun but we skip a couple of rides as they have wait times of 50 and 75 minutes. We catch the 5:30 parade then head back.

The Hong Kong MTR is fantastic. Trains are clean and frequent, changing lines at interchange stations is always the adjoining platform, the cost is low and the swipe cards work without problems.

A last meal at McDonalds (yes this city overflows with cheap fresh food, but this will be the kids last chance at western food for some time) and we return to the hotel.

As neither John or I manangrd to organise international roaming on our phones before leaving (Doh!) we have been out of touch all day. John has left a note saying he is in the hotel bar. I settle the kids and head down to join him for 10 minutes and a quick beer, then back up to the room. Day 2 ends.

Trip Day 1 - Hong Kong

10:00 pm Dec 25.

Started the trip by not even being able to get on to a taxi company (just busy signal, not even on hold), let alone get one to come to our house. Flight departs 1:30 am so time is short already. We decide to take the car and leave it in the long term carpark. John drops me and the kids at departures, then take the car to the car park while we queue. Definitely the right move, as we progress about 2/3 of the way along the queue by the time he gets back. Check in by a little before 12pm.

Dec 26

Now to kill time at the airport. I take the kids to McDonalds for chips. Tom falls asleep on a bench. I have to carry him through immigration to departure lounge. He wakes up as we board the plane. On board video, food delivery and iPod keep him amused for about 3 hours until he looses it and starts screaming. About 5 minutes later (feels like 5 hours) he falls asleep. One more brief bout of crying, a couple of similar episides from the toddler in the row behind, an no-one in our part of the plane got much sleep. Jack travelled well.

We arrive in Hong Kong at 7:30 am. John changes money only to find out that the smallest note he has is 500 but the biggest note the train ticket machine takes is 100. The customer service counter has a queue of about 10. We finally get change and get one way tickets to Hong Kong station (at 12 Jack is just over the child age and we pay full price for him). John also organises a hotel room.

We catch the airport express to HK station, get off and go to the customer service desk to get our Octopus cards which are stored value cards which allow travel on all HKs public transport. A long walk (about 1km) through tunnels with moving walkways to get to Central station and the MTR (local subway). As hotel check-in is not until 12 and it's only just after 9, John wants to leave our bags. Lonely Planet says there is left luggage at Tsim Sha Tsui East station. This is two stops on the MTR then another km hike underground to a connecting line. When we get there - no left luggage service. So we trek back to Tsim Sha Tsui on the red line to go to our hotel.

It is now 10:00 am and we haven't broken into daylight in HK yet. We finally arise from the subway at and drag our bags the last km to the hotel. We can get the room now (yeah) bur the luggage won't be brought up until after 12. Don't care. The room has a queen size bed and they will bring up a cot later. John thinks the boys can share the cot. Like that's rally going to work.

After seeing our room we head out again to check the prices at Golden Square Arcade to check computer prices. The boys and I had Maccers for lunch - John hit one of the noodle stands. We browsed for an hour or so then headed back to the hotel and the kids and I finally crashed for a few hours.

While we rest John heads out to make travel arrangements to get to China. After sleep we wandered out into the surrounding streets, checked out some markets, and grab some dinner. Already it becomes apparant that travelling with a child with peanut allergy through china will be challenging. The waiter seems to understand the note we have in Chinese and Jack gets noodle soup with chicken wich he likes. Tom has rice and prawns - he's a lot easier to feed. So back to the hotel. I suggest that John take the cot and I share the bed with the two boys. We are all to tired to care about the squashed conditions. Thus ends one of the longest days of travel I've ever had.

My Recent trip to China: Itinerary

Below is a summary of of our recent trip to China.

To call this an itinerary implies forward planning and may be miss-leading. On departing, we had flights booked to and from Hong Kong, and our trip to Taiwan booked but nothing else - no hotels, flights, or anything. We made it up as we went along.

I kept a diary during the trip on my Blackberry Pearl. I tried to write up the day's events at the end of each day, but some entries were written two or three days later. Any spelling mistakes can be attributed to the SureType feature on the Pearl, which doesn't have a fully qwerty keyboard but shares two letters per key.

This is intended for family and friends and I may remove any posts at any time.

Day 1
Explore Hong Kong

Day 2
The kids and I go to Disneyland while John arranges travel to China

Day 3
Travel to Chungqing in central China

Day 4
Explore Chungqing and start our three gorges trip

Day 5
On the Yangze and side river

Day 6
Down the Yanze to the Three Gorges Project (TGP) dam and on to Wuhan

Day 7
Wuhan to Shanghai

Day 8, Day 9
Around Shanghai

Day 10
Shanghai to Hong Kong

Day 11
Hong Kong to Taiwan

Day 12
Toroko Gorge

Day 13
Taipei

Day 14
Taipei

Day 15
Taipei to Hong Kong

Day 16
Hong Kong and Macau

Day 17
Macau and Shenzhen, then on to Guilin

Day 18
Guilin

Day 19
Guilin to Guanzhou

Day 20
Guanzhou, Shenzhen, Hong Kong

Day 21
Hong Kong

Day 22
Home