Programming Throwdown - Erlang Programming Language

Episode Date: April 8, 2011

This show covers Erlang, a multiprocessing function language. The show talks about latest updates in C++ and java, then talks about open sourcing hardware. The tools of the day are MS Depende...ncy Walker, a DLL resolver and Keepass, a password multiplexer. ★ Support this podcast on Patreon ★

Transcript
Discussion (0)
Starting point is 00:00:00 programming throwdown episode number three erlang take it away jason hey how's it going so we're in a we're in a live setting today which is different usually this is over Skype but today we're here playing some board games hanging out over at my place so we decided to use the Omni mic which looks awesome. Yeah does it looks pretty cool makes you feel like a real radio personality right? Yeah yeah in Mars in the future future martian radio yeah i'm still convinced that patrick bought this at a pawn shop in the future nice all right well you got any news for us um so uh probably one of the biggest things that has come out is the iso standard on c++ uh came out was it March 28th and this kind of finalizes what's been C++
Starting point is 00:01:08 OX which is now C++ 2011 and has a bunch of different additions you know we talked a little bit about C earlier and you know we might do show on C++ later on and one of the biggest things is this adds a lot of kind of the features of higher level languages, like some memory management. So it has an auto pointer and a shared pointer and really has a lot of awesome features that will make C++ programming a lot easier. I mean, C++ right now still, you know, dominates most of the industrial software world. So something like this is big news. Yeah, unfortunately, I guess they missed their deadline with the OX thing,
Starting point is 00:01:52 and now they have to call it O11? Yeah, that's right. X was not just a one character, I guess. It was actually two. But yeah, I mean, that's a big deal. So it'll probably take a few years before it starts working its way into the mainstream compilers and stuff. Yeah, so it's already in, I think, that's a big deal. So it'll probably take a few years before it starts working its way into the mainstream compilers and stuff. Yeah.
Starting point is 00:02:06 So it's already in, I think, GCC and the latest version of Visual Studio. Okay. But, yeah, by the time, you know, other, you know, by the time those actually become adopted by corporations, I mean, there are some companies that are still using GCC 2.9, you know. Yeah. Or Visual Studio 2005. Yeah, that's right so by the time you know people move on to using GCC was it 4.5 I think is the one with C++ 2011 or Visual Studio 2010 you know it's probably going to be like you said you know five years from now at least something to look
Starting point is 00:02:40 forward in the future with our better radio equipment. Yeah, that's right. And our better C++ compilers. Yeah, definitely. All right. Well, I had a news story that is solved this week about Google hiring the inventor of Java, the guy who actually holds some of the patents there and worked for Sun, now Oracle, on creating the Java language. And they hired him to work on android which of course android runs um a java virtual machine the dalvik virtual machine their own version own implementation of it and additionally are being presently sued by oracle yeah um on in regards to some patent
Starting point is 00:03:17 infringement that's alleged there and so they hired the this guy who's really key to the invention of java and there's a you know some speculation about exactly what they were thinking there. One, to obviously make the Dalvik virtual machine better, you know, get the guy who is in the know, get him there, get him working on it, make it, you know, just better. And, you know, also this guy is, you know, pretty well respected. Java is very popular, very commonly used. And it's, you know of he's kind of a star so i his name is escaping me right now but i mean basically he is able to james gosling okay so but i mean him being in google now is going to mean people are going to want to go work at google not
Starting point is 00:03:59 that they're of want of people wanting that work there any more than they already do but now they're going to recruit even more top talent to go work there and you know want to work next to to mr gosling there and you know be with this kind of i guess rock star yeah i think that maybe um someone one of the vps at google you know is getting programming language inventors a little confused with pokemon because he's trying to collect every single one of them. He's already got Guido for Python and now James Gosling. The guy who invented Go already worked at Google,
Starting point is 00:04:35 the Go programming language. So yeah, it's kind of an interesting... So maybe they're cornering the market on new programming languages. Yeah, it's quite possible. This is going to make life difficult for us. Or maybe not. Who knows?
Starting point is 00:04:47 But we want to do a different programming language every two weeks. And if Google buys them all, hopefully they won't consolidate them. Hopefully they'll continue to. Maybe make a diversity. Get them working on new languages. Yeah. That would be cool. Yeah, definitely.
Starting point is 00:05:02 Good stuff. Talking about Google. Yeah. Well, actually, one thing relating to what you were just talking about, it's interesting that patents are becoming more and more of an issue. And Google seems to be getting sued left, right, and center over different patents. They're getting sued over their search engine, which is not necessarily patent-related. But they're getting sued over this patent issue with Sun and they are in they're right now the highest bidder on Novell's um patents so basically Novell's broken
Starting point is 00:05:31 apart and they're selling you know different pieces of that of that organization and Google explicitly is out to buy the patents and from what I read on their blog they basically they don't necessarily have an interest in the specific patents they're buying. But for them, it's sort of like this cold war where everyone needs to stockpile these nuclear patents. And, you know, whoever has the most, you know, can kind of threaten boss everyone else around. And Google feels like they're getting kind of bossed around since they're a newer company. So they're trying to, you know, acquire these patents. And there really needs to be some serious patent reform i mean yeah i agree we need patents are a good thing i mean in in general but when they're improperly applied it can be disastrous and i
Starting point is 00:06:15 think this kind of getting there with computer programming and some of the stuff that they got going on in computer patents is just some of it's pretty ridiculous and it's going to cause more harm than good and um like you said i agreed that cold war analogy is fairly apt i guess that you know mutually assured destruction so if google buys up all of novell's patents then we'll find something in there to sue anybody who tries to sue them exactly it's just kind of go around and around and around and we're not lawyers at least oh no i'm not but don't take this as yeah legal advice but uh definitely i mean it's an interesting thing and and lawyers win right you know get more money to go after more people and file more suits yeah but um hopefully there's some some silver
Starting point is 00:06:58 lining for the programmer somewhere that world will be a better place because of all of this yeah i mean i've always been a fan of the of course you know this doesn't work in too many companies but but some of the companies have adopted a philosophy of sort of catch me if you can you know like they're on the cutting edge and uh they this is basically the premise behind uh you know commercial open source is the idea that you put something out in the open and by doing so you take a product and turn it into a standard so like open gl for example is a standard versus direct x which is a product and so google's done with this with many different technologies the g unit the google unit test framework for example that's just a framework that they could have tried to market to enterprise
Starting point is 00:07:42 companies but now they've published it open source and so many people have jumped on it that it's become a standard. And now they are sort of in charge of that and they can kind of mold that and they can also act as an advisor for that in a commercial setting. But yeah, I mean, the patent thing, there's so many people who don't subscribe to that catch me if you can philosophy and want to sort of, you know, actually own things that they have researched for extended amount of time. Yeah, it's hard. I see both sides of it. But I mean, I think most people agree, even outside of software and technology patents, the patent system is kind of problematic right now.
Starting point is 00:08:22 And right. A lot of issues going on there. Well, I guess at some point maybe we can have a longer discussion about this, a more intelligent, or maybe get somebody on it to talk to us a little bit more about the intricacies that lie there. Yeah, yeah, definitely. I think it's a good idea. So my previous transition failed when I said that, you know, and talking about Google, we had google hires inventor
Starting point is 00:08:45 java and google sponsoring a code jam what's that what's a code jam yeah that was between your fingers when you do a lot of coding in between like the fingernail you have sometimes the keys you know they start to scratch off and they end up kind of between your fingernail or what gets down between the keys when you're eating your sandwich and typing yeah that's right that's uh that is definitely co-gym we want to avoid that but the uh this particular co-gym is actually a programming contest and so this is uh this is quite interesting there's several um you know contests like this so for you guys who are still in college or even in high school they're starting the ACM which is the Association of Computing and Machinery is hosts collegiate programming challenge and so it starts at the starts at the I guess the regional level so the southeast United States is one region
Starting point is 00:09:40 North Africa I believe is a region basically the entire world is divided according to population and if you do well in your region you can move on to the Intercontinental Programming Challenge where they try to find the best programmers in the world at the collegiate level. There is Topcoder which is another competition for trying to test your mettle against other programmers and uh this is you know yet a third one the google code gym this one's particularly exciting it comes around once a year um there's many different puzzles um you know at all different levels and uh they uh some of the prizes um get serious i mean they have a ten thousand dollar top prize
Starting point is 00:10:23 just cash. Nice. But yeah, I mean, you could also bet that Google will be, you know, sort of interested in the people who win and is going to try to follow them, you know, throughout their career. So is this open to just regular working people or just to college students? Oh, good point. Yeah. So I believe the Google Code Jam is open to everyone. Yeah, that's right. So according to Google, if you are the code version of a ninja trying to master your grappling hook, or a chess grandmaster, or a Taoist philosopher explaining the deep truths of the world to your followers, if you're like that, but on the coding plane, you know, so I guess that extends to everybody. Nice.
Starting point is 00:11:10 You can participate in this. And, you know, Patrick and I have both done programming competitions in college, and I've continued on, you know, judging and writing problems and things like that. And I can tell you it's a lot of fun. It's a great way to meet some extremely talented people and also to sort of you know hone your skills and to learn you know more about programming and it's a nice slice of humble pie yeah definitely there's one person who's just awesome and amazing and we all envy you and wish we were you and you do really well at everything you do yeah you
Starting point is 00:11:44 probably end up eating a big slice of humble pie when you think you're ninja amazing awesome stealth skills and show up on one of these things and get smacked down by the you know 17 18 year old kid who's just a programming rock star yeah yeah definitely there's people who just have extraordinary talent and uh you know we just but i think that you know everybody regardless of you neither of us are uh are that level and uh probably many of you at home aren't best of the best but uh you know you could always improve and get better definitely definitely take it as a challenge rise to the occasion and say i'm gonna learn and get better and show them who's boss that's right yeah we might not do three on three basketball down the street. That's right. We might not do three-on-three basketball down the street,
Starting point is 00:12:25 but we could do some coding ninja. You can go baseline, take it to the hoop with your C++ and Python and the different things that you've learned on the show. One other thing, too, is just the, I feel like a big part of it is being able to just write code quickly. I mean, that is one of those things, you know, often, you know, many of us work 40-hour-a-week jobs, and we have, you know, the luxury of spending a day kind of thinking about how we're going to tackle a problem. And often the things we work on take months, so they require, you know, an architecture.
Starting point is 00:13:00 But this is a unique opportunity where someone gives you 15 minutes to write something that you know you're just going to throw away in an hour or so once it's done. And just being able to consolidate your thoughts and just put them out in the code, that is just a really awesome skill to have and it's a lot of fun to execute. Yeah, definitely. I think there's a balance there, getting code done fast and getting it done right. Yeah. It's good to make sure you have both sides of that coin yeah definitely that's good so i guess uh do you have i think you have some news on facebook oh yeah so um saw the last couple days that facebook open sourced its server architecture its data center how it does so all of these big web companies serve up you know i guess millions billions of pages a day, you know, and it takes a lot of big iron workstations.
Starting point is 00:13:49 So I guess big iron is mainframes and stuff. So it's a wrong term there. But a lot of very large servers and very big data centers to do the kind of processing that they need to be able to provide the services that are, you know, they're bread and butter. And so there's a lot of black magic, you know, trade secrets that go into exactly how you do stuff because little things become a big deal. Yeah, just to put it in perspective, I have the Facebook statistics up. So that they have more than 500 million active users. So, and then it says 50% of our active users log into Facebook in any
Starting point is 00:14:27 given day so think about that in one day 250 million different people go to Facebook and do something you know different you know at least they're either gonna look at their own page which is completely different almost entirely and then you know they might do some things that are shared but for the most part they're all you know creating content looking at content of people in their neighborhood and that the magnitude of the amount of data and the amount of information that they have to yeah and different than even a Google search or serving up a static web page or you know there's a regular web blog or something.
Starting point is 00:15:05 I mean, Facebook has a lot of rights to their databases and to their things. And that's a whole different architecture and art that goes on to that. So these data centers, they have, you know, things that normally we would take for granted, like how close you are to a power generation plant. So they try to locate a lot of these next to really cheap sources of power, because it makes a big difference. So in cities with large hydroelectric dams and stuff like that, that allows them to get the energy really cheap. And even cutting unnecessary things out of their motherboards and off their process, off their, you know, server racks that aren't needed to save that last little, you know, few watts of power. It makes a big difference when you're talking, know thousands upon thousands of machines you know running and keeping them cool so they was reading they don't use air conditioning like normal they
Starting point is 00:15:51 use this they spray a mist of water that evaporates and the evaporation makes the air cooler and then they blow air through that and use that to do the cooling for these data centers and it's very interesting and Facebook I guess has been talking about that they even use that heat that's generated in the server room to heat the other parts of their building during the cooler months. They don't have to run heaters and stuff. And so these server rooms can get pretty hot, all this energy going in, it can be expensive. So anything they can do to save money, to save power, which ends up leading to money to do things faster, do more with less is a good thing. And so people are, you know, kind of saying, well, why did Facebook open sources?
Starting point is 00:16:27 If it's so proprietary, if it's so important to how they do things, you know, what's the incentive there to open source that? And so there's speculation abounds. Of course, one is just to give back. So a lot of these websites, you know, at least start off on open source stacks of software. So some people are trying to say, well, maybe they're, you know, just trying to put that in the hardware and say, let's open source stacks of software so some people are trying to say well maybe they're you know just trying to put that in the hardware and say let's open source this another jason pointed out earlier in his talk about patents is that if facebook can release kind of an open open book on how to do data centers and they can get other people who are small like them so i think facebook currently um is some some you know tenth the size of Google
Starting point is 00:17:05 in terms of money and earnings and stuff. I don't remember the exact number. I'm probably completely off on that. But they're not as big or as established as Google. So Google's had time to go build all of their web servers up and get everything together and have it made their way. Facebook's kind of trying to move more aggressively and doesn't have that inertia behind it
Starting point is 00:17:22 to get that stuff done. So one way they can outmaneuver the other guys, Microsoft and Google and Twitter and whoever, right, is to say, like, hey, let's open source this. Let's get people to cooperate with us. And then they, you know, become help to find the standard and they win in the end because they're helping others and then other people contribute back and give new ideas and bring more to the party. And as a group, multiple companies work together to make a bigger entity than their enemies, basically.
Starting point is 00:17:48 Well, not their actual enemies. It's really interesting because it's sort of the inverse of what traditionally happens, which is, let's say, Linksys, for example. So Linksys wants to sell the router. They want to sell the hardware. And they'll give you the firmware updates and all the software updates for free because they want to sell this piece of equipment. And as we move more to a sort of service-oriented industry, we're going to find exactly the opposite of that, where
Starting point is 00:18:18 the hardware and the actual infrastructure doesn't really matter. And they can give all of those secrets away for free. But what is important is the service that they're providing and the actual infrastructure doesn't really matter. And they can give all of those secrets away for free. But what is important is the service that they're providing and the user base. Yeah, it's interesting. It's a new approach. And I like to kind of open source this stuff. That's interesting. And putting that into new areas, another thing that's a little off topic, but some open source electronics that are interesting like hobby electronics there's like the Arduino or
Starting point is 00:18:46 some other people who do kind of open embedded devices the Beagle board, there's another one, the Panda board Gumsticks I don't know if the Gumsticks is how open are they? They use Angstrom Linux. Okay, so running it but even to the point of some of these
Starting point is 00:19:02 like the Beagle board and the Arduino are open source, like the actual, you know, they'll give you all the stuff necessary to make your own boards if you want to. Oh, like the pin layout. The pins layout, the PCB screens, whatever. You know, I'm getting way outside of my area of expertise there. But this is a really interesting thing because in the past,
Starting point is 00:19:18 that's how you make it, right? So, you know, people might say, well, we'll release the open source to this, but it's not really necessarily all that valuable. But these guys are releasing everything. So if you wanted, you could we'll release the open source to this but it's not really necessarily all that valuable but these guys are releasing everything so if you wanted you could just do it the same i think they still protect some things like you can't call it an arduino if you don't have permission from them or whatever just so that the idea is being that people don't make inferior products or cut corners or do stuff wrong and then still be able to use the name but yeah they kind of release everything and make it gets better because of that you build
Starting point is 00:19:45 up a community around it and then you know it's able to be better than if you spent time and effort on your own and so it's uh plus you get goodwill um from the community at large people who say oh we like that you do this this is a good idea right and so then they kind of like you they buy it from you they support you uh even though financially it doesn't make a lot of sense because somebody else could do it and do it cheaper but they want to go to you because you did this like you did something awesome and nice right and the community is a really important word because you know really ultimately that's what facebook is all about is it's about the fact that they have this gigantic user base, this 250 million users a day. And even if the source code to Facebook, say, got leaked out,
Starting point is 00:20:30 you wouldn't see just 10 Facebooks pop up with 500 million users. I mean, they have dominated that community. And as long as they're providing good service, there's so much momentum there. And so by open sourcing something, you can generate a lot of excitement. I mean, everyone wants to try something if it's free. And if they think that they can make it better, even more so. And so you can establish yourself as sort of like a dominant figure in, you know, technique X.
Starting point is 00:20:59 So if you're out there and you are really into, you know, I don't know, like automatic autonomous fishing. I'm just making something up. And not the pH fishing, but actual fishing, like with a robot arm. A rod and reel. Yeah, that's right. And real water. Yeah, and not like. And real sun outside.
Starting point is 00:21:16 No grandma credit card numbers or anything. But, you know, you could open source all your autonomous robot fishing software and then you could be sort of on top of the world there. The robot fishing king. Yeah, that's right. And that could sort of carry you through that. You could make money by just being the authority in that area. Interesting, doing consulting and doing other stuff. Yeah.
Starting point is 00:21:40 Making appearances because of your pure awesomeness. Yeah, and then you can invent the, you know, fishing language language and then google will hire you and then we'll talk about you yeah oh man this is great we need this is good we need to get someone who knows how to fish get that ladies and gentlemen get that started um yeah that's really interesting oh before i forget we have some reviews in iTunes. That's right. Or at least one we know about. And so, oh, the username. Let's give them a shout out.
Starting point is 00:22:09 Yeah, let me see. Go ahead and open it up. Let's find it. Let's fire it up. Let's give them a thank. Somebody wrote us a nice review, and we've gotten some comments before on our blog. Now we're getting some reviews on iTunes. Thank you guys for doing that.
Starting point is 00:22:20 We recently checked how many downloads did we have of our first two episodes? We had 152 episodes 152 152 that's nice but i think we can do better come on team share with your friends tell about the awesomeness that is programming throwdown yeah and uh we'll see if we can't get these numbers to go up a little to you know make this show kind of a cool thing we like we like it we enjoy it i think we're having a good time and i hope you guys are too so you know rise let us know if you like it tell us what you would like to see hear about topics languages you'd like to cover maybe you've invented a language you know let us know and uh you know we're just interested
Starting point is 00:22:52 to hear from you guys and you know talking about open source and community you know i i guess it's a goal but we like to be able to make this kind of a community thing and you know have feedback from our fans and from you know not be just about jason and i but about the community at large it'd be kind of cool you know yeah be a part of that and if you guys have any requests for any particular languages or anything you're interested in if you want to sort of change the format or if you want to if you if you are really an expert on a particular language and uh would like to chime in and be a guest host or something like that you know uh feel free to shoot us uh shoot us an email at programmingthrowdown at gmail.com and give us
Starting point is 00:23:31 your feedback yeah or if you uh don't like what we say and you want to have a debate on the air so we can tell you how awesome we are and throw it down that that'd be good you know if you don't like the way jason sounds and you think we should vote him off the show no no uh no i'm just teasing we love you jason oh thanks so um okay we got it's def to d-e-f-t-e-o so uh thanks for uh thanks to the love he says love the podcast explanation oh just one explanation point i thought there was multiple ones. That was a fake out. I thought there was two. I got excited. Two explanation points. You know what?
Starting point is 00:24:07 This is radio. There's four exclamation points. Oh, yeah. And if you see anything different, that's because it got edited between now and then. Yeah, yeah. I think he's editing it right now, actually, and making it one. Oh, no. We're going down in explanation marks.
Starting point is 00:24:21 That's right. But before he does that, he's going to make it eight. So anyways, if you guys like the podcast, definitely give us some feedback. We really appreciate it. You can post on the blog. You can post within iTunes. So that's all good stuff. All right.
Starting point is 00:24:37 So tool of the bye week, Jason. Tool of the bye week. So my tool is Microsoft Dependency Walker. Is this like an old person walker? Like the thing with the tennis balls on the bottom? It does. There are tennis balls, but they're the kind of tennis balls you want to throw at your computer. And they're bricks.
Starting point is 00:24:58 Playing tennis with bricks. Yeah, usually when you feel like playing tennis with bricks or just running your head into a brick wall that's the time when you know it's time to break out microsoft dependency walker because all right dlls are are uh you know there's the common phrase dll hell which originated from you know windows 98 and just the disaster it was back then and it's gotten a little better but not substantial so this is the magic of dependency walker if you ever run a program and it says you know error this function not found in opengl.dll or error you know direct 3d function not called something very bizarre one of these
Starting point is 00:25:40 you know message box pop-ups that that that happens before your program even starts running. This is probably because of a bad DLL on your machine, especially if this is a program that you downloaded, some program someone else made, like a game or some app that you assume has been tested by the person who you bought it from. You could assume that it's probably something on your computer. It becomes very difficult then to isolate that. So how do you know what version of OpenGL.dll you have or, you know, what version you need
Starting point is 00:26:13 or where that file actually is on your computer? Because it could be anywhere in your path. So what Dependency Walker does is you give it an executable and it goes through and starts to load the executable and every time the xe asks for a dll it goes through and recursively you know puts that dll in this list and then asks the dll hey what dlls do you need and it keeps tracing down it builds this tree structure of all these dlls with the version number and the functions and if any of the functions are like mismatched or wrong it'll tell you exactly
Starting point is 00:26:49 which ones and where they are and this becomes really important when you get those just absolutely bizarre errors at the startup of your application no you never get bizarre errors on Windows that never happens.
Starting point is 00:27:06 Never. Yeah, really, you know, you get just the weirdest errors on every OS on startup. You know, like, let's say you're running Excel and you're editing some graph and you cause something crazy to happen. You try to edit too much data or you find some bug in Excel. It'll usually crash and it'll have some nice, you know, send this report to Microsoft, or, you know, Firefox crashes. It has this whole bug system that goes across the Internet.
Starting point is 00:27:32 But if something crashes in the beginning, like on startup, yeah, you get nothing. It's like that error negative one that you get on your Apple II or whatever. I mean, it's just brutal, and it seems hopeless. Your computer has dysentery oh no all right i just i just derailed jason now so he's rolling on the floor literally when you're when your computer has serious like intestinal problems you bust out this dependency walker and that's right oh dependency walker is the peptto-Bismol. That's right.
Starting point is 00:28:07 Oh, dependency walker is the Pepto-Bismol for your DLL needs. Yeah, it takes the dump out of DLL for sure. I think that one of the important things too, dependency walker, is letting you know when you have things installed in non-standard locations. So sometimes you'll install a game and you'll restart your computer and something will be fundamentally wrong with your entire computer. Like your Aero desktop won't work or something very bizarre will happen. It's good to run that dependency walker and realize, oh, it installed this OpenGL.dll
Starting point is 00:28:43 and now Windows itself wants to use this crazy DLL instead of the original, and it helps you sort through all those hard-to-fix problems. Yeah, it sounds like something definitely to have there. Not an everyday tool, but definitely something to have at your disposal for those really sticky, annoying situations. Yeah.
Starting point is 00:28:59 Good pick, good pick. Yeah, and one last part on Dependency Walker is if you're writing applications so you're on the other end of it you're a developer and you want to make an application that's not going to throw up when it runs on someone else's computer which is a good thing to have as a goal yeah i mean you don't want to spread dysentery you don't want code jam all over everybody else's computers that's right so you can run dependency walker on an exe you made, and it'll return and say, hey, this exe you made, it needs this version of OpenGL, and it needs DirectX 2011.dll. So you can infer, oh, if I give this to somebody and he hasn't updated his DirectX in a year, that it's not going to work.
Starting point is 00:29:44 And so you can really get a handle on how to deploy software using this program. Nice. So what does it do if it errors and says, you know, I need DirectX 2013? Right. So if you, you know, if you went to the, went with Patrick to the future where he bought this microphone and used DirectX 13, brought it back to the present and ran Dependency Walker on it, it would try to match up the current version of DirectX. But if there was some function that didn't exist in DirectX 2011, or if it just couldn't match them because the names weren't, they changed the name of the DLL or something like
Starting point is 00:30:20 that, it'll actually point at the specific function of the specific file it's missing. Interesting. So it doesn't make any recommendations, though, about how to fix it? No. It's a little lower level than that. It'll make high-level recommendations like, you're missing this DLL file, or this DLL file is missing this particular function. And from there, even without knowing what that function does, at a high level you can say,
Starting point is 00:30:46 DirectX.dll is missing a function. Let me update my DirectX. Oh, that's a good point. Reinstall. Yeah, that's right. Or just download the latest Windows updates or whatever. Nicely done. All right, so what's your tool of the bye week?
Starting point is 00:31:03 My tool of the bye week is KeePass the bi-week is key pass spelled k-e-e pass and we'll uh put that in the show notes so is this that thing that you needed to use to uh go to the bathroom without getting detention in in elementary school or was that that's a p-pass oh that's peep okay i don't know i we didn't have to have one of those at my school. That's pretty intense. We had a, this is no joke, a fully sized like real toilet seat. And you had to carry the, you know, unused, hopefully unused toilet seat with you into the bathroom. Because there wasn't one there? No, no, there was. You had to bring your own toilet seat?
Starting point is 00:31:41 Oh, no, no, no. There was a toilet seat. E-Y-O-T says? You brought the... Basically, if you're walking in the hall with a toilet seat, no one questioned you. Like, it was assumed that you were going to the bathroom. So each classroom had a... Actually, only... I think just the history teachers were in on this.
Starting point is 00:32:01 But each history teacher had a toilet seat under their desk. And if you needed to use the bathroom, they... And teacher had a toilet seat under their desk and if you needed to use the bathroom they and it had a chain so you could hold it without having to touch the seat you had to be handcuffed to the toilet that's right so if you're willing to be handcuffed to the toilet seat you could avoid wetting yourself in history class wow this is this is pretty intense man i gotta think about this for a minute yeah no this is this is not i thought this was maybe going somewhere else and we were gonna lose our clean tag but okay oh no uh so yeah all right no this has nothing to do with toilets unless there's an unless here unless you are awesome
Starting point is 00:32:37 and you put a passcode on your bathroom oh i've seen unauthorized usage by uh you know maybe if you live with your your family or siblings or maybe if you're still in high school or whatever you know maybe it would be a good thing to put a lock on the bathroom so you could control access to it that'd be good i've seen those really have you seen those really fancy toilets in japan like they have ones that have video games built in they have have ones that... All sorts of... Maybe there's one out there... This is circling the toilet. ...that needs a key pass. Okay. We are completely making anybody
Starting point is 00:33:11 who contributes to the key pass project really upset at us right now. I'm so sorry. Oh, man. All right. So key pass is an open source project. Man, we can't do these live together anymore. This is just not good.
Starting point is 00:33:26 All right. Key pass project is an open source project man we can't do these live together anymore this is not good all right um key pass project is an open source project to do um being a basically a password vault so we all know come on let's be honest you don't make the best passwords ever you know um people think they do you don't and you know you're using the same one for 20 000 different things so instead of doing that you know one option right and a lot of people discourage this at work you know you're using the same one for 20,000 different things. So instead of doing that, you know, one option, right, and a lot of people discourage this at work, you know, and even at home it's generally a bad idea to write your password down. But what if you, the tradeoff there is if you write your password down, you're not going to forget it.
Starting point is 00:33:56 So you can make it really secure so that somebody would actually have to break into your house before they'd be able to get your passwords. But this kind of gives you the best of that world of being able to have really secure passwords that have to be written down because they're so complicated and the ability to not worry about somebody breaking in and that is basically you create one really nice ultra secure password to lock up what amounts to kind of like a vault a file that's going to store all your other passwords so you make one really really good one and then you go in there and it's able to create you know accounts
Starting point is 00:34:25 and usernames and passwords and it'll auto generate it and you can even set the rules because you know different websites have different rules you can set them to like no i i think they can even send them to like notify you that's going to expire or something so it'll have you change them so if you wanted to you know for instance gmail never has your password expire but it's probably a good idea to change your password every so often so you have key pass alert you that your password needs to be changed and it does some cool features at least I don't think it's Windows only but I'm not really sure on that but I know on Windows it'll do something really nice where like if you right-click on it once you unlock your
Starting point is 00:34:57 vault and they have offer all sorts of very nice options for authentication and in multi-factor authentication to get in but um if you unlock your vault and you have your username password you can right click and copy your username on like an entry or right click and say copy your password then be able to paste it and then after a few moments it'll actually go back and overwrite your password and memory get rid of it so that you know it doesn't stay in your keyboard to be you know gotten by other other things later um so that's kind of a really nice feature. And then you can close it when you're done.
Starting point is 00:35:26 And again, it's pretty useful. What I use it for is those websites. It's really good when you create a website that you know you're not going to remember the username and password for and it's like something really silly that you don't care if it gets broken into, but they require you to have a 10-digit password with a special character, uppercase, lowercase, numerical values, and all this stuff. And then you know, you're going to forget it. And so what you do is
Starting point is 00:35:49 you can go ahead and just create an entry in here, have it auto generate it for you, and then just paste it in. And then you won't forget it, you know, just be there. And then you can back it up to, for instance, a Dropbox or to a USB stick. And my intention, I haven't done this yet, but I still plan to is to share this between my wife and I so that, you know, if so that if something were to happen to me or to her, I'd want her to be able to get into my stuff. And everybody's got their own little quirks and differences between how they handle sharing passwords between husband and wife. But certain things I would like my wife to be able to get at if something happened to me or if she needed to take care of something or if I'm on travel and she needs to help me out with something. So if she has the password and shares a file with me and we keep it up to date, then she'll be able to get at my stuff and find it. And that's a good way to keep it secure and not have to share it in the open.
Starting point is 00:36:34 So how does this work? So you have your master key. Yep, your master key. And you go to a website. Let's say I go to foo.com. And foo.com says I want you to create a username and password. So what do you do from there? I go to foo.com. All right. And foo.com says, I want you to create a username and password. Yep. So what do you do from there?
Starting point is 00:36:54 So there are ones that are more automated, but they typically tend to be integrated in with your browser, which, of course, becomes a problem if you're on multiple computers. Or, you know, if you use like me, I use a ton of different browsers just to switch it up. I don't know why. But what you do is you go there, right? And then you say, oh, I got to create a username and password. So my workflow is then I'll go startup key pass i'll type in my master password just nice and secure and no i'm not going to tell you and uh then what it does that i can right click in it or go to an option basically say create new entry tell it the website name so like you know foo.com tell it my username i want so patrick and then um what i do is I can have it generate a password for me. And I have
Starting point is 00:37:26 just default rules. It's a really nice long password that, you know, whatever. Or you can just type in your own password and then save it. And it'll remember the entry for you. So then later, instead of having to do the password recovery for this website you go to once every three years or whatever, you can just go back to KeePass and look it up. Oh, I see. So now you come back the next day and you want to log into foo so you put food comm in a key pass and hit you know recall or something yeah well it just has a list yeah it has a list of all the entries you have okay you might be able to search or you can categorize them and you know it's pretty flexible yeah you basically can just right click
Starting point is 00:37:59 on the entry and say copy username copy password or you can open it up and you know unmask the password have it show you what the password is or you know a variety of different things there it's pretty flexible i find to be very nice and it's open source so the idea is that it's been looked at by a lot of people and should be secure it's not going to steal your passwords and it's free there are other ones that you have to pay for but i just want to open source so you know hopefully people have checked this out and made sure that it's you know really nice and secure and they're not making bad assumptions or going to let your passwords leak out, especially if you're going to put all your passwords in. And I still, as much as I should trust, I don't necessarily trust it for things like my bank login and password. I tend to just try to memorize.
Starting point is 00:38:38 But for a lot of other stuff that isn't as important but still is kind of important you know i think it's a good good thing to use well so are there does keypass have a browser plugin where it would like auto complete or anything like that um i don't know okay i'll check it out yeah it might have some integration the way i use it i don't maybe it would though that would be very powerful i guess it'd be interesting yeah yeah i'm not sure just guessing guessing. Throwing stuff in the dark. Maybe we should submit it on their feedback box or something. Yeah, that's right. So you said it's open source?
Starting point is 00:39:11 It's open source, so we could contribute it. That's right. I mean, we can go in and do that. It wouldn't be bad at all. But yeah, so that's my tool of the buy week. It's KeePass. Check it out. Yeah, that sounds awesome.
Starting point is 00:39:27 Yeah, and it looks like there is at least a Firefox extension for KeePass. Oh, nice. Yeah, it's good stuff. Cool. All right, so time for our programming language of Dubai week. That's right. That's right. So this time we're doing Erlang. That's fun to say.
Starting point is 00:39:39 Erlang. Erlang. Oh, it should be pirates use Arlang. I think pirates just use Ar. That's a statistics language. Yeah. Pirates, well, you know, they have to divvy up all the booty, and there's probably like 200 people have to get a share.
Starting point is 00:39:57 Interesting. Interesting. Nice. Okay. I think Erlang is more from that song where everybody wants cake on their birthday. I think that's really where it was. Is that right? Is that the history of Erlang?
Starting point is 00:40:10 I don't think so. So I think the history of Erlang is the way it goes down is I guess a lot of these things are shrouded in mystery or just forgotten. But no, no, so seriously, I guess Erlang is supposed to stand for Ericsson language. It was developed by Ericsson, the telecommunications company. And it gets its roots there in doing telecommunications type software. So think, you know, like packet switching routers and that kind of interesting fun stuff, which is, you know, very high bandwidth, very, you know, necessary for fault tolerance. You know, you're going to, you know, try to be doing tons and tons of things all at once and, you know, do it as minimal know you're gonna you know try to be doing tons and tons of things all at once and you know do it as minimal amount of hardware as you have to
Starting point is 00:40:49 and um so in that way kind of led to a lot of the requirements that were used to to make it what it is which is a highly concurrency oriented functional programming language um that's just recently seems to be picking up a lot of steam. I guess it's been around, without it up in front of me, I think 1999? 1986 is when it appeared. I was shocked.
Starting point is 00:41:15 The interesting thing... Oh, it said open source as 1998. The reason why Erlang is more popular now is because in 2006 they added multi-processing support. So basically what Erlang does now is essentially, we'll talk about this more as we start talking about the language. But in the past, it was broken up into several different, you know, when you write your program, it's broken up into several different pieces. But all these pieces just ran one at a time and sort of a
Starting point is 00:41:47 queue like asynchronously but but just but just one at a time and in 2006 they added multi processing support where several different pieces of your code could run at the same time and that made Erlang an extremely powerful language when it came to running on these multi-core and many core machines that we have today. Interesting interesting so functional programming language we talked about C and Python so far those are both imperative languages Erlang is a functional language so what it oh we could spend forever talking about this but in short you know one or two sentences what's a functional forever talking about this but in short you know one or
Starting point is 00:42:25 two sentences what's a functional programming language yeah so i guess you know the simple way of of uh explaining it is um if you're familiar to c or c plus plus or python or java or many of the languages that we've discussed on the podcast before you're used to sort of the you know the i guess the commands or the programming end of it or the you know the logic and the data so the idea is that you have you know you know some global memory with you know your classes and your uh your structs and your arrays and things like that and then you have functions which um you know go through call other functions or just are in some kind of a wild true going on in your main loop. And they're acting on that data.
Starting point is 00:43:10 So functional programming is a very different model. In functional programming, you don't really have data just sitting out there to be accessed. But each function passes in data. So in other words, your main function gets passed in the command line arguments. That's true even of C++. But there's no global memory. That's it. That's all you get. And then you can create some things inside of that main function
Starting point is 00:43:39 and pass those to other functions. But it's not like there's data just sitting out there waiting to be utilized. So that's really the thing that separates functional programming from the more data driven languages like C and Python. So, yeah, I mean, I guess it has a lot of implications for Erlang being so concurrent and, you know, a lot of the problems that creep up in traditional, you know, with quotes there that you can't see because you're listening on the radio. But, you know, the traditional languages there, you know, have problems with the data that's hanging around and you're able to access it and make changes. all over the place and controlling how and who can access stuff so that you don't end up modifying
Starting point is 00:44:25 different things from different places and not and getting unintended results because you're trying to do multiple things at once right like in in c++ to use some example um let's say let's say you're making uh i don't know some kind of football game uh you know american football game and you have players running around you have a quarterback a football stadium these are all classes in your in your C++ in your architecture so you know one of the football players his position might be affected as a result of one of the other players he might get tackled or he might get bumped and that might move his position his position might also be affected by himself he might be running and that might be causing his position to change. So, you know, in C++, you can never really be sure, you know, especially in a multi-processing environment, that your position, that no one
Starting point is 00:45:17 else is bumping you and modifying your position. You know, that information is out there for grabs. And, you know, you can, you know, you can structure C++, like you said, using mutexes and semaphores and things like that and message passing. You know, it's sort of restricted and say, look, if you want to alter my position, you have to tell me. And I'm going to actually be the one, you know, mutating the position. You can just give me hints. But ultimately, you're dealing with the low level like C and C++, you're dealing with just bits and bytes, and there's nothing stopping someone else from going in and doing whatever they want with your data.
Starting point is 00:45:56 So Erlang, by contrast, doesn't have data just sitting out there. Everything is part of a function. It's either a parameter to a function or it was created inside of a function and as you pass data from one function to the other you actually you know capsulize the data into a message and pass that message message passing yep message passing is is what Erlang's all about so you call a function with two as a parameter. What it actually does is, you know, puts two in an envelope, sends it over to that function.
Starting point is 00:46:30 An actual envelope? That's right, an actual envelope. Actually, what it does is it sends the number two. So they're the people still sending mail in the post office. That's right. It sends a number two with a toilet seat attached to his wrist over to your function. Too much potty humor.
Starting point is 00:46:48 Oh, no. Where that function can then be waiting for him. So this is also called the actor model. So do you want to try and give that a shot? So the actor model, right? There's all sorts of ways to deal with concurrency and what amounts to shared state. So if you try to, and Jason was trying to get at this
Starting point is 00:47:08 with the description of the football players, but anytime you try to share state between multiple processes that need to both read and modify. So one way is to deal, and you learn about this in textbooks and stuff, but producer-consumer. So if you've got somebody producing something
Starting point is 00:47:23 and only one other person consuming it, is happy or at least you know straightforward but when you end up with multiple producers and multiple consumers and you know consumers can also produce and producers can also consume things get you know more hairy and uh it becomes a little harder to deal with that shared state and the more shared state you have the more chance you have to mess something up and not be careful enough and so what the actor model says is instead of allowing shared state we're basically going to forbid it and that's going to cause some interesting implications both good and bad in that if you don't share state shared in state is really fast this is basically you just access memory like it's yours and everybody does the same and so that's really fast but it's dangerous so what the actor model says if let's get rid of that and let's
Starting point is 00:48:09 basically say the only way to talk to another piece of code is through a mailbox like you were talking about and sending a message to it and it can determine when it wants to talk about that message how it wants to handle it and then what it wants to do and so actors you know basically boil down to really simply, they're able to receive messages, handle the responses locally, generate other messages, generate other actors. And then that's kind of pretty much it. They're not really affecting state, at least not a shared state.
Starting point is 00:48:38 And so you're able to kind of have, you need a little more careful planning, but you're able to worry less about the multi-processing, multiple threads, concurrent states of your stuff because you've kind of encapsulated in this way and very much defined the interactions in a way that, if you can get your stuff to fit that paradigm, kind of eliminate the worry about having a lot of the issues that are common with other ways of doing concurrent programming. Yeah, yeah, definitely. I mean, sometimes we think as people have been doing a lot of programming in C and C++, you'll kind of have this thought experiment where you'll say to yourself, you know, life would be so easy if all of my classes were just, you know, a map of strings to, you know, different data. So in other words, if my
Starting point is 00:49:26 class, if I could actually get at the different members of the class, if I could say instead of saying my class dot x equals 3, my class dot y equals 4, if I could just say like everything in my class is 3 or both things are 3. If you could do things on like a programmatic perspective. And so Python kind of does that in the sense that like classes are really dictionaries in Python. And so it kind of is an extrapolation of that thought experiment. So going back to Erlang, you know, it's sort of the idea where, you know, in C++, we have all these different classes, and the classes are good at, you know, representing
Starting point is 00:50:02 different data. So, you know, my football player class has my football player's location. And that's very modular in the sense that the football class only has the football's location. It doesn't have the player's locations in it as well. So that keeps it very compartmentalized. But the logic can C++ really let you go wild with the logic or in a lot of these imperative languages. Like you could have the football player movement in the football class because you just have access to all this data. So Erlang is sort of, you know, sort of taking the other approach, taking it all the way to the extreme where it's like, what if everyone had their own data and their own logic and operated independently? You know, what does that mean?
Starting point is 00:50:46 You know, if we extrapolate that, if we take that all the way to the extreme, you know, how does that change our way of thinking? And how does that change the kind of programs we write? Yeah, I think it's going to become more and more important to have these alternative tools in the toolbox as we move to a more multi-processor future. Right. That's an excellent point. I mean, a big problem right now is being able to do concurrent programming, being able to run two things at the same time. And it's because the logic can so easily get conflated. You know, if the football is modifying the football player's positions and they're modifying their own positions, now you have, as Patrick mentioned mentioned a race condition where you have two things modifying the same
Starting point is 00:51:27 data at the same time and that causes very unpredictable results. I mean you might be assuming that your position isn't changing in this one function where you calculate something based on position and all of a sudden in the middle of that function it changes and that causes your program to act in a way that you didn't expect and causes crashes and things like that. So rather than have to sort of dwell on these things and try and compartmentalize everything yourself and possibly screw it up, you know, we can use something like Erlang where it's a little bit more strict on the logic and sort of you know forces you to think a certain way so forcing you to think this different way uh we uh look for some links for you guys for learning erlang so uh we found this uh awesome awesome website it's learn you some erlang for
Starting point is 00:52:20 great good that's right it's learn you some erlang.com is the is the domain name how do you how do you like their little mascot there the logo it was pretty epic yeah you guys should definitely check out the uh the front page of that i think it's a it's a squid who's using what eight eight different computers at the same time or something oh it's also reading the book about itself. Oh, that's awesome. You know, if he was on the cover of the book, it could be, you know, recursive, but it's not. No, I guess he's just reading about Erlang. Yeah, but one of the last,
Starting point is 00:52:54 one of the thing about Erlang. Oh, sorry. Yep, go ahead. Is, so, you know, you have these different objects. And one thing that, you know, we didn't completely, you know, cement this idea, but because, you know, we've separated the logic and we've separated the data into all these different objects, they're all able to run at the same time. And that's really what gives Erlang the
Starting point is 00:53:15 concurrency. You know, the football player is able to update his position and do his AI and his calculations and whatever. And the football is able to do the projectile motion as it's being thrown independently without you as a programmer saying, all right, you guys can both run at the same time. The system does that for you. It automatically knows what things can run at the same time and it runs them all at the same time. That's what gives Erlang such a great performance in this multi-core world yeah so um we talk about libraries um the I guess the standard library equivalent for Erlang is called the OTP so sometimes you'll see this even if you go look to download Erlang it'll be the Erlang
Starting point is 00:53:58 and like Erlang slash OTP there's something in what OTP stands for is open telecom platform and that's the open source library that includes a lot of the common things you'd want to do and want to use. And so that's kind of like the included part, the batteries, as it were, for, like we talked about last week, for Erlang, they give it, able to do stuff more than just the basic necessities. Do people use Erlang for stuff besides just telecommunications? Yeah, so I think Erlang is used in CouchDB, right? Yeah, yeah. The NoSQL database.
Starting point is 00:54:36 I believe it's also used in Wings3D, which is a 3D modeling tool. Yeah. Do you have any? Yeah, RabbitMQ, which is an implementation of the AMQP gonna say amqp the um protocol for message passing so right there getting back to its telecom roots but able to do really fast really reliable fault tolerant um message passing so amqp is that i get the order right yeah you did yeah so um it's an implementation of that so um it's used and this will parlay into the next where it's used but um able to do really high numbers of message passing and routing and they use this we've talked about a couple times with the high
Starting point is 00:55:10 frequency trading guys and finance guys use that and uh that they we talked was it last time about the guy who stole code from goldman yeah that's right actually stole erlang code is the thing there i guess alleged right i don't know what the result of that is. I think he went to jail, so I think he's convicted. Oh, he went to jail. Yeah, we did say that. So convicted. So yeah, so that was involving Erlang code because that's part of their high-frequency trading stuff.
Starting point is 00:55:33 So yeah, I mean, it's used more than just telecom stuff. So the Goldman Sachs stuff, the 3D modeling, the document store database. I mean, those are kind of things that are a little bit different than just what you would think is message routing. It's also used used by and i don't have it on here right in front of me but the 2600 hertz project does some voice over ip stuff so think like skype replacement slash if you don't know asterisk is which is an open pbx um so kind of doing oh and this gets beyond what i understand but you, doing telecommunications,
Starting point is 00:56:05 voice stuff for, you know, enterprise stuff, but doing open source and free and able to give people the ability to kind of control their own telephone system. And so they use it, which fits in with it, you know, nice telecommunications background. Yeah, and so this actually, you know, the bigger, the more broad point here is that
Starting point is 00:56:22 in the end, you can do just about anything in any language and if your frustration tolerance is high enough yeah that's true and Erlang is no doubt no no exception if you know if you go on the Wikipedia site for Erlang or you start reading the tutorials you will realize that Erlang is vast or any functional language prolog, lisp, etc. is vastly different from you know C, C++ and the imperative languages that you may be used to and you know it might seem like things are impossible you know how can you how can you write a serious large-scale app without global data you know it sounds like an impossible thing to possible task but um you would be amazed that uh that all it takes is just a shift in in paradigm and a shift in thinking and um and you
Starting point is 00:57:12 can do anything in in erlang or any of these languages and we're big proponents of that i mean part of what we're doing here is try to get people to embrace that alternative ways of thinking even if you don't end up using erlang in your day-to-day job if you go out and play with it on the weekend the evenings and you know find this brain twisting stuff and make it through it you're going to learn some new ways to look at problems and maybe it will apply even you know in using C and C++ maybe you'll look at a new way to solve a problem that you've been working on or something that was hard to tackle and now you got kind of a way to do it so here's my chance to sort of grill you you're in the hot seat no no no no i was trying to avoid this all all podcast long so what was erlang first programmed in i mean now i'm pretty sure it's in c or something but what was it in
Starting point is 00:57:57 in the beginning so 19 is this 1986 right. Programming history. So is it something weird? It's another functional language. Prologue? You got it. Erlang was originally implemented in Prologue, which is... Interesting. Yeah, which is short for Prologic, I believe, right? Or actually...
Starting point is 00:58:19 Well, it's not much shorter than... I think it's... Let me see here. Prologue is short for uh i think it is prologue all right well he looks that up that that's interesting so that that's something we haven't really talked about that you know if you're going to write a language you got to write it in something else yeah either you know i guess assembly because you can write a machine code you know directly if you're at a high frustration tolerance and really want to take a long time.
Starting point is 00:58:48 But yeah, so you write it. Some languages end up what's called bootstrapping. So, you know, C wasn't first written in C, but then eventually they got to the point where you could write the C compilers in C itself and bootstrap it. But, oh, we also didn't talk about the fact that Erlang runs in a virtual machine.
Starting point is 00:59:05 Oh, yeah. Not directly on the hardware. So that's two virtual machine programming languages in a row. All right. Did you figure it out? Well, apparently prologue doesn't stand for anything. Oh, fail.
Starting point is 00:59:17 Jason, you're getting closer to being voted off. Oh, no. You put me in the hot seat and then you failed. I know. That's a... You just turned the tables. Yeah. Now you have a chance to, like, double dare. You can double hot seat. Oh, no. You put me in the hot seat, and then you failed. I know. Just turn the tables. Yeah, now you have a chance to double dare. You can double hot seat.
Starting point is 00:59:29 Oh, no. I don't think I'll be that mean. Can I take the high road? You can. You can take the high road. I'm going to take the high road. I choose that. For 100.
Starting point is 00:59:38 But yeah, so Erlang is implemented in Prolog, which is another functional language. And Prolog is somewhat is another functional language. Prolog is somewhat similar to Erlang, but it doesn't have a lot of the ease of use. I feel like Prolog is very difficult to get your head around. I did a lot of Prolog in university, so we'll definitely make a show out of that.
Starting point is 01:00:05 Okay, all right. Your future? Erlang definitely, in the same way as sort of Python makes your life easier as a developer of C or C++, Erlang definitely makes your life easier if you're a prologue developer. Interesting. Very good. All right, well, is that all we got for this week? I think so.
Starting point is 01:00:24 I think that's it. Just bye week? All right, I don't think we have picked for this week? I think so. I think that's it. I think we wrapped up this week. All right, I don't think we have picked what we're going to cover next. No. So opportunity for you to write in and tell us what you'd like to hear. That's right. And influence the future. If you have a favorite, you know, we have a list of languages that we want to explore.
Starting point is 01:00:39 But if you have a particular language you're interested in and we haven't covered it yet, we can easily move it to the front of the queue. Yep. So definitely give us any feedback, any info. Rate us on iTunes if you like the podcast. Rate us if it's good. If it's not, just send us an email and wait until we make it better and then rate us. That's right.
Starting point is 01:00:59 Definitely subscribe so you can get the latest episodes and stay up to date and all that. All right. If that's it, I guess we'll sign off. Yeah, this is Jason Gauci signing off. And this is Patrick Wheeler. Until next Bi-Week, that'll be it. See you later, guys. The intro music is Axo by Binar Pilot.
Starting point is 01:01:18 Programming Throwdown is distributed under a Creative Commons Attribution Sharealike 2.0 license. You're free to share, copy, distribute, transmit the work, to remix, adapt the work, but you must provide attribution to Patrick and I and share alike in kind.

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