defn Episode 20

I was on the Defn Podcast. We talked about Clojure, testing, and PHP. Here's an audio file that you can listen:

Defn Podcast Episode 20


[background music]

Ray McDermott: Yes, here we go. Show number fucking 20.

Eric Normand: Yay.

Ray: I shall start again because maybe "fucking" shouldn't be the first word we say.

Eric: Put the f-bomb in there.


Ray: Welcome to show number 20. Hello, and we have Mr. Eric Normand over in the US of A, I believe.

Eric: Hello, hello, yes in New Orleans.

Ray: Coming from Trumpsylvania.


Ray: We won't go there, today.

Eric: I guess I could just pull a Brexit joke, or something.

Ray: So, Ray in Belgium. Vijay, you're not in Holland are you, actually?

Vijay Kiran: No. I'm not in Holland, I'm in Germany. I'm in Munich for the rest of the week. I just landed today, so I'll be here for the rest of the week. This is the first time that Defn, half of it, is on the road. Pretty cool.

Ray: That's awesome.

Vijay: I'm at a nice Airbnb with a lot of books. It's going to be fun.

Ray: Last week, we started with off with the weather. We could go there again, because that's always a great subject. I figured, just to try a different tack, I thought I'd recount something that I did today that was just really interesting.

It turns out I needed to move some compost from a compost box near my house to a composting site away from my house.


Vijay: We started from weather and now..

Ray: It was really an awesome job. [laughs]

Vijay: We thought the weather discussion was shit and this is now literal shit. This is proper...

Ray: It's literal shit.

Vijay: Awesome. I don't think we can go below this in terms of building crap.

Eric: Don't challenge yourselves too hard, because you're going to...


Vijay: I think we have plenty of stuff. We can talk about curling. We can talk about Scala. We can talk about a lot of things that can bore people out, but anyway...

Eric: Java. Java classes and type hierarchy.

Vijay: Exactly.

Ray: You're trying to tell me that composting is not interesting, just to be clear? [laughs]

Vijay: Whatever works for you.

Eric: Was it warm composting or was it some other kind of compost?

Ray: Just natural, vegetable and papers and stuff like that. Organic compost.

Eric: Organic. Do you throw your coffee grinds in there?

Ray: Oh yeah. Absolutely.

Eric: That's the good stuff.

Ray: See, you're your getting in there.

Vijay: This is the best podcast, ever.

Ray: In Belgium, the communes give regular training courses on how to do composting.

Eric: Nice.

Ray: This is what a great country this is.

Vijay: Yeah.

Eric: How to avoid the rats coming into your compost?

Ray: Well, you never put meat in there, or anything cooked.

Eric: Oh, nothing cooked, because the rats like their food cooked. Is that why?

Ray: Yeah.

Eric: OK.

Ray: I saw that on a film actually.

Eric: Was it a Belgium film?

Vijay: What , did they give you the videos and stuff, or...

Ray: It was called "Ratatouille."


Eric: Aw, man.

Ray: Boom. OK, let's move on.

Vijay: OK. Let's move to less boring stuff now.

Ray: This wasn't as funny the second time around. OK, it doesn't matter.


Ray: Open parenthesis, Eric, a warm welcome.

Eric: Thank you. Thank you.

Vijay: Welcome to Defn, episode number 20. Eric, please introduce yourself and then tell us what exciting things you've been working on so far in the past, in the future, and present.

Eric: So, I'm Eric Normand...

Ray: ...Shitload of stuff to do with Eric Normand.

Eric: Yes. I live in New Orleans. I'm a functi onal programmer. My current language of choice, right now, is Clojure, and...

Ray: Can I just rewind a second, Eric?

Eric: Yeah.

Ray: It's off topic, but what the hell. New Orleans. That was Hurricane Katrina?

Eric: That's correct. Yeah.

Ray: Before we go into the whole Clojure, functional programming stuff, I remember watching a program, a T.V. series about New Orleans after the Katrina...From the guys that did "The Wire." I can't remember what was called now...

Eric: Treme?

Ray: Treme. Yeah. Awesome, awesome series. One of the best series I've watched. What was your experience like, of that situation?

Eric: Of Katrina?

Ray: Yeah. And the recovery and everything.

Eric: I'm actually kind of glad you brought it up, because there's a lot of stuff that people don't know about. People often are like, "Why is there even a city there? It's underwater. It's under sea level."

Well, it turns out that one of the main things that was a cause...There were a lot of causes for what happened, but one of the things was that a wall broke, a retaining wall in one of the canals.

This canal was built to service the river and the lake, and have some kind of way between them. But the wall hadn't been repaired, and there were some repairs that were supposed to go in before Katrina was supposed to happen.

In the budget, it was vetoed, a line-item veto by George W. Bush. He redirected the funds to the war. They repaired it with some concrete. That's what they were going to do, pour new concrete. It caused billions of dollars of damage, because he didn't want to pay for some concrete.

We're kind of pissed about that. It's something that doesn't get talked about outside of New Orleans. There's all these things that were so avoidable. That canal was there to help ship goods to the rest of the country, so it was kind of a sacrifice we made for the economic benefit of the rest of the country. Then we weren't supported when it needed a little bit of maintenance.

Ray: There were shocking pictures coming from the aftermath, when people were in a horrible, horrible situation. How were you personally affected by it?

Eric: I was actually not in town, just by chance. I was in the Peace Corps. I was in West Africa when it happened. I didn't know it was going to happen. I would have been home. I just missed it, and no reason to go back afterwards, so I just stayed in West Africa until my Peace Corps tour was over.

Ray: Did you move to New Orleans afterwards, then? I'm confused.

Eric: No, I'm from here. I grew up here.

Ray: You're family was affected, then?

Eric: That's right. My family had to leave, I think for a few months. Then eventually, they started opening up the neighborhoods one by one, as they could bring power and water back to them. Luckily, their house was closer to the river, so it didn't flood, because it's like a bowl. The closer you are to the river, the higher up you are.

Ray: Yeah, of course.

Eric: They were closer to the river. Their house did not flood, so they could move back pretty quickly. There are still abandoned houses around.

