A week of reading, home improvement, experiments with NAT traversal, and cooking Japanese food.
Our attempts at home improvement continue - our friends were kind enough to lend us their wallpaper steamer, so we've now removed about half the wallpaper in our dining room, in preparation for some renovation work. There's more to go, but so far it has been unproblematic.
More importantly, we made a new order of Japanese ingredients online so we've been cooking Ramen and making fancy Japanese rice all week (try not to think of the food miles). We usually have Nishiki rice from the USA, and while the Japanese brand has great texture, it seems to lack the flavour we like from Nishiki. Perhaps next time we'll experiment with a European alternative.
I've been experimenting with NAT traversal so Dust can connect machines behind a router. This is done routinely by programs using P2P, like Skype, but it's still a messy process.
My first attempt used UDP hole-punching and I had some success making connections. Unfortunately, the Dust sync protocol is stream-orientated and would be annoying to update, it's better suited to TCP. One option could be to layer SCTP on top of UDP, so I tested a userspace SCTP implementation and managed to send some UDP encapsulated messages with it. It's a little awkward, but it works.
Next, I tried Universal Plug and Play (UPnP) which will attempt to discover a router and configure its port-forwarding automatically. Unfortunately, the UPnP protocol uses SOAP, which immediately sets my concentration skipping like a scratched CD (CHICKEN Scheme doesn't have a SOAP client, and implementing SOAP is one of the least fun things you can do with your life). Luckily, I was recommended a UPnP C library (miniupnp) and I wrote bindings to that instead. Now, I can ask the router to open a TCP port for me, instead of attempting to break out with UDP.
My early results with UPnP are promising - in fact it's had a 100% success rate! I've only tested it in my co-working space and a local cafe so far, but let's not quibble about sample sizes.
We finished Technobabylon, a futuristic point and click adventure game - it has great atmosphere and a decent enough story, so if you enjoy cyberpunk I recommend it. I also suggest the previous point and click we played - Gabriel Knight: Sins of the Fathers - where a New Orleans bookstore owner investigates a series of Voodoo murders. The main character is even voiced by Tim Curry!
The UNIX Networking book arrived and I've been reading more of it than I expected. It's a thorough reference without being turgid. If you're about to do some sockets programming pick this up.
After a previous attempt in my youth that foundered on the Council of Elrond, I finally finished Lord of the Rings. This time I had patience and the mixed blessing of three films on my side. The films were a useful tool to untangle the history and lineages of the world, but, at first, I could only imagine scenes based directly on them. As my brain had to work and fill in the extra detail, it soon became easy to create my own world, and thankfully, by the third book, the films felt entirely disconnected. This time I really enjoyed it.
- Fancy getting $5 to enable Flash? Thought not.
Enjoy your weekend!