Stupid bagpipe tricks

Playing two chanters at the same time.

Made a bagpipe octopus

I think it was Burns Night 2005. We took one pipebag, took the drones out. And added one blowpipe and three chanters.
We were struggling to play the damn beast with 4 people.

A picture should exist somewhere, add it when found.

Smallpipe adaptor for two chanters.

Xmas tree lights in the drones

I’ve seen some do this, but never with xmas balls also.

Playing the THX sound

Alternative playing

Above in the movie with two chanter you can see tape.
You can tape other notes, for accidentals.

I’ve started a set with our folkband with my hands reversed.
(Left on the bottom part of the chanter, right hand toppart)
After playing amazing grace, I switched hands every few bars.

Playing high A gracenote with tophand index finger.

Play a tune and slide bottomhand over your top hand down.

Tape or block the bottom sound holes.

A old old movie (2005?), when we lift our knees we close the bottom sound hole on the side of the chanter.

Playing with the holes on the inside

Best of Einaudi (lying down)

Music by Ludovico Einaudi, pianist Jeroen van Veen.
And you could lie down in the big “Werkspoorkathedraal” in Utrecht.

Ludovico Maria Enrico Einaudi (Italian: born 23 November 1955) is an Italian pianist and composer. Trained at the Conservatorio Verdi in Milan, Einaudi began his career as a classical composer, later incorporating other styles and genres such as pop, rock, folk, and world music.

Einaudi has composed the scores for a number of films and television productions, including This Is England, The Intouchables, I’m Still Here, the TV miniseries Doctor Zhivago, and Acquario (1996), Nomadland and The Father.

He has also released a number of solo albums for piano and other instruments, notably I Giorni in 2001, Nightbook in 2009, and In a Time Lapse in 2013.

Coline plays some of Einaudi on keyboard, and we play I Giorni with our Folkband.

Update 2023

Fermenting sauerkraut in a crock

We love fermenting!
Sometimes we ferment our own sauerkraut.

Depending on the volume it can take at least 2 weeks up to several months.

If you don’t have crock pot weights, use a plastic bag filled with water.
(See below)

Mixture: Salt, juniper berries, dill, celery seeds and caraway.

  • Rinse Cabbage and clean. Cut out and discard the hard white center.
  • Take the largest leaves from one cabbage and lay them out at the bottom of your clean and rinsed out crock pot.
  • Shred the rest of the cabbage.
  • Add a layer of shredded cabbage over the laid out leaves in the crock pot. Sprinkle some of above mixture over this layer. Compress by stomping down with the stomper.
  • Repeat the layering process until you used up all the cabbage, salt, and juniper berries. After each layer stomp it down.
  • Pour all the luke warm water over the cabbage. That will activate the fermentation process.
  • Place clean crock pot weights over the cabbage and close the crock pot with the lid. Pour water into the ring of your crock pot and make sure there is always water in that.
  • Wait several weeks until cabbage is done fermenting into Sauerkraut.

Some books about the subject we own

Little shared presentation thingy

This little script I made for work.
It allows for a webpage to being shared and updated semi realtime.

We made todo notes using it.

Extract below zip file in a subdirectory in your web accessible server.

https://media.henriaanstoot.nl/edit.tgz

Edit screen, note the little write me file button which is not visible in the movie below.
Example changing text (button press not visible)

It uses a jquery rich text editor javascript library.

CPU / Memory analog meters

Today i used some analog meters to display cpu load and memory usage.

Using below 12 bit DAC (MCP4725 ) and a Wemos Mini

Usage: (Anything you can come up with, if you got a value, you can display it)

curl http://IP/specificArgs?dac_value=$(grep 'cpu ' /proc/stat | awk '{usage=($2+$4)*1000} END {print usage }' |cut -f1 -d.)

Arduino code

#include <ESP8266WiFi.h>            
#include <ESP8266WebServer.h>
#include <Wire.h>
#include <Adafruit_MCP4725.h>
#define MCP4725 0x62   

unsigned int adc;
byte buffer[3];          
Adafruit_MCP4725 dac;

char dac_value_tmp[6] = "0";
int dac_value = 0;
ESP8266WebServer server(80);   //Web server