Ray: Sure. The only thing about Tremé I always remember was the music. The soul of the city was all about the music, the jazz, and that kind of stuff. Do you enjoy a bit of that in the evening, while you're in between Functional Programming?

Eric: Yeah. What's really nice about New Orleans is, you hear people, like they're in a school band or something, and they're practicing their trumpet on the way home from school. They're just walking back home and practicing. It's a very musical city. It's everywhere. There's neighborhood bands and stuff. It's good.

Ray: All right, cool.


Vijay: Let's talk about the programming stuff. When did you start programming, and how did you get into programming?

Eric: Wow, programming. I've got to go back in time. I was a kid...

Ray: Don't go about that far back. We're not interested...


Eric: I was a kid, and I think I saw something on Mr. Wizard, if you know that show.

Ray: No idea.

Eric: It was a science show for kids, on a kid's TV channel, and he talked about programming on there. It was in Logo, and somehow I knew that's the kind of thing I wanted to do, come up with some symbolic description of a different world.

Vijay: Yeah. Maybe let me scope it down. When did you start getting paid for writing code?

Eric: Ah, OK.

Ray: Yeah, when did it stop being fun?


Vijay: Exactly.

Eric: I guess in college is when I...Well, high school. End of high school, beginning of college, I started getting paid. I was doing, let's see, some web programming in C.

Vijay: Oh, wow!

Ray: Oh my God!

Eric: That was '98 or '99. I did some Visual Basic. That was still a thing, Windows 95, the booter. That was my job.

Ray: It's a sad story, isn't it?


Eric: People don't know how good they have it now that there's remote jobs out at San Francisco that they can just get while they're in college.

Vijay: I think doing VB and all of the things...If you know "Calvin and Hobbes," the comic, it builds character. Every time Calvin doesn't like something, his dad says, "It builds character." Of course, working with VB builds character. [laughs]

Eric: You know what? VB was not that bad. I mean, in a lot of ways it was way easier than a Web stack.

Vijay: Yeah, that's true in those days especially...

Eric: All the languages you have to learn...You just draw a button. You literally would drag a rectangle out and it would turn into a button. You could just say, "This what happens when you click it."

Vijay: Exactly. [laughs] When did you get into function programming?

Ray: There are still people programming in shit like PHP, you know.

Eric: I think PHP is a regression from VB.

Vijay: [laughs]

Ray: That's what I mean. I said to my kids that people think that poverty is over, or illness is over, but actually there's a shitload of it in the world today. It's just like...

Eric: You know what's...

Ray: We're living in a future with Clojure but there's just a lot people suffering with PHP out there. You have to feel sorry for them a little bit.

Eric: There is a book I read recently called, "Refactoring to Collections." It is functional programming in PHP. Apparently with PHP 7, they've sped up the garbage collector and the functional calls...Believe it or not, functional calls have been pretty slow in PHP. There's enough speed up in the function calls, and the collections, and the garbage collector that they can do...

I think of it more like underscore style functional programming, where you can write your own map function, and your own filter function, and a for each instead of doing a for loop. It was actually a pretty good book, in terms of...

If you're a PHP programmer and you want to make your life easier, here's some stuff from the functional world that you can just take and make your own. I'm actually happy to see that. Functional programming is going to have a big influence for us as a software industry, to get to the next level.

Ray: Didn't Facebook take PHP and make this hack language?

Eric: Yeah.

Ray: It was a bit more compiled, a little bit functional as well?

Eric: Right. I'm not totally 100 percent of the timeline, but I believe they tried to compile PHP. They did as much statically as they could. That was their strategy for making it faster. Then eventually, they gave up on that and they decided to make just the VM faster.

It's still dynamic and it's still interpreted, but the VM is way...Better garbage collector, faster function calls, stuff like that.

Ray: Isn't it the old joke then [laughs] people are, "Yeah, PHP is a piece of crap. Yeah. It doesn't scale." Facebook...

Eric: Exactly.

Ray: ...Biggest website in the entire world ever which is...

Eric: Exactly. I mean...

Ray: You know what it's like. [laughs] Oh my God!

  • *Eric:** I mean, if you look at it as an engineering decision --- a business decision maybe is better the way to put it --- it is really solid. It does what it says on the box. It scales in an interesting way because it has this...One request is one process model. You don't have to worry about concurrency. It's just one process.

If you want to scale, you can just call your own HTTP end points back with a local loop back network or whatever. You're scaling out like that. It's basically like HTML with some code in it. You just hit refresh on your browser and you see the new thing when you change your code. All those things are good.

Ray: I like VB. It's got a very slippery entrance, hasn't it? It's very easy. The entry into the pool is quite straightforward.

Eric: Exactly. Any HTML file is valid PHP. [laughs]

Vijay: Yeah. Yeah. Well, as long as you put the tag on the top, I think. PHP is good.

Ray: [laughs] Screw Clojure. Let's just talk about PHP from now on. [laughs]

Vijay: I think now we have cross the boarding to the next level now.

Eric: [laughs]

Vijay: Talking about PHP on a Clojure podcast. Functional programming, when did you get into functional programming and how?

Eric: It was in college. I want to write a game. The thing about programming games that I always found annoying was that everything was in C and C++. Just the power you have there is very low. I want to be thinking about the monsters I'm creating. Instead, I'm like, "How do I make sure I can free this memory when it's done."

One idea I had was, "Why don't I make my own language?" That would let me just say, "I want a monster," and then it will run around and shoot people, right?

Vijay: Yeah.

Eric: I started looking at that and I came across an interview with Richard Stallman, who said something like, "WISP is so easy. You can make one in a weekend." I took him up on that challenge, because I thought, "If I make a Lisp in C, I could just call out any C functions I want." I made one. I made a little Lisp and it actually was more fun than actually getting the game thing working.

Vijay: [laughs]

Eric: I just kept working on it. I made a GC. I made a HashMap implementation. I had a little Lisp interpreter.

Vijay: Nice.

Eric: Yeah. It was a great education. I'd never written a language before and that was cool.

Vijay: Yeah. Also building Lisp is fairly less amount of work compared to building other languages, because...

Eric: You don't need a parser.

Vijay: Exactly.

Eric: It's just simple. It's so simple.

Vijay: Yeah. Lisp is your entry to the functional programming language or functional programming?

