Choosing a Random Synth in Sonic Pi

Towards the end of our coding class at school today, one of the children asked me how they would choose a random synth in their code.  I couldn’t give them the answer off of the top of my head so I came home and have placed two different solutions below:

# Choosing a Random Synth in Sonic Pi

# Solution 1
10.times do
  use_synth [:beep, :blade, :cnoise, :dpulse].choose
  play :C3
  sleep 1
end

# Solution 2
10.times do
 use_synth choose([:beep, :blade, :cnoise, :dpulse])
 play :C3
 sleep 1
end

 

Check or change the Timezone in Debian

To see or change what timezone your Debian system is configured for:

dpkg-reconfigure tzdata

More detailed information is available in the Debian Wiki

More specifically, I used this in a setup of HypriotOS, a minimal Debian-based operating systems that is optimised to run Docker on ARM devices. In this instance it was an old Raspberry Pi Model B running NodeRed in a Docker Container.

I needed to get the time in the Docker Container to match the time on the host.  Achieved, as below, where /etc/localtime on the host is mapped to /etc/localtime in the container when it is created.

docker run --restart=always -p 1880:1880 -d --name nodered -v /etc/localtime:/etc/localtime:ro -v node_red_user_data:/data nodered/node-red-docker:0.17.4-rpi

I have used NodeRed to subscribe to messages from an MQTT service I have running that publishes various messages from various nodes around our house.  The NodeRed code listens for some of these messages and uses the AWS Polly Service to convert them to speech and read them out to us.

There’s a sample of the speech, below, as well as screen shots of the NodeRed flows.

Sonic Pi Coding Class – 002

My little boy, James, has been taking piano lessons for two terms now. Last week, his teacher asked him to do an assignment on a minuet.

James knows I’ve been running a coding group at school with Sonic Pi so he asked his teacher if he could write his minuet in Sonic Pi as part of his work.  It was his first coding in a non block type language like Scratch.  I think he did a super job!  James’ version is on his own web page, here.

I thought it would be a good opportunity for me to have a go too so that I could become more familiar with what I am talking to the children about in the class.  Here’s my version which includes the student and the teachers parts played as a duet.  It took me a couple of hours to figure it all out so it was a good challenge!

Press the play button, below, to see how it turned out.

#
# Petit Minuet
#
# 170704
#
# From page 47 of Piano Adventures by Nancy and Randall Faber
# Lesson Book : Primer Level
#

# I have no idea how I originally came up with this number!
speed_multiplier = 0.5 / 8

q = 4 * speed_multiplier      # Quaver          1/8
c = 8 * speed_multiplier      # Crotchet        1/4
m = 16 * speed_multiplier     # Minim           1/2
md = 24 * speed_multiplier    # Dotted minim
s = 32 * speed_multiplier     # Semibreve       1/1

# Extend the default release time of 1 second to
# give a slightly more pleasant sound
use_synth_defaults attack: 0.0125, release: s * 8

# Student
in_thread do
  use_synth :piano
  
  play_pattern_timed [:c5, :c5, :b4], [c, c, c]
  play_pattern_timed [:c5, :d5], [m, c]
  play_pattern_timed [:e5, :e5, :d5], [c, c, c]
  play_pattern_timed [:e5, :f5], [m, c]
  play_pattern_timed [:g5, :g5, :c5], [c, c, c]
  play_pattern_timed [:b4, :c5], [m, c]
  play_pattern_timed [:f5, :e5, :d5], [c, c, c]
  play_pattern_timed [:c5], [md]
end

# Teacher right hand
in_thread do
  use_synth :piano
  
  # Bar 1
  play_pattern_timed [:e4, :e4, :d4], [c, c, c]
  
  # Bar 2
  play_pattern_timed [:e4, :d4], [m, c]
  
  # Bar 3
  2.times do
    play_chord [:c4, :a3]
    sleep c
  end
  
  play_pattern_timed [:b3], [c]
  
  # Bar 4
  play_pattern_timed [:c4, :f4, :e4, :d4], [c, q, q, c]
  
  # Bar 5
  play_pattern_timed [:e4, :e4, :e4], [c, c, c]
  
  # Bar 6
  play_pattern_timed [:d4, :e4], [m, c]
  
  # Bar 7
  play_chord [:f3, :a3]
  sleep q
  
  play :d4
  sleep q
  
  play_chord [:g3, :c4]
  sleep c
  
  play_pattern_timed [:b3], [c]
  
  # Bar 8
  play_pattern_timed [:c4], [md]
end

# Teacher left hand
in_thread do
  use_synth :piano
  
  # Bar 1
  play_pattern_timed [:c3, :c3, :g3], [c, c, c]
  
  # Bar 2
  play_pattern_timed [:c3, :d3, :e3, :f3, :g3], [q, q, q, q, c]
  
  # Bar 3
  play_pattern_timed [:r, :r, :e3], [c, c, c]
  
  # Bar 4
  play_pattern_timed [:a2, :b2], [m, c]
  
  # Bar 5
  play_pattern_timed [:c3, :r, :c3], [c, c, c]
  
  # Bar 6
  play_pattern_timed [:g2, :b2, :c3], [c, c, c]
  
  # Bar 7
  play_pattern_timed [:r, :r, :g2], [c, c, c]
  
  # Bar 8
  play_pattern_timed [:c3, :g2, :c2], [c, c, c]
end

Get Spell Checking Working in Libre Office on a Raspberry Pi

Spell checking never seems to work, by default, in Libre Office on a Raspberry Pi.

To get it working:

# Go to:
https://extensions.libreoffice.org/extensions/english-dictionaries/

# Click on the Current Release or go to the below URL which
# is current as of now!
https://extensions.libreoffice.org/extensions/english-dictionaries/2017-01.01

# Download the .oxt file

# In Libre Office go to Tools / Extension Manager

# Add the .oxt file

# Spell checking now works!

 

Mount a Network Drive on a Raspberry Pi

This has been tested on Jessie with the PIXEL Desktop. I haven’t tested it in previous versions.  Substitute the IP address in fstab and the share name, as appropriate!

# Make a directory in /mnt
sudo mkdir /mnt/DataDisk

# Edit fstab:
sudo nano /etc/fstab

# Add a line with a similar format as below
//192.168.178.240/DataDisk /mnt/DataDisk cifs guest,iocharset=utf8,_netdev,x-systemd.automount 0 0

# Reboot and check that things mount OK after a reboot
sudo shutdown -r now

 

Show Docker Stats with Container Name Instead of Container ID


GUTE-URLS

Wordpress is loading infos from docker

Please wait for API server guteurls.de to collect data from
docs.docker.com/engine/referen...

docker stats $(docker ps --format={{.Names}})