Planet Linux Australia

Syndicate content
Planet Linux Australia -
Updated: 12 min 7 sec ago

Francois Marier: Hiding network disconnections using an IRC bouncer

Wed, 2014-11-26 22:00

A bouncer can be a useful tool if you rely on IRC for team communication and instant messaging. The most common use of such a server is to be permanently connected to IRC and to buffer messages while your client is disconnected.

However, that's not what got me interested in this tool. I'm not looking for another place where messages accumulate and wait to be processed later. I'm much happier if people email me when I'm not around.

Instead, I wanted to do to irssi what mosh did to ssh clients: transparently handle and hide temporary disconnections. Here's how I set everything up.

Server setup

The first step is to install znc:

apt-get install znc

Make sure you get the 1.0 series (in jessie or trusty, not wheezy or precise) since it has much better multi-network support.

Then, as a non-root user, generate a self-signed TLS certificate for it:

openssl req -x509 -sha256 -newkey rsa:2048 -keyout znc.pem -nodes -out znc.crt -days 365

and make sure you use something like as the subject name, that is the URL you will be connecting to from your IRC client.

Then install the certificate in the right place:

mkdir ~/.znc mv znc.pem ~/.znc/ cat znc.crt >> ~/.znc/znc.pem

Once that's done, you're ready to create a config file for znc using the znc --makeconf command, again as the same non-root user:

  • create separate znc users if you have separate nicks on different networks
  • use your nickserv password as the server password for each network
  • enable ssl
  • say no to the chansaver and nickserv plugins

Finally, open the IRC port (tcp port 6697 by default) in your firewall:

iptables -A INPUT -p tcp --dport 6697 -j ACCEPT Client setup (irssi)

On the client side, the official documentation covers a number of IRC clients, but the irssi page was quite sparse.

Here's what I used for the two networks I connect to ( and

servers = ( { address = ""; chatnet = "OFTC"; password = "fmarier/oftc:Passw0rd1!"; port = "6697"; use_ssl = "yes"; ssl_verify = "yes"; ssl_cafile = "~/.irssi/certs/znc.crt"; }, { address = ""; chatnet = "Mozilla"; password = "francois/mozilla:Passw0rd1!"; port = "6697"; use_ssl = "yes"; ssl_verify = "yes"; ssl_cafile = "~/.irssi/certs/znc.crt"; } );

Of course, you'll need to copy your znc.crt file from the server into ~/.irssi/certs/znc.crt.

Make sure that you're no longer authenticating with the nickserv from within irssi. That's znc's job now.

Wrapper scripts

So far, this is a pretty standard znc+irssi setup. What makes it work with my workflow is the wrapper script I wrote to enable znc before starting irssi and then prompt to turn it off after exiting:

#!/bin/bash ssh "pgrep znc || znc" irssi read -p "Terminate the bouncer? [y/N] " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]] then ssh killall -sSIGINT znc fi

Now, instead of typing irssi to start my IRC client, I use irc.

If I'm exiting irssi before commuting or because I need to reboot for a kernel update, I keep the bouncer running. At the end of the day, I say yes to killing the bouncer. That way, I don't have a backlog to go through when I wake up the next day.

Linux Users of Victoria (LUV) Announce: LUV Main December 2014 Meeting: A vain attempt to rescue Australian democracy with a little JavaScript / holiday gifts

Wed, 2014-11-26 17:29
Start: Dec 2 2014 19:00 End: Dec 2 2014 21:00 Start: Dec 2 2014 19:00 End: Dec 2 2014 21:00 Location: 

The Buzzard Lecture Theatre. Evan Burge Building, Trinity College, Melbourne University Main Campus, Parkville.



• Paul Foxworthy: A vain attempt to rescue Australian democracy with a little JavaScript

• Andrew Pam: Holiday gift suggestions for Linux lovers

The Buzzard Lecture Theatre, Evan Burge Building, Trinity College Main Campus Parkville Melways Map: 2B C5

Notes: Trinity College's Main Campus is located off Royal Parade. The Evan Burge Building is located near the Tennis Courts. See our Map of Trinity College. Additional maps of Trinity and the surrounding area (including its relation to the city) can be found at

Parking can be found along or near Royal Parade, Grattan Street, Swanston Street and College Crescent. Parking within Trinity College is unfortunately only available to staff.

For those coming via Public Transport, the number 19 tram (North Coburg - City) passes by the main entrance of Trinity College (Get off at Morrah St, Stop 12). This tram departs from the Elizabeth Street tram terminus (Flinders Street end) and goes past Melbourne Central Timetables can be found on-line at:

Before and/or after each meeting those who are interested are welcome to join other members for dinner. We are open to suggestions for a good place to eat near our venue. Maria's on Peel Street in North Melbourne is currently the most popular place to eat after meetings.

LUV would like to acknowledge Red Hat for their help in obtaining the Buzzard Lecture Theatre venue and VPAC for hosting, and BENK Open Systems for their financial support of the Beginners Workshops

Linux Users of Victoria Inc., is an incorporated association, registration number A0040056C.

December 2, 2014 - 19:00

read more

Michael Still: The Human Division

Wed, 2014-11-26 12:29

ISBN: 9780765369550


I originally read this as a series of short stories released on the kindle, but the paperback collation of those has been out for a while and deserved a read. These stories are classic Scalzi, and read well. If you like the Old Man's War universe you will like this book. The chapters of the book are free standing because of how they were originally written, and that makes the book a bit disjointed. The cliff hanger at the end is also pretty annoying given the next book hasn't been released.

So, an interesting experiment that perhaps isn't perfect, but is well worth the read.

Tags for this post: book john_scalzi combat aliens engineered_human old_mans_war age colonization human_backup cranial_computer personal_ai

Related posts: The Last Colony ; Old Man's War ; The Ghost Brigades ; Old Man's War (2); The Ghost Brigades (2); Zoe's Tale Comment Recommend a book

Andrew Pollock: [life] Day 300: Kindergarten, startup stuff, errands

Wed, 2014-11-26 12:26

I started the day nice and early courtesy of the sun.

I finished off the unit of assessment that I should have finished last week, and get it into the mail. I made a start on the next unit, but was feeling a bit unmotivated, so I walked down to the post office to mail off the previous unit.

My current unit is all about the different styles of homes in Queensland since pre-Federation, and it's actually really interesting. I could spend a lot more time reading the course notes than I really should. It did cause me to look at the homes I walked pass with a new eye.

It was pretty hot again, and I didn't feel up for picking up Zoe from Kindergarten by bike, so I drove over.