Eric: That's right.

Vijay: OK. What is your commercial experience? I mean, getting paid for this stuff?

Eric: My first actual job in functional programming was in Haskell. I was actually on your side of the pond, over in Europe. I was travelling around. I was tired of software.

This was back in 2009. There's just wasn't a lot here in New Orleans. I was just tired of it, so I was considering another option. I also wanted to clear my head. I was, "I'm going around the world. Sell all my stuff."

My girlfriend came with me. We were in Europe working at a hostel. Someone had a startup, and it turns out that he was...The CTO had chosen Haskell. I was, "OK, I'm interested, but I have to be able to travel." He said, "Oh, yeah, no problem."

I installed Haskell in my laptop and started hacking on their code. Haskell is quite a lot to learn, but I'm glad I did. I was already into Clojure at that point, but I was not getting paid to do it.

Vijay: From Clojure's side, what is your experience so far with Clojure? You started with Clojure, and then Clojure started almost?

Eric: Yeah, it was in 2008 when I got into Clojure. I was very early.

Vijay: Very much, like the first version of it.

Eric: I remember at one point. It all came out.

Ray: You could keep up with IRC. [laughs]

**Eric: ** See, I'm not a big chatter. I'm not a very super-connected person, wired. I'm not texting people all the time like I see some people. I'll try to do IRC for like a week, and then I'm, "Oh, I forgot."

It'll be two months, and then I'm, "Oh, I forgot to turn on IRC today." Or in the last two months, "When was the last time I were..." Of course, people are trying to get in touch me and stuff. [laughs] "Oh, sorry. I didn't know."

Anyway, that was 2008. I went to a conference on Lisp. It was the 50th anniversary of Lisp in 2008, if you'd count from the first paper that was published in 1958. I went to this conference that was celebrating the birthday of Lisp.

To be honest, it was quite boring. It was a lot of old people that were celebrating their accomplishments that happened 30 years before. Except, there was Ritiki, and he gave a talk. There was a panel on the future of Lisp. He presented Clojure at this thing, at this conference, and then the future of Lisp panel.

He basically said something like, "We need to start over. You can't go from common Lisp and bring it into the future. We just need to make notes of all the lessons that we need to bring over, throw the code away, and start over."

I was skeptical, but someone in the audience said, "Are you into Clojure?" I was, "No. I haven't done it." He's like, "You should try it." I went home and I tried it, and I haven't looked back. There you go.

Ray: What did you think about all these other guys doing...Definitely, Common Lisp was a thing. It still is, but there was also Scheme and...

Vijay: Racket.

Ray: ...All those kinds of things [indecipherable 21:55] . It eventually became Racket. Do you follow those offshoots from the Lisp world as well?

Eric: Not really. I know that the Common Lisp at the time was the biggest hope, because it was a standard that had a lot of commercial support, at least in the '80s and '90s when it was...

Scheme is great, but it's came out of an educational environment. It's really stayed simple so that it's easy to teach, and it has been one of its strong point is that it's great for teaching functional programming.

Common Lisp, just using it, you've felt like this is a professional environment. It has its warts, but it is a well-engineered thing. That was one of the reasons why I was skeptical, especially, "Oh, JVM." You're just taking on all of this baggage, but you take on some baggage for a huge benefit.

One person in the audience...This is back in 2008. I don't know what the state of the Common Lisp world is, but he's was, "I've been trying to start a startup with Common Lisp. Every time I'm this close to making a sale to a big company for my software, they're like, 'Oh, can you do SOAP?' I'm, 'Oh, no. You can't do SOAP.'" Just being on the JVM, "Yeah, we can do SOAP. We can do it."

Vijay: The ecosystem that makes Clojure way more valuable, compared to the other ones.

Eric: Right, just being able to hook into money, basically, like businesses that are using this stuff. Whether it's a good technology or not, the fact that a company is using it, and is willing to pay money, maybe more of it to a better technology, [laughs] that's a big thing. It's huge.

Vijay: Did you do any Clojure commercial projects back then? How did your professional Clojure evolve?

Eric: After working at this Haskell startup, I was looking for something more local, because they were based in Sweden, and there was just a big time difference. There was a pay difference too. I was getting paid how a Swede gets paid, and it's just different.

Someone approached me with a startup here in New Orleans, and he wanted to do it in Clojure. I said, "Yes," and then eventually it happen. I left my old job, and went to that one.

Vijay: You're also producing a lot of screen-casts and Colossus, right?

Eric: Yeah.

Vijay: LispCast and then of course the functional TV. Can you tell a bit about LispCast and these things? What are you trying to do there, and how is it going so far?

Eric: What I'm I trying to do? The big vision is I want something like 100,000 people to do functional programming. The language itself, I'm not that interested in, because I believe that functional programming will outlive any particular language.

Of course, in the moment, you have to choose a language. It has to be practical. I'm all in, right now, on Clojure. I'm teaching Clojure as a transition language, so you can go from a career in software engineering to a career in functional software engineering.

That's my main focus right now, is to help people who want to make the leap, but they've got a family and a lot of obligations. They don't have time to just dig in, and learn it. They've got to keep their current job going, and they want to transition to functional program. That's where I'm focused right now.

Ray: Well, didn't you hear the other day that Clojure programmers are the best-paid programmers in the world?

Eric: Yes, I did see that.

Ray: They should be knocking your doors down.

Eric: They did do that. This was a "Stack Overflow..."

Ray: [laughs] I really don't think it's the truth, but you know...


Eric: It's a Stack Overflow survey, to name the source. They asked programmers all over the world what their salaries were, and what technology they were using primarily. Yeah, Clojure came up to the top, in worldwide. I don't know what it was in the US, because most of their people are in the US.


Vijay: It should be in the US, because most of the Clojure jobs are driven by the US market anyway, less and less if you go the East.

Eric: I think that's what it is. Right, the US is dominating that segment there.

Vijay: It's pretty much skewed. What are you working on these days? Is the LispCast and everything your full-time stuff?

Eric: Yep, I'm working on it full-time. I'm making videos and courses. It's growing. That's as good as I can hope for right now. It is not quite where I want it to be, but plan B is just I get a job in Clojure. There are plenty of jobs. I'm seeing how far I can take it.

