{"id":1535,"date":"2015-10-14T11:33:12","date_gmt":"2015-10-14T11:33:12","guid":{"rendered":"http:\/\/www.navision-blog.de\/blog\/?p=1535"},"modified":"2015-10-14T14:26:40","modified_gmt":"2015-10-14T14:26:40","slug":"crazy-stuff-people-do-with-fake-and-paket-1-of-n","status":"publish","type":"post","link":"http:\/\/www.navision-blog.de\/blog\/2015\/10\/14\/crazy-stuff-people-do-with-fake-and-paket-1-of-n\/","title":{"rendered":"Crazy stuff people do with FAKE and Paket &#8211; 1 of n"},"content":{"rendered":"<p>As many readers already know I&#8217;m maintaing the open source projects <a href=\"https:\/\/github.com\/fsharp\/FAKE\">FAKE<\/a> and <a href=\"https:\/\/github.com\/fsprojects\/Paket\">Paket<\/a>. These projects are used in many companies and open source projects to make continuous integration work on .NET and mono.<\/p>\n<p>In this article series I want to highlight some of the more\u00a0unsual\u00a0use cases. Today I want to start and highlight the first 6 amazing\u00a0projects.<\/p>\n<h5>FsReveal<\/h5>\n<blockquote><p>&#8220;<a href=\"http:\/\/fsprojects.github.io\/FsReveal\/\">FsReveal<\/a> allows you to write beautiful slides in Markdown and brings C# and F# to the <a href=\"https:\/\/github.com\/hakimel\/reveal.js\/\">reveal.js<\/a> web presentation framework.&#8221; [<a href=\"https:\/\/github.com\/fsprojects\/FsReveal\">project site<\/a>]<\/p><\/blockquote>\n<p>FsReveal uses <a href=\"http:\/\/fsprojects.github.io\/Paket\/github-dependencies.html\">Paket&#8217;s GitHub file dependencies<\/a>\u00a0feature to download reveal.js:<\/p>\n<p><a href=\"https:\/\/github.com\/fsprojects\/FsReveal\/blob\/develop\/paket.dependencies#L4\"><img loading=\"lazy\" class=\"alignnone wp-image-1544\" src=\"http:\/\/www.navision-blog.de\/blog\/wp-content\/uploads\/2015\/10\/FsRevealGithub.png\" alt=\"FsReveal GitHub references\" width=\"500\" height=\"276\" srcset=\"http:\/\/www.navision-blog.de\/blog\/wp-content\/uploads\/2015\/10\/FsRevealGithub.png 997w, http:\/\/www.navision-blog.de\/blog\/wp-content\/uploads\/2015\/10\/FsRevealGithub-300x166.png 300w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/a><\/p>\n<p>It also uses\u00a0a FAKE build script which converts Markdown files to html slides (via <a href=\"https:\/\/github.com\/tpetricek\/FSharp.Formatting\">FSharp.Formatting<\/a>) and runs these slides in a <a href=\"http:\/\/suave.io\/\">suave.io web server<\/a>. FAKE&#8217;s file system watcher + suave&#8217;s socket implementation even allows you to edit your slides with automatic preview:<\/p>\n<p><a href=\"http:\/\/www.navision-blog.de\/images\/atom.gif\"><img loading=\"lazy\" width=\"1889\" height=\"970\" class=\"wp-image-1546\" src=\"http:\/\/www.navision-blog.de\/images\/fsreveal.gif\" alt=\"FSReveal\" \/><\/a><\/p>\n<h5>Stanford.NLP.NET<\/h5>\n<blockquote><p>&#8220;<a href=\"http:\/\/sergey-tihon.github.io\/Stanford.NLP.NET\/\">Stanford.NLP for .NET<\/a> is a port of Stanford NLP distributions to .NET.<\/p>\n<p>This project contains build scripts that recompile Stanford NLP .jar packages to .NET assemblies using <a href=\"http:\/\/www.ikvm.net\/\">IKVM.NET<\/a>, tests that help to be sure that recompiled packages are workable and <a href=\"http:\/\/sergey-tihon.github.io\/Stanford.NLP.NET\/\">Stanford.NLP for .NET documentation site<\/a> that hosts samples for all packages. All recompiled packages are available on NuGet.&#8221; [<a href=\"https:\/\/github.com\/sergey-tihon\/Stanford.NLP.NET\">project site<\/a>]<\/p><\/blockquote>\n<p>This project downloads .jar packages via <a href=\"http:\/\/fsprojects.github.io\/Paket\/http-dependencies.html\">Paket&#8217;s HTTP dependencies\u00a0feature<\/a>,\u00a0recompiles everything to .NET via IKVM.NET in a FAKE build script and republishes it on NuGet. Automatic Java to .NET compilation &#8211; how cool is that?<\/p>\n<p><a href=\"https:\/\/github.com\/sergey-tihon\/Stanford.NLP.NET\/blob\/master\/paket.dependencies#L14\"><img loading=\"lazy\" class=\"alignnone wp-image-1541\" src=\"http:\/\/www.navision-blog.de\/blog\/wp-content\/uploads\/2015\/10\/StanfordNLPHttp1.png\" alt=\"Stanford NLP HTTP reference\" width=\"500\" height=\"305\" srcset=\"http:\/\/www.navision-blog.de\/blog\/wp-content\/uploads\/2015\/10\/StanfordNLPHttp1.png 999w, http:\/\/www.navision-blog.de\/blog\/wp-content\/uploads\/2015\/10\/StanfordNLPHttp1-300x183.png 300w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/a><\/p>\n<h5>Paket.VisualStudio<\/h5>\n<blockquote><p>&#8220;Manage your <a href=\"http:\/\/fsprojects.github.io\/Paket\/\">Paket<\/a> dependencies from Visual Studio!&#8221; [<a href=\"https:\/\/github.com\/fsprojects\/Paket.VisualStudio\">project site<\/a>]<\/p><\/blockquote>\n<p>Paket.VisualStudio is a VisualStudio addin that you can download from <a href=\"https:\/\/visualstudiogallery.msdn.microsoft.com\/ce104917-e8b3-4365-9490-8432c6e75c36\">Microsoft&#8217;s VisualStudio gallery<\/a>. Unfortunately even in 2015 Microsoft doesn&#8217;t provide an API for automating the upload to its gallery. Therefore Paket.VisualStudio\u00a0uses <a href=\"http:\/\/fsprojects.github.io\/Paket\/nuget-dependencies.html\">Paket&#8217;s NuGet dependencies<\/a>\u00a0feature to download <a href=\"http:\/\/lefthandedgoat.github.io\/canopy\/\">canopy<\/a> and <a href=\"http:\/\/www.seleniumhq.org\/projects\/webdriver\/\">Selenium<\/a>:<\/p>\n<p><a href=\"https:\/\/github.com\/fsprojects\/Paket.VisualStudio\/blob\/c6ee2eafbb82cbae7a5dd7bf42b4aefdd7e6284e\/paket.dependencies#L18\"><img loading=\"lazy\" class=\"alignnone wp-image-1553\" src=\"http:\/\/www.navision-blog.de\/blog\/wp-content\/uploads\/2015\/10\/Paket.VS_.png\" alt=\"Paket.VS\" width=\"500\" height=\"320\" srcset=\"http:\/\/www.navision-blog.de\/blog\/wp-content\/uploads\/2015\/10\/Paket.VS_.png 990w, http:\/\/www.navision-blog.de\/blog\/wp-content\/uploads\/2015\/10\/Paket.VS_-300x192.png 300w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/a><\/p>\n<p>It then uses canopy + Selenium in a FAKE script to upload the addin via browser automation:<\/p>\n<p><a href=\"http:\/\/www.navision-blog.de\/images\/gallery.gif\"><img class=\"wp-image-1546\" src=\"http:\/\/www.navision-blog.de\/images\/VSGallery.gif\" alt=\"VS Gallery\" \/><\/a><\/p>\n<h5>Ionide-F#<\/h5>\n<blockquote><p>&#8220;It&#8217;s part of <a href=\"http:\/\/ionide.io\/\">Ionide<\/a> plugin suite. F# IDE-like possibilities in Atom editor&#8221; [<a href=\"https:\/\/github.com\/ionide\/ionide-fsharp\">project site<\/a>]<\/p><\/blockquote>\n<p>Ionide is an Atom plugin written in F#. It&#8217;s using Paket and FAKE to automate the build and release process.<\/p>\n<p>First it uses <a href=\"http:\/\/funscript.info\/\">FunScript<\/a> to transpile F# to Javascript and then automates <a href=\"https:\/\/www.npmjs.com\/\">npm<\/a>\u00a0to resolve Javascript dependencies and <a href=\"https:\/\/github.com\/atom\/apm\">apm<\/a> to upload the plugin to the <a href=\"https:\/\/atom.io\/packages\/ionide-fsharp\">Atom gallery<\/a>.<\/p>\n<h5>Akka.Net<\/h5>\n<blockquote><p>&#8220;<strong>Akka.NET<\/strong> is a community-driven port of the popular Java\/Scala framework <a href=\"http:\/\/akka.io\/\">Akka<\/a> to .NET.<span style=\"line-height: 1.5;\">&#8221; [<\/span><a style=\"line-height: 1.5;\" href=\"https:\/\/github.com\/akkadotnet\/akka.net\/\">project site<\/a><span style=\"line-height: 1.5;\">]<\/span><\/p><\/blockquote>\n<p>Akka.Net is a big (mainly C#) open source project that uses FAKE and Paket. One interesting observation is that it needs to create\u00a0different xUnit addins and therefore uses<a href=\"http:\/\/fsprojects.github.io\/Paket\/groups.html\"> Paket&#8217;s groups feature<\/a> to maintain the xUnit versions.<\/p>\n<p><a href=\"https:\/\/github.com\/akkadotnet\/akka.net\/blob\/dev\/paket.dependencies#L43\"><img loading=\"lazy\" class=\"alignnone wp-image-1560\" src=\"http:\/\/www.navision-blog.de\/blog\/wp-content\/uploads\/2015\/10\/akka.png\" alt=\"Akka.Net\" width=\"500\" height=\"496\" srcset=\"http:\/\/www.navision-blog.de\/blog\/wp-content\/uploads\/2015\/10\/akka.png 928w, http:\/\/www.navision-blog.de\/blog\/wp-content\/uploads\/2015\/10\/akka-150x150.png 150w, http:\/\/www.navision-blog.de\/blog\/wp-content\/uploads\/2015\/10\/akka-300x298.png 300w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/a><\/p>\n<h5>FSharp.Data<\/h5>\n<blockquote><p>&#8220;The F# Data library\u00a0implements everything you need to access data in your F# applications and scripts. It implements F# type providers for working with structured file formats (CSV, HTML, JSON and XML) and for accessing the WorldBank data. It also includes helpers for parsing CSV, HTML and JSON files and for sending HTTP requests.<span style=\"line-height: 1.5;\">&#8221; [<\/span><a style=\"line-height: 1.5;\" href=\"https:\/\/github.com\/fsharp\/FSharp.Data\">project site<\/a><span style=\"line-height: 1.5;\">]<\/span><\/p><\/blockquote>\n<p>One of the many interesting things in FSharp.Data&#8217;s build is that it uses Paket to retrieve the\u00a0FSharp.TypeProviders.StarterPack. These files need to be\u00a0included in any F# type provider project and Paket allows you to manage this easily.<\/p>\n<p><a href=\"https:\/\/github.com\/fsharp\/FSharp.Data\/blob\/master\/paket.dependencies#L16\"><img loading=\"lazy\" class=\"alignnone wp-image-1558\" src=\"http:\/\/www.navision-blog.de\/blog\/wp-content\/uploads\/2015\/10\/FSharpData.png\" alt=\"FSharp.Data\" width=\"500\" height=\"296\" srcset=\"http:\/\/www.navision-blog.de\/blog\/wp-content\/uploads\/2015\/10\/FSharpData.png 993w, http:\/\/www.navision-blog.de\/blog\/wp-content\/uploads\/2015\/10\/FSharpData-300x177.png 300w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>As many readers already know I&#8217;m maintaing the open source projects FAKE and Paket. These projects are used in many companies and open source projects to make continuous integration work on .NET and mono. In this article series I want to highlight some of the more\u00a0unsual\u00a0use cases. Today I want to start and highlight the [&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,448,546,3],"tags":[534,545],"_links":{"self":[{"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/posts\/1535"}],"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=1535"}],"version-history":[{"count":30,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/posts\/1535\/revisions"}],"predecessor-version":[{"id":1572,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/posts\/1535\/revisions\/1572"}],"wp:attachment":[{"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/media?parent=1535"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/categories?post=1535"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/tags?post=1535"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}