A* Interview #18(ish): Strongly-Typed Emacs Acolyte, Bodil Stokke

Follow Bodil on Twitter.

Check out some of her conference talks.

Use an Emacs starter kit to smooth the learning curve.

For an introduction to type theory, click here.

Or if you want to crack a turtle with types, read Types and Programming Languages.

Learn about the A* Series and see more interviews here.

/* change only these */
var youtubeID = “Zm3xjks7”;
var postID = “Bodil Stokke”;
/* change only these */

// DON’T CHANGE BELOW
$(“.video”).html(“

“);
var tag = document.createElement(‘script’);
tag.src = “http://www.youtube.com/player_api”;
var firstScriptTag = document.getElementsByTagName(‘script’)[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

function onPlayerStateChange(event) {
if (event.data ==YT.PlayerState.PLAYING) {
mixpanel.track(“Video played”, {
“youtubeID”: youtubeID,
“postID”: postID

});
}
if (event.data ==YT.PlayerState.ENDED || event.data==0) {
mixpanel.track(“Video ended”, {
“youtubeID”: youtubeID,
“postID”: postID
});
}
}

var player;
function onYouTubePlayerAPIReady() {
player = new YT.Player(‘player’,
{
videoId: youtubeID,
events: {‘onStateChange’: onPlayerStateChange}
});
}

mixpanel.track(“Post viewed”, {
“id”: postID
});

A* Interview #16: StackOverflow’s all-time Python champ, Alex Martelli

Read some of Alex’s favorite monosyllabic books, Cod and Salt.

Listen to the Art of the Fugue on LinerNotes.

Check out Alex’s personal website.

And at his suggestion, sign up for Fitocracy and get yourself in shape!

Learn about the A* Series and see more interviews here.

/* change only these */
var youtubeID = “R6XSEfNqgZ4”;
var postID = “Alex Martelli”;
/* change only these */

// DON’T CHANGE BELOW
$(“.video”).html(“

“);
var tag = document.createElement(‘script’);
tag.src = “http://www.youtube.com/player_api”;
var firstScriptTag = document.getElementsByTagName(‘script’)[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

function onPlayerStateChange(event) {
if (event.data ==YT.PlayerState.PLAYING) {
mixpanel.track(“Video played”, {
“youtubeID”: youtubeID,
“postID”: postID

});
}
if (event.data ==YT.PlayerState.ENDED || event.data==0) {
mixpanel.track(“Video ended”, {
“youtubeID”: youtubeID,
“postID”: postID
});
}
}

var player;
function onYouTubePlayerAPIReady() {
player = new YT.Player(‘player’,
{
videoId: youtubeID,
events: {‘onStateChange’: onPlayerStateChange}
});
}

mixpanel.track(“Post viewed”, {
“id”: postID
});

A* Interview #15: Jeff Lindsay, Creator of Flynn, Co-Founder of Hacker Dojo, Executive Producer of “Indie Game: The Movie”

Check out Flynn, an open source Heroku. And Docker, a container-based deployment system. And use Jeff’s new employer DigitalOcean for some cheap, fast cloud servers.

For more Jeff, follow him on Twitter or check out his personal site.

Read about (one of) Jeff’s favorite musicans Animals as Leaders here.

Watch Indie Game: The Movie here or on Netflix. Buy Kevin Kelly’s What Technology Wants here.

Learn about the A* Series and see more interviews here.

/* change only these */
var youtubeID = “Gpqs-tU29kU”;
var postID = “Jeff Lindsay”;
/* change only these */

// DON’T CHANGE BELOW
$(“.video”).html(“

“);
var tag = document.createElement(‘script’);
tag.src = “http://www.youtube.com/player_api”;
var firstScriptTag = document.getElementsByTagName(‘script’)[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

function onPlayerStateChange(event) {
if (event.data ==YT.PlayerState.PLAYING) {
mixpanel.track(“Video played”, {
“youtubeID”: youtubeID,
“postID”: postID

});
}
if (event.data ==YT.PlayerState.ENDED || event.data==0) {
mixpanel.track(“Video ended”, {
“youtubeID”: youtubeID,
“postID”: postID
});
}
}

var player;
function onYouTubePlayerAPIReady() {
player = new YT.Player(‘player’,
{
videoId: youtubeID,
events: {‘onStateChange’: onPlayerStateChange}
});
}

mixpanel.track(“Post viewed”, {
“id”: postID
});

A* Interview #14: Rob Ashton, Hacker / Soon-To-Be-Erstwhile Peripatetic

Follow Rob on Twitter or on Github or on his personal site.

Read about (one of) Rob’s favorite musicans Mark Knopfler here

Learn about the A* Series and see more more interviews here.

/* change only these */
var youtubeID = “XKFoNNavh2I”;
var postID = “Rob Ashton”;
/* change only these */

// DON’T CHANGE BELOW
$(“.video”).html(“

“);
var tag = document.createElement(‘script’);
tag.src = “http://www.youtube.com/player_api”;
var firstScriptTag = document.getElementsByTagName(‘script’)[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

function onPlayerStateChange(event) {
if (event.data ==YT.PlayerState.PLAYING) {
mixpanel.track(“Video played”, {
“youtubeID”: youtubeID,
“postID”: postID

});
}
if (event.data ==YT.PlayerState.ENDED || event.data==0) {
mixpanel.track(“Video ended”, {
“youtubeID”: youtubeID,
“postID”: postID
});
}
}

var player;
function onYouTubePlayerAPIReady() {
player = new YT.Player(‘player’,
{
videoId: youtubeID,
events: {‘onStateChange’: onPlayerStateChange}
});
}

mixpanel.track(“Post viewed”, {
“id”: postID
});

A* Interview #13: Daniel Peebles, iPhone Jailbreaker and Agda Wizard

Follow Daniel on Twitter or on Github.

Follow Daniel’s example and get started with Agda (because dedicated domains are for the insufficiently dedicated).

And if you want to step up your game, follow Dan’s advice and read some code from Edward Kmett’s Github.

Learn about the A* Series and see more more interviews here.

/* change only these */
var youtubeID = “OvdLGXw9e4k”;
var postID = “Daniel Peebles”;
/* change only these */

// DON’T CHANGE BELOW
$(“.video”).html(“

“);
var tag = document.createElement(‘script’);
tag.src = “http://www.youtube.com/player_api”;
var firstScriptTag = document.getElementsByTagName(‘script’)[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

function onPlayerStateChange(event) {
if (event.data ==YT.PlayerState.PLAYING) {
mixpanel.track(“Video played”, {
“youtubeID”: youtubeID,
“postID”: postID

});
}
if (event.data ==YT.PlayerState.ENDED || event.data==0) {
mixpanel.track(“Video ended”, {
“youtubeID”: youtubeID,
“postID”: postID
});
}
}

var player;
function onYouTubePlayerAPIReady() {
player = new YT.Player(‘player’,
{
videoId: youtubeID,
events: {‘onStateChange’: onPlayerStateChange}
});
}

mixpanel.track(“Post viewed”, {
“id”: postID
});

A* Interview #12: RavenDB creator Ayende Rahein

Ed Note: Ayende is understandably very enthusiastic about RavenDB. So his first answer about it is very technical and rather long. If you’d like to skip to the rest of the easier-to-understand questions, start watching at 34:50

My top two lesson from Ayende:

1) It’s a lot easier to push yourself to improve if you care enough about what you’re working on to wake up for it at 4am.

2) It’s a big mistake to not admit you have a problem. Acknowledging badness is the first step to getting better.

Read about Ayende’s current favorite singer, Lily Allen

Read Ayende’s favorite recent book, Spellmonger by Terry Mancour

Check out Ayende’s blog

Use RavenDB.

Ayende recommends you go read the lmdb codebase!

Read the story of the A# Interviews here. For future interviews, subscribe to my newsletter or follow me on Twitter.

/* change only these */
var youtubeID = “Foo5hg9UXAg”;
var postID = ” Ayende Rahien”;
/* change only these */

// DON’T CHANGE BELOW
$(“.video”).html(“

“);
var tag = document.createElement(‘script’);
tag.src = “http://www.youtube.com/player_api”;
var firstScriptTag = document.getElementsByTagName(‘script’)[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

function onPlayerStateChange(event) {
if (event.data ==YT.PlayerState.PLAYING) {
mixpanel.track(“Video played”, {
“youtubeID”: youtubeID,
“postID”: postID

});
}
if (event.data ==YT.PlayerState.ENDED || event.data==0) {
mixpanel.track(“Video ended”, {
“youtubeID”: youtubeID,
“postID”: postID
});
}
}

var player;
function onYouTubePlayerAPIReady() {
player = new YT.Player(‘player’,
{
videoId: youtubeID,
events: {‘onStateChange’: onPlayerStateChange}
});
}

mixpanel.track(“Post viewed”, {
“id”: postID
});

A* Interview #11: Jon Skeet, All-Time Highest Reputation StackOverflow User

My top two lessons from Jon:

1) Most mistakes come from users not understanding their data

2) Great communication comes from a whole lot of practice, and it really pays off in your career

Some links:

Watch Jon’s screen casts

Read Jon’s blog

Read some reasons why Jon Skeet is the Chuck Norris of coding

Follow Jon on Twitter

And finally, go buy “C# in Depth”!

Read the story of the A# Interviews here. For future interviews, subscribe to my newsletter or follow me on Twitter.

/* change only these */
var youtubeID = “7P2Uzb74qKw”;
var postID = “Jon Skeet”;
/* change only these */

// DON’T CHANGE BELOW
$(“.video”).html(“

“);
var tag = document.createElement(‘script’);
tag.src = “http://www.youtube.com/player_api”;
var firstScriptTag = document.getElementsByTagName(‘script’)[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

function onPlayerStateChange(event) {
if (event.data ==YT.PlayerState.PLAYING) {
mixpanel.track(“Video played”, {
“youtubeID”: youtubeID,
“postID”: postID

});
}
if (event.data ==YT.PlayerState.ENDED || event.data==0) {
mixpanel.track(“Video ended”, {
“youtubeID”: youtubeID,
“postID”: postID
});
}
}

var player;
function onYouTubePlayerAPIReady() {
player = new YT.Player(‘player’,
{
videoId: youtubeID,
events: {‘onStateChange’: onPlayerStateChange}
});
}

mixpanel.track(“Post viewed”, {
“id”: postID
});

A* Interview #10: Ning Liang, Co-Founder of YC-backed RentMetrics and co-creator of HealthSherpa.com

Check out HealthSherpa

Follow him on Twitter here.

/* change only these */
var youtubeID = “tfIchafTUYQ”;
var postID = ” Ning Liang”;
/* change only these */

// DON’T CHANGE BELOW
$(“.video”).html(“

“);
var tag = document.createElement(‘script’);
tag.src = “http://www.youtube.com/player_api”;
var firstScriptTag = document.getElementsByTagName(‘script’)[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

function onPlayerStateChange(event) {
if (event.data ==YT.PlayerState.PLAYING) {
mixpanel.track(“Video played”, {
“youtubeID”: youtubeID,
“postID”: postID

});
}
if (event.data ==YT.PlayerState.ENDED || event.data==0) {
mixpanel.track(“Video ended”, {
“youtubeID”: youtubeID,
“postID”: postID
});
}
}

var player;
function onYouTubePlayerAPIReady() {
player = new YT.Player(‘player’,
{
videoId: youtubeID,
events: {‘onStateChange’: onPlayerStateChange}
});
}

mixpanel.track(“Post viewed”, {
“id”: postID
});

A* Interview #9: C# and ECMA Committee Alum, Eric Lippert

Items mentioned in the interview:

Eric’s blog: Fabulous Adventures in Coding

Eric’s current company Coverity

The Inform7 programming language

The book “Writing Solid Code”

The Joel Spolsky “12 Steps to Better Code” checklist

/* change only these */
var youtubeID = “WYWLU6wyfvM”;
var postID = “Eric Lippert”;
/* change only these */

// DON’T CHANGE BELOW
$(“.video”).html(“

“);
var tag = document.createElement(‘script’);
tag.src = “http://www.youtube.com/player_api”;
var firstScriptTag = document.getElementsByTagName(‘script’)[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

function onPlayerStateChange(event) {
if (event.data ==YT.PlayerState.PLAYING) {
mixpanel.track(“Video played”, {
“youtubeID”: youtubeID,
“postID”: postID

});
}
if (event.data ==YT.PlayerState.ENDED || event.data==0) {
mixpanel.track(“Video ended”, {
“youtubeID”: youtubeID,
“postID”: postID
});
}
}

var player;
function onYouTubePlayerAPIReady() {
player = new YT.Player(‘player’,
{
videoId: youtubeID,
events: {‘onStateChange’: onPlayerStateChange}
});
}

mixpanel.track(“Post viewed”, {
“id”: postID
});