I wanted to head out to the Brisbane City Council's regional business centre at Yeerongpilly to see if they had any plans for my apartment building. It turns out it was a bit of a wasted trip, because I could have requested the archive retrieval over the phone if the call centre person I'd spoken to had have known better. Zoe enjoyed collecting brochures from the counter anyway.

The return journey took us close enough to West End, that I decided to make a side trip over there to grab a few things from the food wholesaler I like over there. Zoe had a milkshake, so she was happy.

We got home from that trip and didn't have a lot of time left until Sarah arrived to pick up Zoe. News: Speaker Feature: Donna Benjamin, Dave Chinner, Paul Mackerras

Wed, 2014-11-26 07:28
Donna Benjamin Drupal8 outta the box

3:40pm Thursday 15th January 2015

Donna Benjamin has a collection of brightly coloured open source hats.

She currently chairs the Drupal community working group, sits on the board of the Drupal Association, and works as community engagement director with PreviousNext. She's also been an advisor to councils of Linux Australia, and was conference director for LCA2008 in Melbourne. Donna has also served as President of Linux Users of Victoria, and as a Director of Open Source Industry Australia.

For more information on Donna and her presentation, see here. You can follow him as @LittlemsDrupal and don’t forget to mention #lca2015.

Dave Chinner Programming Considered Harmful

4:35pm Thursday 15th January 2015

Dave is the current XFS maintainer. He is currently employeed by Red Hat and spends most of his time developing new filesystem and storage features. He has been a XFS developer since 2004, and worked on the linux kernel since 2005. He has worked on machines of all sizes - from 2000 CPU machines used in the HPC environment to tiny, highly networked embedded systems in the industrial control industry.

In his spare time, Dave builds and races cars and tries to teach his dogs not to bark at the postman....

For more information on Dave and his presentation, see here.

Paul Mackerras KVM on IBM POWER8 servers

1:20pm Wednesday 14th January 2015

Paul Mackerras works in IBM's Linux Technology Center, where he leads a group of people whose mission is to bring open-source virtualization to IBM's Power systems. Previously he was the Linux kernel maintainer for the PowerPC architecture. He is also the author of the "gitk" commit visualization tool and the maintainer of the PPP package.

For more information on Paul and his presentation, see here.

Tridge on UAVs: APM:Plane 3.2.0 released

Tue, 2014-11-25 14:23
The ardupilot development team is proud to announce the release of version 3.2.0 of APM:Plane. This is a major release with a lot of new features.

The changes span a lot of different areas of the code, but arguably the most important changes are:
  • automatic stall prevention code
  • PX4IO based RC override code on FMU failure
  • I2C crash bugfix
  • new autoland code from Michael Day
  • compass independent auto takeoff

I'll go into each of these changes in a bit more detail.

Automatic Stall Prevention

The automatic stall prevention code is code that uses the aerodynamic load factor (calculated from demanded bank angle) to adjust both the maximum roll angle and the minimum airspeed. You can enable/disable this code with the STALL_PREVENTION parameter which defaults to enabled.

When in stabilised manual throttle modes this option has the effect of limiting how much bank angle you can demand when close to the configured minimum airspeed (from ARSPD_FBW_MIN). That means when in FBWA mode if you try to turn hard while close to ARSPD_FBW_MIN it will limit the bank angle to an amount that will keep the speed above ARSPD_FBW_MIN times the aerodynamic load factor. It will always allow you at bank at least 25 degrees however, to ensure you keep some maneuverability if the airspeed estimate is incorrect.

When in auto-throttle modes (such as AUTO, RTL, CRUISE etc) it will additionally raise the minimum airspeed in proportion to the aerodynamic load factor. That means if a mission demands a sharp turn

at low speed then initially the turn will be less sharp, and the TECS controller will add power to bring the airspeed up to a level that can handle the demanded turn. After the turn is complete the minimum airspeed will drop back to the normal level.

This change won't completely eliminate stalls of course, but it should make them less likely if you properly configure ARSPD_FBW_MIN for your aircraft.

PX4IO based RC override code

This releases adds support for PX4IO based RC override. This is a safety feature where the stm32 IO co-processor on the PX4 and Pixhawk will give the pilot manual control if the main ArduPilot micro-controller fails (or the autopilot code crashes). This is particularly useful when testing new code that may not be stable.

As part of this new RC override support we also have a new OVERRIDE_CHAN parameter, which allows you to specify a RC input channel which can be used to test the RC override support. See the documentation on OVERRIDE_CHAN for details.

I2C bugfix

This release fixes another I2C bug in NuttX which could cause the Pixhawk to lock up under high I2C load with noise on I2C cables. This bug has caused at least two aircraft to crash, so it is an important fix. I hope this will be the last I2C crash bug we find in NuttX! An audit of the code was done to try to confirm that no more bugs of this type are present.

New Autoland code

This release incorporates some new autoland capabilities contributed by Michael Day. The key new feature is the ability to trigger an automatic landing when a RTL completes, which for the first time allows a user to setup their aircraft to land using only transmitter control.

The way it works is there is a new parameter RTL_AUTOLAND. If that is set to 1 and the aircraft reaches its target location in an RTL it will look for DO_LAND_START mission item in the mission. If that is found then the aircraft will switch to AUTO starting at that section of the mission. The user sets up their land mission commands starting with a DO_LAND_START mission item.

There is more to do in this autoland support. We have been discussing more advanced go-around capabilities and also better path planning for landing. The code in this release is an important first step though, and will be a good basis for future work.

Compass independent takeoff code

The auto-takeoff code has been changed to make it more independent of compass settings, allowing for reliable takeoff down a runway with poor compass offsets. The new takeoff code uses the gyroscope as the

primary heading control for the first part of the takeoff, until the aircraft gains enough speed for a GPS heading to be reliable.

Many thanks to all the contributors, especially:

  • Paul and Jon for EKF and TECS updates
  • Bret and Grant for stall prevention testing
  • Michael for all his autoland work
  • all the work on NavIO, PXF and Zynq by John, Victor, George and Siddarth
  • The PX4 team for all the PX4 updates
  • Flaperon updates from Kirill

