Ignored By Dinosaurs 🦕

So here I sit, at the end of another brief tour, watching the sky get lighter outside the windows at the St. Louis airport. Listening to a bit of the new Bon Iver record, which is beyond terrific to the point of being maybe the record of the year for me. We'll see.

It's not that I haven't had much to say (though I haven't had quite as much to say), it's just that the time in which I used to say it has been filled by the consequence of my prayers for work being answered. I've been very, very busy this year and not a moment too soon. I jumped off my last gig in desperation; desperation at a job that I just wasn't feeling anymore and that finally qualified itself as being the wrong path. To wander that far down a path such as that one and then decide to bushwhack my way back up to where I could see the landscape again was a life/career move I'd probably have considered a bit more carefully had I known just how hard it would be. The undergrowth was dense. The way was dark. Had I not found the way back to be already overgrown I'd probably have turned around and asked for my old job back. Or maybe not.

Forgive all the flashy metaphor, but I've just driven 4 hours to the airport after a gig in the middle of Nowheresville, Missouri and I've got the perfect balance of coffee buzz, time, exhaustion, and an itch to write.

So anyway, I get the title question a lot this year. In short -

I split RRE with grand ideas and a grander mouth to broadcast them. The crusade was to put together the solution to the music industries problem. Because there weren't enough smart, capable, connected people working on the issue already, apparently. Part of last year's journey was a pretty extreme pruning of my ego, and it hurt. I had (and still sort of have) a pretty good idea about an open source angle to the music business that hasn't been done before, in my opinion because it explicitly doesn't make anyone any money except for the artists who implement the solution. I had a few other people convinced it was at least part of a good idea, and a few of them were kind enough to trot me in front of business types who could give me some feedback. The conversation generally ended shortly after they asked me “so how does it make money?”. Well, the idea is that it doesn't make you money. Kthx.

I understand of course, and learned a hell of a lot about early stage startups in the process of all this. Chiefly, I learned that I was seriously lacking in the ability to implement any ideas that I might have, either now or in the future. So I decided to fall back and work on what I could work on, which I chose to be the technical end of the equation. Always was good with computers.

I picked up a very few clients last year, those who were desperate enough to hire me. I went to a few networking things, mostly centered around Drupal, and went to several job interviews. I received some fairly harsh smackdowns at these interviews, typically during the technical part of the interview, and did not receive any jobs.

Somewhere around last November I was pretty damn close to the edge of “all I could take”. That's when I saw the ENB gig up for grabs, so I grabbed it. It wasn't much (by design) but it was a direction, it was good music with guys I already knew, it was at least a tiny bit of income. I started in February.

About 10 days into my tenure with ENB, I got a couple of emails on the same day that have turned out to be all the work I need. But it didn't stop there.

Somehow in the process of all this, I've become a fairly well-rounded, intermediate programmer, and one who has a pretty good sense of how to figure out the infinite number of problems that he's never encountered before. I've learned more programming languages, acronyms, protocols, tools, toolkits, best practices and shortcuts for being an effective (hireable) programmer than I could've guessed I'd be capable of. In April something amazing happened. I had a technical interview for a freelance gig based out of Austin TX that went astonishingly well. We talked about Git and Drupal and Ruby and handwriting SQL for half an hour. It was fun. I got the gig, and that was the little gig I got that month. I've been getting gigs left and right all year. It's insane. It's wonderful.

So basically, I'm making about 90% of my income on this computer here, and I do the ENB thing for fun and to stay connected and relevant to the scene I really care about. I've been in technical woodshedding mode all year, but I sense that it's about time to start trying to crack the nut that beat me this time last year. I've had a few things fall in my lap in the last couple weeks that are pointing me in that direction again, to try and see what I can come up with that could contribute to the music scene. I'm not trying to “save” it anymore. I'm not really sure that “saving” the music industry is what needs to happen right now anyway. As much as I am completely in LOVE with Spotify for the last month, they pay the artists about 1/10 of a piece of dog shit for royalties on the tunes that they stream. Nobody could make a living on what they pay out. Excuse me, no artist could ever make a living on what they pay out. I hear the labels have found a way to keep making nice profits in the midst of all this supposed bloodshed. So the brass ring is still sitting there, waiting to be grabbed.

#life #bluegrass

Sass is a programming language. It's purpose is to take some of the repetitive drudgery out of writing CSS (don't get me wrong, I love writing CSS). It does this by letting you define things such as constants and functions, things that other programming languages give you but CSS doesn't. The end purpose of Sass is to be digested and spit out as plain old CSS.

