Monday, November 13, 2017

Installing the Ninja and Meson Build Systems on OSX

I never use OSX. Doing so today has felt like trying to play guitar left handed, or say the alphabet backwards. I know what needs to be done but its unnatural and frustrating.

But I had to for work to test my meson build descriptions. I won't introduce them here, but meson seems pretty awesome and it depends on ninja for what usually make is used for.

If you are here you probably know that already anyway.

Thursday, June 23, 2016

Room Treatment and Open Source Room Evaluation

Its hard to improve something you can't measure.

My studio space is much much too reverberant. This is not surprising since its a basement room with laminate flooring and virtually no soft, absorbant surfaces at all. I planned to add acoustic treatment from the get go, but funding made me wait until now. I've been recording doing DI guitars, drum samples, and synth programming, but nothing acoustic yet until the room gets tamed a little bit.

Friday, February 26, 2016

Why Does Programming Have So Many Holy Wars?

I was chatting with my brother and my Dad about the silly arguments programmers get into. Editors (me: vim, bro: emacs, dad: brief). Tabs vs spaces (all: spaces), bracket placement,  C vs C++,  Inheritance vs composition, the list goes on and on. Why?

I guess its because unlike say, space travel that was highly documented by a single agency, or say civil engineering which is regulated by building code and strict best practice rules, coding developed ad-hoc. Hackers all maker their own rules and basically these are just territory gang fights. Whatever.

Friday, November 6, 2015

Easyish Triple Boot on a Macbook Pro, Round 2

So my "easyish" install using Wubi finally crashed when I was trying to change things and install Ubuntu 15.10. If I'd have left it at 14.04, it probably would have been ok for a long time. However I was getting tired of the poor disk performance when creating large archives for work. So once it was broken, I had no reason not to just try and get a full triple boot (luckily I had backed everything up before trying anything). I found this recent article about triple booting, but its process has the deal-breaking requirement to install ubuntu before windows. What if you're handed a machine already set up for dual boot (without the recovery disks, mind you)? Funny that with 2 operating systems to choose from I wasn't happy with either....

Well it can be done (at least on my MBP 11,3 with yosemite and a windows7 bootcamp partition), and the secret sauce is rEFInd. I don't understand EFI at all. And every time I start going through the docs (rEFInd has a lot of GREAT documentation) I get distracted with needing to do work or something. Anyhow, before, I couldn't boot any Ubuntu live usb drives after 14.10 (I think the switch to systemd maybe?) but once I installed rEFInd I could... When I resized the bootcamp partition using a 14.04 live usb, booting windows didn't work any more. But once I installed rEFInd it did... After installing 15.10 from the liveUSB I couldn't boot osx or windows from the grub bootloader. But once I held the option key and used apple's boot selector to boot into OSX again and installed rEFInd again I could... boot from rEFInd's boot selector that is. Somehow rEFInd is magical.