More complete list of changes:

  • allow GCS to enable/disable PX4 safety switch
  • make auto-takeoff independent of compass errors
  • report gyro unhealthy if calibration failed
  • added support for MAV_CMD_DO_LAND_START
  • added RTL_AUTOLAND parameter
  • disable CLI by default in build
  • new InertialSensor implementation
  • added landing go around support
  • enable PX4 failsafe RC override
  • added OVERRIDE_CHAN parameter
  • changed default AUTOTUNE level to 6
  • changed default I value for roll/pitch controllers
  • added CAMERA_FEEDBACK mavlink messages
  • use airspeed temperature for baro calibration if possible
  • added STALL_PREVENTION parameter
  • fixed handling of TKOFF_THR_MAX parameter
  • added ARSPD_SKIP_CAL parameter
  • fixed flaperon trim handling (WARNING: may need to retrim flaperons)
  • EKF robustness improvements, especially for MAG handling
  • lots of HAL_Linux updates
  • support wider range of I2C Lidars
  • fixed fallback to DCM in AHRS
  • fixed I2C crash bug in NuttX
  • TECS prevent throttle undershoot after a climb
  • AP_Mount: added lead filter to improve servo gimbals
  • Zynq and NavIO updates
  • fixed preflight calibration to prevent losing 3D accel cal
  • perform a gyro calibration when doing 3D accel cal
  • added DO_CONTINUE_AND_CHANGE_ALT mission command
  • added support for DO_FENCE_ENABLE mission command
  • allow gyro calibration to take up to 30 seconds
  • improved health checks in the EKF for DCM fallback

Note: If you use flaperons you may need to re-trim them before you

fly due to the change in flaperon trim handling.

I hope that everyone enjoys flying this new APM:Plane release as much as we enjoyed producing it!

Happy flying!

David Rowe: OpenRadio Part 3 – Filters

Tue, 2014-11-25 13:30

Over the past week I’ve built my own OpenRadio prototype, using the construction notes Mark has put together as a guide.

To help others I measured a few DC voltages and recorded them. I found one small bug in my assembly: one of the flip-flop pins was not soldered correctly, leading to erratic signals. After that I set the LO to receive a 14 MHz signal and managed to receive a carrier from my FT-817, via about 60dB of in-line attenuation. At the moment I am using SpectraView running under Wine as the SDR software, however we really should get a Linux/Open Source SDR program running for the mini-conf. I only have a mono input sound card in my laptop so I’m getting a mirror image of the received spectrum. Still, good enough to get started.

I connected the radio to an external antenna and tuned to a local AM station on 1310 kHz. This sounded very strong but distorted. When I tuned to 7.150 MHz I could still hear AM radio signals, which suggests very strong local signals overloading the mixer. I tested this idea by inserting a 20dB attenuator in line with the antenna and sure enough the AM signal on 1310 kHz became clear and I could no longer hear AM stations on 7.150 MHz.

I could even see the AM signal on my oscilloscope – it measures 1Vrms (20mW) on the antenna terminals! That’s enough to light a LED (10mA at 2V).

However an attenuator is not ideal, so using the tables from my trusty copy of RF Circuit Design I built a simple High Pass Filter to attenuate broadcast signals by about 20dB, but pass other HF signals above 3 MHz. This consists of a 1nF capacitor and two 4.5uH inductors (21 turns on a 7mm diameter pencil) in a “Pi” arrangement. This worked well, the AM signals sound fine and no break through on other HF frequencies.

I also tested Mark’s 27 MHz Low Pass transmit filter, this cleaned up the PSK31 tx signal nicely, 2nd harmonic at least 30dB down with about 1Vrms into 50 ohms (20mW) transmit power. Here is a photo of my OpenRadio with both filters on the right. The larger coils at the top are part of the 3 element 3MHz high pass filter, which then connects to the 7 element 27MHz low pass filter.

Mark and I even had a OpenRadio to OpenRadio PSK31 QSO on the 40m Ham Band! I had about 40mW transmit power on 40m. This was actually NVIS propagation so 100km up and down to the ionosphere and 10km across Adelaide!

So our #2 prototype helps us confirm that the design is working. I’ve followed Mark’s construction notes and made some of my own, and obtained experience in setting up the Arduino and Spectraview software. The broadcast HPF design may be useful for others who experinece strong local interference.

Well done Mark on a fine job designing OpenRadio and writing the support Arduino software. He has put in a tremendous amount of work to develop and test the hardware, written a lot of software, and carefully documented everything on the OpenRadio Wiki. This is a great resource that will be useful to many others. Next step is the kit production. Right on schedule for in January.

Peter Hardy: Building an arduino-based video game controller

Mon, 2014-11-24 23:25

I play a lot of Kerbal Space Program because sandbox games in space is pretty much the greatest idea ever. So in an attempt to enhance the game and build something pretty cool, I’ve spent the last several months working towards building a console to control the game and display telemetry.

My final design is going to be fairly large, but to start with, I wanted to knock up a few of the simpler panels. That gave me a chance to work out how to make the panel hardware, and get the basics sorted out for interfacing with the game through the KSPSerialIO plugin. It’s taken quite a few months on and off to get this far, but this week I finally got the first few panels finished and working.

Basically, you take an Arduino Mega2560, a Mux Shield, and a bunch of switches and knobs and buttons. And then you wire it all up and write some code to make it talk a simple serial protocol over USB. And then, honestly, you giggle gleefully while sliding a throttle lever up and down and watching your rocket change speed like magic.

Now that I’ve sorted out most of the major obstacles for this, I’ve started working on additional panels. There’s still a lot of important controls missing. I’ve got some ideas for translational RCS controls, in addition to the Logitech joystick I usually use. And I’m almost ready to get some PCBs manufactured for a number of seven segment LED displays. In the meantime, this is already pretty fun to mess around with.

I’ve got a few more pictures of the current setup in imgur. And, of course, everything is open source. My ksky repository has all of the source code, panel design files, and a bunch of notes on how it’s put together.

Andrew Pollock: [life] Day 299: Kindergarten and a demo

Mon, 2014-11-24 22:25

We had another bad night's sleep last night, with Zoe waking up at 1:30am. Her bedroom was 27-28°C all night. I've got a pretty good amount of data on her sleep habits now, and it's pretty safe to say that if her room is over 25°C, she's going to wake up between 1:30am and 3am. Time to get some more quotes for air-conditioning I think.

Zoe did have a bit of a sleep in this morning, which allowed me to get ready for the day before she got up. Given I had a Thermomix demonstration to get to, that worked out well.

I half-packed the car for the demo and dropped Zoe to Kindergarten by car, and returned home to finish preparing and practice before I headed over.

I was fairly happy with my delivery, given it's been a little while since I've done one. My main goal today if not a sale was to get a booking for another demo, as I've been weak in that area, and I was successful in the latter, so that was good.

Timing worked out well that I got to Kindergarten right for pick up time. We drove home, and I unpacked the car and got changed into something cooler, and we headed out to try and get some more whole wheat grains from the Indian supermarket that Anshu had shown me. As luck would have it, they were out of stock, so it was a bit of a wasted trip.