There are a couple of best parts. One of them is being able to define constants, referred to as variables in Sass. This lets you do things like define a standard color palate at the top of your sheet like this:

$dark_blue: #064463
$green: #68db1e
$med_blue: #0089c7

Then, any time you need to use that shade of dark blue, rather than having to go find (or remember) #064464 you just put $dark_blue. That's it.

background: $dark_blue

Done.

Sass also has what are called mixins, but are more like functions in other languages. My personal favorite use of mixins is this one -

@mixin gradient($color1, $color2)
  background: -webkit-gradient(linear, left top, left bottom, from($color1), to($color2))
  background: -moz-linear-gradient(270deg, $color1, $color2)
  background: linear-gradient(270deg, $color1, $color2)
  -pie-background: linear-gradient(270deg, $color1, $color2)
  behavior: url(/sites/default/files/pie/PIE.htc)

This defines all those different vendor specific ways of writing a CSS background gradient (with a dash of css3pie to boot!) and lets you simply drop this in your sheet :

@include gradient($dark_blue, $med_blue)

And again, done. It gets compiled and spit out exactly how you need it to be. Still experimenting with the exact colors of that gradient? Change the color once for the whole thing and you can't forget to do it for Firefox after you've spent 10 minutes getting it just right in Chrome.

It starts getting really fun when you do things like this :

background: lighten($dark_blue, 10%)

Oops, that's too light.

background: lighten($dark_blue, 7%)

Perrrrfect

Mix them all together!

@include gradient(lighten($dark_blue, 10%), $dark_blue)

This is how Sass saves you time. You can even try it out with existing stylesheets with the sass-convert command. The syntax is sass-convert input-file.css. This spits out your CSS file as Sass at standard output, so try this to get it into a file -

sass-convert style.css > style.sass

Sass has a handy watcher function that you can invoke to automatically convert your Sass files into CSS files when you update them. Separate the Sass source file and the target CSS files by a colon.

sass --watch style.sass:style.css

Enjoy!

Edit 7/27 —

There are some damn handy additions in Sass 3.1. for instance, foreach loops -