Vijay: What are your plans for this one then, for LispCast and these ones? Do you want to keep touching up on different topics?

Eric: Yeah, my plan is to have a complete suite of Clojure courses like that a beginner could just jump in and go, and then have enough for them...Once they get a job, they still want to learn more. They're still a subscribed.

I should say that it's a subscription offering. You can buy the courses individually, at least some of them. I'm trying to get them all on there, because apparently, some companies don't like subscriptions. They'd rather pay for it, a one-off thing.

Ray: It's an interesting business. What are the things that you're trying to suggest to the world that functional programming is? Why is it a superior approach to, let's say, either procedural programming, or object-oriented programming? Where's the battle? Where's the hearts and minds that where they're currently are, and how do you...

This is a very long question, rumbling. I'll ask you one question first. What do you think the selling points, the major pinpoints are that people should be hearing, and feeling that motivates them to move to a functional programming model?

Eric: That is a really hard question. It's a good question, and maybe we could hash this out, because I have trouble with this all the time.

Ray: Screw it. We've got time. We're only half an hour in. We've got plenty of time. If we can't nail this, where else are we going to find out the answer to these things?

Eric: Let's do it.

Ray: I'm up for it. [laughs]

Eric: The place where I start now, because I've tried...

Ray: Has anyone else thought about this, by the way? This is all new, isn't it? Yeah, let's make it off. [laughs] We've got Eric. Eric, go on.

Eric: I don't want to sell something that doesn't make sense. I went through the object-oriented hype cycle back in the '90s. I also went through the XML hype cycle in the early 2000s. I don't want t o sell anything like that.

I do think that there's something to the new multi-core world that were living in where we have to think about concurrency upfront, and stuff like how hard it is in Java to do concurrency, even though it's easier than it was compared to Clojure.

Clojure is a read-me whereas in Java, it is this thick book with all these things to keep in mind, basically like, "Oh, you already did it wrong. What are you going to do now?" There's no path. [laughs]

Ray: Just before you go there though, I've heard that argument about the parallel programming, but if I talk to like executives at company, I'm finding it hard to discover where the Give a Fuck button is because they're just not there. I'm pushing every type of button, but they're just, "Ah, who cares?"

Eric: You have the same problem in every language, every paradigm. Wikipedia, Flickr, Facebook, they're all written in PHP and they're huge. Why is this scaling problem really an issue? Another thing that I try to sell is that it's more power.

Meaning, in each person's hands, you can have a small team do Flickr, for instance, as opposed to the however many thousands of people working in the PHP coal mines there are.


Eric: It's more like Alan Thicke.

Ray: Every problem is tractable, let's say. Every problem is eventually tractable. It's just a question of how much power your tools will give you to work through that problem at a good speed.

Eric: Exactly. I just came back from Clojure West. Great conference, by the way. We can talk about it in a little bit. I was talking to the people who work at Wal-Mart, who do Clojure. There's a nine-person team, and they have several products now. I didn't know that.

One of their main products is something that processes all the receipts from every Wal-Mart store around the world. That's a big, complicated, important system that is nine people. It's that kind of leverage that you would just never imagine doing that in Java. In Java, this is...

Ray: Teams and te ams of people.

Eric: Hundreds of people. It's teams of teams. You have the battalion, then you have the unit, the brigade...I don't even know you divide things up in the army. To be able to say a small team can build and manage it, and add features and fix bugs and stuff, on their own, that's a huge win for business.

Ray: Do you think, though, that in the end, you have to sell it to programmers first and businesses second? Or do you think you could really...Like I say, I think businesses find it hard to really understand what the difference is between Language A and Language B.

You can tell them until your blue in the face. Unless they already come from a pretty technical background, businesses just don't understand.

Eric: I think it's really hard. That's why I was trying to avoid the hype cycle. Back in the '90s, I remember the big thing about object-oriented programming was it was supposed to have so much reuse that, maybe you pay some upfront costs, but then after a while, you're just reusing stuff that already exists.

That just hasn't turned out to be the case with most languages. The reuse happens now in libraries, but those are relatively expensive to develop. They take a lot of time, just calendar time.

Ray: Don't you think there's also an issue with libraries as well? There's a lot of magic sometimes because often they're not libraries, they're frameworks. A lot of the object-oriented ones, especially, even the big data ones that you get in these days. They're still infested with this state and this kind of magic box that you have to comply with.

Eric: You get a lot of benefit, but not what they said. You still have to read a book on Doda time, for instance. To do time for real, you have to become an expert at the calendar and all the crazy stuff in there.


Eric: Some days don't have a midnight. Or some days have two midnights. Don't check if it's midnight. Check if it's equal to the first second of the day and crazy stuff like that. Go ahead.

Vijay: Yo u also have this newsletter, right? That you send out about Clojure and Functional Programming?

Eric: I do. I started that back in 2011, I think. 2012, it must've been, 2012.

Vijay: Almost five years.

Eric: Five years. It used to be called "The Clojure Gazette." It's evolved over time, but right now it's 10 links to stuff I've been reading that week. I curate it and I try to tie it in to bigger trends. I've never said it's news. I call it a newsletter, but it's not like, "This is the 10 top most important things that happened this week."

I like the long term view, like, "This is important in a long trajectory of stuff." I can see where it falls in, and it's made to inspire Clojure programmers. It's not all Clojure. I like to put a little commentary in there about how it fits in.

Vijay: Of course, when I subscribed to your newsletter, obviously [indecipherable 36:12] . I remember I also saw plenty of your videos because I participated in the Clojure Cup.

Eric: Oh cool, right. You won.

Vijay: Yeah. I was second or something and I got access to all of your videos. I downloaded everything and I watched them. It was pretty cool actually. Sorry I didn't pay for it, but I won.


Eric: No. No. No. That's great.

Vijay: OK. Cool.

Eric: Yeah. I sponsored it, so all the winners got a year's subscription or something.

Vijay: Yeah. That was pretty cool. I learned a lot from those videos. Before we transition into the other thing, you were at Clojure West, so we'll talk about Clojure West. The biggest question that probably everybody using Clojure is asking, Emacs or some other shit?


Eric: I think the answer is very clear. Emacs.