We headed home and Zoe watched a bit of TV until Sarah picked her up.

Binh Nguyen: Memorable Quotes - Part 4

Mon, 2014-11-24 21:18
A follow on from:

- Alan Shore: My, uh, best friend has Alzheimer's, in the, uh, very early stages, it hasn't... He is a grand lover of life, and will be for some time. I believe even when his mind starts to really go, he'll still fish he'll laugh and love, and as it progresses he'll still want to live because there will be value for him, in a friendship, in a cigar... The truth is I don't think he will ever come to me and say, this is the day I want to die, but the day is coming and he won't know it... This is perhaps the, the most insidious thing about Alzheimer's... but you see he trusts me to know when that day has arrive, he trusts me... to safe guard his dignity, his legacy, and self respect. He trusts me to prevent his end from becoming a mindless piece of mush and I will. It will be an unbearably painful... thing for me, but I will do it, because I love him. I will end his suffering, because it is the only decent humane and loving thing a person can do.

- "We are strategic but we stop at number crunching, we plan but we don't over manage, we inspire but we don't preach, we code but we're not monkeys." - It was either Otto von Bismarck or Claud Cockburn who said, "Never believe anything until it has been officially denied." Whoever it was, and the internet seems a little confused on the matter, they were on to something. - "Change is a big word that everyone is using. (United States President Barack) Obama uses it, but you have to actually feel it."

- Sandschneider agrees that personal relations have an impact on political relations: "International politics is not a dehumanized process. It is about people coming together. And it is true that it is easier for two people who get along well to negotiate and solve problems than two people who can't stand each other."

- "Skeptics don't make history"

- "Germany won," said Glasman at the debate. "We have a Champions League final between two supporter-owned and democratically governed football clubs. Tradition and the preservation of institutional virtue are a source of energy and modernisation precisely because change and continuity work together; a balance of power is the best system; a negotiated settlement is better than one that is imposed, the domination of any interest violates the demand of what is good; the discovery of the common good between forces that are estranged is the best good of all. It takes longer to get there but the benefits are more enduring." Secondly, for web site owners. Assume the entire world is out to get you. All of it; and everyone living there. It's easier that way! Do whatever you feel necessary to keep your name out of the press. Then do everything that isn't necessary, because it may-well prove to be necessary in the future. And if you're not sure what I mean, get advice, urgently. In his seminal 1931 book, Equality, R H Tawney lamented that the public did not seem resentful of the rich so much as fascinated by their goings-on. Little has changed. For most Brits, stupendous wealth has always been something that is aspired to more than resented. The post-crash fuss about the 1 per cent often seemed to be a civil dispute between its members: well-heeled activists, journalists and union chiefs castigating those who nabbed the best tables in restaurants or pushed up prices of Tuscan villas. And as successive prime ministers have realised, no government anywhere has helped the low-paid by railing against high wages.

The rich, to adapt Jesus in St Matthew's Gospel, will always be with us; the 1 per cent are likely to pull ever further away. But this has its compensations. The lower-paid half of the British populace have never had to pay a smaller share of income tax than today, because the wealthy have never forked out more. And while there is not much David Cameron can do about the rich, there is still plenty he can do about the poor. He doesn't shout about it. But he has rightly concluded that this is where his attention is best focused. "The problem is not ammunition, it's experience," one said, adding: "If we were fighting Americans we would all have been killed by now. They would have killed us with their drone without even needing to send a tank.

"The rebels are brave but they don't even know the difference between a Kalashnikov bullet and a sniper bullet. That weakens the morale of the men," he said. Obama said that "at a time when anyone with a cellphone can spread offensive views around the world with the click of a button," the notion that governments can control the flow of information is obsolete.Obama said that "at a time when anyone with a cellphone can spread offensive views around the world with the click of a button," the notion that governments can control the flow of information is obsolete. Only about 1 in 1,000 Web readers clicks on the average display ad. On Facebook, that number is closer to 1 in 2,000, according to Webtrends. Even ads sent by unsolicited postal mail generate a response rate that is many times higher, according to published industry numbers.,0,4871607.story

- Famous night owls include Winston Churchill, President Obama, Charles Darwin, James Joyce, Marcel Proust, Keith Richards and Elvis Presley. Famous early risers include Napoleon, Ernest Hemingway and George W. Bush.

Professor Jim Horne, of Loughborough University, said: "Evening types tend to be the more extrovert creative types, the poets, artists and inventors, while the morning types are the deducers, as often seen with civil servants and accountants. Every gun that is made, every warship launched, every rocket fired signifies, in the final sense, a theft from those who hunger and are not fed, those who are cold and are not clothed.

This world in arms is not spending money alone. It is spending the sweat of its laborers, the genius of its scientists, the hopes of its children. The cost of one modern heavy bomber is this: a modern brick school in more than 30 cities. It is two electric power plants, each serving a town of 60,000 population. It is two fine, fully equipped hospitals. It is some fifty miles of concrete pavement. We pay for a single fighter with a half-million bushels of wheat. We pay for a single destroyer with new homes that could have housed more than 8,000 people. . . . This is not a way of life at all, in any true sense. Under the cloud of threatening war, it is humanity hanging from a cross of iron.[1][4]

- Decades of reform. Globalisation, and the global financial crisis. The uncertainties of the post-September 11 world. Eric Knight: "Those circumstances are ripe for misinterpretation, for populist interpretation, interpretation that focuses on the surface of things and often misses the deeper logic of what's happening." "Falling in love is very real, but I used to shake my head when people talked about soul mates, poor deluded individuals grasping at some supernatural ideal not intended for mortals but sounded pretty in a poetry book. Then, we met, and everything changed, the cynic has become the converted, the sceptic, an ardent zealot."E.A. Bucchianeri, Brushstrokes of a Gadfly

- "No one ever fell in love gracefully."Connie Brockway, The Bridal Season

- "Have you ever longed for someone so much, so deeply that you thought you would die? That your heart would just stop beating? I am longing now, but for whom I don't know. My whole body craves to be held. I am desperate to love and be loved. I want my mind to float into another's. I want to be set free from despair by the love I feel for another. I want to be physically part of someone else. I want to be joined. I want to be open and free to explore every part of them, as though I were exploring myself."Tracey Emin, Strangeland - "Martin's dream is a vision not yet to be realized, a dream yet unfilled, and we have much to do before we can celebrate the dream as reality, as the suppression of voting rights and horrific violence...has so painfully demonstrated."

