<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://snowdrift.tech/feed.xml" rel="self" type="application/atom+xml" /><link href="https://snowdrift.tech/" rel="alternate" type="text/html" hreflang="en" /><updated>2026-08-30T18:19:27+00:00</updated><id>https://snowdrift.tech/feed.xml</id><title type="html">Snowdrift.tech</title><subtitle>Perspectives on technology, infosec, and programming. From somewhere up north in a snow drift.</subtitle><author><name>David Van Loon</name></author><entry><title type="html">EstimateThis.Work Now Supports Dark Mode</title><link href="https://snowdrift.tech/development/estimation/planning-poker/updates/2026/08/30/estimatethis-work-now-supports-dark-mode.html" rel="alternate" type="text/html" title="EstimateThis.Work Now Supports Dark Mode" /><published>2026-08-30T18:15:00+00:00</published><updated>2026-08-30T18:15:00+00:00</updated><id>https://snowdrift.tech/development/estimation/planning-poker/updates/2026/08/30/estimatethis-work-now-supports-dark-mode</id><content type="html" xml:base="https://snowdrift.tech/development/estimation/planning-poker/updates/2026/08/30/estimatethis-work-now-supports-dark-mode.html"><![CDATA[<p>My fork of <a href="https://github.com/Zuehlke/poinz">Poinz</a>, <a href="https://snowdrift.tech/development/estimation/planning-poker/tools/2025/09/17/free-web-based-planning-poker-for-teams">a web-based planning poker application</a>, now supports a native dark mode that respects your system preference. Try it now at <a href="https://estimatethis.work">https://estimatethis.work</a>!</p>]]></content><author><name>David Van Loon</name></author><category term="development" /><category term="estimation" /><category term="planning-poker" /><category term="updates" /><summary type="html"><![CDATA[My fork of Poinz, a web-based planning poker application, now supports a native dark mode that respects your system preference. Try it now at https://estimatethis.work!]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://snowdrift.tech/img/bg-posts.png" /><media:content medium="image" url="https://snowdrift.tech/img/bg-posts.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Free Web-Based Planning Poker for Teams</title><link href="https://snowdrift.tech/development/estimation/planning-poker/tools/2025/09/17/free-web-based-planning-poker-for-teams.html" rel="alternate" type="text/html" title="Free Web-Based Planning Poker for Teams" /><published>2025-09-17T20:55:00+00:00</published><updated>2025-09-17T20:55:00+00:00</updated><id>https://snowdrift.tech/development/estimation/planning-poker/tools/2025/09/17/free-web-based-planning-poker-for-teams</id><content type="html" xml:base="https://snowdrift.tech/development/estimation/planning-poker/tools/2025/09/17/free-web-based-planning-poker-for-teams.html"><![CDATA[<p>I’ve been using <a href="https://github.com/Zuehlke/poinz">Poinz</a> for long enough it was time to run my <a href="https://estimatethis.work">own instance</a>.</p>

<p>Poinz is an open-source web-based planning poker application for software development teams or anyone else who needs to perform estimates as a remote team.</p>

<p>Introducing <a href="https://estimatethis.work">EstimateThis.Work</a>, a free instance of Poinz for anyone to use for their planning poker needs: <a href="https://estimatethis.work">https://estimatethis.work</a></p>

<p>Let me know if you have any questions or run into any issues. As with any Poinz instance, consider all information you enter to be potentially publicly available, since rooms are not password-protected by default. Second, don’t use it as a permanent data store. Record your scores in your issue tracking platform of choice.</p>

