October 18, 2017

Robert McWilliam

I want a new camera

I think it's about time I got a new camera. I've thought this for a while, but keep baulking at the price of getting something that would be a decent improvement over what I currently have.

What I have

I have a Sony A55 at the moment. The internet tells me it was released in 2010, and I think I got mine between Christmas and New Year that year. On the lens side I've a Sigma 18-250 super zoom and a 50mm prime that cover most of what I do and I still have the 18-70 kit zoom from my A200 that I sometimes use as I have close focus filters that fit it and let it get really up close to stuff.

What I want

I'd like better performance - noise levels at higher ISOs look much better on more modern cameras, higher res video and not overheating when shooting video would be nice and, though 16 megapixels is usually plenty for what I do more would allow a bit more cropping.

But, the overriding consideration for me getting a new camera is to get something smaller.

My current setup is big enough and heavy enough that I mostly leave it at home - I want something small enough that it would live in my laptop bag (since that comes most places with me), and not be something that I have to think about if it comes or not when I'm travelling.

I definitely want a viewfinder on a camera. I much prefer that to only having a screen - I think it helps to have the picture you're taking be all that you see when composing it. This apparently makes me a bit weird as it seems to be only a small subset of cameras that still have viewfinders.

What I'm considering

Micro 4/3

For the most part the micro 4/3 bodies are a lot smaller than my current camera. The lenses are definitely smaller from targeting the smaller sensor - which has the nice effect of them also being quite a bit cheaper than equivalents for APS-C or 35mm. I really like the Panasonic rangefinder style GX cameras.

Canon EOS M5

APS-C 24 megapixel sensor in quite a compact body. But quite expensive, doesn't do 4K and a disappointing and expensive selection of native lenses.

Nikon 1 V3

Seems to be quite expensive for the specs. Again the native lenses have a disappointing selection and look expensive. And they're a pain to find as search results are swamped by "normal" Nikon lenses - "1" is a stupid name for a lens type.

Sony mirrorless

Maybe switch over to Sony E-mount? A6000 looks like it would be a decent step up from the A55. There's a decent amount of E-mount lenses available (though a bit more expensive than micro 4/3) and adaptors to let you use just about anything else. A bit higher res than the best of the micro 4/3 cameras. I was pretty tempted by the A6500 when it came out, but I don't think I want to spend that much and the jelly from the rolling shutter seems particularly bad with it.

A compact camera

If I really want to go all out on small: get something like a Sony Rx100 or Panasonic LX100. These are small enough to put in a pocket or clip onto my belt so could definitely come everywhere with me. I'm not really sold on giving up on interchangeable lenses though.


I think a small normal crossing zoom would be the best bet for usually living on the camera lens. That should give a nice small package for always carrying around and still be reasonably flexible.

I've seen a few reviews of the Olympus 40-150 that say it's quite good and very good for the price: from ~£50 on eBay. If I get a micro 4/3 camera I'll probably get one of these to have something for the longer end. Might not get that right away.

The Panasonic 12-35 f2.8, or Olympus 12-40 f2.8 "premium"/"professional" zooms look really nice, but they start at ~£500 on eBay so would eat pretty much all of my budget without getting a camera to put them on.

Micro 4/3 or Sony E-mount have a pretty small flange to sensor distance and with the sensors being quite small (especially micro 4/3) you can get adaptors to use most other types of lenses. There are a lot of really cheap and fast C-mount lenses out there, and some old M42 lenses look quite nice. C-mount extension tubes look fun for some macro stuff.

Speed Booster

