<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ben Collins</title>
    <description>The latest articles on DEV Community by Ben Collins (@aggieben).</description>
    <link>https://dev.to/aggieben</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3444%2F1321.png</url>
      <title>DEV Community: Ben Collins</title>
      <link>https://dev.to/aggieben</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aggieben"/>
    <language>en</language>
    <item>
      <title>Using bootstrapped paket</title>
      <dc:creator>Ben Collins</dc:creator>
      <pubDate>Wed, 06 Dec 2017 15:04:54 +0000</pubDate>
      <link>https://dev.to/aggieben/using-bootstrapped-paket-d29</link>
      <guid>https://dev.to/aggieben/using-bootstrapped-paket-d29</guid>
      <description>

&lt;p&gt;I use the &lt;a href="https://fsprojects.github.io/Paket/"&gt;Paket&lt;/a&gt; package manager in several of my projects by bootstrapping, and so I wind up with a &lt;code&gt;.paket&lt;/code&gt; directory at the root of my project folder which contains the &lt;code&gt;paket.exe&lt;/code&gt; I need to use.  I find it cumbersome to invoke it with relative paths like &lt;code&gt;../../../.paket/paket.exe&lt;/code&gt;, so I wrote a little bit of powershell to ensure the bootstrapped paket is in my path.&lt;/p&gt;

&lt;p&gt;This is in the Cmder &lt;code&gt;$PrePrompt&lt;/code&gt; function, but if you're not using Cmder, you can do this in the &lt;code&gt;Prompt&lt;/code&gt; function of your Powershell profile (which you would have to add if you don't have it already.  See &lt;a href="https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_prompts?view=powershell-5.1"&gt;about_Prompts&lt;/a&gt; for more info.&lt;/p&gt;

&lt;p&gt;The relevant bits of my &lt;code&gt;user-profile.ps1&lt;/code&gt; set up for Cmder:&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="k"&gt;Function &lt;/span&gt;Get-AncestorPath &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$dir&lt;/span&gt;, &lt;span class="nv"&gt;$name&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;$target&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Get-ChildItem&lt;/span&gt; &lt;span class="nv"&gt;$dir&lt;/span&gt; |? &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;$_&lt;/span&gt;.Name -eq &lt;span class="nv"&gt;$name&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$target&lt;/span&gt; -ne &lt;span class="nv"&gt;$Null&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$target&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;elseif&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$dir&lt;/span&gt;.Parent -ne &lt;span class="nv"&gt;$Null&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return &lt;/span&gt;Get-AncestorPath &lt;span class="nv"&gt;$dir&lt;/span&gt;.Parent, &lt;span class="nv"&gt;$name&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$Null&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="o"&gt;[&lt;/span&gt;ScriptBlock]&lt;span class="nv"&gt;$PrePrompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;$paketDir&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; Get-AncestorPath &lt;span class="nv"&gt;$pwd&lt;/span&gt; &lt;span class="s2"&gt;".paket"&lt;/span&gt; | &lt;span class="nb"&gt;Select-Object&lt;/span&gt; -ExpandProperty FullName
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$paketDir&lt;/span&gt; -eq &lt;span class="nv"&gt;$Null&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$Env&lt;/span&gt;:Path -like &lt;span class="s2"&gt;"*.paket*"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="nb"&gt;Write-Verbose&lt;/span&gt; &lt;span class="s2"&gt;"Removing .paket path from &lt;/span&gt;&lt;span class="se"&gt;`$&lt;/span&gt;&lt;span class="s2"&gt;Env:Path"&lt;/span&gt;
            &lt;span class="nv"&gt;$Env&lt;/span&gt;:Path &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$Env&lt;/span&gt;:Path -split &lt;span class="s1"&gt;';'&lt;/span&gt; &lt;span class="se"&gt;`&lt;/span&gt;
                |? &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;$_&lt;/span&gt; -notlike &lt;span class="s2"&gt;"*.paket*"&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="se"&gt;`&lt;/span&gt;
                | Join-String -Separator &lt;span class="s1"&gt;';'&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="nb"&gt;Write-Verbose&lt;/span&gt; &lt;span class="s2"&gt;"Paket path: &lt;/span&gt;&lt;span class="nv"&gt;$paketDir&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;((&lt;/span&gt;&lt;span class="nv"&gt;$Env&lt;/span&gt;:Path -split &lt;span class="s1"&gt;';'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; -notcontains &lt;span class="nv"&gt;$paketDir&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nb"&gt;Write-Verbose&lt;/span&gt; &lt;span class="s2"&gt;"Adding '&lt;/span&gt;&lt;span class="nv"&gt;$paketDir&lt;/span&gt;&lt;span class="s2"&gt;' to path..."&lt;/span&gt;
        &lt;span class="nv"&gt;$Env&lt;/span&gt;:Path &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$paketDir&lt;/span&gt;&lt;span class="s2"&gt;;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nv"&gt;$Env&lt;/span&gt;:Path&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;




