Spotify & The Ambient Century

In 2003, on my 24th birthday, one of my closest friends Brenden Tamilio gave me a wonderful book called The Ambient Century.

From the expanding classical horizons of Mahler, Satie and Debussy to the revolutions in electronic music inaugurated by Stockhausen and Cage; From the Indian-influenced Minimalism of Philip Glass and Terry Riley to the ‘unlocking’ sound worlds of Brian Eno and Arvo Part; through the epoch-defining music of rock maestros The Beatles and Jimi Hendrix down to the pure electronic creations of Kraftwerk, Goldie and Trance…

As that quote from the sleeve makes pretty clear – this book is ambitious and above all else thorough.

I Couldn’t Afford This Book

Because Mark Prendergast’s intention with this book is to walk the reader through over a century of music, and provide listening suggestions for each composer – there is no way I, nor most people could afford to fully digest the contents of this book. In the first 10 pages alone, between Mahler and Satie, I could easily have spent $100 just to listen to the examples he mentions. This isn’t the author’s fault. He is simply pointing his readers to the great works of the composers he is discussing.

Because the text is so directly tied to the musical examples – reading it without access to a full anthology of ambient music proved very difficult. Eventually I became frustrated and put the book down.

How Spotify Will Change The Way We Learn About Music

It is now 2011. I knew from the moment I started using Spotify that it would change the way I listened to music forever. So as I was cleaning up my bookshelf the other day, I saw this forgotten book – and realized that now I could fully appreciate it.

I have brought the book into the office with me, and am reading a chapter a day. I have created a Playlist within Spotify where I am keeping all of the works mentioned in the The Ambient Century. If you have any interest in checking out it out, here is the The Ambient Century Playlist.

I’m not a passive music listener. I sometimes wish I was. I can’t just hear a composer I like and give them a listen in the background while I work. I need to find their back catalog, discover their influences, read entry upon Wikipedia entry about their life and what affected their work. This obsession far pre-dated my time as a music-school kid in college. This goes back to when I was buying my first cassettes and reading every single liner note, about every producer and every studio musician on a given recording. As you can imagine – this has always been prohibitively expensive and inherently limited.

For $10 a month (I subscribe to the Premium plan, but there are also $5 and free add-supported versions available), Spotify has given all of us the ability to truly discover more about music than was ever possible before.

EE Reactor Team to the rescue!

I’m just going to put this out there. Does anyone else think that the EE Reactor team needs some kind of super-hero-esque logo? Something like the bat-signal perhaps?

Then, without committing to anything on the forums; any time they see something they are interested in addressing, they can just post up that image and we will all sleep a little better knowing that they are, protecting us all. Like vigilantes for code-justice?

If I were a designer, I would knock this out and send it to them. I know SOMEONE out there can do this. And they should.

CodeIgniter ActiveRecords Don’t Support Joins in Delete Statements

I love CodeIgniter’s ActiveRecords functionality. It makes programmatically building complex queries infinitely neater – and thus, more maintainable.

After years of using ActiveRecords, they have failed me for the first time.

ActiveRecords Ignores My Join

Here is what I was trying to do (in a simplified example):

What I’ve Got

I have two tables:

  • table_1
  • table_2

Table 1

  • id (int)
  • thing (varchar)
  • table_2_id (field on which to join info from table_2)

Table 2

  • id (int)
  • thing (varchar)

What I want to do

I want to delete all rows from table_1, which have a joined table_2 with a “thing” value of “delete_me”.

Here is the query as I would write it by hand.

DELETE t1.*
FROM table_1 AS t1
LEFT OUTER JOIN table_2 AS t2 ON t1.table_2_id = t2.id
WHERE t2.thing='delete_me'

This works all day long, exactly as expected.

Testing ActiveRecords Ability to Delete Rows Based on Joined Data

Here is the test that I ran:

<?php
    // Let's ensure these queries are save
    $this->EE->db->save_queries = TRUE;

    $this->EE->db->from("table_1 as t1");
    $this->EE->db->join("table_2 AS t2", "t1.table_2_id = t2.id", "LEFT OUTER");
    $this->EE->db->where("t2.thing", "delete_me");
    $this->EE->db->delete("t1.*");

    // Output what ActiveRecords thinks I wanted
    echo $this->EE->db->last_query();
?>

And here is what ActiveRecords thinks I want:

DELETE FROM `t1`.* WHERE `t2`.`thing` = 'delete_me'

This of course:

  • Is not what I want
  • Throws errors because it references what MySQL thinks is an undeclared t2 table.

Conclusion

As far as I can tell – this is just something that is not supported in CodeIgniter’s ActiveRecords functionality. I’m not really complaining. It’s just as easy to write the query out by hand – but if anyone else out there is running into funky results while trying to do something similar, this might be helpful.

100 Isn’t Enough

Why does the Twitter API limit the retweet_count to 100?

I cannot, for the life of me, figure out why this is so difficult. It seems like such an obvious and vital piece of information. So why, for the love of Pete, does the Twitter API return “100+” once the retweet count has reached 100? This is perhaps the most important time to continue returning accurate information.

Reporting Isn’t Optional

I have to assume that Twitter wants us developing tools which empower our clients to use Twitter in creative ways. Twitter then has to know that what our clients want more than anything is proof that their investment in these tools was worth it. Without a doubt, the most critical statistic that any one of our clients wants to know is, “How many times have we been retweeted?”.

So why is it, that of all the amazing information that Twitter makes available through its API – that this is the one that caps off at 100? I’m honestly perplexed as to what could have driven this decision.

Technical Limitation?

Is it a technical limitation? Is there something about counting a retweet over 100 times that would have put overwhelming strain on Twitters servers? I doubt it.

Business Decision?

I’m going to sound like a conspiracy theorist here – but is this some kind of brilliant business decision by the folks trying to monetize Twitter? Do they realize that this information is critical, and are they going to eventually charge us to access it? Again, I doubt it.

So What Are My Options?

Counting

I suppose I could write a script which continuously check the Streaming API and try to count all the retweets myself. Not only do I really NOT want to do this, but it is somewhat fraught with danger anyway. Unless I go to ridiculous lengths to ensure 100% uptime on the machine(s) running this script, there is a chance that retweets will be lost and my data will be incorrect.

But honestly, the main reason I don’t want to do this – is because I know the minute I do, the Twitter API will get an update which includes the expanded retweet_count information.

Third Party Service

I haven’t really done my due diligence here – but I am sure there are some third party services out there who (for an astronomical fee) can provide me this information. But here’s what is a little strange – in the limited research I DID do, the one third party service which was mentioned as a possible solution has been acquired by Twitter. [Dramatic conspiracy music here].

Ideas

Am I missing something? Is there a really obvious solution to this that I am just missing somehow? If you have any ideas – please hit me up. I’m at a bit of a loss here.

ExpressionEngine 2 Bootstrap

Need a cron job in your ExpressionEngine 2 environment? Want to take advantage all that lovely CodeIgniter goodness? Not quite sure how to get access to the EE super object to make it happen?

As per usual, Rob Sanchez (@_rsan) has a solution for us.

Check out his ExpressionEngine Bootstrap and you’ll be good to go.

…But Instead I’m Writing About Dildos

I should be:

  • explaining the importance of understanding parse order in your templates – thanks to Low (@low)
  • listing 10 ways to make ExpressionEngine rock even harder than it already does – thanks to Matt Weinberg (@mrw)
  • assisting you in tuning your EE site to be as fast as possible – thanks to Jacob Russell (@jacobrussell)
  • giving you really cool insight into things the EE docs don’t tell you about Addon development – thanks to Mark Huot (@markhuot)
  • tearing the covers off of ExpressionEngine and discussing what we all saw – thanks to Rob Sanchez (@_rsan)
  • discussing the potential benefits of prototyping in EE – thanks to Ruthie Bendor (@unruthless)

But I’m not. I’m writing about dildos. And that is lame.

VS. EECI2010

