Stupid stupid stupid. The inputs and outputs of the uCurrent Gold are not isolated and both negative binding posts are connected with a tiny trace. Connecting the uCurrent Gold in series with the positive lead to the circuit board caused that tiny trace (along the bottom side of the board in the photograph above) to act as fuse. My bad, but I must say Dave left some room for improvement in revision 6. The uCurrent was recovered with a bypass operation and a big label was installed on the box as reminder of the common negative. The experiment worked a lot better with the uCurrent tinned-Gold connected in series in the negative lead from the circuit board to the power supply.

]]>// Delay for x milliseconds (at 8 MHz clock) void delay_ms(uint16_t x) { Â Â Â uint8_t y, z; Â Â Â for (; x > 0; x--) { Â Â Â Â Â Â Â for (y = 0; y < 1000; y++) { Â Â Â Â Â Â Â Â Â Â Â for (z = 0; z < 8; z++) { Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â asm volatile ("nop"); // one clock cycle 125 ns Â Â Â Â Â Â Â Â Â Â Â } Â Â Â Â Â Â Â } Â Â Â } }]]>

As superuser, create the file /etc/systemd/system/dropbox@.service with the following content:

[Unit] Description=Dropbox agent for %I After=local-fs.target network.target [Service] Type=simple User=%I Group=owners ExecStart=/opt/dropbox/dropboxd ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure RestartSec=5 TimeoutSec=300 [Install] WantedBy=multi-user.target

It is assumed that the Dropbox headless daemon has been installed in the /opt/dropbox directory and configured of user radko. The service is started during boot after issueing the following command:

`sudo systemctl enable dropbox@radko.service`

The service can be manually started and its status can be queried:

`sudo systemctl start dropbox@radko.service`

`service dropbox@radko status`

Note that this manually started service is killed on logoff. A reboot is really needed to make the service persistent.

Four tests to pass:

- The service should continue to run in the background. Log out from the server and log in again.
- The service should be started automatically during boot. Reboot the server.
- The service should run stable. Monitor the status of the service.
- The service should work. Drop files in the Dropbox folder and verify it is synced.

Thatâ€™s all for now. Letâ€™s see what other aspects of the systemd service can be tweaked.

Update November 22nd 2015: The systemd service described above will fail when the user has an Encrypted Home directory. Check the logging data of the dropboxd service with the following command:

`journalctl -e -u dropbox@radko.service`

The basic steps to complete the puzzle are the same:

- A certain value is invalid when already present in the same row, column or square.
- A certain value is the solution when it has no other possible place in the same row, column or square.
- A certain value is invalid when needed as solution for one of two (or more) other cells in the same row, column or square.
- A certain value is the solution when all other values are not valid.

The steps above are repeated until the puzzle is solved, you get stuck and give up, or you find a mistake in the entered values and start over. For some puzzles repeating the four steps above is not enough. An assumption needs to be made for the solution of a certain cell, after which repeating the four steps could get you to a solved puzzle. Other approaches to attack the Hexadoku exist without doubt, but this would be my strategy.

So, how many readers actually take the time to complete the puzzle using a pencil and eraser? Some solvers can be found on the Internet and the Elektor probably publishes the puzzle as bitmap image exactly for that reason. However, fun really starts when programming your own solver. I have written one in Python, which follows exactly the steps described above. Several parameters can be defined to describe the difficulty of the puzzle:

- the number of empty cells in the puzzle,
- the number of iterations of the four steps above to solve the puzzle,
- the need to make an assumption (guess) to solve the puzzle,
- the number of empty cells remaining when an assumption needs to be made,
- the rate of reducing candidate solutions per iteration,
- â€¦

The solutions obtained with the solver are given at the end of this post.Â Statistical analysis of puzzle solving with the solver shows some interesting results. A solution is typically found in less than 1 second.

Since the first edition of 2011 a significant increase in difficulty of the puzzles is observed. There was that one Hexadoku in 2010, where the author added an offset of 0x1 and invented the extended hexademical 0xG. Replacing all Gâ€™s by 0â€™s did the trick. The puzzle in the March edition of 2011 required several solutions from previous editions to be filled in first, hence the short calculation time to solve the puzzle after getting to that point. Excluded were the odd puzzles in some of the the extra-thick editions, because they did not conform to the dimensions of the Hexadoku and would cause the solver to raise exceptions.

The average number of iterations required is about 11. Still interested in solving the puzzle using a pencil and eraser?

The number of initial unknowns in the puzzles ranged from 104 to 152.

The change in difficulty since the first edition of 2011 is obvious. It takes about three times more iterations to solve the puzzles, compared to the first 5 years of Hexadoku.

The difficulty of the puzzles, as quantified by the number of iterations needed to solve it, gets on average just a little lower throughout the year.

If assumptions need to be made to solve the puzzle, the number of iterations needed to solve the puzzle is on average higher. That makes sense.

The most difficult puzzle to date was published in the March edition of this year: 152 unknowns at the start of the puzzle and assumptions had to be made to solve it.

Note that making assumptions to solve the puzzle only became necessary after a few years, with the change in difficulty in 2011. Did anyone had to make adjustments to his solver for this?

