What I Decided - 2/8/14


Free lessons will have multiple tag groups.

  • Artist
  • Topic
  • Difficulty
  • Series

I was going to have a "duration" tag, but realized that Low Search can generate "range" filters based on numeric fields, and I already have the durations recorded in a custom field.


What I Found - 2/8/14

PhotoFrame from ObjectiveHTML

A tool for uploading and manipulating images in ExpressionEngine. Not an organization tool, but a simple, elegant way to organize images inside a custom field, or Low Variable. 

Works with Matrix, Low Variables, Assets and many other common plugins.


CE Image from CausingEffect

A developers image manipulation plugin for ExpressionEngine. This is not an user-interface tool, this is for template-level manipulation of images.


Channel Images from CausingEffect

This is another tool for working with images in custom fields or Low Variables. There appears to be some overlap with PhotoFrame. I'd need to research farther to figure out which would be best for what I need.


Reefine Addon for ExpressionEngine

An addon that allows you to add progressive filtering of a large catalog of items, as seen on many large eCommerce sites. A couple notes.

  • Works best with single entry fields, i.e. size, color.
  • Developer warns that it might be slower for fields where there are multiple entries, i.e. tags, etc..


Template Variables Accessory from CausingEffect

A handy way to remember custom field names from the ExpressionEngine admin interface, without having to go into the custom field editor.

What I Learned - 2/8/14

Low Search & Solspace Tags

Low Search for ExpressionEngine can work with Solspace Tag to act as a filtering tool. It can auto-generate search urls from a Tag custom field.

Low Search can also generate a "range" filter based on a custom field that is numeric.

ExpressionEngine Conditionals & Parsing Order

ExpressionEngine parses advanced conditionals later in the parsing order than simple conditionals. I blamed this for a template error, but it turned out to be a missing </div> tag.


How To Import Chapter Markers With A Video Into FCPX

Quicktime chapters are nothing new. But Apple has a poor record of making it easy for content authors to work with chapters - especially across Apple programs. Don't even get me started on DVD Studio Pro. FCPX, sadly, is no different. 

If you have a video clip that already contains a chapter track, you might expect FCPX to detect those chapters, and make them available to you upon import. Sounds logical, but ......wrong. 

Why is such an obvious feature not present in FCPX? Good luck answering that.  Fortunately, there is a workaround. 

Read More

Fix For Solspace Rating Module Form Not Displaying

Long story short: I bought the ExpressionEngine Ratings module from Solspace.com today. I quickly located an example of how to put a rating form into an entry. I eagerly reloaded the page.....and there was no rating form to be found.

I turned on template debugging, I read forum posts, I changed admin settings that no one should ever change. Nothing worked. Even the sample pages from the module itself would not show the ratings form.  

Template debugging revealed that the {exp:rating:form} tag pair was indeed finding an entry using the supplied {entry_id}, but nothing between the tag pair was being processed. There were no errors, just....nothing.

Turns out...there's a few things you have to do to get this ratings form to show up. If you're smarter than me, you probably wouldn't make these mistakes, but if you're reading this, perhaps you're no smarter than I am.

Here are the specific steps that would have saved me over 2 hours this morning.

  1. Install the module.
  2. Go to Add-ons -> Modules -> Rating -> Preferences
  3. Locate the "Can Post Ratings" preference.
  4. Select ALL the member groups that you intend to allow to post ratings. Here's a hint - Super Admins are not Members . If you select only Members, Super Admins like yourself, will see no ratings form. User groups are not hierarchical in this way... apparently.
  5. Select ALL channels that you'll be using the ratings form on. Be really, really sure that you've ACTUALLY selected the right channel(s). Because discovering that you've accidentally omitted the one channel that you're testing on is a frustrating realization after 2 hours of hair-pulling troubleshooting. 
  6. Use the example code to construct your rating form.  


So, to wrap up, Super Admins are not included in Members, and if you don't choose the correct channels, you'll only see whitespace where you want to see a ratings form. 

