<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>blog.sam.codes</title><link href="https://blog.sam.codes/" rel="alternate"/><link href="https://blog.sam.codes/feeds/all.atom.xml" rel="self"/><id>https://blog.sam.codes/</id><updated>2023-07-04T22:48:00-04:00</updated><subtitle>Various projects related to code, music, games, and more</subtitle><entry><title>Audible last-heard position plotting</title><link href="https://blog.sam.codes/audible-last-heard-position-plotting.html" rel="alternate"/><published>2023-07-04T22:48:00-04:00</published><updated>2023-07-04T22:48:00-04:00</updated><author><name>Samuel Colburn</name></author><id>tag:blog.sam.codes,2023-07-04:/audible-last-heard-position-plotting.html</id><summary type="html">&lt;p&gt;I'm an avid audiobook listener, but I sometimes struggle with losing my place in my books if I fall asleep while listening or if my book autoplays on my (muted) car stereo for a long drive. This project is an attempt to help me find my lost place.&lt;/p&gt;</summary><content type="html">&lt;p&gt;I'm an avid audiobook listener, but I sometimes struggle with losing my place in my books if I fall asleep while listening or if my book autoplays on my (muted) car stereo for a long drive. This project is an attempt to help me find my lost place.&lt;/p&gt;
&lt;p&gt;I listen to books almost exclusively on Audible. I know, I know, I really shouldn't be feeding Amazon even more money, but I already have a large library there, and I have a very good setup for listening to my books while I fall asleep or drive (ideally not both at the same time).&lt;/p&gt;
&lt;p&gt;One of the features of Audible that I use most frequently is the ability to pick up where I left off in my book on a different device. Unfortunately, this feature can be a bit buggy. Occasionally, I'll start playing on a device I haven't used in a while and it will start my book from dozens of chapters back. Even worse, it seems as though it fails to fetch the last-heard position from Audible's servers before it starts playing, but still decides to update Audible to let it know that the &lt;em&gt;current&lt;/em&gt; position should now be considered the last-heard position. This can lead to a lot of frustrating fast-fowarding and hoping I'm not overshooting my target.&lt;/p&gt;
&lt;p&gt;I've been thinking about this project for a while, but finally got around to starting it this past weekend. The idea is simple: poll Audible's servers periodically for last-heard positions on recently played books, store those positions in a timeseries database, and set up plotting for the timeseries data. This should enable me to see recent maximum positions before rewinds, and also help me find my start position of a listening session if I fell asleep before remembering to set a sleep timer.&lt;/p&gt;
&lt;p&gt;For me, the easiest tools to set this up were python, prometheus, and grafana. I already have prometheus and grafana set up, so for this project I only needed to write a simple prometheus exporter for my audible data. I stumbled across an &lt;a href="https://github.com/mkb79/audible"&gt;audible&lt;/a&gt; python package, busted out the old standby, &lt;a href="https://github.com/prometheus/client_python"&gt;prometheus_client&lt;/a&gt;, and slapped together a quick script to query audible and publish my data as metrics. Just like that, I've got working charts!&lt;/p&gt;
&lt;div class="center"&gt;
    &lt;img src="images/audible-before.jpg" class="inline-half" /&gt;
    &lt;img src="images/audible-after.jpg" class="inline-half" /&gt;
&lt;/div&gt;
&lt;div class="caption center"&gt;Positions before and after playing&lt;/div&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;div class="center"&gt;&lt;img src="images/audiobook.jpg" class="inline" /&gt;&lt;/div&gt;
&lt;div class="caption center"&gt;The resulting chart&lt;/div&gt;

&lt;p&gt;All told, it came together very quickly and, aside from some clunky first-time setup, it's working well! The real trick will be to see if it keeps working long enough to help me the next time I lose my place in a book.&lt;/p&gt;
&lt;p&gt;You can check out the project on my github: &lt;a href="http://github.com/ho0ber/audible-tracker"&gt;ho0ber/audible-tracker&lt;/a&gt;&lt;/p&gt;</content><category term="Code"/></entry><entry><title>Lazylinks: Link pages for lazy people</title><link href="https://blog.sam.codes/lazylinks-link-pages-for-lazy-people.html" rel="alternate"/><published>2023-07-02T19:30:00-04:00</published><updated>2023-07-02T19:30:00-04:00</updated><author><name>Samuel Colburn</name></author><id>tag:blog.sam.codes,2023-07-02:/lazylinks-link-pages-for-lazy-people.html</id><summary type="html">&lt;p&gt;Over the last few months I've found myself wishing I had a simple website I could send someone to help them find my various accounts. Between layoffs and social media network meltdowns, I know a lot of people who are setting up similar sites.&lt;/p&gt;</summary><content type="html">&lt;h2&gt;What is lazylinks?&lt;/h2&gt;
&lt;p&gt;Over the last few months I've found myself wishing I had a simple website I could send someone to help them find my various accounts. Between layoffs and social media network meltdowns, I know a lot of people who are setting up similar sites.&lt;/p&gt;
&lt;p&gt;The usual approaches to making links pages fall into a few rough categtories:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Adding a new page to an existing website or blog with all of your links&lt;/li&gt;
&lt;li&gt;Using a tool like Linktree, Carrd, or countless other similar options&lt;/li&gt;
&lt;li&gt;Building a standalone links page from scratch&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Adding a new page to an existing website was something I seriously considered, but ultimately decided against. My personal website isn't really set up to have clean, linkable pages (it's gimmicky) and I didn't really feel like fighting with HTML (or javascript) every time I wanted to update my links.&lt;/p&gt;
&lt;p&gt;Using a tool like Linktree can be a quick way to get a links page up and running, but they usually lock features behind paid plans. They limit your customization options by their nature. It's a good tradeoff for simplicity vs flexibility, but there were just a few too many negatives for me. Linktree, for instance, can't use custom domains, and it's yet another login to make sure is secure. Such sites are a potential target for bad actors, especially if they put their on donation link into someone else's profile.&lt;/p&gt;
&lt;p&gt;Building a standalone links page from scratch has a lot of appeal. The site is as secure as your version control, CI/CD, and hosting are (in my case, all three are GitHub). You have a ton of flexibility, limited only to what you feel like building in HTML/CSS/JS. But that flexibility is also the greatest drawback: starting from scratch is a pain. Additionally, I still don't really like having to update links in HTML; it's usually a lot of annoying boilerplate to make sure you copy correctly.&lt;/p&gt;
&lt;p&gt;So this all leads to my solution: build a standalone links page &lt;em&gt;generator&lt;/em&gt;. That's right, do &lt;em&gt;even more work&lt;/em&gt;  than my third option! I'd been inspired by &lt;a href="https://getpelican.com"&gt;Pelican&lt;/a&gt;, the tool used to generate this blog, as an elegant approach to updating content for folks who are more comfortable in version control and markdown files than in a GUI backend for blogging. My solution uses the same approach: a simple python package that makes it easy to write content and generate static HTML to be deployed.&lt;/p&gt;
&lt;p&gt;Naturally, instead of trying to reinvent the wheel, I searched for existing linktree-style static pages to use as a starting point. I stumbled across exactly what I was looking for, an extremely simple template on github: &lt;a href="https://github.com/alisa-yar/linktree-template/"&gt;alisa-yar/linktree-template&lt;/a&gt;. This saved me a ton of fiddly effort when getting my initial version up and running. Huge thanks to Alisa for open-sourcing a great little project. If you end up using my project, please consider &lt;a href="https://www.buymeacoffee.com/alisa.algo"&gt;buying her a coffee&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;From there, I thought about how I would want to generate my links. I landed on a YAML file for defining global configuration options (backgrounds, page title) and the lists of links. Not everyone is a big fan of YAML, but I find it to be the most concise syntax for this type of configuration, and I'm very happy with how it turned out.&lt;/p&gt;
&lt;p&gt;After that, it was a relatively short process of picking a templating package in python and whipping up a generator script. Thus, &lt;a href="https://github.com/ho0ber/lazylinks"&gt;Lazylinks&lt;/a&gt; was born!&lt;/p&gt;
&lt;h2&gt;How to set up your own lazylinks page&lt;/h2&gt;
&lt;p&gt;Shifting gears into tutorial mode, I'm going to walk you through how to get your own links page up and running using github pages. It's free, relatively easy (even for folks who are beginner programmers), and easy to modify. You don't even need a functioning python development environment to get started; you can do everything from within github!&lt;/p&gt;
&lt;p&gt;We're going to start by forking &lt;em&gt;my&lt;/em&gt; links page repository. This will give you a working starting point:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Go to &lt;a href="https://github.com/ho0ber/links"&gt;ho0ber/links&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Click the "fork" button at the top right of the page&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="center"&gt;&lt;img src="images/fork.jpg" class="inline" /&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;pick a good name for your repository (or leave it as links) and click "create fork"&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="center"&gt;&lt;img src="images/create-new-fork.jpg" class="inline" /&gt;&lt;/div&gt;

