Sometimes I have to run Windows virtual machines (VMs) on my machine to test new code. I used VirtualBox for a while, but then wanted to switch to something else as I didn't want to be using something owned by Oracle.
Microsoft makes time-limited Windows VMs available for free. I switched to VMWare, but I stopped counting how many times it crashed my whole system. I really wanted to like it, but it's probably the buggiest software I've ever tried to use. Well, apart from anything made by Microsoft. 😜
So, I'm back on Virtualbox. The interface is much simpler and it's been running without issues so far, so that's what I'll use for now. If you know of a better option, please let me know in the comments.
Today is a public holiday in the UK, where most of my time was spent putting together two pieces of flat-pack furniture for our new house. Funnily enough, neither piece was from IKEA where we went yesterday.
First up was a garden storage bin from B&Q. On the outside it stated that it would take 25 minutes to assemble. Maybe if you're a Formula 1 racing team, but it took me a good couple of hours. The instructions were a lot more complicated than IKEA's, and there was a lot of self-tapping screws that had to be pushed through pieces of plastic. I can't say I recommend the experience.
The second piece was a kid's wardrobe from Argos. Again super confusing instructions made the job difficult. Say what you will about IKEA: They have actually put some thought into the design of the assembly of their furniture, and have at least tested and their assembly instructions so that other people can use it.
Growing up in South Africa without any IKEA stores means I still get a little bit excited when going to IKEA. I especially enjoy the meatballs with mash, gravy and lingonberry jam. They're the delightful break between hours of walking along routes designed to take you through every bit of the store.
Going to IKEA with the toddler can be very draining, but he was mostly good fun and we managed to get what we need. Worse was the hour's drive there and back in torrential rain. What happened to all the sunny weather we've been having lately?
The drain in our bath gets clogged with hair very easily, so I started looking into options for preventing hair getting in there in the first place. The best solution so far seems to be the OXO Silicone Shower & Tub Drain Protector, which sits over the pop-up drain. It has a metal piece to weigh it down, and is made from silicone for a better seal. We have the OXO stainless steel squeegee, which works great. They give a lot of thought to their designs and make good products.
So I started thinking to myself – could I 3D print this? I couldn't find anything similar on Thingiverse, so I made a simple dome shape in OpenSCAD with a bunch of holes in it. The first prototype printed in PLA seems like it could work eventually. The PLA is too rigid to form a good seal, so it moves around and debris will get past it. Maybe a good reason to experiment with flex filament? I'll post the design here and on Thingiverse once it works reliably.
Yesterday I described the issue and options surrounding distributing libmtp as part of my node-mtp module. Basically, I don't need to distribute it on Linux as it's already available on most distro's, but it's not available by default on macOS without requiring the user to run brew install libmtp.
I think I have finally found a solution. Looking at the sodium-native post-install script I noticed that they're using the install_name_tool to tell the binaries where to look for their dynamically linked library. The full path is hard-coded into the binary, and you can view the shared libraries used using otool -L <filename>.
The easiest place to edit the linked library paths would be after the Node module is built, but before the prebuilds are generated, so I added the following to the before_deploy step in Travis:
if [ $TRAVIS_OS_NAME = osx ]; then
cp "$TRAVIS_BUILD_DIR/lib/libmtp.dylib" "$TRAVIS_BUILD_DIR/prebuilds/darwin-x64/";
install_name_tool -change "/usr/local/opt/libmtp/lib/libmtp.9.dylib" "@loader_path/libmtp.dylib" "$TRAVIS_BUILD_DIR/prebuilds/darwin-x64/node-napi.node";
otool -L "$TRAVIS_BUILD_DIR/prebuilds/darwin-x64/node-napi.node";
fi
So, if we're building on macOS, we copy the shared library libmtp.dylib into the prebuilds folder and then change the shared library path in our node-napi.node[1] module to point to that file. I also run otool just so that we can check that the path was changed correctly.
our module that is generated by prebuildify --napi ↩︎
Since libmtp is licensed under the LGPL, I'm trying to figure out how I should go about linking and distributing the library with my code without causing any problems. My code is licensed under BSD-2-Clause, and I'd like to keep it that way.
If I understand correctly, as long as I dynamically link to the libmtp library, I'm not creating a derivative work and I can include a copy of the library binaries. Now, do I need to compile my own versions of the libmtp binaries, or can I just copy over the ones installed by Homebrew?
It seems like an important part of LGPL is that people should be able to use a different version of the library with my app. On Linux, libmtp comes preinstalled on most distro's, so I don't mind just linking against that. Unfortunately, on macOS you need to install it first with brew install libmtp. I can't expect end-users to do this, so need to find a way to distribute the library with the app, in such a way that it can be replaced with a different version.
Compared to the previous times we moved house, getting the internet working at the new house was relatively frictionless. What annoyed me the most is that they sign you up to a completely new 18-month contract at higher prices, or you have to pay exit fees in the hundreds of pounds. So they basically have you between a rock and a hard place.
One issue that I have is that our new house, built more than a century ago, has stone walls. WiFi does not penetrate very well through stone walls. The two copper wires that are used to provide our “superfast fibre” internet terminate on the ground floor, while my home office is on the first floor. I'm lucky if I get 10Mbps in my office, while I'm paying for 76Mbps.
My first step was to swap out the ISP-provided router for a proper ASUS DSL router (with three massive antennas on top), but while it now provides better WiFi to the upper floors, it's still pretty slow in my office. After switching to the ASUS router I had to spend 40 minutes on the phone with the ISP to get everything working again, but that's a whole other story.
The next step is to get a WiFi extender, and if that fails I'll maybe get another ASUS router to try out their new AiMesh technology. I want to try powerline networking plugs, but given the age of the house I doubt that the electrical wiring will be up for it.
I managed to drill my first hole into our stone wall today. Our previous house had drywall everywhere, which was a nightmare. I had so many different types of screws and wall fixings for drywall and none of them could hold a decent amount of weight. Today I just drilled a hole, put in a wall plug and attached the wardrobe to the wall with a safety strap. Yesterday I mentioned that you have to pay to get rid of plasterboard here, so not having to deal with it at the new house is great.
There is still a lot of unpacking left to do, but I feel like we are making some headway, and at least I have a home office to work from again. Oh, I'm also happy to report that it's a lot easier to put IKEA furniture together than what it is to take it apart.
This afternoon we handed back the keys to our old rented house. We spent most of the day there cleaning and taking things to the tip. By the end of the day the house looked as good as new. Now we get to do the whole cleaning thing again at the new house, but then also unpack all the boxes that are standing around. Man, moving house is a lot of work!
I had an interesting experience at the tip today when I tried to drop off some pieces of plasterboard that was still in our garage. You're not allowed to place plasterboard in the rubble skip, and have to go to the baling plant next door to drop it off. The baling plant is where all the municipal garbage trucks go, as well as commercial waste.
When I drove into the baling plant, I had to park on a weigh bridge, so that they can measure the difference in weight when you leave to determine how much to charge you. You also get issued with a hard hat and hi-viz vest that you have to wear on site. It felt so over the top for the two pieces of plasterboard I had to drop off, but hey, what can you do?
We're finally all in at the new house! There is still a bit of cleaning left to do at the old house before we return the keys tomorrow. After a lot of self-imposed manual labour we have moved everything ourselves, going back and forth with a rented Volkswagen Transporter van.
I'm just so so glad that everything went well and that there were no big problems during the move. Now the unpacking, cleaning and getting settled starts. Here's to our new home, cheers!