Planet Linux Australia
Today was busy. I didn't end up getting a chance to do any Debian work, but I did do some satisfying hacking, which I'll write about separately once I've got it slightly less... hackish.
Zoe slept solidly for about 12 hours. I was a bit slow getting going this morning, and that made us a bit late getting to Kindergarten. Drop off was nice and quick and easy though.
I was supposed to have a coffee with my downstairs neighbour, Michelle, who was in the process of moving out. She had asked if she could borrow an Allen key to dismantle her bed, so I popped down with that when I got home. She'd also managed to misplace her wallet, and thought it might be at her boyfriend's house. Long story short, we ended up over there with a ladder to get into his house and (fortunately) retrieve her wallet before we ended up having our coffee.
After that, I did some hacking on my phone to try and integrate NFC with HabitRPG, which ended up being successful, but not ideally so. I managed to get that going before just before Anshu arrived to come with me to Kindergarten to pick up Zoe and Megan.
I'd asked the girls if they wanted to help bake some carrot and kale muffins when we got home, but they quickly got distracted doing some craft, so they did that while Anshu and I started on the muffins. Part way through, they decided they wanted to help after all, so they took turns throwing ingredients into the Thermomix. They then proceeded to lick the bowl clean while watching them rise in the oven.
Zoe wanted to watch an episode of Spiderman on her tablet, and so did Megan, so I put it on the TV with the Chromecast and they happily watched it while the muffins finished baking.
After that, Zoe and Megan went for a scooter around the block with us while I put a letter in the mail and picked up some mushrooms from the Hawthorne Garage. By that stage Sarah was on her way to pick up Zoe, so we got home and got Zoe organised to get picked up.
Sarah picked up Zoe, but Jason was held up in traffic, so Megan came back upstairs and watched some more TV until Jason arrived.
It was a nice, busy afternoon, which went quite quickly.
I've been there. I was unemployed for six months in late 2000. I tried to get benefits, and after spending every day trying to find work so that I could tick off my twenty-five job searches a month I was told that since I had shares I didn't qualify for assistance. In other words, you can't save, you can't have any reserves, you have to be scraping the bottom of the barrel yourself before you get any money from the Government.
So I just didn't bother. I didn't show up to Centrelink again, and they (presumably) removed my name from the list of unemployed. Howard at that time was trumpeting the work he was doing to reduce unemployment and kept pointing to the unemployment figures. No-one looked at the number of jobs at the same time. I think a few people pointed out at the time that the worse of his policies - which match those of the Coalition today - were just designed to punish the unemployed and make them into a cheap work force rather than actually get more jobs.
It's especially poignant since the Coalition also wants to sign into law trade partnerships that send jobs overseas (by making it uneconomical to manufacture things here in Australia), denying climate change and cutting spending on renewable energy (stopping the entire renewable energy sector from investing and thus losing jobs), cutting funding for education and health (as if States are suddenly going to find that money somewhere - more jobs lost), and telling Toyota and Holden that they get nothing to keep people employed here in Australia.
It's been well pointed out that there only about 146,100 jobs for 741,700 unemployed people. But the government's own way of calculating this only thinks a person is unemployed if they actively looked for work in the week of being surveyed - they identify an entire group called "currently inactive (not in the labour force)" and then coyly ignore that group entirely, not even mentioning it on the page.
That group comprises a lot of people, some of who need help. It's the long term unemployed who have given up on the mindless form-filling, tracking and justification required for government payments. It includes mothers who stay at home full time to care for their children (which is a full time job in my opinion). It includes lots of disabled people. It includes people on pensions. And it's that group that seems to be conveniently ignored by the Coalition in their War On Bludgers.
- “Ongoing exposure to air pollution will cut months from the life expectancy of Sydneysiders, a new report says.” http://t.co/ebHFkNXy98 23:59:00, 2014-08-03
- With new business challenges like the consumerisation of IT, the role of the CIO is more important than ever http://t.co/glBp8BNrN5 14:19:01, 2014-08-02
- A short note to the new philanthropist looking to support education and technology initiatives in the developing world http://j.m… 00:01:14, 2014-08-02
- The USA is projected to spend $10b on education technology this year. One school is going the other way. http://t.co/YqDqJn2D6a #edutech 14:19:03, 2014-08-01
- UK makes ODF its official documents format standard. When will Australia similarly act in the public interest? http://t.co/Q5H4iWs1C4 14:19:00, 2014-07-31
- Help stop Adani from destroying the Great Barrier Reef http://t.co/mQK4FLY0uV #auspol 16:33:12, 2014-07-30
- UN Human Development Index scores Australia high for quality of life but low on climate change progress http://t.co/f1eCzpYC3N 14:19:04, 2014-07-28
There are numerous C async I/O libraries; tevent being the one I’m most familiar with. Yet, tevent has a very wide API, and programs using it inevitably descend into “callback hell”. So I wrote ccan/io.
The idea is that each I/O callback returns a “struct io_plan” which says what I/O to do next, and what callback to call. Examples are “io_read(buf, len, next, next_arg)” to read a fixed number of bytes, and “io_read_partial(buf, lenp, next, next_arg)” to perform a single read. You could also write your own, such as pettycoin’s “io_read_packet()” which read a length then allocated and read in the rest of the packet.
This should enable a convenient debug mode: you turn each io_read() etc. into synchronous operations and now you have a nice callchain showing what happened to a file descriptor. In practice, however, debug was painful to use and a frequent source of bugs inside ccan/io, so I never used it for debugging.
And I became less happy when I used it in anger for pettycoin, but at some point you’ve got to stop procrastinating and start producing code, so I left it alone.
Now I’ve revisited it. 820 insertions(+), 1042 deletions(-) and the code is significantly less hairy, and the API a little simpler. In particular, writing the normal “read-then-write” loops is still very nice, while doing full duplex I/O is possible, but more complex. Let’s see if I’m still happy once I’ve merged it into pettycoin…