Ben's Blog

ben

1201 Articles

self sustainability, wood ben February 15, 2024

Scored Some Woodchips

It’s not unusual in Vermont to find a crew removing trees getting in the way of one thing or another. Often times they are contracted out do clean up whole roads and will be working for several days. Often times too, they need to drive a while to get rid of the resulting chips, which to us are gold. We can use them as green matter in compost, to keep weeds from growing while giving nutrients to the soil, or at worst as fill. We never have enough and so whenever we see these crews working, we ask if we can get some chips. Sometimes it saves them time so they’re happy to, and we slip them a twenty whenever we see them. We’ve gotten 3 big loads so far this year, right in time for Spring planting. It’s a really awesome win win.

nature encounters ben February 07, 2024

How They Do It – Turkey Edition

The crabapple tree being raided by turkeys this time.

It’s hard to tell if the perched turkey is dropping apples on purpose to help its turkey buddies, or if it’s just eating like a pig.

3D modeling / printing ben January 27, 2024

Protected: Crutch Guitar

This content is password-protected. To view it, please enter the password below.

self sustainability, wood ben January 21, 2024

The Cat’s Meow

We bought another woodstove to replace the Alpiner. We keep hearing about how we could burn so much less wood with a more efficient stove, and it’s hard to understand, a log burnt is a log burnt. Why would it make more heat in another stove? Well apparently it does, and I’m not yet convinced of it, but this new stove is riddled with soapstone so at least it’s better at spreading out the release of heat over time. In the very few mornings we’ve had with it, it’s true that it was really easy to get the fire going again with just a few embers. Everything else is… well, like any other stove, we need to get acquainted with it.

The first fire, which sounds great except it’s off gassing so it stinks up the house. It does seem to be a well thought out, modern stove.

It is the first time we have a stove with a window. That aspect is really super nice, there’s nothing like the glow of a fire warming up a room.

Now I can barely move the Alpiner by myself, and the new stove (it doesn’t have a name yet), well it weights 2 to 3 times more… We had it installed thanks to tax incentives, and boy am I glad I didn’t have to move it. I don’t think I fully fathomed just how heavy it is.

It was nice to geek out with a couple of stove guys, and to make sure I wasn’t doing anything stupid since I never had someone official review my stoves and flue builds.

The Alpiner is waiting on the porch for next Spring to be moved to storage with the tractor. It’ll be useful in a cabin or other down the road. I gave it a thick coat of olive oil to prevent rust. It’ll burn off next time we fire it.

plots ben January 17, 2024

Protected: Monster Plots

This content is password-protected. To view it, please enter the password below.

miscellaneous ben January 13, 2024

Protected: 2024 Fort Flag

This content is password-protected. To view it, please enter the password below.

aesthetics, wood ben January 08, 2024

Tree Stump Art

I always leave a little something in the stumps of the trees I take. It can’t be too complicated, and curves are reeeeeally hard. They’re all over the place and the kids love finding them, I hope the grand kids will too.

miscellaneous ben January 08, 2024

RC on Ice, take 2

We brought Esther’s car too, it’s just plain fun except for the ice I ate.

nature encounters ben January 08, 2024

Spot the Owl

It’s impossible on that first one really, but it’s there I swear. I only know where it is because my eyes caught the motion when it flew in.

click pics for high res

Zooming in

It helps when it faces us.

See ya!

miscellaneous ben January 02, 2024

Protected: Treasures & Temperatures

This content is password-protected. To view it, please enter the password below.

apple, self sustainability ben December 22, 2023

7 Gallons Fermented and Bottled up

All routine now :). Looks like only every other year is a (wild) apple year so this will have to last a while. Esther’s been extremely helpful.

organs ben December 18, 2023

The Simple Closed Organ Pipe

Here is the most basic information to build closed organ pipes that sound decent. The information I found online was overwhelming and hard to distill to the essential variables for a beginner. All the following variable names are in bold for reference against the diapason. This diapason is for a standard 29 notes organ.

Here’s an organ pipe and its main parts. The stopper can go up and down to tune it to the exact frequency.

The frequency of the sound it’ll make depends on the length between the lip (top of the mouth) to the bottom of the stopper. This length is called the acoustic length.

In reality, it’s not just this length that is at play, the volume of the pipe comes into the equation. The inside width and depth are relevant.

Of course a lot of the action is at the mouth. This is where the air gets split by the lip.

When the lip splits the air, the air stream oscillates back and forth between the sides of the lip which is the vibration causing the sound.