void setup() {
  Wire.begin();
Serial.begin(115200);
WiFi.begin("accesspoint", "accesspointpass"); 
while (WiFi.status() != WL_CONNECTED) { 
delay(500);
Serial.println("Waiting to connect…");
}
Serial.print("IP address: ");
Serial.println(WiFi.localIP());  //Print IP 
server.on("/genericArgs", handleGenericArgs); 
server.on("/specificArgs", handleSpecificArg);  
server.begin();                        //Start the server
Serial.println("Server listening");   
 dac.begin(0x60); // The I2C Address
}
void loop() {

    uint32_t dac_value;
    int adcValueRead = 0;
    float voltageRead = 0;
server.handleClient();   

}
void handleGenericArgs() { //Handler
String message = "Number of args received:";
message += server.args();     //Get number of parameters
message += "\n";                 

for (int i = 0; i < server.args(); i++) {
message += "Arg nº" + (String)i + " –> "; 
message += server.argName(i) + ": ";    
message += server.arg(i) + "\n";         
} 
server.send(200, "text/plain", message);   
}
void handleSpecificArg() { 
String message = "";
if (server.arg("dac_value")== ""){     //Parameter not found
message = "dac_value Argument not found";
}else{     
message = "dac_value = ";
message += server.arg("dac_value");     //Gets the value of the query parameter
    
int dac_value = server.arg("dac_value").toInt();  
      Serial.print("DAC Value: ");
      Serial.print(dac_value);

 buffer[0] = 0b01000000;   
  buffer[1] = dac_value >> 4;              //Puts the most significant bit values
  buffer[2] = dac_value << 4;              //Puts the Least significant bit values
  Wire.beginTransmission(MCP4725);         //Joins I2C bus with MCP4725 with 0x61 address
  
  Wire.write(buffer[0]);            //Sends control byte 
  Wire.write(buffer[1]);            //Sends the MSB to I2C 
  Wire.write(buffer[2]);            //Sends the LSB to I2C
  Wire.endTransmission();           //Ends the transmission
}
server.send(200, "text/plain", message);          //Returns the HTTP response
}
Little different image MCP4725 .. Analog meter between resistor and white.

Resistor depends on the range of your analog meters

Slavink en hamburgers

Notes:

  • Varkenssnippers 700gr
  • (Flinterdunne speklapjes) ik had omwikkelspek (3 zakjes)
  • 12-16 gram zeezout bij malen in
  • voor 500gr pittige gehaktkruiden

Variant:

  • 300 rundergehakt
  • 12 plakken gerookte ontbijtspek
  • 1 teen knoflook
  • 1 ei
  • Snuf peper en zout
  • 1 theelepel mosterd
  • 3 eetlepel paneermeel
  • 1 eetlepel gedroogde peterselie

Mijn vleesmolen

Bestron AMG600 – Elektrische Vleesmolen

Tips: Zorg dat je vlees goed koud is! Anders loopt de vleesmolen vast.

Smoker

After fooling around on my trusty Weber, i bought myself a offset smoker.

My good friend Vincent, talked me into buying a big metal beast, and i never had any regrets.

Macro Buttons

A box with macro buttons for your PC using Arduino Leonardo

#include <Keypad.h> // matrix read
#include <Keyboard.h> // keyboard out

#define ENABLE_PULLUPS // fuck the resistors
#define NUMBUTTONS 25 // matrix
#define NUMROWS 5 // matrix rows
#define NUMCOLS 5 // matrix cols

int analog1 = A3;
int analog2 = A7;


int inPinctrl = 3;  // function ctrl, pull to vcc
int inPinalt = 4;  // function alt, pull to vcc 
int valctrl = 0;    // variable to store shifter
int valalt = 0;    // variable to store shifter
int joyx = 0;
int joyy = 0;

//define the symbols per key
char buttons[NUMROWS][NUMCOLS] = {
  {'q','w','e','r','t'},
  {'y','u','i','o','p'},
  {'a','s','d','f','g'},
  {'h','j','k','l','z'},
  {'x','c','v','b','n'},
};
// q-1 (star)      e-zoomin    r-prev t-up
// y-2 u-clearstar             o-open p-down
// a-3 (rate)      d-zoomreset f-full g-left
// h-4 j-clearrate             l-esc  z-right
// x-5 c-slideshow v=zoomout   b-next

//    14 16 10 9  8 
// 21 q  y  a  h  x  
// 20 w  u  s  j  c
// 19 e  i  d  k  v 
// 18 t  p  g  z  n
// 15 r  o  f  l  b 

byte rowPins[NUMROWS] = {16,20,19,18,15}; //connect to the row pinouts of the keypad
byte colPins[NUMCOLS] = {14,7,10,9,8}; //connect to the column pinouts of the keypad

//initialize an instance of class NewKeypad
Keypad buttbx = Keypad( makeKeymap(buttons), rowPins, colPins, NUMROWS, NUMCOLS); 


void setup() {

  Serial.begin(115200); // debug out baud
  pinMode(inPinctrl, INPUT);    // sets the digital pin 3 as input
  pinMode(inPinalt, INPUT);    // sets the digital pin 4 as input
  digitalWrite(inPinctrl, HIGH);       // turn on pullup resistors
  digitalWrite(inPinalt, HIGH);       // turn on pullup resistors
  Keyboard.begin();        // keyb starter
}



void loop() { // loop the program

  CheckAllButtons(); // check tha buttons

}