Everything about EECI2011 felt bigger and better to me than EECI2010. There were more people here (twice as many in fact). I’m sure some of the attendees had things to complain about, but the general vibe in the room was incredibly positive. Everyone seemed excited about the future of EllisLab and ExpressionEngine. Although maybe that’s just it, maybe they are just confident that there is a future.

The Invisible Dog Art Center was a great venue for the event, and Brooklyn in general provided an almost infinite amount of spots for people to congregate and continue the discussions that were started during the actual conference.

Paul Burton & #dildogate

The event started off with some controversy: #dildogate. Paul Burton (@16toads) took the stage to give the first talk of the conference, entitled “Don’t Call Me A Freelancer”. Paul’s presentation included some R-Rated illustrations he had created and also a screen filled with dildos with hats photoshopped on them.

Take a look at Paul’s slides and decide for yourself if you find them offensive. [Edit: These are not the original slides. They have been replaced on Speakerdeck. I do not currently have access to a link to the original slides]

  • I was not personally offended by the content of the slides
  • Other people were clearly offended by the content of the slides

The real shame here, is that #dildogate did two things:

  1. It eclipsed in attention an otherwise brilliant presentation. I was genuinely wrapped the entire time Paul was speaking and I found him to be easily one of the best presenters.
  2. It affected the external perception of EECI2011. There were 300 of us in attendance, but there were also thousands of others following the #eeci2011 hashtag.

It is the latter that I am most concerned with. I am afraid that this years EECI may have seemed like a toxic environment filled with angry rioters carrying pitchforks. It wasn’t, and believe me, I know toxic environments (I was at EECI2010). The reason this is such a shame, is that what should have been coming across was the feeling of renewed hope that I sensed among the developer community. The sense of faith in what EllisLab is doing and the direction they are steering this ship.

It important to note that #dildogate was not the fault of either Whoooz! Webmedia or EllisLab. They didn’t screen the speaker’s presentations – which was the right thing to do. If you were pissed off by what Paul had to say – be pissed off at Paul. Send him an email, tweet at him, DM him and explain what you found inappropriate about his presentation.

The problem right now, is that people seem to be directing their anger at EECI, Whoooz, or EllisLab which isn’t fair to any of them, and more importantly it isn’t fair to the community.

Occupy EllisLab

I’ll say this again, because I think it is wildly important. EllisLab & Whoooz! better not screen future presentations for content.

EECI is vital to us. It is vital because of what it isn’t.

  • EECI is not a conference for us to pat ourselves on the back for how well we are doing.
  • EECI is not a conference for us to go hear things we already know.
  • EECI is not a place for us to go have smoke blown up our ass

EECI2010 in San Francisco was exactly what EECI should be about. It was my first EECI and I wasn’t sure what to expect. It felt more like Occupy EllisLab than it did like a bunch of people hugging and telling each other how great they are. Look at what it accomplished! Noone will argue that EllisLab isn’t in a better state in 2011 than it was in 2010. Everyone needs to remember that many of the changes since EECI2010, are thanks in part to the very toxic nature of that event.

The presenters in San Francisco didn’t hold back. Many of them included very direct comments for EllisLab expressing their disaproval with the state of EE. This is why it’s vital that we don’t restrain our presenters in any way. When things go wrong, we need to make sure that a platform still exists for EE users to be pissed off at EllisLab (or anyone else).

I realize that developers voicing their discontent with EllisLabs in 2010 and Paul Burton putting R-Rated pictures in his slides in 2011 are not the same thing. However, giving the conference creators any say in what the presenters can and cannot discuss is a slippery slope that I am not willing to go down.

If You’re Pissed Off…

Be pissed off. It’s ok. Just focus your anger in the right direction. If Paul offended you, be pissed off at Paul. Something tells me he will be ok with that.

It is our responsibility as those in attendance at EECI2011 to reflect the positivity that was very much present in Brooklyn this week.

EECI bound. Love South Station.
EECI bound. Love South Station.

EECI bound. Love South Station.

Notes /

