The Changelog: Software Development, Open Source - Your Huginn Agents Are Standing By (Interview)

Episode Date: April 15, 2016

Andrew Cantino joined the show to talk with Jerod about Huginn, a system for building agents that perform automated tasks for you online. They can read the web, watch for events, and take actions on y...our behalf. Think of it as a hackable Yahoo! Pipes plus IFTTT on your own server.

Transcript
Discussion (0)
Starting point is 00:00:00 I'm Andrew Cantino, and you're listening to The Change Log. Welcome back, everyone. This is The Change Log, and I'm your host, Adam Stachowiak. This is episode 199. Long time in the making. I know, you've been waiting for the next episode. I'm sorry. I was on paternity leave got behind we're back on schedule so no worries jerry went solo on this show with andrew contino about hugen and now hugen is a system for building agents that perform automated tasks for you online they can read the web watch for events and take actions on your behalf. Think of it as a hackable Yahoo pipes plus if on your own server.
Starting point is 00:00:48 We have three sponsors for the show today, CodeShip, DigitalOcean, and Truesight Pulse. Our first sponsor today is our friends at CodeShip. They have a new platform called CodeShip Jet, and they've got this webinar coming up to talk about managing test environments with Docker and this new platform called CodeChip Jet. CodeChip's engineer, Brendan Fosbury, is going to show you how to use Docker to simplify managing your application across different environments by using Docker and CodeChip's continuous integration platform, Jet.
Starting point is 00:01:20 This is a free webinar, April 28th, 2016 at noon Eastern Standard Time. I'm going to put a link in the show notes, but in the meantime, go to CodeChip.com slash ChangeLog to learn more about CodeChip Jet. And now on to the show. Welcome back, everyone. Jared here. I want to start this show out with a shout-out to a brand-new member of the Changelog family. That's the baby Stachowiak. So congratulations to Adam and Heather, and welcoming Eli to the world.
Starting point is 00:01:59 Adam not here on the show today, taking care of more important things, but we are excited nonetheless to be joined by Andrew Cantino to talk about his project, Hugin. Andrew, welcome to the show. Thank you. So, Andrew, as we like to get started, it helps out and it's fun to understand who the guest is, where you're coming from, how you got to the point where you built Hugin, which is a system for building agents that perform automated tasks for you online. We're going to dig deep into that.
Starting point is 00:02:29 But first of all, I'd like to learn a little bit about you. So can you tell us a little bit about yourself? Sure. I've been doing programming for probably about 20 years. I started when I was, I think I was about 12, and I took a summer class on robotics. And I actually didn't particularly like the robots because they tended to break a lot, hardware, but I really enjoyed programming for them in BASIC. And so after that summer, I convinced my parents to buy me a Pascal compiler, which I don't think I ever actually used.
Starting point is 00:03:02 I just kept using BASIC, and I learned Microsoft QuickBASIC, and then I learned something called RealBASIC for Mac. And then I got into Perl. This was before college, and I did a bunch of Perl scripts, some of which I sold. And then in college, I majored in physics, but I kept doing computer science as well. I took a bunch of classes and ended up
Starting point is 00:03:31 minoring in computational science, applying it to physics. And I think I learned Java and Python and kept using a lot of Perl for web-based projects in college. And then after college, I went to grad school and I switched from physics to pure computer science, and I studied machine learning in grad school for a couple years. Then I came out to Silicon Valley, and I've been at a bunch of startups and companies out here since then. Go back to your Perl scripts. You said you sold some of those. What kind of scripts were you selling that they were valuable enough people want to pay money for them this was like before the dot-com boom and people would buy these cgi scripts for very what would we would now consider very primitive websites um i had pearl scripts i had a guest book that you could leave notes for each other nice on a website um
Starting point is 00:04:17 i had a chat script which actually got pretty popular i ran a network of um chat servers that were you could run them with no JavaScript at all. It was better if you had JavaScript, but they were pure HTML and CSS if you wanted. So we had a lot of users on WebTV, which was a thing. And like these really primitive clients that couldn't run JavaScript. And it got popular in these sort of strange niche communities for, I think I ran it for almost 10 years. Closed it down sort of right after college. Web TV, was that that thing where it's kind of like what smart TVs are now, but it was way before its time and you could get on the web from your television?
Starting point is 00:04:55 Is that what that was? Yeah, I think you had a device that had a modem, I believe. And you plugged it into your TV and it was a very poor quality screen because TVs were really low resolution. And you could very slowly browse the web. And some of them, I don't think even ran JavaScript at all. Right, right. So on your website, you say that you're an experimentalist. What does that mean? I like building things and tinkering with things and experimenting with new ideas. I sort of like building systems from scratch
Starting point is 00:05:32 to see how they work. I built a web browser in high school just for fun to sort of learn what the primitives were, although back then they were a lot simpler. And then playing with algorithms algorithms playing with toys there what's some other stuff if you've uh experimental i mean i think perhaps when we get to hugen we'll find out that that's probably coming out of that tinker mindset but do you have any other examples uh of things that you just kind of experimented with? I've had a couple fun projects.
Starting point is 00:06:06 I had a project in college. It might have been before college, actually, where I was trying to evolve CSS styling for websites. So you could look at a website, and it would take the style sheet and mutate it, and then make a couple potential offspring, kind of like Blind Watchmaker. And it would display them over a proxied version of potential offspring, kind of like Blind Watchmaker.
Starting point is 00:06:25 And it would display them over a proxied version of the site and you pick the one you like. Or if you wanted, you could pick multiple offspring and pick the ones that you like. And then it would combine them and basically treat lines of CSS as genes that it could flip back and forth. And so it would do both mutation and combination with the offspring and then you
Starting point is 00:06:45 could evolve a style sheet that you liked for that site very cool um anything else uh well selector gadget is a project that i did a while ago um that still gets some use it's a tool for building css selectors for websites it's a Chrome extension or a bookmarklet. And you can click on a region of the page that you're interested in. And it highlights, it sort of does a best guess of what selector would make sense there. So it'll prefer an ID. And then if there's no ID, it'll fall back to a class. And it'll highlight everything on the page that matches that. And then usually it's not right on the first try. So then you click on something that you don't want in your selection and it turns red and then it tries to figure out the sort of minimal selector that matches everything you do want and nothing that you don't yeah let me just give you props on selector gadget
Starting point is 00:07:35 in fact when i was when i was on your website preparing for this call i saw that you made selector gadget and i was like yes that awesome. Because I use that back in the day. And it was kind of a revelation because I don't know exactly why, but it was so impressive to see it like just, you know, drill down on a specific section and grab the selector for you. Because back then we were all kind of learning about CSS selection and how to do it best and how not to do it. And at least for me, it was like it was helping me realize other ways of selecting things um that i previously would have never known so very cool people people are still using that today yeah it still gets some use um i turned it into a chrome extension maybe a year ago and it's it's getting some use it's never sort of taken off it's hard to know you know it's because people just use it i don't have any great metrics on how much it gets used but um sometimes it shows up on twitter periodically right right right that leads to
Starting point is 00:08:31 me one question i've been asking people recently because i'm kind of becoming uh transfixed on this idea of longevity with software projects and really having a lot of respect for things that are um well what people might consider legacy, but are just like older, but actually had value and still work today. And so looking back at myself and my own software development career, I look back at stuff that I wrote back in the, I mean, I can only go back about 10 or 12 years because that's how long I've been doing development. But I look at things that I wrote, you know, 10 years ago and ask myself, what's still
Starting point is 00:09:05 useful? And so thinking about it like that, and you have a longer history than I do, does anything go past Selector Gadget going back? You said you had these Perl scripts that ran for quite a long time. What's the oldest piece of software that you wrote that's still being used in some capacity today? That's a good question. Well, older than Selector Gadget,
Starting point is 00:09:31 I was on the Gmail team at Google for a summer internship, and I'm pretty sure that code I wrote to generate filters in Gmail is still in use, as well as possibly some of the code in the search bar that does autocomplete. I don't know how much it's evolved since I was there, but that's about eight years old. And then older still, there was a project called Absurdly Cool Freebie Finder,
Starting point is 00:09:54 which was this search engine for finding free stuff. Nice. And that's still online, but unfortunately I sold it, which that's not unfortunate. That was great. Unfortunately, the new owner has which was not unfortunate. That was great. Unfortunately, the new owner has just sort of let it die,
Starting point is 00:10:12 which has actually been my experience in general of stuff that I've sold. I've sold it, and then the next person doesn't care as much as I did. So it sort of goes away. The site's technically still up, but it's not aggregating anymore. But I ran that since uh see since about 2005 older than that i'm sure there's still some pearl scripts running somewhere i mean i had like a hundred thousand downloads of that guest book there's no way they're all gone but it was you know super insecure terribly written untested pearl so i kind of hope they're all gone so you told us how you got into software what about open source specific can you go back software. What about open source specific?
Starting point is 00:10:46 Can you go back? Do you remember your open source roots and where the idea of open source kind of sprung up in you and you got excited about it? That's a good question. Well, so the Perl scripts that I mentioned, most of those were open. There was no real realistic way to make them closed source because you just have to provide the script for someone to run. So some of those I think got changed
Starting point is 00:11:09 and most of them were free. Many of them were free. So that was in high school 20 years ago. Before that, a really sort of formative experience for me was this Macintosh application called Hotline. And it was this network of, it was peer-to-peer, and it had trackers and it had servers that would register to the trackers. And each server could have a chat room and a forum and file exchange. And I was probably 13 or something when I found these.
Starting point is 00:11:43 And I stumbled on this community of other children, roughly my age. Some were older, some were younger, but we're all sort of teenagers who are learning real basic together. And that was the language that I was playing with at that time. And that was really cool because people would just upload examples of something they made and someone else would download them and sort of riff on it and upload a new one and that's that was really sort of formative for me to get into real programming and because there were people there who were more experienced than me and i could learn from their tricks um that's where i sort of mentioned that i wrote a simple web browser it was there and shared it people thought you know you get props you know people like this is awesome how did you do this and it was really it was like a fun game um so that's sort of proto
Starting point is 00:12:29 open source like i don't think many things came out of that that became real products i'm sure some did um but it was really important for me to sort of work with a community of other programmers just thinking about that and the even the open nature of the Pearl scripts that you were selling makes me wonder, cause it was so back so far back. Um, how did you go about like, what was the transaction like when you sold a Pearl script back then?
Starting point is 00:12:52 Was it a mail me some cash? Was it, was it, I think so. I think it was like, mail me, mail me a check. Um,
Starting point is 00:13:00 that's probably cash sometimes. Yeah. And we're not talking, you know, this was like a hundred bucks and I was in high school and that was that was great 100 bucks is awesome when you're in high school yeah i mean i think i had a few that might have been a couple grand like it was it was certainly a great great spending money in high school very cool well we are going to talk about hugen let's take a quick break and we will dive into what that is and why it's awesome.
Starting point is 00:13:25 We'll be right back. architect about the idea of dev teams out there rolling their own monitoring system using something that's open source or building their own from scratch. And he had this to say. I think if you want to roll your own and spend the dev effort of having to build that internally, that's great. My only question to you is if you spend your time doing that, are you providing value to your customer? and are you actually moving your product forward or are you holding your product back? I think a lot of what something like TrueSight Pulse offers you is we take a lot of that on for you so you can provide that value to your customer on your product instead. So we have plugins for, I think there's 30 plugins for different parts of
Starting point is 00:14:19 your infrastructure. We have an agent that's been running for three years written in C that takes a very small amount of your resources. As you add more servers, you're not going to have to worry about the scalability as much. And we've written the chef and the puppet scripts for you. So that's all taken care of. It's letting us worry about it so you can focus on your customers. That's kind of the value that TruSight Pulse adds, as opposed to you having to do it yourself. We've all been in organizations where we've joined and had to rewrite the entire monitoring stack.
Starting point is 00:14:47 And that's just something we didn't want to have to do. We want to come in. We want that taken care of. And then that way we can focus on the things that are going to matter to our customers. That was Mike Moran, Senior Architect at Truesight Pulse. To learn more about Truesight Pulse and how it helps you deliver more value to your customers, head to bmc.com slash Truesight Pulse, all one word, and tell them Adam from the Chainslog sent you. All right, we are back with Andrew Cantino, and we want to talk about this really cool project called Hugin that has caught traction, probably more so than Selector Gadget.
Starting point is 00:15:23 I think you got 13,000 stars, 1,300 plus forks, 110 contributors, which is quite an accomplishment. We're going to talk about what Hugin does, but let's first get the name out of the way. Because it's one of these things where, as I was saying before the call, as programmers, we tend to write things all the time, and we read words, and we all kind of live on our terminals, you know, reading text. And it's not until shows like these where we get together and actually have to talk about concepts. And many things,
Starting point is 00:15:55 we just pronounce them differently. And so I thought it was Huggin, ever since I've heard about it, which was a couple years ago now, until until you sent me your audio clip and I found out you pronounce it Hugin. So can you first give us the inspiration for the name and then kind of describe the pronunciation? Sure. So Hugin is named after one of the ravens of the Norse god Odin. In mythology, they flew around the world and reported back on what they saw. So the two ravens were Hugin and Munin, thought and memory. And I've always pronounced it Hugin.
Starting point is 00:16:30 When I've looked online for someone who might actually know what they're talking about, I've heard Hugin. I've never actually heard Hugin, which is what a lot of people say in the open source community. And I think it's kind of cute, so it doesn't bother me. Yeah, it's kind of funny because when you come across the name like i did just reading it saying hmm and you just kind of sound it out and i don't know anything about that mythology i think it's a cool name based on that makes lots of sense you're like oh it's trying to hug you like it's gonna like i'm not really sure why i named it hugging but there it isgin. So it's just funny how we kind of construct these things in our minds to fill in the gaps. But that's such a great name based on that mythology.
Starting point is 00:17:11 Was it something where you already knew the story and you said, well, this makes tons of sense because this is an agent getting information for you, just like in the mythology? Or were you digging for a name and you came across that and you thought, oh, I can use this? How did that come about? That's a really good question, and I honestly can't remember. I think that I was looking around for a name and sort of looking for inspiration in mythology,
Starting point is 00:17:35 but that may not be right. I can't remember. Have you ever thought about starting a Munin project? I would, but there is one. Yes, there is. It's a monitoring tool. That's right. Well, so you're in San Francisco, and you said you worked at some startups, so you're very familiar with the elevator pitch, right?
Starting point is 00:17:55 So if you had to describe Hugin to somebody in a paragraph or two, and you had to do the elevator pitch, what would that sound like? So if you're aware of products like IFTTT, which is IFTTT this, then that, or Zapier, then Hugin is really easy to describe because it's basically an open source, self-hosted clone of IFTTT or Zapier or a little bit like Yahoo Pipes. And then the more pure elevator pitch would be use Hugin to monitor the world for you to take data in from interesting sources on the Internet and then react to it, filter it, aggregate it, and then take actions on your behalf.
Starting point is 00:18:35 Which is often as simple as sending you an email, but it could be more complicated, too, like posting something or taking some more interesting action. We might have to take a moment to pause for pouring out a drink for Yahoo Pipes. Isn't that dead now? It is. I was sad to see it go. It was a great product. Yeah, it really was. It was such an interesting idea and so many uses.
Starting point is 00:18:58 I think a lot of the open sourcers were sad to see that one finally get closed down. There's been an influx of users after Yahoo! Pipes closed down to, I'd say, a sort of varying degree of success. Like, some of them, Hugin really does meet their needs, and some of them want to use Hugin for sort of very deep feed recombination and filtering, which it can do if you sort of squint, but it's not sort of perfect for that at the moment.
Starting point is 00:19:26 So perhaps some more of your disgruntled users or your feature requesters are the people coming from the Yahoo! Pipe site. First commit March 3rd, 2013. So it's three years old now. Was, you said you describe it as if you understand if this, then that, and, or Zapier, then you can describe Hugin as a clone of those things or an open source version of those things was, uh, if this, then that, or Zapier, the actual inspiration for it, was it a clone or it just happened to be like mutual, uh, invention or how did it, how did it start?
Starting point is 00:20:03 No, it wasn't a clone. I started it a little earlier than that. I think it was December, around Christmas of 2012. I was at home visiting my family and needed a project to tinker on and had this idea for basically just a GUI for CronJobs and sort of reusable components that could be wired together because I end up writing so many little scripts in Perl or Ruby just a GUI for CronJobs and sort of reusable components that could be wired together. Because I end up writing so many little scripts in Perl or Ruby to automate things.
Starting point is 00:20:33 And I tend to rewrite them all the time. And I don't have a shared library. And so it started as a shared library of stuff that I wanted to wire together inside of a Rails app. I think my first use case, which I still actually use, was it would be really cool if I got an email in the morning or push notification if it was going to rain that day so that I actually remember to take my umbrella because I'm terrible at this. So I have a network of Hugin agents that does that for me. And it did that very early on. I think it was the first thing I implemented. I also played with a bunch of location based stuff early early on um so yeah it wasn't really i don't think it was inspired by any existing
Starting point is 00:21:12 product that i was aware of it was just sort of the result of tinkering so as you became aware of those products did you ever think uh they perhaps they ripped you off or that uh you could compete with them or like, what was your, what was your reaction as you, I think Zapier is probably newer. I don't know. I actually don't know the history.
Starting point is 00:21:32 I feel like it's newer than IFTTT in the marketplace. And so maybe they cloned them, but what do you, what were your thoughts as you see these other things come out and they're like, you know, pretty successful small businesses or startups at this point that are basically providing very similar functionality to what you've been doing in the open source space i think it's great um they're good products and
Starting point is 00:21:53 i have nothing against them and if you don't want to host you know something on your own or you're not trying to extend it they're really good solutions they have a lot of connectors they're monitored by you know professional people who know how to run services. Right. And that's awesome because then I don't need to build a hosting platform. And I, my interest was always in controlling my own data. I didn't really want to have my data be in someone else's hands.
Starting point is 00:22:19 And I, it doesn't really bother me sort of in an abstract sense, but mostly in sort of the longevity that you mentioned, you know, startups come and go. And I want to have, I would love if I have, you know, 20, 30 years of history at some point of all this data that I can play with. And that seems unlikely if I'm giving it all to a startup. So my motivation was sort of twofold one to control the data, not so much out of paranoia, but just sort of to keep my hands on it. And the second was really that I'm a programmer.
Starting point is 00:22:51 It's satisfying to write things. And Kugan is a library of reusable components, and often I find myself needing to add just one more to make something complicated work. So it's really satisfying as a developer because you can go in there use a simple api write another agent and wire it all together and that's just not something you can easily do in these hosted solutions you can't just go write arbitrary code and run it yeah you have to fit it inside of whatever framework they provide which is usually limiting um and all things are
Starting point is 00:23:21 all interfaces are limiting so what are some of the cool things that you can do with Hugen? You mentioned the first one, which seems like was your primary use case at first, which was let me know when I need to remember my umbrella. That's right. What are some other ones? There's a bunch. And frankly, I think that I am one of the more boring users of Hugen. It has mostly met my needs for a while.
Starting point is 00:23:46 And some of the stuff that people are using it for now are much more complicated than any of my personal use cases. One of my favorite uses that I do use it for routinely is to monitor Twitter. So Hugon can run a Twitter agent, it follows the Twitter filtered feed, you can give it a bunch of terms that you'd like to hear about. And then Hugin can either just emit an event for every term. So for something rare, I do that. For example, the word Hugin, not particularly common, so I just see all of them. Or my last name is actually pretty rare, so I just see all of those.
Starting point is 00:24:22 But for anything frequent, I don't want to get an email for every time it's mentioned I just want to know when it's changed in an interesting way. And so in that case I use the Hugin mode that has two modes either events or counts and if you do counts and it's basically emitting a histogram bucketed by whatever check frequency you set. So you say to check every five minutes and roll up the number of times that a certain term has occurred. And then I send those to a peak detector agent, which can filter,
Starting point is 00:24:53 basically watches for a high standard deviation spike in that time series, and then triggers its own event if that occurs. And then that I either send to either, you know, a push notification or an email or something else. So I can give you two examples for the push notification case. That's something I want to know right now.
Starting point is 00:25:13 So I have a couple agents that watch for like the terms, San Francisco tsunami or bomb threat or something like that. And I want to know, like, tell me right away if this happens. And so I could find out in a couple, you know, in about a minute, if there's a sudden spike in conversation about those terms on Twitter. That's really cool. And then luckily those haven't triggered very often. And then the more useful day-to-day ones are the slightly less
Starting point is 00:25:40 frequent, but interesting terms where I basically use hugen to watch for interesting stuff to happen on twitter that i think might happen eventually and just tell me if it does so i don't have to check myself so for example if i'm waiting for you know a call for a call for papers at a conference i'll put i'll put the conference name in twitter and it'll spike when they announce something um i'm waiting for mass effect 4 to be released, so I just have Mass Effect 4. And if there's some announcement, I get an email. NASA announcement, Ruby vulnerability. A recent one I started using is if there's a movie I'm waiting for on Netflix, I do just movie name Netflix, and that will spike when it gets released and I'll get an email.
Starting point is 00:26:22 It's basically like a sort of fuzzy natural language API to the world. Like Twitter, you know, people are going to say things in their own words when something happens and it has such volume that if you just keep an eye on it, almost any term that you pick is going to increase proportionally to the amount of interest in it. And so if you just look for spikes in that, it works surprisingly well. I love that. It's kind of like, you know, the google news search alert type of a thing only i'm not sure how much they put into
Starting point is 00:26:51 it but i love how its proportionality are based on trends because you tend to get so many false positives or you know i used to have one out for my name and uh because my name is pretty unique at least when the first and last combined and unique enough that there weren't false positives but all i would get alerts on is whenever i publish my own a blog post and i'd be like oh yeah well i already knew that one because i just hit you know the publish button a couple hours ago um but then if you get more specific on every then if you try to generalize more you get overflow you know you get tons of results. Um, I used to have that problem. So one of the ways that I bootstrapped my consultancy back in, I don't know, it was
Starting point is 00:27:31 seven Oh eight, whenever Twitter was first out there. Um, and I started realizing that a lot of people would, they, when they turn, when they needed the technical help, it was a lot of work to post a job listing, right? Or to put an ad in the paper or whatever your traditional means were to post for help. And it was really easy to just put something out on Twitter. I noticed a lot of people were starting to do that with specific programming needs. And so I wrote a little monitor,
Starting point is 00:28:04 similar to the one that you just mentioned, looking for specific keywords and then paired those with phrases. And mine turned into an RSS feed because I was just consuming RSS in the morning anyways. And I used that as ways of finding job leads, using freelance type stuff. But there was tons.
Starting point is 00:28:21 That's a great idea. It was super useful and it ended up being a way that I did get a lot of business that way. but there was a ton that's a great idea it was super useful and it ended up being a way that i i did get a lot of business that way um but it was full of false positives especially because like the word ruby is also a girl's name and you know you run into stuff like that and uh it seems like your way of doing trends or waiting for a certain proportional change probably flakes out a lot of the false positives so So it's just higher signal, less noise.
Starting point is 00:28:47 Is that what you found? Yeah, it does pretty well. It's not perfect, but it's low enough noise that it's useful. And for those, I just have it send me a digest email once a day. So I skim through them and it formats them so each one's a link to the search results on Twitter.
Starting point is 00:29:02 So I can pretty quickly see like, oh, no, that's totally unrelated. I can see why it triggered it. But most of them are actually relevant. And so I keep using it. I love how many ideas you have about ways of using that one single feature. I feel like I wouldn't have, I've never even figured if I put Netflix plus a word that I'll know when the movie's available.
Starting point is 00:29:23 Like my brain doesn't connect those dots on its own. Um, I'm sure there's a place for at least Hugin agents where you guys have a list of like, here's different ways that you could use it. But what about your, your specific Twitter stuff? Is there anywhere where that lives online where somebody could go for
Starting point is 00:29:38 inspiration of ways of, you know, being notified of an earthquake and Molly? I've, uh, I've written a couple of blog posts about it. There's some tutorials, and I know other people are doing it too. But I don't know of the user base of Kugan how many people are using Twitter. A number of people have said they are. And a bunch of people are using it in different ways than me. They use it for posting or for following a small group of people and rolling it up into an RSS feed. I also, I'm not sure that we've really sort of explained at a higher level how Hugin is wired together.
Starting point is 00:30:16 If you think that would be useful to talk about. Well, first, just give us a couple more use cases. I think we'll definitely do that. Sure. And we would like to, when we hear about that architecture, we'll probably talk about the specific bits because I think technically it's interesting. There's lots of moving pieces and you put together into a holistic system.
Starting point is 00:30:33 We want to hear about that. Just to continue to whet our appetites, you have let me know when it's raining. You have Twitter-based aggregation notifications. What are some of these? Those are your main use cases. What are some of the crazier ones that other people have done
Starting point is 00:30:46 that you're like, wow, that's really cool? Well, one of my favorites, mostly because it's just a big name, is that the New York Times used it to monitor some of their internal Olympics coverage a couple years ago. So I believe they were using it for sort of fairly traditional monitoring
Starting point is 00:31:01 where it was watching their own website and looking at their own output and then alerting if it didn't match expectations. But that resulted also, that was neat. It's cool to see that use case. And also got some contributions from them in terms of additional code.
Starting point is 00:31:19 It's nice when people stay involved and keep adding to it. There was another use case I heard about where someone was using it to download civic data releases. Like if governments released interesting data sets, they would watch those fairly hard-to-follow feeds and let them know in a more useful way if it happened. I've seen a lot. There's home automation stuff,
Starting point is 00:31:42 like turn on my porch light at my actual local sunset stuff like that you have listed on the readme just different things you can do with it one is create amazon mechanical turk workflows as the inputs or outputs of agents for example once a day ask five people for a funny cat photo send the results to five more people to be rated send the top rated five to people five other people for a funny caption send to five final people to rate for funniest caption finally post the best caption photo on my blog i don't know no one's doing that right that's great i mean i i tried it once and it mostly worked and then i decided i didn't need to personally run a funny cat blog, but it did work. Awesome.
Starting point is 00:32:32 Amazon Turk, if you know anybody using that to great advantage in any way that's not one of these fun kind of like, that would be cool. I think it's being used a lot in the machine learning and AI community to build data sets. I think that's the sort of most valuable use case is building a data set of human labeled information. You're labeling photos or annotating sentiment onto tweets or noting down the text regions of documents, of photos of documents, stuff like that. Where you just need to build these really large data sets for deep learning. Yeah, that makes tons of sense. Well, I think this is a natural place to break. We do want to talk all about the nitty-gritty details
Starting point is 00:33:10 of how Hugin works, the agents, the peak. What do you call that, a peak adapter, peak monitor? I don't know. You have a peak detector. You've got a nice agent event flow document. So some graph is fun coming up. Let's take a quick break break and we will dive into that on the other side if you're like me or most people out there you want to attach highly
Starting point is 00:33:32 available expandable block storage to your droplets on digital ocean and guess what the feature is here you've asked for it they've delivered kind of right now you can request early access the feature is coming in the summer of 2016 so i heard that the earlier you get on the list the earlier you get the feature so head to digitalocean.com slash features slash storage get early access do it today all right we are back and i don't know about everybody else but i've been my appetite has been sufficiently wetted i'm very interested hugen sounds really cool it can do lots of different things things that i would never even imagine to even want to be done until i hear about them and i think oh yeah that would be pretty cool um which is kind of the beauty of these
Starting point is 00:34:22 types of system is that they really are just a bunch of tools and ways that you can do things and you have to bring your ideas to them and make them do cool things. So, Andrew, talk to us about specifics, how it was built, how it works. You have agents. It appears to be a Ruby on Rails application. Can you break it apart for us and tell us how it all is wired together? Sure.
Starting point is 00:34:49 So it is a Rails application. It's actually a pretty traditional Rails application. We're not doing anything particularly unusual. Sort of my focus has always been on ease of use and ease of deployment and ease of development. And so it's not really intended for high throughput. You know, I wouldn't use Rails for a really high throughput application for data processing. But it holds up totally fine for sort of personal and business use. It's like small business use.
Starting point is 00:35:21 The basic wiring is that we have these models called agents they're the core object in the system there's many types of agents you know there's the some of the ones i've mentioned like the one that can talk to twitter and the peak detector and the mechanical turk agent there's a lot of other agents that sort of focus on outputting to systems like push bullet or push over rss or slack and then there's things like webhook agents that can both send and receive posts to remote systems. And then one of the more complicated ones is the website agent that can sort of scrape arbitrary websites in.
Starting point is 00:35:56 I think at this point, RSS and HTML and JSON and XML, it's gotten a little bloated, but it's very powerful. You can give it a set of CSS selectors or XPath selectors, and it can grab all the regions of a page that match and emit those as events. So that brings us to events.
Starting point is 00:36:18 Agents are connected together in an event flow graph. So agents can receive and emit events. Events just flow to all the receivers and they propagate down until they stop propagating. So you should avoid making loops. In theory, you could get yourself into a situation where you had an infinite loop. Although in reality, it doesn't happen.
Starting point is 00:36:41 I've never really had it happen. And then, so you have agents, you have events that they emit and receive, and they just propagate along. And then agents are modeled after sort of a simple reaction agent. So they have state, they have memory that they get to use however they want. You can have many instances of an agent and they each have their own memory. Then they just receive and emit events and events are immutable. So that's sufficient to build most types of systems where I need to store some state, I need to react to things. And then it means that there's a pretty simple API for developers to add new agents because it's just basically a simple active record model that you extend. You wire in, if you want to receive events, then you define a receive method.
Starting point is 00:37:34 If you want to check for events on a schedule, sorry, if you want to do something on a schedule, you define a check method, and the user can pick what schedule should run. And then you can use your memory if you need it, and you can emit events if you need to. Obviously, there's some more complexities. We have types of agents that can run continuously in a background thread and some other stuff like that but at a basic level it's really pretty simple yeah so you your your main user interface is the creation and the editing and the hooking up of the different agents to do what you want and then it shows you kind of the status of those agents and what they've done recently.
Starting point is 00:38:07 How does the scheduling system work? How does the backgrounding work? So we're running a background. We have two versions. It can either run multiprocessor or multithread. By default, these days, it runs multithread. We use Rufus Scheduler, which a ruby gem that does a good job of simulating both cron style scheduling as well as pure um sort of exact time scheduling is basically
Starting point is 00:38:33 cron um and we use it to trigger any set of registered agents on a certain schedule so when you make a new agent that has a check method defined, you can say, I want this to run at midnight every day or every five minutes, et cetera. And it will do whatever its check method does and do whatever this agent is designed to do. And then we just, in the background, use Rufus Schedule to make sure those run. I imagine, like we said earlier, you have 110 contributors.
Starting point is 00:39:03 Most projects will have a lot of kind of long tail contributors but only a few you know core people that that work on it seems to be pretty typical in that sense but is the majority of your contributors besides typos and minor bug fixes are they adding agents to the system is that the main way that people contribute to the project yeah I'd say that's the primary way. We do get a lot of small bug fixes too for the core system. But there's
Starting point is 00:39:31 probably the bulk of the contributors have shown up, added one agent that they needed for their use case in a pull request, and then they've sort of disappeared. Some of them show up again a year later with another agent or a bug fix because they've started to push the system. So yeah, I think that's pretty much true.
Starting point is 00:39:50 And one thing you mentioned is that you want to keep it as vanilla or as well as a person who's ran many websites and many services over the years I'm almost allergic to some of these systems because of the maintenance and I would almost always use a provided service even though I'm completely well aware that most of these startups disappear and I've definitely had them disappear right out from under me and so everything's a trade-off but maintenance is a burden um one that i still run to this day for my business is airbit which is a self-hosted version of like airbrake um for error reporting and it's just on heroku and it's they they do their best and it's a great project and i i love it but i still have to like update it.
Starting point is 00:40:47 And I'm always afraid it's on MongoDB, which I'm not as familiar with from a maintenance perspective. And I'm just always afraid that this next time when they do a release and I, you know, pull that tag down and push it out to Heroku, all hell's going to break loose. And now my reporting system's broken um what what measures have you taken to make deployment easy and just like that idea of not letting it die on the vine like keeping up with the hugen joneses as a user have you guys struggled with that and what have you done to make it so that people can deploy and and and not feel like it's a huge burden that's a great question it's it's a hard problem because you know most people haven't deployed a rails application before and that's not trivial um until fairly
Starting point is 00:41:33 recently we didn't have a great solution um we had tutorials on how to deploy a rails app with capistrano and we had example capistrano scripts, and example Nginx proxy scripts, but it was really for a pretty small set of people who were comfortable doing that. Recently, we've wrapped it in a Docker container, and that's definitely helped. So now you can use Hugin with Docker. As long as you link it to an external data source,
Starting point is 00:42:02 either Postgres or MySQL, in another Docker container, then it's trivial to just sort of re-download the new one and launch it, and it should be fine. We definitely make an effort to not break agents in a backwards incompatible way. So when you upgrade, we really try to make sure that the options that your agent has will still work, and we write migrations if necessary
Starting point is 00:42:23 to make sure that happens. I don't think we've ever broken people in a backwards incompatible way except for you know i don't think we've ever like had data loss issues where we've really broken people with an upgrade obviously there have been bugs that have been introduced um it is you know an open source project it's all volunteer it does break sometimes but overall it's it's been pretty stable um and i've tried to make very conservative technical choices you know we we haven't gone very far from traditional rails um we you know i've resisted pulling in new dependencies like redis or mongo even though especially with redis i'm a fan but i just don't want people to have to deploy
Starting point is 00:43:03 another component. It works with Postgres or MySQL, and we want to just keep it stable with whatever you have running. And the trade-off is that it's then a little hard to make it high throughput and really performant if someone's trying to build a system around it. We have a few users who have really pushed it to its limits with tens of thousands of agents running really, really frequently and monitoring very complicated flows. I've never had a need to push it that far. They start to run into issues where they're extending their database, which is too small, or the system isn't high throughput enough. But
Starting point is 00:43:42 for the most part, for the types of tasks that I've always wanted to use it for, which is personal automation or sort of small-scale business automation, it holds up pretty well, and it's not too difficult to deploy. You can also push it to Heroku. Deploy button. I think, yeah, and that works.
Starting point is 00:44:03 Last time I checked. So a bunch of people run it there as well. Yeah, Heroku's restructuring of their pricing strategy has limited the way people deploy hobby tooling to Heroku, right? Because it can only be on for 18 hours. That's right, and Hugin is intended to run all the time, so that did affect a lot of our users and um but if you upgrade to the first plan it's not too expensive and it does run it runs fine at the
Starting point is 00:44:32 base plan also runs fine on a you know five dollar digital ocean image or something like that so i mentioned keeping up with the joneses and i was just checking out your gem file uh previous to the call and you appear to be on the most recent version of rails 4 um all projects that have lived multiple years you know go through different versions of rails all your dependencies it is a complicated enough application that your gem files you know got 100 plus lines in it i'm not sure exactly how many gems are loaded on a regular basis but you do have a even though you're trying to keep it simple you still have a pretty rich dependency graph can you explain any trials and tribulations over the years of just
Starting point is 00:45:16 maintaining it keeping it up to date security patches has that been a struggle for you or has it been pretty smooth it's i, I mean, it's not trivial, but because we're fairly traditional Rails, the Rails upgrades themselves have not been particularly hard. Sometimes the dependencies are a little more complicated and we've always toyed with the idea of pulling agents into gems so that you can pick and choose exactly which ones you want. About two years ago, we refactored the gem files so you can turn a bunch of gems off and the agents gracefully just sort of disable themselves.
Starting point is 00:45:51 So if you're trying to run this on like a Raspberry Pi, which sort of barely works, you can turn a bunch of stuff off that you don't need just to reduce your overhead. And that works fairly well. It's always been this trade-off between, I really have resisted pulling everything into gems, even though it has a sort of structural elegance,
Starting point is 00:46:11 because right now it's sort of the polished monolith where if we make a change to the system, we could update all the agents simultaneously in one commit, and it's going to work. If everything's in gems, then we end up in sort of version management hell where we need to either own all the gems and update them all ourselves. Or if they're owned by third parties, we have to send them a pull request or ask nicely. And I think it's just,
Starting point is 00:46:36 I've been resistant to having to manage that. It's a little bit like my experience in the DevOps world between Chef and Ansible, where Ansible shifts with this really rich standard library. My experience has been that when we moved to Ansible, we got to stop using all these community-supported things that didn't work super well from Chef and just use the core library that was updated in lockstep with Ansible itself. And it was just much more stable.
Starting point is 00:47:00 So that's sort of where I'm trying to keep it. It does limit people's ability if I don't accept a pull request because the agent brings in a lot of new dependencies that I don't think most of the population isn't going to want. It makes it hard for people to get that. They could obviously use a fork, but if it were in gems, it would be really easy for people to just add exactly which they want. So there's a real tradeoff there. You call it a polished monolith. You might even call it a majestic monolith.
Starting point is 00:47:28 I heard that term recently. I think we all heard it. Let me pose this question to you because I'm looking at the MIT license. I'm seeing the years of work that's gone into this. And it obviously is working quite well. You have many people using it. And you mentioned that some people have come around and pushed it to certain limits,
Starting point is 00:47:47 whether it's the number of agents they run or how often they check or the types of things that they are doing. Have you ever considered the possibility of somebody coming by and saying, this is really nice as a basis for my new company, and I'm going to take Hugin, I'm going to wrap it with a new shiny new UI,
Starting point is 00:48:08 and I'm going to start, you know, some new company Inc. Is that something that you've thought about? Is that something that scares you? What are your thoughts on that? I would be totally fine with that. I kind of hope it happens.
Starting point is 00:48:24 Yeah. I think that it would be great if with that. I kind of hope it happens. Yeah, I think that it would be great if there's a population of my users who grudgingly run a Rails app, but don't really want to. But they love the power of Hugin because it is, in a lot of ways, more powerful than if this and that or Zapier. Because both of those,
Starting point is 00:48:41 you can't chain multiple agents together through a deep flow, as far as I know know I haven't used either in about six months but so Hugin can do some very powerful sort of flows of agents that you can't necessarily do somewhere else and you also can extend it so there's a population of people who would love to use it but don't really know how to run a Rails app and don't really want to use Docker and just want to use Hugin. And I've been hesitant to start a business around it because I don't think it's a huge business. And I don't particularly want to be in the hosting business myself. So although I am still slowly considering it.
Starting point is 00:49:19 But if someone wants to take Hugin and build a product around it, and I'm aware of a couple people who have been doing that, I'm totally fine with that. That's great. More users, more contributions. I mean, it would be awesome if they contribute back some of their work, which is likely if they want to get the goodwill of the community. So I think that would be great. Awesome. Let's talk about your community. There's lots of open source projects out there, and there's only so much limelight.
Starting point is 00:49:48 You have Selector Gadget, which had a little bit of limelight, but like you said, never gained major traction. Hugen seems like it's got the traction. It's a lot of people active, 110 contributors, like I said, 13,000 stars. People are using it. New York Times is using it or has used it. Take us back to the launch
Starting point is 00:50:07 and the initial reception, or if you had any delusions of grandeur, or if you had a marketing idea. How did it get traction? Very similar to other projects that I've launched that eventually got attention. Huguen
Starting point is 00:50:23 didn't get any attention when I initially released it. I wrote it and I put it, I think I posted on Hacker News in March of 2013, or a little earlier, actually. I think it was in like December of 2013, maybe, or of 2012. And, you know, it got like two stars or something like that on Hacker News. It wasn't, no one cared. But that's the exact same pattern that I followed on other projects.
Starting point is 00:50:48 My freebie finder site that I built in high school, I posted it at that point. I don't think Hacker News existed. It was Dig. Dig was what everyone cared about. Yeah. So I posted on Dig and it didn't go anywhere. And then I'm like, well, that sucks.
Starting point is 00:51:02 And then a month or two later, I reposted on Dig, talked some friends into voting it up. And it got thousands of Diggs, I guess, and got really popular. So Hugin had a somewhat similar trajectory where I posted it. No one cared. I posted it again. I don't think I vote-schemed in this case. I think I just posted it again in March of 2013.
Starting point is 00:51:25 That time, for whatever reason, it got to the front page, stayed there for a while, got some users at that point. And then I may have reposted it. I know it was on Hacker News again in 2014, and I don't remember whether I posted it or if someone else did. And then it actually was on Hacker News again to the front page last month, and I definitely didn't post it then. Someone else did.
Starting point is 00:51:50 So, you know, it keeps, I feel like every couple of years, it gets rediscovered and another wave of users and contributors shows up. Again, also with Yahoo Pipes closing down, there was a blog post that talked about it. And, you know, I've always made a real effort to write good read me's and to sort of invite people in and say hey this is every everyone's welcome and here's all the cool things you can do with this project and we'd love to see what you do with it and to have a an approachable read me um and that's always served me well just like making it approachable yeah I would just say I think this last round of Hacker News coverage was probably what spawned this show, because you can head across my radar previously.
Starting point is 00:52:34 And actually, 2012 was probably peak Hacker News for me, so I may have been one of your two upvotes there. I was living on the website back then. Don't check it quite so often nowadays, but people do. And I think it started getting tweeted about again and somebody mentioned it on our ping repo and another person emailed us. And so it was kind of like, these things just kind of bubble up.
Starting point is 00:53:00 And I guess if you're interesting enough and you stick with it because you have been working on it, it seems like maybe not non-stop but in a committed way um for a few years is you just kind of get these different rounds of attention yeah that's that's exactly what i've observed and that's been true on multiple projects you know it's a little hard to predict when when people are going to care and that as soon as a few people care and start talking about it, suddenly everyone notices and everyone suddenly cares. And it also needed a certain critical mass of agents and scale, I think, before it met enough use cases that people found it interesting. What does success look like for Hugin? If you
Starting point is 00:53:40 can look five years down the road and said, wow, that was a huge success, what would happen between now and then that would make that the case that's a good question um you know i've thought about trying to start a business around it but i'm not moving in that direction right now you don't want to be in the hosting business i don't really want to be on the hosting business and maybe i sort of have a blind spot but i'm having trouble seeing a large enough business around it. You know, it's conceivable that there could be a pro version of Hugin that's worked well for like other open source projects. Right. So I'm thinking about that. So that might
Starting point is 00:54:17 be one definition of success, but I certainly haven't committed to that yet. I think a more general definition would be it still exists and it's still getting used and it works. I really, you know, you mentioned longevity earlier, and I really care about sort of survivable software. One of the things I want to build systems that I can build and slowly extend for many years and into something that meets my needs. So I would be content if Fugan is just continuing to get used and it's continuing to solve problems for people. Yeah, I like that. Survivable software. You can go into marketing with that term. So I think business-wise, just looking at it,
Starting point is 00:55:02 Metabase rings a bell with the recent show that we had in the open source slash product business. And similar in certain ways, they're doing business intelligence or, you know, exposing data to more people in enterprises and small businesses. And it seems like what Hugin provides is an opportunity at so much information that people just don't even know that they need it but if you show that to them they really they immediately see the value even myself i look at this and think oh there's probably 10 things that i'm doing manually every week or that i'm not even doing at all because they require too much of my time um that a product like this could could solve for me and then you take that times all the small businesses and people who actually can't write things themselves because i tend to be the kind
Starting point is 00:55:51 of guy that's like oh just write this little one-off script each time you know to my to my shame um but many people don't even have that ability and it seems like unless you want to take over the world it seems like there'd be enough room for a, at least a small business. And I think there's a huge education side of that, which is expensive. Um, but maybe your, your Zapier's and your if are doing some of the education for, for you.
Starting point is 00:56:14 Um, and so, yeah, I think there's a possibility. I think that's right. Yeah. Um, and I'm definitely thinking about it.
Starting point is 00:56:22 That would be, that would certainly be an exciting outcome. And I know some of my other, um other core committers are definitely interested in that. So we'll see. Yeah, tell me real quick. We're going to take a break. But tell me about your other core committers. One thing that leads to survivable software or longevity or sustainability in a project is not having to do all the work yourself.
Starting point is 00:56:40 And it seems like you have some people who are right up there in fact one fella has more commits than you nowadays or total yep even though i think you have more lines of code committed but how did you get these other contributors and how much have they meant to you they've been incredibly important i mean it's been a team effort dominic and akinori have been written a huge amount of code um especially dominic. He did all of the Docker work, and he's been contributing really important changes around how we handle files, which are upcoming. In his case, I'm not entirely sure how Dominic first found Hugin.
Starting point is 00:57:18 He definitely sent some early pull requests and clearly knew what he was doing, and I invited him to be a committer if he would like to be and and he joined and then the same with akinori um he made some really important early changes it's been a little less active recently i think he's busy on his own projects but he's certainly around um and then we have a couple other less active committers who show up occasionally and do documentation or help with some Docker stuff
Starting point is 00:57:47 and we're always looking for more I'm just sort of keeping an eye on pull requests and if I start to see the same person submit a few well-tested, well-written pull requests, I make an offer because the more the merrier I completely agree with you that we need to spread out the load Cool, let's pause here for our final break and we will be right back here at the change law we have two emails we'd love for you to subscribe to the first
Starting point is 00:58:16 is change law weekly now we've been shipping this email for several years now we ship it every single saturday morning it's everything that hits our open source radar. It's our editorialized take on what happened this week in open source and software development. Go to changelog.com slash weekly to subscribe. And our second email is changelog nightly. Every single night we ship this email out covering all the top new and top star repos on GitHub at 10 p.m. Central Time. It's all the latest stuff on GitHub before it blows up. It's often our own radar. We're often creating shows and finding new people,
Starting point is 00:58:52 finding new projects, putting things on our own radar based on what we find in there. So we'd love for you to subscribe to that. Head to changelog.com slash nightly. And now back to the show. All right, we are back with Andrew Cantino talking about Hugin. Let's talk about the roadmap. What's in the immediate future?
Starting point is 00:59:12 You mentioned you've had a lot of help with one of your contributors working on how you're going to deal with files, which I imagine is tricky and a large feature. Can you tell us about that and about other things that are coming down the pipeline? Sure. So the file stuff has been entirely Dominic. He's been figuring out sort of how he wants to handle it. The current plan is to use sort of the concept of a file pointer. So events are JSON objects that flow between agents, and they're basically schema-less. So he's introducing, you know, a little bit of schema where if you annotate your agent as emitting file pointers,
Starting point is 00:59:50 then we can look in the event for, I think that's just called file pointer, which will be a reference to either a remote S3 object or a local file object, or I think there's a third case. I think you could just put the raw binary or text data if it's small, in the event. And then agents that know how to receive that, like a CSV parsing agent or a file appending agent, can receive that and do things with it. So reading files and writing files, kind of two separate things, but they interplay.
Starting point is 01:00:21 Would that play into an import and export type of an idea as well? Are you referring to between systems? Yeah, I was thinking between systems, but I guess you're thinking between agents? Yeah, well, or between systems because a lot of people use Hugin to, you know, when I post on Facebook, post on Twitter,
Starting point is 01:00:40 that kind of thing. There's often a request for, and please move my photos, and that's not something request for and please move my move my photos and that's not something we really can do very well right now um also often people are running you get an environment where they can't write files locally you know heroku or docker um and so we need to make sure that you can do things like f3 or remote uh blob stores so then you could even do like timed or event-based backups or something like that yeah that would be interesting you certainly could fetch a photo on a on a schedule and do
Starting point is 01:01:11 something with it you know make a i don't know make a time lapse or something would be cool yeah what else you got so files i think that sounds like it opens up a world of possibilities um anything else that you guys definitely want to get done in the next you know six months a year that um that you're thinking about i think the two most important next steps for us are um extending this concept what's called a scenario i haven't mentioned it yet but you can take your agents and basically tag them with a label we call it a scenario and then you can export them and hand someone else a JSON file, which has a set of configured agents in it, and they can import it and use it. And then one of the cool things is you can actually peer-to-peer subscribe to their scenario from your Hugin
Starting point is 01:01:55 instance. And if you click the update button, it'll go fetch the embedded URL for their scenario on their system, assuming it's public, and do a diff and merge it into yours. So you can actually sort of subscribe to other people's agents and scenarios, which are basically just collections of agents. The next step for that to really make it much more powerful would be to variabilize it so that you can have a set of options that you fill out when you first subscribe to a scenario, such as your API key for something that isn't embedded already in the options of those agents, or your personal location preference or something like that.
Starting point is 01:02:33 Right now, you could do it by editing the options of the agents once they've come in, and that mostly works, but it would be really cool to make a library of these, which leads to the second thing that we really need, which is a community site to share these scenarios. Yeah, that was where I was just waiting for my turn to talk because I would have said, where's your HQ or your place where people can just share their agents?
Starting point is 01:02:56 And I love that you'd be able to just merge your own fields into one you're subscribed to. It'd be super powerful and actually kind of necessary if you're going to have that kind of sharing going on. Here's a random question that may seem off topic, but here we go anyways. How do you guys deal with expiring
Starting point is 01:03:14 auth tokens when you're doing background-based tasks? Lots of times an OAuth token will expire and then usually a user would have to get involved and refresh their browser or do the redirect flow again. What does it do in those situations?
Starting point is 01:03:31 It depends on the system. We use OmniAuth embedded in Rails to manage the actual request for the OAuth2 token. And then it depends on the system. So for example, Twitter and Dropbox, I've never seen them expire
Starting point is 01:03:45 i think they have perpetual access tokens facebook definitely expires after it might be a month it might be a couple months and they don't offer refresh tokens so you do need to get involved it will just break agents have a concept of whether or not they're working so they'll turn red if whatever that whatever that means for the agent. Often it means they've successfully received an event or successfully created an event in a certain time window. They'll turn red and then you can update them. They also have a log of their own errors. Are there agents that watch the agents? Yeah, there's agents that can control other agents. Either reconfiguring them
Starting point is 01:04:22 or checking if they're working. Or notify you that you need to come back and fix this thing? Yeah. Cool. So that's roadmap. You got files, you got the community stuff, anything else you want to mention before we move on?
Starting point is 01:04:37 I think the community sites, the really big one where we certainly could use help if someone wanted to get involved. It's its own chunk of work and it'd be really exciting if it was tied back in some way to the core human system so that you could either preview the networks of agents or, you know, have conversations about them and how they work. And it would be even more interesting if it was distributed so that, you know,
Starting point is 01:05:00 if I run much like hotline, which I mentioned earlier, if I run a tracker and it knows about a bunch of scenarios, someone else could replicate it with a feed and run their own. And it would be decentralized at least a little bit so that we don't have to run a core one. Or you could set up a commerce system. You could sell your agents and it'd take you all the way back to the days of your Perl scripts. And you could build a business around selling little scripts. That'd be awesome. But open source wins
Starting point is 01:05:25 so let's talk about roads to getting involved from two angles first of all what's the happiest path to becoming a Hugin user so deploying my own instance and then setting it up and then secondly from the development side if I want to get involved from
Starting point is 01:05:41 that angle where do I start and where do I go so start with as a user so if you're a user and you're not planning to develop on Hugin, I would recommend either Docker or Heroku. They both work quite well. If you are planning to develop on it, then you're going to want to make sure you have a local checkout and a fork. And it's not particularly hard to run locally. And then you're probably going to want to push your updates either with Capistrano or just pulling from your public or private fork of Hugin. And we have a pretty good tutorial that Dominic wrote
Starting point is 01:06:13 about how to take any sort of base Linux system. I think Ubuntu and one or two others that he supports and just full instructions on how to get it set up to run hugen as a rails app including monitoring and backups and stuff like that but that's obviously fairly involved and i wouldn't do that unless you're planning to also develop and want to make it really easy to push to your own instance so what about once i get up and running now i'm going back to my thoughts on managing a an install and i'm on the docker
Starting point is 01:06:45 version um do you guys have like specific releases that you do like when do i when do i update my stuff like how does that work once i'm running but i want to get your latest features so we use the docker hub automatic builds so whenever master gets updated, it updates the Docker build. And so you would just have to reprovision it. We don't really have a great versioning system. I've been meaning to figure out a good way to do versioning
Starting point is 01:07:14 on top of a Rails application, but I don't feel like we have a good answer right now. We try really hard to keep master green and correct, and I think we, 90% of the time at least, that's true. We have automated builds and automated Docker builds.
Starting point is 01:07:31 But I think what most of our community does is just pull when they see a new interesting feature go across the changelog, so to speak, of our releases. And either they saw a pull request get merged or I update the changes file, and they want that change. Very good. Well, I guess that would probably lead us directly into our closing questions. And I'll just start with this one because it seems like you have a lot of needs. You're an open source project with a good group of contributors, but there's lots of fun things coming down the pipeline and lots of places where people can contribute in big ways.
Starting point is 01:08:07 So with that in mind and with how you get going on development, if you were going to have a call to action for the open source community, if you're speaking directly to the community and they could help out in some way, what would you say to them? Well, I'd say welcome. We would love to have you. Hugin is really easy to get involved with because you can always add new agents,
Starting point is 01:08:29 which are very modular. We just expect you to write one Ruby file for the agent and one Ruby file for the spec. And we're happy to help if you haven't done testing before to help you write your RSpec. Beyond that, documentation and tutorials and updates to the wiki are very much appreciated. I think they're as important as code.
Starting point is 01:08:50 And a bunch of issues have been tagged with Help Wanted. So if you're looking for an interesting project to work on, and we've had a number of people just show up not convinced they'd ever used Hugin before and just pick a Help Wanted issue and start working on it. That's great too. I like that. So actually, you guys use GitHub issues, right?
Starting point is 01:09:07 So in there, you actually have a label called Help Wanted, and you will tag specific issues with Help Wanted. That's right. And any issue, people are welcome to get involved with. These are just ones that are... Like explicitly waiting for someone to pick them up. I think that's a good idea. Yeah.
Starting point is 01:09:22 Ideally approachable, too. I try to tag ones that i feel like a fairly new user could sort of make progress on right i think that's a great path to getting involved is to go out there check out you know the issues and look for the help wanted label start picking them off and then eventually you'll probably be ready to move past those into the more you know complex things very good well let's move on to our second closing question and this one is programming hero so if you had to name somebody who has inspired you or mentored you um or you look up to in the software community who would that be and why i think i would pick jeremy ashkenaz ganas um he created backbone underscore coffee script um he's just super prolific and has sort
Starting point is 01:10:10 of built the the backbone perhaps of uh sort of modern web modern javascript development you know backbone itself is great and it's fun if you want to sort of have a small scale component that's really stable and that you can rely on and build on and then it's informed um much of more modern uh deeper applications like ember um and then coffee script as well had a huge influence on new javascript and was really formative i'm very impressed with basically everything he's built i'll get my aim in on that one i'm a big fan of his as well and he also seems to be like traveling the world on a on a bike or something which uh which is what i heard inspiring as well uh and you know makes makes me quite envious um but very as you said prolific guy very interesting stuff and uh actually interested in getting him on the show let's do the next one so
Starting point is 01:11:05 hugen came across our open source radar again recently um we like to ask our guests what's on their open source radar so what's something that either you haven't played with yet and you want to or maybe you got a taste of it and you want some more if you had a free weekend and you weren't working on hugen what was a project or a couple of them if you have them that are on your radar that you'd like to tell us about uh well so i've started tinkering with rust um just starting it's been interesting and very different than many languages i've used um so i've been enjoying that and then be a lot more than a weekend but i'm starting to think about sort of conversational interfaces
Starting point is 01:11:46 like Siri and Cortana and Google Now. And I really feel like there's the opportunity here for an open source project to be innovative there. Because I think Siri and Cortana and those tools are a lot like AOL before the internet. Like it's one company trying to catalog all the world's information, trying to catalog all the things a user might want to do. And that's a ridiculously long tail, and it's just never seemed realistic.
Starting point is 01:12:14 And I feel like AOL was replaced by HTTP and the open internet because it's the obvious answer to distribute the problem. And it seems like something like Siri would be better replaced by an open protocol where you route requests to appropriate agents on the open internet that can meet your needs and take actions for you. I don't think Hugin will evolve into that. I think it's a pretty different type of architecture,
Starting point is 01:12:39 but it certainly got me thinking about it. I think there's something there. I feel like it's not going to be single company systems in 10 years. Yeah, I think that's interesting. I hadn't considered an open version of that. I feel like the barrier there is probably integration into the operating system and the devices out there, which are things that you can work around
Starting point is 01:13:02 but would make it a challenge. Challenges are always good to get people using it. Yeah, I agree. I think somebody, I just, something that was either in our weekly newsletter last week or we put it on Twitter, had an API into Alexa, which I think is Amazon's tool that drives the Echo and such products. And I think they at least are exposing that as an available API now. You can't actually decide how it responds, so it's still a black box.
Starting point is 01:13:32 But I imagine some interesting open source will be built around those kind of things. Yeah, it's a really interesting problem space. I think that more and more interaction with computers is going to be conversational. Because for many types of things, you just want to talk to it the way you would talk to a person. Go solve this for me. Absolutely. Well, Andrew, thanks so much for joining us. This was a blast. You've piqued my interest. I might actually go and get this thing set up and put a few things in there and see how it goes despite my deployment fears um good luck i'm expecting some pull requests i only do pull requests in anger so uh so you might have some
Starting point is 01:14:14 of that going as well but uh all feedback excellent i guess uh but thanks so much for listening stay tuned we have a bunch of great shows in the works. As we've been talking about, we are having Matt's on soon to talk 20 years of Ruby. Also Raquel Velez and Sarah Chips of Jewelbots are all coming soon. So if you haven't subscribed yet, what's your problem? Hit that button and
Starting point is 01:14:37 come back next week. I want to thank our sponsors this week. CodeChip, DigitalOcean, Rollbar, and Truesight Pulse. And, of course, we want to thank you, the listener, for sticking with us. We appreciate everybody who listens to our show. And until next time, we'll say goodbye. Outro Music

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.