Episode 12: Chas Emerick with Ben Orenstein on the Thoughtbot Podcast

pnaoxmvtt3n5zc8irnt4Earlier this month, I had the good fortune to sit down with Ben Orenstein (@r00k), who is the host of Thoughtbot’s Giant Robots Smashing into other Giant Robots Podcast.  (He has quite the slick recording arrangement there, with pop filters, “real” microphones, and even a producer that knows what he’s doing…hi Thom!)

Anyway, we had a good chat in which Ben interviewed me on topics various and sundry, both related to Clojure and not, including my talking publicly for the first time about the Quilt Project. Ben graciously agreed to my syndicating the results of our conversation here for the Mostly Lazy audience; I’m thankful to both him and Thom for the opportunity to appear on their podcast.

(Recorded on April 14, 2014, and previously released on April 21, 2014 as episode #95 of Thoughtbot’s Giant Robots Smashing into other Giant Robots Podcast.)

Listen:

Or, download the mp3 directly.

Discrete Topics

(Remember to follow @MostlyLazy so you know who’s going to be on next, and can send us topics and questions!)

  • 100% Time
    • Also previously discussed with Craig Andera on episode #31 of the Cognicast née Relevance Podcast
  • the Quilt Project
  • “THE PDF THING”
    • snowtide.com for all of your PDF extraction needs”
    • The sad tale of Snowtide’s first iteration
    • $140K in debt; payoff; resurrection, and the origins of the PDFTextStream product
  • Firewire drives, 15 years ago
  • Noam Wasserman’s Rich vs. King concept
  • Wherein Chas deconstructs and discredits the entire premise of his livelihood: “The only reason why PDFTextStream exists is because of the waste and incidental complexity that derives from the impedence mismatch between you communicating with me communicating with N other people over this pool of messily-defined, poorly-represented data (i.e. PDFs).”
  • A brief summary of how PDFs work
  • Clojure Programming from O’Reilly
  • ClojureScript open source activities:
    • lein-cljsbuild
    • clojurescript.test (port of clojure.test to ClojureScript)
    • double-check (fork of Reid Draper’s test.check that can be used from both Clojure and ClojureScript)
  • Watch out, Ben Orenstein tries to get people to cry on his podcast! – Ed. ;-)
  • Workaholism, the experience and dangers of
    • weight gain (gained ~70 lbs., gone again now though)
    • negative impact on family, friends, and loved ones
    • sanity
  • Concatenative programming languages
  • Von Neumann architecture (For some reason, I kept saying “Von Neumann” instead of Turing Machine! :-/)
  • evil-mode for emacs
  • multithreaded fork of vim (HN discussion, if you dare)
  • “Heaven forfend”

 


Episode 11 with Jim Crossley and Toby Crawley: the Immutant two-step

jcrossleytobyToby Crawley (@tcrawley) and Jim Crossley (@jcrossley3) (shown to the left, respectively), among other things, are the primary instigators behind Immutant, the Clojure application platform built on top of the JBoss Application Server.  The tl;dr on Immutant is that it provides many of the same infrastructure services that many “platforms” provide (e.g. clustered queuing, caching, distributed transactions, etc), but with a single set of well-integrated Clojure APIs that you can (relatively) easily deploy and manage on your own infrastructure.

Further, regardless of the project, Toby and Jim are always good company; it was a hoot to hang out with them for a spell! We had a great time, I hope you enjoy listening in…

(Recorded on November 16th, 2013; my apologies to Jim and Toby for the particularly bad latency on the release of the recording.)

Listen:

Or, download the mp3 directly.

Discrete Topics