- Love is more easily experienced than defined. As a theological virtue, by which we love God above all things and our neighbours as ourselves for his sake, it seems remote until we encounter it enfleshed, so to say, in the life of another - in acts of kindness, generosity and self-sacrifice. Love's the one thing that can never hurt anyone, although it may cost dearly. The paradox of love is that it is supremely free yet attaches us with bonds stronger than death. It cannot be bought or sold; there is nothing it cannot face; love is life's greatest blessing.

David Rowe: Robust FreeDV Part 1

Mon, 2014-11-24 17:29

I’m working on increasing the robustness of FreeDV over HF radio channels, in particular compared to analog SSB.

Why HF Digital Voice so Hard

HF radio channels are bad news for digital data. Here is a plot of the Bit Error Rate (BER) versus Eb/No for two different modems (DQPSK and QPSK) and two different channels (AWGN and HF). Four curves in total, click for a larger version.

Think of Eb/No as the SNR of one bit. It turns out that for a given bit rate, SNR = Eb/No plus a fixed scaling factor. So if you raise SNR by 1 dB. Eb/No goes up by 1 dB. The “CCIR poor” HF channel model I used is from data extracted from the very handy PathSim channel simulator. An AWGN channel is typical for a line of sight VHF: just noise without frequency selective fading.

Curves for two types of modems are illustrated: Differential QPSK (DQPSK), and Coherent QPSK (QPSK). DQPSK is commonly used on HF as it greatly simplifies the demodulator design. However if it can be made to work, QPSK is better. Less power for a given BER.

A couple of things to note:

  1. You need a lot of Eb/No on HF to get a low bit error rate. This explains why reliable HF data needs lots of transmit power. Or you can use a very low bit rate, so each bit has more energy in it. This also makes Digital Voice (DV) on HF hard. For example the FreeDV 1600 mode needs a BER of 2% for an “armchair” copy. Using a 1600 bit/s (800 symbols/s) DQPSK modem that’s an Eb/No of 15dB or a SNR (3kHz noise bandwidth) of SNR = Eb/No – 10log10(3000/800) = 9.2dB.
  2. HF channels are much tougher than AWGN. Looking at the 2% BER line AWGN DQPSK only requires about 6dB, which is 9dB less than the HF fading channel (or 12.5% of the power).
  3. The slope of the HF curve is nearly flat. Adding power doesn’t make much difference to the BER. So you need to add a lot of power to significantly reduce BER. Curiously, it also tells us that the “digital cliff” is more like a lightly sloping hill. As we reduce power the BER doesn’t change much. This suggests that HF DV will gradually get less intelligible as we lower the SNR.
  4. As the HF curves are so flat, a useful approximation is: “Your bit error rate is 10%. The Universe doesn’t care how much power you have. Deal with it”.
  5. Small changes in the AWGN demodulator performance can have a huge effect on BER for HF channels. For example the difference between coherent and differential QPSK is 4-5dB, that’s like increasing power by a factor of 3! You really don’t want an inefficient demodulator on HF.

New FreeDV Mode Concept

I’ve learnt some lessons from thinking about analog SSB. At low SNRs, analog SSB still gets through, however the quality is pretty bad. Lots of noise, words lost in fades, and we tend to yell, repeat things, and use the phonetic alphabet. In other words, the “information rate” slows, there is delay, but we get the message through using “Human” error correction. Eventually.

The digital voice equivalent is a low bit rate speech codec. So in an inspired two hours I quickly hacked up a 450 bit/s Codec 2 mode. Here it is compared to the 1300 bit/s mode used for FreeDV 1600.

Original 1300 bit/s Codec 2 450 bit/s Codec 2

This is a good example of the 450 bit/s mode. It makes a bigger mess of other samples. But hey, it’s preliminary, not the best we can do at 450 bit/s. I was shooting for something right on the edge of intelligibility, as that’s where SSB is at low SNRs.

As the bit rate is so low, we have a lot of options. For a start we are 10log10(1600/450) = 5.5dB better off in SNR than the FreeDV 1600 mode. Secondly it frees up bandwidth to apply FEC. So I’m experimenting with a powerful LDPC code from the CML library suggested to me by Bill Cowley, VK5DSP. The Peak to Average Power Ratio (PAPR), or crest factor, is also reduced as we have less FDM carriers.

For this new mode I’m trying coherent QPSK rather than differential QPSK. This is unusual for FDM modems on HF, but has big gains as shown above. Coherent QPSK requires much less power than differential QPSK for the same bit error rate. It does require some overhead, in the form of “pilot symbols”. These are known symbols we transmit in order to estimate or probe the channel phase and amplitude.

I’m using a half rate LDPC code, so the bit rate over the channel is 900 bit/s. There are 9 carriers at a symbol rate of 62.5 baud, and every 5th symbol is a pilot. No high power BPSK pilot tones are required, the pilot symbols can be used instead to estimate the frequency offset and provide frame synchronisation.

OK, so that takes care of low SNR performance – i.e. getting poor quality, but intelligible speech through a HF channel.

Lets now try to extend that to obtain higher voice quality on high SNR channels:

  1. The uncoded error rate will be less than 1% so we disable the LDPC decoder. Now we don’t have to wait for the LDPC parity bits, therefore the decoding delay will be small (similar to FreeDV 1600). On poor channels we click on the “FEC” check box and the delay increases to about 1 second but the system works on low SNR channels. Remember with low SNR analog SSB you are already repeating yourself and using phonetics, so the effective delay is also in the order of seconds compared to an armchair SSB copy.
  2. We can send auxillary carriers to add to the 450 bit/s Codec 2 information and improve the speech quality. For example extra LSP vectors, or gain and pitch bits. If these carriers are 6dB lower than the core information, the total power will only increase by 10*log10(1+0.25)= 0.5dB. So if we get a few s-points above the system “floor” – quality will increase – just like SSB.


For the past year I’ve had several attempts at an improved FreeDV mode, hitting several dead ends. “Research and Disappointment” at it’s finest. However it’s started coming together over the last few months.

A key assumption is that low quality at low SNR is OK. This assumption has yet to be tested in real time conversations. The other biggie is coherent demodulation, this works much better than differential PSK. However it’s unusual, and might break with very fast fading. We shall see.

My current ideas are complex and may be wrong. So I want the “minimum effort” path to test them. This still meant writing a bunch of high-level Octave simulations over the course of several months, each building on the next. For now I’m ignoring issues like delay, real time operation, and many other details. The focus is on getting a digital voice signal through poor HF channels. That’s the toughest problem we face. Everything else can be refined later.

To make the modem work on real channels I had to develop new frequency offset and coarse timing estimation (frame sync) code. Just recently I made it to the point where I have wave files that can be played over real HF channels, then processed with off-line Octave simulations.


