Workspiration

What a pleasure to have contributed my setup and favorite software to Workspiration!

Mar 13th 2014 · Permalink

Self-Executing Anonymous Functions or How to Write Clean Javascript

Feb 20th 2014 · Permalink

Let’s talk about anonymous self-executing functions. Go ahead, say that out loud and let the kids next to you know that you’re big time now. There is a wealth of information that we can talk about in regards to anonymous functions in Javascript. If you’re a Javascript pro, you probably already know what these are. To be honest, I don’t really care about most of those. I have been writing anonymous functions primarily to make my Javascript more readable. Let’s talk a bit about anonymous functions, making them self-executing and then walk through some examples. We’ll keep it simple, you know, for the kids.

What is an anonymous function? Easy. It’s a function without a name. NEXT!

This is an example of a function:


function helloWorld() {
	alert('Hello World');
}

This is an example of an anonymous function:


var helloWold = function() {
	alert('Hello World');
}

Whoa, wait a minute, you assigned the function to a variable? Yes, yes I did. Don’t worry about that for now, the variable would just be a way of calling it. What’s important here is that the function in the second example has no name associated with it. That my friends is an anonymous function. Ok, that’s cool and all, but you said self-executing, so don’t hold back on me. Right.

Let’s look at another anonymous function:


(function() {
	alert('Hello World');
})

Looks like an anonymous function, right? It has no name, so yes, it’s anonymous.

Now let’s write it again adding three extra characters to the end:


(function() {
	alert('Hello World');
})();

You see those last two parentheses? Those are the self-executing part. They cause everything in the preceding parentheses to be executed immediately. Stop what you’re doing and go ask for a raise now. Your speech can go something like this. “Yada yada yada… self-executing anonymous functions… yada yada yada… show me the money.”

No, shhhh. You’re welcome.

Actually, this is really unimpressive. Let’s take it a bit further. Let’s talk about self-executing anonymous functions inside and outside of objects. Go ahead, say it out loud. Has a nice ring to it, doesn’t it. That’s probably not even the correct technical term for it, but like I said, I don’t really care. Let’s just dive right in and then ask forgiveness later.

Let’s start with an example:


(function() {
	var Person = {
		sayHello: function() {
			alert('Hello World');
		}
	}
})();

Here we have a self-executing anonymous function with an object inside of it that contains it’s own anonymous function. I just blew your mind. Poof. Let’s look at it line by line. The first and last line are what we saw before, an anonymous self-executing function. Cool, looks familar. Inside, we have a variable called Person that is equal to some curly brackets and another anonymous function with the name sayHello, but it’s written in a way that we haven’t seen before so it’s causing my blood pressure to rise. Stay cool man. We got this. The Person variable is what’s called an object literal in Javascript. We know this because it is equal to a couple of curly brackets. That’s how some cats in Javascript land decided objects (literal objects (I know, let’s not get into it right now)) should look. The sayHello anonymous function is a method within the Person object. That’s all a lot of fancy talk reserved for the dudes with tape on their glasses. I come from the school of learn by doing, so let’s just jump into some doing and I think you will see things start to come together.

Right now, if we ran the code above, nothing would happen. Yes, it is self-executing, but nothing is telling that ‘Hello World’ alert to run. It’s there, waiting for us like a potential partner on a blind date… waiting… nervously checking their phone and dodging stares from other couples. Let’s take our example and make it pop that ‘Hello World’ alert right away.


(function() {
	var Person = {
		sayHello: function() {
			alert('Hello World');
		}
	}

	Person.sayHello();
})();

Now, if we run this, wham-bam-thank-you-maam. On line 9 we added a line of code that tells the Person object to run the sayHello method and because this is inside the self-executing anonymous function (ladies), we should see the ‘Hello World’ alert pop up. Lick your thumb and pinky and stroke back those eyebrows. Showtime has arrived.

Ok, I feel like you’re with me on this, so let’s get real. I’m gonna write a much larger example below here. I want you to hang on and breathe through it. Remember what we practiced. Two short breaths in, and exhale. Repeat.


(function() {

	var Person = {

		init: function() {
			this.form = $('#form');
			this.bindEvents();
		},

		bindEvents: function() {
			this.form.on('submit', this.showName);
		},

		showName: function(event) {
			event.preventDefault();

			alert(this.form.find('input[type=text]').val());
		}
	}

	Person.init();

})();