year month solution guessed 2006 01 EA639Â Â N 2006 02 Â Â 0928FÂ Â Â N 2006 03 Â Â 3B479Â Â Â N 2006 04 Â Â CDA48Â Â Â N 2006 05 Â Â 02675Â Â Â N 2006 06 Â Â 1A6DCÂ Â Â N 2006 09 Â Â 0EBADÂ Â Â N 2006 10 Â Â 754C1Â Â Â N 2006 11 Â Â 1AC70Â Â Â N 2006 12 Â Â 87E46Â Â Â N 2007 01 Â Â 038FAÂ Â Â N 2007 02 Â Â 9BC24Â Â Â N 2007 03 Â Â CA9F0Â Â Â N 2007 04 Â DF908Â Â Â N 2007 05 Â Â B789EÂ Â Â N 2007 06 Â Â 1B456Â Â Â N 2007 09 Â Â FCEB7Â Â Â N 2007 10 Â Â 36784Â Â Â N 2007 11 Â Â 41EBAÂ Â Â N 2007 12 Â Â 97C65Â Â Â N 2008 01 Â Â D148BÂ Â Â N 2008 02 Â Â 90467Â Â Â N 2008 03 Â Â C2563Â Â Â N 2008 04 Â Â FA63EÂ Â Â N 2008 05 Â Â 36815Â Â Â N 2008 06 Â Â 0EA75Â Â Â N 2008 09 Â Â 7A0FEÂ Â Â N 2008 10 Â Â AB749Â Â Â N 2008 11 Â Â FC2B6Â Â Â N 2008 12 Â Â E5071Â Â Â N 2009 01 Â Â 4395CÂ Â Â N 2009 02 Â Â 3097DÂ Â Â N 2009 03 Â Â 813D2Â Â Â N 2009 04 Â Â A2543Â Â Â N 2009 05 Â Â 857C9Â Â Â N 2009 06 Â Â 579BDÂ Â Â N 2009 09 Â Â 10965Â Â Â N 2009 10 Â Â DA2BFÂ Â Â N 2009 11 Â Â A5F32Â Â Â N 2009 12 Â Â F1482Â Â Â N 2010 01 Â Â 26FB4Â Â Â N 2010 02 Â Â 95CD4Â Â Â Y (This puzzle featured G's instead of 0's.) 2010 03 Â Â 51E7AÂ Â Â N 2010 04 Â Â DFB12Â Â Â N 2010 05 Â Â C81BAÂ Â Â N 2010 06 Â Â 6B310Â Â Â N 2010 09 Â Â 3AE58Â Â Â N 2010 10 Â Â 3F8B5Â Â Â N 2010 11 Â Â 3F642Â Â Â N 2010 12 Â 381F0Â Â Â N 2011 01 Â Â B278FÂ Â Â Y 2011 02 Â Â 9084BÂ Â Â Y 2011 03 Â 9302FÂ Â Â N (This puzzle required entering solutions of previous puzzles.) 2011 04 Â Â B9A65Â Â Â Y 2011 05 Â CD604Â Â Â N 2011 06 Â Â B18ADÂ Â Â N 2011 09 Â Â 4D0F6Â Â Â N 2011 10 Â Â D0837Â Â Â N 2011 11 Â Â 40F58Â Â Â N 2011 12 Â Â 35C24Â Â Â N 2012 01 Â Â 43ADEÂ Â Â Y 2012 02 Â Â BEF8DÂ Â Â Y 2012 03 Â Â 862DFÂ Â Â Y 2012 04 Â Â 78BE0Â Â Â N 2012 05 Â Â 4C03EÂ Â Â N 2012 06 Â Â 7924AÂ Â Â N 2012 09 Â 3F126Â Â Â N 2012 10 Â Â 75E2BÂ Â Â N 2012 11 Â Â BD18AÂ Â Â N 2012 12 Â Â 621BAÂ Â Â N 2013 01 Â Â 02518Â Â Â Y 2013 03 Â Â 48C57Â Â Â Y 2013 04 Â Â 934CBÂ Â Â Y 2013 05 Â Â 3D1AEÂ Â Â Y 2013 06 Â Â F9407Â Â Â N 2013 07 Â Â 3B4CDÂ Â Â N 2013 09 Â Â 569E8Â Â Â N 2013 10 Â Â FCDE8Â Â Â N 2013 11 Â Â E75F4Â Â Â Y 2013 12 Â Â AC023Â Â Â Y 2014 01 Â Â 1F734Â Â Â N 2014 03 Â Â 0E4D6Â Â Â N 2014 04 Â Â A0263Â Â Â N 2014 05 Â Â 18047Â Â Â Y 2014 06 Â Â F6B04Â Â Â Y 2014 07 Â Â CE234Â Â Â Y 2014 09 Â Â E80F4Â Â Â Y 2014 10 Â Â C03EFÂ Â Â Y 2014 11 Â Â 63D95Â Â Â Y 2014 12 Â Â D7085Â Â Â N 2015 01 Â Â 3146AÂ Â Â Y 2015 03 Â Â 16A8EÂ Â Â Y 2015 04 Â Â DFBA9Â Â Â Y 2015 05 Â Â 8205EÂ Â Â Y 2015 06 458EFÂ Â Â N 2015 07 *****Â Â Â N 2015 09 ????? ? 2015 10 ????? ? 2015 11 ????? ? 2015 12 ????? ?]]>

`Found HackRF board 0:`

hackrf_open() failed: HACKRF_ERROR_LIBUSB (-1000)

Repeatedly starting hackrf_info resulted in a proper response on all occasions except for the first call. The HackRF One was also not functional in other programs. Info from various mailing lists seemed to point to the recentlt introduced hackrf kernel module. However, unloading this module or adding it to a blacklist did not bring a solution for my case. Eventually, it turned out that the firmware of the HackRF does not support USB suspend. All that was needed was to add the USB device ID to a blacklist (/etc/default/tlp) and start TLP again as superuser:

`USB_BLACKLIST="1d50:6089"`

A similar solutions exist in case laptop-mode-tools is used: [Hackrf-dev] HackRF, USB Autosuspend, etc.

]]>The first version of the Python code and the input files of the examples are available here: openTubes-0.1. ]]>