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
});
The Mountain Goats go a lot of places.
The Books Behind Me During the A* Interviews
Since I was asked on Twitter. It should be noted that that shelf is where I keep my queue of books I have purchased but not yet read.
Pro Django – Alchin
Ready Player One – Ernest Cline
Cracking the Coding Interview – Laakmann, McDowell
From Counterculture to Cyberculture – Fred Turner
About Face 3, Essentials of Interaction Design – Cooper
Four Hour Body – Tim Ferris
The Paelo Manifesto – John Durant
Permutation City – Greg Egan
Antifragile – Nassim Taleb
The Feynman Lectures on Physics, Vol 1 – Richard Feynman
Surfaces and Essenceses – Hofsteadter
The Philosophy of Symbolic Forms – Cassirer
The Elements of Typographic Style – Bringhurst
Universal Principles of Design – Lidwell
A Tale of Two Cities – Dickens
The Success Equation – Maubousin
In the Heart of the Sea – Philbrick
Masters of Doom – Kushner
Coders at Work – Seibel
Customers Included – Hurst and Terry
Godel, Escher, Bach – Hofstadter
Futility – Gerhardie
The Frogs -Aristophanes
Den of Thieves – Stewart
Modernism – Peter Gay
Dithyrambs of Dionysus – Nietzsche
The Last Tycoon – Fitzgerald
Essays in Experimental Logic – Dewey
The Magic Mountain -Mann
Speech and Language Processing – Jurafsky, Martin
Database Management Systems – Gehrke
Semantic Web for the Working ontologist – Allemang, Hendler
The Entrepreneur’s Guide to Business Law – Danchy
Much obliged to any commenter who’d like to provide the Amazon links.
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
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:
Read some reasons why Jon Skeet is the Chuck Norris of coding
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
});