Saturday, March 10, 2012

Hot Rods Tipper

I had a wonderful opportunity this past week to visit with one of the top bodhrán players in the world, Martin O'Neill. He had with him an interesting-looking tipper, which I asked about. He explained that it was a modified ProMark Hot Rods drumstick. So, taking more inspiration from Mr. O'Neill, I picked up my own set of hot rods and set about an imitation hotrod-tipper of my own.
The unaltered Hot Rods drumstick is far too long for regular bodhrán playing. It was a simple bit of sawing to get the stick to the desired length.
A short amount of time with some 320-grit sandpaper was all it took to smooth off the rough end and make the stick easy on the goatskin.
And, that's it. The tipper sounds great. It's a bit heavier than some of my other tippers, which along with the rounded edges produces a nice warm bass thump. The nineteen birch rods make a nice click as well. Many thanks to Mr. O'Neill for the tip(per). :o)

Tuesday, October 04, 2011

Funky Cygwin Path Issues

In getting familiar with Stuart Sierra's lovely Clojure test library Lazytest, I ran into a problem running it from the windows command console. The test output had special control codes not properly processed by the console:
E:\development\clojure\calibration>java -cp src;test;lib/*;lib/dev/* lazytest.watch src test

======================================================================
At  #<Date Tue Oct 04 07:45:47 CDT 2011>
Reloading calibration.test.core, calibration.core

←[33mNamespaces (no cases run)←[0m

←[33mRan 0 test cases.←[0m
←[32m0 failures.←[0m

Done.
I use mintty for cygwin, which will process those codes correctly, but I then had trouble with the Java classpath:

yawmark$ java -cp "src:test:lib/*:lib/dev/*" lazytest.watch src test
java.lang.NoClassDefFoundError: lazytest/watch
Caused by: java.lang.ClassNotFoundException: lazytest.watch
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: lazytest.watch.  Program will exit.
Exception in thread "main" [~]

After a little online research, I found that I needed to decorate the classpath a bit:
java -cp `cygpath --path --windows "src:test:lib/*:lib/dev/*"` lazytest.watch src test
After that, all is once again right with the world.

Monday, June 06, 2011

Made it to Times Square. S'pose I can make it anywhere now.
Off to Manhattan.

Friday, February 18, 2011

"They didn't care that they'd seen it work in practice because they already knew that it wouldn't work in theory." -- Clay Shirky

Friday, January 07, 2011

SVN Commits To GoogleCode results in 405 error

I received an unexpected error when committing to GoogleCode that looked like this:

svn: Commit failed (details follow):
svn: Server sent unexpected return value (405 Method Not Allowed) in response to MKCOL request for '....'

ServerFault had the answer. Google code allows anonymous checkout with HTTP, but commits require HTTPS. So, I exported my local workspace changes, blew away the workspace, checked out again with HTTPS, and imported my changes. No commit problems after that, and thank goodness once again for the amount of readily-available information on the Internet.

Monday, November 29, 2010

Bummer

Inspired by Jeff Atwood's excellent blog about the keyboard cult, I was excited to receive my new Unicomp Customizer 104, delivered just today. To my disappointment, however, it arrived inoperable.

The box itself was in fine condition. 


As I removed the keyboard from its packaging, however, I heard an subtle but ominous rattling noise. 


I turned the keyboard toward me, and the tilde key fell to the floor. It just fell right off without out any persuasion or cajoling, like it couldn't get away from its compatriots fast enough.


Shortly after that, I noticed that the "CapsLock," "Shift," and "Ctrl" keys on the left side of the keyboard would not depress at all. The underside of the keys overlapped the plastic molding.


The "Enter" key, et al., on the right side had more than adequate spacing.


But the "Esc" key and a few friends were distinctly off-kilter.


I'll give the company call tomorrow and arrange for a working replacement. I hope to report a good customer service experience.

UPDATE (11/30): I got a hold of Chad in the support department. He was very friendly and helpful. Unicomp is sending a replacement today, along with a return label for the original keyboard. So far, so good!

UPDATE (12/02): No longer a bummer! The new keyboard arrived in great shape, and works like a charm. I was hoping for a good customer service experience, and I got it. Thanks, Unicomp!

Tuesday, November 16, 2010

Friday, September 10, 2010

Be mindful that Tuesday morning problems don't become Friday afternoon problems.

Thursday, August 19, 2010

"Elegance: The modesty not to draw attention to the difficulties one has surmounted." paraphrasing Alain de Botton via @spolsky

Friday, August 13, 2010

Minimum number of moves to solve any Rubik's cube configuration (aka "God's Number"): 20 http://bbc.in/9rkt7J

Wednesday, July 28, 2010

Just read online: "I feel like dancing a marimba." Mambo? Meringue? With a marimba? It's a mystery.

On technical debt

"Bad code isn't Technical Debt, it's an unhedged call option" http://bit.ly/a3rQcq

Monday, July 26, 2010

Autism has unique vocal signature, new technology reveals http://bit.ly/b6xg3g

Saturday, July 24, 2010

Thursday, July 15, 2010

It costs 1.5 cents to make a penny. A nickel costs 6 cents. In 2009, the U.S Mint lost $22 million making these coins. http://bit.ly/9vNeNf

Wednesday, May 26, 2010

Grails 1.3.1 dependency resolution

After upgrading Grails to 1.3.1 from 1.2.2, I repeatedly received "UNRESOLVED DEPENDENCIES" errors. After an inordinate amount of troubleshooting, I stumbled upon the sole archived message on the Internet that recommended deleting (or renaming) the %USER_HOME%\.ivy2 directory. Sure enough, this worked like a charm, so I post the resolution here for posterity. It seems there were some transitive dependencies that weren't getting sorted out. It's all good now.

Sunday, May 16, 2010

The Light Bulb Is Not Yet On

I have reset on going through Essentials of Programming Languages, and struggling my way through learning Scheme. I wrote a working answer (at least as tested) for a problem in the second chapter, but I feel like I happened upon it through test-driven development. I suppose in some ways that's a good thing, but I can say that it is not a terribly comfortable feeling to write some code but not really grok what it's doing. Anyway, here is the paraphrased problem, and my solution (test cases included):

Exercise 2.2.9, #3. (car&cdr2 s slst errvalue) generates a procedure composition that, when evaluated, produces the code for a procedure that takes a list with the same structure as slst and returns the value in the same position as the leftmost occurrence of s in slst. If s does not occur in slst, then errvalue is returned.

(define (contains? s los)
(if (null? los)
#f
(if (symbol? (car los))
(if (eq? s (car los))
#t
(contains? s (cdr los)))
(if (contains? s (car los))
#t
(contains? s (cdr los))))))

(define (car&cdr2 s slst errvalue)
(if (contains? s slst)
(car&cdr2-help s slst 'car)
errvalue))

(define (car&cdr2-help s slst lst)
(if (symbol? (car slst))
(if (eq? s (car slst))
lst
(list 'compose lst (car&cdr2-help s (cdr slst) 'cdr)))
(if (contains? s (car slst))
(list 'compose 'car (car&cdr2-help s (car slst) 'cdr))
(list 'compose lst (car&cdr2-help s (cdr slst) 'cdr)))))


Here are the tests (schemeunit):
(define-test-suite 2.2.9
(test-case "3."
(check equal?
(car&cdr2 'a '() 'fail)
'fail)
(check equal?
(car&cdr2 'a '(a) 'fail)
'car)
(check equal?
(car&cdr2 'a '(b) 'fail)
'fail)
(check equal?
(car&cdr2 'a '(a b) 'fail)
'car)
(check equal?
(car&cdr2 'b '(a b) 'fail)
'(compose car cdr))
(check equal?
(car&cdr2 'c '(a b c) 'fail)
'(compose car (compose cdr cdr)))
(check equal?
(car&cdr2 'd '(a (b c) d) 'fail)
'(compose car (compose cdr cdr)))
(check equal?
(car&cdr2 'dog '(cat lion (fish dog) pig) 'fail)
'(compose car (compose cdr (compose car (compose cdr cdr)))))
(check equal?
(car&cdr2 'c '((a b) c) 'fail)
'(compose car cdr))))

Any Schemers care to give me pointers? I sure could use the help.