<p>Enjoy!</p>]]></content><author><name>David Van Loon</name></author><category term="development" /><category term="estimation" /><category term="planning-poker" /><category term="tools" /><summary type="html"><![CDATA[I’ve been using Poinz for long enough it was time to run my own instance.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://snowdrift.tech/img/bg-posts.png" /><media:content medium="image" url="https://snowdrift.tech/img/bg-posts.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Configuring an HTTP Proxy in BlueStacks App Player on Windows</title><link href="https://snowdrift.tech/android/debugging/guides/2025/02/20/configuring-an-http-proxy-in-bluestacks-app-player-on-windows.html" rel="alternate" type="text/html" title="Configuring an HTTP Proxy in BlueStacks App Player on Windows" /><published>2025-02-20T12:52:00+00:00</published><updated>2025-02-20T12:52:00+00:00</updated><id>https://snowdrift.tech/android/debugging/guides/2025/02/20/configuring-an-http-proxy-in-bluestacks-app-player-on-windows</id><content type="html" xml:base="https://snowdrift.tech/android/debugging/guides/2025/02/20/configuring-an-http-proxy-in-bluestacks-app-player-on-windows.html"><![CDATA[<h1 id="getting-started">Getting Started</h1>

<p>To configure an HTTP proxy in BlueStacks App Player on Windows, for example to use Fiddler or a similar tool to inspect and debug HTTP traffic, use the ADB interface for BlueStacks.</p>

<p>First, launch BlueStacks App Player.</p>

<p>Open Windows Terminal and navigate to the <code class="language-plaintext highlighter-rouge">C:\Program Files\BlueStacks_nxt</code> directory.</p>

<p>Confirm that the app player is visible by running <code class="language-plaintext highlighter-rouge">.\HD-Adb.exe devices</code>. You should see the emulator device attached.</p>

<h1 id="configure-the-proxy">Configure the Proxy</h1>

<p>Use the following command to configure the HTTP proxy, replacing the IP address and port number as appropriate to your setup:</p>

<p><code class="language-plaintext highlighter-rouge">.\HD-Adb.exe shell settings put global http_proxy 192.168.1.1:1234</code></p>

<p>You may need to restart the app player for the setting to take effect.</p>

<h1 id="remove-the-proxy-configuration">Remove the Proxy Configuration</h1>

<p>Run the following commands to remove the proxy configuration:</p>

<div class="language-powershell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">.</span><span class="n">\HD-Adb.exe</span><span class="w"> </span><span class="nx">shell</span><span class="w"> </span><span class="nx">settings</span><span class="w"> </span><span class="nx">delete</span><span class="w"> </span><span class="nx">global</span><span class="w"> </span><span class="nx">global_http_proxy_host</span><span class="w">
</span><span class="o">.</span><span class="n">\HD-Adb.exe</span><span class="w"> </span><span class="nx">shell</span><span class="w"> </span><span class="nx">settings</span><span class="w"> </span><span class="nx">delete</span><span class="w"> </span><span class="nx">global</span><span class="w"> </span><span class="nx">global_http_proxy_port</span><span class="w">
</span><span class="o">.</span><span class="n">\HD-Adb.exe</span><span class="w"> </span><span class="nx">shell</span><span class="w"> </span><span class="nx">settings</span><span class="w"> </span><span class="nx">delete</span><span class="w"> </span><span class="nx">global</span><span class="w"> </span><span class="nx">http_proxy</span><span class="w">
</span></code></pre></div></div>

<p>You may need to restart the app player for the setting to take effect.</p>]]></content><author><name>David Van Loon</name></author><category term="android" /><category term="debugging" /><category term="guides" /><summary type="html"><![CDATA[Getting Started]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://snowdrift.tech/img/bg-posts.png" /><media:content medium="image" url="https://snowdrift.tech/img/bg-posts.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Including JIRA Issue Number in Commit Messages</title><link href="https://snowdrift.tech/development/2020/04/28/including-jira-issue-number-in-commit-messages.html" rel="alternate" type="text/html" title="Including JIRA Issue Number in Commit Messages" /><published>2020-04-28T01:03:03+00:00</published><updated>2020-04-28T01:03:03+00:00</updated><id>https://snowdrift.tech/development/2020/04/28/including-jira-issue-number-in-commit-messages</id><content type="html" xml:base="https://snowdrift.tech/development/2020/04/28/including-jira-issue-number-in-commit-messages.html"><![CDATA[<p>The project on which I am currently working requires by convention that all commits associated with a specific JIRA issue have messages that begin with the issue number, followed by a colon and the rest of the commit message.</p>

<p>Over time, I’ve grown tired of typing (and mistyping) the issue number for each commit message, and I’ve decided to automate the process with a script.</p>

<p>The obvious place to add this functionality is in a git hook. Git hooks are scripts that are called by git at specific times, and they allow the user to customize the behavior of git. Learn more about git hooks specifically <a href="https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks">here</a>.</p>

<p>Due to integration between JIRA and Bitbucket on my project, each git branch already includes the issue number of the related JIRA issue. Thus, my git hook runs at commit time and checks the branch name for a JIRA issue number. If present, it makes sure my commit message begins with the issue number.</p>

<p>I’ve used <a href="https://github.com/PowerShell/PowerShell/">PowerShell</a> as a cross-platform scripting environment, so the script should work on Windows, OSX, and Linux with minimal modifications.</p>

<p>After a bit of experimentation, I settled on the following core script:</p>

<script src="https://gist.github.com/d1vanloon/57c84e25b21ef222a5702bdd750f145a.js"></script>

<p>Due to a <a href="https://github.com/PowerShell/PowerShell/issues/16480">recent change in PowerShell</a>, this script cannot be directly used as the commit hook, so I placed this core script in a central directory for Git hooks scripts, in <code class="language-plaintext highlighter-rouge">C:\Tools\git-hooks\</code>.</p>

<p>I created a second, wrapper script as follows:</p>

<script src="https://gist.github.com/d1vanloon/93e39163abf2222a91fb91a0d0a4b464.js"></script>

<p>I placed the script in the git hooks directory for my project, and it ran on my next commit.</p>

<p>To use with your project, place the core script in <code class="language-plaintext highlighter-rouge">C:\Tools\git-hooks\</code> and the wrapper script in <code class="language-plaintext highlighter-rouge">&lt;project_directory&gt;\.git\hooks\</code> and ensure it has execute permissions. You may also need to update the wrapper script with the correct path to your PowerShell executable (you can find this by executing <code class="language-plaintext highlighter-rouge">Get-Command pwsh | Select-Object Source</code>).</p>

<p><em>Update 11/27/2023: Added workaround to support newer versions of PowerShell.</em></p>]]></content><author><name>David Van Loon</name></author><category term="development" /><summary type="html"><![CDATA[The project on which I am currently working requires by convention that all commits associated with a specific JIRA issue have messages that begin with the issue number, followed by a colon and the rest of the commit message.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://snowdrift.tech/img/bg-index.png" /><media:content medium="image" url="https://snowdrift.tech/img/bg-index.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Custom URL Shortener</title><link href="https://snowdrift.tech/projects/2020/04/19/custom-url-shortener.html" rel="alternate" type="text/html" title="Custom URL Shortener" /><published>2020-04-19T20:25:52+00:00</published><updated>2020-04-19T20:25:52+00:00</updated><id>https://snowdrift.tech/projects/2020/04/19/custom-url-shortener</id><content type="html" xml:base="https://snowdrift.tech/projects/2020/04/19/custom-url-shortener.html"><![CDATA[<p>I’ve been on a mini-side-project spree lately, and I decided (on a whim) to set up my own URL shortener. If you’ve been on Twitter (or really anywhere online), you’ve probably seen the result of such services. It’s like bit.ly, but with a personalized address. For example, Microsoft uses aka.ms for their short-links.</p>

<p>After checking the features and pricing of a few providers (and considering a self-hosted solution, of course), I settled on <a href="https://rebrandly.com/">Rebrandly</a>. Their free plan offers unlimited links and the ability to use a custom domain.</p>

<p>First, though, I needed a short domain. After balking at the $40k+ price of some options, I found one that fit my expectations: davl.ink. It’s got the first few letters of my name, and includes the work “link.” A few clicks, and the domain was mine. I changed the nameservers over to Cloudflare and added the necessary A records to point the domain at Rebrandly.</p>

<p>The result: I can create short links to whatever I like, personalized with my own domain!</p>

<p>For example, this link will redirect you to my personal site: <a href="https://davl.ink/me">davl.ink/me</a>. This link will send you to my photo stream: <a href="https://davl.ink/photos">davl.ink/photos</a>. I tweeted out a link to this post using this link: <a href="https://davl.ink/url-shortener-dd7e2">davl.ink/url-shortener-dd7e2</a>.</p>

<p>Will I use this much? I don’t know. I like the ability to give someone a link that is short, memorable, and personalized. The ability to change the link destination after-the-fact has some great potential applications for preventing link rot. For example, if I change where my photo stream is hosted, I can change the short link to point at the new host. Anyone to whom I’ve already given the link can still use it.</p>

<p>Best of all, the only cost to me is the domain registration, which comes in at ~$19/year. Worth it? 🤷‍♂️</p>]]></content><author><name>David Van Loon</name></author><category term="projects" /><summary type="html"><![CDATA[I’ve been on a mini-side-project spree lately, and I decided (on a whim) to set up my own URL shortener. If you’ve been on Twitter (or really anywhere online), you’ve probably seen the result of such services. It’s like bit.ly, but with a personalized address. For example, Microsoft uses aka.ms for their short-links.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://snowdrift.tech/img/bg-about.png" /><media:content medium="image" url="https://snowdrift.tech/img/bg-about.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Paint and Perl</title><link href="https://snowdrift.tech/humor/2019/05/09/paint-and-perl.html" rel="alternate" type="text/html" title="Paint and Perl" /><published>2019-05-09T20:00:00+00:00</published><updated>2019-05-09T20:00:00+00:00</updated><id>https://snowdrift.tech/humor/2019/05/09/paint-and-perl</id><content type="html" xml:base="https://snowdrift.tech/humor/2019/05/09/paint-and-perl.html"><![CDATA[<p>I recently discovered this amusing paper from Colin McMillen and Tim Toady in which they evaluate
the existence of paint splatters that do not represent valid Perl programs.</p>

<p>Read the paper <a href="https://famicol.in/sigbovik/">here</a>.</p>

<p>The result seems to be mainly complicated by the fact that Perl supports
<a href="https://perldoc.perl.org/perlfaq7.html#Do-I-always%2fnever-have-to-quote-my-strings-or-use-semicolons-and-commas%3f">unquoted strings</a>, so many random strings will evaluate as constants when
provided to the Perl interpreter.</p>

<p>Why? Who knows. <code class="language-plaintext highlighter-rouge">¯\_(ツ)_/¯</code></p>

<p>Enjoy. 😊</p>]]></content><author><name>David Van Loon</name></author><category term="humor" /><summary type="html"><![CDATA[I recently discovered this amusing paper from Colin McMillen and Tim Toady in which they evaluate the existence of paint splatters that do not represent valid Perl programs.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://snowdrift.tech/img/posts/07.jpg" /><media:content medium="image" url="https://snowdrift.tech/img/posts/07.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Using ssh-agent with git on Windows</title><link href="https://snowdrift.tech/cli/ssh/git/tutorials/2019/01/31/using-ssh-agent-git-windows.html" rel="alternate" type="text/html" title="Using ssh-agent with git on Windows" /><published>2019-01-31T21:00:00+00:00</published><updated>2019-01-31T21:00:00+00:00</updated><id>https://snowdrift.tech/cli/ssh/git/tutorials/2019/01/31/using-ssh-agent-git-windows</id><content type="html" xml:base="https://snowdrift.tech/cli/ssh/git/tutorials/2019/01/31/using-ssh-agent-git-windows.html"><![CDATA[<p>I have multiple passphrase-protected SSH keys on my laptop that allow me to authenticate with various devices and services. I don’t mind typing my passphrase when logging in to a remote computer via SSH. To me, the action is conceptually similar to entering a local password at login. However, since I use SSH keys for authentication to GitHub, every git command that affects a remote repository results in a prompt for an SSH key passphrase.</p>

<p>This is really annoying.</p>

<p>I’ve seen ssh-agent mentioned as a solution to this issue, but only in the context of a Linux environment. How can I take advantage of this functionality on my Windows laptop? The ssh-agent that is included with git, while technically a Windows executable, is configured for a pseudo-Linux environment.</p>

<p>Thankfully, in Windows 11 and newer versions of Windows 10, OpenSSH ships as an optional feature. After <a href="https://www.bleepingcomputer.com/news/microsoft/heres-how-to-enable-the-built-in-windows-10-openssh-client/">enabling</a> the feature, a proper ssh-agent is available for use.</p>

<h2 id="enabling-and-starting-ssh-agent">Enabling and starting ssh-agent</h2>

<p>After enabling OpenSSH in Windows, the ssh-agent service needs to be enabled. Open an elevated PowerShell window and run:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>PS&gt; Get-Service ssh-agent | Set-Service -StartupType Automatic
</code></pre></div></div>

<p>This will start the ssh-agent service automatically when your computer boots up.</p>

<p>Verify that your PATH is properly configured by executing the following:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>PS&gt; Get-Command ssh | Select-Object Source

Source
------
C:\Windows\System32\OpenSSH\ssh.exe
</code></pre></div></div>

<p>Validate that your output is similar to mine. The ssh executable should be in the System32 folder, not the Git for Windows directory. If your output doesn’t match, your PATH variable probably needs to be modified to prioritize the <code class="language-plaintext highlighter-rouge">C:\Windows\System32\OpenSSH</code> directory over the Git for Windows directory.</p>

<p>Start the ssh-agent service by executing the ssh-agent process.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>PS&gt; ssh-agent
</code></pre></div></div>

<p>The ssh-agent service should now be running. Since we set the ssh-agent service to start automatically, you’ll only have to do this once.</p>

<h2 id="importing-keys">Importing keys</h2>

<p>Keys need to be imported to the ssh-agent service so that they can be unlocked for use. Execute the following and follow the prompts to load and unlock your keys.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>PS&gt; ssh-add
</code></pre></div></div>

<p>You can view the available keys by running <code class="language-plaintext highlighter-rouge">ssh-add -l</code>.</p>

<p>Read more about importing ssh keys <a href="https://www.ssh.com/ssh/add">here</a>.</p>

<h2 id="linking-to-git">Linking to git</h2>

<p>Git for Windows uses the ssh binaries included with git by default. While this works well enough in most situations, one side-effect is that git has no idea how to talk to the Windows ssh-agent service. For git commands to use the Windows ssh-agent service, git needs to be informed of the system OpenSSH path. To accomplish this, the environment variable <code class="language-plaintext highlighter-rouge">GIT_SSH</code> needs to be set with the path of the system OpenSSH executable.</p>

<p>Run the following command to update the environment variable:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>PS&gt; [Environment]::SetEnvironmentVariable("GIT_SSH", "$((Get-Command ssh).Source)", [System.EnvironmentVariableTarget]::User)
</code></pre></div></div>

<p>Open a new PowerShell window to activate the new environment variables.</p>

<p>You’re done!</p>

<p>Test remote git commands with SSH authentication (e.g. <code class="language-plaintext highlighter-rouge">git pull</code>) and verify that the passphrase prompt does not occur with each command.</p>

<p>Congrats, you’ve just saved yourself a lot of time down the road.</p>]]></content><author><name>David Van Loon</name></author><category term="cli" /><category term="ssh" /><category term="git" /><category term="tutorials" /><summary type="html"><![CDATA[I have multiple passphrase-protected SSH keys on my laptop that allow me to authenticate with various devices and services. I don’t mind typing my passphrase when logging in to a remote computer via SSH. To me, the action is conceptually similar to entering a local password at login. However, since I use SSH keys for authentication to GitHub, every git command that affects a remote repository results in a prompt for an SSH key passphrase.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://snowdrift.tech/img/posts/06.png" /><media:content medium="image" url="https://snowdrift.tech/img/posts/06.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Replacing ssh-copy-id on Windows</title><link href="https://snowdrift.tech/cli/ssh/helpers/notes/2019/01/28/ssh-copy-id-windows.html" rel="alternate" type="text/html" title="Replacing ssh-copy-id on Windows" /><published>2019-01-28T21:00:00+00:00</published><updated>2019-01-28T21:00:00+00:00</updated><id>https://snowdrift.tech/cli/ssh/helpers/notes/2019/01/28/ssh-copy-id-windows</id><content type="html" xml:base="https://snowdrift.tech/cli/ssh/helpers/notes/2019/01/28/ssh-copy-id-windows.html"><![CDATA[<p>The <code class="language-plaintext highlighter-rouge">ssh-copy-id</code> command is useful for configuring a server to allow authentication with
a given set of SSH keys. Read more on the command <a href="https://www.ssh.com/ssh/copy-id">here</a>.</p>

<p>Windows comes with a built-in SSH client. It’s an optional feature, however, so it must be <a href="https://www.bleepingcomputer.com/news/microsoft/heres-how-to-enable-the-built-in-windows-10-openssh-client/">enabled</a> before use. One missing component is <code class="language-plaintext highlighter-rouge">ssh-copy-id</code>. Many options exist that replicate its behavior, but I wanted something very simple that I could stash in my PowerShell profile.</p>

<p>Here’s what I created:</p>

<script src="https://gist.github.com/d1vanloon/fbd566b05fb2010c17ac9ca73be130ef.js"></script>

<h2 id="examples">Examples</h2>

<p>To copy default credentials, either from the SSH agent or from <code class="language-plaintext highlighter-rouge">~/.ssh/id_rsa.pub</code>, run:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh-copy-id user@host
</code></pre></div></div>

<p>To specify the identity file to copy, run:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh-copy-id -i ~/.ssh/identity_file.pub user@host
</code></pre></div></div>

<p>This fulfills the main functionality of <code class="language-plaintext highlighter-rouge">ssh-copy-id</code>, but it doesn’t handle most error cases or any extended options. As such, it’s not intended to replace the original tool, but instead to simply provide a shortcut for Windows users of the built-in SSH client.</p>

<p>For the best SSH functionality on Windows, I recommend using the SSH tools available in the <a href="https://docs.microsoft.com/en-us/windows/wsl/install-win10">Windows Subsystem for Linux</a>.</p>]]></content><author><name>David Van Loon</name></author><category term="cli" /><category term="ssh" /><category term="helpers" /><category term="notes" /><summary type="html"><![CDATA[The ssh-copy-id command is useful for configuring a server to allow authentication with a given set of SSH keys. Read more on the command here.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://snowdrift.tech/img/posts/05.png" /><media:content medium="image" url="https://snowdrift.tech/img/posts/05.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">My Git Config</title><link href="https://snowdrift.tech/programming/git/notes/2018/09/29/git-config.html" rel="alternate" type="text/html" title="My Git Config" /><published>2018-09-29T17:00:00+00:00</published><updated>2018-09-29T17:00:00+00:00</updated><id>https://snowdrift.tech/programming/git/notes/2018/09/29/git-config</id><content type="html" xml:base="https://snowdrift.tech/programming/git/notes/2018/09/29/git-config.html"><![CDATA[<p>I like to configure <code class="language-plaintext highlighter-rouge">git</code> to sign my commits with GPG and use the <a href="https://code.visualstudio.com/insiders/">Visual Studio Code
Insiders</a> editor for config files and diffs.</p>

<script src="https://gist.github.com/d1vanloon/4a4a2b4040ba15977e16b6e005cb9b73.js"></script>

<p>To edit your global <code class="language-plaintext highlighter-rouge">git</code> configuration, run the following at the command line:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git config --global --edit
</code></pre></div></div>

<p>To compare two commits using the default <code class="language-plaintext highlighter-rouge">difftool</code>, run the following:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git difftool &lt;commit1&gt; &lt;commit2&gt;
</code></pre></div></div>]]></content><author><name>David Van Loon</name></author><category term="programming" /><category term="git" /><category term="notes" /><summary type="html"><![CDATA[I like to configure git to sign my commits with GPG and use the Visual Studio Code Insiders editor for config files and diffs.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://snowdrift.tech/img/posts/03.png" /><media:content medium="image" url="https://snowdrift.tech/img/posts/03.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Tip: Using Conda Environments with Jupyter on Windows</title><link href="https://snowdrift.tech/data-science/python/anaconda/jupyter/tips/2018/09/23/tip-conda-environments-jupyter-windows.html" rel="alternate" type="text/html" title="Tip: Using Conda Environments with Jupyter on Windows" /><published>2018-09-23T03:00:00+00:00</published><updated>2018-09-23T03:00:00+00:00</updated><id>https://snowdrift.tech/data-science/python/anaconda/jupyter/tips/2018/09/23/tip-conda-environments-jupyter-windows</id><content type="html" xml:base="https://snowdrift.tech/data-science/python/anaconda/jupyter/tips/2018/09/23/tip-conda-environments-jupyter-windows.html"><![CDATA[<h2 id="introduction">Introduction</h2>

<p>Conda environments don’t work well by default in PowerShell, and the
environments don’t show up by default as kernels in Jupyter.</p>

<h2 id="using-conda-environments-in-powershell">Using Conda Environments in PowerShell</h2>

<p><em>Update 1/29/2019: Conda now officially supports PowerShell. Read more on the <a href="https://www.anaconda.com/blog/developer-blog/conda-4-6-release/">blog post</a>.</em></p>

<p>The ease with which Conda environments can be used in PowerShell varies based on the
version of Conda installed. Check your version by running <code class="language-plaintext highlighter-rouge">conda --version</code>.</p>

<h3 id="version-46-and-later">Version 4.6 and Later</h3>

<p>With the version 4.6 update, Conda supports PowerShell natively. To configure for PowerShell,
run the following:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>PS&gt; conda init powershell
</code></pre></div></div>

<p>The <code class="language-plaintext highlighter-rouge">conda init</code> command will modify the activate/deactivate scripts and make changes to your
PowerShell profile.</p>

<h3 id="prior-to-version-46">Prior to Version 4.6</h3>

<p>You’ll need to install some additional software in order to use the <code class="language-plaintext highlighter-rouge">activate</code>/<code class="language-plaintext highlighter-rouge">deactivate</code>
commands in PowerShell. Specifically, install the helpful tool from Pavel Koneski
called <a href="https://github.com/BCSharp/PSCondaEnvs">PSCondaEnvs</a>.</p>

<p>Note that if your PowerShell execution policy is <code class="language-plaintext highlighter-rouge">Restricted</code> (run <code class="language-plaintext highlighter-rouge">Get-ExecutionPolicy</code> to
check), you’ll need to set it to <code class="language-plaintext highlighter-rouge">RemoteSigned</code> by running the following:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>PS&gt; Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
</code></pre></div></div>

<p>Now, install <code class="language-plaintext highlighter-rouge">pscondaenvs</code> with Conda:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>PS&gt; conda install -n root -c pscondaenvs pscondaenvs
</code></pre></div></div>

<p>Enter <code class="language-plaintext highlighter-rouge">y</code> when prompted to proceed.</p>

<p>Once <code class="language-plaintext highlighter-rouge">pscondaenvs</code> is installed, you’ll have new <code class="language-plaintext highlighter-rouge">activate</code> and <code class="language-plaintext highlighter-rouge">deactivate</code>
commands available that work in PowerShell.</p>

<h2 id="making-conda-environments-available-in-jupyter">Making Conda Environments Available in Jupyter</h2>

<p>First, activate the desired environment by running <code class="language-plaintext highlighter-rouge">conda activate myenv</code> (or <code class="language-plaintext highlighter-rouge">activate myenv</code>
if using <code class="language-plaintext highlighter-rouge">pscondaenvs</code>).
Ensure dependencies are available by running the following:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>(myenv) PS&gt; conda install pip
(myenv) PS&gt; conda install ipykernel
</code></pre></div></div>

<p>Type <code class="language-plaintext highlighter-rouge">y</code> to proceed as needed. After the installation completes,
run the following command to create a new <code class="language-plaintext highlighter-rouge">ipykernel</code> for this environment:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>(myenv) PS&gt; python -m ipykernel install --user --name myenv --display-name "Python (myenv)"
</code></pre></div></div>

<p>You’ll see the “Python (myenv)” kernel available when you next launch JupyterLab.</p>

<h2 id="further-reading">Further Reading</h2>

<p>Browse the <a href="https://conda.io/docs/index.html">conda documentation</a> and the
<a href="https://jupyterlab.readthedocs.io/en/stable/">JupyterLab documentation</a> for details on how these powerful
tools can improve your data science workflow.</p>

<p><em>Update 2/4/2019: Added notes on new Conda 4.6 init and activation commands for PowerShell.</em></p>]]></content><author><name>David Van Loon</name></author><category term="data-science" /><category term="python" /><category term="anaconda" /><category term="jupyter" /><category term="tips" /><summary type="html"><![CDATA[Introduction]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://snowdrift.tech/img/posts/02.png" /><media:content medium="image" url="https://snowdrift.tech/img/posts/02.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>