@mixin grad($color1, $color2)
  @each $browser in webkit, moz, o, ms
    background: -#{$browser}-linear-gradient(top, $color1, $color2)

  • spits out this

          background: -webkit-linear-gradient(top, #e7e7e7, #b4b4b4);
          background: -moz-linear-gradient(top, #e7e7e7, #b4b4b4);
          background: -o-linear-gradient(top, #e7e7e7, #b4b4b4);
          background: -ms-linear-gradient(top, #e7e7e7, #b4b4b4);

So, there!

#css

I use Git. I'm relatively new to the party and it's all I've ever used. I tried to get SVN working for me back when I was first gettings started and it felt like hand-wiring a tube amplifier – slow, tedious, and you don't know if it's going to work until you're totally done. I've more recently taken on a client who uses a nifty issue tracker called Jira, but they have their source checked in to SVN. I thought I was going to to have to get familiar with it until I rediscovered a tool that comes with Git called git-svn. It works pretty transparently after learning a couple of new commands.

This morning however, I tried something new and was greeted with this (after 5 hours of work).

src/sites/all/modules/eloqua
580e5a6480dfae9ee8aa39e2ff14e4b3604d8827 
doesn't exist in the repository at /usr/local/git/libexec/git-core/git-svn line 4771
Failed to read object 580e5a6480dfae9ee8aa39e2ff14e4b3604d8827 
at /usr/local/git/libexec/git-core/git-svn line 573

This is a Drupal site that I'm working on. To make a long story short, I decided to pull a new module over via Git from drupal.org instead of using Drush like I always do. I figured I might want to chip in on some of the development of this module while I'm already here. Everything went fine, I added the .git folder within the module to .gitignore and went on my way. After finishing up enough of the work to send it over to staging and attempting a git svn dcommit I get the horrifying error above.

I found this post that got me started down the right track. I used a different approach, though. I used the technique of rewriting the history with the info found here. I'm pretty familiar with removing accidentally committed DB passwords, and wasn't familiar with the technique that he had commented out in that post. Worked like a charm, and am now back on track.

To sum up, you delete the offending directory and then run something to the effect of

git filter-branch --index-filter \ 'git rm --cached --ignore-unmatch path/to/the/formerly/misbehaving/module'

from the base path of the git repo. By the way, that backslash doesn't do anything but allow you to wrap a command to two lines. You can leave it out if you want and just type all that as one long line.

The culprit of all this is that git-svn specifically chokes on git repos below the main one, as is the case if you git clone a module straight off of d.o. So, sorry kids, you'll have to contribute that code in some other way.

#devops #git

This is the list I've spent a half hour hacking around in TextMate trying to figure out how to not manually build. Couldn't quite do it, so here it is, that you may find it and use it when building a Drupal form that has a select list of all 50 states and the District of Columbia.

'#options' => array(
 '' => t('Please Select'),
 'AL' => t('Alabama'),
 'AK' => t('Alaska'),
 'AZ' => t('Arizona'),
 'AR' => t('Arkansas'),
 'CA' => t('California'),
 'CO' => t('Colorado'),
 'CT' => t('Connecticut'),
 'DE' => t('Delaware'),
 'DC' => t('District of Columbia'),
 'FL' => t('Florida'),
 'GA' => t('Georgia'),
 'HI' => t('Hawaii'),
 'ID' => t('Idaho'),
 'IL' => t('Illinois'),
 'IN' => t('Indiana'),
 'IA' => t('Iowa'),
 'KS' => t('Kansas'),
 'KY' => t('Kentucky'),
 'LA' => t('Louisiana'),
 'ME' => t('Maine'),
 'MD' => t('Maryland'),
 'MA' => t('Massachusetts'),
 'MI' => t('Michigan'),
 'MN' => t('Minnesota'),
 'MS' => t('Mississippi'),
 'MO' => t('Missouri'),
 'MY' => t('Montana'),
 'NE' => t('Nebraska'),
 'NV' => t('Nevada'),
 'NH' => t('New Hampshire'),
 'NJ' => t('New Jersey'),
 'NM' => t('New Mexico'),
 'NY' => t('New York'),
 'NC' => t('North Carolina'),
 'ND' => t('North Dakota'),
 'OH' => t('Ohio'),
 'OK' => t('Oklahoma'),
 'OR' => t('Oregon'),
 'PA' => t('Pennsylvania'),
 'RI' => t('Rhode Island'),
 'SC' => t('South Carolina'),
 'SD' => t('South Dakota'),
 'TN' => t('Tennessee'),
 'TX' => t('Texas'),
 'UT' => t('Utah'),
 'VT' => t('Vermont'),
 'VA' => t('Virginia'),
 'WA' => t('Washington'),
 'WV' => t('West Virginia'),
 'WI' => t('Wisconsin'),
 'WY' => t('Wyoming'),
),

#drupal

It occurred to me over cooking lunch for my boys just a minute ago that, a week before my 33rd birthday, I've been in the music business for half of my life. I'd like to share a couple of things that I've come up with.

First of all, to get anywhere in this business, to get anywhere sustainably that is, takes a really long time. There is no short circuiting this process, short of selling your soul to the devil. Even bands like the Black Eyed Peas who are on top of the world right now in 2011 have been doing this since I was just getting started. Acts like Ke$ha stand out in my mind as pure product, and this post isn't addressed to acts like her. This is addressed to bands like the Dusters or Yarn or any of the other top-notch acts out there busting their asses in a van every day of the year.

There is a sustainable livelihood to be made in this corner of the music business. What it takes more than anything is time and hard work. I've seen and worked with other musicians who acted as if their success were a God given right, that their talent would ensure them a livelihood whenever the proper magic hit-maker type came along and granted them the keys. These musicians are generally bitter, bad drunks and best avoided. You may be able to shave a certain percentage of time off your ascent by being smarter and by putting forethought into your career path, but by and large it's game of patience and being pleasant to work with. “If you sit at the table long enough, you will get fed.”

Second, and this primarily applies to sidemen, it's good to cultivate an aspect of your playing that is considered mainstream. That is to say, if you are a bluegrass bass player with a penchant for Airto-era Return To Forever, it's okay to slip those leading samba-type Stanley grace notes into your 1-5-1-5. Just make sure that you don't do it all the time and if the very well respected banjo player that is sitting in with your band looks at you funny, that's a clue. If you are a classically trained musician turned bluegrass player, by all means slip as much of that style in there as you want, but know how to chop that thing, too. Keeping this in mind as you make your rounds will render you much more hirable for your next gig. You are thinking about your next gig, aren't you?

Fin for now.

#music #bluegrass #business

Regarding Pandolfi's recent pot stirrer:

It's pretty much all been said out there, but I'll tell you what gets me going to the point that I have to write about it. It's when I read comments like this one -

Bands like Railroad Earth, Green Sky, Yonder Mountain, Infamous Stringdusters, etc. are going to be labeled bluegrass and I think that's fine....as long as they understand where the roots of the music came from and they have an understanding and respect for that.

Get stuffed. We're all out here working as hard as we can to live doing what we love. You are the armchair quarterbacking internet dweller. For us to care about whether or not you approve of our reverence for tradition or the lack thereof would render us unable to do our jobs.

Same dude, same comment -

The only thing I wish is that these newer grassy bands stop all playing solely through pickups and get some high quality mics, like the Punch Brothers or the Jaybirds. I went to a Yonder Mountain show 2 weeks ago and I cringed every time I heard Jeff Austin solo with his pickup-burdened Nugget. He might of well had a Michael Kelly or something as it would have sounded the same. Sorry if that's harsh...just not a big fan of his style or sound, I guess.

We've already established our freedom to an opinion, but had you ever done any touring you'd probably have realized the technical and acoustical limitations of playing with live microphones on loud stages. They don't make the sound better. Period. Ever. I've never heard of the Jaybirds, but I'm guessing the crowd that the Punch Brothers primarily plays to is a very quiet crowd. Good for them. Obviously some of us prefer a different setting.

By the way, Andy Hall came to the Nashville show last night and helped us destroy the place.

#bluegrass

I've recently begun a new contract for a rather large Drupal site. I was very excited to land this contract as it shall be my first bona fide “enterprise” contract and there's already a large amount of content on the site despite the company being rather young. There are a lot of forms on this site with leads being transferred to a backend system that I'll probably never have anything to do with. Anyway, I was excited to get a look in the back end of the Drupal portion of the site to see what the previous developers had been cooking up.

Imagine my intense surprise when it quickly became apparent that the previous developers weren't very learned in the Drupal way. Specifically, they committed some major Drupal rookie sins that a novice Drupal developer must know about.

  1. Modules don't belong in the modules directory. Themes don't belong in the themes directory.

There are many aspects of Drupal that are, politely speaking, counterintuitive to the new developer. Drupal by itself doesn't actually do a whole lot. The concept of the “lean core” means that the basic Drupal functionality is expected to be augmented to by community contributed modules. You'd be hard pressed to find a Drupal site out in the wild without at least half of those front page modules installed. I learned this on my second or third week of working with Drupal – the modules directory is reserved for Drupal core modules. All community or “contrib” modules go into a directory that doesn't even exists with a stock Drupal install – sites/all/modules. The same goes with themes – sites/all/themes.

When Drupal runs through it's “bootstrapping” process (a fancy name for when a request from someone's browser hits anywhere on a Drupal site), it looks in a number of different places to find code that may extend it's functionality or alter it's output to a request. Obviously, the modules directory is one of those places, that's why Drupal will run if you put contrib modules there. However, a big part of maintaining a Drupal site involves keeping on top of updates to those modules, not to mention updates to the Drupal core itself. Since the majority of Drupal lives in those modules, when Drupal core receives an update it becomes a much more muddlesome process to separate which files belong in which folder if they're all mixed together. More advance development tools like Drush make updating sites a total breeze, but not if the site structure is laid out wrong.

2. Use an admin theme.

Garland is a lovely theme (cough), but luckily the ecosystem has led to the evolution of some really useful admin themes that have big forms, big buttons and an intuitive layout by default. My personal favorite is Rubik, which requires also downloading Tao to function.

3. Speaking of updates, stay on top of them.

Part of the wonder of open source software is the knowledge that all over the world, thousands of developers with vastly differing skill sets and experiences are working together on one project. Such a model ensures that many sets of eyes are on the lookout for security holes (“exploits”) and that many hands are at work moving the project and it's features forward. The flipside to this rapid development pace is that updates to the software are released whenever they are ready, and this is often quite frequently on larger projects. It's a rare week when I don't have any sites that have some sort of update released on at least one module. Drupal maintenance is all about keeping on top of the Status Reports page – found under admin/reports/status and admin/reports/updates.

#drupal

Well unsurprisingly, even after several minutes of Google searching I'm unable to dig into the real article on this one, only countless verbatim reposts on countless web-scraping sites.

Anyway, here's an example. I don't hate on Jon Bon Jovi, but I do hate on the misrepresentation of facts. Steve Jobs didn't kill the music industry, the music industry killed the music industry. Here's how.


Some time in the early 80s record companies and stereo manufacturers (then known as HiFi) found themselves with a problem. Record sales and HiFi sales were both flat. The somewhat endless parade of new media formats, the same on that continues today with Blueray, had not found a new winner in a while. People were still buying vinyl and cassettes.

It was at an AES convention that the CD was introduced to the world for the sole purpose of reviving back catalog and HiFi sales. “But it sounds like a turd” was the general consensus among the crowd of professional audio engineers at AES. Analog to digital conversion was in it's infancy and most early CDs sounded really brittle and really thin compared to their vinyl counterparts. Sound familiar? Anyway, because marketing is often more powerful than the truth especially when aimed at teenagers, the record companies got to work. “It's a perfect copy”, “It'll never wear out” was the message and it worked like a charm. By the late 80s the CD was the dominant format and back catalog sales were humming along.

Presumably nobody in marketing foresaw an age where digital information would be so easy to transfer, or more likely they figured by then it wouldn't be their problem.

Not going to get all Lefsetz about Napster and the subsequent reaction from the industry, but suffice to say that it was all coming down anyway and Apple was the company that put together a new model for distribution of a medium that was inevitable. They didn't kill the music industry, you idiot. You really think people would still be driving to Tower records to pick up this shit”)?

#music #business

It has been a week. I've been working lately on a site for a non-prof out in California. Their mission is the spread of invasive plant species in California. I built them a system to allow the crowdsourcing of their Spring Nursery Survey, which is where they send folks out to various botanical nurseries around the state and make sure that they aren't selling any plants that they shouldn't be selling.

It's not illegal to sell invasive plant species, most of them are quite pretty. It's only when they jump the garden fence and escape into the wild that they become a problem. Being invasive means basically that they grow totally out of control, a big problem in a wildfire prone state like CA.

Anyhoo, what I've done is build them a system that allows them to work a base of volunteers across the state to go out to nurseries and send back information about those nurseries and whether or not they're selling some of this stuff that maybe they shouldn't be. It's an almost perfect use case for Drupal, so that kept me busy much of last month.

This month is two brand new clients from Austin, TX. One was already built and launched in a big old Wordpress sprint, and the other is my first legit “enterprise” client – a large Drupal setup on which I am now the sole developer.

I'm ready to play some music, but it's kind of a good thing for the bottom line that I can't this month. The end of this month ushers in festival season for me. To say I'm excited is nowhere near enough.

I really need to work up a new design. Later...

#random

I might as well ditch this blog. I have no idea where to start another post. Is this a technology blog? Is this a blog about life as a musician? Is this still my rallying cry against the music industry? So much has gone on the last month/year/decade I don't even know where to begin.

I've joined a band. I didn't think I'd be doing that ever again. I actually thought my career as a professional player was over. I thought I'd seen the top of the mountain and that was that and it was time to move on into the next phase of my life, whatever that would be. I sort of had to jump out of the last phase of my life so quickly and so definitely that I didn't have nearly the prep time I'd have liked to have had for that kind of thing. The result? Last year was one of the roughest of my entire life. The roughest.

Then last year's November surprise ended up being another bass player in a band that I fit into pretty neatly.

So here I am, back from the musical dead. I just had the most righteously good time in Big Sky MT at a bluegrass festival called Big Grass, and I'll tell you what feels the best of all – feeling like part of a musical community. It's no secret that I'm a born-again Stringdusters fan, so I was actually nervous when half of them were standing stageside while we were getting out set going last night. It was more an acute awareness that people were there and were listening, which is how nervousness tastes to me. But then we got some of them up, and a few more of them up, and a KILLER time was had by all.

Afterward we went back to the main lodge where everyone was staying and there was a giant picking session going on in front of the giant fireplace until about 4:15 or so when it broke up to take care of other duties. Right about then Vince and Chad and the rest of Great American Taxi showed up. It was just so cool to me, because the last time I saw those dudes was my last gig in CO with RRE. It's cool to be in a band where I already know everybody, so I can relax about all that. It's cool to be in a band where we take days off to go skiing with the lift passes that are thrown in with the gig. It's cool to be in a band where load-in and setup takes all of 15 minutes and there are only a dozen inputs to check. It's cool to already be up toward the top of the bill at a bunch of the festivals for which we're booked this summer. It's cool to play bluegrass.

#life #bluegrass