(Remember to follow @MostlyLazy so you know who’s going to be on next, and can send us topics and questions!)

  • All about Immutant…
    • (…which Chas happens to use as a foundation for Docuharvest, yet another of his side projects)
  • “Platform as a service” services, e.g. Heroku & Elastic Beanstalk
  • Grizzly, a Java-based HTTP server designed to be embeddable (much like Jetty), which happens to be used as the basis for Glassfish’s web stack
  • Using nREPL and all the middleware available for it (like Piggieback via Austin for ClojureScript REPL-ing) in conjunction with Immutant
  • clojurescript.test, a maximal port of clojure.test to ClojureScript
  • double-check, a fork of Reid Draper’s simple-check property/specification testing library that can be used portably in both Clojure and ClojureScript
  • Plans for Immutant 2.0, a.k.a. “The Deuce”
  • The Immutant mascot (inspired by the Hypnotoad), probably the best thing to ever come out of a JIRA ticket:
    immutant_icon_256px_flipped
  • TorqueBox, the Ruby application platform built on top of JBoss, analogous to Immutant
  • Chas’ various Immutant hacks around programmatic queue and logging configuration (the former of which is apparently slated for addition to the official API in some form)
  • Infinispan (JBoss’ distributed in-memory key-value store) & Hotrod (its wire protocol for un-clustered client communication)
  • Shout-out to Bob McWhirter, founder of the ProjectOdd group at Red Hat (which houses Immutant, Torquebox, and others)
  • Caribou, a “dynamic web application generator with antlers”, one of the latest entries in the Clojure web framework explosion
  • Clojure Conj 2013 “recap”
  • vert.x, an “asynchronous polyglot application platform for the JVM”, and the Clojure vert.x support, which Toby wrote/maintains and talked about in his Conj talk
  • Recent fixes to Clojure (which landed in 1.6.0 alphas) to prevent memory leaks in dynamically-deployed applications
  • /ht Andy Fingerhut and Alex Miller for their recent contributions to the Clojure development process, etc.
  • ClojureScript releases are versioned in an “interesting” way, e.g. 0.0-XXXX instead of X.Y.Z. Toby asks, “Why, why, why‽”.
    • The mentioned mailing list post where this versioning scheme originally arose is here, and the ongoing documentation of it looks to be here.
  • Results from the 2013 State of Clojure and ClojureScript
  • Michael Fogus’ post and talk about the ClojureScript compiler pipeline
  • cljx, an implementation of “feature expressions”, enabling one to target both Clojure and ClojureScript from a single codebase
  • Not much of a news flash, but Mac OS X is no longer a reasonable option for (some, many?) software developers. What follows is some navel-gazing on our collective migration to Linux.
  • Powercenter 120, the first computer that Chas bought new
  • Russ Olsen’s “To the Moon” Conj 2013 talk

P.S.

Just prior to finishing these show notes, I asked Jim and Toby what pictures of themselves they wanted to go along with the episode. Their (mostly) prosaic, perfectly-fine twitter avatar headshots came first, but then Jim was kind enough to direct my attention to this gem:

toby2

Yes, that’s a kitten t-shirt / patriotic fanny pack ensemble. Don’t mind the haters, Toby, this is why we love you.


Episode 10 with Craig Andera: Training, remote work, Clojure for newcomers, and tooling

Craig AnderaCraig Andera (@craigandera) has been using and speaking about Clojure for years, especially notably of late as the tireless host of the long-running Relevance podcast, where he has interviewed a wide array of personalities (both inside and outside of Relevance, where he is a full-time Clojure developer) that impact and influence Clojure and the space around it.

This episode of Mostly Lazy is quite different from prior episodes in that it is effectively Part II of a longer conversation that started in Episode #31 of the Relevance podcast, where Craig interviewed Chas about Clojure Programming, the state of Clojure broadly writ, 100% time, and other things.  If you haven’t listened to that yet, you should go do so now, before listening to this!

Enjoy!

(Recorded on April 19th, 2013.)

Listen:

Or, download the mp3 directly.

Discrete Topics