Vijay: Yes. Obviously. That said, let's move on to Clojure West.


Eric: Enough said, right?

Vijay: Exactly.

Ray: This is one of the reasons why the functional programming shit is struggling to get adopted.


Ray: ...You got to use this old crappy text biz and it's on so me black-and-white screen. That's the weedy way you have to make it work.

Eric: At Clojure West, someone had a really good point, which was that...It works for VIM too. He can work remotely on anybody's machine, because all he has to do is SSH to some server, and he can load up Emacs. Then you can also tmux and do all sorts of good stuff.

I don't do that. I use Emacs, the GUI. If I'm ever in a terminal and I need to pull up an editor, I'm glad I have Emacs because I know all the key bindings.

Ray: Emacs is not on most machines, is it? It's not on most servers for a fact now.

Eric: Neither is Vim.

Ray: V-I.

Eric: Most servers have V-I, the original, old-school...

Vijay: Why do you even need to get a shell into the server? Because you just use tramp and then just connect to the remote...

Eric: Tramp is not very good on Mac. It's slow enough where it's...

Vijay: Loading the remote files.

Eric: Yeah. You hit Save and then...

Vijay: [laughs] You just need to wait for it.

Eric: I've heard it's much better on other systems.

Vijay: On Linux, it's pretty good, I think. Anyway, let's get back to...Now that the serious question is answered...

Eric: I know that was a joke, right? I'm really glad that there are a lot of good editors now. There's Atom, I've heard a lot of good things.

Ray: The funny thing is, I was at company doing some Clojure last week and there were these eight people there doing Clojure. I was using Cursive. One guy was using Emacs. Another guy was using V-I or Vim. Two other guys were using Sublime Text. It's just like no one gives a shit anymore.

Vijay: Yeah. Of course.

Ray: You can use any text editor, and people will develop their own tests.

Eric: Right. That's very nice.

Ray: That is really awesome actually.

Vijay: I think that the nicest part is the repl integration. As long as your editor basic repl integration, you're done. That's pretty much what your tool chain needs.

Eric: That's right. I'd really sympathize with people who are trying to learn Emacs. I have the same issue with Cursive. I open it up, and I don't know what to do. I don't know what to click.

People are, "Just open the browser." I click on something and they're, "No, that's the navigator! Never open the navigator! That's not the browser!" "Oh, I'm sorry. I'm sorry." It takes 20 minutes to get back to where I was. [laughs]

Vijay: I did try using some other editors, every now and then, obviously. I use even weirder shit. I use Spacemacs with the V-I key bindings. In Emacs, when I'm editing, it's Emacs key bindings. When I'm going through the stuff and I'm moving around, it's V-I [indecipherable 40:23] mode.

I was, "OK, everybody's saying Sublime Text is the shit. I should be using it." I started using it for...Well, not using it, but trying it out for a couple of weeks. You have these things burned into your fingers forever, and then that's very difficult to get rid of. I'm going to give it a try again and then see, what to learn and what am I missing. Anyway, editors are...

Ray: I think you're right, Eric. I think the main thing is that you shouldn't be worried about the tooling. As long as the tooling is good, like you see a feature. You got a good repl integration. You can do your editing in your own style, then let's discuss the actual problems in the languages that you use and not these other tools.

Eric: Exactly.

Vijay: Also, you're interested in building software, not interested in always thinking about editor. Once that phase is gone, you're focused on your code and then you're just trying to build stuff, not really worried about the editor.

Ray: Maybe, Eric has the [indecipherable 21:43] because you've written your own programming language. Then, the obvious thing is to write your own editor. Storm and wear. Storm and wear.


Eric: Right. I could write Emacs in my own Lisp.

Ray: Did you do that?

Eric: No, I did not get that far.


Vijay: There is still effort, right, to do the Emacs in Clojure. I don't know how far it is now. Maybe it was there. Anyway, let's not digress that much. Clojure West, how was it? Give us some impression firsthand.

Eric: It was great. It was great. I just got back yesterday. I think I saw one and a half talks. I gave a talk. I was there too. I'm more of a hall boy, try-it guy. The talks come out so fast. I actually also enjoy the talks more when I watch them on YouTube. I can watch them, I don't know. It's like TiVO versus watching live TV.

Vijay: [laughs] You're in control.

Eric: I can watch it on my own time. Talking to people, I mean, Clojure is growing. There were so many sponsors, companies basically are hiring. They had a table there at the conference. They're all looking to grow, looking to just meet everybody in the Clojure community. It's great. I think I really am going to see some good growth in the next few years because of this.

Ray: Sorry. I think we're looking forward to hockey puck growth, aren't we?

Eric: Yes. Yes. Hockey puck growth? All the way back around? Like circular growth?

Vijay: Is it?

Ray: We're going to where the puck is moving...

Vijay: Wait. Is it hockey puck or hockey stick? I thought it was hockey stick.

Eric: Hockey stick. Hockey stick.

Ray: That was the joke from Karen last week. That was the...Come on.


Vijay: It's round.


Vijay: It's fast.

Ray: It's fast and it's round. Going really fast.


Ray: You hit that hockey puck, and that guy goes.

Vijay: Exactly.


Ray: I like that better than hockey stick.

Eric: It's on a frictionless surface. It just doesn't stop.

Ray: Exactly. Once it gets momentum, there's no stopping the shit. I love it. I'm preferring hockey puck growth all the way.


Vijay: By the way, speaking of conferences, I don't know, I was talking about this on previous episode as well, that we ran Dutch Clojure Day here on March 25th. It was phenomenal. It was really nice. [claps] We really enjoyed it.

Eric: Awesome.

Ray: It was awesome. We had a lot of fun.

Vijay: We had a lot of fun. Talks were really nice. The venue was great. There were plenty of people, full house. A lot of discussions, I think.

Eric: Were the talks recorded?

Vijay: Yeah. They were recorded. We'll be putting them online pretty soon. As soon as we...

Ray: Big names, as well. Big names. James Reeves.

Vijay: Yeah. James Reeves.

Eric: Oh cool.

Vijay: Yeah. We got mostly the European speakers. Of course, we got one speaker all the way from the US as well, from MojoTech, I think. It was very nice at atmosphere.

