<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.8.5">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" /><updated>2026-01-06T21:44:36+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">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">&lt;p&gt;I’ve been using &lt;a href=&quot;https://github.com/Zuehlke/poinz&quot;&gt;Poinz&lt;/a&gt; for long enough it was time to run my &lt;a href=&quot;https://estimatethis.work&quot;&gt;own instance&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Introducing &lt;a href=&quot;https://estimatethis.work&quot;&gt;EstimateThis.Work&lt;/a&gt;, a free instance of Poinz for anyone to use for their planning poker needs: &lt;a href=&quot;https://estimatethis.work&quot;&gt;https://estimatethis.work&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;</content><author><name>David Van Loon</name></author><summary type="html">I’ve been using Poinz for long enough it was time to run my own instance.</summary></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">&lt;h1 id=&quot;getting-started&quot;&gt;Getting Started&lt;/h1&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;First, launch BlueStacks App Player.&lt;/p&gt;

&lt;p&gt;Open Windows Terminal and navigate to the &lt;code class=&quot;highlighter-rouge&quot;&gt;C:\Program Files\BlueStacks_nxt&lt;/code&gt; directory.&lt;/p&gt;

&lt;p&gt;Confirm that the app player is visible by running &lt;code class=&quot;highlighter-rouge&quot;&gt;.\HD-Adb.exe devices&lt;/code&gt;. You should see the emulator device attached.&lt;/p&gt;

&lt;h1 id=&quot;configure-the-proxy&quot;&gt;Configure the Proxy&lt;/h1&gt;

&lt;p&gt;Use the following command to configure the HTTP proxy, replacing the IP address and port number as appropriate to your setup:&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;.\HD-Adb.exe shell settings put global http_proxy 192.168.1.1:1234&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You may need to restart the app player for the setting to take effect.&lt;/p&gt;

&lt;h1 id=&quot;remove-the-proxy-configuration&quot;&gt;Remove the Proxy Configuration&lt;/h1&gt;

&lt;p&gt;Run the following commands to remove the proxy configuration:&lt;/p&gt;

&lt;div class=&quot;language-powershell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;.\HD-Adb.exe shell settings delete global global_http_proxy_host
.\HD-Adb.exe shell settings delete global global_http_proxy_port
.\HD-Adb.exe shell settings delete global http_proxy
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;You may need to restart the app player for the setting to take effect.&lt;/p&gt;</content><author><name>David Van Loon</name></author><summary type="html">Getting Started</summary></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">&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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 &lt;a href=&quot;https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

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

&lt;p&gt;After a bit of experimentation, I settled on the following core script:&lt;/p&gt;

&lt;script src=&quot;https://gist.github.com/d1vanloon/57c84e25b21ef222a5702bdd750f145a.js&quot;&gt;&lt;/script&gt;

&lt;p&gt;Due to a &lt;a href=&quot;https://github.com/PowerShell/PowerShell/issues/16480&quot;&gt;recent change in PowerShell&lt;/a&gt;, 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 &lt;code class=&quot;highlighter-rouge&quot;&gt;C:\Tools\git-hooks\&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I created a second, wrapper script as follows:&lt;/p&gt;

&lt;script src=&quot;https://gist.github.com/d1vanloon/93e39163abf2222a91fb91a0d0a4b464.js&quot;&gt;&lt;/script&gt;

&lt;p&gt;I placed the script in the git hooks directory for my project, and it ran on my next commit.&lt;/p&gt;