Thanks to Tony VK3JED, Mel K0PFX, Gerry N4DV, and Michael DL2FW for helping me collect off air samples. This is tricky, as there is no real time feedback. The guys would send me a sample, I would process it, then I would get back to them with feedback. I had to ask Mel and Gerry (located 800 miles apart) to reduce their tx power as I was getting zero bit errors all the time. Eventually they settled on a few watts of tx power, and pointing their beams in the wrong direction. That way I could actually see some bit errors and get a real feel for the “floor” in the new waveform.

Let work through the results for one example that had an average SNR of -5dB:

Off Air FreeDV modem signal Reference (Error free) Codec 2 at 450 bit/s -5dB Average SNR Decoded 450 bit/s Codec 2 SSB over same channel

The off air signal has a strong high frequency interfering SSB signal that makes our modem signal hard to hear, it’s lower down coming in and out of the noise. The demodulator filters that out that SSB signal OK. The modem signal decodes successfully about 50% of the time, there is a big chunk in the middle missing as it disappears into the noise. Not much I can do about that. The SSB signal is at about the same peak power. I can make out the phonetics and a few words in the SSB.

I’ve been using the FreeDV GUI program to visualise the off air signal:

You can see the spectrum shows zilch at the moment the screen shot was captured, our poor little modem signal has “submerged”! The waterfall below shows the signal over time. It’s not pretty.

The next few plots show the modem at work:

Note the diagonal lines in the “Estimated HF channel phase”. This indicates a small frequency offset. They take about 100 frames (2 seconds) to wrap around so that’s a 0.5Hz frequency offset. You can see the “channel amp” and “SNR est (dB)” diving in the middle of the sample, and the bit errors going crazy at the same time.

The FEC frames are 576 bits long. The FEC breaks down at about 10% errors or 60 bit errors in a single frame. You can see that quite clearly in the bit error plots. The “Coded Errors” (output from the FEC decoder) are zero until we hit about about 60 un-coded errors/frame.

Further Work and How You Can Help

Lots more to go however this is looking promising. The rest is engineering. I’d like some help with this, from people with skills like C programming, basic statistics (like understanding what variance is), and Octave.

Without any help, this is what my lonely future looks like for the next 6 months!

  1. Improve the speech quality of the 450 bit/s Codec 2 mode, e.g. better vector quantisation, adaptive equalisation and filtering of the input speech.
  2. Add auxiliary carriers to improve speech quality in high SNR channels, and heuristics to know when this information is safe to use.
  3. Refine the modem algorithms to reduce delay. Re factor Octave code. Port Octave code to C.
  4. Tune LDPC decoding.
  5. Experiment with clipping/compression to improve PAPR, and interleaving to improve performance in fast fades.
  6. Integrate into the FreeDV GUI program and the SM1000. For example will the LDPC decoder run on the STM32F4?
  7. FreeDV maintenance, re-factoring.

Some more blue sky ideas for further R&D:

  1. Given the relatively short block length, is an LDPC code the best choice?
  2. Investigate the possibility that 8PSK may perform close to QPSK on fading channels (unlike AWGN channels). This would have fewer carriers so better PAPR, so may out perform QPSK. Thanks John Gibbs NN7F for this idea.
  3. Investigate FDM using continuous phase modulation like GMSK that can use non-linear power amplification. This will use at least twice the bandwidth of QPSK, however given our low bit rate this is still quite feasible in a standard 2000 Hz SSB channel. This would be a mode that can drop “straight in” to FM VHF radios. Thanks again John for pointing this possibility out.
  4. Investigate FEC codes that can be configured to reduce PAPR, thanks Gregory for reminding me about this.

If you can’t code you can also donate to the this project via PayPal (which also allows credit card donations):

Donation in US$:

Or you can buy a SM1000 when they become available at the end of this year. Commercial sponsorship is very welcome but everything I write must be LGPL or equivalent.

I do this work full time and don’t have much other income right now. What did you spend on your last piece of radio gear? How does it compare to a project than will bring you a new, 21st century voice mode? Does it support free and open radio or were you paying license fees for the software in that radio?

BTW I also need a second hand ThinkPad X220/X230 laptop if anyone is feeling especially generous! They can be had on for around AUD$400. Simulations are a bit slow on my 2008 vintage X200 model and I think the fan is dying!

Sridhar Dhanapalan: Twitter posts: 2014-11-17 to 2014-11-23

Mon, 2014-11-24 01:27

Ben Martin: Terry: Updated Top Shelf

Sun, 2014-11-23 19:25
The Kinect is now connected much closer to the tilt axis, giving a much better torque to hold ratio from the servo gearbox. I used some self tapping screws to attach the channel to the bottom of the Kinect. Probably not the cleanest solution but it appears to mount solidly and then you get to bolt that channel to the rest of the assembly. For a closer look the Logitech 1080 webcam is mounted offset from the Kinect. This should give an enjoyable time using the 1080 RGB data and combining the VGA depth mask from the Kinect into a point cloud.

The camera pan/tilt is now at the front of the top shelf and a robot arm is mounted at the back of the shelf. The temptation is high to move the arm onto a platform that is mounted using threaded rod to the back of Terry. All sorts of fun and games to be had with automated "pick up" and move tasks! Also handy for some folks who no longer enjoy having to pick items up from the ground. The camera pan/tilt can rotate around to see first hand what the arm is doing, so to speak.

The wheel assembly is one area that I'm fairly happy with. The yumo rotary encoder runs 1024 P/R and it is attached using an 8:1 down ratio to give an effective "ideal world" 13 bit precision. Yes, there are HAL effect ICs that give better precision, though they don't look as cool ;) The shaft of the motor is the axle for the wheel. It is handy that the shaft is not right in the centre of the motor because you can rotate the motor to move the wheel through an arc, and thus adjust the large alloy gear until it nicely mates with the brass gear on the rotary encoder.

Lower down near the wheels is a second distance sensor which is good for up to around 80cm distance. The scan rate is much slower than the Kinect however.

Things are getting very interesting now. A BeagleBone Black, many Atmel 328s on board, and an Intel j1900 motherboard to run the SLAM software.

Peter Hardy: Making laser-cut backlit control panels

Sun, 2014-11-23 15:25

Most of my current arduino projects have had pretty ad-hoc enclosures. You can go a long way with a Jiffy box and a Dremel. Then I bought an embossing label maker to add some text to my boxes (and, OK, everything else — when you have an embossing label maker everything starts to look like an unlabeled thing). My most recent work though has been a pure human interface device. There’s a lot of buttons and switches and displays, and one of my goals for it was to create an enclosure that looked absolutely stunning.