Take a look at this example here and then come back. Now look again, now back. How you doin? That page is powered by the example code you see above. Let’s walk through each of the methods in the Person object and talk about what they’re doing and how they’re working together and how this very example of code could likely solve the world hunger problem. Bono, baby, call me.

Let’s start with the init method as it is the first method called on our Person object when we call Person.init() at the bottom of our awesome self-executing anonymous function:


init: function() {
	this.form = $('#form');
	this.bindEvents();
}

I should note that I’m calling this method init because it’s short for initialize. That name however carries no special meaning. I could have called it tire or flamethrower or kitties. I’m just trying to be a little normal with my naming conventions. Gosh.

So, in the init method we are doing two things. First we are setting a variable this.form which is the form element that holds the element from our demo page. This is our first glimpse at ‘this’. Not this this, but this ‘this’. At this point one could go into a deep lecture on ‘this’ and scope, but for now, I’ll just say that ‘this’ is our object literal, Person. So we are assigning a variable to Person, a form element with the ID of ‘form’. We do this by typing this.form. Now anywhere within the scope of Person, we can call on the variable and have the form element. It’s like magic, but really it’s just Javascript. The second thing the init method is doing is calling another method. So. Meta. We’re calling the bindEvents method which is where I like to put any and all event listeners; things like on click, or on submit, or on fart, stuff like that.

So to summarize the init method we’re setting a variable and then telling our script to listen for our event handlers. But why didn’t we just put our event handler into our init? Good question. Very very good question and really the point of this entire article. This next sentence will be the sole purpose of your reading today—are you ready? To write cleaner Javascript. Thank you thank you, I’ll be here all week.

Actually, let’s dive into that cleaner Javascript in a second. First, let’s finish analyzing our script. Just wanted to wet your appetite for the descruction that’ll come later and take you to paradise city with your sweet child o mine.

Let’s take a look at the bindEvents method next:


bindEvents: function() {
	this.form.on('submit', this.showName);
}

Remember this is the method I’m using to handle all my event listeners. In the case of our demo this is listening for someone to submit that form and when it gets submitted it’s going to call another method (meta, again) within our Person object called showName. Now, check it, we could have written this method like so:


bindEvents: function() {
	$('#form').on('submit', this.showName);
}

