The Global Jukebox

I recently took on a very fun and interesting client. It’s Alan Lomax’s Global Jukebox Project. For those of you who don’t know Alan Lomax was musicologist who, beginning in the 1930’s went all around the world, from Texas to Siberia to all over Africa, Europe, the Caribbean, and even Buffalo, NY, building up a comprehensive library of folk music from all different cultures. Then he thought about ways of comparing them scientifically to see if they reveal anything about the relationship between the characteristics of the music and characteristics of the culture. It turns out they do.

Along the way he invented a thing called Cantometrics to evaluate the music along an exhaustive list of parameters. The results are really quite revealing – as a musician I’d even say mind-blowing – and are encapsulated in his book Folk Song Style and Culture. Highly recommended reading. It’s very well written, and ultimately speaks directly to the question of why all human cultures make music, and why different kinds of cultures make the kinds of music we do.

Except now you don’t have to read the book, because we’re building a web site to bring it to life! The Lomax foundation has literally thousands of hours of field recordings, backed by an immense a meticulously catalogued database. We’re pulling it all together to present interactively, using different ways to visualize the relationships including maps, trees, lessons and journeys.

I must say it’s a refreshing change from corporate, agile-driven software work. As the front end developer and UX/UI designer, I have alot of freedom to shape the site. They’re academics, and while they’re very smart and care deeply about the work, they’re not software engineers or interaction designers, so they’re also very hands-off and trusting about things in my domain. They also tend to be more laid back, creative and open, so it feels alot like R&D work. Right now it’s a fixed-length contract, but they have enough ideas for years of work, so I hope they have enough money too, and the gig transitions into a long-term relationship.

This is also by far the oldest legacy codebase I’ve ever worked on. The original Cantometric data was originally encoded on punch cards in the 50’s thru the 70’s and entered into an IBM mainframe computer at Columbia University. Sometime in the 80’s someone ported it to C or maybe Pascal, and into a relational database on a PC or a spreadsheet on a Mac or something. Then apparently in the early 2000’s they ported it again, this time into a modern platform that was web-ready and could be queried using mySql. Then they spent an enormous amount of time digitizing all the music and cleaning up the data. That bit still isn’t quite done, and my first programming task had to do with rights and clearances.

Still, it’s interesting how computers were part of the vision from the beginning. In Folk Song Style and Culture there’s an appendix explaining the software at the time, mainly the data encoding and the statistical analysis work. I haven’t looked forward to reading an appendix so much since The Lord of the Rings!

Mo’ Better Responsive

I’ve pretty much completed a first pass at making all the pages on my web site mobile-first responsive. Along the way I made a hit-list of items that were too much trouble for the first pass, so now I’m circling back to them. They mostly fall into one of a few categories. First is tweaking the existing styles and fleshing out new ones so the page layouts look good under all resizing and formats. Things like font size, padding and spacing. There’s also a few pages with unusual formats that still have to get converted. Some of this gets pretty subtle and I didn’t want to let it slow me down, but it’ll be worth it. Second is adding new content to the existing sections, and I’ve been doing this on an ongoing basis. It’s getting easier now, as the templates are all largely complete. You’ll notice an expanded roster in the music section, for example. Third will be some all-new presentation formats for the audio and visual elements of the site, but that’s still a little ways off. So for now, go click around and see what you can see.

The Devil You Know

Not too long ago I took a job with an ad agency as a consulting software developer. This was not the first time I worked in advertising. Many years ago, I co-founded Radical Media’s interactive division back in the 1990’s. (Technically they were a media production company, but alot of their clients were ad agencies, including the one I took a job with, and there’s alot of overlap) and I did all sorts of fun and exciting and groundbreaking stuff there. Since then I’ve done freelance ad jobs here and there. It’s actually surprising how little the ad business has changed in twenty years, the corporate culture and all. Stuff that was innovative back then is just business as usual now.

Being a temp position, so there’s no telling how long it’d last. In orientation they gave us alot of feel-good propaganda about how great advertising is, a lovely coffee table book and all, and really who would expect anything less. Good that they really cares about visual design, and to be able to use my design skills, and nice that they’re small enough so you can talk to people on your own floor if there’s some kind of tech problem. The place was totally chaotic however, in a sort of sleepy, hurry-up-and-wait kinda way. I spent three days waiting around for a computer, using various loaners. The computer they finally gave me was messed up, so I spent two more days trying to get it working before giving up and getting another one.