I’ve eventually settled on building backlit panels from laser-etched acrylic, based on a technique I picked up from the MyCockpit forum for simpit builders. Flight sim geek communities are a great resource for learning how to build nice control panels, who knew? I’ve been refining my process to get decent results with a single pass through the laser cutter in my local maker space.

  • Acrylic sheet. I use 3mm opal translucent sheet. A square metre cost me $80, and now I have more acrylic than I’ll ever need. At current estimates, including all the failed panels I’ve cut, a half metre is still very generous.
  • Spray paint. I’m using a matt grey primer that claimed to be suitable for plastics. It’s been working well so far.

It’ll also need very fine grit sandpaper and masking tape.

Prepare the acrylic

Freshly painted panels, ready to cut.

I cut my sheets in to 250mm square sections. For each section, remove the backing paper from one side and spend a minute or so sanding the face very fine wet and dry paper to give the paint a surface to adhere to. Then apply three coats of paint. At the end you’ll have finished panels ready to cut. And, if you’re like me, some freshly painted furniture to boot.

Design your panel

This part was pretty incredibly frustrating for me. I started out working with LibreCAD, a reasonably full-featured 2D CAD drawing program. That made drawing precise outlines and holes for cutting a breeze, but it’s not particularly good at working with text. I wanted real truetype fonts on my panels, and getting LibreCAD to import font faces in a form it can work with ended up beyond me.

My current workflow is to draw text that I want added in Inkscape. Then convert the text to paths, and export it as a DXF file. That file can then be imported to LibreCAD as a block and placed in my etching layer. The software driving my laser cutter doesn’t like the DXF generated by LibreCAD though, so there’s another step importing the final file in to Inkscape to collapse layers, remove dimensions and save a file that can be downloaded to the laser.

That… mostly works. Sometimes the text paths LibreCAD saves just don’t generate easily filled objects and the laser gets confused and it all goes pearshaped. Right now I’m still loading the text blocks in to LibreCAD but only using them as a visual guide. When doing final prep for cutting I still replace the text on the panel in Inkscape, to ensure a happy etching experience.

Cut the panel

Tuning etching settings for good clear lettering

I did a dummy cut with holes and a combination of angular and round lettering in all of the sizes I needed. I was using a couple of different sized fonts, and it took me a little while tweaking settings to get a result that looked sharp across the board.

When cutting panels, I order the job so that all of the engraving is first, and the cut for the outline is last. Even though the cutting bed is stationary, warps in the perspex can lead to the panel shifting slightly after the outline is cut.

I learned the hard way that getting excited and removing the paper from the back of the perspex at this point is not a great idea.

Final painting

The panel is finished, but now has raw edges that look ugly and leak light when it’s backlit. Apply masking tape to the front side, along the edges (leaving it overhang but not stuck to the side of the panel), and covering holes. Then place it face down and apply another couple of coats of paint along the edges.

I’m still working on getting this part right. Previous attempts without the masking tape led to paint bleeding under the edge, leading to visible paint drops or the newspaper I had under the panel sticking to the face. Initial tests with the tape look pretty good though.

Once the paint has dried, the backing paper for the panel can be removed and components mounted.

My most recent finished panel.

Next steps

I’m still working on the best way to backlight these panels. Simply lighting up the inside of the enclosure looks good, but seems a bit bland to my mind. I want to start experimenting with with individually lit panels, possibly by countersinking LEDs in to the back of the panel. Mostly because I’m keen on flickering panels, and changing panel backlight colour. But pretty pleased with the overall look so far.


Matt Palmer: You stay classy, Uber

Sun, 2014-11-23 11:26

You may have heard that Uber has been under a bit of fire lately for its desires to hire private investigators to dig up “dirt” on journalists who are critical of Uber. From using users’ ride data for party entertainment, putting the assistance dogs of blind passengers in the trunk, adding a surcharge to reduce the number of dodgy drivers, or even booking rides with competitors and then cancelling, or using the ride to try and convince the driver to change teams, it’s pretty clear that Uber is a pretty good example of how companies are inherently sociopathic.

However, most of those examples are internal stupidities that happened to be made public. It’s a very rare company that doesn’t do all sorts of shady things, on the assumption that the world will never find out about them. Uber goes quite a bit further, though, and is so out-of-touch with the world that it blogs about analysing people’s sexual activity for amusement.

You’ll note that if you follow the above link, it sends you to the Wayback Machine, and not Uber’s own site. That’s because the original page has recently turned into a 404. Why? Probably because someone at Uber realised that bragging about how Uber employees can amuse themselves by perving on your one night stands might not be a great idea. That still leaves the question open of what sort of a corporate culture makes anyone ever think that inspecting user data for amusement would be a good thing, let alone publicising it? It’s horrific.

Thankfully, despite Uber’s fairly transparent attempt at whitewashing (“clearwashing”?), the good ol’ Wayback Machine helps us to remember what really went on. It would be amusing if Uber tried to pressure the Internet Archive to remove their copies of this blog post (don’t bother, Uber; I’ve got a “Save As” button and I’m not afraid to use it).

In any event, I’ve never used Uber (not that I’ve got one-night stands to analyse, anyway), and I’ll certainly not be patronising them in the future. If you’re not keen on companies amusing themselves with your private data, I suggest you might consider doing the same.

Andrew Pollock: [life] Day 296: The day of walking errands

Sat, 2014-11-22 21:25

We did a rather huge amount of pedestrian travel today.

I had the car booked in for a service, so after Sarah dropped Zoe off, and she'd watched a bit of TV, we drove over to Newstead to drop the car off.

I'd packed Zoe's scooter in the boot, and once we left the car dealership, we headed over to the Teneriffe cross-river ferry, which is currently conveniently depositing passengers at Hawthorne. Even more conveniently, the ferry was waiting for us as we arrived.

I'd booked haircuts for us at 10am, and we comfortably made it to the hairdresser with about 10 minutes to spare.

After that, it was time to head over to Tumble Tastics, which was quite close to the hairdresser's. We ended up getting there about 20 minutes early, but that was fine.

After Tumble Tastics, we headed home for lunch, and the car was ready to be picked up, so after a brief rest, we headed out again.

This time, Zoe said she wanted to walk, rather than ride the scooter, so we headed out on foot, reversing our trip.

We were in no particular hurry, so we stopped for a little play in a park over at Newstead that we'd discovered in the morning, and then picked up the car. It was a very hot day, so it was nice to get out of the heat.