Eric: I'm jealous, because there are more Clojure conferences in Europe than in the US.

Vijay: Is it?

Eric: Yeah. The US just has two.

Ray: I guess, yeah. London. Berlin. Yeah.

Eric: You all have a lot. You have the...

Ray: Sweden or Norway...

Vijay: In the US, you have Conj and West.

Eric: That's right. They're both Cognitect. There is an open invitation by the top of Cognitect, guys at the top, they say please do more conferences. We don't want a monopoly on them.

Vijay: Maybe we should take Clojure Days to US. That would be fun.

Eric: Yeah. [laughs]

Vijay: The thing with Clojure Days is that we were insisting on making it free and keeping it free and completely community driven. It was a challenge last year. I think we were negative 60 euros or 10 euros or something.

Eric: Who had to shell that out?

Vijay: One of us. This year, it was slightly better. Not slightly better, really green. We're also thinking of writing out how we organized it and publishing everything, including the finances and everything. What did we do with what and how it went.

If other people want to organize this kind of conference, it will be a bit more helpful for the other guys as well. Other folks.

Eric: That would be great.

Vijay: That is one of the things t hat we are thinking of.

Ray: You said, Vijay, that the sponsorship, or was it Carlos, said that this function was much easier this time around?


Vijay: Yeah. This time people came to us selling...They sent us email saying, hey Vijay, or whatever, we want to sponsor Clojure Days. Last year, we were there as attendees. We really like it. We want to sponsor it. There were other company as well.

The couple of companies we had this year, before they left, they told me, "Next time we want to sponsor. Keep us in your mind." That was really, really nice. It's really a community thing. We want to help other people to come here and learn about Clojure. Anyway, we'll publish a blog post about those details and other things.

Speaking of conferences, first I want to ask you, how did your talk go? You were talking about test.check, right, at the conference?

Eric: That's right. test.check. It went well. I, of course, felt like I missed so many important points.

Vijay: It's always with the...

Eric: Yeah. One of the things is...

Ray: Did you not write it down beforehand, Eric? Was that not one of those things you...

Eric: I'm not reading it.


Eric: I do try to...


Eric: No. The thing I wanted to complain a little about is my own problem. Every time I rehearsed it, I was a little over. I stopped making slides and just revised the slides I had at that point. Then I prepared a little apology for not getting more. I did the apology in the talk, live. It was at the end.


Eric: Then I look down at the clock and there are six minutes left. "Oh no. How did that happen?" This is my second real talk. I have to get better at that. I have to get better at that.

Ray: The test.check thing, because that's interesting these days with spec, isn't it? Because obviously, that's...

Eric: Tightly integrated.

Ray: That whole thing is becoming very front and center of the selling story that's about Clojure. I guess, test.check is a line Haskell and all these other functional programming languages as well. It's a general kind of meme, let's say, in the functional programming world.

What do you think the reception is for that kind of testing in the outside world? I still feel like people are very much driven into unit testing, that they're still in that mode. Do you think there's a reception there for this kind of stuff?

Eric: There is a reception. The biggest thing and one of the reasons I did this talk was people don't know where to start. There's a lot of false starts, let's put it that way. People try it and they're like, "I don't know what properties to do." That was what I was trying to get at in my talk.

The properties that you want to do, they can be the same properties as you do with your unit tests, with your example-based tests, but you can generate random data. Then you can start taking it further and further and testing the whole system and getting a cohesive view of your whole system and testing it that way.

Vijay: You also talked about concurrent system testing, right? It's not just about testing, using test.check.

Eric: Right.

Vijay: Of course, I will watch the talk online, but I'm curious about what is the fundamental difference or what are the challenges testing the concurrent systems using test.check?

Eric: You can test something sequentially by reifying the operations. You generate operations and run them on your system that you're testing. Then you also run it on a model that has the properties that you're interested in. Then you compare them at the end.

To make it concurrent, you can just run those operations in different threads. You make two threads' worth of operations and run those in different threads. The challenges are things like making sure all the threads start at the same time and waiting for them all to finish. Now if you're trying to suss out race conditions because that's concurrent problem, right?

Vijay: Yeah.

Eric: What you want to do is run it multiple times, run the same test multiple times to try to find that race condition in there, and make it more repeatable. Those are the main things. Those are the main challenges of this.

Vijay: I remember watching a talk from one of the Quickcheck creators about, especially, the difficulties in testing the concurrent systems with this kind of methodology.

Eric: With timing and stuff?

Vijay: Yeah, with timing and, of course, it's very difficult to predict.

Eric: Right. Timing does get into it. I think you're talking about John Hughes.

Vijay: Yeah. John Hughes' talk.

Eric: He invented generative testing.

Vijay: Exactly.

Eric: He calls it property-based testing. He gives a lot of talks about how to actually do it. One of the things that he tested was a chat server. It was in Erlang. You have this thing where someone logs out, and the message that they have logged out takes time to get to the server that records that he's actually logged out.

There's a time between when the user logged out, and when it's actually registered that he's logged out, that he's not actually logged out in any real sense. If you were writing a test, it's, "OK, log the user out, then check, did he get this? Send him a message and check if he got it."

It could happen faster than that message got that he was logged out. You have to actually model that in your model. All of that knowledge that things take time has to go into your model.

The way he did it was he made up different predicates, then just logged in or logged out. He made up stuff like could be logged out, meaning we sent the log down message, but we don't know if it's gotten there yet.

That period is empirically determined to be 100 milliseconds. There is a time after you send the message where he might not actually be logged out yet. It's actually doable pretty simply.

Vijay: OK, cool stuff. I think of course I'll take a look at...I will watch the talk and I will learn couple of thing because I've never done any...

Eric: I wish I could get into more of that stuff. That was the stuff I had to apologize for that I couldn't get into.

Vijay: Are you planning to make an episode about it on your course?

Eric: I do want to make a course, especially now that it has spec integration. I've held off on making a spec course because I've been burned in the past with Alpha software. You spend all this time on the course and then...

Vijay: Yeah, the changes...That's true.

Ray: Its Alpha 14 now.

Vijay: 19, I think.

Ray: No, it's 14, I think. Oh 19, wow, OK. But it's a very high number of alphas so definitely, things are evolving.