Zooming in on the mouth, we find a few more variables which matter to how well a pipe will perform. The mouth height and the “light“. A bigger pipe will need more air to get through and a higher mouth. The light is the size of the opening the air is allowed out of to go hit the lip. There might be a better name for it in English, but I don’t know what it is and I like the French name :). The lip and the light are the same size and perfectly aligned.

Reference: Philippe’s incredibly detailed blog on organ making, and many other odd websites. The diapason is his, cross-referenced with another, distilled to the essential variables, and with units standardized to millimeters. Thanks in particular to Philippe for his generosity in making information available and answering questions.

organs ben December 10, 2023

Protected: Organ of Barbaria

This content is password-protected. To view it, please enter the password below.

aesthetics, building, miscellaneous ben November 29, 2023

For All its Imperfections

The house is still very unfinished 8½ years in, but it’s also gotten to be incredibly cozy during the cold months. It’s only ever gotten better over the years, while we slowly forgot what a regular house is like. I know we crave wood heat when we go somewhere it’s not used. We just bought a new stove, a real fancy clean burning one and I’m very much looking forward to using it although it’ll be likely at the end of Winter that we finally get it. To get a clean air tax incentive we were asked for a propane bill or electric bill, they’ll have to do without, things are too perfect where they are. It is putting it mildly to say that we were shaped by our living arrangements, in many ways I feel like the transformation we sought years ago is complete.

nature encounters ben November 29, 2023

How They Do It

The crabapple tree is very popular throughout the day, and deer aren’t the only ones enjoying its ever oddly timed crop.

miscellaneous, self sustainability ben November 29, 2023

Protected: Winter Has Arrived

This content is password-protected. To view it, please enter the password below.

I.T., plotters, web development ben November 19, 2023

And Handwriting for All

I wrote something pretty neat for Plottybot, and for the longest time I thought I should make it available on its own, and detached from the project. Then the most excellent Stuff Made Here guy made a writing machine, and ran into all the issues I ran into which drove me to write my own algorithms for capturing and replaying handwriting. My stuff wasn’t online then and that’s a shame, it was only available by building a Plottybot, or at least using its Pi image. Oh well.

As is tradition, I captured my kids’ handwritings as I do every year some time in the Winter. But this time I made sure to have the new site ready before Thanksgiving so that people could use it as they went and met with loved ones.

So here, this site serves the purpose of capturing one’s handwriting. It supports cursive, character variations, saving, and finally exporting to SVG & GCode. Hopefully this means you can use it with your favorite craft machine for the coolest of personalized projects.

https://ben.akrin.com/plottytools/

I.T. ben November 07, 2023

Pi Zero W to Pi Pico W

We’re finally able to get our hands on some sweet Pis after a long shortage. I got a Pi Pico W because it’s just that cheap, why not? It’s the W that really makes the difference; years ago I went from full Pis to Pi Zeros because the Wifi capabilities meant I didn’t have to worry about USB dongles. Everything I do tends to be Wifi connected so not having it makes a board irrelevant. And so with a W next to the Pico’s name, I’m definitely interested. It’s pretty smart of the Raspberry Pi foundation to put in this functionality into a microcontroller, it’s just enough to get me curious in what I could actually do with it.

Now I have to get over the barrier of not having a fully fledged OS (and the sweet package managers with all the Debian packages that comes with it), but with Wifi I can definitely do some tasks with a Pico I’m usually doing with a Zero. So I figured I’d try replacing the house temperature sensor and see how that goes. I initially tried to use the Pico’s built in temperature sensor, but it’s terribly inaccurate so I did rewire the DS18B20 from the Zero to the Pico.

Brain transfer, The size gain is nice but not particularly significant

Coding was a breeze, there is isn’t much to say about that, but if you’re interested, here the code I’m running for a web server I can ask for current temperature. One thing I learned is that you need to make sure you have a “lib” directory with libraries you might need for your code.

import machine
import time
import network
import socket
from machine import ADC
import machine, onewire, ds18x20

html = """{\"house_temperature\":<TEMPERATURE>}"""

led = machine.Pin( "LED", machine.Pin.OUT )

ds_pin = machine.Pin( 17 )
ds_sensor = ds18x20.DS18X20( onewire.OneWire(ds_pin) )
roms = ds_sensor.scan()
print( "Found DS devices: ", roms )

ssid = "<redacted>"
password = "<redacted>"
wlan = network.WLAN( network.STA_IF )
wlan.active( True )
wlan.connect( ssid, password )