</description>
      <category>powershellmoments</category>
      <category>powershell</category>
      <category>paket</category>
      <category>dotnet</category>
    </item>
    <item>
      <title>Running view compilation with a progress bar</title>
      <dc:creator>Ben Collins</dc:creator>
      <pubDate>Tue, 31 Oct 2017 21:04:31 +0000</pubDate>
      <link>https://dev.to/aggieben/running-view-compilation-with-a-progress-bar-c4o</link>
      <guid>https://dev.to/aggieben/running-view-compilation-with-a-progress-bar-c4o</guid>
      <description>

&lt;p&gt;I ran into a build issue where view compilation failed on CI, but I didn't catch it because views aren't normally precompiled in developer builds.  Here's what I wrote to check things out without having to do it manually:&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$webdirs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;gci&lt;/span&gt; -rec -Directory -Exclude &lt;span class="s2"&gt;"*node_modules*"&lt;/span&gt; &lt;span class="se"&gt;`&lt;/span&gt;
  |? &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="o"&gt;((&lt;/span&gt;&lt;span class="nb"&gt;Test-Path&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nv"&gt;$_&lt;/span&gt;.FullName&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;\*.csproj"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; -eq &lt;span class="nv"&gt;$True&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="se"&gt;`&lt;/span&gt;
       -and &lt;span class="o"&gt;((&lt;/span&gt;&lt;span class="nb"&gt;Test-Path&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nv"&gt;$_&lt;/span&gt;.FullName&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;\web.config"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; -eq &lt;span class="nv"&gt;$True&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="nv"&gt;$webdirs&lt;/span&gt; |% &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;$idx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; 0&lt;span class="o"&gt;}{&lt;/span&gt;&lt;span class="nv"&gt;$pct&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$idx&lt;/span&gt;/&lt;span class="nv"&gt;$projDirs&lt;/span&gt;.Length; &lt;span class="se"&gt;`&lt;/span&gt;
  &lt;span class="nb"&gt;Write-Progress&lt;/span&gt; -Activity &lt;span class="s2"&gt;"Building Views"&lt;/span&gt; &lt;span class="se"&gt;`&lt;/span&gt;
                 -Status &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"{0:P}"&lt;/span&gt; -f &lt;span class="nv"&gt;$pct&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="se"&gt;`&lt;/span&gt;
                 -PercentComplete &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$pct&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;100&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="se"&gt;`&lt;/span&gt;
                 -CurrentOperation &lt;span class="s2"&gt;"aspnet_compiler -v temp -p &lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nv"&gt;$_&lt;/span&gt;.FullName&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;; &lt;span class="se"&gt;`&lt;/span&gt;
  aspnet_compiler -v temp -p &lt;span class="nv"&gt;$_&lt;/span&gt;.FullName; &lt;span class="nv"&gt;$idx&lt;/span&gt;++&lt;span class="o"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;




</description>
      <category>powershellmoments</category>
      <category>aspnet</category>
      <category>powershell</category>
    </item>
    <item>
      <title>Upgrading C# in your Razor files with PowerShell</title>
      <dc:creator>Ben Collins</dc:creator>
      <pubDate>Tue, 31 Oct 2017 16:26:01 +0000</pubDate>
      <link>https://dev.to/aggieben/upgrading-c-in-your-razor-files-with-powershell-9ga</link>
      <guid>https://dev.to/aggieben/upgrading-c-in-your-razor-files-with-powershell-9ga</guid>
      <description>

&lt;div class="highlight"&gt;&lt;pre class="highlight powershell"&gt;&lt;code&gt;git &lt;span class="nb"&gt;ls&lt;/span&gt;-files | &lt;span class="nb"&gt;sls &lt;/span&gt;web.config &lt;span class="se"&gt;` &lt;/span&gt;&lt;span class="c1"&gt;# get a list of web.config files here, but not with Get-ChildItem&lt;/span&gt;
  |% &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;gc&lt;/span&gt; &lt;span class="nv"&gt;$_&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; -replace &lt;span class="s2"&gt;"/langversion:default"&lt;/span&gt;,&lt;span class="s2"&gt;"/langversion:latest"&lt;/span&gt; &lt;span class="se"&gt;` &lt;/span&gt;
  | &lt;span class="nb"&gt;sc&lt;/span&gt; -Path &lt;span class="nv"&gt;$_&lt;/span&gt; -Encoding UTF8 &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;




</description>
      <category>powershell</category>
      <category>aspnet</category>
      <category>csharp</category>
      <category>powershellmoments</category>
    </item>
    <item>
      <title>Deleting remote-pruned branches in Git with PowerShell</title>
      <dc:creator>Ben Collins</dc:creator>
      <pubDate>Sun, 29 Oct 2017 21:11:34 +0000</pubDate>
      <link>https://dev.to/aggieben/deleting-remote-pruned-branches-in-git-with-powershell-7d5</link>
      <guid>https://dev.to/aggieben/deleting-remote-pruned-branches-in-git-with-powershell-7d5</guid>
      <description>

&lt;p&gt;It's easy to wind up with a substantial collection of branches that aren't on the remote anymore that keep Git's gc from cleaning up as much as it should.  Let's get rid of them.&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git branch -vv | sls gone `
  |% { $_.ToString().Trim() -split '\s+' | select -first 1 } `
  |% { git branch -D $_ }
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;




</description>
      <category>powershellmoments</category>
      <category>powershell</category>
      <category>git</category>
    </item>
    <item>
      <title>Hi, I'm Ben Collins</title>
      <dc:creator>Ben Collins</dc:creator>
      <pubDate>Tue, 21 Feb 2017 20:36:29 +0000</pubDate>
      <link>https://dev.to/aggieben/hi-im-ben-collins</link>
      <guid>https://dev.to/aggieben/hi-im-ben-collins</guid>
      <description>&lt;p&gt;I have been coding for 18 years.&lt;/p&gt;

&lt;p&gt;You can find me on GitHub as &lt;a href="https://github.com/aggieben" rel="noopener noreferrer"&gt;aggieben&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I live in Greenville, Texas.&lt;/p&gt;

&lt;p&gt;I work for Olo.&lt;/p&gt;

&lt;p&gt;I mostly program in these languages: C#, JavaScript, F#, TypeScript.&lt;/p&gt;

&lt;p&gt;I am currently learning more about ASP.NET Core, maching learning, F#, C++.&lt;/p&gt;

&lt;p&gt;Nice to meet you.&lt;/p&gt;

&lt;p&gt;Also, for anyone curious: No, I'm not &lt;a href="http://bencollins.com" rel="noopener noreferrer"&gt;that&lt;/a&gt; &lt;a href="http://www.red-bean.com/sussman/" rel="noopener noreferrer"&gt;Ben&lt;/a&gt; &lt;a href="http://bencollins.org" rel="noopener noreferrer"&gt;Collins&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>introduction</category>
    </item>
  </channel>
</rss>