Many questions and topics came from tweets to @MostlyLazy (watch for scheduled show announcements and send us topics and questions!)

  • Craig interviewing Chas on the Relevance Podcast #31
  • Fogus should “guest” host on Mostly Lazy!
  • DevelopMentor
  • The grind of technical training
  • Craig’s history consulting for Microsoft on MSDN (among other things)
  • Contrasting the Microsoft and open source mindsets/populations…mac_vs_pc
  • “Everyone likes to build products for people like themselves…”
  • Using Cygwin and Virtualbox to form a workable development environment on Windows
  • VimScript (of all things)
  • “The Rich Hickey Dream”: Clojure + ClojureScript + Datomic
  • Pedestal, Relevance‘s “open source tool set for building web applications in Clojure”
  • Product businesses vs. consulting
  • Ben Vandgrift’s appearance on the Relevance podcast
  • “The Clojure community is not welcoming to newcomers.” (paraphrasing)
  • “Why Clojure sucks, and why you’ll love it anyway” (Chas’ talk @ ClojureWest 2012)
  • ANN: Mostly Lazy to be renamed to Mostly Navel Gazing
  • Craig’s remote working setup & the experience of pairing
  • The value/process of user interface / user experience design, storyboarding, etc
  • Vim vs. Emacs (yes, seriously :-P)
  • “Alternative” Clojure tools:
  • The role and state of podcasting as a medium

Episode 9 with Kevin Lynagh and Paul deGrandis: web dev ennui, CRDTs, and core.logic

Paul deGrandisKevin Lynagh

Paul deGrandis (@ohpauleez) and Kevin Lynagh (@lynaghk) are two anchors of the Clojure community, perhaps especially of the ClojureScript wing.  Both Portlanders, they’ve been elbow-deep in core.logic and a ton of ClojureScript tools and libraries like shoreleave, cljx, c2, and more.  They’ve stormed the Clojure world in the past year or two, going from zero to taking up residence in #clojure to speaking about Clojure and ClojureScript everywhere.

Kevin is the founder of Keming Labs, which specializes in “building data-driven UIs”; Paul has worked at all sorts of places like Etsy, Comcast, and TutorSpree.

Enjoy!

(Recorded on December 14th, 2012.  Apologies for the clipping on Paul’s audio. Donations welcome to help get him get an internet connection that doesn’t use carrier pigeons. ;-)

Listen:

Or, download the mp3 directly.

Discrete Topics

Many questions and topics came from tweets to @MostlyLazy (watch for scheduled show announcements and send us topics and questions!)


Episode 8: Phil Hagelberg; empowering userspace in Heroku, Leiningen, and Emacs

Phil HagelbergPhil Hagelberg (a.k.a. technomancy just about everywhere) has been a constant presence in the Clojure world for years.  Best known for starting the Leiningen project — which he continues to maintain as part of his duties at Heroku — Phil has had his fingers in all sorts of open source pots, including Clojure itself, a big pile of Clojure libraries, and the packaging and distribution infrastructure around Emacs (thus foreshadowing Leiningen to a certain degree?).

We talked about many of these topics (recorded on 8/31/2012, BTW), but one theme that kept coming up throughout our conversation was the notion of empowering userspace; that is, ensuring that users of a system have nearly (or exactly?) as much power available to them as the system’s original creators.  This is something that Phil has written about recently, where he dubbed a particular approach to empowering userspace as the “Emacs Way”…a strategy that has yielded great dividends in Leiningen and Clojure both.

Enjoy!

Listen:

Or, download the mp3 directly.

Discrete Topics


Episode 7: Anthony Grimes; tools and projects; minimum viable snippets