# wait for connect or fail
max_wait = 20
while max_wait>0:
    if wlan.status() < 0 or wlan.status() >= 3:
        break
    max_wait -= 1
    print( "waiting for connection..." )
    time.sleep( 1 )

# handle connection error
if wlan.status()!=3:
    raise RuntimeError( "network connection failed" )
else:
    print( "connected" )
    status = wlan.ifconfig()
    print( "ip = " + status[0] )

# open socket
addr = socket.getaddrinfo( "0.0.0.0", 80)[0][-1]
s = socket.socket()
s.bind( addr )
s.listen( 1 )
print( "web server listening on", addr )

# listen for connections
while True:
    try:
        cl, addr = s.accept()
        print( "client connected from", addr)

        request = cl.recv( 1024 )
        print( request )
        request = str( request )
        
        ds_sensor.convert_temp()
        time.sleep_ms(750)
        response = html.replace( "<TEMPERATURE>", str(ds_sensor.read_temp(roms[0])) ) 
        
        led.value( 1 )
        
        cl.send('HTTP/1.0 200 OK\r\nContent-type: application/json\r\n\r\n')
        led.value( 0 )
        cl.send(response)
        cl.close()
 
    except OSError as e:
        cl.close()
        print('connection closed')

I got the libraries online, but here they are in case it’s useful.

# 1-Wire driver for MicroPython
# MIT license; Copyright (c) 2016 Damien P. George

import _onewire as _ow


class OneWireError(Exception):
    pass


class OneWire:
    SEARCH_ROM = 0xF0
    MATCH_ROM = 0x55
    SKIP_ROM = 0xCC

    def __init__(self, pin):
        self.pin = pin
        self.pin.init(pin.OPEN_DRAIN, pin.PULL_UP)

    def reset(self, required=False):
        reset = _ow.reset(self.pin)
        if required and not reset:
            raise OneWireError
        return reset

    def readbit(self):
        return _ow.readbit(self.pin)

    def readbyte(self):
        return _ow.readbyte(self.pin)

    def readinto(self, buf):
        for i in range(len(buf)):
            buf[i] = _ow.readbyte(self.pin)

    def writebit(self, value):
        return _ow.writebit(self.pin, value)

    def writebyte(self, value):
        return _ow.writebyte(self.pin, value)

    def write(self, buf):
        for b in buf:
            _ow.writebyte(self.pin, b)

    def select_rom(self, rom):
        self.reset()
        self.writebyte(self.MATCH_ROM)
        self.write(rom)

    def scan(self):
        devices = []
        diff = 65
        rom = False
        for i in range(0xFF):
            rom, diff = self._search_rom(rom, diff)
            if rom:
                devices += [rom]
            if diff == 0:
                break
        return devices

    def _search_rom(self, l_rom, diff):
        if not self.reset():
            return None, 0
        self.writebyte(self.SEARCH_ROM)
        if not l_rom:
            l_rom = bytearray(8)
        rom = bytearray(8)
        next_diff = 0
        i = 64
        for byte in range(8):
            r_b = 0
            for bit in range(8):
                b = self.readbit()
                if self.readbit():
                    if b:  # there are no devices or there is an error on the bus
                        return None, 0
                else:
                    if not b:  # collision, two devices with different bit meaning
                        if diff > i or ((l_rom[byte] & (1 << bit)) and diff != i):
                            b = 1
                            next_diff = i
                self.writebit(b)
                if b:
                    r_b |= 1 << bit
                i -= 1
            rom[byte] = r_b
        return rom, next_diff

    def crc8(self, data):
        return _ow.crc8(data)
# DS18x20 temperature sensor driver for MicroPython.
# MIT license; Copyright (c) 2016 Damien P. George

from micropython import const

_CONVERT = const(0x44)
_RD_SCRATCH = const(0xBE)
_WR_SCRATCH = const(0x4E)


