Localized Nihilism

Do your personal sufferings have meaning? I think yes – but that meaning is likely unknowable in the short term. Perhaps a type of micro-nihilism is appropriate. Give time and thought to to understanding the world at large – God, emotion, meaning. Your own problems? Mark them as meaningless.

Self pity (both deserved and contrived) will come but don’t dwell on it. Save nihilist tendencies for your own troubles – don’t let them invade the world at large. It is a mistake to allow you own suffering to lead you to believe all of life is meaningless. Too much self-reflection is rightly deemed prideful.

Everything is under God’s control. Don’t believe in God? Ok. The universe has order. Don’t fall too hard for the idea of chaos. Chaos Theory is valid but it breaks down when you try to define actual randomness. Proving the existence of randomness is hard. It’s not a popular belief but I think our universe is very likely deterministic – one big chain of events of which even the chaotic events can be explained if one could follow the chain at that quantum level. True randomness and chaos require extra-dimensional input. They lead us back to either the supernatural or some form of multi-verse commingling (do parallel universes bump up against each other and leak into each other?)

A deterministic universe doesn’t bestow meaning, however perhaps it does give inevitability that you should find a form of strange comfort in. To be clear, my own believe is in a God that is in control (even if you choose to see him as the simulation master in a holographic fake universe). God has a righteous reason for everything that happens.

 

Rsync with Hetzner storage boxes

In all examples, replace u2xxxxx-sub5 and u2xxxxx.your-storagebox.de with the names of your user and storage box.

First, make sure “external reachability” and “ssh” are enabled.

You can make the base directory easily by ftp’ing in first and creating the directory. Next, open the web interface and set the base directory for the sub-account to the one you just created.

To use rsync a directory to the storage box:

rsync -aze 'ssh -p 23' directory-name-here u2xxxxx-sub5@u2xxxxx.your-storagebox.de:

To use rsync a directory from the storage box into the current directory (signified by a single dot)

rsync -aze 'ssh -p 23' u2xxxxx-sub5@u2xxxxx.your-storagebox.de: .

You can also connect via ftp.

Problems:

Because rsync is not running as root on the remote server you cannot preserve all file ownership and symlinks (?), etc. Add the option :

--fake-super

to store user and permission values.

You can also use borg backup over rsync to solve this problem. I use it for some projects but it is not ideal for all uses.

How not to be taken advantage of

The more you give of yourself, the more possibility there is of an uncaring person taking advantage of you. When you befriend the down trodden and desperate, your chances increase even more.

What do I mean by “taken advantage of”? In this case I mean things serious enough to get you into trouble while trying to help. There’s no stopping the average level of being taken advantage of. It’s not worth trying to stop people from being ungrateful or mean. However you do need to guard against cases where your generosity gets you or your family into trouble.

I realized the way to protect yourself is to simply refuse to do anything dishonest. Sounds simple but I think it is very easy to slip into slight dishonesty to help someone in trouble – small lies and omissions to get them out of a bind. However when dealing with the law, it is exactly such small lies that can get you into a lot of trouble. When the law or society wants someone to blame, they’ll find every minor transgression in order to pin the blame on someone (you!).

So, when asked “Hey, could you maybe [insert some seemingly innocuous favor]” you simply reply. “I’m sorry but it would not be honest of me to do that”, etc. I imagine myself slipping into a Fred Rogers impersonation for moment – “I care for you. I won’t abandon you but I cannot do the thing you are asking.”

The key is to show the person that you still love and support them. They will be angry that you won’t do what they want. Hopefully, they will look back and realize that you supported them with your love and honest forms of help.

Faderfox SC4 Tutorial and Notes

Overview

The highest level division in the SC4 is a setup. A setup can be either a midi controller setup or sequencer setup. The SC4 can store 30 setups.

Midi controller setups contain 8 groups which each contain 8 knobs and pushbuttons (built into the knobs). By selecting different groups with the green buttons at the bottom you have access to 64 knobs and 64 button assignments at once (ie. without changing setups).

Sequencer setups contain 8 patterns. Each pattern contains 7 tracks each of which stores one of note, octave, accent, length, repeats, probability or a midi cc. Each pattern is 8 steps long. Patterns can be linked to give a total of 64 steps.

Setups