&lt;p&gt;To use with your project, place the core script in &lt;code class=&quot;highlighter-rouge&quot;&gt;C:\Tools\git-hooks\&lt;/code&gt; and the wrapper script in &lt;code class=&quot;highlighter-rouge&quot;&gt;&amp;lt;project_directory&amp;gt;\.git\hooks\&lt;/code&gt; 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 &lt;code class=&quot;highlighter-rouge&quot;&gt;Get-Command pwsh | Select-Object Source&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Update 11/27/2023: Added workaround to support newer versions of PowerShell.&lt;/em&gt;&lt;/p&gt;</content><author><name>David Van Loon</name></author><summary type="html">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></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">&lt;p&gt;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.&lt;/p&gt;

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

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;The result: I can create short links to whatever I like, personalized with my own domain!&lt;/p&gt;

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

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Best of all, the only cost to me is the domain registration, which comes in at ~$19/year. Worth it? 🤷‍♂️&lt;/p&gt;</content><author><name>David Van Loon</name></author><summary type="html">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></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">&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Read the paper &lt;a href=&quot;https://famicol.in/sigbovik/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

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

&lt;p&gt;Why? Who knows. &lt;code class=&quot;highlighter-rouge&quot;&gt;¯\_(ツ)_/¯&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Enjoy. 😊&lt;/p&gt;</content><author><name>David Van Loon</name></author><summary type="html">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></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">&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;This is really annoying.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

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

&lt;h2 id=&quot;enabling-and-starting-ssh-agent&quot;&gt;Enabling and starting ssh-agent&lt;/h2&gt;

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

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;PS&amp;gt; Get-Service ssh-agent | Set-Service -StartupType Automatic
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This will start the ssh-agent service automatically when your computer boots up.&lt;/p&gt;

&lt;p&gt;Verify that your PATH is properly configured by executing the following:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;PS&amp;gt; Get-Command ssh | Select-Object Source

Source
------
C:\Windows\System32\OpenSSH\ssh.exe
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;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 &lt;code class=&quot;highlighter-rouge&quot;&gt;C:\Windows\System32\OpenSSH&lt;/code&gt; directory over the Git for Windows directory.&lt;/p&gt;

&lt;p&gt;Start the ssh-agent service by executing the ssh-agent process.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;PS&amp;gt; ssh-agent
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2 id=&quot;importing-keys&quot;&gt;Importing keys&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;PS&amp;gt; ssh-add
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;You can view the available keys by running &lt;code class=&quot;highlighter-rouge&quot;&gt;ssh-add -l&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Read more about importing ssh keys &lt;a href=&quot;https://www.ssh.com/ssh/add&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;linking-to-git&quot;&gt;Linking to git&lt;/h2&gt;

&lt;p&gt;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 &lt;code class=&quot;highlighter-rouge&quot;&gt;GIT_SSH&lt;/code&gt; needs to be set with the path of the system OpenSSH executable.&lt;/p&gt;

&lt;p&gt;Run the following command to update the environment variable:&lt;/p&gt;

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

&lt;p&gt;Open a new PowerShell window to activate the new environment variables.&lt;/p&gt;

&lt;p&gt;You’re done!&lt;/p&gt;

&lt;p&gt;Test remote git commands with SSH authentication (e.g. &lt;code class=&quot;highlighter-rouge&quot;&gt;git pull&lt;/code&gt;) and verify that the passphrase prompt does not occur with each command.&lt;/p&gt;

&lt;p&gt;Congrats, you’ve just saved yourself a lot of time down the road.&lt;/p&gt;</content><author><name>David Van Loon</name></author><summary type="html">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></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">&lt;p&gt;The &lt;code class=&quot;highlighter-rouge&quot;&gt;ssh-copy-id&lt;/code&gt; command is useful for configuring a server to allow authentication with
a given set of SSH keys. Read more on the command &lt;a href=&quot;https://www.ssh.com/ssh/copy-id&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

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

&lt;p&gt;Here’s what I created:&lt;/p&gt;

&lt;script src=&quot;https://gist.github.com/d1vanloon/fbd566b05fb2010c17ac9ca73be130ef.js&quot;&gt;&lt;/script&gt;

&lt;h2 id=&quot;examples&quot;&gt;Examples&lt;/h2&gt;

&lt;p&gt;To copy default credentials, either from the SSH agent or from &lt;code class=&quot;highlighter-rouge&quot;&gt;~/.ssh/id_rsa.pub&lt;/code&gt;, run:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ssh-copy-id user@host
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;To specify the identity file to copy, run:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ssh-copy-id -i ~/.ssh/identity_file.pub user@host
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This fulfills the main functionality of &lt;code class=&quot;highlighter-rouge&quot;&gt;ssh-copy-id&lt;/code&gt;, 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.&lt;/p&gt;

