The Changelog: Software Development, Open Source - .NET, NuGet, Open Source (Interview)

Episode Date: March 16, 2012

Wynn caught up with Phil Haack to talk about NuGet and growing the .NET open source community at GitHub....

Transcript
Discussion (0)
Starting point is 00:00:00 The Change Log was brought to you by Pusher and they're looking for a system engineer specializing in evented systems. Send your cover letter, CV, and your GitHub profile to jobsatpusher.com. Don't push me away! And head to github.com slash explore. You'll find some trending repos, some feature repos from our awesome blog, as well as some audio content from this podcast. If you're on the Twitter, follow the changelog, not changelogshow, and also Adam Stack. And I'm Penguin, P-E-N-G-W-I-N-N. Fun, fun episode this week. Talked to Phil Hack over at GitHub about.NET and the open source,
Starting point is 00:01:04 broader open source community that.NET has and how to get those folks plugged into GitHub and kind of merge these two communities. We also did a circle back on NuGet. Or is it NuGet? You know, he pronounced it NuGet. I'd always said NuGet in my head, so maybe that's just my inner craving for a candy bar. I'm not sure. But package manager for
Starting point is 00:01:28 .NET, which every language platform kind of lives and dies by the strength of its package management, so it's nice to see.NET maybe catching up with some other communities around package management. Yeah, certainly it's fun to see GitHub, too, embracing the wider spectrum of open source, not just, I guess, the usual suspects, as you say. And we talked about that. Right now, C Sharp's the number 11 most popular language on GitHub,
Starting point is 00:01:55 and Phil's mission is kind of to increase that a bit. One of the challenges is just how to spell C-sharp and.net. Okay. Both involve punctuation, and so getting those into indexes and search engine optimization is a bit of a challenge. But it's number 11 right now. His goal is to get that in the top 10. In the top 10.
Starting point is 00:02:19 All right. Well, sounds like a fun episode. You want to get to it? Let's do it. Chatting today with Phil Hack, recently to GitHub, about.NET and open source. So, Phil, for those that don't know you, why don't you introduce yourself? Hi, I'm Phil Hack. I work at GitHub as a Windows badass. At least that was what was on my offer letter. But I'm primarily focused on making Git and GitHub better for Windows developers or developers on Windows.
Starting point is 00:02:56 And I also was formerly at Microsoft where I worked on ASP.NET MVC, as well as NuGet, among other projects. But those are the two big ones that I was responsible for. What's the move to GitHub meant for you personally? Well, I get to work from home, which is really nice. And they had this philosophy of optimizing for happiness. And moving to GitHub was a good way for me to do just that. And I really like it a lot. What's been the biggest challenge of promoting open source and.NET that you found
Starting point is 00:03:31 prior to being at Microsoft and with GitHub? So before joining Microsoft, I think one of the big challenges was just getting developers to care, right? Like a lot of developers just care about if it's free from a financial standpoint. But a lot of times they don't realize that there's actually a different sort of freedom or free that's actually really important, which is the ability for them to take the code and make modifications. But also just in terms of businesses, I think there's a lot of fear and there still is a lot of fear, but there's a lot of fear that, oh, if I use this library that's open source, am I going to set myself up for major problems?
Starting point is 00:04:21 And if you're not careful, that could happen. But a lot of times what I've seen beforehand, especially now, is a lot of these companies don't even realize that the developers are already using these libraries. In the.NET space, for example, there's Log4Net, which is modeled after the Log4J Java logging library. And that library just alone is probably in nearly every code base. And, you know, that library just alone is probably in nearly, you know, every code base. And a lot of these companies don't even realize that their employees are using open source. And, you know, what I'd love to see is for them to realize that and start contributing
Starting point is 00:04:57 back and not realize that and say, oh, well, we got to get rid of this. One of the, I guess, biggest catalysts for sharing open source code is just a package manager. So talk a bit about NuGet and what it's meant to sharing.NET open source. Sure. So NuGet is a package manager for.NET and Windows developers. And its primary focus, or the thing that everyone thinks about, is a Visual Studio add-in. And so for a lot of.NET developers, that's their primary way of doing development. And what it does is it makes it really easy
Starting point is 00:05:37 to incorporate code into your project or solution. And the problem it solves is that prior to NuGet, for a lot of people, when you wanted to use a library, it took a lot of steps. You'd search around all over the web. You might find a library. You then have to unpack it from, you know, it's usually zipped up, so you unpack it.
Starting point is 00:06:01 You copy the assemblies into some folder in your project, and then you go to the add reference dialog and add a reference to it. And so there's a lot of manual road steps, and we wanted to really automate all the steps that people were pretty much doing anyways, and try not to change the workflow too much, but automate all the ugly steps they don't care about. The nice thing about NuGet, though, is that it itself is fully open source. It's under the Apache v2 license, but it's also developed in an open and collaborative manner so that the project accepts contributions. And for example, and other people have taken it and built really interesting
Starting point is 00:06:47 products on it. So while Visual Studio is sort of the primary experience, there is a command line, nuget.exe, that doesn't have any dependencies on Visual Studio that you can use outside of Visual Studio. And folks like the Sharp Develop folks, they a plug-in for Sharp Develop that understands NuGet as well. And there's a lot of other things as well. What sort of support has the project gotten from Microsoft, if any? Well, it was started at Microsoft as a Microsoft project.
Starting point is 00:07:21 And it was handed over to the OuterCurve Foundation. The OuterCurve Foundation is an open source foundation, much like Eclipse or Apache, to be the stewards of the project. So what's nice is that Microsoft has continued to contribute the time of some of their developers and a program manager over there on NuGet. So they have full-time dedicated staff working on NuGet. And the big thing is that in the next big version of Visual Studio 11 that recently came out, the beta recently came out, NuGet is a core piece inside,
Starting point is 00:08:11 let me rephrase that back up. In the Visual Studio 11, their next version of Visual Studio, one of their flagship development products, they've incorporated NuGet into the product. So it's already there when you start doing development with Visual Studio 11. So they've really embraced NuGet in a big way. There's two hard problems in computer science.
Starting point is 00:08:35 I guess it's cache invalidation and naming things. What impact is C Sharp and.NET both containing punctuation, do you think has made it harder to find.NET and C Sharp resources on the web? Yeah, I've never been a big fan of Microsoft's naming strategy, except for maybe the Xbox, but even that has those problems. The good news is that I think Google and other search engines have handled that pretty well, because initially you couldn't even do a search for C Sharp, if I remember correctly, way back when. But for the most part now, you can, and a lot of people have worked around it by naming their projects
Starting point is 00:09:22 by spelling out the dot in.NET or by spelling out the sharp in C Sharp. So I don't know if that's been such a problem. I mean, I think NuGet makes it even easier now because there's so many libraries within the NuGet gallery, the online portion of NuGet, that if you go there, you can quickly find the library to do just about anything you need. The reason I ask that, I'm looking at C-sharp's the number 11 most popular language on GitHub at the URL github.com slash languages slash c%23. And half of these have C-sharp spelled out or.NET spelled out in the name of the project. But number 11, that's actually quite surprising. Is it your goal to boost that, get a little higher? Oh, absolutely. Yeah, I would love to see C Sharp much higher up on that list.
Starting point is 00:10:16 I think in terms of overall developers, C Sharp is much higher than that. If you look, if you trust the, was it Tiobe or Tiobe? I don't know how you're-O-B-E or T-I-O-B-E? I don't know how you're supposed to pronounce it, but the T-I-O-B-E index. So I'd love to see at least C Sharp be representative of that. And I think the.NET landscape in open source hasn't necessarily been as rich
Starting point is 00:10:43 or seen to be as rich as, for example, the Ruby or Java open source communities. But there's actually a lot of interesting good stuff going on in the.NET open source community. And hopefully, as we continue to make using Git and GitHub easier for Windows developers, we'll see more of those developers realizing that GitHub is a great place to host that code. What are the current challenges for both GitHub and Git specifically for Windows users? Well, I think Git specifically my co-worker has this phrase that he likes to use death by a thousand paper cuts. Line endings is probably one of the biggest things
Starting point is 00:11:26 that's a challenge when you're using Git on Windows versus Git on the other platforms, just dealing with line endings. But there's also, you know, there's not a real good place for, just getting started with Git on Windows is a little bit of a challenge. And so, you know, we hope to make that just effortless.
Starting point is 00:11:47 As for GitHub, GitHub and Git kind of go hand in hand. So once you're comfortable with Git, I think GitHub is a great place. I don't think there's a lot of barriers to C Sharp developers or.NET developers on GitHub. The one thing that might be there is one you know, one thing we could do better, and I don't know, we might have done this recently, but for example, a lot of the examples assume you're on a Mac or Unix-based operating system or in a Bash shell. So, you know, if we can detect that you're on Windows, you know, maybe we give you commands using, like our examples might adapt to what you're doing.
Starting point is 00:12:28 Those are some of the types of things that I think we could do to make it even friendlier. But for the most part, we've seen pretty good uptake in.NET developer projects coming in GitHub, as far as I can tell. Are you guys working on a Windows client, a lot of your Mac client? Yeah, we're working on something. No comment. Yeah. We're working on some tools to make it easier to use Git on Windows
Starting point is 00:12:53 and with GitHub. Yeah, since joining GitHub, one of the things I've learned is there's a phrase some of my coworkers like to use that they prefer shipping software than talking about software that hasn't yet shipped. So we've been a little bit mum on in terms of specific plans. But I think it's probably okay to say that, yeah, we're working on something.
Starting point is 00:13:16 So when you have a product called GitHub Enterprise, it kind of, I guess, casts a bigger net in the, I guess,.NET world inside the enterprise than just your regular public-facing application. Are you focused on any enhancements to that platform for Windows users? I personally don't work on the GitHub for Enterprise, so I don't really have any specific knowledge on that plan. I mean, I think it would only make sense to make sure that it works great for both Windows and non-Windows developers, but I can't speak to anything specific. Any.NET projects on GitHub that have you really excited?
Starting point is 00:14:06 Oh, yeah, there's quite a few. So one of the ones recently that I've been really into is called SignalR. So Signal, and then with an R at the end, it's kind of a very Web 2.0 name-ish. But it's a framework for.NET developers, and particularly in ASP.NET developers, but where you can have persistent connections to the server. So it allows you to have persistent connections to the server from the client. And so you can do things like, from your browser, make a JavaScript call to some method on the server, a server object, and that method on the server
Starting point is 00:14:46 can actually call methods back on the client. And there's a really cool chat client that was meant to be sort of a proof of concept called Jabbr, J-A-B-B-R, which, not to be confused with Jabbr, the ICMPP chat client. But if you go to jabbr.net, there's a website there, and it's a showcase for using SignalR to do multi-person online chat.
Starting point is 00:15:16 And the interface is a lot like Basecamp, sorry, Campfire, if you've ever used Campfire. It's pretty cool. That's one of the projects on there. I mean, there's a lot of others. Another project that I think is pretty interesting is NancyFX, or just called Nancy for short. And it's a Sinatra-like framework
Starting point is 00:15:37 for.NET developers. I don't think it actually has any dependencies on ASP.NET, but at least for me, web development on.NET developers. I don't think it actually has any dependencies on ASP.NET, but at least for me, web development on.NET tends to be synonymous with ASP.NET, but in this case, it's a lightweight web framework. And there's a lot of cool web frameworks that are up on GitHub these days. So there's like NancyFX, there's OpenRasta, Fubu, MVC. So there's really cool stuff going on in that area. Checking out Nancy, you'd be shocked how many times on this podcast we've said Sinatra-like or Sinatra-inspired.
Starting point is 00:16:17 That is such a forward-looking little framework that's launched on how many copycat frameworks or at least inspired the DSLs of other frameworks. But on Nancy in particular, does it have dependencies on IIS? No. So I think the whole point of Nancy is not to have dependencies on IIS. And in fact, that actually reminds me of another project in GitHub that I can't believe I just blanked on it, but it's OWIN, O-W-I-N. So OWIN is a, it's basically a dot, I wouldn't call it a port, but basically a.NET port of the rack from Rails.
Starting point is 00:17:05 Sorry, rack from Ruby. Right. Not everything Ruby is Rails, right? That's correct. And the whole point of that is to abstract the interface of a framework versus the host provider. And so I believe Nancy has OWN support built in as well as a lot of these other open source, lightweight web frameworks that are coming out in the.NET space. And so that removes your tie to not only ASP.NET, but your ties to any specific web server. So while there are OWN implementations that run with IIS. There's OAN implementations that run with other web servers like
Starting point is 00:17:47 Mono the Dios or I think gosh, I can't even remember some of these, but there's a lot of open source web servers out there too in the.NET space. In the last, I think, year or so, it's really exploded. This whole area of not only lightweight web frameworks, but lightweight web servers all built in.NET. So really cool stuff.
Starting point is 00:18:16 Yeah, it's funny. You mentioned earlier Nancy being kind of a spinoff of Sinatra. The whole name is after Frank Sinatra's daughter, Nancy Sinatra. So I thought that was clever. We talked about Sammy J.S. on the podcast before, too, and it was an homage to Sammy Davis Jr., part of the Rat Pack. The Rat Pack. Is there a framework called Rat Pack? Because if there isn't, we should write that right now.
Starting point is 00:18:44 It's a meta- meta framework, I think. So, you know, I was a.NET developers all that often until two, three years ago. It seems like there was an influx into our circles of.NET folks where we kind of met on the front end when jQuery became adopted sort of in the Microsoft community, and now Backbone's starting to get an uptick. What has it meant for Microsoft as a community
Starting point is 00:19:23 to latch onto open source front-end frameworks? I think it's just a recognition of where the web is going. You know, it's really interesting that you mentioned there was an influx of.NET developers into jQuery. And we, when I was at Microsoft as part of ASP.NVC, I forget, I think it was version one. In fact, we shipped jQuery in the box and basically sunsetted our own, or at the time, our own AJAX library, what was called, codename Atlas. Right. Just like the CLR ported to JavaScript almost. Sorry, what? Yeah, yes, that's right. That's right.
Starting point is 00:20:04 It's basically an object model, you know, very OO oriented. And it was called Codename Atlas, but of course, you know, Microsoft had to give it a name of Microsoft AJAX framework, whatever. But it was really interesting to me that I would get approached afterwards
Starting point is 00:20:24 from a lot of developers who would say, you know, thank you for shipping jQuery in the box because now we're allowed to use it at work. And it wasn't so much that they weren't allowed to use open source or maybe that their employees didn't realize it, which is kind of sad. But it was that if it was shipped by Microsoft, it had their employer's blessing. And so by including these things in the box, more and more developers had the permission to use them. And what will be interesting to see is if NuGet being in the box with Visual Studio 11 has a similar effect where it's almost like this back door where these developers can now install these components and say, well, I just used Visual Studio to
Starting point is 00:21:10 get these things into my project, and my employer doesn't care. Now, for a lot of employers, that might sound like a scary thing, so I would encourage people to be careful and read the licenses and make sure you understand the implication of the licenses you use. But I also think it's a really good thing that hopefully it sort of reduces the fear of using these types of components. But going back to your original question, yeah, I think it's a recognition of where the web is going that the web is becoming more and more rich in the client where old ASP.NET
Starting point is 00:21:49 web forms, I'm sure you're familiar with that, really have this concept of mimicking state by shipping the data, the state of the control, so to speak, back and forth between the server and client. But more recently, what you realize is really quick, speedy, interactive websites keep all the control state in the client via JavaScript, right? So you have all these JavaScript widgets, and then you just need to make these lightweight service calls back to the server. And I think that is part of the reasons why you're seeing this proliferation of lightweight
Starting point is 00:22:22 web frameworks is because they don't really need to do all this stuff of rendering UI. They just need to return JSON back to the client and let the client handle the UI thing. And the other aspect of that that I think is really great is just
Starting point is 00:22:39 I really like seeing this intermingling of different communities because I think when these different communities tend to isolate themselves, they're missing out on a lot of good ideas from other communities and vice versa. So I think by sharing these ideas and intermingling, we get the best of both. And it's one of the things I really like working at GitHub. I had known that GitHub was a Ruby shop, but I didn't realize they were doing any kind of.NET development.
Starting point is 00:23:09 So when I joined, I was a little hesitant, wondering if these Ruby guys are going to make fun of me all the time or whatnot. learning new things and values technology in a sort of agnostic way where, you know, I would learn some cool things that they're doing that Ruby does that I didn't maybe realize. But at the same time, you know, like my coworker and I would talk about some of the cool things in C Sharp that you don't really have an equivalent in Ruby that they were like, oh, that is really cool. They're able to recognize that. And that's why I'm a big fan of conferences like the NDC or AuraDev where they get a bunch of these different people together from different communities and say, hey, let's all hang out, give talks, and intermingle.
Starting point is 00:24:00 I want to take a moment to talk to you about Hover.com, our latest sponsor. You can go to Hover.com, our latest sponsor. You can go to Hover.com slash the changelog, and you'll get 10% off domain name purchases. They provide domain names, easy DNS, super simple, and even email management if you need that as well. They actually have this service called Valet Domain Name Transfer. And we recently moved 30 or more domains, something like that, over to Hover. Super easy. We picked up the phone. We called their 800 number, 866-731-6556.
Starting point is 00:24:36 And we talked to a human being. And that person walked us through the entire process of doing it, which took about five minutes. So it's not even an entire process. But they hold your hand the entire process of doing it, which took about five minutes, so it's not even an entire process. But they hold your hand the entire way. They move all your domain names over, get all your DNS set up, everything set up, like your MX, whatever you have, anything in there, they're taking care of it. They let you go in and approve and review whatever's going on
Starting point is 00:24:59 before they actually pull the trigger, and boom, you're moved over to Hover. Now that valet service is absolutely free. Now, of course, there's fees that are associated with moving your domains, and that's just the norm, so you do have to pay those, but you're getting 10% off with our code, so that's awesome. So go to hover.com slash the changelog and enjoy. What are some of the ideas from.NET or C Sharp in particular that you think are great that the broader community could benefit from?
Starting point is 00:25:31 You know, many of these ideas, as soon as I say something, I'm sure a lot of people say, well, that isn't old. But I think link, the language integrated query is pretty cool within C Sharp, especially, for example, how they integrate that into going over, providing a consistent interface for link over objects, link over SQL, and then link over XML. The other thing that I think is really interesting is reactive extensions. And this is a concept that's finding its way not only in C Sharp, but they've also come out with JavaScript libraries. And if you're familiar with how enumerations work in C Sharp, you've got these two interfaces, IEnumerable and IEnumerator. And it's the way you can easily enumerate over a collection. And reactive extension sort of reverses the polarity on that.
Starting point is 00:26:36 And so rather than enumerating over things, you have this concept of subscribers and observables. And so like an observable over a stream of incoming events or incoming messages from some other place, and then you can call, hand it a subscriber, and then you can build up these link expressions that describe, that are very declarative and describe what you want to happen with all these incoming messages. For example, you know, one of the classic examples is if you were trying to implement something like an autocomplete, there's actually quite a bit of code if you think about implementing it in a traditional way of, well, if someone types real fast, you kind of want to not send off the service calls for every single key press. You kind of want to throttle them. And so with reactive extensions, that's actually really easy because you just say
Starting point is 00:27:25 you know create an observable from this event stream dot throttle specify a time and dot subscribe and then do something and so um you've built up this structure that's very declarative describing what you want to happen not how to do it. And then it just handles all of that for you. It's taken me quite a bit of time to sort of wrap my head around the implications of that because it actually kind of hurts your head at first when you first start playing with it. But I'm starting to get the hang of it a little better. And once you do, you realize how beautiful that sort of thing is. Are you seeing any sort of developments in C Sharp and.NET communities for vented or async programming like we're seeing in other frameworks?
Starting point is 00:28:19 Yeah, I think you'll see a lot more of that with the next version of C Sharp, C Sharp 5. The await keyword is one of the big things coming out, which allows you to write code in somewhat of a synchronous fashion, but not block the thread when you use the await keyword to call something that's task-based or truly async. So I think with that, a lot more people, writing async code will be accessible to a lot more people. I think reactive extensions is also, you know, it may play a big part in that. It's not quite gotten the notice or popularity in the C-sharp community as it probably deserves yet. But I think as, you know, people try to write async code and run into all the different race conditions
Starting point is 00:29:02 and problems that you run into, you know, reactive extensions kind of solved a lot of those things so that you don code and run into all the different race conditions and problems that you run into. Reactive extension has kind of solved a lot of those things so that you don't really run into race conditions as much. Your code might not work or it might work, but you won't run into a lot of those things if you follow the patterns that they supply. So I think that's a big area. And especially in the JavaScript realm where web developers are going to be writing
Starting point is 00:29:26 more and more JavaScript, and they're going to need to understand how to do a lot of things async so that they don't block the browser. Was it a culture shock moving from Microsoft, and you mentioned earlier the naming of the Atlas project, to the culture at GitHub? A little bit, yeah. I think, but in kind of a good way. I think I had read pretty much every blog entry from their blog and a lot of the writings
Starting point is 00:29:53 of some of their people. So I sort of knew what to expect. And I've worked from home before, so I even kind of knew what to expect. But even so, it is kind of, I was telling some people the other day that when they say that nobody's kind of watching you, seeing how you're spending your time
Starting point is 00:30:15 or are you in the office in certain hours, they really mean that. And I think for many people at Microsoft, they have sort of that culture. But the other thing people at Microsoft, they have sort of that culture. But the other thing is, at Microsoft, they sort of fill your day with so many meetings that you're really not in control of your own schedule as much as you'd like to be. Whereas at GitHub, you know, when they say we don't have meetings, they really mean that, you know, there's really, you know, no, like, meetings at all. Hardly. I mean, you know no like meetings at all hardly i mean you know sometimes we meet to hang out and
Starting point is 00:30:47 stuff but i mean there's no you know concept of oh let's call a meeting invite a bunch of uninterested people you know together and waste everyone's time you know instead you know we try to keep all the communication async via you know online chat um and uh I think that has really freed up so much of my time, whereas instead of spending my time in meeting, I'm actually spending time getting things done. And to me, that was a huge culture shock. I remember the first few days of working, I was just exhausted by the end of, you know, by five o'clock, simply because, you know, I spent all day working instead of sitting in a meeting. So I think I'm the opposite. If I'm in meetings all day, I'm drained. But if I'm creating and shipping, I leave the day feeling a little bit more fulfilled.
Starting point is 00:31:32 You mentioned the online chat. I know you guys use Hubot. You got a favorite Hubot script? I'm trying to think which ones can I talk about. Yeah, we have this one called Potty Mouths. So it kind of tracks how many times different people have said a swear word in the chat room. And I'm always in the top 10, but not quite near one or two. So I've been working on that.
Starting point is 00:31:58 That's great. My favorite is the sweet and dude from Dude, Where's My Car? Type sweet or dude, it tells you the opposite with an exclamation mark. I'll have to try that. That one, the Mustachify Me was also pretty great. I'm still amazed at its ability to put a mustache on any random photo that you drop into HipChat. Yeah, that one's amazing. Someone posted, we had a
Starting point is 00:32:25 company photo in our last summit and someone posted it into the chat room and it auto mustachifies any photos of people that you post in there and to see like all these tiny little mustaches on everybody was pretty pretty darn cool did you move to the Bay Area for this game? No, I still live in Bellevue, Washington, so I'm like a couple miles from Microsoft campus. My family really likes it up here, so we decided not to move down. Any other GitHubbers in your area? Yeah, there's one new one who lives in Seattle, but I think there were two others before,
Starting point is 00:33:05 but they've both moved down to San Francisco. All right, we've already covered what open source that you're following on GitHub. Did you see how we closed out episodes? Another question that a lot of times we'll ask at the end is we put you on the spot to ask who your programming hero is. Good question.
Starting point is 00:33:26 All right. Well, he's a friend of mine. So, you know, there's, I'm going to pick someone that isn't like world famous. Although there are like a lot of, I'm sure plenty of world famous open source developers.
Starting point is 00:33:40 But a friend of mine, David Fowler, he's a developer at Microsoft, but he pretty much wrote a huge amount of the core of NuGet. He's also a developer on SignalR and a developer on Jabber. And so a lot of the cool stuff that I mentioned, he was the key developer working on that stuff. So if you ever work with him, he's just quality. David Fowle on the Twitter. We'll be sure and put it in the show notes.
Starting point is 00:34:14 Yeah, yeah. Well, we're excited to help us find some.NET out in the GitHub area to feature on the changelog. Phil, thanks for coming on the show and talking about.NET and open source. My pleasure. Thank you very much.

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