Eric: Right. The API is still considered Alpha. It's not like they're just fixing bugs in that Alpha. They're actually changing stuff.

Ray: We spoke to Alex...What, September or something, last year? I think they said that it would be out like this year, but now we're in March. April now in fact.

Vijay: It's still this year.


Eric: December 31.

Vijay: Exactly.

Ray: It's really. This is taking a long time to settle down, isn't it?

Eric: Yeah, for sure.

Ray: I think they're of the opinion that they won't get a second chance to do it, so better take a bit more time to cook it properly.

Eric: Right. Yeah, it's true. They want it to be part of Clojure itself. Yeah, that's enough talking about that.

Vijay: Staying on the Clojure thing, apart from writing Clojure code and being involved in Clojure for a long time, you saw how the language is evolving and everything. You're very familiar with all the features of Clojure because not only you're working on it, but you're also teaching. That means you have a higher level of understanding.

What are your favorite, maybe one or two favorite, features of Clojure? You already did Common Lisp a lot and Lisp World. What would be the interesting thing?

Ray: This is the new Favorite Features section?

Eric: The Favorite Features.


Ray: [imitates background music]

Vijay: That is a new section in this podcast now.

Ray: "Favorite Features of Clojure" section.


Eric: Favorite features. Well, I really like the literal data structures and I like that they're immutable. I guess that's one feature. Common Lisp just had one literal data structure, which was the list. You had to quote it if you wanted to use it, which meant unquoting stuff inside. It's not the best experience.


Eric: Because you have vectors that everything inside gets evaluated, you can actually do that much more easily.

The fact that they're immutable just makes you divide up your problem better. Makes you think about how...Or I guess you don't even have to think about how it's going to be used in other threads and worrying about who should be able to see this? Do I have to make a copy? Things like that.

Vijay: OK, cool. Just before the show we were talking and then you said there's some interesting things that you're working on and you said you're going to announce it now or at least pre-announce it or...

Eric: Right. OK, I'll pre-announce it.

Vijay: Yay!


Eric: At Clojure/West, I used a lot of the talking to people, the conversations, to figure out whether there was enough interest in a Clojure conference in New Orleans.

Vijay: Sweet.

Eric: Right. When it should be, and what it should be about, and how it should be structured...

Vijay: It's going to called Clojure Jazz or something, I don't know.

Ray: Oh man, that would be so good.



Vijay: That would be cool.

Eric: I haven't come up with a name yet. I like the hallway track and a lot of people I talk to say that it's their favorite part, and that's why they go. I just want to cut out the pretense of having the talks at all and just do hallway track.

Ray: [laughs]

Eric: Actually, this conversational format might be the best way to explain this. There's a system of conference organization called Open Space Technologies. Basically, you set a theme for the conference. At the beginning of the conference, the first thing you do is you all sit in a circle facing in, and someone opens the space.

Meaning, they say, "Who has an issue they want to talk about?" You write it on a piece of paper. You stand up. You say it to the group and then you go put it on a board so it doesn't get lost. Then after everyone's aired all of their issues, then you divide up or you group up, and start addressing those issues.

I feel it solves a lot of the problems with the hallway track. I mean, I could see a lot of people who were just shy, who were just, "I wish I were talking to someone. I like it, but I'm too afraid to introduce myself or I'm maybe tired," or, "I just don't have that in me anymore." I bet there's people who are sitting in the talks who wish they weren't...

Ray: [laughs]

Eric: ...Distracted by the talk and wanted to go talk to people. This is sad, but some of the sponsors who paid thousands of dollars to sponsor, they were just sitting behind the table waiting for someone to come up to them. Why aren't they talking to people? There are people in the room. Just walk up to them.

I want to remove all of that, just say, "Look, there's stuff to talk about. You heard what that person said they want to talk about. You know where they are. They're in that corner talking about it. You don't have to say anything. Just go sit in that group and participate."

Vijay: Cool. I don't know if it's still running, because I remember I think in 2000 or something, somewhere when I was still in India, there was this bar camps going on. Bar camps were pretty much like that. You go there, there is a board, and then you just propose what you're going to talk about or the issue on a sticky, and then just put it there, and then people will vote on it.

Then whoever gets at least three or four votes, they get a room and then they talk about it. Bar camp was one of those things. I was part of at least two or three back in Bangalore in India, a long time ago. It sounds a similar idea.

Eric: It's very similar.

Vijay: Yeah, yeah. It's pretty cool.

Eric: I've been to a couple of bar camps and I'm sure they're all different.

Vijay: Yeah. Yeah. Yeah. Of course.

Eric: It's just their nature. The ones I've been to, people prepare slides and stuff beforehand, and they arrived early so that they can get on the board at the spot that they want. That is not what I want. I don't want it to be talks that no one curated. That's the opposite of what I want. I want something where...

The theme of the conference is going to be, Clojure at Work. The idea is to bring in the employers, the employees, and people who want to work in Clojure, and have them actually talk about the issues they're having.

It might be tooling, it might be hiring, it might be finding a job, it might be training, and have them say, "We've tried to hire someone and we don't know where to look. We've hired someone before and they were a bad fit. They didn't actually know Clojure."

Just bring up these issues and have the employers talk to each other. Have them come up with something more than just talking. Halfway through the first hour, they're like, "We need to make a guide or we need to have an association where we..." They just start working on it. That's my main thing. Less talk. It's not chit-chat. It's not like, "Oh, how did you like the weather today?"

Vijay: [laughs]

Eric: "How was the party last night?" [laughs]

Ray: What's wrong with that?


Eric: "Nice breakfast that they have at this conference." I want it to be much more productive. The big challenge that I've heard that I will face --- and I believe it. I think that this is a big thing --- is that a lot of people get their work to pay to go to the conference, because they can point to a speaker and say, "Look, they're talking about..."

Vijay: They're coming in...Yeah.

Eric: "...Datomic and we're doing Datomic. Send me here and I'll learn what I need to learn."

Vijay: Yeah. Yeah. Yeah. That's true.

Eric: I need to come up with some other way of saying, "You will learn something that you can sell to your boss."