&lt;p&gt;For the best SSH functionality on Windows, I recommend using the SSH tools available in the &lt;a href=&quot;https://docs.microsoft.com/en-us/windows/wsl/install-win10&quot;&gt;Windows Subsystem for Linux&lt;/a&gt;.&lt;/p&gt;</content><author><name>David Van Loon</name></author><summary type="html">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></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">&lt;p&gt;I like to configure &lt;code class=&quot;highlighter-rouge&quot;&gt;git&lt;/code&gt; to sign my commits with GPG and use the &lt;a href=&quot;https://code.visualstudio.com/insiders/&quot;&gt;Visual Studio Code
Insiders&lt;/a&gt; editor for config files and diffs.&lt;/p&gt;

&lt;script src=&quot;https://gist.github.com/d1vanloon/4a4a2b4040ba15977e16b6e005cb9b73.js&quot;&gt;&lt;/script&gt;

&lt;p&gt;To edit your global &lt;code class=&quot;highlighter-rouge&quot;&gt;git&lt;/code&gt; configuration, run the following at the command line:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;git config --global --edit
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;To compare two commits using the default &lt;code class=&quot;highlighter-rouge&quot;&gt;difftool&lt;/code&gt;, run the following:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;git difftool &amp;lt;commit1&amp;gt; &amp;lt;commit2&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</content><author><name>David Van Loon</name></author><summary type="html">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></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">&lt;h2 id=&quot;introduction&quot;&gt;Introduction&lt;/h2&gt;

&lt;p&gt;Conda environments don’t work well by default in PowerShell, and the
environments don’t show up by default as kernels in Jupyter.&lt;/p&gt;

&lt;h2 id=&quot;using-conda-environments-in-powershell&quot;&gt;Using Conda Environments in PowerShell&lt;/h2&gt;

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

&lt;p&gt;The ease with which Conda environments can be used in PowerShell varies based on the
version of Conda installed. Check your version by running &lt;code class=&quot;highlighter-rouge&quot;&gt;conda --version&lt;/code&gt;.&lt;/p&gt;

&lt;h3 id=&quot;version-46-and-later&quot;&gt;Version 4.6 and Later&lt;/h3&gt;

&lt;p&gt;With the version 4.6 update, Conda supports PowerShell natively. To configure for PowerShell,
run the following:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;PS&amp;gt; conda init powershell
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The &lt;code class=&quot;highlighter-rouge&quot;&gt;conda init&lt;/code&gt; command will modify the activate/deactivate scripts and make changes to your
PowerShell profile.&lt;/p&gt;

&lt;h3 id=&quot;prior-to-version-46&quot;&gt;Prior to Version 4.6&lt;/h3&gt;

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

&lt;p&gt;Note that if your PowerShell execution policy is &lt;code class=&quot;highlighter-rouge&quot;&gt;Restricted&lt;/code&gt; (run &lt;code class=&quot;highlighter-rouge&quot;&gt;Get-ExecutionPolicy&lt;/code&gt; to
check), you’ll need to set it to &lt;code class=&quot;highlighter-rouge&quot;&gt;RemoteSigned&lt;/code&gt; by running the following:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;PS&amp;gt; Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Now, install &lt;code class=&quot;highlighter-rouge&quot;&gt;pscondaenvs&lt;/code&gt; with Conda:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;PS&amp;gt; conda install -n root -c pscondaenvs pscondaenvs
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Enter &lt;code class=&quot;highlighter-rouge&quot;&gt;y&lt;/code&gt; when prompted to proceed.&lt;/p&gt;

&lt;p&gt;Once &lt;code class=&quot;highlighter-rouge&quot;&gt;pscondaenvs&lt;/code&gt; is installed, you’ll have new &lt;code class=&quot;highlighter-rouge&quot;&gt;activate&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;deactivate&lt;/code&gt;
commands available that work in PowerShell.&lt;/p&gt;

