{"id":1476,"date":"2014-07-05T12:37:56","date_gmt":"2014-07-05T12:37:56","guid":{"rendered":"http:\/\/www.navision-blog.de\/blog\/?p=1476"},"modified":"2014-07-05T18:52:40","modified_gmt":"2014-07-05T18:52:40","slug":"microsoft-open-source-development-and-codeplex","status":"publish","type":"post","link":"http:\/\/www.navision-blog.de\/blog\/2014\/07\/05\/microsoft-open-source-development-and-codeplex\/","title":{"rendered":"Microsoft, Open Source development and Codeplex"},"content":{"rendered":"<p>Recently Microsoft released all their major programming languages as open source and even started to accept pull requests. I\u00a0didn&#8217;t think\u00a0this would ever be possible at Microsoft, but they\u00a0opened up and people like me started to contribute:<\/p>\n<ul>\n<li><a href=\"https:\/\/visualfsharp.codeplex.com\">F#<\/a>\u00a0 &#8211; \u00a063 pull requests with 21 applied and 26 open<\/li>\n<li><a href=\"https:\/\/typescript.codeplex.com\">TypeScript<\/a>\u00a0&#8211;\u00a049 pull requests with 7 applied and 4 open<\/li>\n<li><a href=\"https:\/\/roslyn.codeplex.com\">Roslyn compilers with C# and VB.NET<\/a> &#8211;\u00a016 pull requests with 9 applied and 1 open<\/li>\n<\/ul>\n<p>Personally I sent 29 (mostly small) pull requests to the Visual F# project. 5 pull requests\u00a0already got accepted\u00a0and 15 are still under evaluation. \u00a0In principle the\u00a0development process seems to be working very well. Especially in the Visual F# project Don Syme and the Visual F# team are doing an excellent job to encourage the community. They are marking <a href=\"https:\/\/fslang.uservoice.com\/\">user voice issues<\/a> as &#8220;approved in principle&#8221;\u00a0and even provide detailed documents for implementation tasks (See <a href=\"https:\/\/github.com\/fsharp\/FSharpLangDesign\/blob\/master\/CoreLibraryFunctions.md\">CoreLibraryFunctions<\/a>). This makes it very easy to get started and to hack a bit on the F# compiler. A big thanks to you guys.<\/p>\n<p>A very important part of the open source is the review process. The F# community is awesome in this regards. On issues like a new <a href=\"https:\/\/visualfsharp.codeplex.com\/SourceControl\/network\/forks\/forki\/fsharp\/contribution\/7040\">&#8220;compareWith&#8221; function<\/a> I got comments with remarks about coding style, test cases, documentation and lots of new ideas about possible performance improvements. It&#8217;s really exciting to be part of such an active and welcoming community. There is only one &#8220;but&#8221; and this &#8220;but&#8221; is the choice of the development platform. I really think <a href=\"https:\/\/www.codeplex.com\/\">CodePlex<\/a>\u00a0is hindering these projects to become even more successful. In this post I want to show some of my experiences with Codeplex. Remember I already sent 29 pull requests so I think it&#8217;s fair to say I tried!<\/p>\n<h5>Overall usability<\/h5>\n<p>The first impression on the Codeplex site is that every click feels so frustrating slow. Waiting 4s and more for a site to load doesn&#8217;t exactly feel like 2014.<\/p>\n<p>If you want to comment on something then there is an &#8220;interesting&#8221; distinction between issues and pull requests. On issues\u00a0you get a preview box and some buttons to make formatting easier, but you can&#8217;t edit your comments later:<\/p>\n<p><a href=\"http:\/\/www.navision-blog.de\/images\/comment_editor.png\"><img src=\"http:\/\/www.navision-blog.de\/images\/comment_editor.png\" alt=\"Issue comment editor\" width=\"500\" \/><\/a><\/p>\n<p>On pull request you can edit your comments later but your don&#8217;t have the formatting buttons:<\/p>\n<p><a href=\"http:\/\/www.navision-blog.de\/images\/comment_editor2.png\"><img src=\"http:\/\/www.navision-blog.de\/images\/comment_editor2.png\" alt=\"Pull request comment editor\" width=\"500\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<h5>E-Mail notifications<\/h5>\n<p>Like most online portals you can enable E-Mail notifications on Codeplex. Unfortunately it doesn&#8217;t really work. I tried to set all notification sliders I found to the max. and still don&#8217;t get notifcations if someone sends a new pull request to the Visual F# projects. Instead I&#8217;m getting annoying E-Mail notifications on my own activities:<\/p>\n<p><a href=\"http:\/\/www.navision-blog.de\/images\/mailnotifi.png\"><img src=\"http:\/\/www.navision-blog.de\/images\/mailnotifi.png\" alt=\"E-Mail notifications on own comments\" width=\"500\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Things like this make you wonder if they actually dogfood their own stuff.<\/p>\n<h5>Code reviews on pull requests<\/h5>\n<p>As described above good code reviews are a very important part of any software development project, for open source programming language projects even more so. Unfortunately Codeplex has a really bad code review tool. I mean it is possible to comment on diffs:<\/p>\n<p><a href=\"http:\/\/www.navision-blog.de\/images\/codecomments.png\"><img src=\"http:\/\/www.navision-blog.de\/images\/codecomments.png\" alt=\"Comments on diff\" width=\"500\" \/><\/a><\/p>\n<p>But if you update the pull request with a fix then the comment is displayed on the new fixed code and makes no sense any more:<\/p>\n<p><a href=\"http:\/\/www.navision-blog.de\/images\/applied.png\"><img src=\"http:\/\/www.navision-blog.de\/images\/applied.png\" alt=\"Wrong code comments on diff\" width=\"500\" \/><\/a><\/p>\n<p>The whole code review is broken when you add commits to a pull request and it get&#8217;s even messier when you rebase your pull request on the current master. Rebasing pull requests is a very common operation in open source projects since it allows to move the merge effort from the project maintainer to the contributor. But unfortunately\u00a0Codeplex gets confused by the rebase and now shows a wrong diff:<\/p>\n<p><a href=\"http:\/\/www.navision-blog.de\/images\/wrong_diff.png\"><img src=\"http:\/\/www.navision-blog.de\/images\/wrong_diff.png\" alt=\"Wrong diff on rebased pull requests\" width=\"500\" \/><\/a><\/p>\n<p>A code platform shows a wrong diff &#8211; yep I couldn&#8217;t believe it myself so I tried again. <a href=\"https:\/\/visualfsharp.codeplex.com\/SourceControl\/network\/forks\/forki\/fsharp\/contribution\/7040\">#7040<\/a>, <a href=\"https:\/\/visualfsharp.codeplex.com\/SourceControl\/network\/forks\/forki\/fsharp\/contribution\/7045\">#7045<\/a>,\u00a0<a href=\"https:\/\/visualfsharp.codeplex.com\/SourceControl\/network\/forks\/forki\/fsharp\/contribution\/7060\">#7060<\/a>, always the same.<\/p>\n<h5>Finding the needle in the hashstack<\/h5>\n<p>A couple of days ago I wanted to tweet a link to a cool performance trick and knew it was the last commit on a pull request. Now try to find the url:<\/p>\n<p><a href=\"http:\/\/www.navision-blog.de\/images\/alpha.png\"><img src=\"http:\/\/www.navision-blog.de\/images\/alpha.png\" alt=\"Alphabetical order by hash\" width=\"500\" \/><\/a><\/p>\n<p>Yes that&#8217;s right &#8211; the commits are ordered in alphabetical order BY HASH\u00a0or as I call it in &#8220;least useful order&#8221;.<\/p>\n<h5>Reporting Codeplex issues<\/h5>\n<p>Of course you may ask: &#8220;Steffen why didn&#8217;t you report these issues to the Codeplex team?&#8221; and that&#8217;s a valid question.\u00a0Actually I went to <a href=\"https:\/\/codeplex.codeplex.com\">codeplex.codeplex.com<\/a>,\u00a0which I believe is the home of the Codeplex project, and looked at their\u00a0<a href=\"https:\/\/codeplex.codeplex.com\/workitem\/list\/basic\">issue list<\/a>. This is what I got:<\/p>\n<p><a href=\"http:\/\/www.navision-blog.de\/images\/codeplexissues.png\"><img src=\"http:\/\/www.navision-blog.de\/images\/codeplexissues.png\" alt=\"Codeplex has quite some issues\" width=\"500\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Not a single issue on the first page is related to Codeplex and it seems they don&#8217;t even care to close this spam. So why should I care to log issues there?<\/p>\n<h5>What now?<\/h5>\n<p>It&#8217;s more than\u00a0obvious &#8211; use the &#8220;move source code to github&#8221; strategy and people already created an <a href=\"https:\/\/typescript.codeplex.com\/workitem\/2420\">issue on the TypeScript project<\/a>. Unfortunately it got closed:<\/p>\n<p><a href=\"http:\/\/www.navision-blog.de\/images\/businessneeds.png\"><img src=\"http:\/\/www.navision-blog.de\/images\/businessneeds.png\" alt=\"Business needs\" width=\"500\" \/><\/a><\/p>\n<p>After reading this\u00a0I really doubt it was the decision of the teams to use Codeplex. Fortunately the ASP.NET team seems to be an exception to this. Somehow they managed to move to <a href=\"https:\/\/github.com\/aspnet\">github.com\/aspnet<\/a>.<\/p>\n<p>There are also other ways. Microsoft could really invest in Codeplex and make it a usable platform. But I don&#8217;t see this happing, because it will cost A LOT of money. Even if they would open source Codeplex I don&#8217;t see a community which is willing to improve this site.<\/p>\n<p>So I appeal to the people in charge at Microsoft please answer the following questions:<\/p>\n<ul>\n<li>What are the\u00a0reasons for putting the Visual F# project\u00a0on Codeplex, especially when the majority of the existing <a href=\"http:\/\/fsharp.org\/community\/projects\/\">F# projects and community<\/a>\u00a0already operate on Github?<\/li>\n<li>Do you think it&#8217;s more important to support Codeplex or to grow a community around the programming language projects?<\/li>\n<li>If the F# community voted for the project to be moved, would you consider moving it?<\/li>\n<li>If you insist on Codeplex how and when do you plan to fix these usability issues?<\/li>\n<\/ul>\n<p><strong>So please let your OSS\u00a0teams and their community\u00a0pick the open source platform they want!<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Recently Microsoft released all their major programming languages as open source and even started to accept pull requests. I\u00a0didn&#8217;t think\u00a0this would ever be possible at Microsoft, but they\u00a0opened up and people like me started to contribute: F#\u00a0 &#8211; \u00a063 pull requests with 21 applied and 26 open TypeScript\u00a0&#8211;\u00a049 pull requests with 7 applied and 4 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[4,12,1,448],"tags":[],"_links":{"self":[{"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/posts\/1476"}],"collection":[{"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/comments?post=1476"}],"version-history":[{"count":29,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/posts\/1476\/revisions"}],"predecessor-version":[{"id":1505,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/posts\/1476\/revisions\/1505"}],"wp:attachment":[{"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/media?parent=1476"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/categories?post=1476"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/tags?post=1476"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}