So in a recipie:
  1. Boot a live usb (I had to use 14.04)
  2. Use gparted to shrink down the bootcamp/windows partition (make sure you've defragmented the partition in windows first).
  3. Install rEFInd by downloading in OSX and running the from the OSX terminal
  4. Boot  windows just to make sure you still can (when you have to)
  5. Boot from a live usb of ubuntu 15.10 and install with the empty space turned into the / directory (root)
  6. After the ubuntu install hold option next time you boot and boot into OSX, install rEFInd again (the grub configuration messes it up somehow)
  7. Enjoy using linux but still having 2 other operating systems to choose from (though you'll have to twist my arm to get me to boot anything other than linux).
Hopefully this helps. Its not as detailed as my last post, but I'm much more satisfied with the results so far. I'm still amazed that a free and open source project does boot management so much better than the expensive proprietary options.

Oh ya, and do all this at your own risk. Please make backups.

Tuesday, July 28, 2015

Sense About Some Sensors

Sorry if this post is a sensitive subject.... (I'm terminally punny).

Today I finally broke the year long record of no outdoor runs. I've been biking to work more often lately which has been a very nice return after completely falling away from it last year and through the winter and sadly much of the spring. Now I'm cycling twenty to forty miles a week. Better than nothing. But biking to work AND running is better than that. So thats what I did today.

Wednesday, June 10, 2015

Using LV2 atom:Path (or how to get files safely in a plugin without a GUI)

The end of last month marked 2 years since my initial commit to my first lv2 plugins. I've learned some things, but still am picking up more little by little. I was recently reminded that I don't know it all, when falkTX pointed out another stupid mistake I'd been making that prevented my GUIs from resizing correctly.

Water under the bridge though. I'm going to try to explain out how to use lv2 to have the host make a file selection dialog for you. I want all my plugins to work purely with host generated GUIs and loading files became necessary for porting the rakarrack *tron effects. The LV2 official documentation has improved a lot, but I was still struggling, so I thought I'd post this. The example to be used is rakarrack's reverbtron. Its a sort of convolution using very simplified impulse response files (which are actually text files). Instead of a constant sample rate in the IR, you just keep the most important samples and interpolate between them.

Regardless of the details, I have a module that needs files. All I need is to pass the file's path to the modules setfile() function and it takes care of the rest. How do I get that path? The whole process involves several extensions, and the most confusing part to me was figuring out what was what. But I got it, so read on...

Thursday, June 4, 2015

How to Boycott SourceForge

I was finally convinced to leave I was holding out, trying to be true to a service that once was the best and most dedicated to free license and open source software, but finally, due largely to this editorial, have decided to join the boycott. Since I don't like doing things half-way I'm taking everything down and trying to make it as easy as possible for others to do the same.

If you are using git already, it won't take much to move your repositories to Github. Bitbucket will pretty much be the same commands. I already had an account so I won't describe how to sign up, but its pretty easy. Once signed in you can create a repository by clicking the little plus sign in the top right corner. Name the repo whatever your project name is and opt to leave it empty (I presume you already have the project hosted at You should make sure you're up to date on every branch from first. Once that is done you can just go to your local repo and issue the command:

git push[USERNAME]/[PROJECTNAME].git master

and repeat for every branch besides master.

You can then delete the local repo and re-clone it using the URL github give you, or just edit .git/config to update what URL origin points to, or there's some git command to do it that I can't remember. You can also go delete your project from BUT I decided to leave the skeleton of the project with links to the new home at github.

To do so make sure you haven't pointed your repo's origin to github yet. If you have substitute the project git URL for origin. Go delete every branch but master on by entering:

 git push origin :branch

Then on master branch do (carefully):

rm -rf *
echo moved to [github project URL] to boycott sourceforge >> README
git commit -a -m "boycott sourceforge"
git push origin master

Careful, because rm -rf * deletes everything in the current directory. This makes it so your repository is now empty except a nice little statement of what we think of the new

I only had source tarballs in the files section so I deleted them all and added the same readme as is in the repo. If you use this feature of it will be harder to find a substitute. This blogger subjectively goes through 14 alternatives and decides to stick with sourceforge. Hopefully you can find one of the alternatives workable.  I also edited the project description to say that the project had moved.

 If your project has a website you can move it to github quite easily too. Just go to your repo that is now using github for the origin and type:

git checkout -b gh-pages
rm -rf *

The name of the branch (gh-pages) is very important. Download the site source from the sourceforge ftp if you need or if you have a local copy just copy it all into the repo. Make sure you have an index.html and then just:

git add *
git commit -a -m "adding site"
git push origin gh-pages

Your new site is at http://[USERNAME][PROJECTNAME]
Not too bad!

I wish I had a good answer about binaries. If you use other features like mailing lists you might have to do some more homework too. If you have found good solutions, spread the word, leave a comment.

Now, as a commentary, SourceForge hasn't done anything illegal. The GPL of most open software allows them completely to package it with adware, malware or whatever. But is that cool? Heck no! So on grounds of ethics, it has come time to boycott. Do not visit, do not download from there, and do not give them your code to host. I avoided Github for a long time because I felt they weren't as dedicated to open source, since their site code is not open (and partially because I tend to kick back when something seems trendy). But honestly it seems they've found a business model that is working for them and allows us more freedom for free software projects. SourceForge is not what it once was, and we owe the current management of it no loyalty. I don't really mind which service you move to, but don't stay.