void CheckAllButtons(void) {
  joyx = analogRead(analog1);
  joyy = analogRead(analog2);
  Serial.println(joyx);
  Serial.println(joyy);
  if (joyx > 900) { 
      Keyboard.press(KEY_UP_ARROW);
      delay(150);
      Keyboard.releaseAll();
  }
  if (joyx < 200) { 
      Keyboard.press(KEY_DOWN_ARROW);
      delay(150);
      Keyboard.releaseAll();      
  }
  if (joyy > 900) { 
      Keyboard.press(KEY_LEFT_ARROW);
      delay(150);
      Keyboard.releaseAll();
  }
  if (joyy < 200) { 
      Keyboard.press(KEY_RIGHT_ARROW);
      delay(150);
      Keyboard.releaseAll();
  }

  
  char key = buttbx.getKey();

  if (key != NO_KEY)  {
      valctrl = digitalRead(inPinctrl);   // read the function pin
      valalt = digitalRead(inPinalt);   // read the function pin
      Serial.write(valctrl);  // debug
      Serial.println();  // enter
      Serial.write(valalt);  // debug
      Serial.println();  // enter
      Serial.write(key);  // debug
      Serial.println();  // enter
      // button 1 
          if (key == 'q') {
            if (valctrl == 0) { // function shifter active?
               Keyboard.press(KEY_LEFT_CTRL); 
            }
            if (valalt == 0) { // function shifter active?
               Keyboard.press(KEY_LEFT_ALT); 
            }
           Keyboard.press('1');
           delay(150);
           Keyboard.releaseAll();
          }
      // button 2
          if (key == 'y') {
            if (valctrl == 0) { // function shifter active?
               Keyboard.press(KEY_LEFT_CTRL); 
            }
            if (valalt == 0) { // function shifter active?
               Keyboard.press(KEY_LEFT_ALT); 
            }
           Keyboard.press('2');
           delay(150);
           Keyboard.releaseAll();
          }
      // button 3
          if (key == 'a') {
            if (valctrl == 0) { // function shifter active?
               Keyboard.press(KEY_LEFT_CTRL); 
            }
            if (valalt == 0) { // function shifter active?
               Keyboard.press(KEY_LEFT_ALT); 
            }
           Keyboard.press('3');
           delay(150);
           Keyboard.releaseAll();
          }
      // button 4
          if (key == 'h') {
            if (valctrl == 0) { // function shifter active?
               Keyboard.press(KEY_LEFT_CTRL); 
            }
            if (valalt == 0) { // function shifter active?
               Keyboard.press(KEY_LEFT_ALT); 
            }
           Keyboard.press('4');
           delay(150);
           Keyboard.releaseAll();
          }
      // button 5
          if (key == 'x') {
            if (valctrl == 0) { // function shifter active?
               Keyboard.press(KEY_LEFT_CTRL); 
            }
            if (valalt == 0) { // function shifter active?
               Keyboard.press(KEY_LEFT_ALT); 
            }
           Keyboard.press('5');
           delay(150);
           Keyboard.releaseAll();
          }
      // button i - clear rate
          if (key == 'i') {
           Keyboard.press(KEY_LEFT_CTRL); 
           Keyboard.press('0');
           delay(150);
           Keyboard.releaseAll();
          }
      // button k - clear label
          if (key == 'k') {
           Keyboard.press(KEY_LEFT_ALT); 
           Keyboard.press('0');
           delay(150);
           Keyboard.releaseAll();
          }
      // button v - slideshow
          if (key == 'v') {
           Keyboard.press(KEY_ESC); 
           Keyboard.press(KEY_LEFT_CTRL); 
           Keyboard.press('s');
           delay(150);
           Keyboard.releaseAll();
          }
      // button t - zoomin
          if (key == 't') {
           Keyboard.press('+'); 
           delay(150);
           Keyboard.releaseAll();
          }
      // button g - zoomreset
          if (key == 'g') {
           Keyboard.press('*');
           delay(150);
           Keyboard.releaseAll();
          }
      // button n - zoomout
          if (key == 'n') {
           Keyboard.press('-'); 
           delay(150);
           Keyboard.releaseAll();
          }
//r  o  f  l  b
      // button r - prev
          if (key == 'r') {
           Keyboard.press(KEY_LEFT_CTRL); 
           Keyboard.press(KEY_LEFT_ARROW); 
           delay(150);
           Keyboard.releaseAll();
          }
           
      // button o - open
          if (key == 'o') {
           Keyboard.press(KEY_RETURN); 
           delay(150);
           Keyboard.releaseAll();
          }
           
      // button f - full
          if (key == 'f') {
           Keyboard.press('f'); 
           delay(150);
           Keyboard.releaseAll();
          }
           
      // button l - esc
          if (key == 'l') {
           Keyboard.press(KEY_ESC); 
           delay(150);
           Keyboard.releaseAll();
          }
           
      // button b - next
          if (key == 'b') {
           Keyboard.press(KEY_LEFT_CTRL); 
           Keyboard.press(KEY_RIGHT_ARROW); 
           delay(150);
           Keyboard.releaseAll();
          }
           





          
  }
}

3D printed a stone

Why? Because i can

While on holiday in New Zealand i made photos of a rock i found on the campsite we where. Nothing special about the rock, but it was a nice subject to try to replicate.

So i took many many pictures of the stone from all sides.

Imported those images in meshroom and convered it to a 3D stl object.

Blender object

Printing and airbrushing

Added some grass from our clock project

"If something is worth doing, it's worth overdoing."