When I got on a project, they threw two other new hires onto the same piece of work. It was not deep but it was wide, and they really wanted to get it done fast as possible. Must’ve been money at stake with the client, so from their perspective this was a sensible way to do it.

The entirety of the work was tweaking CSS to make the site match the comps. Problem was the CSS, which was supposed to be hierarchical in an OO sense, was really a tangled mess. On top of that, there were hundreds and hundreds of auto-generated files that were not under .gitignore, so every time you checked in code there was a shitstorm of conflicts to wade thru. So with six people working in parallel, we all kept overwriting each other’s changes. I never lost any of my work, but most of the others weren’t as careful. Fixing any of this was out of the question cuz it would’ve blown the deadline.

On the third day our git repo exploded and work ground to a halt. The devops guys restored by the next morning. Fun fun fun.

So we worked thru the weekend. By this time we were completely off the script, so I literally spent a whole day with creative director, with him going “move that 10 pixels down” and me making the change in the code, and then him going “hmm, no, move it 5 pixels up.” He seemed a little put off by me questioning why their process wasn’t better. Like I said, the industry hasn’t learned anything in twenty years.

Then Monday the deadline came. I spent another day doing some minor fixes, and that was that. We spent a couple days chilling waiting on a new project. I spent my time reading up on git to see if I could avoid another gitpocolypse in the future, and on responsive frameworks for CSS.

Then we got a new project, a web site for some investment bank portfolio services. Again very CSS-heavy, with some animated charts’n’graphs and things. They gave us access to the git repo, but told us not to start work just yet, as the account people were still working things out with the client. A couple days after that they the deal fell thru and at was that. Of course they thanked us profusely and sincerely hope they can work with us again. And so it goes.

Responsive, Mobile-First

It’s all the rage these days in web development to make your web site responsive and mobile-first. What that means is that it will look good on your phone or tablet, and you don’t have to rewrite the entire web site to do that. This is something I’ve been meaning to do for my site for a long time.

I recently took a consulting gig where making everything responsive, mobile-first is the main focus. There’s a ton of frameworks out there to help you do this, so I spent some time surveying a few of the more popular ones. It turns out the alot of these frameworks are pretty heavy, and pack in alot of design assumptions that might or might not fit with your vision.

For my own web site it’s total overkill, so I decided to roll my own responsive grid work. So far it’s pretty basic, but I can add on to it as needed. The basic definitions can be found at: zingman.com/css/zmpGrid.css. So far I’ve implemented it on two pages: the main home page at zingman.com and the music landing page at zingman.com/music. Go ahead, resize the window, then go look at it on your small, wireless device! It may take a while to update the entire site, but everything is all tempalated out already, so look for more responsive, mobile-first pages coming soon!

The Devil You Don’t Know

I recently had to turn down an offer for a bank job. It was tempting – it seemed like a very cool project, right in the sweet spot of my skillset, a combination of front-end and full-stack, of JavaScript, Java and API design, on the same scale as what I’d been doing in Platform Engineering, and a good opportunity to learn about the finance industry.

However, the pay wasn’t great, no better that I’m making now. But the real problem was it was thru a headhunter. All seemed okay until the bank decided they wanted me and the headhunter made me an offer. When it seemed like an offer was in the offing they actually asked “should I just accept whatever offer they make?” Seriously? Then he came to me with the offer and wanted me to say yes on the spot.

Naturally I had questions and concerns. It was a temp-to-hire position, so the main issues were around the move to the staff position. Jeannie was in a similar situation a year ago: they told her it’d be a six month contract-to-hire, but then they dragged it out for a year, and then when they offered her a staff position the salary was lower than what she’d been promised. I told all this to the headhunter (same agency btw), that what I really care about is the staff position, the temp position is just a speed bump, and I wanted to negotiate the terms of the staff position upfront. He’d mentioned a 3 to 6 month contract and a VP level staff position. Imagine that, me bank VP! And my kids’ friends all think I’m a hippie. But dude wouldn’t offer anything more solid than his “expectation”. When I pushed he wouldn’t budge, nor commit to anything firm. Dude insisted I give him answer by the next morning. The time came and went. Meanwhile I talked to the guys at the bank directly, and they were talking about up to 18 months as a contractor and an as-yet-undetermined staff title.

So I had to pass on that one. Headhunter dude was then like “well if you change your mind let me know.”

Plus the commute was kinda long anyway. Ah well.

Technical Reference Guide 2015

As some of you gentle readers may know, I’ve been a-lookin’ for a new job over the summer and into the fall. A mainstay of the industry now is the dreaded tech interview, which wasn’t really a thing last time a went a-huntin’ close to ten years ago. But now they’re all the rage.

In a way it makes sense, cuz whoever is interviewing you needs some way to evaluate your skills and all that. There’s no way they can judge if you can write advanced, subtle and poetic code, so they settle for a much lower level test: can you regurgitate some basic stuff? Still, it’s not always easy to think on your feet and come up with a good answer on the spot. I haven’t used alot of this stuff in my day-to-day in years. Doing a tech interview is a skill in its own right, a kind of performance like jazz improvisation, and it took me a few times to get good at it.

Along the way I compiled a handy quick reference guide. Basically every time an interviewer asked me a question and I didn’t know the answer, or more commonly just wasn’t able to express it in a clear, structured and smooth manner, I wrote down the question, went home and looked it up, and added to my guide. Then I circled back and studied up for the next interview. Before too long I started getting a fair number of repeat questions, and was able to nail more and more of them.

This is not meant to be any kind of comprehensive tutorial, just enough to remind me to spew forth some talking points. As you can see by the topics covered, I cast a fairly wide net with my skillset in the kind of position I’m going for. Really this is a symptom of the state of the industry these days, the way jobs are balkanized by programming language, more than my own itinerant tendencies. “Are you a java guy or a javascript guy?” Oh please. I know like twenty programming languages. And if I don’t know any particular thing I know how to look it up. It’s also a fairly interesting snapshot of what languages and frameworks an in vogue these days, totally different than 2007.

So here you go.

Endless Summer Slacking

I just got back from a fun and relaxing camping trip. Perfect weather, lots of jamming on guitars, canoeing, swimming in the lake, cooking of fire, just great. Back home again now, doing all kinds of stuff. Since Labor Day is late this year it feels like we get an extra week of summer. Still one more week until the kids go back to school.

Some happy news! Gus back playing the drums again and the Left Hook is back in full swing. We’ve had a couple rehearsals at my house now, with him on his electronic kit. Good to have the group jamming once more. Going back to the studio and real drums next week. In our hiatus the rest of band spent our time working on arrangements and vocal harmonies, so the level of playing is increasing. We also added five or six new songs to the set. We’re actively working on bookings gigs now. We have a bunch of irons in the fire, and one confirmed date – our triumphant return to the Fisherman’s Net in October. More on that as the time grows near.

I’ve integrated the bench press into my workout. This enabled me to drop some other exercises so the total length of the workout remains the same. I’ve been going up in weight rather conservatively, but I’m up to 200 pounds now, in two sets of eight reps each. I can feel it more in my elbows and my ribs than anywhere else. I’m also up to 8 pullups.

Meanwhile, a couple weeks ago I got a call from Google, trying to recruit me as a software engineer. I passed level one with the recruiter, and it was onto level two, a tech interview over the phone. They sent me a packet with stuff to prepare. Man that company has alot of attitude, alot of hubris, but not very, um, mature. Seem to take it for granted you’ll be absolutely gobsmacked knocked out that they want to talk to you. Selling points include “we have an ice cream truck on the 8th floor of our office!” Then on the topic of how to dress they say “dress however you feel comfortable, but remember hygiene is important.”

They had some advice on what you’d need to know, so I spent a week studying up on all kinds of stuff I haven’t really used much since college: directed and undirected graphs, binary search trees, heaps and stacks and hashes, matrix math, sorting algorithms, big-O notation, and a bunch of more general stuff on Java language and systems architecture. Google must be hiring alot right now because twice that week I came across someone’s post for a Google tech interview cheat sheet. I made my own notes, but they’re so dense it wouldn’t make sense to anyone but me. In the process I came across a good approach for representing the state of a piece of folded paper if ever get back to working on Foldinator.

The day before the camping trip the interview came, and they didn’t ask me about any of that stuff. Instead the topic was serialization/deserialization. The format is they ask you to write a program off the top of your head, and as you go they put in more requirements. I did well, solved the problem and had a good discussion and all. But was I knock-your-socks-off awesome enough for Google? I guess we’ll see; they’re supposed to let me know in a week or so if I advance to round three. It sounds like that’s more of the same, but on site and with five back-to-back sessions in a row.

Web Site Evolution

