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 pcbs
.
I tricked some friends into agreeing to build boards if I got a run of PCBS and
set off. Amazingly easyeda.com 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.
Build
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.
Flash
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 hackaday.io
, you also need to use a switch pulling
RST
down to
GND
to put the micro controller in programming mode.
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
OPT_DEFS += -DBOOTLOADER_SIZE=512
PROGRAM_CMD = avrdude -p $(MCU) -P /dev/tty.usbmodem1411 -c avr109 -U flash:w:$(TARGET).hex
Use
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.
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.
Reading:
The Moon is a Harsh Mistress, The Difference Engine
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
Last night I converted by pebble from being a single contained unit, to a 3
part kit.
I am probably going to have to replace it.
Pebble the company is dead, I can still get replacement hardware from amazon or
ebay and I suspect it will be generally available at reasonable prices for a
year or two.
I used my pebble for 3 things
-
It's a smart watch, so I used it as a watch for time and date
-
I used it for weather, with the
awesome relaxing watch face
-
The vibrate function is amazing for notifications. My phone hasn't been off silent for since I got the pebble, notifications for calls and messages are awesome. Better I can forward notifications from a service
bus app like pushover
and generate them based on things I want.
I can just wear a watch to deal with 1, for 2 I am probably going to use the
awesome forecast.io app and not rely on being able to casually check the
temperature.
For 3 I am really at a loss what to do. I could just replace the pebble, but
really I think I want a smart band with a vibration motor for notifications.
If what I want doesn't already exist, it is probably too niche to ever become a
thing.
Reading:
The Moon is a Harsh Mistress, The Difference Engine
release(7)
documents a set of shell scripts for creating FreeBSD release
files in same manner as the release engineering team. The script creates a new
chroot
environment, checks out a fresh tree, doing the release builds in a
clean environment.
That might be what you want.
I want to write some scripts that take in a specified network, some git commit
ids and generates a set of virtual machine images running in
bhyve
to
reproduce a test environment. Building in a clean environment isn't what
I need.
The Makefiles in
release
expect to be run from a tree that already has a
built kernel and world. They make building the VM images really easy, but apart
from comments in the files aren't documented.
I am going to use a directory for all of the stuff:
freebsd/
-> src # freebsd src tree
-> obj # object directory
-> destdir # freebsd destination direcory
$ cd freebsd
$ git clone https://github.com/freebsd/freebsd.git src
$ cd src
Build the kernel and world, setting the object directory to the one in our tree.
$ env MAKEOBJDIRPREFIX=/home/user/freebsd/obj time make -j4 -DKERNFAST buildkernel
$ env MAKEOBJDIRPREFIX=/home/user/freebsd/obj make -j4 buildworld -DWITH_META_MODE=yes -DWITH_CCACHE_BUILD -DNO_CLEAN
Move to the release directory to build our VM images:
$ cd release
# env MAKEOBJDIRPREFIX=/home/user/freebsd/obj make vm-release -j4 DESTDIR=/home/user/freebsd/destdir WITH_VMIMAGES=yes VMFORMATS=raw NOPKG=yes NOPORTS=yes NOSRC=yes
# env MAKEOBJDIRPREFIX=/home/user/freebsd/obj make vm-install -j4 DESTDIR=/home/user/freebsd/destdir WITH_VMIMAGES=yes VMFORMATS=raw NOPKG=yes NOPORTS=yes NOSRC=yes
I exclude, packages, ports and the
src
distribution in the images.
As a test launch a
bhyve
VM with our created disk image:
# sh /usr/share/examples/bhyve/vmrun.sh -c 4 -m 1024M -t tap0 -d ../../destdir/vmimages/FreeBSD-12.0-CURRENT-amd64.raw test
Reading:
The Moon is a Harsh Mistress, The Difference Engine