May your experience be less painful than mine.


What I Learned Last Night - 6/26

  • In Expression Engine, using the Matrix plugin, it is not possible to "embed" a Matrix celltype inside a Maxtrix channel field.
  • The Nolan fieldtype allows you to have a matrix-style cell in a Matrix field that contains text fields only.
  • Sublime Video does not support streaming protocols
  • When you put more than one Sublime player on a page, even if you stop one player and start another, the browser continues to download the video for the first one in the background. 
  • If you're planning to construct a new Sublime Video element in place of an existing one, technically you're supposed to use the sublime.unprepare() function first. 
  • Calling sublime.unprepare(<playerid>)  does not stop the browser from continuing to download the video that was playing.
  • Even destroying the <video> element that Sublime was attached to in the DOM does not stop the browser from continuing to download the video. 
  • The only way to completely "kill" a video and stop it from downloading without reloading the page is to use the video.src attribute as described here. 
  • Even if you use an Expression Engine embedded template to load different videos into the same div (using the JQuery .load() function), you must first use the technique above to "kill" the video before loading new content into the div to prevent further downloading. 



What I Learned - 6/15

Sublime Video has a timeUpdated event that fires as the video plays. To capture this event use the following code.

sublime.ready(function() {
  sublime.player('< your_video_player_id >').on({
    timeUpdate: < your_function_name >

Using some basic Javascript it is possible to create simple looping functionality with Sublime Video using the timeUpdate event combined with user-selected start and stop times.  

The Shortlist plugin for ExpressionEngine  has "attribute" functionality for adding external content to lists, but it does not work for internal content. The attributes give context to the external link that is being added to a list (like a favorites list).

What I Learned - 6/13

Chapter markers do not show up in Quicktime videos on iOS since iOS 6 was released (outside of videos purchased from Apple).

You can update channel entries in ExpressionEngine using DataGrab Pro, but you must have a unique identifier field outside of the actual ID. Using the title field as the reference for detecting an existing entry works, but if your titles include quotes it's easy for a mismatch to occur. 

There are several HTML5 video players available, but not all support playing YouTube videos. Sublime Video does

Sublime Video "takes over" the <video> element, but implements it's own Javascript API. Performing operations on the <video> element won't work, to manipulate the player, you need to work with the Sublime Player Javascript API

To play a video at a specific time, use the Sublime Video player.seekTo() api call. 

HTML5 <video> spec has a playbackRate variable. Sublime Video has not implimented playbackRate in their Javascript API yet, plut plan to.

What Would I Do If My Sales Doubled?

​So I got to thinking the other day...... "What would I do if my sales doubled?"

​If this happened, I'd be screwed. Why? Because my customer support infrastructure (people, tools, etc...) is only designed to handle the amount of customer support requests we get right now. We serve anywhere from three to ten customers a day, and average one or two support issues a day. That's not a very high level, but I sell expensive lessons, so I'm able to make a living providing a high level of service to a relatively small customer base.

Read More

The Day Dan Benjamin Made Me Cry

One day in March of 2012, Dan Benjamin made me cry. 

We were chatting about business. He had ideas for StevieSnacks, good ideas, but ideas that fueled my anxiety. I explained the 18 month backlog of lessons in my brain. Lessons that I've not yet taught. Today's ideas will go on a big pile that I have to carry until I've caught up with the lessons I wanted to teach last year. And that depresses me. My body has to produce what my mind dreams up, but my body is much slower than my mind.

Read More

Unlinking Your YouTube And Google Accounts

Part of growing a business is delegating responsibility. I'm in the process of teaching Kevin how to publish free lessons for StevieSnacks. The critical step in that process is accessing my YouTube Channel.​

Here's where it gets tricky. That YouTube channel has been linked to my personal Google/Gmail account for the past 5 years. No one, and I mean no one, has had access to it except for me. It is the source of most of my non-direct traffic, the place where StevieSnacks got it's start, and where my only marketing happens today.​

Read More