&lt;p&gt;Next we'll configure the repository to use github pages and enable GitHub Actions workflows for the repository:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In your new repository, click the settings button in the nav bar at the top&lt;/li&gt;
&lt;li&gt;Under "Code and automation" click "Pages"&lt;/li&gt;
&lt;li&gt;Select "GitHub Actions" in the source dropdown. This will make it so we can generate the static page in a GitHub Actions workflow, rather than needing to version control the generated HTML itself.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="center"&gt;&lt;img src="images/pages-settings-dropdown.jpg" class="inline" /&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Now click "Actions" in the nav bar at the top&lt;/li&gt;
&lt;li&gt;If prompted, click "I understand my workflows, go ahead and enable them"&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="center"&gt;&lt;img src="images/workflows-warning.jpg" class="inline" /&gt;&lt;/div&gt;

&lt;p&gt;Now you should be able to make changes to &lt;code&gt;links.yaml&lt;/code&gt; and the worklow will run and deploy the site for you. Let's test that!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Click on the "Code" button in the nav bar at the top&lt;/li&gt;
&lt;li&gt;Click on the &lt;code&gt;links.yaml&lt;/code&gt; file to view it&lt;/li&gt;
&lt;li&gt;Click the edit button in the upper left of the file&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="center"&gt;&lt;img src="images/edit.jpg" class="inline" /&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Make a simple change, like changing the name on the page&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="center"&gt;&lt;img src="images/edit-file.jpg" class="inline" /&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Click "Commit changes" in the upper right and leave the default option of "commit directly to the &lt;code&gt;main&lt;/code&gt; branch selected" and click "commit changes" again.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="center"&gt;&lt;img src="images/commit-popup.png" class="inline" /&gt;&lt;/div&gt;

&lt;p&gt;You just made your first changes to the links page! This should automatically trigger a workflow run to deploy those changes. Let's go check on them.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Click "Actions" in the nav bar at the top again and look for the running workflow.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="center"&gt;&lt;img src="images/workflow-running.jpg" class="inline" /&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Click on it and poke around if you like. It'll turn green when it completes (sometimes you might need to refresh the page)&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="center"&gt;&lt;img src="images/workflow-done.png" class="inline" /&gt;&lt;/div&gt;

&lt;p&gt;Once the workflow completes, now you can go to your pages address to see the result. This should be &lt;code&gt;&amp;lt;your username&amp;gt;.github.io/&amp;lt;your repo name&amp;gt;/&lt;/code&gt;, but here's an easy way to get your link:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Click back on "Code" in the nav bar at the top&lt;/li&gt;
&lt;li&gt;Click on the gear next to the "About" section in the upper right corner of the page&lt;/li&gt;
&lt;li&gt;In the website section, check the "Use your GitHub Pages website" checkbox to replace my URL with your own&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="center"&gt;&lt;img src="images/update-about.png" class="inline" /&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Click save changes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now the link to your links page is in the upper right of your repo's main page. Easy, right?&lt;/p&gt;
&lt;p&gt;Hopefully, you get the idea from here, but you can go back into that &lt;code&gt;links.yaml&lt;/code&gt; file and edit to your hearts content. You can add or remove links sections, change names and descriptions, and replace filenames for your avatar, background, and favicon. You'll also need to add/replace files in the "static" directory before they can be referenced in config, but you'll find that you can do that from GitHub's web interface too, if you like.&lt;/p&gt;
&lt;p&gt;Lazylinks even allows you to define your own template (and replace the CSS in the static directory entirely), if you find that the layout isn't to your liking. Simply use the &lt;a href="https://github.com/ho0ber/lazylinks/blob/main/lazylinks/lazylinks.mako"&gt;lazylinks.mako&lt;/a&gt; file in the lazylinks project repo as a starting point, and then update your workflow to add an additional commandline option to define the template to use, something like &lt;code&gt;lazylinks links.yaml --template mytemplate.mako&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Anyway, that's the extent of what I can cover this this tutorial. There's a lot more you can do, like setting up a custom domain for your links page, but it's pretty easy to find tutorials for that with a simple search.&lt;/p&gt;
&lt;p&gt;Note that &lt;a href="https://github.com/ho0ber/lazylinks"&gt;lazylinks&lt;/a&gt; itself is an open-source project, and if you find that you can't do something that you want to, you can fork it yourself and propose changes!&lt;/p&gt;
&lt;p&gt;Good luck and enjoy!&lt;/p&gt;</content><category term="Code"/></entry><entry><title>I'm not a carpenter</title><link href="https://blog.sam.codes/im-not-a-carpenter.html" rel="alternate"/><published>2023-06-28T10:45:00-04:00</published><updated>2023-06-28T10:45:00-04:00</updated><author><name>Samuel Colburn</name></author><id>tag:blog.sam.codes,2023-06-28:/im-not-a-carpenter.html</id><summary type="html">&lt;p&gt;I enjoy woodworking, but I'm not very good at it. On and off over the last two months, I've been working on building a new chicken coop to house our new chicks.&lt;/p&gt;</summary><content type="html">&lt;p&gt;I enjoy woodworking, but I'm not very good at it. On and off over the last two months, I've been working on building a new chicken coop to house our new chicks.&lt;/p&gt;
&lt;p&gt;We've had chickens for a couple of years (and my spouse and I both had chickens growing up) and housing the chickens has been an ongoing challenge. Coops from kits are expensive and don't meet all of our needs, so I've been thinking about chicken coop construction and design for a long time. My first makeshift coop was constructed in two days to house our two bully chickens (who both passed away from unrelated medical conditions this week, RIP Regina and Jennifer), and it was an incredibly poorly designed, but functional coop.&lt;/p&gt;
&lt;div class="center"&gt;&lt;img src="images/bully-coop.jpg" class="inline" /&gt;&lt;/div&gt;
&lt;div class="caption center"&gt;Not bad for two days, but pretty janky&lt;/div&gt;