We just switched our Person variable this.form with the value we had set it equal to, $(‘#form’). This would have given us the same results. However, by setting this.form in our Person object it affords us a few luxuries. The first is that our script runs once and as soon as it grabs that element and stores it under this.form, it’s done and stored and safe and all warm and fuzzy. If we were to use it again, as we do further down in the showName method, we wouldn’t need to go out and look up that element again. So we’re saving some cycle or some amount of time in our script by setting that variable. Second, since we are using that variable multiple times in our script, if some intern popped into our code and was like, who gives their form the ID of ‘form’, that’s so lame and instead changed the ID to ‘whatsapp’, well then we’d have to go change every instance of our code with the new ID. And if that ID was used like 16 billion times, well then, that would be a lot of work, even for search/replace. Finally, setting the variable this.form in one place and being able to use it yields cleaner Javascript.

Alright, now we’re really moving. We’re seeing how to set variables and call methods from other methods. We. Are. Big. Time.

Let’s jump down to our final method, showName, that we’re calling when the event handlers catches a submit in our bindEvents method. That was two methods in one sentence. Remember when the only method you ever thought about was the wicked method air you were gonna finally pull in front of that girl you liked in junior high and then she would finally see your potential and then instead of Tony Hawk’s Pro Skater video games it would be like Noah Stokes Pro Skater… anyways. I’m saying picture that for yourself, not for me. That never happened to me.

Here is our final method:


showName: function(event) {
	event.preventDefault();

	alert(this.form.find('input[type=text]').val());
}

This one is really straight forward. First we stop the form from submitting itself with the event.preventDefault(); Then we pop an alert that shows the value of the text field within our form. But wait, that doesn’t work. If you ran the code as is, you’d get an error telling you that it can’t find the value of the text input. Thanks alot Obama. What the heck is going on? This is an issue with scope. Let’s step back and check it out.

As we talked about earlier, I should be able to access this.form from anywhere within our script, and you’re right you should. It’s just that in this instance of calling this.showName on submit ‘this’ is no longer talking about our Person, it’s talking about our form element. Huh? Let’s do an example:


$('form').on('submit', function() {
	alert($(this).find('input').val());
});

In the example above, you can see we are just going to alert the value of the input. The ‘this’ in that example is talking about the form element because jQuery passes that in for us so we have some context. Very cool of John to do that, thanks. But in our example, now we’re futon’d because how are we supposed to get access to our this.form variable?? Well, John thought of that too and there is a method in jQuery called $.proxy. With this method we are able to override the scope of ‘this’ and keep it to what we originally wanted it to be, Person. Here is a link to a quick 4 minute video on $.proxy. Take some time to watch it to get a better understanding if you’d like. I would recommend it.

If it’s still over your head, just take it on faith right now as to what $.proxy is doing and let’s move forward and jump back to our example. We’ll use the $.proxy and wrap our this.showName method in it to keep the context of ‘this’ where we want it.


(function() {

	var Person = {

		init: function() {
			this.form = $('#form');
			this.bindEvents();
		},

		bindEvents: function() {
			this.form.on('submit', $.proxy(this.showName, this));
		},

		showName: function(event) {
			event.preventDefault();

			alert(this.form.find('input[type=text]').val());
		}
	}

	Person.init();

})();

See in line 12 how we wrapped this.showName in $.proxy? That is going to keep the scope of ‘this’ where we want it and it’s going to cause the alert to function how we had originally planned. It’s so beautiful it brings a single solitary tear to my eye. Just one, one and no more. If I cried more folks would think that I had tickets to the new One Direction tour which I don’t or do I? Don’t tell my kids. #pForm

Well that’s it… and this entire time I’m sure you were convinced that there was some wiccan black magic going on. Boy did I have you fooled. You should take tricks like these to parties and draw them on white boards. All your friends and neighbors will be _so_ impressed.

Joking aside, you can see again in our example how clean our Javascript is. That really is the goal of this article. I’m 100% confident that in writing this I used incorrect terminology and I probably made statements that aren’t entirely true—but please don’t let those things distract you. What you see below is perfectly working code that is clean, organized, full of reusable variables all scoped to our Person object and firing inside of a self-executing anonymous function. That’s pretty bad ass if you ask me. This article represents just the tip of the iceberg when it comes to what you can do with Javascript and with writing code this way. If this sparked your interest, and I hope it did, please go off and learn more. Then write your own article teaching the rest of us what you learned.


(function() {

	var Person = {

		init: function() {
			this.form = $('#form');
			this.bindEvents();
		},

		bindEvents: function() {
			this.form.on('submit', $.proxy(this.showName, this));
		},

		showName: function(event) {
			event.preventDefault();

			alert(this.form.find('input[type=text]').val());
		}
	}

	Person.init();

})();

How I’m Voting for the .NET Awards

Feb 13th 2014 · Permalink

I am honored again to be judging the 2014 .NET Awards. The selection candidates have yielded a very cool crop for this year. Inspired by Dan Mall’s approach to publicly sharing how he is voting, I’ve decided to do the same. Below are my list of candidates I will be voting for as well as a short explanation of why they’ve won my vote. In some cases, I did not know enough about any of the candidates to provide an informed vote, in those cases I simply won’t vote.

New Agency of the Year - Agency
While all of these agencies were new to me, I took some time browsing through their portfolios. I was impressed by a lot of the work, but really enjoyed the work that I saw over at Agency.

Team of the Year - Squarespace
A lot of really great teams in this category. I have been continually impressed at the Squarespace team for how they consistently produce a beautiful product and how they are meeting the needs of their customer base.

Agency of the Year - Teehan + Lax
Not only has Teehan Lax been producing amazing work, they have been providing invaluable resources back to the community for free. iOS PSDs, iOS code, etc. A well deserved vote here!

Entrepreneur of the Year - Peter Richman
I’ve got a handful of friends in here as well as a lot of folks that I don’t know. I’m voting for Peter because I love his story and the similarities it shares with my own. He built Plug and Play Design on his own and now it boasts over 20 employees. Hats off to you Peter!

Emerging Talent of the Year - Jennie Lamere
This is a group I didn’t know too much about. A sure sign that I’m getting to old. I took some time to browse through and check out their work. Super impressed, and definitely a hard decision here. I was really impressed by Jennie’s Twivo extension she built for Chrome. Very cool.

Young Developer of the Year - Harry Roberts
Harry has had an incredible year! Since leaving his job, he’s become a regular on the speaking circuit and has continued to work on his CSS framework, Inuit. Harry thinks about CSS way too much, so you’d be smart to listen to his thoughts when/if you get a chance.

Young Designer of the Year - Jared Erondu
Jared has some really beautiful work he’s done over at Omada Health and on his own project Evomail. As a young designer and active member in the design community, he has a bright future ahead.

Developer of the Year - Taylor Otwell
Laravel has been a huge resource for us at Bold, so hands down my vote goes to the amazing work that Taylor has done to build Laravel!

Designer of the Year - Dan Mall
This was a hard one. A lot of friends in this category. For me it comes down to personal experience. Bold had the chance to work with Dan last year and there is so much to love about his process, his work ethic and most of all his work.

Outstanding Contribution of the Year - Christopher Murphy
Christopher wrote an honest and brave post last year about his struggle with depression which I think resonated with a lot of folks in our community. Bravo Chris!

Podcast of the Year - No vote
I’m friends with so many folks in this category, and I admittedly love all of their podcasts and have been on several of them myself. I can’t pick a favorite so for that reason, I’m not going to vote in this category.

Conference Talk of the Year - Ashley Baxter
I wasn’t able to watch all of these talk. I was lucky enough however to hear Ashley’s talk at Industry Conf last year. It was Ashley’s very first time speaking at a conference and she delivered in spades. The talk was engaging, fun, real and so informative. I really hope Ashley takes home this one.

Grassroots Event of the Year - Creative Mornings
When I used to live in SF I would attend the Creative Mornings whenever I could. Such an amazing resource and community.

Best Online Portfolio - Haraldur Thorleifsson
Come on people. Haraldur’s work is amazing. Love.

Side Project of the Year - Can I Use
I use caniuse.com all the time. It’s an excellent resource that delivers all the info you need to know if your CSS rules will work in your clients browsers. Invaluable.

Demo of the Year - Paul Lewis / Poly Maker
Too many of these told me my browser wasn’t supported, alas, I opened a more “modern” browser and was duly impressed by the craziness of people in our community and what they can do! Nevertheless, I needed to pick one, and the Poly Maker was simply beautiful!

Best Collaborative Project - A Journey Through Middle Earth
Anything that North Kingdom touches is gold. This is no exception.

Redesign of the Year - USA Today
I love everything that Fi did with this project. An easy vote for me.

Game Changer of the Year - Sass
Yes, I used to be an old man yelling at the Sassy’s to get off my lawn. Then I took the red pill and now, I’m unashamedly in love. I am Sassy, and I’m here to stay. I can’t imagine CSS without it now. What has happened to me?!?

Best New Web Technology - Lightbeam
This project is not only visually impressive but stunning in terms of user privacy and the repercussions of having information online. 

Open Source Project of the Year - Laravel
No surprise here since I voted for Taylor, Laravel’s creator for Developer of the Year. We love Laravel at Bold. Love it. Love it love it love it. Like, a lot.

App of the Year - Sublime Text
This was an easy choice for me. I use Sublime Text daily. It’s hands down the best editor out there, IMO. It’s also actively developed which was a major downside to the editor of old, TextMate. I see a bright future ahead for Sublime Text.

Congrats and good luck to all the candidates! Be sure to head over to thenetawards.com to vote yourself.

Noah Stokes - Pencil vs Pixel

Honored to have chatted with the ever-sharp Cesar Contreras on his Pencil vs. Pixel site. If you’ve got a bit of time, be sure to check it out. There is audio as well as a video feed.

Feb 12th 2014 · Permalink

I’m going to build a product. All I need is a good idea.

Jan 28th 2014 · Permalink

My good idea probably won’t solve any real world problems, those ideas don’t make money. So it will probably have something to do with photos or videos or both. Phvideos! I can almost smell the cash piling up on top of the flat interface. In order to make this happen I need to commit to working longer hours–you know hustle is what’s going to get this thing off the ground. All that hustle will be fun. I can’t wait to tell everyone about my product, really sell them on the vision. Things may get tight financially, so I’ll need to double time on client work while I work on Phvideos, but that’s no big deal. We’ll ship early and often, pivoting when we need to because data doesn’t lie and somehow neither do my instincts. We’ll shift marketing to a new demographic as the product changes; friends will be so excited to try out the new version. My kids will be the most excited because it will probably be the only time I talk to them all week, but that’s ok because pretty soon I’ll have recurring income that will allow me to stay home and not work anymore. This is going to be so great.

Once I’ve invested a year or two, or maybe more, I’ll have that golden ticket, that feather in my cap to wealth and happiness. Of course, if it doesn’t work out, I’ll probably be broke. My clients will have stopped calling since I stopped responding to their requests because Phvideos was having a good week and I couldn’t spare any cycles to work on their silly stuff. My wife probably won’t buy the excuse that I was doing it for her or the kids and I’d be lucky if she stuck around. She’ll be back when we close a Series B, I just know it. This is going to be so great. 

Note:
In case this somehow flew over your head, let me clearly state that I have several friends building products and doing a damn fine job at it. This is by no means a dig on them or their chosen career path. This post is for me and no one else.

Thirty Seven

Jan 11th 2014 · Permalink

For the past three years, I’ve been writing these lists on my birthday of things that I’ve learned in the past year. You can read Thirty Six, Thirty Five and Thirty Four if you’d like. I’ve seen a lot more of these lists pop up recently and I’ve seen some rebuffs towards them as being ridiculous. I don’t pretend to think I have all this wisdom and it is my duty to bestow it on you, the reader. These lists are for me to look back on one day and enjoy. Perhaps you might enjoy them too.

2013 - Year in Review

Jan 1st 2014 · Permalink

These are the things from 2013.

Most Played Album: I prefer Most Played Album as opposed to Best Album, because it forces one to be honest. I may have spun that Pitbull f. Ke$ha single 1725 times and still called the new Lorde album the best of the year. This is based on my actual spins straight from my only source of music, Rdio. This was a close one, but I’m giving it to John Mayer for Paradise Valley. Reviewing my most played songs in Rdio showed that Paradise Valley and Pearl Jam’s Lightning Bolt were a close race for most played. Lightning Bolt came out a few months after Paradise Valley, so it could have been those extra few months of spin time that pushed it over the top. It’s actually pretty sad. I mean, don’t get me wrong, I like John Mayer as a blues guitarist, but damn does naming that my Most Played Album make me sound like an old man who wears kakhis to work and splurges on things like a new leaf blower.

Most Get Off My Lawn Moment: I was asked to use Sass on a project. If you know me, I’m not a fan of things that get in the way of my purest coding. It’s like Yvon Chouinard says of taking a helicopter to the summit of a mountain instead of spending hours or days climbing through difficult terrain to reach the summit–it’s cheating. I feel/felt the same way about some of the tools that are popping up across our front-end dev landscape. Nevertheless, when a client asks for it, I’m happy to comply. What I found after a week or two of building a fairly extensive web app using Sass for the CSS was that I actually really enjoy using Sass. I may be an old crumudgon when it comes to how I work, but I am not too proud to admit that I am a fan of Sass.

Most Pleasant Surprise: Sometime in late June I pointed a rather old mountain bike downhill at the top of a trail called 007. Nevermind the fact that I hadn’t ridden a bike in several years, the only reason I was up there was to not be the one guy that bailed on the group activity. I borrowed a helmet from a friends wife. I looked good in pink. I was told to lower my seat and lean back over my tire if I felt myself going down too steep of terrain in order to keep from flying over the handle bars. Comforting advice to be sure. What happened next was a combination of fear, adrenaline, joy, more fear, more joy, and a rear derailer that sounded like it may implode at any moment… all culminating to a rush like I hadn’t felt in years. My first words at the bottom of the hill were: “can we do that again?” I was hooked. As fate would have it, my new home on the Central Coast is chock full of excellent trails to ride with breathtaking ocean views. When we moved here I had set a goal of getting out more and between mountain biking and surfing, I’ve met that goal in spades.

Most Favorite TV Show: How you like that english? This year was full of incredible television. House of Cards was a fantastic, disheartening look into the world of politicians that I consumed in a matter of days. Netflix kicks so much ass at everything, I really do think they are the future of media consumption. One of my regular shows ended this year, Dexter. It was an OK ending, I wasn’t disappointed but I also wasn’t that ecstatic about it. Homeland ended with a absolutely brilliant episode that was so well acted it really could have been the series end if they had wanted. I’m excited about the future of that show. Above all of those shows however was a show called The Americans on FX starring Matthew Rhys and Keri Russell. It’s a complex show based in D.C. in the 80’s about a couple of KGB spies at the height of the Cold War. Of all the shows I watched this year, The Americans is the one that I am the most eager about for next season. Oh, and no, I didn’t watch Breaking Bad. I couldn’t stomach that show. Yes, yes I did watch all 7 seasons of Dexter. Yes, I see the irony there. 

Most Favorite Discussion: In February I tweeted something along the lines of: I feel like responsive design has sucked the soul out of website design. Everything is boxes and grids. Where has the creativity gone? Actually, that’s exactly what I tweeted. A small discussion ensued. I heard from everyone in our industry. Literally, every single person contacted me. I had to hire a person just to read the messages. Nearly a year later, I still feel this way about most of the responsive sites out there. At Bold we’ve turned out quite a few responsive sites that I think push the bounds of creativity a bit when it comes to responsive design ( <— as if that’s different from regular design, but dropping it here for some link bait traffic!). I still hope to see more creative solutions in responsive websites and maybe that will come with changing trends or as front-end devs learn better techniques, etc. Maybe it won’t though. Maybe we’re all doomed to live with BOXES AND GRIDS FOREVER.

Most Debated Topic in the Bold Office: Meat should stand on it’s own. Let’s discuss in the context of a tri-tip sandwich. Here on the Central Coast we pride ourselves on tri-tip sandwiches, so it’s a fitting subject. There are several tri-tip vendors in town, but a few standout amongst the locals as the favorites: Firestone and Old San Luis BBQ. The Firestone sandwich comes on a french roll butter with a butter/garlic spread and topped with a healthy dose of homemade BBQ sauce. The Old San Luis BBQ sandwich comes on a french roll as well (dry) with a option of fresh salsa (know as Santa Maria style) or BBQ sauce. Both sandwiches are delicious, but in my mind one is far superior. I have presented the argument, and still stand by it today, that a tri-tip sandwich should be based on the very namesake of the sandwich itself, the tri-tip. By simply removing a piece of the tri-tip from the sandwich a taste test can be conducted and the results should be clear. We did our own test and the results were clear. The Firestone tri-tip tastes nothing short of cardboard, while the Old San Luis BBQ tri-tip tastes like a dish prepared for a son who has gone missing and is then found and the entire town gathers to celebrate and the best fatted calf is slain to prepare the meanest tri-tip ever had. Fans of the Firestone tri-tip generally agree with these results, however they claim that it is the BBQ sauce that makes the sandwich so tasty and delicious to which I call bull (see what I did there). It is not a sauce sandwich that we are comparing, but a tri-tip sandwich to which I say, the meat should stand on it’s own. As it turns out, I am the only one in the office that thinks this way. As it also turns out, I am the only one in the office that is right.

Most Fun Had Working on a Project: Hands down the most enjoyable project this year was one of my own, The Motherfuton News. I had always wanted to do something in that vain and when I moved into an office with video extraordinaire, Todd Peterson of Red CANARY Productions I was actually able to give it a shot. Todd helped me with everything from lighting to backdrop (unused green screen is brilliant, right?) to shooting and editing. We had an absolute blast producing the two episodes and had a third written but never managed to shoot it. I wasn’t sure what the reception would be like, but was pleasantly surprised when people discovered the first episode in the 404 page of the new Bold website. For fans of MFN, I don’t want to make any promises, but 2014 looks to be a bright year for the news. Stay tuned.

How Now Web Cow

I’ve decided to try my hand at online teaching. I’ll be covering topics like Responsive Web Development, Design and how to make the worlds best crepe. Sign up to get the first video for free!

Aug 20th 2013 · Permalink

Industry Conf – A Recap

May 7th 2013 · Permalink

I was incredibly privileged to speak at the first ever Industry Conference. Gavin put on an incredible conference with a stellar line up. There are several great write-up about the conference itself here, here and here. For me personally, it was an honor to share the stage with incredible speakers and a great pleasure to make new friendships with others I had never met before.

image

It was my first time in the UK and I must say that Newcastle was the perfect setting. The venue was an old turbine building which has immense character and a great vibe to it. The photo above is of the Millennium Bridge which we crossed each day to get from our hotel to the venue. I love how they lit it at night.

I really do hope that Gavin continues Industry Conference for many years to come.

The Gently Mad

Adam was kind enough to have me on his wonderful podcast, The Gently Mad. Listen along as I talk my way into your heart.

Apr 12th 2013 · Permalink
← Older Entries