The SC4 has 30 “set ups”. A “set up” is the configuration for the knobs. Usually you would assign each setup to a particular device. For example, setup 1 might have the knobs set to control a Waldorf Blofeld, while setup 2 controls an Elektron A4. Of course you can map the knobs to any midi channel and supported message you like. The division of a setup per synth or device is only an example. You can easily have a setup whose knobs control parameters on multiple devices on different midi channels.

The important concept is this: setups configure what the knobs on the SC4 do.

You change setups by pressing both shift buttons (in the top corners of the SC4) to enter edit mode and then rotating the First encoder (labeled Setup on the top and Tempo on the bottom). When you have selected your desired setup, press the two shift buttons again. If turning the knobs does not change setups, press the knobs down once and try again.

Setups can be one of two types – midi cc’s or sequencers.

Midi cc setups will display ‘GrPx’ after being selected (short for “Group x” – we’ll discuss this below). Sequencer setups will display “Octx”, “Note” or another value.

We’ll discuss Midi cc setups first.

Midi CC Setups

Midi CC Setups send various midi controllers when the knobs are turned. Each setup has eight “groups”. Each group is a set of assignments for the 8 physical knobs on the SC4. You change groups by pressing the green buttons along the bottom of the SC4. Using groups you have quick access to 64 midi cc’s at once using the knobs (you also have 64 on/off controls by pressing the knobs).

Editing is done by entering edit mode (the same mode you enter to select a setup) and then using the knobs to edit (see manual for this – it is straight forward)

Sequencer Setups

The SC4 Sequencer mode works as follows:

  1. Select a sequencer setup
  2. Press the green buttons 7 and 8 at the same time. This puts you into “Sequencer Control” mode.
  3. Press encoder 5 to start the sequencer playing
  4. Press Green button 1 to select track one
  5. Turn the encoders to set the note for each step
  6. Press and encoder to toggle a step between on and off

Randomization

To randomize a track:

  1. Select the track using the green buttons at the bottom
  2. Press left shift + the track green button to randomize the values
  3. Press right shift + the track green button to randomize the states (on/off, etc.)

Using sox to split audio file (create sample set)

mkdir sox
mv 0003\ mfb\ 522-1.aif sox
cd sox
sox -V3 mfb522.aif p.wav silence -l  0   1 0.5 0.1% : newfile : restart
sox -V3 mfb522.aif p.wav silence -l  0   1 0.1 0.1% : newfile : restart
sox -V3 mfb522.aif output.wav silence 1 3.0 0.1% 1 0.3 0.1% : newfile : restart
man sox
sox -V3 mfb_synth_ii.aif mfb_synth_ii.wav silence 1 3.0 0.1% 1 0.3 0.1% : newfile : restart
sox -V3 mfb_synth_ii.aif p.wav silence -l  0   1 0.1 0.1% : newfile : restart
sox RAW_VN_047.wav -v 0.99 -b16
sox RAW_VN_047.wav -v 0.99 -b16| less
sox -v 0.99 RAW_VN_047.wav -b16
sox -e signed-integer RAW_VN_047.wav -b16
sox RAW_VN_047.wav -b16
sox RAW_VN_047.wav -b16 out.wav
sox -e signed-integer RAW_VN_047.wav -b16 out.wav
sox -v 0.99 RAW_VN_047.wav -b16 out.wav
cd sox

Notes on programming the Bitstream 3x Midi Controller

First some terminology: a “group” is the 3x’s name for a what would usually be called a preset – a definition of what all the controls should transmit. For most uses one would have a group for each device one wants to control.

To select a group, press the “group” button on the bottom row (right of the cross fader) and then press the increment up/down buttons.

It is also necessary to set the mode of the machine. For most custom purposes you will select the “user” mode. Do this by pressing the “Mode” key. Each press cycles through the available modes.

By default, all controls generate messages on the same midi channel. The Bitstream 3x does not allow one to configure each control to transmit on a separate midi channel from the machine itself. To do this you need to use the configuration software. The software is a bit confusing and has a few bugs, here is the best way to set it up:

1. Set the Group name in the “Global Parameters” tab

2. In the “Assign User & Mackie/Logic modes” tab, do the following for each control:

a. click the control

b. change “Midi channel position (N) to 0 – setting it to zero makes it use its own control