Vijay: Yeah. Yeah. Maybe it could be a combination, but anyway, it sounds really nice. I hope it solidifies and then you get the right way to go about it.

Eric: I got a lot of good feedback. A lot of people, "Oh, you're doing one? I'm going. Tell me when it is."

Vijay: Perfect. You already have a...

Eric: That's a good sign.

Ray: It's really good. Sometimes you start these things off relatively small. If you can get 50 people and then...Sometimes these things do scale, sometimes they don't scale. Maybe it's a better format just to have, like you say, 20, 30, 40, 50 people maximum, and then people can work in those groups.

Eric: Up the price of the ticket.

Ray: If you got a thousand people...

Eric: Then make a Ted Talk style, "It costs $10,000 to be in this room."


Ray: Yeah. That's the way they sell it to the bosses. "You can't get this anywhere else."


Eric: Awesome.

Ray: Price people in. [laughs]

Vijay: OK. I think I don't have any more questions or comments to make. Thanks a lot for joining all the way from the US, you know, taking the time. It was fun. Obviously as I said, I would love to check out your more videos.

These days, I'm swamped with all this stuff, but the people who are listening, I'm pretty sure they're familiar with your name already, because yours were one of the first courses that talk about Clojure and taught Clojure to the people.

Eric: You'd be surprised. You'd be surprised. Just a little story. Before Clojure/conj...I went there too back in November. Before then, I was gung-ho about expanding outside of Clojure, because I felt there's no room to grow. When I got there, I met a ton of people who had never heard of me. A lot of people had, of course, but a lot of people wer e like, "No, I never heard that."

I worked for a 40-person Clojure company. I'm like, "OK. [laughs] There's a lot of stuff going on that I don't know about and here's my card." [laughs]

Vijay: That's one of the things, right? I mean, there is not enough exposure, but hopefully I think people who are listening to this podcast...We get thousand plays. It's actually not a thousand people, or maybe. I don't know. [laughs] This is one way to reach out to the people, I think.

Eric: I think a lot of people are downloading this off BitTorrent.


Eric: We can't see them. It's probably...

Vijay: Piracy.

Eric: Yeah, I think there's some pirate rebroadcast on low-power FM.

Ray: I think there's piracy. That's a dark energy in the universe. There's a lot of it out there that we just can't see. We know it's there. Mathematically we know it's there, but we just can't work it out. That's how I'm measuring anyway.


Eric: There's people who were doing text-to-speech on the...What's it called? They do...

Ray: The transcripts.

Eric: The transcripts. Thank you.

Ray: We haven't got one of them.

Vijay: [laughs]

Eric: They feed it through Siri and they have Siri read it back to them.

Ray: Yeah. That's what's happening.

Vijay: Because they hate our voices obviously.

Ray: [laughs]

Eric: They can get it faster.

Vijay: It's been fun. I think we are reaching enough people. I was actually surprised by a couple of people sending email saying, "Oh you're the guy who's doing this podcast." I'm like, "Yes. I'm sorry." I always start with, "I'm really sorry." They're, "No, no, no. It's good." "Oh, OK. Thank you."


Eric: "I apologize for your ears."

Vijay: Exactly. "I apologize for wasting one hour every now and then." They're, "No, no, no. It's OK. It's really good." "OK, thank you." Moving on.

Ray: [laughs]

Eric: No, it is really good, and you're the only Clojure podcast as far as I know.


Vijay: There is another one... [laughs]

Ray: You're serving a good role in the...

Vijay: Specific demographics, yes. Oh, Cognitect is doing Cognicast. I think that is not purely Clojure as far as I can tell. It's all about all other things. They even have the [indecipherable 67:00] guy on the show. I mean, we're not going to do that.


Vijay: If we have him, we'll make him talk about Clojure. That's pretty much it.

Ray: As far as I'm concerned, we've given enough time to PHP on this podcast for us to qualify as polyglot programming.

Vijay: Exactly.

Ray: I don't think we can get any complains. We're polyglot friendly.

Vijay: But we're in a committed relationship with Clojure.

Ray: Exactly. [laughs]

Vijay: Yeah. Anyway, I think that's it for me today from Munich. I have a busy week ahead. Anything else from you, Ray? The end credits. We should roll on the credits now.

Ray: Yeah probably. [laughs]

Vijay: OK.

Ray: I could start talking about composting again.

Vijay: [laughs] Please don't.


Vijay: I think we can make another podcast about composting.

Ray: Just before we go actually, I just want to thank you because I think it's very kind of you to say that we're doing something good, but I think you've been doing it for a lot longer, and I think you're very consistent. I think Clojure owes a lot to people like you and you in particular, to help grow the word.

I think you're right. I think Clojure is catching a bit of a fire. Maybe it's this year or next year, I think we'll see more progress in this, because people aren't getting into...The penny is dropping, I think, out there.

Eric: It's never going to be as popular as PHP or Java. I think one of the curses is...

Ray: Yeah. It doesn't matter.

Eric: Exactly. It doesn't matter. Another thing that I really love about Clojure is that it's having such an influence on the rest of the industry.

Even if we're just there holdin g down the philosophy, or whatever you want to call it, that is radiating out to other languages and...I mean, spec came out and people are rewriting it on JavaScript. They're re-writing it because they wanted it, and they couldn't use it. That's cool.

Eric: As Ray was saying, I second every word you said. I mean, you've been doing it for forever. I'm also a subscriber of your newsletter and I keep looking up to using your countless videos and everything that you made. It is very helpful for people who want to get into Clojure.

I hope more and more people at least subscribe and then see what you're doing, the good work of spreading Clojure. Of course, the music that you're hearing for the show is by PTZERY and all the technical magic is done by Mr. Wouter Dullaert. Did I pronounce it correctly? No?

[background music]

Ray: Who knows. It's just so bad. [laughs]

Vijay: He'll patch it up.

Ray: Wouter, Walter.


Eric: In post.

Vijay: Exactly. In post-production.


Vijay: It's going to be like, "The post production is done by...

Robot SFX: Walter


Eric: Yes, exactly.


Vijay: Something like that. That's it from us today, and hope you have a nice week ahead.

Eric: Awesome.

[background music]

Ray: You're halfway there, Vijay. It'll be perfect by episode 40.