&lt;p&gt;This year we are adding nine new chicks to our flock: three (more) ameraucanas, three copper blue marans, two salmon faverolles, and a single light brahma (who was supposed to be a third faverolles - whoops). Naturally, we wanted to have a good solution to house them, and to ideally house our entire flock in a single coop. Rather than buying a professionally designed coop, we decided to DIY a larger coop so we could get the benefits of a custom-designed coop (high ceilings in the run, for instance), but also so we could repair and modify the coop easily using off-the-shelf materials.&lt;/p&gt;
&lt;p&gt;This all sounds totally reasonable, right? I'm pretty handy, so this shouldn't be a big deal! I whipped up a design in SketchUp and started ordering materials.&lt;/p&gt;
&lt;p&gt;Unfortunately, this is the largest structure I've ever built alone, and I've had to learn some hard lessons along the way.&lt;/p&gt;
&lt;p&gt;The biggest thing that I learned is that as the scale increases, the errors and flaws compound. The mark of a good carpenter is not simply to build something perfectly to spec. That's the ideal, obviously, but especially when dealing with imperfect materials (and this wood was certainly imperfect), errors will occur. The challenge is in knowing which errors and imperfections must be corrected through rework, versus the errors that can be worked around and corrected in aggregate.&lt;/p&gt;
&lt;p&gt;For example, if you are spacing your chicken run supports at regular intervals, you'll probably need pieces of wood cut to size to go between them. If you go ahead and cut all of them at the same time, it means that you're likely to be able to compare them and have extremely regular lengths. However, if you discover that your cut was off by an eighth of an inch for EACH of those cuts, suddenly your last support is dangling an inch over the end of the base of the coop. If, instead, you marked the positions of each support on the base, placed the supports, and then measured your pieces of wood and installed them as you went, it shouldn't be possible to overshoot the end of your base. You might have increased variance in actual lengths of those pieces of wood (as a result of warping or other irregularities in the supports, or simple human error), but your result would still fit the most critical constraints of your build.&lt;/p&gt;
&lt;p&gt;But let's add another real-world complication to the mix: the distance between the supports can't be too terribly irregular, or the standard sizes of hardware cloth going between them might not reach. So now we have the hard constraint of ensuring that the supports are all placed on top of the base as before, but we have added the constraint of needing the span to match the width of the (unfortunately, also slightly irregular) hardware cloth. In hindsight, I probably should have placed each set of supports, comparing against the width of the hardware cloth, and only measuring and cutting the next span once the previous span was screened in.&lt;/p&gt;
&lt;p&gt;But, of course, I was naive going into this. I assumed "measure twice, cut once" would be enough to keep me out of trouble. I was wrong, and I've learned a lot about how to be strategic in my lack of perfection in order to build things only as well as they need to be, and not to strive for an ideal that only comes with a great deal more practice than I will ever get at this scale of construction.&lt;/p&gt;
&lt;div class="center"&gt;&lt;img src="images/coop-build.gif" class="inline" /&gt;&lt;/div&gt;
&lt;div class="caption center"&gt;Rough time-lapse of construction&lt;/div&gt;