class DS18X20:
    def __init__(self, onewire):
        self.ow = onewire
        self.buf = bytearray(9)

    def scan(self):
        return [rom for rom in self.ow.scan() if rom[0] in (0x10, 0x22, 0x28)]

    def convert_temp(self):
        self.ow.reset(True)
        self.ow.writebyte(self.ow.SKIP_ROM)
        self.ow.writebyte(_CONVERT)

    def read_scratch(self, rom):
        self.ow.reset(True)
        self.ow.select_rom(rom)
        self.ow.writebyte(_RD_SCRATCH)
        self.ow.readinto(self.buf)
        if self.ow.crc8(self.buf):
            raise Exception("CRC error")
        return self.buf

    def write_scratch(self, rom, buf):
        self.ow.reset(True)
        self.ow.select_rom(rom)
        self.ow.writebyte(_WR_SCRATCH)
        self.ow.write(buf)

    def read_temp(self, rom):
        buf = self.read_scratch(rom)
        if rom[0] == 0x10:
            if buf[1]:
                t = buf[0] >> 1 | 0x80
                t = -((~t + 1) & 0xFF)
            else:
                t = buf[0] >> 1
            return t - 0.25 + (buf[7] - buf[6]) / buf[7]
        else:
            t = buf[1] << 8 | buf[0]
            if t & 0x8000:  # sign bit set
                t = -((t ^ 0xFFFF) + 1)
            return t / 16

Half the amp draw from a Zero

That’s it!

agriculture, self sustainability ben October 24, 2023

Twice Borne

At some point every July we say goodbye to raspberries until next year. It’s a little sad because they hit first and they’re the best, but we’ve got other berries to keep us happy.

This year some of the plants decided to bear twice! We seem to recall some had this in their description, and I guess the season’s been long enough this year that they went for it. It’s a bit surreal to be brought back to the joys of early Summer at the very end of the season when everything is done and being put the bed for Winter. They taste just as good too.

AI, I.T., miscellaneous ben October 04, 2023

Stable Diffusion

I’ve played with Stable Diffusion a few months back, but the learning curve is steep, and easy access to DallE & MidJourney made it not worth it to press on. Until… I got excited about a super cool extension:

https://huggingface.co/monster-labs/control_v1p_sd15_qrcode_monster

I just love the idea of having the same image have one analog meaning to a human and discrete meaning to a machine. And the same extension can be used for general masking other than just QR codes.

Without further ado, here’s the eye candy:

A benign QR code

General masking for an almost subliminal effect

There’s much to be refined in my incantation, but I really like how the mask isn’t just overlayed on top of a drawing in a subtle way, rather it’s the basis for growth of AI hallucinations.

miscellaneous ben October 04, 2023

Of the Past?

Robin found it in a local river bed. It’s still fairly sharp and surprisingly light and well balanced. I have no idea if it is a real Native American artifact or not. For the stories of the past we like to entertain considering its origin, I hope the person who crafted it paused a minute to think of the stories of the future and who would find it. I hope some of the stuff I leave behind make a little boy’s day some time.

agriculture, self sustainability ben October 03, 2023

Keeping Up with the Harvesting

There’s so much harvesting to do in the Fall. Nicole dug up a ton of potatoes while I was making cider.

Then I walked past the orchard and saw a whole bunch of hazelnuts ready to be picked, crap, I don’t even know what to do with them.

I’ll just grab a basket and figure it out later.

nature encounters ben October 03, 2023

Baby Coyote

There’s a couple of baby coyotes hanging out all the time on the upper field. They take off whenever we show up.

Not to ruin a happy baby story, I think they are abandoned, have mange, and I’ve only seen one of them for the last few days :|.

It’s a bummer they’re having a hard time, I’ve rarely seen coyotes even though we hear them all the time, and I was happy to have a few encounters.

Posts pagination

← Previous 1 … 8 9 10 … 53 Next →

This blog is solar powered

Interactive

Handwriting Capture
Mandalagaba
IPv6 link-local to MAC converter
IPv6 MAC to link-local converter
Markov Text Generation
Markov Word Generation
Markov Music Generation
Duplogrifier
Flood Fill Algorithms
Homestead Metrics
RGB Playground
Web Games

Categories

  • aesthetics112
    • plots54
    • specular holography6
  • Books4
  • I.T.207
    • 3D modeling / printing21
    • AI7
    • all out geekery38
    • electronics29
    • homestead automation7
    • maniacal paranoia27
    • plotters49
    • unix / linux29
    • video games4
    • web development30
    • web games3
  • Lego / Duplo67
  • life in the U.S.42
  • miscellaneous204
  • nature encounters116
  • old vinyls3
  • organs2
  • self sustainability565
    • agriculture109
    • apiculture38
    • apple20
    • building132
    • canning3
    • crochet6
    • foraging6
    • hunting10
    • maple syrup47
    • poultry39
    • preserving3
    • solar power28
    • water23
    • wood85
  • trip to a new life6
Theme by Bloompixel. Proudly Powered by WordPress