On the way home, I discovered that the Hawthorne Markets were on. I had some paperwork to drop off to Zoe's school, so after I filled that out, we walked over to her school, dropped it off, and then walked back to the Hawthorne Markets.

I bumped into one of my fellow Thermomix Consultants, Katia, and got introduced to one of her friends, who it turns out, was at the very first trial Tumble Tastics class we went to. She also had a daughter named Zoe. So my Zoe knocked around with this Zoe and Katia's kids, and we grabbed some dinner there. It was a nice night out.

I love the feeling of community that I have now. I don't think I've had this feeling of being so well established in a place, within such a walking distance, ever before. I am truly grateful for living in such a wonderful neighbourhood and community.

Lev Lafayette: A GnuCash Tutorial

Sat, 2014-11-22 17:29

Tutorial presentation of GnuCash given to the CPA Young Professionals group at Victoria University, 19th November, 2014

Craige McWhirter: Craige McWhirter: An Unexpected Journey

Fri, 2014-11-21 22:28

Earlier this year I was braced for a hard and personally gruelling year. What I didn't expect however, was that after my return to Sydney that an old friend would reveal how she truly felt about me. It was a brave moment for her but fortunately for us both I'd harboured the same feelings toward her.

How was I to know,

That you would rise,

Like a burning angel in my eyes

As expected, this year has certainly lived up to and exceeded those difficult expectations to be undoubtedly the most challenging year of my life. However I've been fortunate to balance that by now having the most amazing woman by my side.

Fiona's love, support, advice and humour has been an unprecedented experience in my life. I've found a lover and a partner in crime with whom I've formed an indomitable team as we've had each others backs through some rather unbelievable trials.

Which brings me to Paris. We walked to Pont des Arts, the bridge across the Seine and added our padlock at the centre of the bridge, amongst the thousands of others and made a wish.

Then we kissed.

I asked Fiona what she wished for but was politely told it was a secret.

I said I would tell her what I wished for, then dropped to one knee and paused for long enough to read the unmistakeable expression of "What are you doing? Get up you idiot!" written across Fiona's face before I produced an engagement ring and asked Fiona to marry me.

Fiona said "yes!".

Before too long,

We'll be together and no one will tear us apart

Before too long,

The words will be spoken I know all the action by heart

Earlier in the night I'd slipped an engagement pendant into Fiona's pocket which she discovered and put around my neck before we celebrated with a meal opposite Notre Dame cathedral.

I still shake my head in disbelief at how two such independent people have found themselves in a place where they cannot imagine their life without the other. Yet that's where we are.

Our life going forward is going to complicated and challenging, however there will be an awful lot of love and we'll have each other's backs all the way.

Thank you Fiona, for bringing such love and light into my life.

I've found the one I've waited for

All this time I've loved you

And never known your face

All this time I've missed you

And searched this human race

Here is true peace

Here my heart knows calm

Safe in your soul

Bathed in your sighs

Want to stay right here

Until the end of time

Sometimes, dreams do come true.

Andrew Pollock: [life] Day 295: A big long play date

Fri, 2014-11-21 22:25

I met Kelley at the first P&C meeting I went to, and she immediately took me under her wing, and later gave me a bit of a tour of the school, and some tips on Prep teachers and whatnot. I then proceeded to run into her nearly every time I went near the school.

She has a daughter, Chloe, starting Prep next year, and an older daughter in Year 3, and she's fairly well entrenched in the school community.

I thought it'd be good for Zoe to get to know Chloe a bit better, so she's one more person she knows at the start of school next year, so we had a play date at her house.

The girls seem to get along well, and Kelley's really nice. We have similar views in a lot of areas, and her husband works in IT security, so I think this could be the beginning of a beautiful friendship.

After lunch, due to the heat, we decided to bike down to the Colmslie Pool together. Kelley has a bike adapter trailer thing that couples a normal kid's bike to the back of hers, with the front wheel slightly elevated.

Zoe made me very proud at the pool, doing a kneeling dive into the water and swimming half the length of the indoor pool. Her swimming continues to progress in leaps and bounds.

We had a good time at the pool, and then biked back to school so Kelley could pick up her other daughter. We just hung out at the pool a bit early for swim class, and then biked home afterwards.

Sarah picked up Zoe, and then I headed out for the second Thermomix cooking class I've had to help out with. This one was a bit more fun for me because we had a great number of consultants on hand to share the workload, and I wasn't on washing up duties this time.

Andrew Pollock: [life] Day 294: Babysitting play date, final Prep introductory day and an afternoon play date

Fri, 2014-11-21 17:25

Wednesday was yet another full day. It's no wonder I'm feeling so tired, and have a backlog of blogging.

Mel had asked me if I could look after Matthew and Olivia for a couple of hours in the morning. Matthew and Zoe get along fabulously, and the time worked well, so I was happy to help out.

Zoe seems to be going through a bit of a nightmare phase at the moment. I'm sure the heat isn't helping. Zoe woke up with a nightmare about Smudge dying at 2am. Her room was 27°C at the time. 2am seems to be the nightmare time. I got her resettled within about half an hour. I really think I'm going to have to look into air-conditioning her bedroom sooner rather than later.

So I was a bit of a zombie when Mel dropped the kids off at 9am. Fortunately Matthew and Zoe just went off and played together, and Olivia was happy to just hang out with me. She's such a sweet little 2 and a half year old. She kept calling me "Lucy's Dad" or "Sophie's Dad" or something not quite right. It was very cute.

Mel was going to stay for lunch, and I'd been feeling adventurous, and made some hamburger buns and hamburger patties throughout the morning, with everyone running amok around me.

I improvised a bit on the hamburger buns, using a mix of baker's flour and whole-wheat flour and buckwheat. The result still turned out quite satisfactory.

After lunch, Zoe and I headed over to school for the final Prep introductory afternoon. Zoe wanted to walk today. It was a "best of" day for the fine motor skills activities, and Zoe was rather chuffed to get picked as a leader for the gross motor skills activities.

One of the Prep teachers (the one I hope Zoe gets next year) who had remarked on Zoe's timidity on the first day remarked today about what a different girl she was now.

Walking home, there were a ton of ibis on the football field we walk past, so Zoe had a great time running across the field chasing them all. She's getting a lot better about walking longer distances now.

Eva and Layla came over for a play with Tanya in tow after school, and the girls had a fun afternoon. A massive storm rolled in, and so I went and picked up Anshu from the ferry terminal. Once the storm abated, Tanya left with the girls, and then Sarah arrived to pick up Zoe.

Anshu tagged along with me to the P&C meeting. Not the most fun "date night", but I was glad to have another opportunity to attend a P&C meeting before the end of the school year.