&lt;h2 id=&quot;making-conda-environments-available-in-jupyter&quot;&gt;Making Conda Environments Available in Jupyter&lt;/h2&gt;

&lt;p&gt;First, activate the desired environment by running &lt;code class=&quot;highlighter-rouge&quot;&gt;conda activate myenv&lt;/code&gt; (or &lt;code class=&quot;highlighter-rouge&quot;&gt;activate myenv&lt;/code&gt;
if using &lt;code class=&quot;highlighter-rouge&quot;&gt;pscondaenvs&lt;/code&gt;).
Ensure dependencies are available by running the following:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;(myenv) PS&amp;gt; conda install pip
(myenv) PS&amp;gt; conda install ipykernel
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Type &lt;code class=&quot;highlighter-rouge&quot;&gt;y&lt;/code&gt; to proceed as needed. After the installation completes,
run the following command to create a new &lt;code class=&quot;highlighter-rouge&quot;&gt;ipykernel&lt;/code&gt; for this environment:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;(myenv) PS&amp;gt; python -m ipykernel install --user --name myenv --display-name &quot;Python (myenv)&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;You’ll see the “Python (myenv)” kernel available when you next launch JupyterLab.&lt;/p&gt;

&lt;h2 id=&quot;further-reading&quot;&gt;Further Reading&lt;/h2&gt;

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

&lt;p&gt;&lt;em&gt;Update 2/4/2019: Added notes on new Conda 4.6 init and activation commands for PowerShell.&lt;/em&gt;&lt;/p&gt;</content><author><name>David Van Loon</name></author><summary type="html">Introduction</summary></entry><entry><title type="html">Publishing a Personal Site</title><link href="https://snowdrift.tech/web/publishing/tutorials/2018/09/16/publishing-a-personal-site.html" rel="alternate" type="text/html" title="Publishing a Personal Site" /><published>2018-09-16T04:00:00+00:00</published><updated>2018-09-16T04:00:00+00:00</updated><id>https://snowdrift.tech/web/publishing/tutorials/2018/09/16/publishing-a-personal-site</id><content type="html" xml:base="https://snowdrift.tech/web/publishing/tutorials/2018/09/16/publishing-a-personal-site.html">&lt;p&gt;Sometimes I need to put a quick static site online without much fuss. This very site is an
example.&lt;/p&gt;

&lt;p&gt;Here’s how I do it.&lt;/p&gt;

&lt;h2 id=&quot;installing-tools&quot;&gt;Installing tools&lt;/h2&gt;

&lt;p&gt;For this post, I’ll assume you’re on a recent version of Windows. We’re going to use
&lt;code class=&quot;highlighter-rouge&quot;&gt;jekyll&lt;/code&gt; to handle the static site creation. In order to get it installed, we’ll need a few
prerequisites.&lt;/p&gt;

&lt;p&gt;Start off by installing &lt;code class=&quot;highlighter-rouge&quot;&gt;chocolatey&lt;/code&gt; via PowerShell. Instructions are &lt;a href=&quot;https://chocolatey.org/install&quot;&gt;here&lt;/a&gt;.
&lt;code class=&quot;highlighter-rouge&quot;&gt;chocolatey&lt;/code&gt; is a package manager for Windows that I like to use to manage most utilities.&lt;/p&gt;

&lt;p&gt;Once &lt;code class=&quot;highlighter-rouge&quot;&gt;chocolatey&lt;/code&gt; is installed, we’ll use it to install &lt;code class=&quot;highlighter-rouge&quot;&gt;ruby&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;git&lt;/code&gt;. Open an
administrator PowerShell window and run:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;PS&amp;gt; choco install git ruby -y
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;chocolatey&lt;/code&gt; will automatically download and run the appropriate installers.&lt;/p&gt;