Metabones Speed Booster gives a 0.71x focal length multiplier (on the ultra, 0.64 on XL variants) to allow full frame lenses to be used while kind of counteracting the crop from the small sensor and making the lens about a stop faster. The metabones version is quite expensive (and not widely available - I haven't yet found any for sale in Europe), there are a couple of cheaper alternatives, but reviews I've seen have been fairly negative for them. Since, to me, the whole point of this kind of adaptor would be to use some of the nice older lenses the adaptor adding issues would kind of spoil that. If I can live with distortion and vignetting C-mount lenses at about equivalent speeds are a couple of orders of magnitude cheaper. Some nice older lenses on a Speed Booster is fun to fantasise about but is probably still more expensive than I'm likely to spend in the near future.

A Speed Booster would let me get some fast older manual primes and make them even faster. Or there are versions that support modern AF lenses but those adaptors are more expensive and the lenses tend to be lots more expensive.

Crop factor

I was a bit worried about the crop factor taking away some of the wide end. My current widest lens is 18mm on the wide end of my kit and super zooms - adn I have often wanted something a bit wider than that. On my APS-C camera that comes in at about 29mm full frame equivalent. Need about 14mm to match that so the cheap standard zooms are about what I currently have and the premium/pro/bloody expensive standard zooms would be a bit wider. EBay has some cheap C-mount lenses out to 7mm without being listed as fisheye but they might have enough distortion that they actually would be fisheye in my book.


I'm still havering. I have bid on a couple of GX7s on eBay but other people seem to think they're worth more than I do, so haven't won them. I'm really surprised how much they go for, only £50-100 less than a GX80 (and second hand GX80s are surprising close to new ones - the higher end of the range are listing them above the new price on Amazon). I think the improved detail from the GX80 not having the low-pass filter makes it worth the extra over the GX7.

So, I'm currently leaning towards a Panasonic GX80 with the kit zoom and a couple of C-mount manual primes. Can maybe upgrade to native, or M42 primes later. I think I'll spend a while watching them on eBay but it is very tempting to push the button on Amazon to get one tomorrow...

October 18, 2017 11:00 PM

October 16, 2017

Iain R. Learmonth


No more no surprises

Debian has generally always had, as a rule, “sane defaults” and “no surprises”. This was completely shattered for me when Vim decided to hijack the mouse from my terminal and break all copy/paste functionality. This has occured since the release of Debian 9.

I expect for my terminal to behave consistently, and this is broken every time I log in to a Debian 9 system where I have not configured Vim to disable this functionality. I also see I’m not alone in this frustration.

To fix this, in your .vimrc:

if !has("gui_running")
  set mouse=

(This will check to see if your using GVim or similar, where it would be reasonable to expect the mouse to work.)

This is perhaps not aggresive enough though. I never want to have console applications trying to use the mouse. I’ve configured rxvt to do things like open URLs in Firefox, etc. that I always want to work, and I always want my local clipboard to be used so I can copy/paste between remote machines.

I’ve found a small patch that would appear to disable mouse reporting for rxvt, but unfortunately I cannot do this through an Xresources option. If someone is looking for something to do for Hacktoberfest, I’d love to see this be an option for rxvt without re-compiling:

diff --git a/src/rxvt.h b/src/rxvt.h
index 5c7cf66..2751ba3 100644
--- a/src/rxvt.h
+++ b/src/rxvt.h
@@ -646,7 +646,7 @@ enum {
 #define PrivMode_ExtMouseRight  (1UL<<24) // xterm pseudo-utf-8, but works in non-utf-8-locales
 #define PrivMode_BlinkingCursor (1UL<<25)
-#define PrivMode_mouse_report   (PrivMode_MouseX10|PrivMode_MouseX11|PrivMode_MouseBtnEvent|PrivMode_MouseAnyEvent)
+#define PrivMode_mouse_report   0 /* (PrivMode_MouseX10|PrivMode_MouseX11|PrivMode_MouseBtnEvent|PrivMode_MouseAnyEvent) */
 #ifdef ALLOW_132_MODE
 # define PrivMode_Default (PrivMode_Autowrap|PrivMode_ShiftKeys|PrivMode_VisibleCursor|PrivMode_132OK)

October 16, 2017 08:00 AM

October 15, 2017

Iain R. Learmonth


Free Software Efforts (2017W41)

Here’s my weekly report for week 41 of 2017. In this week I have explored some Java 8 features, looked at automatic updates in a few Linux distributions and decided that actually I don’t need swap anymore.


The issue that was preventing the migration of the Tasktools Packaging Team’s mailing list from Alioth to Savannah has now been resolved.

Ana’s chkservice package that I sponsored last week has been ACCEPTED into unstable and since MIGRATED to testing.

Tor Project

I have produced a patch for the Tor Project website to update links to the Onionoo documentation now this has moved (#23802 ). I’ve updated the Debian and Ubuntu relay configuration instructions to use systemctl instead of service where appropriate (#23048 ).

When a Tor relay is less than 2 years old, an alert will now appear on Atlas to link to the new relay lifecycle blog post (#23767 ). This should hopefully help new relay operators understand why their relay is not immediately fully loaded but instead it takes some time to ramp up.

I have gone through the tickets for Tor Cloud and did not find any tickets that contain any important information that would be useful to someone reviving the project. I have closed out these tickets and the Tor Cloud component no longer has any non-closed tickets (#7763, #8544, #8768, #9064, #9751, #10282, #10637, #11153, #11502, #13391, #14035, #14036, #14073, #15821 ).

I’ve continued to work on turning the Atlas application into an integrated part of Tor Metrics (#23518 ) and you can see some progress here.

Finally, I’ve continued hacking on a Twitter bot to tweet factoids about the public Tor network and you can now enjoy some JavaDoc documentation if you’d like to learn a little about its internals. I am still waiting for a git repository to be created (#23799 ) but will be publishing the sources shortly after that ticket is actioned.


I believe it is important to be clear not only about the work I have already completed but also about the sustainability of this work into the future. I plan to include a short report on the current sustainability of my work in each weekly report.

I have not had any free software related expenses this week. The current funds I have available for equipment, travel and other free software expenses remains £60.52. I do not believe that any hardware I rely on is looking at imminent failure.

I’d like to thank Digital Ocean for providing me with futher credit for their platform to support my open source work.

I do not find it likely that I’ll be travelling to Cambridge for the miniDebConf as the train alone would be around £350 and hotel accomodation a further £600 (to include both me and Ana).

October 15, 2017 10:00 PM

Shortcodes for my Weekly Reports

I’ve been writing weekly reports on my free software activities for over a month now, so I’m looking at ways of making these easier to write. Each review takes about an hour to write up, and I’m spending enough time formatting links to packages and bug reports that I’ve written some Hugo shortcodes to help.

For Debian:

{{ with ( .Get "bug" ) }}{{ range ( first 1 ( split . "," ) ) }}<a href="{{ . }}">#{{ . }}</a>{{ end }}{{ if ( ( gt ( len ( split . "," ) )  1 ) ) }}{{ range ( after 1 ( split . "," ) ) }}, <a href="{{ . }}">#{{ . }}</a>{{ end }}{{ end }}{{ end }}
{{ with ( .Get "src" ) }}{{ range ( first 1 ( split . "," ) ) }}<a href="{{ . }}">{{ . }}</a>{{ end }}{{ if ( ( gt ( len ( split . "," ) )  1 ) ) }}{{ range ( after 1 ( split . "," )) }}, <a href="{{ . }}">{{ . }}</a>{{ end }}{{ end }}{{ end }}
{{ with ( .Get "pkg" ) }}{{ range ( first 1 ( split . "," ) ) }}<a href="{{ . }}">{{ . }}</a>{{ end }}{{ if ( ( gt ( len ( split . "," ) )  1 ) ) }}{{ range ( after 1 ( split . "," )) }}, <a href="{{ . }}">{{ . }}</a>{{ end }}{{ end }}{{ end }}

For Tor Project:

{{ with ( .Get "bug" ) }}{{ range ( first 1 ( split . "," ) ) }}<a href="{{ . }}">#{{ . }}</a>{{ end }}{{ if ( ( gt ( len ( split . "," ) )  1 ) ) }}{{ range ( after 1 ( split . "," ) ) }}, <a href="{{ . }}">#{{ . }}</a>{{ end }}{{ end }}{{ end }}

So now I can write things like:

* {{< debian bug="759639" >}}
* {{< debian bug="739609,759639" >}}
* {{< debian pkg="direwolf" >}}
* {{< debian src="direwolf" >}}
* {{< tor bug="20869" >}}

and I’ll get:

October 15, 2017 11:00 AM

October 14, 2017

Iain R. Learmonth



Yesterday I was looking at merging review edits in a LaTeX document. I decided that I would use vimdiff, which meant learning the keybindings (again, for maybe the fifth or sixth time).

It’s pretty easy to use vimdiff once you get the hang of it. Open two files like:

vimdiff file1.tex file2.tex

You navigate between the two windows just like any other split in vim: Ctrl-w followed by h or l (to move left or right). Then you can navigate the documents and merge things:

]c :        - next difference
[c :        - previous difference
do          - diff obtain (merge the diff from the other window)
dp          - diff put (merge the diff to the other window)
zo          - open folded text
zc          - close folded text
:diffupdate - re-scan the files for differences

If you’re using a colorscheme that vimdiff looks awful in, the following could help in your .vimrc (this works great for me using Solarized):

highlight DiffAdd    cterm=bold ctermfg=10 ctermbg=17 gui=none guifg=bg guibg=Red
highlight DiffDelete cterm=bold ctermfg=10 ctermbg=17 gui=none guifg=bg guibg=Red
highlight DiffChange cterm=bold ctermfg=10 ctermbg=17 gui=none guifg=bg guibg=Red
highlight DiffText   cterm=bold ctermfg=10 ctermbg=88 gui=none guifg=bg guibg=Red

October 14, 2017 07:00 AM

October 13, 2017

Iain R. Learmonth



When working with datasets from PATHspider it’s very easy to max out your memory. When running an analysis recently, I found my computer locking up and generally being unresponsive. This new machine should be able to cope so this was odd, and then I realised that I was running two jupyter notebooks and the other had previously loaded all the data into memory, so this second one pushed me into swap. 6GB of memory got swapped and then the machine was near useless almost instantly.

Now that I have 24GB of RAM, swap isn’t actually useful. When I get to be using too much memory, I would prefer it if processes die instead.

swapoff -a

Hopefully now I won’t be able to accidentally lock up my machine again.

October 13, 2017 08:00 AM

October 12, 2017

Iain R. Learmonth


List Comprehension

Still in the process or tidying up the bot behind the @TorAtlas Twitter account, which means I’m still writing Java. I’ve now been exploring “list comprehension”-like techniques using another new Java 8 feature, Streams. Essentially this involves creating lists from lists in an elegant way.

In Python, I would do something like:

runningRelays = [relay for relay in relays if relay['is_running']]

(I know something is happening because writing that example line I had an incredible urge to terminate the line with a semicolon.)

In Java, the equivalent as I would have written it after my undergraduate degree:

List<RelayDetails> runningRelays = new ArrayList<RelayDetails>();
for ( RelayDetails relay : relays ) {
    if ( relay.isRunning() ) {

but using the new Streams API:

List<RelayDetails> runningRelays = relays
    .filter(relay -> relay.isRunning())

It’s not as concise as the Python but I feel a lot better writing the latter and I think it’s a lot more readable than the former too.

This is just one example, it’s an incredibly flexible API and I imagine it could have many uses for aggregations in AtlasBot.

October 12, 2017 08:00 AM

October 11, 2017

Iain R. Learmonth


Duration and Period

I’m in the process or tidying up the bot behind TorAtlas and I’ve chosen to write it in Java. My undergraduate degree had a lot of Java in it, but that was while ago now, and there are some cool new features I’ve learnt about including Period and Duration.

Some of the tweets coming from the bot talk about how long a relay has been contributing to the Tor network. When fetching the details document I look at the first_seen field and get this as a ZonedDateTime to make sure I’m doing all my calculations in UTC. I then use the between() method on various ChronoUnits to work out how long between the first time the relay was seen and now, and then I produced something human readable from this:

public static String formatAge(Temporal first_seen_date) {
    int years = (int) ChronoUnit.YEARS.between(first_seen_date,;
    int days = (int) ChronoUnit.DAYS.between(first_seen_date,;
    int hours = (int) ChronoUnit.HOURS.between(first_seen_date,;
    int minutes = (int) ChronoUnit.MINUTES.between(first_seen_date,;
    int seconds = (int) ChronoUnit.SECONDS.between(first_seen_date,;

    if (years > 0) {
        return String.format("%s years and %s days", years, (days % 365));
    } else if (days > 0) {
        return String.format("%s days and %s hours", days, (hours % 24));
    } else if (hours > 0) {
        return String.format("%s hours and %s minutes", hours, (minutes % 60));
    } else if (minutes > 0) {
        return String.format("%s minutes and %s seconds", minutes, (seconds % 60));
    } else {
        return String.format("%s seconds", seconds);

I would be very happy if I could find something to accept a Duration instead, and produce a human-readable representation. I haven’t found anything quite like the library I was using in Python. I also have a restriction that I’d like things to be installable from Debian, so any new library would need to be something that could be maintained in Debian (i.e. active upstream and DFSG-compliant).

In Python, I used humanfriendly.format_timespan() which is a lovely library. If you’re writing Python, I’d definitely recommend it.

October 11, 2017 08:00 PM

October 10, 2017

Iain R. Learmonth


Automatic Updates

We have instructions for setting up new Tor relays on Debian. The only time the word “upgrade” is mentioned here is:

Be sure to set your ContactInfo line so we can contact you if you need to upgrade or something goes wrong.

This isn’t great. We should have some decent instructions for keeping your relay up to date too. I’ve been compiling a set of documentation for enabling automatic updates on various Linux distributions, here’s a taste of what I have so far:


Make sure that unattended-upgrades is installed and then enable the installation of updates (as root):

apt install unattended-upgrades
dpkg-reconfigure -plow unattended-upgrades

Fedora 22 or later

Beginning with Fedora 22, you can enable automatic updates via:

dnf install dnf-automatic

In /etc/dnf/automatic.conf set:

apply_updates = yes

Now enable and start automatic updates via:

systemctl enable dnf-automatic.timer
systemctl start dnf-automatic.timer

(Thanks to Enrico Zini I know all about these timer units in systemd now.)

RHEL or CentOS

For CentOS, RHEL, and older versions of Fedora, the yum-cron package is the preferred approach:

yum install yum-cron

In /etc/yum/yum-cron.conf set:

apply_updates = yes

Enable and start automatic updates via:

systemctl start yum-cron.service

I’d like to collect together instructions also for other distributions (and *BSD and Mac OS). Atlas knows which platform a relay is running on, so there could be a link in the future to some platform specific instructions on how to keep your relay up to date.

October 10, 2017 06:00 PM

October 09, 2017

Iain R. Learmonth


My IRC Setup

I use IRC every day. I use it to speak to people at my local hackerspace and to fellow Debian or Tor Project developers. My set up is a little complex but every part serves a purpose.

Connection diagram for my IRC setup

Connection diagram for my IRC setup

The service that actually performs the connections to IRC servers is ZNC, an IRC bouncer. The main features this provides are aggressively remaining connected to ensure that I’m not missing anything and also to authenticate to NickServ automatically in the case of a disconnect. Other features from ZNC I use are the keepnick plugin (to keep trying for my primary nick) and the chansaver plugin to keep track of which channels I’m in.

Bitlbee is an instant messaging to IRC gateway that allows you to use other chat protocols from an IRC client. It has native support for Twitter and GNU Social, and so I have these accounts here.

In the past I have used irssi as a terminal based IRC client, but my preferred client is now weechat. I’ve made a number of customisations to the default Weechat configuation1.

The following will help out with a far more usable buffer and nick list:

/script install
/set buffers.look.hide_merged_buffers all
/set buffers
/key bind meta-n /bar toggle nicklist

The following will make Weechat a lot easier to read with the Solarized theme:

/set 0
/set 0
/set weechat.color.chat_nick_colors 1,2,3,4,5,6
/set buffers.color.hotlist_message_fg 15
/set top

Then I look to cut out useless notifications. Starting by hiding join/part messages and not treating them as “activity” in a channel:

/set weechat.look.buffer_notify_default message
/set irc.look.smart_filter on
/filter add irc_smart * irc_smart_filter *

In bigger channels, I only show activity if I’ve been highlighted:

/set weechat.notify.irc.oftc.#debian-devel highlight

I also make a couple of changes to better support ZNC:

/alias add znc /quote znc
/script install

and for Bitlbee, I want to highlight on my Twitter username:

/script install
/set weechat.notify.irc.bitlbee.#twitter_iainlearmonth highlight
/buffer_autoset add irc.bitlbee.#twitter_iainlearmonth highlight_regex iainlearmonth

Finally, one of Weechats most attractive features is the relay protocol. This allows you to have remote frontends connect to your Weechat instance. I occasionally use Glowing Bear, a web interface, and have in the past been a heavy user of Weechat Android and hope to get it set up on my phone again soon.

  1. Many of the customisations I have made to my Weechat configuration are taken from this blog post by Ben Oliver. I would recommend a read if you’re wanting to have a go at Weechat.


October 09, 2017 07:30 AM

October 08, 2017

Iain R. Learmonth


Free Software Efforts (2017W40)

Here’s my weekly report for week 40 of 2017. In this week I have looked at censorship in Catalonia and had my “deleted” Facebook account hacked (which made HN front page). I’ve also been thinking about DRM on the web.


I have prepared and uploaded fixes for the measurement-kit and hamradio-maintguide packages.

I have also sponsored uploads for gnustep-base (to experimental) and chkservice.

I have given DM upload privileges to Eric Heintzmann for the gnustep-base package as he has shown to care for the GNUstep packages well. In the near future, I think we’re looking at a transition for gnustep-{base,back,gui} as these packages all have updates.

Bugs filed: #877680

Bugs closed (fixed/wontfix): #872202, #877466, #877468

Tor Project

This week I have participated in a discussion around renaming the “Operations” section of the Metrics website.

I have also filed a new ticket on Atlas, which I am planning to implement, to link to the new relay lifecycle post on the Tor Project blog if a relay is less than a week old to help new relay operators understand the bandwidth usage they’ll be seeing.

Finally, I’ve been hacking on a Twitter bot to tweet factoids about the public Tor network. I’ve detailed this in a separate blog post.

Bugs closed (fixed/wontfix): #23683


I believe it is important to be clear not only about the work I have already completed but also about the sustainability of this work into the future. I plan to include a short report on the current sustainability of my work in each weekly report.

I have not had any free software related expenses this week. The current funds I have available for equipment, travel and other free software expenses remains £60.52. I do not believe that any hardware I rely on is looking at imminent failure.

October 08, 2017 10:00 PM

August 22, 2017

Tom Jones


FreeBSD on the GPD Pocket

In the distant past before smart phones became identical black rectangles there was a category of devices called palmtops. Palmtops were a class of PDA PC thing that fit in the palm of your hand. Today the Psion 5 series of devices most often capture peoples attention. Not only are they small and awesome, but they have something like a real keyboard.

This form factor is so popular that there are projects trying to update Psion 5 devices with new internals. The Psion 5 is the sort of device I have complained isn't made for a long time, at some point I picked one up on ebay with the intention of running the NetBSD port on it.

Earlier this year the world caught up and two big crowd funding projects appeared for modern Psion like palmtop devices. Neither the Gemini or the GPD Pocket campaigns convinced me that real hardware would ever appear. In May reviews of the GPD Pocket started to appear and I became aware of people that had backed and received their earlier campaign for the GPD WIN.

With a quirk in indiegogo allowing me to still back the campaign I jumped on board and ordered a tiny little laptop computer.

GPD Pocket vs Psion 5mx


FreeBSD is the only choice of OS for a pc computer. Support is good enough that I could boot and install without any real issues, but there was enough hardware support missing that I wanted to fix things before writing a blog post about it.

Somethings don't work out of the box others will need drivers before they will work:

  • Display rotation
  • WiFi (broadcom 4356)
  • Bluetooth (broadcom BCM2045A0)
  • Audio (cherry trail audio chrt54...)
  • Graphics
  • Nipple
  • USB C
  • Keyboard vanishes sometimes
  • Battery
  • Suspend
  • Touch Screen (goodix)
  • fan (there is some pwm hardware)
  • backlight
  • I2C
  • gpio


The most obvious issue is the display panel, the panel it self reports as being a high resolution portrait device. This problem exists in the bios menus and the windows boot splash is rotated for most of the time.

GPD Pocket FreeBSD bootsplash

Of course the FreeBSD bootsplash and framebuffer are also rotated, but a little neck turning makes the installer usable. Once installed we can address the rotated panel in X, accelerated graphics are probably in the future for this device, but the X framebuffer drive is good enough for FreeBSD hacking.

With X we can sort of the rotation problem. xf86-video-scfb is required to use the framebuffer.

# pkg install xf86-video-scfb

And the following lines have to be added to /usr/local/etc/X11/xorg.conf.d/driver-scfb.conf

Section "Device"
    Identifier "Generic FB"
    Driver "scfb"
    Rotate "CW"

 Section "Device"
     Identifier    "Card0"
     Driver        "scfb"

GPD Pocket FreeBSD

The screen resolution is still super high, there doesn't seem to be anyway to do DPI hinting with the framebuffer driver (or in i3 at all), but I can make terminals usable by cranking up the font size.

Keyboard and touchpoint

A Keyboard is vital for a usable computer, out of the box the keyboard works, but the touch point does not. Worse, touching the touch point caused the built in USB keyboard to die.

Some faffing trying to debug the problem with gavin@ at BSDCam and we got both keyboard and mouse working. For some reason my planck keyboard presents as a mouse among other things, pluggin in a mouse and power cycling the USB device caused ums(4) to correctly probe and attach.

Manually loading ums(4) at boot got the touch point working correctly. In fact, ig4(4) also attaches when manually loaded.

Add these lines to /boot/loader.conf


The dmesg shows some problems with ACPI probing, this is probably the source of some of the device problems.

Other devices

Wifi, bluetooth and graphics are bigger problems that will hopefully be caught up in others work and made to work soon. The touchscreen controller is adding a driver and support for Cherry View GPIO, there are datasheets for these and I am working on them.

No battery level indicator makes it annoying to use the GPD Pocket out and about. Without a driver the charge controller is using a really low current to recharge the battery. Datasheets are quite readily available for these devices and I am writing drivers now.

GPD Pocket

The Pocket is a great little device, I think its 'cuteness' makes everyone fall in love with it on first sight. I am really looking forward to getting the final things working and using this as a daily device.

August 22, 2017 12:00 AM

August 21, 2017

Tom Jones


Gherkin 30% keyboard


I like keyboards, I have been using an OLKB Planck as my daily driver for 18 months now. I saw a really nice ortholinear 30% keyboard go by on mastodon and I had to have one.

The keyboard I saw was actually the excellent gherkin by di0ib. di0ib has worked in the true spirit of open source and provided all of the design files and firmware for the gherkin. Beyond that they have included child proof instructions to order pcds.

Gherkin PCB

I tricked some friends into agreeing to build boards if I got a run of PCBS and set off. Amazingly was offering 5 more boards (10 vs 5) for just $2 extra. I managed to get 10 sets (board, key plate and base) of the PCBs for about £80.


The build was really easy to do, there is some advice for the socket on 40 percent club, but if you test fit everything as you go it should be straight forward. A build is probably around 2 hours depending on proficiency.

Parts Per Keyboard:

1  Keyplate PCB
1  Bottom PCB
1  Main PCB

16 M2 Spacers (14mm length)
32 M2 screws

30 key switches
30 key caps

1  Arduino Pro micro
1  machine pin socket (wide 24 pin (2x12))

30 3mm leds (your choice of colour)
30 1N4148 diodes
1  100 ohm resistors
1  100k ohm resitors
30 470 ohm reistors
1  mosfet (probs A04406A 4406A)

Key caps are a harder thing to buy (so many awesome choices) so I ended up using some spares I found in a desk drawer.


Flashing the firmware to the keyboard was a little harder to figure out. Eventually I found some instructions that included the correct avrdude flags on, you also need to use a switch pulling RST down to GND to put the micro controller in programming mode.

Pro Micro flash switch

Most of the work is done by the TMK make file, but you must manually specify a target for the program command. The command I used looks like:

# programming directive
MCU = atmega32u4
PROGRAM_CMD = avrdude -p $(MCU) -P /dev/tty.usbmodem1411 -c avr109 -U flash:w:$(TARGET).hex


With the board built and programmed (first try) it is time to figure out how to use it. It took a couple of months of daily use to get used to using the planck, it will be the same with the gherkin. To help learn I have printed out the keyboard layout and the combination of layers.

Gherkin Layout

I modified the default layout a little to make it more similar to how I normally type. I moved space bar to my left hand, made 'X' a repeatable key(gotta be able to delete chars in vim) and added a 'CMD' key. I have a fork of the repo with my layout and Makefile changes.

The layer system is easy to use, if you hold any of the keys on the base layer it will enable the alternate function for a meta key or it will switch to another layer for a layer key.

August 21, 2017 12:00 AM

July 22, 2017


Yakbox 2.0 - 34c3

Thats right im making a second yakbox!

I started last month so ive been a bit late posting any info about it, but i was thinking what could i do thats more interesting. so i managed to scavange 4 15" screens with a resolutoin of 1280x1024 which i thought was good enough to show fun stats like yakbox 1. So far i have only figured out what to put on 3 of the screens maybe only 2 once its all crammed in.

This is gona be more expensive than the last yakbox as im using alot more material and 5 computers instead of just 1.

Main idea is a cube with 4 screens on each horizontal side with a case, each screen is powered by a "Banana pi m2u+ with 8gb flash" and those tiny bpi's are connected to the network through a Bpi-R1 which is a router which i will have to self configure, i will be using armbian(debian minimal) and building up shit from there.

Also making one of the Bpi's in yakbox vunrable to see if anyone hacks it and to see what fun stuff they do

I am also making little survailance Boxes with the same little Bpi's the screens are using to collect dns request data and other fun info (this data will be destroyed at the end of the event). Its going to be fun trying to physically secure these to prevent access and to make them secure on the network.

So far i have managed to create the first prototype frame that holds the screens, its strong and holds perfect but due to crap tools and a lack of experience its not perfect, luckly i bought some tools that will let me cut the wood much more flush on the final frame. So far i would say the prototype is holding up well, but im struggling to figure out how to do the case, and which material should i use. Black stone tiles caught my attention the most, but i will have to find out how realistic that is to use and how expensive.

Here are some photos of the prototype so far:

Sorry for the shit quality, will upload better on the next post.


Any suggestions or even donations are totally welcome!

July 22, 2017 11:00 PM

June 27, 2017


Simple python script to pull text/ascii files from a site

This simple python script will let you pull text/ascii files from a standard page where the folder on a server has been exposed, code could easily be modified to pull everything from jpgs. to mkvs really quickly.

import urllib2

urL = ""
file_Ext_Type = "txt"
data = urllib2.urlopen(urL).readlines()
location_to_save_to = ""

for x in data:
    if file_Ext_Type in x:
        filename = txt_list.append(x[x.index('">'):].replace('"> ','').replace("</a></li>","").strip())
            with open(location_to_save_to + filename ,"w") as handle:
                handle.write(urllib2.urlopen(urL + filename).read())

Not sure how well this will perform on all pages, give me feedback or improvements.

June 27, 2017 11:00 PM

June 10, 2017


Yakbox part 3 finally

Ok so this is a tad overdue, this is what yakox finally looked like in the end, it survivded 4 days before it got owned by mkz, due to me being lazy and not sanitizing a variable.

Below are several shots of yakbox including the point where it got owned by mkz!


June 10, 2017 11:00 PM

June 07, 2017


Simple wifi DNS survailance with Scapy

So you will need to put your wifi device into monitor mode using airmon-ng then run this program and watch it show all dns requests it finds on nearby open wifi networks. Im going to add another article if im not too lazy showing you how to do the same on encrypted networks that you have the password for.

from scapy.all import *
import socket

interface_name ="mon0"

def find_dns_requests(pkt): #checking to see if any dns requests found
    if pkt.haslayer(DNS) and pkt.getlayer(DNS).qr == 0:
        print str(pkt.getlayer(DNS).qd.qname) #domain name
        print str(pkt.addr2) #mac address
        print str(pkt.getlayer(IP).src) #ip address

sniff(iface=interface_name, prn = find_dns_requests, filter = 'dst port 53') #start sniffing and apply the function to find your data

June 07, 2017 11:00 PM

May 23, 2017

Bob Taylor

Dementia Tax

So it is well known that the Tories have been nibbling at the NHS to privatise services but to actually privatise social care is shocking.

The idea behind the NHS was that everyone would be covered by a country wide insurance scheme so why now try to make everyone pay for their own long term care whether that be in the house or a care home.

The tempter for Tory politicians and their right wing friends is the amount of money currently swilling about in houses and bank accounts for a section of the elderly.  This is a big prize. So these financial corporations have already got equity release products that could, I presume, easily be adapted to suck money out of your assets making these financial companies very happy.

So in effect this was a staggeringly stupid attempt to give the financial corporations a huge boost to profits on the back of the grandparents.

Then there is the notion that this is intergenerational fairness.  It is nothing of the sort.  If the money is taken out of your house value it then does not go to your children and grandchildren as an inheritance.

Make no mistake this was an attempt at "mugging" all generations on the back of a long term sickness.

There are plenty of other ways of raising money to cover social care that are fair and do not penalise sick old people while at the same time penalising the young people's inheritance.

by BobT ( at May 23, 2017 07:21 AM

March 27, 2017

Tom Jones


Findlater Castle

Findlater Castle

Reading: The Moon is a Harsh Mistress, The Difference Engine

Aberdeen, Scotland: 14°C, Mostly cloudy starting in the evening.

March 27, 2017 12:00 AM

March 26, 2017

Tom Jones


More bread

I did more bread, but at batch 8 this is no longer really interesting to anyone other than me.

People have been complaining that my tweets are marked as offensive material, which is really funny I only really tweet about bread and technology. I looked at my settings and the 'mark as offensive' option was enabled on my output.

I'm sure I accidentally enabled it, but the twitter documentation does say they will add it to accounts that have flagged posts.

I have no love for twitter, if literally anything else had the communities I want to pay attention to posting I would move away. Ideally something federated, but that is only a pipe dream.

Yes my phone autocompleted flour to four, you can't edit twitter posts and phones are the worst thing ever.

It is Sunday, so that makes seven days of writing.

Reading: The Moon is a Hard Mistress, The Difference Engine

Aberdeen, Scotland: 15°C, Clear throughout the day.

March 26, 2017 12:00 AM


Last updated:
October 20, 2017 08:45 AM
All times are UTC.

Powered by: