Development

I’ve built several band websites on Harmony and one of my favorite features of the platform is how slick it is to display upcoming calendar events. I’ve never been into the embeddable widgets like those from reverbnation. You lose branding and they’ve always seemed tacky. Harmony Data Feeds allow you to do it your own way.

Data Feeds give you access to any external json or xml feed and its data so you can easily include it in your template. The guys at Ordered List were smart enough to include some preset services, including Google Calendar. Give it a calendar ID and it finds the feed for you. Easy.

What’s not quite as easy is navigating the Google Calendar data tree. There’s a ton of nested information there and it took me a while to figure out what bits I actually wanted to show.

The Code

This is what I ended up with using my data feed titled ‘shows’:

<ul>
  {% feed 'shows' %}
    {% if feed.data.feed.entry == null %}
      <em>No shows are currently scheduled</em>
    {% else %}      
      {{ feed.data.feed.entry | reverse | assign_to:'sorted_shows' }}
      {% for entry in sorted_shows %}
        <li>      
          <a href="http://maps.google.com/maps?q={{ entry.["gd$where"][0]["valueString"] }}&hl=en">
            <h4 class='venue'>
              {{ entry.title.["$t"] }}
            </h4>
            <time class='date'>
              {{ entry.["gd$when"][0]["startTime"] | date: '%-m/%-d'  }}
            </time>
            <span class="other-acts">{{ entry.content.["$t"] }}</span>
            <span class="misc">
              starts at {{ entry.["gd$when"][0]["startTime"] | date: '%-I%p'  }}
            </span>
          </a>
        </li>        
      {% endfor %}
    {% endif %}
  {% endfeed %}
</ul>

Throw that in an include and place it wherever you want.

Breaking it down

{% if feed.data.feed.entry == null %}
  <em>No shows are currently scheduled</em>
{% else %}

If there aren’t any entries, display a message saying there aren’t any shows. Remember this feed is for upcoming events only, so you don’t have to worry about past events showing up.

{{ feed.data.feed.entry | reverse | 
  assign_to:'sorted_shows' }}

This bit takes the array of entries which is sorted by date, reverses the order so you get descending date order, and assigns it to the “sorted_shows” variable.

{% for entry in sorted_shows %}

Fairly self explanatory. Do what’s nested for each event in our sorted array.

<a href="http://maps.google.com/maps?q=
  {{ entry.["gd$where"][0]["valueString"] }}&hl=en">

This part grabs the first “Where” information from an event and gets the value of the string. I’m not really sure why there would be multiple “Where” data strings1, but the first one is what we need right now. I’m then putting that in a Google Maps search query link.

{{ entry.title.["$t"] }}

The title of the event. I’m using this field for the name of the venue. “$t” seems to be the string. Don’t ask me why.

{{ entry.["gd$when"][0]["startTime"] |
  date: '%-m/%-d'  }}

Again grabbing the first start time data and using Harmony’s date filter to show only the month and date.

{{ entry.content.["$t"] }}

The description/details of the event. I’m using it to show cover charge and other acts.

starts at {{ entry.["gd$when"][0]["startTime"] | 
  date: '%-I%p'  }}

Here we have the start time again, but only showing the hour and am/pm.

What you end up with is a nice list of your events on your website while you create them by the more familiar way of using a calendar.


1 This might have to do with repeating events. As you can see by looking at the data structure, their API is pretty complex.

Matt suggested a while ago that, since I own “rossisbrown.com”, I buy the domain “whyisrossbrown.com” as well. After about three minutes of laughing, I did.

I am now using it to point to a portfolio (or what I’m calling a Portfolio Machine) of both my web and music/audio work. Looking at it makes me think of a wood and plastic iPad. I built and designed the thing, with occasional input from Matt.

The page is javascript-heavy. The portfolio items, shown as VHS tapes on a shelf, are made up of markup generated by underscore.js, meaning I only have to update a nicely formatted javascript file to add new portfolio items. It also means search engines won’t crawl it, so there’s a trade-off. It’s a work in progress, but I think it’s a lot of fun. The next version will include direct portfolio item urls and back button functionality, provided by Sammy and Matt’s brain.

It’s open sourced on Github with very little documentation, so fork it and hack away at your own.

Matt and I have been working on Signal Chains for a few months, and are finally somewhat ready for the public to see it. I’m going to create a crisis here to make what we did seem so much cooler:

The Problem: Audio gear is expensive. Few brick and mortar stores carry expensive audio gear and will let you get your grubby little hands all over it before purchasing. Conversely, when people post audio samples online, you’re not always sure what is involved. Is it really that mic that sounds that way? Or is the preamp they’re using coloring the sound?

The Solution: Signal Chains is essentially a way for audio engineers (or those who call themselves audio engineers) to share their signal flows through audio samples, documenting each piece and process involved. It does this by providing a somewhat standardized method of doing so.

The Pieces

Gear

Signal Chains gear types

The building blocks of Signal Chains. The tools that real engineers use to accomplish the sound they have in their head. Gear can be added by anyone, but and emphasis has been put on search in order to avoid duplicate entries. Gear can be added straight from the gear type page or on the fly during chain creation. When “browsing mics”:http://signalchains.com/mics, for example, I can select Condenser from “Type”. Doing this shows me only condenser mics in the database.

Signal Chains gear search

If I want to further narrow my search, I can enter AKG in “Make”. At the moment, there is only one AKG Condenser in the database (let’s change that!), so the C414 is listed. Alternatively, if I don’t find the AKG Condenser I’m looking for, I can add it by clicking the New Mic button. Doing this will over time build a large database of audio gear, with which we can take over the world.

Viewing a gear page gives you a list of chains that gear is involved in, allowing you to hear it in different scenarios.

As a side note, the whole concept for Signal Chains came from the amount of visits I get to my post about the Cascade Fat Head. I made a little song to test the mic out in different applications. Apparently lots of people want to know what this thing sounds like, so why not provide one central place for them to do so?

Chains

The heart of Signal Chains is, of course, the chain. A chain is involves the following:

  • An input source – Microphone or Line Input
  • A preamp
  • Optional extra gear – Dynamics Processors, Equalizers, Effects Processors, and Converters
  • A 30 second audio sample of the recorded audio
  • Optional (but encouraged) notes about all gear used in the process.

Signal Chains gear rack

The gear is displayed in a virtual rack where it can be reordered with drag-and-drop ease. Notes are displayed in the rack, and the individual gear’s pages can be accessed easily. Gear is added one item at a time to encourage thorough explanation of each piece. Chains can be tagged with terms for search purposes. At the moment, I’m using them to label “what instrument”:http://signalchains.com/tags/guitar is being recorded.

A Signal Chain

Users can Like and Comment on chains, hopefully fostering a community environment and further discussion about the process involved. Likes are virtual pats on the back, while Comments are a way to make it known to the public that you are far superior to the user who created the subject content. You know, just like anywhere else on the internet.

Audio

Arguably the most important piece of a chain is the audio. Nobody cares that you used all this expensive (or inexpensive) gear unless they can hear what it sounds like. This is why a chain requires an audio sample. Samples can be up to 30 seconds and need to be in some high-quality format (AIFF or WAV). Once you upload the sample, Signal Chains converts it down to MP3 and OGG formats and provides a nice little inline audio player for quick listening. The high quality audio is provided for more detailed analysis if someone chooses to download it.

Signal Chain Audio

Users

In order to take full advantage of Signal Chains, one is required to become a user. Users, as if by some magical super power acquisition, gain the ability to create chains and gear, comment on and like chains and gear, and follow other users. That’s right, we’re doing the whole Twitter relationship thing. A user has their own dashboard populated with activity from people they follow. It’s a quick and easy way to make sure your friends aren’t doing anything better than you.

The Nerdery

Signal Chains is a Ruby on Rails app developed by “Relatively Early Development”:http://relativelyearly.com (Matt and me). All the art and design was done by yours truly, while “Matt”:http://twitter.com/guitsaru made everything work wonderfully. If this thing takes off, we have big plans for it.

For now, you may want to follow @signalchains on Twitter for updates and all that jazz. If you’ve got some feedback for us, go crazy on our support site. If you’re interested in advertising on the site, contact us at info(at)relativelyearly.com.

About

Ad9aa05f652ec70c232ba38866e57df4?s=60

I like making things on the internet with Cremalab and music with Fullbloods, The ACBs, and Golden Sound Records. I live in Kansas City and enjoy food and drink.