c. change the text box to the right of it to the channel you want the control to send (the control is labeled “0=Fixed >> Channel”

d. Pick the midi cc to send in the “Use Standard Template” dropdown box

e. Set the LCD String

You can also type the midi string in directly but in my experience this can lead to errors when trying to save the settings to the machine.

Before you try to send/save the settings to the 3x hardware, press the Save icon. This will check the configuration and return any errors. If you attempt to save to the machine, the software will not signal an error until it attempts to copy the settings to the machine. This will stop the whole copy process and force you to fix the error and start again. You will save a lot of time by using the save button in the software as a method to check for errors before sending to the hardware.

In my experience, most errors tended to arise from typing in the midi string manually to save from dealing with the drop down boxes repeatedly. Sometimes it worked fine but other times I think the software got confused and would reset the controls to invalid values. After many such errors, I started using the drop down value pickers only and not manually typing in values.

Moving vpopmail directories

For years I have somehow thought moving vpopmail domains between vpopmail installs was hard (ie. from one server to another). I even went so far as to custom build vadddomain binaries which forced creation to a particular directory (ie: /home/vpopmail/domains/0/, /home/vpopmail/domains/1/).

If you are not familiar with the “problem” it is that in larger installs vpopmail balances the mail directories among subdirs in ~vpopmail/domains. If all your domains are in a single directory (~vpopmail/domains) you are fine – just vadddomain on the new machine then rsync the data directories. The problem arises when you vadddomain on the new install and it assigns a different directory on the new server than on the old one.

Because qmail stores much of the mapping in cdb databases I somehow began thinking it would be a lot of work to update these. I was wrong. It is actually quite easy. First, tar up the users dir on the source server :

cd /
tar czpf /root/backup.tgz /home/vpopmail/domains/2/whatever.org

On the new server:

~vpopmail/bin/vadddomain whatever.org
cd /
wget http://whatever.org/backup.tgz
tar xzpf backup.tgz

Edit /var/qmail/users/assign – vadddomain likely created the new install using a different subdirectory.

emacs /var/qmail/users/assign
# edit the directory the domain maps to (should be the last line in the file)
/var/qmail/bin/qmail-newu

Confirm all is well with a vdominfo on the new server:

~vpopmail/bin/vdominfo whatever.org

This should show the “old” vpopmail directory that you copied over. As always send a test to make sure all is well. Start with a local test before updating DNS, if the test is delivered correctly, update DNS and test remotely.

Basic git usage

Assuming you have already cloned a repository, the best place to start is with:

git status

This will show the current state of the files including the branch you are on and any untracked changes. If you’ve come back to a project after a few days off, this will remind you where you are (which branch) and what you were doing (un-committed changes and diffs).

‘git status’ may show modified files, such as:

On branch master
Your branch is ahead of 'origin/master' by 3 commits.
  (use "git push" to publish your local commits)

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   ../../../src/apps/sequencer/engine/generators/RandomGenerator.cpp

no changes added to commit (use "git add" and/or "git commit -a")

To find out what is different in your changed files, type:

 git diff ../../../src/apps/sequencer/engine/generators/RandomGenerator.cpp

If your diff output is formatted incorrectly (escape codes instead of colors), try:

git config --global core.pager "less -R"

To show all branches:

git branch -a

To create a new branch:

git checkout -b <NEW BRANCH NAME>

To change to a new branch:

git checkout <branch name here>

To change back to the “default” branch :

check checkout master

To delete a branch:

git branch -d <branch_name>

To commit your changes

git commit -m "comment here"

Upload your changes to github

git push --set-upstream origin <your-branch-name-here>

The simplest way to create a pull-request and contribute code to open source projects on Github

Make a github account

Go to the project you want to contribute to

Press the “fork” button

Check out your forked copy of the project

git clone https://github.com/YOUR_USER_NAME_HERE/FORKED_PROJECT_NAME_HERE.git

Create a new branch and check it out (change “branch-name” to something descriptive of your work)

git checkout -b branch-name

Make your changes

Add each new or modified file to your commit :

git add path/to/file/file_name.c

Commit your change to your local branch

git commit -m "Add a comment about your changes here"

Sync your fork in case there have been any additions to the primary repository since you started your work

git remote add upstream https://github.com/original-owner-username/original-repository.git
git fetch upstream
git checkout master
git merge upstream/master

Push your changes to your forked repository on github

git push --set-upstream origin branch-name

Go to the page on github for your forked repository and press the “Compare & Pull Request” button. Follow the directions to create the pull request.

(adapted from https://www.digitalocean.com/community/tutorials/how-to-create-a-pull-request-on-github)