Like the legendary cobbler with worn out shoes, it seems like I’m never able to find the time to work on my own web site. Indeed zingman.com is now twenty years old, and some pages go back to the beginning. Over time I’ve added various bits of php, css, sql, javascript, and wordpress, but I’ve resisted doing a full-on rebuild in an all-new framework and technology stack for several reasons, including that it’s a large time investment, the technologies keep changing, and it’s not really necessary anyway, at least right now. I am thinking of making everything responsive for mobile devices, but there’s alot of pages in there. So I upgrade things on an as-needed basis, always making things more automated, and growing closer to the vision step-by-step. Meanwhile everything runs extremely light and fast.

Over the spring I managed to complete a fairly major upgrade cycle for styles and page layouts, with everything finally in a stack of hand-built php templates and modules. In the last couple weeks I’ve started another round of work. This one is to put all the image links into popups. Better user experience, less clicking back’n’forth. I used lightbox for this; it’s one of the simplest javascript plugins out there for this purpose, and so far seems to work just fine. Have to do a little tweaking of the styles, but that’s about it. So feel free to click around to different pages and check it out.

Next step is go thru the origami pages and add support for multiple images for each module. This will involve refactoring some of my templates to handle photosets of different lengths, so I want to give it a bit of thought before I plow on ahead. Check back here in a week or so.

Change in the Weather

It’s been a long, cold stormy winter. Snow day after snow day all thru the second half of January, all of February and even three more snowfalls the first week of March. Enough already! And then suddenly two or three days ago the sun came out and the temperature rose above freezing. Now the snowpiles have dimished from five feet high to three feet, and you can even see a bit of lawn here and there. On the other hand, the remaining snow is black slush from hell and the potholes are in full bloom. Still, it feel like spring is finally here!

I spent most of the winter intensely busy at work. My previous project ended around the new year, and now I’m making the next-generation content management platform. It’s a whole new technology stack, with HTML5, AngularJS, JSON, Git, Gulp, Lint, Less, Vagrant, Karma, Protractor, with Scala and Akka on the middle tier, and lots of other good stuff. Also a major upgrade to our processes and best practices, including full-on test-driven development and continuous deployment and integration. So there’s been a lot to put together and come up to speed on in a short time. We also have a new and expanded team, including four people from my old group and three new guys with more one the way.

Our team is distributed, with guys in Italy, Poland, Nova Scotia, New Jersey, Queens and Westchester, so I’ve been working from home alot more. We have daily video conferences that include GIT pull requests, code reviews and design and planning sessions, which sometime go on for a half a day. Been also putting in alot of late nights and weekends. Still, I guess the best way to learn something new is to jump in the deep end with full immersion. It looks like I’m past the steepest part of the learning curve now. We have a big milestone demo coming up a couple weeks and it looks like we’ll actually get there.

And So It Goes

It’s August now. Been busy with camping trips, seeing more family and friends, and getting things done at home. Work is still pretty busy too. I just finished a little skunkworks demo for my boss’s boss. My boss dropped it on me as she was headed out the door for vacation. Nice. Along the way I learned angularjs. It’s been a while since I’ve been deep in the javascript world, but angularjs seems like a nice framework, very helpful in writing logical, organized code. Or maybe my demo just happened to be in the sweet spot of what angularjs is good at.

Lots of churn on the band front. Right after my last post on the topic, our bass player and my good friend Mike quit the group. We got a new bass player now, who I found quite by accident. My friend Charlie guitar asked me to sit in one evening with his jazz group. I was unable to commit, but didn’t want to say no because we were scheduled to rock rehearsal that night, but with no bass I wasn’t sure it was on. I hit reply to all instead of just replying to Charlie, and one of the other guys in the jazz band said he’d be into playing bass with a rock group. This really confused me at first cuz the guy, Rob, plays piano in the bebop group. So he came down and it turns out he can jam on bass. He plays a fretless, which is pretty interesting.

Now the challenge moves to building up a set, getting more tunes and getting them tight. Our guitarist Jeff favors basic 70’s guitar rock and is reluctant to learn new material outside of his comfort zone. I like some of that stuff, but too much is not very interesting on the piano. So I’m trying to broaden the palette and some Steely Dan, Billy Joel, Stevie Wonder, maybe some Rush and Genesis and some other piano-oriented songs, as well as some more funk, ska, soul, new wave, etc. Should be interesting to see where it goes.

Meanwhile I have several other irons in the fire. I answered an ad for a group looking for a keyboard player in a Ronnie James Dio tribute band. They have some gigs lined up, so that could be fun. I also got an invitation to sit in with a group doing Beatles songs at some fair in New Jersey in a couple weeks, singing and playing piano with Dr. Pluto on bass. And lastly I’m trying to get Buzzy Tonic Live off the ground. Asking around to line up musicians. More on that as it progresses.