&lt;p&gt;Now, because I'm a software guy and a dork, as I was thinking through all of this, I started to consider how these lessons relate to building software. I quickly realized that I already account for problems and imperfections like this when I'm coding, and while the specifics of the problems are very different from those found in chicken coop construction, the same lessons apply. I may not be a professional carpenter, but I do have a lot of professional experience coding.&lt;/p&gt;
&lt;p&gt;Responsible error handling, modularity and extensibility, function sizing, self-commenting naming, logging and observability, and scalability planning all factor into my initial design these days without me even thinking to include them. That's just the "shape" of my v1, and the process by which I construct new software includes micro-refactors (while it's still easy) to set myself up for success. Now, mind you, &lt;a href="https://en.wikipedia.org/wiki/You_aren%27t_gonna_need_it"&gt;YAGNI&lt;/a&gt; still applies; there's no reason to try to build a perfect temple of code with every new project. Finding the sweet spot of future-proofing your software is a lot like finding the sweet spot of precision required for building a chicken coop. If it's never going to be a 10-story chicken coop, you can get away with a lot.&lt;/p&gt;
&lt;p&gt;Maybe it's a bit of a feeble analogy, but it made me feel better about not being a terribly good carpenter.&lt;/p&gt;
&lt;p&gt;Anyway, the coop is not done (and it'll never truly be done), but it'll be move-in ready as of today. The chicks are getting too large for the stock tank they were raised in, so the timing here is good. By the end of the summer, we'll have all of our remaining members of the old flock moved in with them, significantly simplifying our chicken-keeping operation. This has been a challenging and exhausting project, but worth every curse, scrape, and penny to give our chickens a good home.&lt;/p&gt;
&lt;div class="center"&gt;&lt;img src="images/rj.jpeg" class="inline" /&gt;&lt;/div&gt;
&lt;div class="caption center"&gt;RIP Regina and Jennifer&lt;/div&gt;</content><category term="General"/></entry><entry><title>Hello World</title><link href="https://blog.sam.codes/hello-world.html" rel="alternate"/><published>2023-06-22T12:34:00-04:00</published><updated>2023-06-22T12:34:00-04:00</updated><author><name>Samuel Colburn</name></author><id>tag:blog.sam.codes,2023-06-22:/hello-world.html</id><summary type="html">&lt;p&gt;So this is a blog, or something like a blog. Mostly this is a placeholder while I find some content to drop here. I'll be migrating some content from my old blog, when I get the chance.&lt;/p&gt;</summary><content type="html">&lt;p&gt;So this is a blog, or something like a blog. Mostly this is a placeholder while I find some content to drop here. I'll be migrating some content from my old blog, when I get the chance.&lt;/p&gt;
&lt;!-- ![]({attach}lisa.jpg) --&gt;

&lt;p&gt;I have a variety of interests, many of which lend themselves to being shared in text rather than just video or audio:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Software Development &amp;amp; DevOps&lt;/li&gt;
&lt;li&gt;Microcontrollers &amp;amp; Electronics (Arduino, etc)&lt;/li&gt;
&lt;li&gt;Ham Radio&lt;/li&gt;
&lt;li&gt;Electronic Music Production&lt;/li&gt;
&lt;li&gt;Live Audio &amp;amp; Recording&lt;/li&gt;
&lt;li&gt;Home Automation&lt;/li&gt;
&lt;li&gt;Photography&lt;/li&gt;
&lt;li&gt;Baking&lt;/li&gt;
&lt;li&gt;Fishing&lt;/li&gt;
&lt;li&gt;I'm sure I'll touch on all of these in this blog eventually.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you want to contact me, feel free to send me an email at samuel.colburn@gmail.com.&lt;/p&gt;</content><category term="General"/></entry><entry><title>OP-Z Fun</title><link href="https://blog.sam.codes/op-z-fun.html" rel="alternate"/><published>2019-03-02T12:00:00-05:00</published><updated>2019-03-02T12:00:00-05:00</updated><author><name>Samuel Colburn</name></author><id>tag:blog.sam.codes,2019-03-02:/op-z-fun.html</id><summary type="html">&lt;p&gt;Recently I purchased a Teenage Engineering OP-Z. Many of you have probably seen the OP-1 videos all over the internet—it looks like a weird piece of medical equipment, but it makes sweet, sweet tunes. The OP-Z is their new flagship product, not trying to replace the OP-1, but it is smaller and more powerful in some interesting ways.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;em&gt;This blog post originally appeared on &lt;a href="https://hoob.dev/op-z-fun/"&gt;hoob.dev&lt;/a&gt; and has been copied here to merge all of my historical blog posts into a single blog.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Recently I purchased a Teenage Engineering OP-Z. Many of you have probably seen the OP-1 videos all over the internet—it looks like a weird piece of medical equipment, but it makes sweet, sweet tunes. The OP-Z is their new flagship product, not trying to replace the OP-1, but it is smaller and more powerful in some interesting ways.&lt;/p&gt;
&lt;p&gt;Here's a track I made in the first couple of hours of owning the OP-Z.&lt;/p&gt;
&lt;div class="center"&gt;&lt;iframe width="100%" height="300" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/583890114&amp;color=%23ff5500&amp;auto_play=false&amp;hide_related=false&amp;show_comments=true&amp;show_user=true&amp;show_reposts=false&amp;show_teaser=true&amp;visual=true"&gt;&lt;/iframe&gt;&lt;div style="font-size: 10px; color: #cccccc;line-break: anywhere;word-break: normal;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; font-family: Interstate,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Garuda,Verdana,Tahoma,sans-serif;font-weight: 100;"&gt;&lt;a href="https://soundcloud.com/samuel-hoober-colburn" title="Ho0ber" target="_blank" style="color: #cccccc; text-decoration: none;"&gt;Ho0ber&lt;/a&gt; · &lt;a href="https://soundcloud.com/samuel-hoober-colburn/zday-op-z" title="zDay (OP-Z)" target="_blank" style="color: #cccccc; text-decoration: none;"&gt;zDay (OP-Z)&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I've been working on a few more since, and even using some in the Disney podcast I'm making with my spouse, &lt;a href="https://boredandsassy.com/"&gt;Bored &amp;amp; Sassy&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Because my first dabbling on the OP-Z isn't all that impressive, here's a set on the OP-Z from one of the best-known OP-1 youtubers who has been deep-diving on the OP-Z and making instructional videos for the community.&lt;/p&gt;
&lt;div class="center"&gt;&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/RGUOXxQniKU" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;

&lt;p&gt;If you haven't checked out Jeremy's work before go check out his channel, &lt;a href="https://www.youtube.com/user/jjbbllkk"&gt;Red Means Recording&lt;/a&gt;.&lt;/p&gt;</content><category term="Music"/></entry><entry><title>Windows Volume Control with NK2 Tray</title><link href="https://blog.sam.codes/windows-volume-control-with-nk2-tray.html" rel="alternate"/><published>2019-03-02T12:00:00-05:00</published><updated>2019-03-02T12:00:00-05:00</updated><author><name>Samuel Colburn</name></author><id>tag:blog.sam.codes,2019-03-02:/windows-volume-control-with-nk2-tray.html</id><summary type="html">&lt;p&gt;A little over two years ago I found myself fighting with multiple soundcards, ground loop hum, software audio routing messes, and a tangle of cables. Why? I simply wanted the mixer on my desk to directly control game audio, music, and voice chat channels independently.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;em&gt;This blog post originally appeared on &lt;a href="https://hoob.dev/windows-application-volume-control-with-nk2-tray/"&gt;hoob.dev&lt;/a&gt; and has been copied here to merge all of my historical blog posts into a single blog.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;A little over two years ago I found myself fighting with multiple soundcards, ground loop hum, software audio routing messes, and a tangle of cables. Why? I simply wanted the mixer on my desk to directly control game audio, music, and voice chat channels independently.&lt;/p&gt;
&lt;div class="center"&gt;&lt;img src="images/nk2_1.jpeg" class="inline" /&gt;&lt;/div&gt;
&lt;div class="caption center"&gt;A horrible quality shot of the original solution&lt;/div&gt;

&lt;p&gt;After arriving on a solution that worked, I asked myself, "How do normal humans solve this problem?" The answer was pretty obvious, but not satisfying. "They just alt-tab and use the windows volume mixer."&lt;/p&gt;
&lt;p&gt;I wasn't happy with that solution, but also disliked the complexity of my "working" solution, so I turned to my usual windows software toolbox and started writing some AutoHotkey script. In pretty short order I was able to adjust individual application volumes using key bindings. This was an improvement over alt-tabbing to the Windows mixer, but still felt clumsy compared to analog faders.&lt;/p&gt;
&lt;p&gt;So why not the best of both worlds? Analog faders controlling the Windows volume mixer! I got my hands on the cheapest USB midi control surface I could find, the Korg nanoKONTROL2.&lt;/p&gt;
&lt;!-- ![image of nanokontrol2](images/nk2.png) --&gt;
&lt;div class="center"&gt;&lt;img src="images/nk2_2.png" class="inline" /&gt;&lt;/div&gt;
&lt;div class="caption center"&gt;I wonder if you can tell this is a product photo?&lt;/div&gt;

&lt;p&gt;Using some existing midi and audio libraries for AHK I was able to hack together a working prototype in no time. I whipped up a quick video showing my project and promptly forgot about it.&lt;/p&gt;
&lt;div class="center"&gt;&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/mxscBWjlrlc" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;

&lt;p&gt;This prototype turned out to be stable enough that I used it for over two years with only minor modifications, and it turns out that a number of people who had watched my video decided to buy a nanoKONTROL2 just to use my software on it. As the emails and github issues started rolling for the prototype project, I started to realize that I was not easily going to be able to support further development on the project in its current state.&lt;/p&gt;
&lt;p&gt;After months of dragging my feet on research and getting started on it, I dove back into the world of programming native Windows applications for the first time in over a decade. As a developer who does mostly back-end projects using open-source tech, this felt a lot like walking into the dragon's lair. As it turns out, a lot has improved in the space since I last wrote code built just for windows.&lt;/p&gt;
&lt;p&gt;I landed on a C# Windows Forms application as the simplest path forward, and I stumbled across NAudio, a brilliantly written library that made a lot of the Core Audio and midi work a lot easier. After a few more weeks, I had a functioning alpha version of the project running and got it into the hands of a few loyal users of my prototype software.&lt;/p&gt;
&lt;div class="center"&gt;&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/Ze23ua9O7Vk" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen&gt;&lt;/iframe&gt;&lt;/div&gt;

&lt;p&gt;I also was able to add support for additional devices pretty easily. There's still a lot of work to do to make this truly stable and feature complete, but at least it's now something I feel confident that multiple developers could actually work together to support, rather than just the mess of copypasta that made up the original prototype.&lt;/p&gt;
&lt;p&gt;I've open-sourced the rewrite, and I'm hoping that as adoption continues, we'll get more and more people interested enough to actually contribute. If that person is you, or if you'd like to try out the software, please check it out on the NK2 Tray project page on GitHub.&lt;/p&gt;
&lt;p&gt;Additionally, if you want to help test or just talk shop, I encourage you to join our discord server!&lt;/p&gt;
&lt;p&gt;The next major milestone for me on the project is to add support for a far more advanced controller, like the Behringer X-Touch Extender. The digital scribble strips, motorized faders, and per-channel volume meters really open up the possibilities of the project.&lt;/p&gt;
&lt;div class="center"&gt;&lt;img src="images/nk2_3.jpeg" class="inline" /&gt;&lt;/div&gt;
&lt;div class="caption center"&gt;This definitely belongs in a spaceship&lt;/div&gt;

&lt;p&gt;For now, I'm just excited to have a group of active users who are excited about something I built. That's a big part of what it means to write open source software, right?&lt;/p&gt;
&lt;p&gt;Here are the links collected, with a few bonuses:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/ho0ber/NK2Tray"&gt;NK2 Tray GitHub Project&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://discord.gg/BtVTYxpTh"&gt;Discord Invite&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ho0ber/nk2-audio"&gt;Original AutoHotkey Prototype Project&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/naudio/NAudio"&gt;NAudio Library&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.sweetwater.com/store/detail/XTouchEXT--behringer-by-touch-extender"&gt;X-Touch Extender&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.sweetwater.com/store/detail/XTouchMini--behringer-by-touch-mini"&gt;X-Touch Mini&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.sweetwater.com/store/detail/nanoKON2bk--korg-nanokontrol2-black"&gt;nanoKONTROL 2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="Code"/></entry><entry><title>Ghost Default Theme (Casper) Dark-Mode</title><link href="https://blog.sam.codes/ghost-default-theme-casper-dark-mode.html" rel="alternate"/><published>2019-02-27T12:00:00-05:00</published><updated>2019-02-27T12:00:00-05:00</updated><author><name>Samuel Colburn</name></author><id>tag:blog.sam.codes,2019-02-27:/ghost-default-theme-casper-dark-mode.html</id><summary type="html">&lt;p&gt;So I really like the default theme that comes with Ghost, but I really dislike light backgrounds. I don't want to go through the trouble of maintaining my own fork of the theme, and while there are dark themes out there, many of them are quite ugly and lack the features of Casper.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;em&gt;This blog post originally appeared on &lt;a href="https://hoob.dev/op-z-fun/"&gt;hoob.dev&lt;/a&gt; and has been copied here to merge all of my historical blog posts into a single blog.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;So I really like the default theme that comes with Ghost, but I really dislike light backgrounds. I don't want to go through the trouble of maintaining my own fork of the theme, and while there are dark themes out there, many of them are quite ugly and lack the features of Casper.&lt;/p&gt;
&lt;p&gt;My solution? Cheat! Using Ghost's code injection features, I'm able to apply some quick and dirty CSS to update the theme to be more to my liking. I had trouble finding any useful examples of this for Casper, so I thought it might be nice to share mine here. I'll update this post as I continue to tweak this site to my liking.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;/*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Homepage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;background&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;color&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*/&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;background&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nb"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;#&lt;span class="mi"&gt;000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;/*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Article&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;background&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;color&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*/&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;#&lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;background&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nb"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;#&lt;span class="mi"&gt;222&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;/*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Article&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;author&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;color&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*/&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nb"&gt;full&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;author&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;card&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nb"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;#&lt;span class="n"&gt;EEE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;/*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Article&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;background&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;color&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*/&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nb"&gt;full&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nb"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;#&lt;span class="n"&gt;DDD&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;background&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nb"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;#&lt;span class="mi"&gt;000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;/*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Article&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;links&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*/&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nb"&gt;full&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nb"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;#&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="n"&gt;cccf0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;/*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Emphasis&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*/&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nb"&gt;full&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;em&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nb"&gt;full&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;strong&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nb"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;#&lt;span class="n"&gt;fff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;/*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Floating&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;articles&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*/&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;floating&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;header&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;background&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nb"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;#&lt;span class="mi"&gt;000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nb"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;#&lt;span class="n"&gt;DDD&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;floating&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;header&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;floating&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;header&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;share&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nb"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;#&lt;span class="n"&gt;DDD&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;/*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Inline&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;backticks&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*/&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nb"&gt;full&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;background&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nb"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;#&lt;span class="mi"&gt;333&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;/*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Code&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;blocks&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*/&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nb"&gt;full&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pre&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;background&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nb"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;#&lt;span class="mi"&gt;333&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Just drop the above inside some &lt;code&gt;&amp;lt;style&amp;gt;&amp;lt;/style&amp;gt;&lt;/code&gt; tags in your header code-injection, and your Ghost site should look like this one! If you want to theme coral talk for comments like I have below, you can &lt;a href="https://hoob.io/talk.css"&gt;steal that CSS too&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;UPDATE: This appears to have broken over time. I'm looking into trying out this instead: &lt;a href="https://forum.ghost.org/t/casper-the-dark-mode-enabled-version-free/6634"&gt;https://forum.ghost.org/t/casper-the-dark-mode-enabled-version-free/6634&lt;/a&gt;&lt;/p&gt;</content><category term="Code"/></entry><entry><title>New Music: Exiting</title><link href="https://blog.sam.codes/new-music-exiting.html" rel="alternate"/><published>2009-01-18T12:00:00-05:00</published><updated>2009-01-18T12:00:00-05:00</updated><author><name>Samuel Colburn</name></author><id>tag:blog.sam.codes,2009-01-18:/new-music-exiting.html</id><summary type="html">&lt;p&gt;Okay, so I know I can't compose for piano to save my life... and I surely can't play it with the grace I would like... but here's a little direct expression for you.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;em&gt;This blog post originally appeared on &lt;a href="https://beefthief.blogspot.com/2009/01/new-music-exiting.html"&gt;beefthief.blogspot.com&lt;/a&gt; and has been copied here for posterity and to remind myself of what I was like in 2009.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Okay, so I know I can't compose for piano to save my life... and I surely can't play it with the grace I would like... but here's a little direct expression for you.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://ho0ber.com/exiting.mp3"&gt;Exiting.mp3&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;All comments welcome, though this one is more for me than for anyone else.&lt;/p&gt;</content><category term="Music"/></entry><entry><title>New Site &amp; Financial Advice</title><link href="https://blog.sam.codes/new-site-financial-advice.html" rel="alternate"/><published>2008-12-04T12:00:00-05:00</published><updated>2008-12-04T12:00:00-05:00</updated><author><name>Samuel Colburn</name></author><id>tag:blog.sam.codes,2008-12-04:/new-site-financial-advice.html</id><summary type="html">&lt;p&gt;First things first, I wanted to note that a lot of my time and effort recently has gone into my new site: RatchetHead.net - A new community for those of the engineering profession in World of Warcraft.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;em&gt;This blog post originally appeared on &lt;a href="https://beefthief.blogspot.com/2008/12/new-site-financial-advice.html"&gt;beefthief.blogspot.com&lt;/a&gt; and has been copied here for posterity and to remind myself of what I was like in 2008.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;First things first, I wanted to note that a lot of my time and effort recently has gone into my new site: &lt;a href="RatchetHead.net"&gt;RatchetHead.net&lt;/a&gt; - A new community for those of the engineering profession in World of Warcraft.
Secondly, I wanted to share a bit of financial advice one of my company's executives gave us at our quarterly meeting:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If, five years ago, you invested 1000 dollars in Delta Airlines, today you would have about 50 bucks.&lt;/p&gt;
&lt;p&gt;If you invested 1000 dollars in AIG, today you'd have nothing whatsoever.&lt;/p&gt;
&lt;p&gt;If you invested 1000 dollars in beer, drank it all and recycled the cans, you'd have about 200 bucks in refunds.&lt;/p&gt;
&lt;p&gt;So the moral of this story is "Drink heavily... and recycle!"&lt;/p&gt;
&lt;/blockquote&gt;</content><category term="General"/></entry><entry><title>How good is it?</title><link href="https://blog.sam.codes/how-good-is-it.html" rel="alternate"/><published>2008-07-29T12:01:00-04:00</published><updated>2008-07-29T12:01:00-04:00</updated><author><name>Samuel Colburn</name></author><id>tag:blog.sam.codes,2008-07-29:/how-good-is-it.html</id><summary type="html">&lt;p&gt;This one is short and sweet&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;em&gt;This blog post originally appeared on &lt;a href="https://beefthief.blogspot.com/2008/07/how-good-is-it.html"&gt;beefthief.blogspot.com&lt;/a&gt; and has been copied here for posterity and to remind myself of what I was like in 2008.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;IT'S DAMN GOOD! (Click through if you can't see the text in the circle clearly)&lt;/p&gt;
&lt;p&gt;Sure, I could have posted this and the previous amusing image together, but hey, I'm lazy.&lt;/p&gt;</content><category term="Photography"/></entry><entry><title>Construction Brilliance</title><link href="https://blog.sam.codes/construction-brilliance.html" rel="alternate"/><published>2008-07-29T12:00:00-04:00</published><updated>2008-07-29T12:00:00-04:00</updated><author><name>Samuel Colburn</name></author><id>tag:blog.sam.codes,2008-07-29:/construction-brilliance.html</id><summary type="html">&lt;p&gt;This one is short and sweet&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;em&gt;This blog post originally appeared on &lt;a href="https://beefthief.blogspot.com/2008/07/construction-brilliance.html"&gt;beefthief.blogspot.com&lt;/a&gt; and has been copied here for posterity and to remind myself of what I was like in 2008.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This one is short and sweet.&lt;/p&gt;
&lt;p&gt;You'd think they would know these things in Vermont by now...&lt;/p&gt;</content><category term="Photography"/></entry><entry><title>The Ride Home</title><link href="https://blog.sam.codes/the-ride-home.html" rel="alternate"/><published>2008-07-24T12:00:00-04:00</published><updated>2008-07-24T12:00:00-04:00</updated><author><name>Samuel Colburn</name></author><id>tag:blog.sam.codes,2008-07-24:/the-ride-home.html</id><summary type="html">&lt;p&gt;Commuting an hour to work every day has its upsides and downsides. I have plenty of time in the morning to let my brain get warmed up for the day, especially after finishing off a travel mug of tea during the trip.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;em&gt;This blog post originally appeared on &lt;a href="https://beefthief.blogspot.com/2008/07/ride-home.html"&gt;beefthief.blogspot.com&lt;/a&gt; and has been copied here for posterity and to remind myself of what I was like in 2008.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a data-flickr-embed="true" href="https://www.flickr.com/photos/ho0ber/albums/72157606345916640" title="The Ride Home"&gt;&lt;img src="https://live.staticflickr.com/3177/2677799801_e09818156f_z.jpg" width="640" height="480" alt="The Ride Home"/&gt;&lt;/a&gt;&lt;script async src="//embedr.flickr.com/assets/client-code.js" charset="utf-8"&gt;&lt;/script&gt;&lt;/p&gt;
&lt;p&gt;Commuting an hour to work every day has its upsides and downsides. I have plenty of time in the morning to let my brain get warmed up for the day, especially after finishing off a travel mug of tea during the trip. I have the luxury of knowing exactly when I'll need gas, so I can plan to stop at the cheapest gas station on the entire trip (there is currently a 25¢ difference from the best to the worst).&lt;/p&gt;
&lt;p&gt;Now, the downsides are pretty obvious. I spend as much as $100 a week in gas, I lose two hours of leisure (or sleep...) time, and my air conditioning is broken, so I arrive home looking like I was running for an hour rather than driving.&lt;/p&gt;
&lt;p&gt;All of that aside, there is one aspect to the trip that easily makes it worthwhile: The scenery. Yes, I know I've lived in New Hampshire for my entire life (sans-college), but there are some things you appreciate more when you have two hours a day to look at them. The above Flickr set (click the picture!) consists of just the few sights I managed to capture that did justice to the real thing. Hopefully I'll be able to slowly add to that, but these are a nice start.&lt;/p&gt;</content><category term="Photography"/></entry><entry><title>Job &amp; New Music</title><link href="https://blog.sam.codes/job-new-music.html" rel="alternate"/><published>2008-05-30T12:00:00-04:00</published><updated>2008-05-30T12:00:00-04:00</updated><author><name>Samuel Colburn</name></author><id>tag:blog.sam.codes,2008-05-30:/job-new-music.html</id><summary type="html">&lt;p&gt;I think I'll finally be getting a job offer today, so it seems only fitting that I update with a new track by this title.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;em&gt;This blog post originally appeared on &lt;a href="https://beefthief.blogspot.com/2008/06/new-track-in-progress-moving-on.html"&gt;beefthief.blogspot.com&lt;/a&gt; and has been copied here for posterity and to remind myself of what I was like in 2008.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I think I'll finally be getting a job offer today, so it seems only fitting that I update with a new track by this title.&lt;/p&gt;
&lt;h2&gt;Music: &lt;a href="https://www.ho0ber.com/sdc/03%20-%20Asphalt/Moving%20On%20(Sample%202).mp3"&gt;Moving On&lt;/a&gt; (New Track in Progress)&lt;/h2&gt;
&lt;p&gt;This is my latest track in progress. So far I'm pleased with how it is working out, though I'm a little concerned that part of it is a little too inspired by some trance I've listened to recently, so I'll have to go listen to every bit of music I own to find out why it sounds so familiar. I'm thinking it is straight out of some Tiesto, PVD, Ian Van Dahl, or someone like that.&lt;/p&gt;
&lt;p&gt;I still need to do a lot of work on the transitions, but I think it will come out pretty nicely. Let me know what you think!&lt;/p&gt;
&lt;p&gt;UPDATE: I tweaked the drums and the arrangement a little bit.&lt;/p&gt;
&lt;p&gt;UPDATE: I took the job, and I start Monday. Yay!&lt;/p&gt;</content><category term="Music"/></entry><entry><title>Pork!</title><link href="https://blog.sam.codes/pork.html" rel="alternate"/><published>2008-05-21T12:00:00-04:00</published><updated>2008-05-21T12:00:00-04:00</updated><author><name>Samuel Colburn</name></author><id>tag:blog.sam.codes,2008-05-21:/pork.html</id><summary type="html">&lt;p&gt;Now that I'm living at home while I sort out this whole "real job" situation, I've been trying to cook a little more in the hope that the excellent skills of my parents might rub off on me a little bit.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;em&gt;This blog post originally appeared on &lt;a href="https://beefthief.blogspot.com/2008/05/pork.html"&gt;beefthief.blogspot.com&lt;/a&gt; and has been copied here for posterity and to remind myself of what I was like in 2008. I especially enjoy this one because I &lt;strong&gt;never again&lt;/strong&gt; added to the food album on flickr.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Now that I'm living at home while I sort out this whole "real job" situation, I've been trying to cook a little more in the hope that the excellent skills of my parents might rub off on me a little bit. Now, for those of you who haven't met them, cooking is serious business to my parents. They'll often spend hours making dinner, and for every birthday or other gift-giving holiday, they give each other cookware or other culinary tools.&lt;/p&gt;
&lt;p&gt;On to the meat! Last night my father brought home some country style pork ribs, which have a lot more meat than spareribs or back ribs, and are more marbled with fat. Much like my father, I'm a big fan of the grill. I seasoned these suckers up with some salt, pepper, chili powder, and Italian seasoning, and then seared them for a minute or two on each side. After about five or six minutes of indirect heat (I just turned off the middle burner) they were ready to go.&lt;/p&gt;
&lt;p&gt;In honor of my delightful meal, I decided to start a new Flickr set for pictures of my culinary exploits: &lt;a href="https://www.flickr.com/photos/ho0ber/sets/72157605164682130/"&gt;Food&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Hopefully I'll have more good stuff on its way soon!&lt;/p&gt;</content><category term="Photography"/></entry><entry><title>Project Diceman</title><link href="https://blog.sam.codes/project-diceman.html" rel="alternate"/><published>2008-05-08T12:01:00-04:00</published><updated>2008-05-08T12:01:00-04:00</updated><author><name>Samuel Colburn</name></author><id>tag:blog.sam.codes,2008-05-08:/project-diceman.html</id><summary type="html">&lt;p&gt;Some of you may remember "Project Swordman," a javascript based dueling game I created over the summer. Not only am I slowly working on an improved flash version of that game, but I am now also working on a dice adaptation.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;em&gt;This blog post originally appeared on &lt;a href="https://beefthief.blogspot.com/2008/05/project-diceman.html"&gt;beefthief.blogspot.com&lt;/a&gt; and has been copied here for posterity and to remind myself of what I was like in 2008.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Some of you may remember "Project Swordman," a javascript based dueling game I created over the summer. Not only am I slowly working on an improved flash version of that game, but I am now also working on a dice adaptation. I realize this puts me in a completely different category of geek, and I realize that tabletop adaptations of online games should probably be left to the likes of Blizzard, but this is just one of those ideas I just had to follow through with.&lt;/p&gt;
&lt;p&gt;For those of you (most of you) who didn't get a chance to play Project Swordman when it was operational, this is the basic setup: Two players select the power and location of their sword and shield, and once both are ready, their actions are simultaneously executed. Power is distributed between the two out of a total of ten power points. At the end of its time online I added another option for spending your points: Priority. This allowed a player to emphasize getting priority over the other player in order to deal his own damage before his opponent, and as such was only useful on potential killing blows.&lt;/p&gt;
&lt;p&gt;The mechanics of Project Diceman are different in several ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Power levels are based on random rolls, not planned distribution.&lt;/li&gt;
&lt;li&gt;There is no sword and shield placement, only power levels.&lt;/li&gt;
&lt;li&gt;Priority still effects who strikes first, but also creates the potential for special moves when used with a sword or a shield (explained below).&lt;/li&gt;
&lt;li&gt;In order to create more options to counteract the added simplicity of not having to place sword strikes and shield blocks, a fourth component is added: Magic.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So here's the rundown as if I was starting from scratch:&lt;/p&gt;
&lt;p&gt;Each player has four dice representing the four combat components:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;d4 - Magic&lt;/li&gt;
&lt;li&gt;d6 - Priority&lt;/li&gt;
&lt;li&gt;d8 - Sword&lt;/li&gt;
&lt;li&gt;d10 - Shield&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;At the beginning of each game each player has 20 life. When a player reaches zero life, he dies. Each game is divided into rounds (each roll is a round), and each round into seven priority phases (stepping through 6–0).&lt;/p&gt;
&lt;p&gt;To start the first round, each player selects only two of his four dice and holds them in his hands as if about to roll, without allowing the other player to see which two dice he has selected. Once both players are in this ready position, they both roll simultaneously.&lt;/p&gt;
&lt;p&gt;The result of each round is determined in the following fashion:&lt;/p&gt;
&lt;p&gt;For each priority phase from six to zero (no priority roll equals zero priority) the following actions occur:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If a player's priority level is greater than that of his opponent, his sword value is reduced by that difference (or until it hits zero), and he deals an amount of unblockable damage equal to the difference in priority levels or his original sword value, whichever is lower.&lt;/li&gt;
&lt;li&gt;If a player's priority level is greater than that of his opponent and his shield value is greater than zero, he deals a preemptive strike with unblockable damage equal to the difference in priority levels or the amount of damage his shield will block, whichever is lower. The opponent's damage is not dealt until his priority phase occurs.&lt;/li&gt;
&lt;li&gt;A given player's sword value has the opponent's shield value subtracted from it and the remaining (positive only) damage is dealt.&lt;/li&gt;
&lt;li&gt;If BOTH players' magic values are greater than zero, they have the same priority level, and they have not and will not receive non-magic damage this phase, the player with the higher magic value deals ubblockable damage equal to the difference of their values.&lt;/li&gt;
&lt;li&gt;If a player's magic value is greater than zero and that player has not and will not receive damage this phase, he deals unblockable damage equal to his magic value.&lt;/li&gt;
&lt;li&gt;Note: All damage dealt during a given priority phase is effectively dealt simultaneously.&lt;/li&gt;
&lt;li&gt;Note: If a player reaches lethal damage before his priority phase, he is slain before having a chance to attempt a draw.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Forgive me for the complexity of the wording of these rules. They're really quite simple. Swords are blocked by shields, priority can give unblockable damage using either the sword or the shield, and magic damage is only dealt if that player is not going to get damaged (which makes it only good for dealing with overly defensive opponents or for getting those last few points of damage in without worrying about shields).&lt;/p&gt;
&lt;p&gt;I realize this system is far from perfect, but it is the best thing I could come up with that was relatively simple and stuck to the same sort of mind-game (and dumb luck) gameplay of Project Swordman. Project Swordman is still a much better game for trying to get in your opponent's head to defeat him, with the only luck being involved based on your guessing ability. Project Diceman is slightly more random, but still contains advantages for those who think they know how their opponent will play on a given round.&lt;/p&gt;
&lt;p&gt;I plan to run the numbers on this setup more thoroughly in order to get a good graph of which combinations of dice will beat which other combinations on average (and with what odds).&lt;/p&gt;
&lt;p&gt;If you have any questions or ideas please let me know.&lt;/p&gt;</content><category term="Gaming"/></entry><entry><title>No Ho0ber For Me!</title><link href="https://blog.sam.codes/no-ho0ber-for-me.html" rel="alternate"/><published>2008-05-08T12:00:00-04:00</published><updated>2008-05-08T12:00:00-04:00</updated><author><name>Samuel Colburn</name></author><id>tag:blog.sam.codes,2008-05-08:/no-ho0ber-for-me.html</id><summary type="html">&lt;p&gt;So it appears that I've lost any hope of gaining access to my old blog, ho0ber.blogspot.com. For some reason it was linked to a hotmail account I don't remember having (not that it would tell me the actual address), and I surely don't remember what password I signed up with originally.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;em&gt;This blog post originally appeared on &lt;a href="https://beefthief.blogspot.com/2008/05/no-ho0ber-for-me.html"&gt;beefthief.blogspot.com&lt;/a&gt; and has been copied here for posterity and to remind myself of what I was like in 2008.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;So it appears that I've lost any hope of gaining access to my old blog, &lt;a href="https://ho0ber.blogspot.com"&gt;ho0ber.blogspot.com&lt;/a&gt;. For some reason it was linked to a hotmail account I don't remember having (not that it would tell me the actual address), and I surely don't remember what password I signed up with originally. But hey, I've always been fond of being the "Beef Thief." It does say it it on &lt;a href="https://www.flickr.com/photos/ho0ber/2474893325/"&gt;my business card&lt;/a&gt; after all.&lt;/p&gt;
&lt;p&gt;Time to get down to business. This blog is not a journal into which I will clumsily scrawl useless information and my "deepest inner thoughts," because if I did it would leave my countless readers (optimism is key) both bored and ill. Instead it will be a way for me to share and discuss my creative exploits. Essentially, I'm tired of cluttering my AIM away messages with everything I've produced recently.&lt;/p&gt;
&lt;p&gt;For those of you who don't know me well (in which case I'm slightly confused as to how you got here), I'm a musician (I go by SDC), an amateur photographer, and a programmer. I will regularly post new electronica tracks I've started working on as well as links to recent photographs I've taken. Yes, yes... I realize anyone can just take a look at my Flickr photo feed, but I'd prefer to post the shots I'm particularly proud of and discuss briefly how they came into existence. Maybe once Google gets around to buying Yahoo, and therefore Flickr, this whole process will be a little easier.&lt;/p&gt;
&lt;p&gt;Now then, onto today's dosage of new stuff:&lt;/p&gt;
&lt;h2&gt;Music: &lt;a href="https://www.ho0ber.com/sdc/03%20-%20Asphalt/Anticipation%20(Sample%202).mp3"&gt;Anticipation&lt;/a&gt; (New Track in Progress)&lt;/h2&gt;
&lt;p&gt;It seems that insomnia and stress are a good way to bring out the muse in me. I've found that my brain is very good at coming up with new concepts and melodies at the point just between consciousness and sleep. At any rate, I'm very pleased with the results. Anticipation is off to a good start so far. I was really pleased with how well I managed to tweak the bass instrument, and I think the beat came out quite well. Please let me know what you think!&lt;/p&gt;
&lt;div class="center"&gt;&lt;img src="images/customer_parking.jpg" class="inline" /&gt;&lt;/div&gt;
&lt;h2&gt;Photography: &lt;a href="https://www.flickr.com/photos/ho0ber/sets/72157604766922455/"&gt;More Signs!&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So I have a bit of a sign fetish. I adore taking pictures of interesting signs when I see them. Incidentally, one of my other photography interests is texture, specifically rust. I think you can figure out the connection here.&lt;/p&gt;
&lt;p&gt;So that's all for now, but more will come soon!&lt;/p&gt;</content><category term="Music"/></entry></feed>