Chris HouserI had a lot of fun catching up with Anthony Grimes (@IORayne on Twitter and Raynes in #clojure irc). One of the most prolific Clojure programmers I know (in terms of project count anyway!), Anthony has been a fixture in the community for years, and was the “sponsoree” of the 2010 Clojure Conj scholarship. He works at Geni, helping to make their social ancestry site more awesome every day, but we talked about all sorts of stuffs.

Enjoy!

Listen:

Or, download the mp3 directly.

Discrete Topics


Episode 6: Chris Houser; Clojure surveys; getting the “little things” right in languages; Yegge-rama; ClojureScript REPLs

Chris Houser

I was stoked to reboot Mostly Lazy by talking yesterday with Chris Houser (a.k.a. Chouser), this time via Skype.  It’s good to be back!

Enjoy!

Listen:

Or, download the mp3 directly.

Discrete Topics

Finally, a non sequitur: Chris kindly responded to my RFY (Request for Yak) with this fine example of an indecently-shaven specimen:

An indecently-shaved yak


Episode 0.0.5: Chris Houser at Clojure Conj 2011

Recorded November 12th, 2011, the fourth and final recording in a series of conversations from Clojure Conj 2011.

Chris Houser (usually known as chouser online) has been working with Clojure longer than nearly anyone else; he started tinkering with the language in early 2008, and was a fixture in #clojure irc and on the mailing list for years.  His contributions to the language, early libraries, and community through his always genial and insightful presence are hard to overstate.  More recently, he has coauthored the excellent Joy of Clojure along with Michael Fogus, and is now working with Clojure daily over at Lonocloud.

It’s been my privilege to know and work with Chris a bit over the years, and, as always, it was great to talk with him in person.

Enjoy!

Listen:

Or, download the mp3 directly.

Discrete Topics

  • “Everything I learned, I [learned] on irc?!”
  • Macros (a.k.a. “compile time metaprogramming”) in Scala? Project Kepler
  • Rich Hickey once made a visit to the Western Mass. Developer’s Group, and delivered one of his great early talks on Clojure, complete with an ants demo.  My post on the event, and video.
  • “Tooling is a canard.”
  • Chouser wrote “the first ClojureScript” years ago, a proof of concept using JavaScript as a host for a Clojure implementation.  (Don’t go looking for it, I think it’s dropped off the internets by now; check out the “real” ClojureScript if you want a Clojure for JavaScript.)
  • error-kit — don’t use that though, you should almost surely use Slingshot instead for advanced error handling

Episode 0.0.4: Antoni Batchelli and Hugo Duncan at Clojure Conj 2011

Recorded November 12th, 2011, third in a series of conversations from Clojure Conj 2011.

I caught up with Hugo Duncan and Antoni Batchelli (everyone calls him Toni ;-) during one of the lunch breaks at the Conj.  These guys have been on a tear with Pallet, an open source Clojure project that Hugo started in early 2010 to shave one of the hairiest yaks around, the automation of provisioning and management of computing infrastructure.  The result is a tool and library that provides a classically Clojure abstraction for controlling nearly any environment, from cloud nodes to virtual machines to the rackmounts you have downstairs.  Since it is their full-time job — Toni and Hugo have built a business around the project — most of our discussion centers on Pallet, its history, and how people are using it.

Near the end, Hugo and I talk some about his other work in the Clojure world, which has generally been related to tooling around Emacs and Maven.

Enjoy!

Listen:

Or, download the mp3 directly.

Discrete Topics

  • Clojure/West, happening March 16-17, 2012 — be there!
  • Disclojure, a great stream of links to Clojure tutorials and news maintained by Toni
  • Pallet, representing computing infrastructure with Clojure abstractions
    • Chas has used pallet to automate provisioning and configuration of Clojure webapps and CouchDB clusters (old, OLD links!)
    • Often mentioned in the same breath as Chef and Puppet on the now-defunct IT Management and Cloud Podcast (by Michael Cote and John M. Willis)
    • Storm, by Nathan Marz @ Twitter — uses pallet to simplify deployment and operations
    • pallet-hadoop — uses pallet as a library to automate hadoop operations
    • Support for tons of different computing infrastructures:
      • jclouds — provision & control resources on dozens? of different clouds
      • vmfest — layer on top of VirtualBox that allows you to use it as a local cloud “provider”
      • node-list — control non-cloud computing infrastructure, i.e. in-house resources
    • AWS’ Elastic Beanstalk
    • GoGrid (using Clojure because of Pallet!)
  • swank-clojure
  • JPDA (Java Platform Debug Architecture), includes the Java Debug Interface
  • Clojure Debug Toolkit
  • Alternative Maven support for Clojure, written in Clojure: zi
  • clojure-maven-plugin (by Mark Derricut a.k.a. talios)
  • Leiningen

Outro

This episode’s outro is a piece by Christopher Ford. Using a synthesized cornet by Jennifer Smith, he produced an abbreviated version of a piece where a set of chords continually fall out of time with a simple five-note melody.  Of course, full source to the piece is available for your Overtone hacking delight.


Episode 0.0.3: Chris Granger at Clojure Conj 2011

Recorded November 12th, 2011, second in a series of conversations from Clojure Conj 2011.

I had a chance to sit down with Chris Granger on the last night of the Conj.  It’s been fun to watch him over the past months put out a set of really pleasant-to-use and extraordinarily well-documented and well-packaged libraries, and he’s turned into a great presence around the Clojure sphere in general.  Chris works with Clojure daily for his current employer, ReadyForZero — a Y Combinator-funded startup that helps people get out of debt — where he helped port a Python & Django codebase over to be 100% Clojure.  (Yup, the big tagline for this episode is, “Y Combinator startup bets business on Clojure!” ;-)  In addition, he has a unique history, having recently worked as a program manager Microsoft, working on Visual Studio…so, our discussion was wide-ranging.

After we recorded this, it was announced that Chris will be teaching two training sessions on Clojure web development at the new Clojure/West conference in March.  If you’re new to Clojure and want to jump-start your skills for it in the web space, signing up for one of those sessions would likely be a good way to get further faster.

Enjoy!

(BTW, don’t miss the notes on the Overtone-produced intro and outro below…)

Listen:

Or, download the mp3 directly.

Discrete Topics

  • Chris is known as ibdknox on Twitter and elsewhere
  • Lead developer for:
    • Noir, a web microframework that sits on top of Ring and Compojure
      • similar in spirit to Ruby’s Sinatra, provides “sensible defaults”
    • Korma, a Clojure abstraction over SQL (notan ORM!)
      • Efficiently write composable SQL in Clojure
      • similar to LINQ to SQL, Python’s sqlalchemy
      • (We used Korma for some RDBMS examples in the book! — Chas)
    • Pinot, a ClojureScript companion to Noir
      • Clojure-idiomatic browser DOM manipulation (instead of using gclosure directly) and canvas API
  • Chris was formerly a program manager for the Visual Basic and C# experience in Visual Studio at Microsoft
  • Counterclockwise, the Clojure plugin for Eclipse
  • Support for Clojure in TextMate via textmate-clojure
  • clojure-jack-in, the newest (simpler) entry point for swank-clojure
  • Leiningen and cake have merged forces
  • cljs-watch, a ClojureScript directory watcher
  • Clojure/West

Bumpers

Last episode, I put the call out for people to send in Overtone-produced sounds to serve as intro and outro pieces.  Here’s some info on the clips used in this episode.

Intro

Jen Smith coded up bell sounds from scratch using Overtone’s sine-wave ugens, and then composed them to produce a rendition of Troika, the fourth movement of Lieutenant Kije by Sergei Prokofiev.  The code itself ended up being added as an example in the core Overtone repo, and was discussed at some length on the Overtone mailing list here.

(Note: when I recorded the results of Jen’s code, I used a bell metronome with a beat of 250; perhaps that’s not “correct”, but it suited my personal taste for the tune. :-)

Outro

Produced by Damion Junk, the intro was part of a longer track generated by a bracketed L-system, which is “a variant of a formal grammar, most famously used to model the growth processes of plant development”.  Damion used a library he wrote for working with L-systems to produce generated data for Overtone.  Here’s the source for the specific L-system he used for the intro track:

(def descending-moon {:v "RN+-<>[]"
                      :omega ">>>[-----N][++N][++++++N][<<<NR]"
                      :productions {\N "RN++NN----N"
                                    \R "RR"
                                    \> ">"
                                    \< "<"
                                    \+ "+"
                                    \- "-"
                                    \[ "["
                                    \] "]"}})
 

Follow

Get every new post delivered to your Inbox.