&lt;p&gt;Next, we’ll install &lt;code class=&quot;highlighter-rouge&quot;&gt;jekyll&lt;/code&gt;. Open a new PowerShell terminal (to ensure the PATH is
up-to-date with the &lt;code class=&quot;highlighter-rouge&quot;&gt;chocolatey&lt;/code&gt; installations) and run the following:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;PS&amp;gt; gem install jekyll bundler
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This will install &lt;code class=&quot;highlighter-rouge&quot;&gt;jekyll&lt;/code&gt; and dependencies. For details on installation, further
instructions are &lt;a href=&quot;https://jekyllrb.com/docs/installation/windows/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;setup-site&quot;&gt;Setup site&lt;/h2&gt;

&lt;p&gt;Create a new GitHub repo for your site (click &lt;a href=&quot;https://github.com/new&quot;&gt;here&lt;/a&gt;). Enter a repository
name (like your site name) and leave the repo public and uninitialized.&lt;/p&gt;

&lt;p&gt;Open a new PowerShell terminal. Navigate to the directory where you’ll keep your project.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;PS&amp;gt; cd ~\Source\Repos
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Clone your GitHub repo and move into the directory.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;PS&amp;gt; git clone git@github.com:username/site-name.git
PS&amp;gt; cd .\site-name\
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Run the &lt;code class=&quot;highlighter-rouge&quot;&gt;jekyll&lt;/code&gt; scaffolder to create the site structure.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;PS&amp;gt; jekyll new .
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Now we have a basic web site created. Let’s preview it.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;PS&amp;gt; jekyll serve
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;jekyll&lt;/code&gt; will render the site and launch a preview server. Open
&lt;a href=&quot;http://127.0.0.1:4000/&quot;&gt;http://127.0.0.1:4000/&lt;/a&gt; to view the site.&lt;/p&gt;

&lt;p&gt;Press &lt;code class=&quot;highlighter-rouge&quot;&gt;ctrl-c&lt;/code&gt; and type &lt;code class=&quot;highlighter-rouge&quot;&gt;y&lt;/code&gt; to shutdown the preview.&lt;/p&gt;

&lt;h2 id=&quot;publish-site&quot;&gt;Publish site&lt;/h2&gt;

&lt;p&gt;Let’s get this site online. First, commit the changes to the git repo and push to
GitHub.&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;PS&amp;gt; git add *
PS&amp;gt; git commit -m &quot;Initial commit&quot;
PS&amp;gt; git push
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;To host, we’ll use Netlify. Create a new site from your GitHub repo by following
the instructions &lt;a href=&quot;https://app.netlify.com/start&quot;&gt;here&lt;/a&gt;. Select GitHub as the source, then find and select
your repo. Use &lt;code class=&quot;highlighter-rouge&quot;&gt;jekyll build&lt;/code&gt; as the build command and &lt;code class=&quot;highlighter-rouge&quot;&gt;_site/&lt;/code&gt; as the publish directory.&lt;/p&gt;

&lt;p&gt;Wait for Netlify to deploy your web site. Once deployed, click the preview
link (e.g. &lt;code class=&quot;highlighter-rouge&quot;&gt;https://random-site-name.netlify.com&lt;/code&gt;) to view your site on the web!&lt;/p&gt;

&lt;p&gt;Whenever you push to the &lt;code class=&quot;highlighter-rouge&quot;&gt;master&lt;/code&gt; branch of your GitHub repository, Netlify will re-build
and deploy your site.&lt;/p&gt;

&lt;h2 id=&quot;next-steps&quot;&gt;Next steps&lt;/h2&gt;

&lt;p&gt;Suggested next steps:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Modify site content&lt;/li&gt;
  &lt;li&gt;Add a post&lt;/li&gt;
  &lt;li&gt;Add a theme&lt;/li&gt;
  &lt;li&gt;Configure a custom domain name&lt;/li&gt;
&lt;/ul&gt;</content><author><name>David Van Loon</name></author><summary type="html">Sometimes I need to put a quick static site online without much fuss. This very site is an example.</summary></entry></feed>