Better Workflow - Thank You Electric Labs

One of the things that scared me to death about trying ExpressionEngine in the first place, was the lack of any real workflow tools. This was a gaping hole that I was somewhat shocked nobody was really freaking out about. Working with primarily larger corporate clients – I knew full well that this omission would eventually bite me in the ass. There is just too much process and approval that goes into decentralizing content creation for it not to.

And so a few years back – while working on a site for a large hospital I got the email I had been dreading. It was days before the launch and our client reached out to us asking how they submit something for approval.

It literally just hadn’t come up in conversation – and I knew from the tone of the email that this wasn’t something to which I could respond, “Well, erm, EE doesn’t do that.”.

Enter NSM Publish Plus

So I spent a night freaking out – starting to pull together my own little hack to make this work. I resigned myself to the fact that I was probably going to be awake for the next week trying to pull something together to get even the most basic workflow in place.

I was still pretty new to ExpressionEngine and so I didn’t immediately go out searching for an existing addon. But about halfway through building my own I was chatting with someone at a Build Guild about it and they said, “Oh, you mean like Leevi Graham’s NSM Publish Plus?”. I’m pretty sure I dropped the beer in my hand, ran home, installed it and sent Leevi a tweet threatening to hug him if/when I met him in person.

And it was good.

ExpressionEngine 2.0

When ExpressionEngine 2.0 release, I just assumed there would be some kind of workflow in place. No such luck. I waited patiently for NSM Publish Plus 2 to be announced and somewhere around Septemper of last year I couldn’t wait anymore and emailed Leevi. He told me he was planning on developing it, but there was no set launch date.

I wanted nothing more than to avoid the “pit-in-my-stomach” feeling I had the last time I was in a workflow-less environment. But I figured I’d sit tight.

In the Forums

On April 24th of this year, I posted this to the forums. It was sparked by the following quick exchange with @EllisLab.

At least I wasn’t the only person who was a little concerned with this issue.

Better Workflow

You know that feeling which follows you around when you KNOW something is going to come back to haunt you? It’s not an immediate and pressing feeling, but more like “impending doom” if I can quote from Goodfellas.

Today, finally, I can release the knot from my stomach – and send a hearty “thank you” to Electric Labs for creating their new Addon Better Workflow.

I haven’t tried it yet, but when I do – I will certainly follow this post up with my initial reactions. From what I can see in their documentation it looks fantastic.

At the very least, I am certain that Better Workflow will live up to it’s name. Then again, ANY workflow will certainly be better.

Thank You Electric Labs

Launching an addon as critical as Better Workflow be to many future ExpressionEngine builds was almost certainly an exhausting undertaking. So please join me in sending Electric Labs a thank-you tweet for their hard work. And make sure to check out their intro pricing ($15 off right now.)

Everything about this exchange on Twitter is awesome.
Everything about this exchange on Twitter is awesome.

Everything about this exchange on Twitter is awesome.

EECI 2011 - Let Me Buy You a Beer

The only thing I am really looking to get out of this year’s EECI is to put faces to as many of the Twitter/EE Forum/GetSatisfaction avatars as possible. And then, to buy a beer for as many of those new faces as possible.

I’m not planning anything, scheduling anything or expecting anything. My rough agenda looks something like this:

Agenda

  • Hop the Acela from Boston to New York with Kyle Ridolfo (@yaykyle) at around noon on Wednesday the 19th.
  • Staying at the Nu Hotel (@nuhotel) Wednesday & Thursday nights
  • Heading home from Brooklyn after Friday’s session

So that leaves me two full nights to meet (and have a drink with) as many of you as possible. As I mentioned, I’m not really much for making plans as to where I’ll be. I’d much rather just go with the flow and see where that leaves me.

How To Find Me

I’m going to be tweeting the different places I find myself through my personal @michaelwitwicki account. So if you only follow @booyant and want to meet up for a beer – please follow my personal account as well. If possible, hit me with a quick @ telling me you are going to EECI too, so I can follow you back.

Very much looking forward to finally meeting many of you in person.