<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <generator uri="https://github.com/dorkrawk/postwave" version="0.1.5">Postwave</generator>
  <link href="https://dinosaurseateverybody.com" rel="self" type="application/atom+xml" />
  <link href="https://dinosaurseateverybody.com" />
  <updated>2026-02-06T15:32:41-06:00</updated>
  <id>https://dinosaurseateverybody.com</id>
  <title type="html">Dinosaurs Eat Everybody</title>
  <subtitle>For all your Dave Schwantes related needs.</subtitle>
  
  <entry>
    <title>Powered By Postwave</title>
    <link href="https://dinosaurseateverybody.com/blog/powered-by-postwave" rel="alternate" type="text/html" title="Powered By Postwave" />
    <id>https://dinosaurseateverybody.com/blog/powered-by-postwave</id>
    <published>2026-02-06T14:58:00-06:00</published>
    <updated>2026-02-06T14:58:00-06:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p><strong>This blog is now using my home-grown blogging library, <a href="https://postwave.blog/">Postwave</a>!</strong></p>

<p>I <a href="../blog/postwave">wrote about Postwave</a> a little while ago, but at the time this site was still using the hacked together Jekyll-based solution that I had been using since around <a href="../blog/sinatra-jekyll-prose">2013</a>. It seemed a bit silly to build a blogging library but not use it for my own blog, but I was a little daunted by the task of migrating all my posts over in a way that didn't break everything.  I had hit the point where I was writing posts for this site and wished I could be using Postwave so when I had a little bit of free time one night last week so I decided to give it a shot and it turned out to be...</p>

<p>Not that bad.</p>

<p>Postwave posts look very similar to Jekyll posts. They are Markdown files with a little bit of header information:</p>

<pre><code class="markdown">title: Powered By Postwave
date: 2026-02-06 14:58
tags:

**This blog is now using my home-grown blogging library, [Postwave](https://postwave.blog/)!**
</code></pre>

<p>With a little help from Copilot, I wrote a basic script to migrate all the Jekyll posts over to the Postwave directories and make any formatting changes needed. I'm planning to use this script as the basis for a future <code>postwave migrate</code> command in the Postwave library.</p>

<p>After this I just added some of the basic post display and archive code needed to make use of all those new Postwave-shaped Markdown files. Much of this code was lifted from the <a href="https://github.com/dorkrawk/postwave-site">Postwave example blog</a>.</p>

<p>The whole process ended up being pretty easy and I was able to migrate things without really changing any of the urls for old posts. It's very likely (and intentional) that nobody else will notice the change, but I know and that's what matters. It's a really good feeling to use a tool that you made for yourself and works EXACTLY the way you want it to.</p>
]]>
    </content>
    
  </entry>
  
  <entry>
    <title>Fine, I&#39;ll Do It Myself</title>
    <link href="https://dinosaurseateverybody.com/blog/fine-ill-do-it-myself" rel="alternate" type="text/html" title="Fine, I&#39;ll Do It Myself" />
    <id>https://dinosaurseateverybody.com/blog/fine-ill-do-it-myself</id>
    <published>2026-01-15T00:00:00-06:00</published>
    <updated>2026-01-15T00:00:00-06:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p><strong>I recently moved all my small project sites over to a self-hosted solution using <a href="https://coolify.io/">Coolify</a>. It was pretty easy and really rewarding!</strong></p>

<p>I miss Heroku.</p>

<p>I know Heroku still exists, but I miss the generous free tier they offered. This was the perfect solution for spinning up relatively simple, low traffic, Ruby sites, which are what a lot of my projects are.</p>

<p>When Heroku decided to kick out freeloaders (like me) I started looking around for other hosting options I could mooch from. I ended up moving most of my small sites/projects to <a href="https://fly.io/">Fly.io</a>. When I needed a small database, <a href="https://supabase.com/">Supabase</a> had a pretty good free tier and I ended up using <a href="https://umami.is/">Umami</a> for some simple site analytics.</p>

<p>Honestly, this all worked pretty well. Fly.io had a good free tier. I only started incurring costs once I was hosting too many sites on my account. Umami worked fine, but the free tier only supported 3 sites and 6 months of data. I did run into a few issues with Fly.io deployments when they changed some configurations, but nothing major. I <em>probably</em> could have finagled a mostly workable, almost free hosting solution. But near the end of last year, I was fixing the deployment configs for one of my sites and I started thinking, <strong>"Why don't I do this all myself and have it work exactly the way I want!?"</strong>.</p>

<p>Always a dangerous thought.</p>

<p>I've had a small Digital Ocean droplet for a while, just to play around with, but I wasn't doing much with it, so I figured I could use that.  I started looking into "Heroku-like" self-hosting systems and landed on <a href="https://coolify.io/">Coolify</a>. I'm ok with a little DYI, but I didn't really want to do a lot of serious Linux server maintenance and this seemed to fit the bill.  Setting up Coolify on a Digital Ocean droplet was pretty straightforward:</p>

<p>Open up some ports:</p>

<pre><code>ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 8000/tcp
ufw enable
ufw status
</code></pre>

<p>Install Coolify:</p>

<pre><code>curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash
</code></pre>

<p>And then I had a web UI to start setting things up.</p>

<p>Each site in Coolify is an application and applications are contained in projects. I ended up setting up two different projects "site" for all the applications that would be normal public facing websites and "tools" for things like analytics.</p>

<p>To handle deploys, Coolify creates a GitHub app that you install on your account and then you give it read permissions on the repos you want to deploy from. This works with both public and private repos. Whenever I push to the <code>main</code> branch of the sites repo, Coolify gets a webhook and deploys.</p>

<p>All of the sites I was trying to move over were pretty simple Sinatra sites and after a little bit of wresting with the configs (an a lot of asking ChatGPT questions), I got a pretty good pattern down for all the sites I wanted to deploy:
- create an application that pulls from my GitHub app as a source and launches from a simple Dockerfle
- once the site is deployed, Coolify provides a temporary url to test it out at
- if everything looks good, just change the A record of the domain over to my Digital Ocean droplet's IP
- add the domain name to the Coolfiy application's config (Coolify handles getting the https certificate!)</p>

<p>I wanted to keep using Umami for site tracking, but just run my own instance, which ended up being pretty easy.  Coolify lets you create a new application from a public git repo (<code>https://github.com/umami-software/umami</code> in this case) and sets up the app from that. Coolify also has a simple flow for setting up a new database, so spinning up a Postgres instance for Umami was pretty easy. After getting that set up I moved all my sites over to my own instance of Umami, free of site and data retention limits!</p>

<p>One other thing I wanted now that I was self hosting was a little sftp server where I could upload files and have a publicly accessible url for them. To do this I set up an sftp server and then a standalone Nginx server, both pointed as the same persistent storage. Now I don't need to rely on a 3rd party service if I just want to share a <a href="https://stuff.toomuchcoffee.dev/dave_sketchy_100.png">small file</a>! Not necessary but I did it because it's my server and I can!</p>

<p>Now I'm happy to say I'm self-hosting the sites I run:</p>

<ul>
<li><a href="https://dinosaurseateverybody.com/">dinosaurseateverybody.com</a> (the site you're looking at right now!)</li>
<li><a href="https://dontbreakprod.com/">dontbreakprod.com</a></li>
<li><a href="https://postwave.blog/">postwave.blog</a></li>
<li><a href="https://evilbrain.band/">evilbrain.band</a></li>
<li>and a few small personal projects and the analytics for those sites</li>
</ul>

<p>I'm not really a big fan of doing dev ops stuff. I have a limited amount of time to spend on personal projects and I'd rather spend that time building and not messing with servers. But there's something pretty satisfying about hosting your own sites. For me, Coolify was a pretty good paved path to get things up and running with a nice UI.</p>
]]>
    </content>
    
  </entry>
  
  <entry>
    <title>Postwave</title>
    <link href="https://dinosaurseateverybody.com/blog/postwave" rel="alternate" type="text/html" title="Postwave" />
    <id>https://dinosaurseateverybody.com/blog/postwave</id>
    <published>2025-12-15T00:00:00-06:00</published>
    <updated>2025-12-15T00:00:00-06:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p><strong>I probably like writing blog engines more than blog posts.</strong></p>

<p>Earlier this year I <a href="../blog/dont-break-prod">wrote</a> about <a href="https://dontbreakprod.com/">Don't Break Prod</a>, my software engineering career advice site. While I enjoy writing about this stuff, the original motivation for building the site was to test a new blog engine I'd been working on called Postwave.</p>

<p>For a long time I've been using weird, hacked together solutions to integrate blog posts into my sites. It started with my band and old personal sites where I used WordPress to write posts but then made custom functions to pull the posts directly from the database rather than letting WordPress render a nice site like a normal person would. Later, when I built this version of my site, I did something similar with a Jekyll backend and my <a href="../blog/sinatra-jekyll-prose">own custom hooks into the generated html</a>. I liked being able to write posts in Markdown, but it felt silly to circumvent the whole static site generator to build a dynamic page.</p>

<p>So I did what any impractical programmer would do. I just built my own thing that works exactly the way I want, without any regard for general practicality.</p>

<p>This is where <a href="https://postwave.blog/">Postwave</a> came from.</p>

<p>Named after a <a href="https://open.spotify.com/album/2J2MincAYeWGK9k4jUzLz1?si=UPA8i-K-RdKI2z6rKKrrZg">Blue Meanies album</a> and built to do a very specific thing, Postwave is a fairly simple <a href="https://rubygems.org/gems/postwave">Ruby gem</a> that lets me write posts in Markdown and then dynamically integrate them into a custom site. When I'm building a small site I usually reach for <a href="https://sinatrarb.com/">Sinatra</a>. Most of the time I just want a simple web application with some dynamic endpoints and minimal JavaScript. And then I want a blog engine that just fits into that. </p>

<p>Postwave gives me simple methods objects and methods so I can use things like <code>post.title</code> and <code>post.body_html</code> to build a post display page and <code>postwave_client.archive</code> to get a structured archive.  It also autogenerates an RSS feed for me.</p>

<p>Postwave also has a few simple terminal commands for creating a new posts and "building" the blog, which updates the index, renames files based on post title, generates the RSS file, and a few other things. My workflow for writing posts is just to create a new post in the terminal, write the post in my code editor, rebuild the blog, and deploy the updated site.</p>

<p><img src="../blog_media/postwave1.png " title="Postwave in the terminal" /></p>

<p>It's not <em>done</em> (but what little personal project is?), but it is usable. I have an <a href="https://postwave.blog/">site/reference implementation</a> for people to learn about it and the <a href="https://github.com/dorkrawk/postwave">code</a> is available if anyone is interested.</p>

<p>So this site must be using Postwave under the hood, right?</p>

<p>Well... not yet. Dinosaurs Eat Everybody still uses my hacked together Jekyll solution, but that workflow is starting to annoy me so I'm eager to port it over to Postwave now. I've been using Postwave for a while on <a href="https://dontbreakprod.com/">Don't Break Prod</a> so I feel pretty confident that it's ready for use elsewhere. I'd like to build some small tools to make it easy to migrate a Jekyll site to Postwave. The post format is very similar and it would just make my migration easier.</p>

<p>Postwave has been a great little "scratch your own itch" project for me. I'm looking forward to using it more for my own blogging needs. And if my problems sound similar to yours, <a href="https://postwave.blog/">try it out</a>!</p>
]]>
    </content>
    
  </entry>
  
  <entry>
    <title>Random Thoughts About AI</title>
    <link href="https://dinosaurseateverybody.com/blog/random-thoughts-about-ai" rel="alternate" type="text/html" title="Random Thoughts About AI" />
    <id>https://dinosaurseateverybody.com/blog/random-thoughts-about-ai</id>
    <published>2025-10-21T00:00:00-05:00</published>
    <updated>2025-10-21T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>Just what the world needs, another software engineer pontificating about AI!</p>

<p>Nothing too deep here, just some things I've been mulling over that aren't worth writing whole posts about...</p>

<p><strong>Are we all really going to be staff engineers?</strong> It seems like there are a lot of people (or companies?) pushing the idea that the future of software engineering is making design decisions and directing and correcting a bunch of agents to get the work done. This sounds a lot like what some staff engineers do. What does a junior staff engineer even look like? It seems like this whole idea relies on people being good at clear communication and multitasking (two things that are very easy to screw up).</p>

<p><strong>I hate that everything requires a subscription.</strong> If coding with a state of the art LLM becomes the default, it means that by default coding will involve paying a monthly subscription. While companies will probably provide this for employees, there's now a perceived cost barrier for just wanting to build something on your own. It feels like model providers are hoping LLMs just become another utility that everybody needs to exist.</p>

<p><strong>There's a difference between wanting something made and wanting to make something.</strong> Coding agents are fantastic for getting something to exist. I have absolutely used them to take on coding projects that I just didn't want to bother with. One of my favorite LLM uses at work with handling the boiler plate around new tests. It would be silly to say that AI isn't useful for making things exist. But sometimes you want to <em>make things</em> and doing that with heavy agent usage just feels kind of hollow. The feeling of accomplishment that you get from building something yourself is real and there's a cost to losing it. Sometimes I just need a table so I just buy one from Ikea, but that's a different experience than using a piece of furniture that you designed and built yourself. </p>

<p><strong>AI can be really useful for learning, but you have to choose to use it for learning rather than just getting stuff done.</strong> Before you could get an agent to just build something for you, you had to get your hands dirty building it yourself. This often required either learning something new up front or incidentally learning something along the way. Now you have to consciously decide you're going to learn (which AI can help with!) in addition to shipping. </p>

<p><strong>We haven't seen AI products really enshitify yet.</strong> That's not going to be fun...</p>
]]>
    </content>
    
  </entry>
  
  <entry>
    <title>Just Use a Laptop</title>
    <link href="https://dinosaurseateverybody.com/blog/just-use-a-laptop" rel="alternate" type="text/html" title="Just Use a Laptop" />
    <id>https://dinosaurseateverybody.com/blog/just-use-a-laptop</id>
    <published>2025-10-15T00:00:00-05:00</published>
    <updated>2025-10-15T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p><strong>My most millennial trait is that big purchases must happen in a big laptop screen.</strong></p>

<p>You should just use a laptop. For most things.</p>

<p>Phones (and tablets, to some degree) are amazing because they're a powerful computing device that is always with you, but they're kind of awful for that same reason. When you can always pull out your phone to take care of a task, do your shopping, etc. you're always trying to do multiple things at once. If you can do it now you never have the excuse to plan to do it later. This has two pretty crappy consequences: </p>

<p>First, <strong>you never have to prioritize things</strong>. You just do them as soon you think of them. Maybe you're multitasking during dinner to get things done that don't actually matter. If you can keep checking Slack for work, you never have to decide you're done for the day. It can feel good to cram a little bit of productivity into gaps into your downtime, but sometimes it's good to have downtime. Being busy is not a virtue.</p>

<p>And second, <strong>it's harder to fully focus on your task</strong>. If you're reading emails or doing your shopping while you're out with other people you're only half doing both things. The double edged sword of using your phone for everything is that it's always with you, so you don't need to go to a dedicated "work space" to do your tasks. The inconvenience of getting out a laptop and opening it up to work is a feature. I think there's a lot of value in getting in the right head space to do non-trivial tasks and if you're primary device for getting things done is optimized for convenience rather than focus you're going to spend more time on the types of tasks that don't require deep focus.</p>

<p>Phones are great tools for a lot of things. They are really well optimized for portability (obviously), simplistic input, and consumption. The fact that I can get map directions or watch a movie wherever I am is a modern miracle. I love that I can pull out my phone whenever I get a random song idea and record a voice memo before I forget.</p>

<p>But I don't want to do the work of turning an idea into a finished song on my phone. For that I want to sit in a quiet place with instruments and a proper recording interface. It's not just that the tools are better with richer input mechanisms and more screen space for powerful UIs. The act of deciding to be in a "songwriting place" helps get my head into the task. It means I'm focused on one task.</p>

<p>Sometimes I'll even wait until I'm at a laptop to make non-trivial responses to text messages. Trying to type a paragraph or more on a phone keyboard feels like squeezing ideas through a straw, it just feels easier to type on a real keyboard with richer options for copying, pasting, and other text manipulation. Sure, if I'm out of the house and need to message someone, it's great to be able to just send something from my phone, but it's not an interface optimized for longer-form text.</p>

<p>Tablets are an interesting middle ground, but in many ways they still encourage more consumption than focused work. Attaching a keyboard can help. If you're mainly trying to write emails, watch videos, and look at websites it's probably ok, but you're still using a device that is optimized for scrolling and tapping. There are some use cases where a tablet might be superior to a proper computer, such as drawing. If I were doing comics right now an iPad with <a href="https://procreate.com/">Procreate</a> seems like it would be the best tool for the job.</p>

<p>I don't dislike phones (or tablets). They're amazing and useful tools. I just think that the habit many people have of pulling out a phone to accomplish whatever tasks happens to come to mind creates a world where you're always kind of multitasking and rarely sitting down to focus on things. Embrace the inconvenience of using a computer that might not be in your pocket at all times.</p>

<p>Just use a laptop. For most things.</p>
]]>
    </content>
    
  </entry>
  
  <entry>
    <title>Playing With Linux</title>
    <link href="https://dinosaurseateverybody.com/blog/playing-with-linux" rel="alternate" type="text/html" title="Playing With Linux" />
    <id>https://dinosaurseateverybody.com/blog/playing-with-linux</id>
    <published>2025-09-08T00:00:00-05:00</published>
    <updated>2025-09-08T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>This year I've been thinking more about making computers/the internet <a href="../blog/pragmatic-divesting-from-enshitifcation">fun again</a>. Part of this was trying to use more technology without an "agenda". And that has led me into the arms of Linux.</p>

<p>Last year I picked up a <a href="https://frame.work/laptop13">Framework 13</a> laptop so I'd have a Windows machine to play Minecraft on with my kid. It's been useful to have around, but Windows 11 was just glaringly aggressive with how much it wanted me to sign up for various Microsoft services. I probably hadn't used a Windows computer for anything non-trivial since Windows 7 and the change was striking.</p>

<p>I got the urge to try dual booting Linux on my Framework so I installed Ubuntu and used DHH's <a href="https://omakub.org/">Omakub</a> to get it set up quickly. It was kind of fun and I've been using as my primary dev machine for working on <a href="../blog/building-a-programming-language-in-crystal">Lox</a>. Having a project has been helpful for just exploring the system a bit and I found myself switching back and forth between Windows and Ubuntu pretty often on that computer. Omakub really did a good job of making things look nice and providing some good defaults so I didn't spend a ton of time getting things set up and usable. I dug in to using Neovim as my editor and Alacritty as my terminal.</p>

<p><strong>It's nice to have things both configured AND configurable.</strong></p>

<p>When I saw DHH posting about <a href="https://omarchy.org/">Omarchy</a> I was interested. Arch always seemed a little intimidating and I wanted to spend my time using my computer, not fixing/configuring it so having some good defaults and a little hand-holding on the install seemed nice. Due to some disk encryption requirements you're not able to (easily) dual boot Omarchy right now, so I didn't think I could replace my Ubuntu setup but my curiosity got the best of me. I found an old 2012 MacBook Air, bought a USB-Ethernet adapter (so I could run the install without wifi working), and put the ISO on a thumb drive.</p>

<p>The installation was surprisingly easy. I expected to run into some wifi issues but everything worked out of the box. Having played around with the Omakub setup on my Ubuntu install, I felt pretty comfortable with a lot of the default applications like neovim and Alacritty as well as some shortcuts like Super-space for the app launcher so that helped a lot. </p>

<p><a href="https://hypr.land/">Hyprland</a> felt like more of an adjustment. This was my first time really using a tiling window manager. I use Rectangle on my Macs for some basic window resizing and positioning but this was the first time I'd really working in a purely tiled desktop. I tend to have a chaotic pile of windows on my screen most of the time so in some ways using a tiled window manager helped me avoid that because if I kept too many things open, the new windows were uselessly small. If I needed more space I used additional desktops or even just closed windows. </p>

<p>The focus on using built in (and configurable) keyboard shortcuts for launching common programs really helped (Super-Return for a terminal, Super-B for a browser, etc.). It made it feel more natural to quickly open things when I needed them and close them when I was done. I also really like the use of "web app windows", these are basically keyboard shortcuts to open up web apps (like email, Twitter, etc.) in chromeless browser windows via keyboard shortcut. Super-C to open a quick Google Calendar window is really nice and I've created and customized a few new shortcuts for myself.</p>

<p>So what about really hacking around with Arch? Well, I haven't done a bunch of power user stuff yet and honestly I don't plan on spending a lot of time futzing around with things. I still want to spend most of my time using my computer, not fixing/configuring it. I did put in a little time getting the display to rescale nicely when I plugged into a large monitor and closed the laptop to work in clamshell mode. It was fun to see how much control I had over things, if I wanted it. I might also look into some fun widgets that work with Waybar and Hyprland to display some useful into if I have the time and inclination.</p>

<p><strong>It's nice to have things both configured and REALLY configurable.</strong></p>

<p>So, am I going to cast off the oppressive shackles of MacOS and Windows so I can live exclusively in the land of the Free and Open Source? Eh, probably not. There are a few reasons I'll keep using my Mac and have at least a Windows partition somewhere:</p>

<ul>
<li><strong>My M1 MacBook Pro is one of the nicest feeling laptops I've ever used.</strong> It's fast, it feels solid, and everything just works.</li>
<li><strong>Logic</strong> I use Logic for all my music recording. A lot of the people I make music with use Logic. I'm not going to switch.</li>
<li><strong>I use iMessage on a laptop a lot.</strong> I don't like typing long text messages on my phone, so I often switch to my laptop to send non-trivial things.</li>
<li><strong>Occasionally I'll find a game I want to play that's only on Windows (and/or Mac)</strong>. I'm not a big gamer, and gaming on Linux seems to be getting better, but there are certainly some interesting things that come out that just don't work in Linux.</li>
<li><strong>Sometimes I want things to just work.</strong> Maybe that's a fingerprint reader or my Plex server, but I don't have as much time to fiddle with things anymore so there are many situations where I'm going to use the tools that get (and keep) me up and running with the least amount of effort.</li>
</ul>

<p>That said, I do think I'll use this Omarchy set up a fair amount. I replaced the battery in my Omarchy computer and it's turned this 15 year old laptop into a very usable machine. I like that my computing environment doesn't feel like it has an "agenda". It's not trying to sell me on any services, just "here's an OS, try not to get yourself killed." It feels more like a powerful tool than a product, which is nice these days. Also, it's just fun to learn something different. </p>

<p>I'm enjoying using Linux and that kinda matters.</p>

<p><img src="../blog_media/omarchy-air.png" title="I use Arch, by the way." /></p>
]]>
    </content>
    
  </entry>
  
  <entry>
    <title>Another And Or Not Record</title>
    <link href="https://dinosaurseateverybody.com/blog/another-and-or-not-record" rel="alternate" type="text/html" title="Another And Or Not Record" />
    <id>https://dinosaurseateverybody.com/blog/another-and-or-not-record</id>
    <published>2025-08-13T00:00:00-05:00</published>
    <updated>2025-08-13T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>Nobody asked for it, but it got made.</p>

<p><img src="../blog_media/stereoscopic400.png " title="Stereoscopic cover" /></p>

<p>Earlier this month I put out a new EP from my solo project, And Or Not. If you want to skip the self indulgent dive into making this recording and just go listen to it, you can just go <a href="https://andornot.bandcamp.com/album/stereoscopic">check it out</a>.</p>

<iframe style="border: 0; width: 100%; height: 120px;" src="https://bandcamp.com/EmbeddedPlayer/album=3482022036/size=large/bgcol=ffffff/linkcol=0687f5/tracklist=false/artwork=small/transparent=true/" seamless><a href="https://andornot.bandcamp.com/album/stereoscopic">Stereoscopic by And Or Not</a></iframe>

<p><a href="../blog/and-or-not">And Or Not</a> is an exercise in simplistic instrumentation. It's only bass, drums, vocals, and some keys for a little added texture. It's a nice balance to the more complex arrangements of things like <a href="https://open.spotify.com/artist/4hb8s9fy6ws3H94zyZfgY7?si=3wyoxPn5R5yBGYi80yHFoQ">Grave Danger</a>. Like last time I started by just writing a bunch of bass riffs, recording them into one big project, and then coming back later to pick out ones I liked to build songs around.</p>

<p>Once I'd massaged those riffs into basic song structures I started putting some lyrics together. I've given myself a lot of leeway to write about whatever pops into my mind so I ended up writing about <a href="../blog/pragmatic-divesting-from-enshitifcation">my disappointment around the current state of the internet</a> (Let's Get Weird Again), Minecraft (Bedrock), and coffee (Top Me Off).</p>

<p>For the recording process, I took the demos I made for writing, mapped it to a click and started by laying down the drums. I think I'm a better drummer than I was when I did the first record but it still took a while to get everything down since I was sort of writing parts while I was trying to record them. I think I've gotten a little better at recording drums, too.</p>

<p>The bass parts were pretty straightforward to lay down, but I spent a little more time layering my tone. After seeing '68 live I got inspired to lean into a noisier, fuzzier sound and not be afraid to build up a more complex tone. I'm using bass amp models from Logic for my tone so I ended up taking the raw tracks and running them through three different amp setups (resulting in 3 tracks for all the bass parts). One track had a really fuzzy tone, one beefed up the low end, and a third focused on brightening the attack. Mixed together I got a really full sound, which was pretty important when there isn't much else in terms of instrumentation.</p>

<p>I did add some keys, mainly B3 organ, to thicken things up and add a bit of counter melody in a few parts, but it was pretty minimal. Mainly just to add some more texture to the songs.</p>

<p>Finally, vocals.</p>

<p>I'm still not very confident about my vocals, but doing a solo project means that it can just be whatever I put down so I've been digging into it. I had a lot of fun layering and doing harmonies on these songs. I also tried to put in a few more "character" elements ("wooo"s, "let's go!"s, etc.) to help combat the very "studio only" nature of these recordings (since I'm the band, these songs have never been played live). Doing vocals for this project has very much been an exercise in just laying stuff down and putting it out there with as much confidence as I can.</p>

<p>Even though this is my solo project I always love getting my kids in on songs so I had Elliot come in and record some extra vocals on Bedrock. We've been playing a lot of Minecraft lately and it seemed appropriate to get him in that song somewhere.</p>

<p>My favorite little easter egg on this record came from Max. If you listen really carefully at the end of the last song (Top Me Off), you can hear him say "Ok, can we play cars now?". I had been recording drums when he came down and wanted to play. He let me do one more take, waited very patiently, and after the last hit excitedly asked if we could play now. I thought it was a great little incidental moment so I left it in, isolated it, and turned it up.</p>

<p>The cover art was, somewhat begrudgingly, done with ChatGPT. I knew kind of how I wanted it to look and managed to get a full cover together in only a few minutes. Part of me wishes I had made it from scratch, just out of principle, but I got something I'm happy with and that's what matters.</p>

<p>Overall, I'm really proud of this EP. It took WAY longer than it should have to complete because I could only work on it in fits and bursts when I had free time (and could be loud at home). It feels like good progress for the <a href="https://andornot.bandcamp.com/album/the-infernal-machine">previous record</a> and, honestly, I just love putting out music.</p>

<p><a href="https://andornot.bandcamp.com/album/stereoscopic">Enjoy!</a></p>
]]>
    </content>
    
  </entry>
  
  <entry>
    <title>Building A Programming Language In Crystal</title>
    <link href="https://dinosaurseateverybody.com/blog/building-a-programming-language-in-crystal" rel="alternate" type="text/html" title="Building A Programming Language In Crystal" />
    <id>https://dinosaurseateverybody.com/blog/building-a-programming-language-in-crystal</id>
    <published>2025-07-30T00:00:00-05:00</published>
    <updated>2025-07-30T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>After doing a rotation on GitHub's "Ruby Architecture" team a few years ago and learning more about how programming languages really work (and getting a <a href="https://github.com/ruby/ruby/pull/6078">few</a> <a href="https://github.com/ruby/ruby/pull/6079">commits</a> into the Ruby language myself) I've been trying to learn more about building languages. For the last year or so I've been very slowly working my way through the first half of <a href="https://craftinginterpreters.com/">Crafting Interpreters</a> by Robert Nystrom, which has been a fantastic book on the topic. It starts by walking you step by step through the implementation of a language designed for the book called Lox. The book builds the language in Java, but I chose to implement it in <a href="https://crystal-lang.org/">Crystal</a>.</p>

<p>Why Crystal? I like it. It's syntax looks very Ruby-like but it has static (and sometimes explicit) typing. It's reasonably fast when compiled. Plus, by implementing all the examples in a different language it forced me to understand what I was doing enough to translate from Java to Crystal. I'm not the first person to implement a Lox interpreter in Crystal, but it is a less common project.</p>

<p>For a "toy" language built as a learning tool, Lox implements some nontrivial things. A simple "Hello world" looks as expected:</p>

<pre><code>print "Hello world!";
</code></pre>

<p>It has loops! While loops and for loops (which are turned into while loops by the interpreter):</p>

<pre><code>var k = 30;
while(k < 40) {
  print k;
  k = k + 1;
}

for(var j = 30; j < 40; j = j + 1) {
    print j;
}
</code></pre>

<p>And it has objects and inheritance!</p>

<pre><code>class Animal {
  init(name) {
    this.name = name;
  }
}

class Cat < Animal {
  meow() {
    print "meow";
  }
}

var kitten = Cat("Mochi");
kitten.meow();
</code></pre>

<p>While this all feels like pretty standard stuff for any programming language you might use, it was really cool to build everything up from scratch. The parser was written from scratch in less than 500 lines of code, no using any big libraries like Bison or Yacc. The scanner handles a little over 40 tokens in less than 200 lines of code. It has a resolver to handle some scope ambiguities and static analysis. This is just been a really cool project. </p>

<p>In addition to all the cool programming language stuff I learned working on this I also used this project as an excuse to develop in Neovim on the Ubuntu laptop I set up a while ago (using DHH's <a href="https://omakub.org/">Omakub</a>).</p>

<p>Despite the code being a little messy in parts (sometimes I got impatient trying to handle Nils in Crystal) and containing some bugs, I'm sure, it's still really cool have this project in a "done" state. I might come back later and clean up the code or add some features (this implementation of Lox lacks a way to take user input...) but for now I'm going to move on to the next section of the book where I'll build Lox again, this time as a more optimized, compiled language implemented in C (I probably haven't touched C since college...).</p>

<p>If you're interested, check out my implementation of <a href="https://github.com/dorkrawk/crlox">crlox</a>.</p>
]]>
    </content>
    
  </entry>
  
  <entry>
    <title>Making Pizza</title>
    <link href="https://dinosaurseateverybody.com/blog/making-pizza" rel="alternate" type="text/html" title="Making Pizza" />
    <id>https://dinosaurseateverybody.com/blog/making-pizza</id>
    <published>2025-04-17T00:00:00-05:00</published>
    <updated>2025-04-17T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>I like making pizza.</p>

<p>When I first started it was pretty arduous. I actually had to grind the wheat to make flour for the dough. Making the cheese took forever. Toppings were a luxury unless I could find someone else who was making them and even then they could be really expensive.</p>

<p>As time went on, things got easier, though. I was able to buy bags of nice flour. Cheese was easy to get and a wide range of toppings became available. If I was really in a hurry, I could even find pre-made sauces that were pretty good. </p>

<p>More and more people got into making pizza so there were lots of new recipes out there to try, which was fun too.</p>

<p>Eventually I started seeing pre-made dough and even full kits with dough sauce and toppings ready to assemble and bake, which was pretty nice when I was in a hurry and just wanted something basic.</p>

<p>Then pizza delivery services popped up. I could just order whatever kind of pizza I wanted and it would show up at my door, faster than I could make one myself! Some of them were pretty good and it's a really easy way to get dinner when you're too busy to cook.</p>

<p>So now I have pizza whenever I want, which is pretty cool. I probably eat pizza more often now than I ever have.</p>

<p>I guess I don't really make pizza anymore, though.</p>

<p>🍕</p>
]]>
    </content>
    
  </entry>
  
  <entry>
    <title>Pragmatic Divesting From Enshitifcation</title>
    <link href="https://dinosaurseateverybody.com/blog/pragmatic-divesting-from-enshitifcation" rel="alternate" type="text/html" title="Pragmatic Divesting From Enshitifcation" />
    <id>https://dinosaurseateverybody.com/blog/pragmatic-divesting-from-enshitifcation</id>
    <published>2025-03-19T00:00:00-05:00</published>
    <updated>2025-03-19T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>There's been a lot of people noticing that <a href="https://pluralistic.net/2023/01/21/potemkin-ai/#hey-guys">the internet isn't as fun as it used to be</a>. Not that it was perfect in the past, but there's a sense that what was once weird and quirky and full of potential (while still having a number of rough edges) is now mean and manipulative and controlled by a small number of large companies.</p>

<p>For many of the more tech savvy people who are feeling this, there's a lot of push to leave all of these unpleasant places behind and live entirely in alternative spaces. This might mean getting Google out of your life, leaving <span title="I just can't call it 'X', that's just such a dumb name...">Twitter</span> or Facebook or whatever major platform. But that's hard if you want to interact with people who don't think about tech all the time. It's the digital equivalent of homesteading.</p>

<p>I've been trying to be more conscious about trying to make my online life more pleasant in pragmatic ways. Ways that make me happier without feeling isolated from my less tech focused friends. More "growing some of my own food at home" and less "moving into a cabin in the woods".</p>

<p><strong>Actual Social Networks</strong>
I've never found Twitter or Instagram to be particularly toxic places and I think that's because I've used them in an odd way. I only really follow people I know personally and I try my best to avoid algorithmically suggested posts. I will sometimes manually visit the profiles of interesting accounts, but the extra friction prevents me from passively consuming everything they post in perpetuity. This means my feeds on these sites are mainly friends and old coworkers who I actually like. I'm sure I'm missing a lot of funny videos and maybe some interesting content, but I think I'm happier this way.</p>

<p><strong>Tending My Own Garden</strong>
That said, I've been less inclined to engage on other people's platforms lately. The internet was weirder and more fun when it wasn't just people posting to handful of huge sites. I've been writing more on <a href="https://dontbreakprod.com/">Don't Break Prod</a> and doing more little <a href="../now">updates</a> to this site, with the plan to share more things here. Again I haven't deactivated my accounts on any major sites, I'm just not really interested in building my castle in other people's kingdoms (even if that costs me priceless things like "engagement").</p>

<p><strong>Let's Get Weird Again</strong>
Finally, I'm looking around more for weird fun things on the internet. People just building stuff because they wanted to see it exist. While a lot of the internet feels mean or angry or hustle focused or just un-fun in a lot of ways, there are still lots of people who just want to make cool stuff and share it. It's out there if you just poke around a little bit. I'm hoping the stuff I put out there contributes just a little to making the internet a bit weirder.</p>

<p>I don't think it's just rose colored glasses that make me think that the internet was more fun in the past. While many things have gotten better, something valuable has been lost. You can't go back, but you can focus on the things that make you happy and minimize the things that don't. It's not as bold a statement as dramatically quitting Facebook only talking to your friends who use <a href="https://signal.org/">Signal</a>, but the internet can still be fun if you just don't wallow in the worst parts of it.</p>
]]>
    </content>
    
  </entry>
  
  <entry>
    <title>Don&#39;t Break Prod</title>
    <link href="https://dinosaurseateverybody.com/blog/dont-break-prod" rel="alternate" type="text/html" title="Don&#39;t Break Prod" />
    <id>https://dinosaurseateverybody.com/blog/dont-break-prod</id>
    <published>2025-03-03T00:00:00-06:00</published>
    <updated>2025-03-03T00:00:00-06:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>This all started with my irrational desire to build yet another blogging engine. The world doesn't have enough of those right?</p>

<p>I'll go into more detail about the software I built in a future post, but long story short I built a little blogging tool called <a href="https://github.com/dorkrawk/postwave">Postwave</a> and I needed a site to put it through its paces. I needed something that I could make frequent posts to and see what it was like to really use what I had built. So I created <a href="https://dontbreakprod.com/">Don't Break Prod</a>, a collection of bite sized pieces of career advice for software engineers.</p>

<p>I've been thinking about mentorship and ways to have a good life as a software engineer for a long time. I have a bunch of notes and a decent outline for a book of engineering mentorship that I started and lost steam on a few years ago as well as insights gained from being both a mentor and mentee. Eileen and I have had great conversations about career stuff that I often walk away from with good insights. So I started writing down a list of ideas about how to make your life better as a software engineer. These range from simple technical ideas like, <a href="https://dontbreakprod.com/posts/embrace-linters">embracing linters</a> to broader ideas about <a href="https://dontbreakprod.com/posts/dont-burn-out">avoiding burnout</a>.</p>

<p>The idea behind Don't Break Prod is to do short form posts, something longer than a tweet but shorter than a full blog post. The title should give you the basic advice, the content should provide some food for thought around it. This has also lowered the activation energy for me to write new posts regularly, which helps a lot. I've deliberately avoided having a comment section because while I want people to read these and engage with them, I really didn't feel like managing a community.</p>

<p>I'm not really sure what my big picture goals are for <a href="https://dontbreakprod.com/">Don't Break Prod</a>. It's doing a good job as a testing ground for Postwave and in a time where it feels like most content just exists on a few social networks it feels good to be writing directly on a site run myself. As for the content of the site, I think that having a career tha makes you happy and fits into your life the way you want is important. Thinking about these posts has helped me articulate ideas that are useful for me and I hope other people find them valuable.</p>

<p>While I've been sporadically posting to the site for a few years now, I've recently been getting a little more serious about making regular posts and trying to share them more broadly. I'd love to reach as many people as possible, as long as I can keep writing posts and promoting them in my own weird way.</p>
]]>
    </content>
    
  </entry>
  
  <entry>
    <title>Homeboard</title>
    <link href="https://dinosaurseateverybody.com/blog/homeboard" rel="alternate" type="text/html" title="Homeboard" />
    <id>https://dinosaurseateverybody.com/blog/homeboard</id>
    <published>2024-09-11T00:00:00-05:00</published>
    <updated>2024-09-11T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>I always forget to move my car on street cleaning day.</p>

<p>On the 1st Wednesday of the month I was always scrambling to move my street-parked car in the hopes of avoiding a ticket. Often too late. So I wanted something I looked at every day to remind me of things like this, just a little dashboard in my kitchen to let me know what was going on during the day.</p>

<p>While this isn't a particularly novel idea and I'm sure there are a few out of the box products that will do this, I just though it would be fun to build something custom for what I wanted. It ended up being a small Sinatra app and I decided to play around with <a href="https://htmx.org/">htmx</a> for most of the dynamic frontend stuff. The basic features I wanted were:</p>

<ul>
<li>a big clock (date and time)</li>
<li>local weather</li>
<li>a QR code to log on to our local wifi network</li>
<li>events for today and tomorrow:

<ul>
<li>city events (street cleaning, garbage day, snow plowing, etc.)</li>
<li>birthdays (I don't look at Facebook enough anymore for it to be a reliable reminder)</li>
<li>our shared Google calendar</li>
</ul></li>
</ul>

<p>This is what it ended up looking like:</p>

<p><img src="../blog_media/homeboard2.jpg" /></p>

<p>Some of these were pretty simple. The clock is just some plain old Javascript running client side. Birthdays come from a big hardcoded Hash that just looks up date. The city events came from some hardcoded logic based on the date, things like:</p>

<pre><code class="ruby"># first Wednesday of the month
applicable = STREET_CLEANING_MONTH_RANGE.include?(timestamp.month) 
&& (timestamp.wednesday? || timestamp.tuesday?) && timestamp.mday <= 7
</code></pre>

<p>The QR code just seemed like a neat little feature. You can create QR codes that when scanned will allow you to join a local wifi network without manually entering the password. I just generated my code from something like <a href="https://www.qr-code-generator.com/solutions/wifi-qr-code/">this site</a>.</p>

<p>For local weather I ended up making use of the <a href="https://openweathermap.org/api">OpenWeather API</a>. It refreshes infrequently enough that I can use it for free.</p>

<p>The Google Calendar integration gave me the most trouble. For some reason it was WAY more of a pain in the ass to authenticate with Google and use the provided library to pull a list of calendar events than I figured it would be. It involved a lot of creating and refreshing access tokens and is still a little janky (but it work!).</p>

<p>While I started doing the dynamic front end stuff with vanilla Javascript I ended up rewriting almost everything in Htmx, mainly because it seemed interesting and I wanted to play around with it. For the VERY simple stuff I was doing (mainly periodically refreshing parts of the dashboard to get updated content) it was very clean.</p>

<p>For example, I want my weather to reload every hour so on the main dashboard page (the page that stays up all the time) there's a div that looks like this:</p>

<pre><code class="html"><div class="content_box weather_box" hx-get="../api/weather_htmx" 
  hx-trigger="load, every 3600s">
</div>
</code></pre>

<p>It just pulls the contents of <code>/api/weather_htmx</code> (which is just some html, rendered with the updated weather info from an API call to OpenWeather) and puts it inside that div. Magic!</p>

<p>I bought a cheap refurbished tablet to use as a display and it's been a great addition to our kitchen!</p>

<p><img src="../blog_media/homeboard1.jpg" /></p>
]]>
    </content>
    
  </entry>
  
  <entry>
    <title>Now</title>
    <link href="https://dinosaurseateverybody.com/blog/now" rel="alternate" type="text/html" title="Now" />
    <id>https://dinosaurseateverybody.com/blog/now</id>
    <published>2024-08-21T00:00:00-05:00</published>
    <updated>2024-08-21T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>So I added a <a href="https://dinosaurseateverybody.com/now">Now</a> page to this site.</p>

<p>The purpose of a now page to write up what you're doing right now. Basically what you'd tell someone if you were catching up and they asked "So what have you been up to lately?". The idea has been attributed to <a href="https://sive.rs/now">Derek Sivers</a> (who apparently is the guy who created CD Baby!).</p>

<p>Why did I add one? Do people really care what I'm up to now? I don't know. But I've been growing a bit disenchanted with the state of the internet lately. It feels like a lot of people trying to squeeze posts in between ads on a handful of social networks. I miss when the internet was more distributed and a bit more personal and weird. This felt like a little push in that direction.</p>

<p>For more about now pages check out <a href="https://nownownow.com/about" title="now! now! now!">nownownow.com</a></p>
]]>
    </content>
    
  </entry>
  
  <entry>
    <title>And Or Not</title>
    <link href="https://dinosaurseateverybody.com/blog/and-or-not" rel="alternate" type="text/html" title="And Or Not" />
    <id>https://dinosaurseateverybody.com/blog/and-or-not</id>
    <published>2023-12-06T00:00:00-06:00</published>
    <updated>2023-12-06T00:00:00-06:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>tldr: I wrote and recorded a noisy, bass driven solo record. You should <a href="https://andornot.bandcamp.com/album/the-infernal-machine">check it out</a>!</p>

<iframe style="border: 0; width: 400px; height: 241px;" src="https://bandcamp.com/EmbeddedPlayer/album=165933545/size=large/bgcol=ffffff/linkcol=0687f5/artwork=small/transparent=true/" seamless><a href="https://andornot.bandcamp.com/album/the-infernal-machine">The Infernal Machine by And Or Not</a></iframe>

<p>Earlier this year I was listening to a lot of Death From Above 1979 and just got the urge to write some fast, high energy song with just bass, keys, drums and vocals. Sort of a cursed jazz trio. I was also looking to push my drumming, which has been a focus this year.</p>

<p>I started just writing and recording a bunch of bass riffs when I had random nights free and then I'd come back later, narrowing down which riffs I liked the best. Because I was just writing on bass I felt like I ended up writing riffs differently than I would if I were writing on guitar. I felt more free to wander out of keys and write more chromatically, since I wouldn't have to fit things in a larger chord structure. It was really a fun way to write.</p>

<p>From there I started piecing together some basic song structure and trying to figure out what to write lyrics about. I tired to let the topics of these songs be a bit more "whatever popped into my head", worrying less about having central, cohesive ideas. I ended up writing about social media (Black Box), people reminding me to eat well (Eat This, You'll Live Forever), and our cat, who likes to hunt our children (Natural Predator).</p>

<p>Once I had the song structures down I recorded bass (DIed into Logic with a fuzzy amp model) and then started really working on writing/recording drums. This project ended up being a good excuse to dive a little deeper into recording drums at home. I picked up a kick drum mic off of Craigslist, gathered a bunch of 57s to mike the snare and both toms, and used one of my condenser mics as an overhead. It had fun playing around with getting a decent sound and learned a bit about recording drums. My basement is not the best space to record, but I made due. </p>

<p>The drums took me a long time to record. Part of this was nailing down exactly what the drum part should be and part of this was playing it right. I'm really glad I did all the tracks to a grid. It helped to be able to follow a click and punch in where I needed to.</p>

<p>After the drums were finished I worked on vocals. I was probably most nervous about this part since vocals have never really been a strength of mine. I tried to just let go, project, be loud where it made sense, be a little screamy where it worked, and just commit. I also leaned into using a bit of fuzz on the vocals, which fit nicely with the aesthetic of these songs. All in all it turned out well. It's certainly not the greatest vocal performance, but there isn't much that feels bad or like the vocals detract too much from the songs.</p>

<p>While recording "Eat This, You'll Live Forever" I had the kids come in and sing "Eat this!" and used their takes to build gang vocals in the outro. I'm really glad I got them involved and they seemed to really like hearing their vocals as I was mixing things.</p>

<p>I finished up by adding some keys. Mainly synth or organ parts doing some countermelody or beefing up some parts. After that, a bit of mixing. I ended up doubling all the bass parts, one track with some fuzz/overdrive and another with a lower, cleaner sound to beef things up. </p>

<p>In the end I came out with something that I was really proud of. This is the first time I've done a true solo record where I've played every instrument and done all the vocals (apart from some gang vocals by my kinds). I didn't really know what to do with it so I just put it up on <a href="https://andornot.bandcamp.com/album/the-infernal-machine">Bandcamp</a> and sent the link around. I'd love for more people to listen to it, but honestly, I'm just happy I made it. And Or Not is a fun format, bass driven, high energy, so maybe I'll do some more of these songs soon!</p>
]]>
    </content>
    
    <category term="music" />
    
  </entry>
  
  <entry>
    <title>Trackstar</title>
    <link href="https://dinosaurseateverybody.com/blog/trackstar" rel="alternate" type="text/html" title="Trackstar" />
    <id>https://dinosaurseateverybody.com/blog/trackstar</id>
    <published>2020-07-11T00:00:00-05:00</published>
    <updated>2020-07-11T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>Many good projects come from scratching your own itch. I like to track thing.</p>

<p>Over the past few years I've had on and off bursts of focus on practicing. Practicing guitar, drawing, chess, things like that. And I always find value in quantifying how often I'm practicing. I like to know how many hours per month, week, year, etc. I've spent on that skill. I feel like, as long as I'm practicing the right things, I can feel good about the progress if I can see a history of it. Plus wanting to see the numbers can help make sure I stick with things.</p>

<p>In the past I was just writing simple Markdown docs and then ran a small Sinatra app that pulled metadata out of that directory and gave me some historical stats. I called that system <a href="http://dinosaurseateverybody.com/blog/one-year-of-input-coffee">Input Coffee</a>.</p>

<p>I figured I could automate things a bit more and build something a bit more reusable, so I decided to build a small command line based tracking app, <strong>Trackstar</strong>.  I recognize that this type of interface only appeals to a very select group of people, but that group includes me, so I built it.</p>

<p>It's a pretty simple idea. You use the <code>trackstar -n</code> program to create a log directory, then (when you're in that directory) just use the <code>trackstar</code> command to make a new entry. It will prompt you for a few things; title, time, and some notes, then turn it into a Markdown file.  You can get some basic stats by running <code>trackstar -s</code> (again, in the log directory).</p>

<p>It's pretty bare bones right now and I'd like to iterate a bit on the interface (I do thing command line apps can have nice interfaces). I'd also like to do a lot more around the stats, maybe even pull in the Sinatra app/web based visualizations of the data to get a better history, we'll see. For now it's kind of fun to keep it as a purely terminal interface.</p>

<p>The whole thing is just built in Ruby and could probably stand to be optimized a bit, but it was fun to build a gem that was a pure executable thing, rather than a library. You can check out the code and full instructions for how to use it on the <a href="https://github.com/dorkrawk/trackstar">GitHub repo</a>.</p>

<p>I'm currently dog fooding it by tracking my guitar practice. So far it's working pretty well and I'm making tweaks as needed. If this scratches a specific itch you have, try it!</p>

<p><img src="../blog_media/trackstar1.png"></p>
]]>
    </content>
    
    <category term="ruby" />
    
    <category term="programming" />
    
  </entry>
  
  <entry>
    <title>Recording Let &#39;er RIP!</title>
    <link href="https://dinosaurseateverybody.com/blog/recording-let-er-rip" rel="alternate" type="text/html" title="Recording Let &#39;er RIP!" />
    <id>https://dinosaurseateverybody.com/blog/recording-let-er-rip</id>
    <published>2019-01-30T00:00:00-06:00</published>
    <updated>2019-01-30T00:00:00-06:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p><strong>At the end of October I put out a 3 song record, Let 'er RIP!, with my skath band, <a href="https://www.facebook.com/gravedangerskath">Grave Danger</a>.</strong></p>

<p><img src="../blog_media/let_er_rip_cover-500.jpg" /></p>

<p>(It's available on <a href="https://open.spotify.com/album/5y1wpLaegWoOk2vJHVXAQS">Spotify</a>, <a href="https://itunes.apple.com/us/album/let-er-rip-single/1440193477?app=apple%20music">Apple Music</a>, <a href="https://gravedangerskath.bandcamp.com">Bandcamp</a>, <a href="https://soundcloud.com/gravedangerskath/sets/let-er-rip/s-4XXAz">Soundcloud</a> and lots of other places!)</p>

<p>I wrote about some of the songwriting in <a href="http://dinosaurseateverybody.com/blog/starting-a-skath-band">this post</a> but the recording process for this record was very different from anything else I've ever worked on. Since I was playing a lot of the instruments and we were never going to have everybody in the band all together at once it would be a really piecemeal process.</p>

<p><strong>The Rhythm Section</strong></p>

<p>First Dane did some rough recordings of his drum parts using the demos I had created. This let me do my recording over a live drummer rather than programmed drums from Logic Pro. This really helped me get a better feel for the songs and made things feel much more organic. While I was recording over new drum parts I built the "working" versions of the songs from copies of the demos, that way I could just swap out the demo parts for final parts rather than having to build the song again from scratch. It was pretty cool to hear the songs evolve just by swapping in better recordings one instrument at a time.</p>

<p>My first work was laying down guitars. I actually ended up using the same amp model I used in the demos for the clean track but did all of the heavy guitar parts through my Dual Rectifier miced with a SM-57. I ended up double tracking almost all of the rhythm guitar parts (both clean and heavy) and I was really happy with the thickness that gave me. Most of the miced recording was done in my bedroom (which is carpeted) with the amp facing a closet full of clothes. The tracks for Too Ghoul For School were done in the garage (mainly to make it easier to record while Elliot napped) and they ended up having a harsher sound.</p>

<p><img src="../blog_media/guitar_recording.jpg" /></p>

<p>The bass work was pretty straightforward. I bough a DI box and recorded all my bass parts through that. I did take my bass (and old Washburn) to get tuned up before I did any of the recording and it really made a big difference. The keyboard work was also pretty cut and dry. I actually used some of the demo keyboard work for the final version (the first arpeggiated organ chord in Grave Danger, for example!).</p>

<p><strong>The Horns</strong></p>

<p>The horns were a little tricker. The horns in the demos were all done via keyboard and I needed to share the parts with the other horn players. For this I sat down with <a href="https://musescore.org/en">MuseScore</a> (in awesome piece of free open source software fore creating sheet music) and transcribed all four horn parts. It was really cool to see the sheet music for my arrangements and I think it really helped Margret and Andy lay down the trombone and trumpet parts. </p>

<p>I was doing the tenor and bari sax parts, but I only owned a tenor (which I had bough earlier this year, specifically for this project) so I needed to track down a bari. This was actually harder than I expected. At one point I emailed a local high school band teacher to see if the school could loan me one. Ultimately I had to rent one from a music shop about an hour away. I only had it for a week and that was still pretty expensive.</p>

<p>I recorded the tenor and bari parts and then sent Margret and Andy a mix of the songs with only the rhthym section and my sax parts so that they could record their parts on top of that. Dane set up some mics in his basement and over a few weekends they got all three songs done. I think this was a very new experience for them and it was awesome to hear all four horn parts together on real instruments.</p>

<p><img src="../blog_media/bari_sax_recording.jpg" /></p>

<p><strong>The Drums (for real this time)</strong></p>

<p>After recording the horns, it was time to do the REAL drum parts. After considering a few options we ended up going to Justin at <a href="http://waysound.com/">Waysound Studios</a> for the drum tracking. I've worked with Justin on a lot of projects when I was in bands back in Chicago and he's always fantastic. There's actually a live recording of Dane tracking these songs, if you want to watch about <a href="https://www.facebook.com/waysoundrecording/videos/742118122792285/?hc_ref=ARTD5lMg7XDeavGHpR0jlWvzyGozJbSvIV5uImjKlz0ioUgewmWf0NyAJxEx02Yp_qA&__xts__%5B0%5D=68.ARBv2iwLhfRe1ChJ5oM-7XapGmtz0cpln6XciNQO-3m20WmDkx5O1kc0bv7VCato2idHb5SshOMOPRuE2B5cfLYRCfnIdxS9_DLBjknHr1bNr-GVsV2n1Qc05tnrk8tSwGNBHRlMSEYU7ZWMExtFeGcwXRbANNg1nXcs-e6if9tPghtrnyxTDFKcfzf0sPKC-YGVfwtQ6HrqvjH8OVBaaodng_kn9K9NxZDx-2SH7E2bpzFUotmySTB0cLL14HXnPUqXW8pAUawYn1px7cY_2yOtd8ISG_uqlXZ5xXkKhAu1pTOafUDajeYgwdq8wKxnUg3zD_P6CejU5aGfCaBZPA&__tn__=FC-R">4 hours of drum recording</a>!</p>

<p>The drums turned out fantastic and added so much depth to the songs. Now it was time to do vocals.</p>

<p><strong>Vocals (and everything else)</strong></p>

<p>Vocals were strange. I had an idea of how they should sort of sound in my head and I did the vocals on the demo, but I knew that Alan was the right person to sing for this record. The problem was that he was in Minnesota and  I was in California and we were only communicating through email. He did some rough demos of the vocals and I sent some notes back and then he recorded the final versions. The vocals were by far the weirdest thing to do remotely.</p>

<p>I also wanted Josh and Chris to add harmonies so I just sent them a mix with Al's vocals and let them just record a bunch of takes and send me whatever they had. I wanted to add a few background vocals parts, too so I set up a mic in the garage and layed down some of my own parts.  I ultimately just picked a bunch of stuff that sounded good and pieced it all together.</p>

<p>While I was blindly working with the vocalists, Dane and Emily were recording Emily's synth and organ parts. I didn't have these in mind when I was arranging the songs, but there are some synth parts that now seem like they obviously needed to be part of this music. They ended up being great additions.</p>

<p>Finally, I wanted to get my family involved. First I had Eileen do some high harmonies and "oooo"s in Too Ghoul For School (which was ripe for vocal layering), then as I was mixing I heard Elliot repeating the work "ghoul" during the chorus, so I recording him and added his vocals into a few sections of Too Ghoul. It was really fun to be able to give him his first record credit before his second birthday.</p>

<p><strong>Putting It All Together</strong></p>

<p>Now I was sitting in front of three enormous Logic Pro projects with up to 60 tracks a piece. I was not remotely qualified to mix what would probably be a 9 or 10 piece band so again we turned to Justin at Waysound. After fooling around with some clever exporting techniques, I ended up just removing any EQ and effects from all the tracks and exporting them all to WAV files and then sending those over to him so he could work his magic.</p>

<p>The whole recording, mixing, and mastering process took almost a year (with my "solo" recording using up the bulk of that time) but we had a finished product before our self imposed deadline of Halloween.</p>

<p>Recording the record in this way had its advantages. I liked being able to work at my own pace and on my own schedule (which was really important with a kid). The process of migrating the demo into a final version piece by piece made it easier to work on my own, since I never had to bootstrap the songs from scratch.</p>

<p>It was really hard to work in isolation though. I'm used to being in the studio with other people who can provide feedback and keep me from getting in my own head about guitar tone. I missed the comradery of hanging out in the studio with friends. I augmented this by texting Dane a lot during the process. Technically, if I did this again, I'd be more diligent about making sure EVERYTHING lined up with a click track from day one. When pulling in parts from many different sources, having one source of truth for timing is really important.</p>

<p>I can't overstate how much fun I had making these three goofy songs with a bunch of friends. Even though they're ridiculous in subject, they really mean a lot to me and I loved the process working on them. I already have the seeds for several more Grave Danger songs and I'm excited to work on new material!</p>

<p>If you haven't heard the record yet, please take a listen:</p>

<iframe style="border: 0; width: 100%; height: 120px;" src="https://bandcamp.com/EmbeddedPlayer/album=3029029663/size=large/bgcol=ffffff/linkcol=0687f5/tracklist=false/artwork=small/transparent=true/" seamless><a href="http://gravedangerskath.bandcamp.com/album/let-er-rip">Let 'er RIP! by Grave Danger</a></iframe>
]]>
    </content>
    
    <category term="music" />
    
    <category term="songwriting" />
    
  </entry>
  
  <entry>
    <title>Starting A Skath Band</title>
    <link href="https://dinosaurseateverybody.com/blog/starting-a-skath-band" rel="alternate" type="text/html" title="Starting A Skath Band" />
    <id>https://dinosaurseateverybody.com/blog/starting-a-skath-band</id>
    <published>2017-11-06T00:00:00-06:00</published>
    <updated>2017-11-06T00:00:00-06:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>Last May I got a txt out of the blue from Dane, a good buddy, great drummer, and former bandmate:</p>

<p><strong><em>"Ok dude. Let's do it: Let's write a couple of skath songs."</em></strong></p>

<p>Dane and I used to play in a ska band called <a href="https://soundcloud.com/dorkrawk/sets/captain-supreme">Captain Supreme</a> back in college. After Captain Supreme broke up we joked around about forming a new ska band, dressing up like skeletons, and writing songs about graveyards and monsters and ghosts and stuff. It would be <strong>skath</strong>!</p>

<p>It was a fun idea, but I assumed it would be like all of the other hilarious band ideas I'd had with friends: fun to talk about but we'd never write anything. Well, for whatever reason this was different. I got really excited and we started trading song name ideas: "Grave Danger", "Escape From Skull City", "Hearse Chorus Hearse Chorus", "Spider!? I Barely Know 'er!". In a fit of inspiration I wrote the lyrics to "Grave Danger" on the spot and we started talking about who else we could get involved. That weekend I started writing some music and it seemed like a project that we could really get off the ground.</p>

<p>Eventually I realized that if we wanted to have some actual songs to record, I'd have to get serious about writing. Inspired by Dane's participation in <a href="https://5amwritersclub.wordpress.com/">#5amwritersclub</a> I decided that I could get up a little early every morning and actually get some creative work done. While I'm not crazy enough to wake up at 5am, I did get up before 7:00 and found 30 minutes to an hour almost every day to make progress on these songs.</p>

<p>It felt really good.</p>

<p>I felt like a musician again and I felt like a songwriter again. Most of the songwriting I had done since leaving The American Autumn was done in single sessions. If I could get a full song out in a night, it didn't get done. This was different. I struggled through false starts that just wouldn't come together. I had to figure out how to connect parts that were cool on their own but needed to sound cohesive. I had to arrange a four part horn section without overwriting things. It felt good to put in the work on a creative project.</p>

<p>About six months later I now have three songs demoed: Grave Danger, Escape From Skull City, and Too Ghoul For School. I recorded all the music and vocals myself, using a keyboard for horns and Logic Pro's drums. Now I'm ready to do real recordings of this. I'll still play a lot of the instruments, Dane will be doing the drums, and we'll be getting other people involved to do vocals and other horn parts.</p>

<p>Six months may seem like a long time to write about 10 minutes of music, but I'm really proud that I was able to get these songs written and demoed while having a new baby and a busy job. What are we going to do with this recording? I'm not sure. I don't know if the world is clambering for ska songs about ghosts, so I might not quit my day job but that's ok. I really just want to see these songs exist.</p>

<p>Here's a few snippets of the demos:</p>

<iframe width="100%" height="166" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/352252940&color=ff5500&auto_play=false&hide_related=false&show_artwork=true"></iframe>
]]>
    </content>
    
    <category term="music" />
    
    <category term="songwriting" />
    
  </entry>
  
  <entry>
    <title>Making Moola</title>
    <link href="https://dinosaurseateverybody.com/blog/making-moola" rel="alternate" type="text/html" title="Making Moola" />
    <id>https://dinosaurseateverybody.com/blog/making-moola</id>
    <published>2017-07-11T00:00:00-05:00</published>
    <updated>2017-07-11T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>If one listens to enough Ruby related blogs and talks and podcasts they are likely to run in to <a href="https://crystal-lang.org/">Crystal</a>. Have you every thought, "I like Ruby, but I wish is were fast and compiled on LLVM"? Well, that's Crystal. It's a <strong>fast language with Ruby inspired syntax</strong>. If the performance benchmarks shown on the Crystal site are even remotely accurate, it's worth checking out.</p>

<p>I enjoy writing Ruby and I like things that are fast, so I've been trying it out. While it is still pre-1.0 it's been pretty nice to work with. And since it's a new language, there's an opportunity to write new libraries (known as "<a href="http://crystalshards.xyz/">Shards</a>" in Crystal).</p>

<p>My first Crystal Shard has been a money handling library, inspired by <a href="https://github.com/RubyMoney/money">Ruby Money</a>, that I call <a href="https://github.com/dorkrawk/moola">Moola</a>. It gives uses the ability to define Money objects and do basic operations and conversions with them.  Here are a few examples:</p>

<pre><code class="ruby">money = Moola.new(42_00) # creates a new Moola::Money object
money.format # "$42.00"
money.cents  # 4200
money.zero?  # false
money.to_f # 42.0

Moola::Money.new(5_00) == Moola::Money.new(5_00) # true
Moola::Money.new(5_00, "USD") == Moola::Money.new(5_00, "EUR") # false

Moola::Exchange.add_conversion(Moola::Currency.find("usd"), Moola::Currency.find("cad"), 1.3)
money = Moola.new(1_00, "USD")
money.convert_to(Moola::Currency.find("cad")) # Moola::Money(1_30, "cad")
</code></pre>

<p>I don't have much to say other than it seems like a great language if you like writing Ruby. For a newer language it's been a joy to work with and it's fun to build some basic libraries.</p>

<p>If you every find yourself writing Ruby and dealing with money, I encourage you to try out <a href="https://github.com/dorkrawk/moola">Moola</a>.</p>
]]>
    </content>
    
    <category term="crystal" />
    
    <category term="programming" />
    
  </entry>
  
  <entry>
    <title>Inktober 2016</title>
    <link href="https://dinosaurseateverybody.com/blog/inktober-2016" rel="alternate" type="text/html" title="Inktober 2016" />
    <id>https://dinosaurseateverybody.com/blog/inktober-2016</id>
    <published>2016-11-03T00:00:00-05:00</published>
    <updated>2016-11-03T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>So once again I participated in <a href="http://inktober.com/">Inktober</a> this year, trying to do a drawing every day of October based on the provided prompts. I only got 12 days in this year but I was pretty happy with the results. I felt like they turned out better than <a href="http://dinosaurseateverybody.com/blog/inktober-2015">last year's drawings</a> and I guess that's always the goal.</p>

<p>I think my favorites from this group are the lonely space man, the tired dad, and the girl with her lizard.</p>

<p>The prompts for the drawings I did (in order) are: hungry, sad, hidden, jump, worried, scared, wet, escape, squeeze, tired, box, and friend.</p>

<p><img src="../blog_media/inktober2016.jpg" /></p>

<p>I also posted these to <a href="http://mountsaintawesome.com/comic.php?id=113">Mount Saint Awesome</a>, just so I don't completely forget that I have a comic.</p>
]]>
    </content>
    
    <category term="comics" />
    
  </entry>
  
  <entry>
    <title>Don&#39;t Screw It Up</title>
    <link href="https://dinosaurseateverybody.com/blog/dont-screw-it-up" rel="alternate" type="text/html" title="Don&#39;t Screw It Up" />
    <id>https://dinosaurseateverybody.com/blog/dont-screw-it-up</id>
    <published>2016-09-17T00:00:00-05:00</published>
    <updated>2016-09-17T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>So, if you haven't heard yet, <a href="http://mountsaintawesome.com/comic.php?id=112">Eileen and I are having a kid</a>!</p>

<p>To prepare for this life-changing event we've been trying to read up on lots of things as well as asking lots of people for advice on both pregnancy and parenthood. We knew, even before we got pregnant, that we'd wanted to digest this info and experience and share it with other people and we wanted to do that with a podcast. We actually talked a bit about doing a podcast back when we were both in improv and considered the possibility that we might be hilarious.</p>

<p>Whether or not we're all that clever, we did manage to start a podcast! It's called <a href="http://dontscrewituppodcast.com/">Don't Screw It Up</a> and as of this blog post we've done 5 episodes. In each episode talk about different topic such as <a href="http://dontscrewituppodcast.com/episodes/guess-what-we-made/">telling other people that you're pregnant</a> or <a href="http://dontscrewituppodcast.com/episodes/005-baby-on-board/">traveling with a belly full of baby</a>, trying to actually site some legitimate research while still being entertaining. We're trying to take a less reverent, you-are-gia-mother-earth, everything is beautiful and magical attitude towards the whole processes of procreation which is in contrast to a lot of the blogs and other podcasts we've come across geared at future baby owners.</p>

<p>This is my first foray into recording a podcast and it's been a lot of fun to do the audio side of things. We're just recording with my Shure 57 and the MXL condenser mic with some pop screens. Once we start having remote guests, I think I'm going to need to work with this software I found called <a href="https://rogueamoeba.com/loopback/">Looback</a> that lets you create pass audio from one application (like Skype) to another (like Logic Pro X).</p>

<p>By the way, if you want to be a guest, let me know!</p>

<p>Doing this podcast has been really fun so far and it's cool to work with a new medium like this.</p>

<p>Check us out though all of these avenues:</p>

<p><a href="http://dontscrewituppodcast.com/">Don't Screw It Up website</a></p>

<p><a href="https://itunes.apple.com/us/podcast/dont-screw-it-up/id1147956409">iTunes</a></p>

<p><a href="https://www.facebook.com/dsiupodcast/">Facebook</a></p>

<p><a href="https://twitter.com/dsiu_podcast">Twitter</a></p>
]]>
    </content>
    
    <category term="podcast" />
    
  </entry>
  
  <entry>
    <title>One Year of Input Coffee</title>
    <link href="https://dinosaurseateverybody.com/blog/one-year-of-input-coffee" rel="alternate" type="text/html" title="One Year of Input Coffee" />
    <id>https://dinosaurseateverybody.com/blog/one-year-of-input-coffee</id>
    <published>2016-05-26T00:00:00-05:00</published>
    <updated>2016-05-26T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>On May 25th of last year I started keeping track of my focused practice time for a few things I wanted to get better at. As mentioned in <a href="../blog/input-coffee-v2">this post</a>, I was motivated by reading <strong>Make It Stick</strong> and the idea that getting better at something didn't always feel like progress simply because it should be hard.</p>

<p>I built a really basic time tracking tool, which turned out to be a really strong motivator. Seeing a graph of my practice time each week made me want to keep focused.  Here's the graph from the past year:</p>

<p><img src="../blog_media/input_coffee_graph1.png"></p>

<p>I didn't do as much as I had hoped but I feel like I made some decent progress.  My final numbers were:</p>

<p><strong>guitar: 81 hours</strong> (128 posts)</p>

<p><strong>art: 21 hours</strong> (39 posts)</p>

<p><strong>chess: 5 hours</strong> (10 posts)</p>

<p><strong>vocals: 1 hour</strong> (2 posts)</p>

<p>Obviously I wasn't that focused on vocals and I kind of gave up on chess pretty quickly, but I made a decent showing for guitar work.</p>

<p>I didn't let myself count noodling while watching TV or going to band practice. This had to be focused practice where I was really trying to learn something new or fix something sloppy or work on a skill I was lacking. I would have liked to hit 100 hours but 81 is still a lot more than I've put in any year prior.</p>

<p>Art was a mild success. I did count my time doing <a href="../blog/inktober-2015">Inktober</a> because a lot of that was drawing novel subjects, but a lot of the other work was fundamental practice and sketchbook work. I also spent some time ramping up with drawing digitally, which I now use a lot for <a href="http://lookatmeimaracecar.tumblr.com">Look At Me I'm a Racecar</a> comics.</p>

<p>This Input Coffee project has really been helpful in getting me to work on skills that I actually care about. Over the next year I'd like to hit 100 hours of guitar and branch out a bit to some under-practiced skills I'd like to have.</p>
]]>
    </content>
    
    <category term="gtd" />
    
  </entry>
  
  <entry>
    <title>New Guitar Pedal</title>
    <link href="https://dinosaurseateverybody.com/blog/new-guitar-pedal" rel="alternate" type="text/html" title="New Guitar Pedal" />
    <id>https://dinosaurseateverybody.com/blog/new-guitar-pedal</id>
    <published>2016-02-10T00:00:00-06:00</published>
    <updated>2016-02-10T00:00:00-06:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>I built something!</p>

<p>Once again I received a Build Your Own Clone pedal kit for Xmas, this year it was the <a href="http://buildyourownclone.com/collections/fx-kits/products/classic-compressor">Classic Compressor</a>. I've been playing a lot more guitar these days and I seemed like it would be fun to tighten up my sound a bit, so a compressor pedal seemed like a fun project.</p>

<p>The build itself was pretty simple and straightforward. Soldier all the pieces together. Don't burn myself. Don't burn anything important. I'm actually getting pretty decent at soldiering, if I do say so myself! What I wanted to do differently with this build was the visual look of the pedal.</p>

<p><img src="http://cdn.shopify.com/s/files/1/0568/4705/products/125bwebsite_compact.jpeg?v=1406158893" class="inline_left">
The enclosure that comes with the kit is... utilitarian, to say the least. This time I wanted to not only paint the enclosure, but also design and print my own decals for the pedal. The painting was pretty simple, I just sanded down the enclosure, put down a coat of primer, and then used several coats of spray paint.</p>

<p>To do the design decals I ended up drawing some stuff using my Wacom tablet and then doing a layout in Photoshop and finally printing everything onto waterslide decals. For the design I ended up just drawing a simple coffee mug with the word "compresso" on it because it sort of sounds like espresso. Meh... it kinda works! The waterslide decals were pretty cool, you just print onto them, spray them with a clear sealant, wet them and then slide them onto the surface. Once it dried, I sprayed the whole thing with a few layers of clear sealant so the decal would chip or peal off as I stomped on it.</p>

<p>Last, but not least, I wasn't quite satisfied with the nobs that came with the kit. I wanted something a bit more retro looking so I bought some oven nob style nobs on Amazon to use. They didn't quite fit the pots on the pedal so I had to Dremel them out a bit before I could put them on the pedal. It's always fun to have an excuse to play with a Dremel.</p>

<p>The end result looks pretty cool (and sounds pretty good too!) I actually took apart the first pedal I built, an overdrive, with the intention of painting and adding a decal to it as well. The stuff I learned doing this pedal will be very helpful.</p>

<p>Here she is:</p>

<p><img src="../blog_media/compressor_pedal1.jpg"></p>
]]>
    </content>
    
    <category term="music" />
    
  </entry>
  
  <entry>
    <title>Inktober 2015</title>
    <link href="https://dinosaurseateverybody.com/blog/inktober-2015" rel="alternate" type="text/html" title="Inktober 2015" />
    <id>https://dinosaurseateverybody.com/blog/inktober-2015</id>
    <published>2015-11-01T00:00:00-05:00</published>
    <updated>2015-11-01T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>So this year I participated in <a href="http://mrjakeparker.com/inktober">Inktober</a>, which is basically a month long event where artist attempt to produce an inked drawing every day in October. Obviously I didn't have the time/focus to do all 31 days, but I did manage to produce 16 drawings and post them to <a href="https://instagram.com/dorkrawk/">Instagram</a>.</p>

<p>As I've been sadly neglecting <a href="http://mountsaintawesome.com">Mount Saint Awesome</a> these days, it was really nice to get back to drawing regularly. Doing this project really helped me explore other styles and techniques and also draw things that I might not have drawn for comics (like armadillos and astronauts). It was also good to work in just black and white. I've struggled with shading and shadows in black and white drawings in the past and it really helped to be constrained by this medium. There were a few drawings I wasn't very happy with, like the Gameboy, but all in all I was pleased with most of the work.</p>

<p>Hopefully this rejuvenates my art as I'd really like to get back to making comics regularly.</p>

<p>Here are all 16 Inktober drawings I did:</p>

<p><img src="../blog_media/inktober1.JPG" />
<img src="../blog_media/inktober2.JPG" />
<img src="../blog_media/inktober3.JPG" />
<img src="../blog_media/inktober4.JPG" />
<img src="../blog_media/inktober5.JPG" />
<img src="../blog_media/inktober6.JPG" />
<img src="../blog_media/inktober7.JPG" />
<img src="../blog_media/inktober8.JPG" />
<img src="../blog_media/inktober9.JPG" />
<img src="../blog_media/inktober10.JPG" />
<img src="../blog_media/inktober11.JPG" />
<img src="../blog_media/inktober12.JPG" />
<img src="../blog_media/inktober13.JPG" />
<img src="../blog_media/inktober14.JPG" />
<img src="../blog_media/inktober15.JPG" />
<img src="../blog_media/inktober16.JPG" /></p>

<p><strong>Note:</strong> I've also posted these as one big image to <a href="http://mountsaintawesome.com/comic.php?id=98">Mount Saint Awesome</a>.</p>
]]>
    </content>
    
    <category term="comics" />
    
  </entry>
  
  <entry>
    <title>Darwinning Updates</title>
    <link href="https://dinosaurseateverybody.com/blog/darwinning-updates" rel="alternate" type="text/html" title="Darwinning Updates" />
    <id>https://dinosaurseateverybody.com/blog/darwinning-updates</id>
    <published>2015-09-27T00:00:00-05:00</published>
    <updated>2015-09-27T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>One of the <a href="http://dinosaurseateverybody.com/blog/darwinning-my-ruby-gem-for-genetic-algorithms">first posts</a> I wrote on the new version of this blog was about my genetic algorithm Ruby gem, <strong>Darwinning</strong>. I actually started building the library back in December of 2012 when I was first learning Ruby and it's gone through several updates and periods of inactivity. Usually I'll just add some tests or make a small update when I have some free time. It's been a pretty casual project. I just didn't think that there was that much of a need for a Ruby GA library, I just thought it would be fun to make.</p>

<p>Recently I've seen a steady stream of people starring and forking the <a href="https://github.com/dorkrawk/darwinning">Darwinning repo</a> on Github and I've received some really thoughtful and helpful pull requests from people, so I wanted to give the library a bit more attention. I had some free time this weekend and used it to finish off a major feature that I had been working on and finally published the <a href="https://rubygems.org/gems/darwinning">0.1.0 version of the gem</a>!</p>

<p>The major feature I added was the ability to use Darwinning in existing Ruby models via <code>include</code>. This lets you utilize the library in projects that might not be specifically about genetic algorithms.</p>

<p>Here's my dumb, contrived example:</p>

<pre><code class="ruby">require 'darwinning'

class Triple
  include Darwinning

  GENE_RANGES = {
    first_number: (0..100),
    second_number: (0..100),
    third_number: (0..100)
  }

  attr_accessor :first_number, :second_number, :third_number

  def fitness
    # Try to get the sum of the 3 digits to add up to 100
    (first_number + second_number + third_number - 100).abs
  end
end
</code></pre>

<p>Then you can use some nice built in methods to generate a population of these objects and evolve them towards a fitness goal:</p>

<pre><code class="ruby">if Triple.is_evolveable?
  triple_pop = Triple.build_population(0, 10, 100)
  triple_pop.evolve! # evolve until fitness goal is or generations limit is met

  pp "Best member: #{triple_pop.best_member}"
end
</code></pre>

<p>I've been having fun working on this project and it's really cool to see some other people contribute to the project. If you want to play around with the library or have an interest in <a href="https://en.wikipedia.org/wiki/Genetic_algorithm">genetic algorithms</a> just <code>gem install darwinning</code> or check out the <a href="https://github.com/dorkrawk/darwinning">Darwinning Github repo</a>. There are always more updates to do, but it felt good to make some progress on this project.</p>
]]>
    </content>
    
    <category term="ruby" />
    
    <category term="darwinning" />
    
  </entry>
  
  <entry>
    <title>Our Story Recording</title>
    <link href="https://dinosaurseateverybody.com/blog/our-story-recording" rel="alternate" type="text/html" title="Our Story Recording" />
    <id>https://dinosaurseateverybody.com/blog/our-story-recording</id>
    <published>2015-08-10T00:00:00-05:00</published>
    <updated>2015-08-10T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>Last weekend was my first wedding anniversary. We didn't really have big plans to exchange gifts but I thought it would be a good opportunity to finally record <strong>"Our Story"</strong>, the song I used to propose to Eileen. I had been meaning to do this for a while, partially because I knew if I didn't I'd probably forget how to play it and that would make me a terrible husband.</p>

<p>If you don't want to read all my thoughts on recording the song feel free to just go <a href="https://soundcloud.com/dorkrawk/our-story">listen to it</a> now. I'll only be a little offended.</p>

<p>This song was written to be played live, only on acoustic, and has some holds that feel pretty loose so I had to start off by making sure I could actually play it with backing drum track. It took me a few tries to get the feel of it but I think it came together without sounding too rigid.</p>

<p>After recording the acoustic part, I got to have a lot of fun writing all the other things that go on top. I had a lot of fun with the bass and actually mixed some of the low end out of the acoustic to give the bass more room. The piano in the chorus really came together pretty nicely, particularly the hits under "I can't wait to write...". The left hand work there gave it some good body.</p>

<p>As usual, I was tempted to do more electric guitar noodling than I should but some after some editing I was pretty happy with the little theme I had in the verses. The lead part in the choruses ended up acting as more of a harmony that gave the chords an interesting sound at times.</p>

<p>There's a part in the 3rd verse right after the line "together with our furry child" where it sounds like someone just stepped on a piano. That's because the cat just stepped on the piano there. Since the line was actually about him I mixed it down but left it in.</p>

<p>The outro was interesting in this song. It was originally the verse or chorus of an early draft of this song that never really panned out, but I liked the lyrics and it was in the same key as the rest of the song so I really wanted to make it work. Also it was a nice held chord segue into actually popping the question, which was pretty important at the time. </p>

<p>I wanted to be sure this still sounded cohesive with the rest of the song, but still go out big and I think it turned out well. While I could have mixed it a little better, the pick slide into distorted power chords is just a lot of fun. The piano part was just something simple I stumbled on while I was messing around, but I really like what it adds. I ended up doing a lot of editing to decide which instruments should stop when and I'm happy with those choices. There was a lot of value in editing this song a few days after I had done most of the recording.</p>

<p>All in all, I was really happy with how this turned out and Eileen seemed to like it too. It's always fun to record original music and this song was particularly important to me.</p>

<iframe width="100%" height="166" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/218703668&color=ff5500&auto_play=false&hide_related=false&show_artwork=true"></iframe>
]]>
    </content>
    
    <category term="songwriting" />
    
    <category term="recording" />
    
  </entry>
  
  <entry>
    <title>Input Coffee (v2)</title>
    <link href="https://dinosaurseateverybody.com/blog/input-coffee-v2" rel="alternate" type="text/html" title="Input Coffee (v2)" />
    <id>https://dinosaurseateverybody.com/blog/input-coffee-v2</id>
    <published>2015-07-14T00:00:00-05:00</published>
    <updated>2015-07-14T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>So back when I was working at Berkeley (and had more free time) I decided to formalize the tracking of some of my skill improvements. These were mainly things like drawing, playing guitar, playing piano, vocals, comptuer science theory, etc. I set up a small WordPress blog called <strong>Input Coffee</strong> and just made posts for every session in order to keep track of what I had been working on. I liked seeing all the posts every month and having a record of what I was doing, but a blog wasn't the perfect solution. I wanted better ways to add up time per week or month for each type of task.</p>

<p>I decided to start tracking this sort of thing again, partially in response to reading <a href="http://www.amazon.com/Make-It-Stick-Successful-Learning/dp/0674729013">Make It Stick</a>, and I wanted a simple way to track my practice sessions for things like guitar, chess, drawing, and other stuff I'm working on these days.</p>

<p>I started by just creating Google Docs for each session, which worked fine and helped me not avoid doing real practice by spending a bunch of time building a complex system to track my practice. But then I gave in and built a system to track my practice. Like the original WordPress blog, it's called <a href="https://github.com/dorkrawk/input-coffee">Input Coffee</a>.</p>

<p>This system is pretty simplistic, just a Sinatra app that reads some Markdown files and turns them into CoffeePost objects so I can examine them based on tags, subject, date, and a few other fields. The Markdown files use a format very similar to Jekyll's posts and I just parse out meta data from the little header. 
Here's an example post:</p>

<pre>
date: 2015-07-14
subject: guitar
tags: acoustic electric
hours: 1.0

Spent most of this session doing acoustic stuff...
</pre>

<p>I don't even have this hosted anywhere, I just run a local server when I want to see stats about my practice. Right now I just show total posts/hours (since May 25th, 2015), some breakdowns by subject (guitar, vocals, chess, drawing, etc.), and some numbers for the current and past week</p>

<p>Obviously, I'd like build out some more metrics and it might be fun to make a nicer interface, but for now this works for me and I've avoided overly-over engineering the solution.  Being able to track this sort of stuff really helps keep me in good habits.</p>
]]>
    </content>
    
    <category term="code" />
    
    <category term="gtd" />
    
  </entry>
  
  <entry>
    <title>Divorce and the American South Cover</title>
    <link href="https://dinosaurseateverybody.com/blog/divorce-and-the-american-south-cover" rel="alternate" type="text/html" title="Divorce and the American South Cover" />
    <id>https://dinosaurseateverybody.com/blog/divorce-and-the-american-south-cover</id>
    <published>2015-05-11T00:00:00-05:00</published>
    <updated>2015-05-11T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>Eileen was out of town this weekend so, as I typically do in these situations, I took advantage of the time do some recording. As mentioned in <a href="../blog/aaron-west-and-the-roaring-twenties-drawings">previous posts</a>, I've really been into the Aaron West and the Roaring Twenties record so I decided to finally record one of those songs, <a href="http://www.rdio.com/artist/Aaron_West_and_The_Roaring_Twenties/album/We_Don%27t_Have_Each_Other/track/Divorce_And_The_American_South/">Divorce and the American South</a>.</p>

<p><strong>Here's a <a href="https://soundcloud.com/dorkrawk/divorce-and-the-american-south-cover">link to the song</a> if you want to listen right away.</strong></p>

<p>This is a pretty faithful cover. I didn't deviate too much from the original version and actually resisted my urge to add some lead guitar parts to the song. In place of the slide guitar, prominently featured in the original song, I focused more on the organ part to do something tonally interesting against the acoustic guitar. The organ also just fills the song out nicely without adding a bass part.</p>

<p>I also recorded some saxophone for the first time since recording the last Captain Supreme song, which was pretty fun.</p>

<p>This recording session gave me the chance to really work with with my new vocal mic (<a href="http://www.amazon.com/MXL-2003A-Diaphragm-Condenser-Microphone/dp/B001ECQOI0">MLX 2003A</a>) and my new monitors (<a href="http://www.amazon.com/JBL-Professional-LSR305-Studio-Monitor/dp/B00DUKP37C">JBL LSR305s</a>). I ended up using the MLX for both vocals and the acoustic guitar and just used my SM57 for the sax. It was really nice to be able actually <em>hear</em> things in the mix with the new monitors. Hopefully the end result is better for that clarity.</p>

<p>As always, vocals were a challenge. They're not perfect but I feel like I'm making progress, which is always nice.</p>

<p>Enjoy!</p>

<iframe width="100%" height="166" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/204860615&color=ff5500&auto_play=false&hide_related=false&show_artwork=true"></iframe>
]]>
    </content>
    
    <category term="music" />
    
    <category term="aaronwest" />
    
    <category term="cover" />
    
  </entry>
  
  <entry>
    <title>Bloomfilter RS</title>
    <link href="https://dinosaurseateverybody.com/blog/bloomfilter-rs" rel="alternate" type="text/html" title="Bloomfilter RS" />
    <id>https://dinosaurseateverybody.com/blog/bloomfilter-rs</id>
    <published>2015-04-20T00:00:00-05:00</published>
    <updated>2015-04-20T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>I spend the vast majority of programming time working with Ruby these days. I've gotten to know it pretty well and it is honestly a joy to use, but I want to make sure that I don't just limit myself to a single language or even a single type of language (the occasional Python project doesn't quite count as adventurous). Out of curiosity and a desire to work with a more low level language I've started playing around with <a href="http://www.rust-lang.org/">Rust</a>.</p>

<p>Rust is a systems level language created by Mozilla that might be used in similar situations as C++. I haven't done anything this low level since I had to use C++ for a data structures class my sophmore year of college, which was a surprisingly long time ago.</p>

<p>I needed a small project to build if I was going to learn anything about the language so I decided to build a <a href="http://en.wikipedia.org/wiki/Bloom_filter">Bloom filter</a>. A Bloom filter is a probabilistic data structure that is designed to be really space efficient and allows you to determine if something is "probably in the set" or "definitely not in the set". For example, web browsers use Bloom filters to store lists of dangerous websites, which is why you sometime get a warning for an obviously safe site.</p>

<p>The end result of this little project was <a href="https://github.com/dorkrawk/bloomfilter-rs">Bloomfilter-RS</a>, a small Rust library that implements a Bloom filter. It can be used like this to create a Bloom filter with 100 buckets and 5 hash functions:</p>

<pre><code class="rust">let mut bf = BloomFilter::new(100, 5);

bf.insert("hamster");
bf.insert("coffee");

bf.check("hamster");
// (probably) true

bf.check("oatmeal");
// false
</code></pre>

<p>It was pretty interesting working with a lower level language coming from Ruby. I had to think about passing pointers and dealing with a much more robust type system. Fortunately working with Scala in the past prepared me a bit for dealing with generics and default immutability, but it really felt MUCH slower than working with a high level language like Ruby (which I suppose should be obvious).</p>

<p>I don't really have a major project in mind that needs a language like Rust right now, but I'd like to keep tinkering around with it just to expose myself to other types of langues. It's also just fun to follow a language as it's being built (as of this post Rust is still a few weeks away from it's official 1.0 release and some of the API still isn't quite stable).</p>

<p>Feel free to dig through my <a href="https://github.com/dorkrawk/bloomfilter-rs">Bloomfilter-RS</a> code and give me any feedback about style or a better way to use language features. It was certainly built as a learning experience.</p>
]]>
    </content>
    
    <category term="rust" />
    
    <category term="bloomfilter" />
    
  </entry>
  
  <entry>
    <title>Aaron West and the Roaring Twenties Drawings</title>
    <link href="https://dinosaurseateverybody.com/blog/aaron-west-and-the-roaring-twenties-drawings" rel="alternate" type="text/html" title="Aaron West and the Roaring Twenties Drawings" />
    <id>https://dinosaurseateverybody.com/blog/aaron-west-and-the-roaring-twenties-drawings</id>
    <published>2015-02-07T00:00:00-06:00</published>
    <updated>2015-02-07T00:00:00-06:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>So last month I found out that Dan "Soupy" Campbell from <a href="http://www.thewonderyearsband.com/">The Wonder Years</a> put out a solo record under the name <a href="http://www.aaronwestandtheroaringtwenties.com/">Aaron West and the Roaring Twenties</a>. I was rightfully excited by this because the record, We Don't Have Each Other, is one of the best albums I've heard in a long time. The storytelling and imagery are amazing. Dan does a beautiful job of painting a scene in every song. It's like listening to an incredibly well written short story, but there's fantastic music to go with it.</p>

<p>I had been sketching the other day and I found it was a lot easier to decide on something to draw if I started with a box, like I would when drawing comics. I was looking for a subject for some comic-like art and decided to do a drawing for every song on this record. The scene-setting and exposition in these songs made them a perfect subject and it ended up being a really fun project. Some of the scenes I drew were just snapshots of things described in the lyrics and for some I took a few interpretive liberties.  I recommend <a href="http://www.rdio.com/artist/Aaron_West_and_The_Roaring_Twenties/album/We_Don%27t_Have_Each_Other/">listening to the record</a> while checking these out. Enjoy!</p>

<p><img src="../blog_media/aaron_west01.png" />
<img src="../blog_media/aaron_west02.png" />
<img src="../blog_media/aaron_west03.png" />
<img src="../blog_media/aaron_west04.png" />
<img src="../blog_media/aaron_west05.png" />
<img src="../blog_media/aaron_west06.png" />
<img src="../blog_media/aaron_west07.png" />
<img src="../blog_media/aaron_west08.png" />
<img src="../blog_media/aaron_west09.png" />
<img src="../blog_media/aaron_west10.png" /></p>

<p>I'll probably post these on <a href="http://mountsaintawesome.com">Mount Saint Awesome</a> soon, but this seemed like more of a project than a comic, so I wanted to do a blog post first.</p>
]]>
    </content>
    
    <category term="comics" />
    
    <category term="music" />
    
  </entry>
  
  <entry>
    <title>Thing A Week - Recap</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week-recap" rel="alternate" type="text/html" title="Thing A Week - Recap" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week-recap</id>
    <published>2015-01-11T00:00:00-06:00</published>
    <updated>2015-01-11T00:00:00-06:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>So I posted my <a href="../blog/thing-a-week-1-professor-rex-vonscience-saves-the-world">first Thing A Week post</a> almost exactly 1 year ago today. The idea behind <strong>Thing A Week</strong> was to get myself to do more small projects with short deadlines and also get myself to work on a bunch of different things so I was producing something interesting each week.</p>

<p>While some weeks I did manage to work with in those bounds and produce a standalone project in one week (for example; the <a href="../blog/thing-a-week-2-bass-overdrive-pedal">bass pedal</a>, <a href="../blog/thing-a-week-8-in-the-garage-cover">my cover of In The Garage</a>, and the <a href="../blog/thing-a-week-36-theremino">Therimino</a>) I actually ended up spending a lot of my Thing A Week time on pieces of larger projects like RecLaboratory and the photo listener. While this wasn't the original intention of the exercise I was still able to use the model to break up chunks of work and produce stuff worth talking about almost every week.</p>

<p>In the end I did 36 Thing A Week posts last year. Not as good as the 52 I would have liked, but it still represents a lot of productive weeks. I also found it really valuable to write about what I was working on each week. I think I just really enjoy sharing both the finished product and the process for the projects I work on. </p>

<p>Here are some things I made last year:</p>

<ul>
<li><a href="../blog/thing-a-week-1-professor-rex-vonscience-saves-the-world">a non-working video game</a></li>
<li><a href="../blog/thing-a-week-2-bass-overdrive-pedal">a bass pedal</a></li>
<li><a href="../blog/thing-a-week-3-save-the-date-comic">the save the date card for my wedding</a></li>
<li><a href="../blog/thing-a-week-23-bird-watcher-display">a webservice that pulled tagged images from Twitter and Instagram</a></li>
<li><a href="../blog/thing-a-week-34-instrumental-indie-music">a</a> <a href="../blog/thing-a-week-6-piano-bass-song">bunch</a> <a href="../blog/thing-a-week-8-in-the-garage-cover">of</a> <a href="../blog/thing-a-week-18-wine-women-and-song-cover">music</a></li>
<li><a href="../blog/thing-a-week-29-wedding-ring-box">a ring box out of an old book</a></li>
<li><a href="../blog/thing-a-week-33-watercolor-painting">some watercolor paintings</a></li>
<li><a href="../blog/reclaboratory-early-tester-launch">a webservice where you can do collaborative music recording</a></li>
<li><a href="../blog/thing-a-week-36-theremino">an electronic musical instrument</a></li>
</ul>

<p>While I really enjoyed doing the Thing A Week posts last year, this year I'm not going to have the same weekly goal. I may do some more Thing A Week style posts when I finish a project but I'm trying to focus more on just doing stuff rather than only on getting stuff done. For example, when I was writing music last year I focused a lot on writing things that I knew I could finish quickly so I ended up with a lot of short musical ideas, but not very many complete songs. I want to spend more time doing things like art, music, and coding (and whatever else sparks my attention) and doing it well. Maybe this means spending more time drawing in sketchbooks and less time making finished comics. Maybe this means starting a couple of songs and working on them until I'm REALLY happy with one.</p>

<p>I have a few project ideas (some big, some small) that I'm already starting to plan out, so I'll try to keep up with regular Thing A Week style postings discussing my progress on those things, even if it's just for my own enjoyment.</p>
]]>
    </content>
    
    <category term="thingaweek" />
    
  </entry>
  
  <entry>
    <title>Thing A Week 36 - Theremino</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week-36-theremino" rel="alternate" type="text/html" title="Thing A Week 36 - Theremino" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week-36-theremino</id>
    <published>2014-10-20T00:00:00-05:00</published>
    <updated>2014-10-20T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p><img src="../blog_media/theremino2.jpg" class="inline_right" />
This last week I built something cool that was actually in the spirit of the Thing a Week project!</p>

<p>Last Christmas my mom got me a distance sensor that could be easily used with an Arduio (which is a totally normal gift) and I finally got around to playing with it. I had originally wanted to start working on some sort of robot but first I wanted to just play around with it and see what I could do.</p>

<p>After running through a few tutorials I decided it would be fun to make some sort of crude musical instrument using the distance sensor. I learned a bit about how to hook up a tiny speaker and then used the value of the distance sensor specify which tones to generate.</p>

<p><img src="../blog_media/theremino1.jpg" class="inline_left" />
This created something that just constantly made steady sine wave sounding noise. I wanted to add the ability to do start and stop notes so I attached a small pressure sensor to the project. Then the tone would only play if you were pressing down on that sensor.</p>

<p>I also added a small LED light that turns on when a note is being played because lights are neat.</p>

<p>Because you control the instrument by moving one hand around, like you would on a theremin I decided to call my new creation a <strong>theremino</strong> (like theremin + Arduino... get it?). Unlike a theremin, the theremino plays discrete notes from a regular chromatic scale, changing notes every 4cm you move your hand from the sensor. It has a range from B2 to C6.</p>

<p>As you can see from the video below this instrument is actually kind of hard to play. It's tough to be accurate with your notes when moving around in mid air.</p>

<p>It had been a while since I had tinkered around with an Arduino, so this what a really fun little project. For those interested, I have the the Arduino code for this project available <a href="https://gist.github.com/dorkrawk/d871b15ea69638be710f">here</a> and a wiring diagram for the Ardunio and breadboard <a href="../blog_media/theremino_bb.png">here</a>.</p>
]]>
    </content>
    
    <category term="thingaweek" />
    
    <category term="music" />
    
    <category term="arduino" />
    
  </entry>
  
  <entry>
    <title>RecLaboratory Early Tester Launch</title>
    <link href="https://dinosaurseateverybody.com/blog/reclaboratory-early-tester-launch" rel="alternate" type="text/html" title="RecLaboratory Early Tester Launch" />
    <id>https://dinosaurseateverybody.com/blog/reclaboratory-early-tester-launch</id>
    <published>2014-10-14T00:00:00-05:00</published>
    <updated>2014-10-14T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>Unfortunately I've broken my "Thing a Week" streak due to some busy weeks where I just didn't have time to make much of anything. I did, however, have time to clean up some of the last few things for the <strong>RecLaboratory early tester launch</strong>. Bobby and I spent last Tuesday fixing bugs and cleaning up the UI to get RecLab to a place where we were happy enough to let other people check it out.</p>

<p>This doesn't mean it is complete or bug-free by any means. I'm sure there a lots of little rough spots and the UI, while not terrible, is still pretty bare-bones. But our goal for this "release" was to get the site to a point where we could show some friends and let them try things out. We really just want to see if we're headed in the right direction with what we have so far before we devote a lot of time to polishing the UI and the code base.</p>

<p>It's pretty exciting to finally start showing off something we've been working on for a long time (on and off for about 6 months now). While it's kind of nerve-wracking to worry about something breaking now that people other than Bobby and I are on the site it'll be fun to see how people start to use what we've built. We're rolling out invites <em>very</em> slowly as we become more confident about the feature set and stability of the system.</p>

<p>I also started a <a href="http://reclaboratory.tumblr.com/">RecLab Blog</a> (my first Tumblr account!) to act as a sort of company blog now that we're trying to involve other people in the site. As always you should follow/friend/read/whatever our <a href="https://www.facebook.com/reclaboratory">Facebook</a>, <a href="https://twitter.com/reclaboratory">Twitter</a>, <a href="http://instagram.com/reclaboratory">Instagram</a>, and <a href="http://reclaboratory.tumblr.com/">blog</a>. </p>

<p><strong>Please go to <a href="http://www.reclaboratory.com">www.reclaboratory.com</a> and sign up to become an early tester and we'll probably send you and invite soon!</strong></p>
]]>
    </content>
    
    <category term="reclab" />
    
  </entry>
  
  <entry>
    <title>Thing A Week 35 - RecLaboratory Record Track From Song</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week-35-reclaboratory-record-track-from-song" rel="alternate" type="text/html" title="Thing A Week 35 - RecLaboratory Record Track From Song" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week-35-reclaboratory-record-track-from-song</id>
    <published>2014-09-22T00:00:00-05:00</published>
    <updated>2014-09-22T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>Last week was a pretty busy week so I didn't get too many "projects" done outside of some <a href="http://www.reclaboratory.com">RecLaboratory</a> work and even most of that was done in between sessions at the <a href="http://gogaruco.com/">Golden Gate Ruby Conference</a>. The major piece of work I finished up, apart from some UI cleanup, was a modal to create (and record!) a new track from a song's page. I think this will be a very common use case, so I wanted it working before we did the friendly release.</p>

<p><img src="../blog_media/reclab_recfromsong.png" class="inline_right" />
After getting the in-browser track recording to a working place the previous week, I wanted to reuse most of that functionality in this new modal. Building this new feature on top of that existing code caused me to refactor a few things, which was great. I also had to add the ability to use multiple tracks as a "backing track" for the recording because I imagine that users won't want to bounce the song after every recorded track. This takes advantage of the track pre-loading I had already built into the song page and a little bit of html5 audio object abuse.</p>

<p>This is one of the last functional pieces of the site that needed to be built before we start soliciting alpha testers. Originally we had wanted to open RecLaboratory to early users on September 8th (almost exactly 6 months after Bobby and I first started talking about the idea) but we really wanted to get the last features in so that we could offer users a compelling reason to interact with the service. I think we're getting REALLY close now!</p>
]]>
    </content>
    
    <category term="thingaweek" />
    
    <category term="reclab" />
    
    <category term="ruby" />
    
  </entry>
  
  <entry>
    <title>Thing A Week 34 - Instrumental Indie Music</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week-34-instrumental-indie-music" rel="alternate" type="text/html" title="Thing A Week 34 - Instrumental Indie Music" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week-34-instrumental-indie-music</id>
    <published>2014-09-15T00:00:00-05:00</published>
    <updated>2014-09-15T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>Hey look! Another non-code related Thing a Week! On Saturday night, Eileen was at hockey so I grabbed my (much neglected) guitar and popped open Logic Pro for some quick recording. The end product was a nice, kind of dark sounding <a href="https://soundcloud.com/dorkrawk/indie-mess">instrumental track</a>.</p>

<p>I had been messing around with a little arpeggiated riff and I wanted to build something pretty repetitive, getting away from a verse-chorus-bridge structure. After I had the riff, I started building the drum part. The real breakthrough there was throwing in the handclaps, which start off sounding so happy but then sound more ominous under the bass and main guitar riff. Despite being pretty core to the whole song, the bass part didn't come in until much later in the writing process. I also ended up using amp models with a lot more reverb than I typically use. I have a tendency to seek out drier guitar tones, but the more spacious sounds really worked for this piece.</p>

<p>I resisted the urge to just keep stacking more and more tracks on top of each other in this song and let some parts be pretty sparse. I think I could put some lyrics over this but it was getting late and nothing was really jumping out to me, so I'm pretty happy with it being instrumental for now.</p>

<p>Enjoy!</p>

<iframe width="100%" height="166" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/167850797&color=ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false"></iframe>
]]>
    </content>
    
    <category term="thingaweek" />
    
    <category term="music" />
    
    <category term="recording" />
    
  </entry>
  
  <entry>
    <title>Thing A Week 33 - Watercolor Painting</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week-33-watercolor-painting" rel="alternate" type="text/html" title="Thing A Week 33 - Watercolor Painting" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week-33-watercolor-painting</id>
    <published>2014-09-08T00:00:00-05:00</published>
    <updated>2014-09-08T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>This week I'll take a break from talking about <a href="http://www.reclaboratory.com">RecLaboratory</a> stuff and talk about art. This week I started playing around with watercolors.</p>

<p>One of my favorite cartoonists, <a href="http://mitchclem.tumblr.com/">Mitch Clem</a>, has been working with his wife(?), <a href="http://nationofamanda.tumblr.com/">Amanda</a> to use watercolors in his comics for a while. They've done some really cool stuff in both <a href="http://mitchclem.tumblr.com/post/20382657189/nationofamanda-mitch-drew-this-i-painted-it">color</a> and <a href="http://38.media.tumblr.com/8fe73051e12fef257a7d7cd4284cea14/tumblr_n2cdcqm9yL1qdt757o1_1280.jpg">black and white</a>.  I've seen other comic artists do it too and I've always loved the effect.</p>

<p><img src="../blog_media/watercolors_msa.jpg" class="inline_right" />
After a trip to the <a href="http://www.waltdisney.org/">Walt Disney Museum</a>, particularly the <a href="http://www.waltdisney.org/mary-blair">Mary Blair exhibit</a>, with Eileen I was really inspired to try painting something so we went to the art store later that weekend and picked up some supplies. As a first project I wrote a short (questionably funny/comprehensible) <a href="http://mountsaintawesome.com/comic.php?id=89">comic</a> and tried to paint that.  The result was pretty cool, for my first time, and a lot of fun to do. It was a bit tricky working with watercolors in such a small size (the panels were maybe 2" x 3") but I learned a bit and really enjoyed the medium.</p>

<p>Then over the weekend I wanted to do a single scene and had the idea of just doing a simple girl playing guitar on stage. After watching a whole season of Inkmaster I decided to throw a few tattoos on her, as well. I am particularly proud of the hands in this piece. Usually I just give up and let the hands sort of fall apart, especially on guitars but I thought these turned out well. I'm really happy with how this turned out and I plan to keep working with watercolors in the future.</p>

<p><img src="../blog_media/watercolors_guitargirl.jpg" /></p>
]]>
    </content>
    
    <category term="thingaweek" />
    
    <category term="art" />
    
    <category term="painting" />
    
  </entry>
  
  <entry>
    <title>Thing A Week 32 - In Browser Audio Recording</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week-32-in-browser-audio-recording" rel="alternate" type="text/html" title="Thing A Week 32 - In Browser Audio Recording" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week-32-in-browser-audio-recording</id>
    <published>2014-09-02T00:00:00-05:00</published>
    <updated>2014-09-02T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>This week my major work was around building an in-browser audio recording system. I've been reading about using new HTML5 APIs to get access to the user's mic (and camera) for a while and I was finally able to sit down and start building something out. Because I feel the need to name everything I build, I had to name this as well. None of the bands I was in ever really practiced or recorded in a garage, they mostly worked out of basements. As a bit of a nod to (and departure from) Garageband, I decided to just call my recording stuff <strong>Basement</strong>.</p>

<p>The core technology for this whole process is <a href="https://developer.mozilla.org/en-US/docs/NavigatorUserMedia.getUserMedia">getUserMedia()</a>. This is what prompts the user to allow the page to access the mic (or camera or whatever) and then handle a <code>LocalMediaStream</code> object. From there you can work with whatever is being picked up by the mic.</p>

<p>Outputing the audio in real time was very easy (hey I built a monitor!) and after doing a bit of research I found a fantastic library to help with the recording aspect of this project: <a href="https://github.com/mattdiamond/Recorderjs">Recorderjs</a>. It provides a nice <code>Recorder</code> object to work with and, best of all, it's a VERY small, easy to understand library so I can go through every line of code and understand exactly what is being done. This is very important because all of this in-browser media work is very new and deep tutorials are rare. Plus I'm going to need to do a few things that haven't been done perfectly yet.</p>

<p>Right now I'm working on taking the recorded audio, which exists as a Blob tied to the page it was created on, and sending it back to the server to be uploaded in a way that works nicely with our existing <a href="https://github.com/thoughtbot/paperclip">Paperclip</a> system. I'm really digging into some of the new HTML5 APIs for all this work and it's been really interesting.</p>

<p>The in-browser recording is the last new major feature we need to build before polishing up the <a href="http://www.reclaboratory.com">RecLaboratory</a> site (which I updated this week, too!) for a very early, very small beta. I'm really excited to get people using this tool soon!</p>
]]>
    </content>
    
    <category term="thingaweek" />
    
    <category term="reclab" />
    
    <category term="html5" />
    
  </entry>
  
  <entry>
    <title>Thing A Week 31 - RecLaboratory Instrument Icons</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week-31-reclaboratory-instrument-icons" rel="alternate" type="text/html" title="Thing A Week 31 - RecLaboratory Instrument Icons" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week-31-reclaboratory-instrument-icons</id>
    <published>2014-08-24T00:00:00-05:00</published>
    <updated>2014-08-24T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>Along with some other RecLab stuff (which is coming along nicely), this week I finally tackled a little project that I've been thinking about for a while. Unlike most of the RecLab work this was much more artistic than technical. I built the first first hand drawn icons for the site.</p>

<p>I knew that I wanted custom instrument, track, and song icons so I started out with a small set of 8 (with plans to make more as we need them). I did these icons the same way I do my comics: first drawing in pencil, then inking, then scanning into Photoshop, then cleaning up the lines and adding color in Illustrator. They had to look good at a wide range of sizes: 400px to 30px so I didn't add too much detail.</p>

<p>To handle what I think will be the most commonly used instruments I started with (electric) guitar, (electric) bass, drums, keys, vocals, sax (perhaps my own bias), percussion, and general track.</p>

<p>So here they are!</p>

<p><img src="../blog_media/guitar-medium.png" title="guitar" class="inline_left">
<img src="../blog_media/bass-medium.png" title="bass" class="inline_left">
<img src="../blog_media/drums-medium.png" title="drums" class="inline_left">
<img src="../blog_media/vocals-medium.png" title="vocals" class="inline_left">
<img src="../blog_media/keys-medium.png" title="keys" class="inline_left">
<img src="../blog_media/sax-medium.png" title="sax" class="inline_left">
<img src="../blog_media/percussion-medium.png" title="percussion" class="inline_left">
<img src="../blog_media/track-medium.png" title="general track" class="inline_left"></p>

<p><br style="clear: both"></p>

<p>Guitars are still hard to draw.</p>

<p>I used a small pallet of colors for all the icons in the hopes of creating an overall cohesive effect when they all get seen together on the site. Bobby doesn't like the percussion one very much and he's probably right. It's my least favorite too, but this seems like a good start and really adds some nice visual variety to the site. Plus it's always fun to draw things!</p>
]]>
    </content>
    
    <category term="thingaweek" />
    
    <category term="reclab" />
    
    <category term="art" />
    
  </entry>
  
  <entry>
    <title>Thing A Week 30 - RecLaboratory Servers</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week-30-reclaboratory-servers" rel="alternate" type="text/html" title="Thing A Week 30 - RecLaboratory Servers" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week-30-reclaboratory-servers</id>
    <published>2014-08-18T00:00:00-05:00</published>
    <updated>2014-08-18T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>So as of last week I have the RecLab Rails site up and running on Heroku and the audio processing API, Roctopus, up and running on my own server. Amazingly they are able to talk to each other and work pretty much as expected.</p>

<p>There are still quite a few things to fix up, particularly with Rocktopus, but it's nice to see the full application working together on remote servers. While the Rails/Heroku setup was pretty straight forward, Rocktopus was uncharted territory for me.</p>

<p>I had never "launched" a Flask application before so this was all a bit new. As a (<em>temporary, I swear!</em>) measure I moved the files to my server over SFTP and started up a <a href="http://gunicorn.org/">Gunicorn</a> server to run the application. I still need to put Nginx in front of all of this but for now it works as expected (though I can't imagine it would handle much traffic). I'd also like to learn more about <a href="http://www.fabfile.org/">Fabric</a> for Python deployments. I've never been much of a sysadmin, so this was all a bit new to me.</p>

<p>The only really new thing I did for the Rails/Heroku app was add <a href="http://unicorn.bogomips.org/">Unicorn</a> as a server. Heroku has a <a href="https://devcenter.heroku.com/articles/rails-unicorn">great article</a> that held my hand through this setup.</p>

<p>Also, as part of this setup I've been playing around with <a href="https://slack.com/">Slack</a> and it's wonderful integrations for monitoring the app. So far I have it working with Heroku, PaperTrail, and Pingdom. Nothing's gone wrong yet, but I suppose that is to be expected when there are no users...</p>

<p>As I mentioned, there are still quite a few rough edges to be worked out, a bunch of minor features, and at least one major feature that still needs to be built but this feels like a big step in getting <a href="http://reclaboratory.com">RecLaboratory</a> launched and letting people try it out. We have some people in mind for VERY early alpha testers, but please let me know if you're interested in trying it out when it's ready!</p>
]]>
    </content>
    
    <category term="thingaweek" />
    
    <category term="reclab" />
    
  </entry>
  
  <entry>
    <title>Thing A Week 29 - Wedding Ring Box</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week-29-wedding-ring-box" rel="alternate" type="text/html" title="Thing A Week 29 - Wedding Ring Box" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week-29-wedding-ring-box</id>
    <published>2014-08-07T00:00:00-05:00</published>
    <updated>2014-08-07T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p><img src="../blog_media/ringbox_materials.jpg" class="inline_right" />
So, you may have noticed that I've missed the past few Thing a Week weeks. In my defense I did just get married last Saturday, so I've been pretty busy with wedding related travel and planning so I haven't had much time for extra projects. The wedding was amazing and I now have a wife, which is fun. In the spirit of the wedding I wanted to share a project that I worked on a while ago but didn't want to show until now.</p>

<p>For the wedding I wanted to build a ring bearer box out of an old book. After looking around some used bookstores I picked an old Tarzan book because 1) it seemed common enough that I didn't feel bad using it as materials and 2) it had a cool elephant on the cover. I wanted to hollow out part the inside pages and create inlays to hold the rings (like a secret flask holder but for wedding stuff).</p>

<p><img src="../blog_media/ringbox_slots.jpg" class="inline_left" />
I started by covering the covers in plastic (to avoid getting glue on them) painting the sides of the pages with puzzle glue in order to stick all the pages together. I did about 5 coats of this. Once that glue was dried I measured out the inlay and started carving pieces out using an Excato knife. This took a lot longer than expected and when I was down about half an inch, I coded the new inner wall with glue to give it a nice solid feel.</p>

<p>After I had my basic inlay I needed to dig out the slots for the actual rings. This was even more tricky. I thought I would be able to make clean cuts, like I did with the inlay but I ended up basically using the knife to turn the paper into pulp and then just digging the pulp out of the the slots.  After removing top page from the inlay, which had been pretty well torn up by all the digging I was left with a nice ring box.</p>

<p>The pages held the rings perfectly and I could even hold the box open and upside down without the rings falling out. The box was put to use by our ring bearer, Sui Chi, on Saturday and it looked great! This was a cool little project and it was fun to build something non-digital again. It really took a lot longer than I expected but the result was worth it.</p>

<p><img src="../blog_media/ringbox_finished.jpg" /></p>
]]>
    </content>
    
    <category term="thingaweek" />
    
    <category term="wedding" />
    
  </entry>
  
  <entry>
    <title>Thing A Week 28 - Not Much</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week-28-not-much" rel="alternate" type="text/html" title="Thing A Week 28 - Not Much" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week-28-not-much</id>
    <published>2014-07-22T00:00:00-05:00</published>
    <updated>2014-07-22T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>So most of this week I was traveling so I wasn't able to get very much work done on any projects. I did, however, attend an Indian wedding in Long Island which was really cool so the week was not a total loss.</p>

<p>The work I did get done earlier this week was mainly with the <a href="http://reclaboratory.com">RecLaboratory</a> interface to Rocktopus, our audio processing API. I built the interface to the <code>bounce_song</code> functionality, which will take all the individual tracks of a song and combine them into a single (probably .mp3) file.</p>

<p>I also set up a sort of hacky but effective, for now, "loading screen" to let users know that their audio is being uploaded/processes. It seems like a little thing but letting the page just hangs after clicking submit is really bad UI. This is a very early version of the product and we haven't given UI the full focus it needs but this was one thing that would be too awkward to not address early. It was a bit of an awkward fix because we're not actually doing the audio processing or uploading as a background process. Eventually I'll build a queuing/callback system in Rocktopus that will work much nicer, but this gets us going now.</p>

<p>This next week is another busy week. It is the last week in SF before we fly back to Chicago for the wedding (which is less than 2 weeks away now...).  If I get anything Thing A Week thing done this week it will probably be something wedding related.</p>
]]>
    </content>
    
    <category term="thingaweek" />
    
    <category term="reclab" />
    
  </entry>
  
  <entry>
    <title>Thing A Week 27 - Even More Sauropod</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week-27-even-more-sauropod" rel="alternate" type="text/html" title="Thing A Week 27 - Even More Sauropod" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week-27-even-more-sauropod</id>
    <published>2014-07-15T00:00:00-05:00</published>
    <updated>2014-07-15T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>Once again, another busy week divided between wedding stuff and side projects.</p>

<p>I spent this week adding more features to the <a href="http://reclaboratory.com">RecLaboratory</a> audio player and I feel like it's in a pretty good spot for now. Obviously, there's more I'd like it to do but it's certainly at a point where it will work for basic track and song playback.</p>

<p>Here's a list of new features that got added this week:</p>

<ul>
<li>Visual indicators on the in page play buttons to show what is playing in the global player</li>
<li>Some basic layout polish and player styling</li>
<li>Jump forward or back in the audio by clicking on the progress bar</li>
<li>Play/pause using the space bar</li>
<li>Some basic (if clunky) error checking to make sure files loaded</li>
</ul>

<p>One really interesting thing I found this week that I didn't expect is that audio playback is not interrupted by navigating around the site. If I reload the page the <code>sauropod.audio</code> object is empty and playback stops, but not if I'm just clicking links on the site. I haven't had time to explore it completely yet but I suspect it has something to do with either the way Rails caches JavaScript or with <a href="https://github.com/rails/turbolinks">TurboLinks</a>.</p>

<p>I'm really happy that is "just works" that way, I was worried that I would have to go back and turn this whole project into a single page app eventually to get uninterrupted playback, so this is a nice win. I do need to spend some time testing things to make sure I understand <strong><em>WHY</em></strong> it works. It seems dangerous to accidentally get a nice feature like this.</p>

<p>Like I said, while Sauropod is still a little rough around the edges, it's good enough to use for the site. I'm now moving on to fixing up the interface to Rocktopus for audio compression and song bouncing.</p>

<p>This week I'll be traveling to New York for a friend's wedding, so my Thing A Week time may be limited. Also I need to eventually finish writing the ceremony script for my wedding or else some people are going to be mad at me...</p>
]]>
    </content>
    
    <category term="thingaweek" />
    
    <category term="reclab" />
    
    <category term="javascript" />
    
  </entry>
  
  <entry>
    <title>Thing A Week 26 - More Sauropod</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week-26-more-sauropod" rel="alternate" type="text/html" title="Thing A Week 26 - More Sauropod" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week-26-more-sauropod</id>
    <published>2014-07-08T00:00:00-05:00</published>
    <updated>2014-07-08T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>Another 7 days, another busy week. With the wedding growing ever closer I've been squeezing in time for other projects wherever I can.  This week I managed to make some good progress on Sauropod by putting in some work before I go to work and on the plane while traveling to Chicago for the 4th.</p>

<p><img src="../blog_media/sauropod1.png" /></p>

<p>I got Sauropod hooked up into the asset pipeline of the <a href="http://reclaboratory.com">RecLab</a> Rails site and started attaching it to the various audio controls on the site. While <a href="https://github.com/goldfire/howler.js">Howler.js</a> handles loading the audio file and playing the sound in browser, I still needed to build all the hooks to control and monitor the audio.</p>

<p>At this point I am able to click a "play" button next to a track and have Sauropod load the song and update global play/pause button, display the name and owner of the track (with links), and display a progress bar and time progress. I also have a global mute/unmute working and started on global volume controls. Most of the controls and UI updates were just simple hooks into Howler and some jQuery for display manipulation, but the progress bar and timer were a little tricky. While a regular HTML5 audio player sends an <code>onprogress</code> event that you can listen for to control the progress display I had to write my own listener that starts an stops with the audio. It wasn't very hard, I just used a <code>setInterval()</code> function around my own <code>sauropod.updateProgress()</code> function:</p>

<pre><code class="ruby">
sauropod.play = function() {
  if (sauropod.audio.status != "playing") {
    _.each(sauropod.audio.tracks, function(s) {s.play()});
    sauropod.audio.status = "playing";
    sauropod.updatePlayer();
    sauropod.tid = setInterval(sauropod.updateProgress, 100);
  }
}

</code></pre>

<p>I still need to build all the hooks into playing a mutitrack song (though it should work based on how I've built the system) and then work on the track editing features (muting/level adjustments at a per-track level). I also need a bit more robust error handling and a cleaner UI, but all in all the audio player is coming along nicely.</p>

<p><strong>Thing A Week Progress Update</strong></p>

<p>So this week marks half a year of this "Thing A Week" project. It hasn't been exactly what I planned, one discrete project finished every week, but it has really keep me focused on building things and I've really enjoyed writing about my progress on all the things I've been working on.</p>
]]>
    </content>
    
    <category term="thingaweek" />
    
    <category term="reclab" />
    
    <category term="javascript" />
    
  </entry>
  
  <entry>
    <title>Thing A Week 25 - Sauropod and Wedding Stuff</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week-25-sauropod-and-wedding-stuff" rel="alternate" type="text/html" title="Thing A Week 25 - Sauropod and Wedding Stuff" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week-25-sauropod-and-wedding-stuff</id>
    <published>2014-06-30T00:00:00-05:00</published>
    <updated>2014-06-30T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>As seems to be the trend lately, last week was <strong>very</strong> busy. Between work stuff, wedding stuff, seeing a <a href="http://triassicparq.com/">musical</a>, and going to a <a href="http://verucasalt.com/">show</a> it was hard to find time to get extra things done.</p>

<p>Almost all of the weekend was devoted to knocking off extra wedding things, like designing take-home gifts for guests and buying a bunch of ties. There is a big list of things that we apparently need to do, but we're making good progress on it.</p>

<p>We had a really productive <a href="http://reclaboratory.com">RecLab</a> meeting on Tuesday where we worked out some good layout stuff and got the feed stuff into a good place. With the basic feed working, I am now able to move on to the audio player component: <strong>Sauropod</strong>.</p>

<p>Why is called Sauropod? Well a while ago I had to build an HTML5 based mp3 player for a job interview and I decided to call it 5auropod because 'sauropod' kind of sounded like 'iPod" and the '5' because of HTML5. Also <a href="http://en.wikipedia.org/wiki/Sauropoda">sauropods</a> are cool, enormous dinosaurs. When I started working on a player for RecLab I wanted to use the same name, but I was worried about starting JavaScript variables with a number so I just used "Sauropod". Convoluted, I know, but it makes sense to me.</p>

<p>Right now Sauropod is in it's VERY early stages, mainly just building out method names to architect the system. The basic idea is to build a library to work with songs and tracks that contain metadata and possibly multiple audio tracks that need to be played simultaneously or adjusted individually. I'm using <a href="https://github.com/goldfire/howler.js">Howler.js</a> to handle most of the audio heavy lifting. It's been pretty awesome so far. I'm also trying out <a href="http://underscorejs.org/">Underscore.js</a> to give me a bit of functional programming in JavaScript. This is mainly to make working with arrays nicer, which I will have to do quite a bit with the arrays of Howler.js Sounds that make up songs.</p>

<p>Sauropod is still in it's very early stages, but I have a pretty good architecture planned out and I'm excited to see it develop.</p>
]]>
    </content>
    
    <category term="thingaweek" />
    
    <category term="reclab" />
    
    <category term="javascript" />
    
    <category term="wedding" />
    
  </entry>
  
  <entry>
    <title>Thing A Week 24 - RecLab Feed</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week-24-reclab-feed" rel="alternate" type="text/html" title="Thing A Week 24 - RecLab Feed" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week-24-reclab-feed</id>
    <published>2014-06-23T00:00:00-05:00</published>
    <updated>2014-06-23T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>This was another busy week but I manged to get some solid work done on <a href="http://reclaboratory.com">RecLaboratory</a> stuff. </p>

<p>First I took some pictures to use as a cover photo on our <a href="https://twitter.com/reclaboratory">Twitter</a> and <a href="https://www.facebook.com/reclaboratory">Facebook</a> pages. This ended up being a big project that involved moving a bunch of my music equipment around and finding a clear area in my small apartment. I am not a great photographer but I'm pleased with how it looks.  Feel free to follow/friend us on either. We're starting to post things.</p>

<p>Last Wednesday night I just couldn't sleep so I stayed up until 2:30 and knocked off a few bugs around comments but the major work I got done this week was around the event feed. I knew I couldn't just rig something together with a bunch of ugly table JOINs I ended up using the <a href="https://github.com/pokonski/public_activity">public_activity</a> gem.  It listens for controller actions and makes an entry in a separate table for every event I want to show up in the feed. Most of our events are just the result of object creation and public_activity handles this really well right out of the box.</p>

<p>Right now I just have basic events around Users, Comments, Tracks, and Songs and I need to clean up how I'm using the public_activity <code>params</code> hash to avoid some n+1 database call issues but so far it's made it really easy to build feeds on User, Track, and Song pages. I'm working on building the main homepage feed now, which is proving a little trickier. Obviously I'd like to do this with a single call to the <code>Activities</code> model but because it's tracking polymorphic objects, the SQL is taking some work.</p>

<p>I'm hoping to have the feed stuff done by next week and start setting up a non-local version of the Rails site + Rocktopus soon. Then I have BUNCH of WebAudio stuff to work on around the player/audio tools. Oh, and I should probably be planning my wedding at some point too...</p>

<p><strong>bonus thing</strong></p>

<p>I actually drew a real comic this week, one where I penciled and inked and everything. <a href="http://mountsaintawesome.com/comic.php?id=87">Check it out</a>!</p>
]]>
    </content>
    
    <category term="thingaweek" />
    
    <category term="reclab" />
    
    <category term="ruby" />
    
  </entry>
  
  <entry>
    <title>Thing A Week 23 - Bird Watcher Display</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week-23-bird-watcher-display" rel="alternate" type="text/html" title="Thing A Week 23 - Bird Watcher Display" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week-23-bird-watcher-display</id>
    <published>2014-06-17T00:00:00-05:00</published>
    <updated>2014-06-17T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>This weekend Eileen was out of the house for her bachelorette party so I tried to knock out a few outstanding wedding related projects (apparently that is coming up pretty quickly). The <a href="../blog/thing-a-week-4-bird-watcher">Bird Watcher</a> project had been dragging on for a while so I thought this would be a good time to wrap it up, too.</p>

<p>For those who don't remember, Bird Watcher is a system that listens for photos with certain #hashtags and displays them to a live page. I plan to use it to let people take pictures during our wedding and show them on a projector during the reception.</p>

<p>This project has spanned a few <a href="../blog/thing-a-week-4-bird-watcher">Thing</a> <a href="../blog/thing-a-week-5-bird-watcher-part-2">A</a> <a href="../blog/thing-a-week-12-filterfilter">Week</a> posts and involved playing with the <a href="https://dev.twitter.com/">Twitter</a> and <a href="http://instagram.com/developer/">Instagram</a> APIs, as well as learning a bit more about Postgresql and the Sequel gem.</p>

<p>At this point most of the hard work had been done. I have Twitter and Instagram listeners (which both work in very different ways) that store info about photo posts in a database. I just needed to write something to pull them out and display them.</p>

<p>Originally I had written some nice code for prioritizing new photos and minimizing database calls but that ended up being a scoping pain in the ass in Sinatra. I would have had to build some sort of session object persistence system and honestly, the scale of this project just wasn't worth it.</p>

<p>I ended up with a simple AJAX loop on a timer that pulls a random "photo card" with the image and some information about it, and displays it on a page that should work nicely full screened on a projector. I still need to run some tests to make sure I don't get any weird image sizes but it's working well right now.</p>

<p>I'm a little worried that I'll spend part of my own wedding reception tweaking code or sshing into my server to restart some service, but I think everything should run pretty smoothly. This was a fun little project and made me play with some new technologies. Hopefully lots of people use it at the wedding.</p>
]]>
    </content>
    
    <category term="thingaweek" />
    
    <category term="wedding" />
    
    <category term="ruby" />
    
  </entry>
  
  <entry>
    <title>Thing A Week 22 - Reclab Routing</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week-22-reclab-routing" rel="alternate" type="text/html" title="Thing A Week 22 - Reclab Routing" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week-22-reclab-routing</id>
    <published>2014-06-10T00:00:00-05:00</published>
    <updated>2014-06-10T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>This was a pretty busy week. I ended up flying back to Chicago on Thursday for my bachelor party, which was really awesome! These good times didn't leave a lot of time for building things but I managed to get some interesting routing work done on the Reclab site.</p>

<p>I want Reclab to namespace songs and tracks by username, similar to the way Github namespaces <a href="https://github.com/dorkrawk/darwinning">repos</a>. Obviously I also want to use nice identifiers for the resources rather than just id numbers, so I started by setting up <a href="https://github.com/norman/friendly_id">FriendlyId</a>, which is a great gem for this sort of thing.</p>

<p>What's really cool about FriendlyId is that it can generate a slug that is unique across multiple fields in the object. For example, I want to allow user1 and user2 to both be able to have a song name "My Song One" so I want the path to each song to be something like <code>user1/songs/my-song-one</code> and <code>user2/songs/my-song-one</code>. Note that the song identifier "my-song-one" is only locally unique, not globally unique. To do this FriendlyId lets you scope slugs:</p>

<pre><code class="ruby">extend FriendlyId
friendly_id :name, use: [:slugged, :finders, :scoped], scope: :user
</code></pre>

<p>Then, in order to get things to work with ActiveAdmin I had to make Songs "owned" by Users. If you don't do this, ActiveAdmin tries to use the FriendlyId slug as a globally unique identifier. This is an easy fix in the <code>/admin/song.rb</code>:</p>

<pre><code class="ruby">ActiveAdmin.register Song do
  belongs_to :user
</code></pre>

<p>I still need to clean up the routing in the rest of the app but this was a big step forward to some nicer paths.</p>
]]>
    </content>
    
    <category term="thingaweek" />
    
    <category term="reclab" />
    
  </entry>
  
  <entry>
    <title>Thing A Week 21 - Wedding Invitations</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week-21-wedding-invitations" rel="alternate" type="text/html" title="Thing A Week 21 - Wedding Invitations" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week-21-wedding-invitations</id>
    <published>2014-06-03T00:00:00-05:00</published>
    <updated>2014-06-03T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>This seems like a bit of a cop out but when I thought back to what took up most of my time last week it turns out, it was putting together and mailing out wedding invitations.</p>

<p><img src="../blog_media/wedding_thankyous.jpg" class="inline_right" />
Again, this is sort of cheating because most of the creative work was done by our very talented friend <a href="http://www.debbysu.com/">Debby</a>. After listening to our asinine ideas she designed awesome invitations, RSVP cards, and thank you cards.</p>

<p>Then it was our job to pick out paper and envelopes and all that other stuff (which is a much bigger ordeal than I had ever imagined). Eileen and I both took a morning off of work just to talk to paper stores and printers. It was exhausting.</p>

<p>Once everything was actually printed on fancy paper we had to do all sorts of crafty things like tie twine around the jackets that hold the invitation and RSVP card, addressed all the envelopes, print return address labels, and puts stamps on everything. None of it was particularly hard (except for maybe addressing everything, but Eileen did that because my handwriting is illegible) but it just took a LONG TIME.</p>

<p>On Saturday morning we got everything mailed out, which felt good. This was a much bigger project than I expected it to be, but they turned out really cool.</p>
]]>
    </content>
    
    <category term="thingaweek" />
    
    <category term="wedding" />
    
  </entry>
  
  <entry>
    <title>Thing A Week 20 - RecLab Layouts and Rocutopus Connection</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week-20-reclab-layouts-and-rocktopus-connection" rel="alternate" type="text/html" title="Thing A Week 20 - RecLab Layouts and Rocutopus Connection" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week-20-reclab-layouts-and-rocktopus-connection</id>
    <published>2014-05-25T00:00:00-05:00</published>
    <updated>2014-05-25T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p><img src="../blog_media/reclab_screen2.png" class="inline_right" />
This week I ended up getting quite a bit of RecLab work done, especially for a shortened week.</p>

<p>The major breakthrough was getting the Rails site talking to Rocktopus, the audio processing API I've been writing. It's not perfect but it has some basic authentication and the Rails Track model gets updated based on the response from Rocktopus. This is all just working locally right now but it shouldn't be hard to set up a server to server connection once I have Rocktopus deployed somewhere.</p>

<p>The other large chunk of work I got done was due to being home alone this weekend. With Eileen hanging out with friends in Napa I decided to start working on the first real site layouts. I made great progress on the user profile pages and started doing some of the url rewriting work. I considered dropping <a href="http://getbootstrap.com/">Bootstrap</a> in favor of <a href="http://bourbon.io/">Bourbon/Neat/Bitters</a> after exploring the latter libraries at work but I think for what we're trying to build right now Bootstrap will get us up and running much faster.</p>

<p>As always, there's still a lot of work to be done but it felt good to make some serious progress this week. Again, if you are interested in this project head over to <a href="http://reclaboratory.com">reclaboratory.com</a> and enter your email. We'll get in touch with you when we're ready to start letting people try the site.</p>
]]>
    </content>
    
    <category term="thingaweek" />
    
    <category term="reclab" />
    
  </entry>
  
  <entry>
    <title>Thing A Week 19 - RecLab Online Presence</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week-19-reclab-online-presence" rel="alternate" type="text/html" title="Thing A Week 19 - RecLab Online Presence" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week-19-reclab-online-presence</id>
    <published>2014-05-21T00:00:00-05:00</published>
    <updated>2014-05-21T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>So this Thing a Week post is late because I was out of town from last Saturday until late yesterday night.</p>

<p>While I did make some progress on getting the RecLab Rails application to connect to Rocktopus (our audio processing library) the main thing we got accomplished last week was setting up our RecLab presence online.</p>

<p>A major part of this was building out a Launchrock page to point our domain at. So now if you go to <a href="http://reclaboratory.com">reclaboratory.com</a> you actually see something! Right now we're just collecting email addresses, but building this out helped us think through some basic service descriptions, a tagline, and formalizing how to write the name. It's officially <strong>RecLaboratory</strong>. Note the capital 'R' and 'L'. It took us a surprising amount of discussion to decide on this convention.</p>

<p>We also cleaned up our <a href="https://www.facebook.com/reclaboratory">Facebook</a>, <a href="https://twitter.com/reclaboratory">Twitter</a>, and <a href="http://instagram.com/reclaboratory">Instagram</a> accounts, so those are ready to be used.</p>

<p>Feel free to follow us at any of those places as we'll be starting to use them soon.</p>
]]>
    </content>
    
    <category term="thingaweek" />
    
    <category term="reclab" />
    
  </entry>
  
  <entry>
    <title>Thing A Week 18 - Wine Women and Song Cover</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week-18-wine-women-and-song-cover" rel="alternate" type="text/html" title="Thing A Week 18 - Wine Women and Song Cover" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week-18-wine-women-and-song-cover</id>
    <published>2014-05-11T00:00:00-05:00</published>
    <updated>2014-05-11T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p><img src="../blog_media/recording3.jpg" class="inline_right" />
I didn't really plan to do anything outside of RecLab work this week but yesterday I got in the mood to play and record some music so I ended up with a new recording for this week's thing.</p>

<p>Eileen and I have been talking about doing more recording together (as Packets and Waves) and after a recent Hurray For the Riff Raff show, we were in the mood to do some old country songs. We settled on doing a cover of Loretta Lynn's <a href="https://www.youtube.com/watch?v=7Wj_vD20N-Q">Wine Women and Song</a>. It's a short, simple song (which was important because we started learning it at about 11:30pm on Saturday night) and I just like the phrase "wine, women, and song".</p>

<p><img src="../blog_media/recording2.jpg" class="inline_left" />
We didn't want to it be an exact copy of the original so I tried to give it a dirty Black Keys-ish guitar sound and keep the guitar part pretty simple. I resisted to urge to layer on a bunch of random instruments and only used guitar, bass, and drums for most of the song. The piano was only added in the chorus and solo sections, even though I tried a few takes where I recorded some sporadic piano comping throughout the whole. In the end, the stripped down version just sounded cooler.</p>

<p>I'm really coming around the the virtual drummer in Logic Pro. At first I really resisted the idea of letting the software "write" my drum parts for me, but the sound is <em>so</em> much better than MIDI drums and I can actually get some interesting parts. For this song I used "Logan" with a retro sounding kit. I thought the tom driven verses worked out really well.</p>

<p>Eileen's vocals turned out nicely, as usual. I was tempted to dirty up the vocal recording with a tube mic simulator, but I ended up just using a simple "out of the box" compressor effect, which sounded fine.</p>

<p>This ended up being a really fun little project. It only took a few hours from idea to finished product and the result was really satisfying. Enjoy our cover of <a href="https://soundcloud.com/dorkrawk/wine-women-and-song">Wine Women and Song</a>!</p>

<iframe width="100%" height="166" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/149068054&color=ff5500&auto_play=false&hide_related=false&show_artwork=true"></iframe>
]]>
    </content>
    
    <category term="thingaweek" />
    
    <category term="music" />
    
    <category term="cover" />
    
  </entry>
  
  <entry>
    <title>Thing A Week 17 - RecLab and Drawing Class Update</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week-17-reclab-and-drawing-class-update" rel="alternate" type="text/html" title="Thing A Week 17 - RecLab and Drawing Class Update" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week-17-reclab-and-drawing-class-update</id>
    <published>2014-05-05T00:00:00-05:00</published>
    <updated>2014-05-05T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>This week, while I was busy with the first week of my new job, I did manage to get some RecLab work done. Also, I'm a few weeks into my drawing class, so I wanted to post an update from that.</p>

<p>While not the most productive RecLab week, I did finish the basic comment functionality for Users, Songs, and Tracks. I also learned about <code>seed.rb</code> and wrote some seed code for the Instruments data. The trick there was that I wanted to be able to run <code>rake db:seed</code> multiple times, so I needed seed code that would let me update or create records. I ended up with a nice solution that lets me break the instruments down into separate arrays by family and then loop through everything to create or update:</p>

<pre><code class="ruby">instruments = [[strings, "strings"], [woodwinds, "woodwinds"], [brass, "brass"], [percussion, "percussion"], [keys, "keys"], [other, "other"]]

instruments.each do |f|
  f[0].each do |i|
    instr = Instrument.where(name: i).first_or_initialize
    instr.family = f[1]
    instr.save!
  end
end
</code></pre>

<p>Now I'll need to use a tagging system to attach both Instruments and general Tags to objects. I'm leaning toward <a href="https://github.com/mbleigh/acts-as-taggable-on">As Taggable On</a>, which apparently was written by an old childhood friend of mine. Awesome!</p>

<p><img src="../blog_media/drawing02.jpg" class="inline_right" />
The art class is going well. Value and shading are still pretty tough for me because I've spent the last few years just doing line drawings for comics. I also have a tendency to draw pretty lightly (which is probably also a result of erasing pencil lines for comics). I don't think I'll leave this class a brilliant artist, but but I'm certainly learning things and getting better.</p>
]]>
    </content>
    
    <category term="thingaweek" />
    
    <category term="reclab" />
    
    <category term="art" />
    
  </entry>
  
  <entry>
    <title>Thing A Week 16 - No Thing Again</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week-16-no-thing-again" rel="alternate" type="text/html" title="Thing A Week 16 - No Thing Again" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week-16-no-thing-again</id>
    <published>2014-04-28T00:00:00-05:00</published>
    <updated>2014-04-28T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>Once again I didn't have a great Thing a Week week. I actually didn't even get to the point of planning a project for the week. But I did accomplish one thing: <strong>I got a new job</strong>.</p>

<p>I spent a bunch of time this week prepping for and going on interviews and on Thursday I accepted a position as a Senior Full-Stack Engineer at <a href="https://www.couchsurfing.org/">Couchsurfing</a>. Today was my first day and so far it's an awesome gig. The office is amazing, it's full of dogs, and I get lunch and dinner provided everyday by the staff chefs. The work seems like it will be a lot of fun too. I'm doing Rails development and it seems like I'll be able to have a lot of say in how the product gets architected.</p>

<p>While it wasn't the most productive Thing a Week week, getting a new job certainly qualifies this as a pretty productive life week.</p>
]]>
    </content>
    
    <category term="thingaweek" />
    
  </entry>
  
  <entry>
    <title>Thing A Week 15 - RecLab Song Collaboration</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week-15-reclab-song-collaboration" rel="alternate" type="text/html" title="Thing A Week 15 - RecLab Song Collaboration" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week-15-reclab-song-collaboration</id>
    <published>2014-04-21T00:00:00-05:00</published>
    <updated>2014-04-21T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p><img src="../blog_media/reclab_screen1.png" class="inline_right" />
Once again this was another week where my main productivity was with RecLab. I'm back to mainly working on the Rails application now, focusing on building out some of the song access features.</p>

<p>Our big breakthrough this week was being able to actually collaborate on a song using RecLab. Bobby and I were able to record tracks on our individual computers, create new tracks in RecLab, and combine them together into a song. The process was pretty clunky and the interface is still very sparse but it felt like a big step to use the product for its intended purpose.</p>

<p>There is still lot of work to be done before we can even start letting other people try the product but hitting these little milestones feels good.</p>
]]>
    </content>
    
    <category term="thingaweek" />
    
    <category term="reclab" />
    
  </entry>
  
  <entry>
    <title>Thing A Week 14 - Drawing Class</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week-14-drawing-class" rel="alternate" type="text/html" title="Thing A Week 14 - Drawing Class" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week-14-drawing-class</id>
    <published>2014-04-14T00:00:00-05:00</published>
    <updated>2014-04-14T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p><img src="../blog_media/drawing01.jpg" class="inline_right" /></p>

<p>This week I started something new. I'm taking a Drawing 101 class at <a href="http://rootdivision.org/">Root Division</a> art studio in the Mission. I've been <a href="http://mountsaintawesome.com">drawing comics</a> for a few years now, it seems like I should start learning how to draw.</p>

<p>The class seems like it's going to cover the basics and have us work mainly with graphite and charcoal. I think it will be really good for me to take a step back and really learn some of these fundamentals. I haven't had any formal art training since Jr. High, so I'm about due. I really feel like my comic art has started to hit a wall and I'm having a hard time getting some ideas down on to paper.</p>

<p>The drawing above is the first thing our instructor had us do: first draw an apple from memory, then he put an apple on the table for us to draw. Apples are kind of hard to draw.</p>

<p>Hopefully I'll have some more impressive work from this class to post in the future.</p>

<p><strong>bonus thing!</strong></p>

<p>Eileen got me a copy of Logic Pro X for my birthday and so the first thing I did with it was play with all the amp models and pile a bunch of guitar parts on top of each other. The <a href="https://soundcloud.com/dorkrawk/guitar-pile">resulting 30 second piece</a> ended up sounding like some kind of epic video game music: </p>

<iframe width="100%" height="166" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/144725898&color=ff5500&auto_play=false&hide_related=false&show_artwork=true"></iframe>
]]>
    </content>
    
    <category term="thingaweek" />
    
    <category term="art" />
    
  </entry>
  
  <entry>
    <title>Thing A Week 13 - RecLab and Rocktopus</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week-13-reclab-and-roctopus" rel="alternate" type="text/html" title="Thing A Week 13 - RecLab and Rocktopus" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week-13-reclab-and-roctopus</id>
    <published>2014-04-06T00:00:00-05:00</published>
    <updated>2014-04-06T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p><img src="../blog_media/reclab2.png" class="inline_right" />
This week was another mainly RecLab week. Actually I didn't get much done on the RecLab Rails site outside of updating the look and feel with the new logo we've settled on (shown here...). I spent most of my time on our audio processing API, Rocktopus.</p>

<p>The Rocktopus work has been going well. It's nice to get back into writing some Python again and I've been enjoying working with Flask. One of my favorite recent additions is the <code>require_auth</code> decorator. Python decorators are pretty awesome and make it really simple to roll some common functionality into several methods.</p>

<p>This allows me to write Flask endpoints like this:</p>

<pre><code class="python">@app.route('/path_name', methods=['POST'])
@require_auth
def path_method():
  # do a bunch of stuff for this endpoint
  # but make sure the POST body contains the proper authentication
</code></pre>

<p>The decorator itself is pretty simple and works something like this:</p>

<pre><code class="python">def require_auth(f):
    @wraps(f)
    def wrapped(*args, **kwargs):
        data = request.get_json(force=True)
        if not validate_auth(data):
            return response_arm.auth_fail() # return 401

        return f(*args, **kwargs)
    return wrapped
</code></pre>

<p>Rocktopus is really coming along nicely and I'm really close to getting it hooked up to the Rails site soon.</p>

<p>This week I start my drawing classes. I haven't had any formal art training since grade school and it seemed time to learn a bit more about drawing, given my interest in comics, so I signed up for a Drawing 101 course at a local art studio. Hopefully I'll have some cool work from the class over the next few weeks to show off in these posts.</p>
]]>
    </content>
    
    <category term="thingaweek" />
    
    <category term="python" />
    
    <category term="reclab" />
    
  </entry>
  
  <entry>
    <title>Thing A Week 12 - FilterFilter</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week-12-filterfilter" rel="alternate" type="text/html" title="Thing A Week 12 - FilterFilter" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week-12-filterfilter</id>
    <published>2014-03-30T00:00:00-05:00</published>
    <updated>2014-03-30T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>So this week I actually made a thing. Back in week's <a href="../blog/thing-a-week-4-bird-watcher">4</a> and <a href="../blog/thing-a-week-5-bird-watcher-part-2">5</a> I was working on a project to listen to Twitter for pictures with a certain #hastag so I could display them at our wedding. I also wanted to build something similar for Instagram and have it feed into the same database. This became FilterFilter.</p>

<p>The <a href="http://instagram.com/developer/">Instagram API</a> works differently than Twitter's. In order to get real-time information you have to register a callback endpoint with Instagram. This endpoint has to respont to a GET call with a validation code sent by Instgram and then respond to POST with whatever you want. Instagram only notifies you of an event (such as a photo being posted with a certain #hashtag), they don't actually provide the media info, so you have to find that yourself, which is a bit annoying and kind of clunky.</p>

<p>Here is the Sinatra code you might used to create the GET and POST endpoints to register and use the Instagram API:</p>

<pre><code class="ruby">get '/instagram_stuff' do
  params['hub.challenge'] # for when you register your callback endpoint
end

post '/instagram_stuff' do
  # do stuff when Instagram tells you something 
  #    new has been posted
end
</code></pre>

<p>I was able to use a lot of the code I wrote for <a href="https://github.com/dorkrawk/bird-watcher">BirdWatcher</a> (the Twitter listener) to store this info, so that was nice. I still need to write a front end to display all of these photos but that will be done some other week. It would be nice to bundle all of this together and create some sort of product for people where they provide a hashtag or keyword and I provide a nice display of photos from various services with those keywords. Maybe someday, when I have time to clean up this code a bit.</p>

<p>Of course I spent time this week working on RecLab, too. I got some S3 stuff set up and built out a few site forms. We were able to get a rough prototype of the basic track uploading and song creation functionality, which was fun to see. I also spent a bit of time working on our audio processing API. It's starting to come together and it's been very interesting designing something like this from the ground up.</p>

<p>To help us learn more about the types of people who might use RecLab I've put together a quick 10 question survey. If you are a musician, please take a minute and fill this out, it would be a big help! <a href="https://www.surveymonkey.com/s/DPLMSMV">RecLab Musician Survey</a></p>
]]>
    </content>
    
    <category term="thingaweek" />
    
    <category term="ruby" />
    
    <category term="wedding" />
    
    <category term="tech" />
    
  </entry>
  
  <entry>
    <title>Thing A Week 11 - More RecLab</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week-11-more-reclab" rel="alternate" type="text/html" title="Thing A Week 11 - More RecLab" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week-11-more-reclab</id>
    <published>2014-03-24T00:00:00-05:00</published>
    <updated>2014-03-24T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>Once again this week's work was devoted more to a long term project than to anything that could be finished in 7 days. I put more work into the site and the audio processing tools for RecLab and we've been doing some good planning, too.</p>

<p>The site is pretty straight forward Rails, so far. Nothing too out of the ordinary there. I'm starting to get deeper into the music objects and business logic of the site, which is fun. I've also been working a bit with Flask as a wrapper around some of the audio processing stuff. After <a href="../blog/thing-a-week-7-flask">Week 7</a> I had been looking for a good Flask project and now I've found one! I've found some great resources on building good APIs in Flask, such as <a href="http://pycoder.net/bospy/presentation.html">this one</a> which have been really helpful for designing non-trivial stuff. I have a bit of experience building APIs with a micro web framework from building the <a href="https://github.com/dorkrawk/unofficial-fitocracy-runs-api">Unofficial Fitocracy Runs API</a> in Sinatra, but this will be a bit more complex than that.</p>

<p>Hopefully we'll have something that I can actually show off soon. We'll certainly need early testers. I do still hope to have work on a few small projects that I can show off from week to week.</p>
]]>
    </content>
    
    <category term="thingaweek" />
    
    <category term="reclab" />
    
  </entry>
  
  <entry>
    <title>Thing A Week 10 - RecLab Site</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week-10-reclab-site" rel="alternate" type="text/html" title="Thing A Week 10 - RecLab Site" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week-10-reclab-site</id>
    <published>2014-03-17T00:00:00-05:00</published>
    <updated>2014-03-17T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>Once again I feel like I'm stretching the rules of A Thing a Week (which is ok because I sort of just made them up). This week I focused on starting the website for a new larger project I've started working on with a friend. We're trying to build a good way for musicians to collaborate online. There are a few things out there trying to address something similar to this, but none of them seem to have serious traction and it looks like there's a lot of room for refinement.</p>

<p><img src="../blog_media/reclab1.png" class="inline_right" />
This week we did a lot of planning and architecture for the project and I started building the Rails application for the site. This is my first non-trivial Rails 4 project and it's been interesting to see some of the little differences. The biggest one I've come across so far is the removal of <code>attr_accessible</code> and moving that functionality into the controller. I need to learn a bit more about how that totally works but so far I've been able to use a lot of what I learned building Rails 3.2 stuff.</p>

<p>I've been really impressed with the Rails 4 gem compatibility, as well. Major stuff I like to use such as <a href="https://github.com/plataformatec/devise">Devise</a>, <a href="https://github.com/gregbell/active_admin">Active Admin</a>, and <a href="https://github.com/thoughtbot/paperclip">Paperclip</a> are all working just fine. Python could <a href="http://python3wos.appspot.com/">learn a lot</a> here!</p>

<p>This week I was able to get the basic site together, make it look nice enough to work in for a while, build basic user/user profile and login functionality, and start building out some of the core business logic for working with recorded tracks. I also started putting together some survey questions so, musician friends, expect to be bugged to be asked questions soon. It might be a little while before we have an actual site for people to try but I'm always interested in talking with people about the idea.</p>

<p>Now I need to balance working on this with doing a couple other single-week projects, especially the stuff that is needed for the wedding.</p>
]]>
    </content>
    
    <category term="thingaweek" />
    
    <category term="reclab" />
    
  </entry>
  
  <entry>
    <title>Thing A Week 9 - No Thing</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week-9-no-thing" rel="alternate" type="text/html" title="Thing A Week 9 - No Thing" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week-9-no-thing</id>
    <published>2014-03-10T00:00:00-05:00</published>
    <updated>2014-03-10T00:00:00-05:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>So this week was not a good Thing a Week week. I had planned to build the Instragram listener to go along with the Bird Watcher project I was working on a few weeks ago, but I ended up sort of bouncing around between a few ideas instead. This is a bit against the "Thing a Week" idea where I complete something every week rather than randomly playing around with stuff to no clear end.</p>

<p>That said I did git a bit of work done in a few areas. </p>

<p>I started the Instagram work and learned a bit more about how their streaming API works. It looks like I'll need to build a callback endpoint to take in post info and store things in a database and then Instagram will handle most of the hard work. I'll probably just end up building the callback endpoint as part of the exiting daveandeileen.com <a href="https://github.com/dorkrawk/daveandeileen_site">Sinatra application</a>.</p>

<p>I also spent some time doing a bit of research on audio processing libraries for another project I'm planning. As of now I'm leaning towards <a href="http://pydub.com/">PyDub</a>. Hopefully I'll have some work from that project to post soon.</p>

<p>Finally, I'm planning to build a ring box for our wedding out of an old book (kind of like <a href="http://cdn0.pairswellwithfood.com/wp-content/uploads/2012/11/Pommes-Frites-Flask-Book-Holder.jpg">this</a>, but with wedding rings). I was able to find a book I like at a used bookstore this weekend, so I consider that a small win.</p>

<p>This wasn't a great Thing a Week week, but at least I got a few productive things done.</p>
]]>
    </content>
    
    <category term="thingaweek" />
    
  </entry>
  
  <entry>
    <title>Thing A Week 8 - In The Garage Cover</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week-8-in-the-garage-cover" rel="alternate" type="text/html" title="Thing A Week 8 - In The Garage Cover" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week-8-in-the-garage-cover</id>
    <published>2014-03-03T00:00:00-06:00</published>
    <updated>2014-03-03T00:00:00-06:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>I had a little bit of trouble picking my project this week. Originally I had planned to continue working with Flask, but I was just at a loss for a small web app project idea. I had been playing around with some Weezer songs while playing guitar one morning so I decided to record a cover of <a href="http://www.rdio.com/artist/Weezer/album/Weezer/track/In_The_Garage/">In The Garage</a> for this week's thing. If you don't feel like reading this to get all the way down to the Soundcloud player here's <a href="https://soundcloud.com/dorkrawk/in-the-garage-cover">a link</a>.</p>

<p>I was pretty faithful to the original, mainly just taking some liberties with instrumentation in a few parts. I really like the dirty guitar and bass in song so I found some amp models that kept with that style. I did swap out the harmonica riff for a thin, high piano part over a crunchy bass. I really liked the hollow sound it created and it felt in line with my tendency to add keys to things. In that same vein, I used some synth in a few parts as well, replacing the little guitar riff in the verse and working with the guitar in the solo.</p>

<p>I actually had a lot of fun with the solo, again staying pretty true to the original but taking some liberties here and there. The synth was a fun addition and really beefed things up. I ended up falling back on some blues riffing during the end of the solo because I'm just not as metal as Rivers.</p>

<p>Again I used Garageband's Drummer feature for the drums. I spent a bit of time dialing them in and I was pleased with how they turned out. While laying out the song I did discover that Garageband doesn't let you change time signatures in the middle of a song. There is a single measure of 2/4 time in the verse so I had to just offset thing. I was worried that the automated drumming would sound weird around this change, but it ended up being fine.</p>

<p>The vocals... This is always tough for me. The verses turned out ok. They're pretty straight forward and in my range but the chorus was tough. Some of the high notes were a big of a strain for me and in general the choruses felt a bit lack luster. I just don't know how to get more character out of my voice. The last chorus with the high harmonies was especially difficult. I was <em>really</em> straining my voice there. As always, doing stuff like this is great practice and helps me improve so I just need to keep that perspective.</p>

<p>I wasn't especially pleased with the mixing and production on this song. I felt a bit rushed because I started working on this a little later in the week. I had recorded some of the guitar parts in a chopped up way and I can hear some lack of fluidity. None of the parts were difficult enough to get right to justify this type of recording but I was just in a rush to get something down. In general I think things just feel a bit choppy, but I suppose that's the price of doing things on a time crunch.</p>

<p>All in all, it was a fun project and it's alway nice to spend time recording.  Enjoy:</p>

<iframe width="100%" height="166" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/137828215&color=ff5500&auto_play=false&hide_related=false&show_artwork=true"></iframe>

<p><strong>bonus thing!</strong></p>

<p>I also posted a comic to <a href="http://mountsaintawesome.com/">Mount Saint Awesome</a> this week (the first in quite a while). It didn't feel like a big enough art project to be a full Thing a Week thing, but it's still worth <a href="http://mountsaintawesome.com/comic.php?id=78">checking out</a>.</p>
]]>
    </content>
    
    <category term="thingaweek" />
    
    <category term="music" />
    
    <category term="weezer" />
    
    <category term="cover" />
    
  </entry>
  
  <entry>
    <title>Thing A Week 7 - Flask</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week-7-flask" rel="alternate" type="text/html" title="Thing A Week 7 - Flask" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week-7-flask</id>
    <published>2014-02-24T00:00:00-06:00</published>
    <updated>2014-02-24T00:00:00-06:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>Now, in my defense I was pretty sick for most of last week so I ended up not getting much done outside of work besides a lot of napping. I started with a vague plan to do <em>something</em> with <a href="http://flask.pocoo.org/">Flask</a>, the Python micro-webframework and to that end I succeeded in what I set out to do. It had been a while since I had done anything serious with Python and I've been feeling the urge to get back into it.</p>

<p>I ended up spending a lot of time just getting my Python development environment set up. Apparently it's been so long since I've done anything non-trivial in the language that I didn't even have basic tools set up well on this computer. I wanted to do things right and that took a bit of installing and uninstalling through various channels to get things just so. This meant Python installed threw Homebrew and then using that version of <code>pip</code> to install <code>virtualenv</code>. This way I didn't have to use <code>sudo</code> to install <code>virtualenv</code>. While this ended up being more frustrating than it should have been (and at one point led to me asking a <a href="http://stackoverflow.com/questions/21917619/error-with-installing-virtualenv-with-pip-and-homebrew">Stack Overflow question</a> that I later answered for myself) I did get things set up nicely, which is a major win.</p>

<p>Once I got down to setting up Flask thing were pretty smooth. For the basic stuff I was doing it felt very similar to Sinatra, which I've worked with quite a bit. I finally got to use Python's method decorators in practice which was neat (they drive the routing around the functions related to the routes).</p>

<p>The end result was a pretty basic first test site. Nothing really worth putting up anywhere. I'd like to keep playing with Flask and get a bit more reacquainted with Python so unless I have another burning project come up, I might just stick with it this week too.</p>
]]>
    </content>
    
    <category term="thingaweek" />
    
    <category term="python" />
    
    <category term="tech" />
    
    <category term="flask" />
    
  </entry>
  
  <entry>
    <title>Thing A Week 6 - Piano and Bass Song</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week-6-piano-bass-song" rel="alternate" type="text/html" title="Thing A Week 6 - Piano and Bass Song" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week-6-piano-bass-song</id>
    <published>2014-02-17T00:00:00-06:00</published>
    <updated>2014-02-17T00:00:00-06:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>I think that it's fair to call this Thing A Week a failure and I don't really have a great excuse. I set out to write a song that revolved around the piano and bass and I ended up with a nice riff that didn't go anywhere.</p>

<p>This tends to happen to me a lot. My Garageband folder is full of 30 second long riffs and fleshed out song chunks, but I often hit a wall and I'm not sure where to go from there. Last week I sat down and tried writing some stuff influenced by a couple songs that either did piano and bass or just bass licks well. The main ones I referred to were <a href="http://www.rdio.com/artist/Ben_Folds_Five/album/The_Sound_Of_The_Life_Of_The_Mind/track/Erase_Me/">Erase Me</a> by Ben Folds Five and <a href="http://www.rdio.com/artist/Brand_New/album/Deja_Entendu/track/Sic_Transit_Gloria_..._Glory_Fades/">Sic Transit Gloria...Glory Fades</a> by Brand New. They are both awesome songs and I especially love the way the piano and bass work together in the Ben Folds song but my ideas just weren't working. I ended up with some weird meandering minor bass parts thrown over some really weak piano parts.</p>

<p>I came back the next day and switched to a major key and started with the piano part first. From there I came up with something that I liked and wrote a simple bass part that just harmonized the piano roots in a few parts.</p>

<p>And that's where I got stuck. I spent a bit of time playing around with some sparse guitar parts and a few of the new amp models in the new version of Garageband. I also played around with the new Drummer feature of Garageband. It was pretty cool and maybe the most redeeming quality of Garageband X (the removal of the old keyboard shortcuts and export to mp3 are driving me nuts and might send my back to version 6!). The drum sounds are great and it's a big step up from the midi drum parts I had been working with in the old version of Garageband, but I did feel a bit uncomfortable with the loss of control over every single hit. I suppose it's a decent compromise.</p>

<p>So here's what I came up with. I ended up just doing some random guitar riffing and bigger chords at some point, but it really just felt forced and didn't take the song anywhere. Take a listen, though, because the piano/bass part turned out pretty nice: </p>

<iframe width="100%" height="166" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/135426611&color=ff5500&auto_play=false&hide_related=false&show_artwork=true"></iframe>

<p>I'd like to keep working with this song. It's different than most of the stuff I've written lately. I think that throwing lyrics over it will be a bit of a challenge just because I don't quite trust my voice for something this mellow, but it's a fun part and I think it could turn into something cool.</p>

<p>This week I'm leaning towards either a project with Python (I've been meaning to brush up on my Python for a while) or something artistic. I'm still not quite sure.</p>
]]>
    </content>
    
    <category term="thingaweek" />
    
    <category term="music" />
    
    <category term="songwriting" />
    
  </entry>
  
  <entry>
    <title>Thing A Week 5 - Bird Watcher (Part 2)</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week-5-bird-watcher-part-2" rel="alternate" type="text/html" title="Thing A Week 5 - Bird Watcher (Part 2)" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week-5-bird-watcher-part-2</id>
    <published>2014-02-09T00:00:00-06:00</published>
    <updated>2014-02-09T00:00:00-06:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>So I took this week to wrap up last week's project. I was having trouble getting the Twitter listener for my wedding photo project up and running on my server but I'm pleased to report that I managed to get things up and running.</p>

<p>I ended up changing the format of the project a bit. Instead of a full Sinatra application I put everything into a single Ruby file that I can just leave running whenever I want to fire up the listener. I didn't need this project to serve any content, only run Tweet Stream and write to a database, so Sinatra was probably overkill to begin with.</p>

<p>I had some trouble with <a href="http://sequel.jeremyevans.net/">Sequel</a>, the Gem I was using to interface with the Postgres database but eventually got things worked out. The weirdest issue was with trying to store the url of the photo.  For some reason this didn't work:</p>

<pre><code class="ruby">def store_image(tweet_photo_url, tweet_user, tweet_text)
  ...
  @db[:photos].insert( :photo_url => tweet_photo_url, :service => "twitter", :username => screen_name, :name => name, :photo_text => tweet_text)
end
</code></pre>

<p>but this did:</p>

<pre><code class="ruby">def store_image(tweet_photo_url, tweet_user, tweet_text)
  ...
  the_url = "#{tweet_photo_url}"

  @db[:photos].insert( :photo_url => the_url, :service => "twitter", :username => screen_name, :name => name, :photo_text => tweet_text)
end
</code></pre>

<p>It must have something to do with the way Ruby handles certain strings or how Sequel or Postgres handle certain strings in INSERTs.</p>

<p>You can see the final file I'm using <code>bird_watcher.rb</code> in the <a href="https://github.com/dorkrawk/bird-watcher">Github repo</a> for the project.  </p>

<p>Next I'll need to write an Instragram listener. Hopefully that will be pretty quick as most of the mechanics will be identical to this listener. I might hold off on working on that for a bit, though. I'm thinking about tackling a musical project next week.</p>
]]>
    </content>
    
    <category term="thingaweek" />
    
    <category term="ruby" />
    
    <category term="tech" />
    
    <category term="wedding" />
    
  </entry>
  
  <entry>
    <title>Does Anyone Still Use RSS?</title>
    <link href="https://dinosaurseateverybody.com/blog/does-anyone-still-use-rss" rel="alternate" type="text/html" title="Does Anyone Still Use RSS?" />
    <id>https://dinosaurseateverybody.com/blog/does-anyone-still-use-rss</id>
    <published>2014-02-06T00:00:00-06:00</published>
    <updated>2014-02-06T00:00:00-06:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>Since the death of Google Reader I feel like I've seen people use RSS less and less, but a quick informal survey of friends showed that some people still use it for some things so maybe this blog should have a feed, right?.</p>

<p>I was interested in how hard it would be to add RSS to this weird Jekyll/Sinatra hybrid I have running and had a few minutes tonight so I decided to give it a shot. It turned out to not be bad.  I just followed <a href="http://blog.drewinglis.com/2013/03/18/adding-rss.html">this quick tutoral</a> and found <a href="https://github.com/snaptortoise/jekyll-rss-feeds">a nice template here</a> and 90% of the work was done (basically I just add another template to my Jekyll project and a few lines in my config and an xml file gets generated along with everything else when I run <code>jekyll build</code>.</p>

<p>The only custom part was adding a few lines to my Jekyll handler method in my main Sinatra app to suppress the layout template and render the RSS file as XML: </p>

<pre><code class="ruby">if file_path.include? "rss.xml"
  content_type 'text/xml'
  erb contents, :layout => false
else 
  erb contents
end
</code></pre>

<p>Now you can subscribe to this blog via <a href="http://dinosaurseateverybody.com/blog/rss.xml">RSS</a> is you so desire!</p>
]]>
    </content>
    
    <category term="ruby" />
    
    <category term="tech" />
    
  </entry>
  
  <entry>
    <title>Thing A Week 4 - Bird Watcher</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week-4-bird-watcher" rel="alternate" type="text/html" title="Thing A Week 4 - Bird Watcher" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week-4-bird-watcher</id>
    <published>2014-02-04T00:00:00-06:00</published>
    <updated>2014-02-04T00:00:00-06:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>This week might count as a partial failure plus I'm getting the post up pretty late, so that's probably not good either.</p>

<p>Once again I tackled a project for the wedding. I want to build a system that listens to Twitter and Instagram for photos that are tagged #daveandeileen then pulls them in and displays them somewhere at the wedding. This week I decided to finish up the Twitter listener.</p>

<p>This listener is basically just a small Sinatra app that uses <a href="https://github.com/tweetstream/tweetstream">TweetStream</a> to listen for tagged tweets and then if it matches the criteria (has image and is properly tagged) it stores info about the tweet into a database. This same database will eventually hold Instagram (this was the whole reason I signed up for <a href="http://instagram.com/dorkrawk">Instragram</a>) data and then I'll need to write a nice front end that pulls the photo data out and displays the pictures in some nice way.</p>

<p>I call this week a partial failure because I got the app working locally, but ran into some trouble getting it deployed properly. I am not a great sys admin, but I'm learning a few things. This is also the first time I've set up a database on my VPS. I've really been spoiled by always working with databases through a nice visual interface so doing some Postgres work while sshed into my server felt like pulling teeth. I was just running into some issues pretty late on Sunday night so I ended up admitting defeat and went to bed. You can check out the code for this project on <a href="https://github.com/dorkrawk/bird-watcher">Github</a>.</p>

<p>This next week (the week we are currently experiencing right now) is pretty busy. We're trying to finish up a bunch of other big wedding things (stuff that doesn't involve coding) and my parents are in town this weekend, so I know I'm going to be limited for "thing a week" time. I would like to use this week to finish off the deployment for Bird Watcher. I feel bad about letting a project spread over two weeks but I think it's best for my schedule and this project. </p>
]]>
    </content>
    
    <category term="thingaweek" />
    
    <category term="ruby" />
    
    <category term="tech" />
    
    <category term="wedding" />
    
  </entry>
  
  <entry>
    <title>Thing A Week 3 - Save The Date Comic</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week-3-save-the-date-comic" rel="alternate" type="text/html" title="Thing A Week 3 - Save The Date Comic" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week-3-save-the-date-comic</id>
    <published>2014-01-26T00:00:00-06:00</published>
    <updated>2014-01-26T00:00:00-06:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p><img src="../blog_media/std_crop.png" class="inline_right" />Sorry, but this week you can't see the full final product of my Thing A Week. I used this last week to write and draw a comic that we might use as part of our Save The Date cards (if you didn't know already, I'm getting <a href="http://daveandeileen.com">married</a> soon) so I want to keep the final comic unpublished until we send those out.</p>

<p>This Thing A Week was pretty straight forward: write and draw a comic. This is something I've done many times before. The main challenge was getting it good enough to print on cards and mail to friends and family. It just feels like because this is for the wedding, I should set the bar heigher than I would for a web comic. I'm always worried about my art not being good enough, so this comic was a bit stressful at times.</p>

<p><img src="../blog_media/std_work.jpg" class="inline_left" />The layout wasn't too complicated but some of the poses and body positions were just a little odd for me and it took a bit to get them right. Like most comics I spent some time planning out the pannels and doing some quick sketches of a few poses before starting on the actual comic. I also decided to work at a larger scale, using 8.5 x 14 paper. This is always nice because I feel like I can work on details a lot better at this size.</p>

<p>I suppose there's not much more to say about this project. I'm a bit torn on what to work on next week, it's currently between writing a song that uses my <a href="../blog/thing-a-week-2-bass-overdrive-pedal">new bass pedal</a>, working on a programming project for the wedding, or starting to work on a new idea for Big CoreUs.</p>
]]>
    </content>
    
    <category term="thingaweek" />
    
    <category term="comics" />
    
    <category term="art" />
    
    <category term="wedding" />
    
  </entry>
  
  <entry>
    <title>Thing A Week 2 - Bass Overdrive Pedal</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week-2-bass-overdrive-pedal" rel="alternate" type="text/html" title="Thing A Week 2 - Bass Overdrive Pedal" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week-2-bass-overdrive-pedal</id>
    <published>2014-01-19T00:00:00-06:00</published>
    <updated>2014-01-19T00:00:00-06:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p><img src="../blog_media/bass_pedal1.jpg" class="inline_right" /> Success!</p>

<p>This week I built a bass overdrive pedal. I had received a <a href="http://buildyourownclone.com/bassfx/bassoverdrive.html">kit</a> for this pedal for Xmas (as well as an arm for holding circuit boards while soldering, which may be the nerdiest gift I've ever received) and I was excited to finally have time to work on it. Last year I built a <a href="http://buildyourownclone.com/effects-pedals/overdrive/classic-overdrive.html">Tube Screamer overdrive clone</a> from a kit, so I've had a little experience building pedals from kits already.</p>

<p>The choice of a bass overdrive pedal was motivated a bit by listening to some newer Ben Folds. He has some great songs on his new record that are really carried by piano and gruff sounding bass. Now that I have this new pedal, one of my upcoming Thing A Week things will hopefully be a song written in that style.</p>

<p><img src="../blog_media/bass_pedal2.jpg" class="inline_left" />This build was a bit more complicated than the last pedal I built, but I didn't have any major problems with it. It took a while to solder all the little components onto the board but I actually found it to be very relaxing. It takes a lot of focus but it isn't really mentally taxing. Soldering was a nice way to unwind after work this week. The biggest addition I made to this build was the choice to paint the enclosure. I had never painted metal before so I had to learn a bit about that (it's not that complicated). It really just involved sanding the enclosure, priming it, then adding a few layers of indoor/outdoor spray paint. I picked a nice ugly yellow, which ended up looking really cool with the black nobs. I had originally planned to label the nobs and draw some sort of design, but I just didn't find anything I like so I kept it totally clean, which ended up being a nice look.</p>

<p>The tone of the pedal itself it pretty cool. It has treble and bass levels as well as a blend control which lets you blend the drive and clean tones nicely. I did a quick recording so you can hear what it sounds like. I started with a clean bass sound for comparison then turned on the overdrive.</p>

<iframe width="100%" height="166" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/130409131&color=ff6600&auto_play=false&show_artwork=true"></iframe>

<p>It felt good to finish a Thing A Week project, I was a little worried about the viability of this project after falling short the first week. Next week I will probably try to do something artistic, maybe comic related.</p>
]]>
    </content>
    
    <category term="thingaweek" />
    
    <category term="music" />
    
    <category term="electronics" />
    
  </entry>
  
  <entry>
    <title>Thing A Week 1 - Professor Rex VonScience Saves The World (an HTML5/JavaScript game)</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week-1-professor-rex-vonscience-saves-the-world" rel="alternate" type="text/html" title="Thing A Week 1 - Professor Rex VonScience Saves The World (an HTML5/JavaScript game)" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week-1-professor-rex-vonscience-saves-the-world</id>
    <published>2014-01-12T00:00:00-06:00</published>
    <updated>2014-01-12T00:00:00-06:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>So, the first Thing A Week project was kind of a failure. </p>

<p>My goal was to build my first HTML5/JavaScript based game. I started out by picking a JS game framework suggested by my buddy <a href="http://www.urgack.com/">Bryan</a>. I ended up using <a href="http://craftyjs.com/">Crafty</a> and getting started with <a href="http://buildnewgames.com/introduction-to-crafty/">this tutorial</a>. It was really good and by the end I had a top down adventure game thing that looked very Zelda-like.</p>

<p>From there I sat down and did a bit of planning to figure out what sort of game I wanted to make. This is where I may have gotten a bit ambitious. I decided to make a top down adventure game (similar to the one in the tutorial) about a T-rex/scientist who must fight off mammals and time travelers to gather parts to build a spaceship and blow up the asteroid that will cause the mass extinction of all dinosaurs. I planned out 4 stages, each with new mobs and planned to hand draw all the sprite fames.</p>

<p>Perhaps I was in a bit over my head, having never built a game before.</p>

<p>In the end, I was able to create a rather buggy game where you can move around a dark green square in a forest (made of light green squares) and go after gray squares (the parts!) while avoiding some brown squares (probably a rodent of some kind?). I wouldn't really call it a game, but I suppose I know a lot more about game building with JavaScript than I did last week. I did really like the idea for the game, especially the name "Professor Rex VonScience" and I got to draw <a href="http://instagram.com/p/jApVmuhWQX/">several</a> <a href="http://instagram.com/p/i-kO0FhWb9/">dinosaurs</a> wearing a lab coat and a bow tie, so it wasn't a total loss.</p>

<p>If you'd like to "play" the "game" you can take a look here: <a href="../stuff/prof_rex_vonscience/index.html">Professor Rex VonScience Saves The World</a> and the code is available on my <a href="https://github.com/dorkrawk/prof_rex_vonscience">Github</a>.</p>

<p>So, now that I've already had an unsuccessful Thing A Week week, I need to figure out how to deal with failure in the project. I'd like to keep working on this game but I'd also like to avoid sticking with the same project several weeks in a row, particularly this early. Perhaps in an upcoming week I'll pick a subset of this game as my project and work from there now that I have a better idea about the kind of work it takes to make a game. I'm also not sure if I'm ready to set next week's project yet. I'm leaning towards building a bass distortion pedal, though.</p>
]]>
    </content>
    
    <category term="thingaweek" />
    
    <category term="javascript" />
    
    <category term="tech" />
    
  </entry>
  
  <entry>
    <title>Thing A Week</title>
    <link href="https://dinosaurseateverybody.com/blog/thing-a-week" rel="alternate" type="text/html" title="Thing A Week" />
    <id>https://dinosaurseateverybody.com/blog/thing-a-week</id>
    <published>2014-01-06T00:00:00-06:00</published>
    <updated>2014-01-06T00:00:00-06:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>I like New Years resolutions. Sure they're kind of cheesy and I always tend to make similar resolutions each year (run more, get better at guitar, write more music, update <a href="http://mountsaintawesome.com">Mount Saint Awesome</a> more regularly, etc.) but I still enjoy the excuse to take stock and think about things I want to be doing.</p>

<p>A lot of what I want to be doing is making things and in order to stay focused on that I'm going to steal an idea from the brilliant <a href="http://www.jonathancoulton.com/">Jonathan Coulton</a> (of <a href="http://www.youtube.com/watch?v=qYodWEKCuGg">Code Monkey</a> fame!) and try to do <a href="http://www.jonathancoulton.com/primer/thing-a-week/">A Thing A Week</a>. While Jonathan did this entirely with songs I'm going to branch out to include almost anything that I can create within the 1 week time frame. This might involve building a guitar pedal or brewing a beer or making some art or creating a small web app or piece of software or even... writing and recording a song. I have a bit of experience with this schedule from the early days of Mount Saint Awesome. Back when I first started the comic I was VERY dedicated to posting a comic every Monday and I stuck with that schedule for over a year. It really helped me improve as a cartoonist. Here is the <a href="http://mountsaintawesome.com/band/1/1.php">first comic</a> I posted and here is one of the <a href="http://mountsaintawesome.com/band/3/10.php">later plot based comic I posted</a> (this was less than 1 year of comics, but still a noticeable difference.)</p>

<p>The first thing I'm going to try is building an HTML5/JavaScript game. I've been doing web development for a long time now but I've never built a game and it seems like a good excuse to play with some new HTML5 stuff, plus I'd really like to get more serious about JavaScript. If all goes to plan I will have a game to show off here next Monday!</p>
]]>
    </content>
    
    <category term="thingaweek" />
    
  </entry>
  
  <entry>
    <title>Chess With a Child</title>
    <link href="https://dinosaurseateverybody.com/blog/chess-with-a-child" rel="alternate" type="text/html" title="Chess With a Child" />
    <id>https://dinosaurseateverybody.com/blog/chess-with-a-child</id>
    <published>2013-12-08T00:00:00-06:00</published>
    <updated>2013-12-08T00:00:00-06:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p><img src="../blog_media/chess1.png" class="inline_right" /> Lately I've been getting more and more into playing chess. I had played a bit with my dad when I was a little kid but hadn't really thought about it much since. Then a year or so ago I started playing online chess with some friends at work. I was REALLY bad and lost constantly. Since then I've been studying and playing a lot more and I think I'm getting better and I've really been enjoying the process. If you're interested in playing me, I play as <a href="http://www.chess.com/members/view/dschwantes">dschwantes</a> on chess.com.</p>

<p>But this post isn't really about me learning chess. It's more about a game I played a few weeks ago.</p>

<p>I had convinced Eileen to go play chess in a coffee shop with me one Sunday evening. We were just going to play a very friendly, open game because she doesn't really play and last time we played she got really mad that I beat her (and refused to play chess with me ever again). We were sitting at a table next to a family with two young children, maybe 4 and 6 years old and as we started our game, the older child kept craning his head over to our table. Eventually his willpower failed him and he just came straight over and sat next to Eileen, asked what she was doing, and started suggesting moves.</p>

<p>His parents came over to apologize (and retrieve their stray child) and the father explained that he had started to introduce his son to chess a little while ago. Eileen and I were just having a friendly game so we ended up inviting the kid to play "on Eileen's team" and his parents helped them pick moves too. It was a completely casual game with everybody helping to look for the best moves for both sides and none of us (adults included) were particularly strong players.</p>

<p>The kid couldn't sit still for 30 seconds and spent the whole game wiggling around and leaning on Eileen and looking at the board from different angles but the game kept his attention, which was really impressive. It wasn't the game I had planned on playing but I think we all had a lot of fun. It felt good to help entertain a kid with something productive and it was just a genuinely enjoyable encounter with some random, nice strangers in a coffee shop.</p>
]]>
    </content>
    
    <category term="chess" />
    
  </entry>
  
  <entry>
    <title>In My Head, Behind The Music</title>
    <link href="https://dinosaurseateverybody.com/blog/in-my-head-behind-the-music" rel="alternate" type="text/html" title="In My Head, Behind The Music" />
    <id>https://dinosaurseateverybody.com/blog/in-my-head-behind-the-music</id>
    <published>2013-11-25T00:00:00-06:00</published>
    <updated>2013-11-25T00:00:00-06:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>I just finished writing and recording a fun keyboard-heavy powerpop song called <a href="https://soundcloud.com/dorkrawk/in-my-head">In My Head</a> and in an act of self indulgence I'd like spend a blog post going over some of what into the song. <em>(Pro tip: You can scroll down and start playing the song while you read the rest of this!)</em></p>

<p>With this song I wanted to just write something straightforward and not get hung up on trying to write anything super technical. I ended up with a simple intro - verse - chorus - verse -chorus - bridge - chorus structure and I tried my best to not overthink the lyrics (more on those later).  By not getting bogged down worrying if my basics were interesting enough I was able to get a solid chord progression and structure down and then build off of it.</p>

<p><strong>recording</strong></p>

<p><img src="../blog_media/recording1.jpg" class="inline_right" />The song started with just guitar recorded over a click track. Rather than trying to set up and mic an amp I ran my guitar through my <a href="http://buildyourownclone.com/effects-pedals/overdrive/classic-overdrive.html">homemade overdrive pedal</a> and then a clean amp model in Garageband. Once I had my basic structure down I went in to write drum parts. I wrote the drum part by hand placing events on the piano roll set to a drumset sound. I'm sure there are better ways to do this, but it worked for this song and I like the freedom I get by beind able to hand pick every hit in a beat.</p>

<p>I stressed out about my bass tone a bit during this recording session. Usually I need to run my bass through an amp and mic it to get anything remotely usable, but I wanted to get some parts down imediately and plugging in wasn't an option at 11pm. I plugged directly into my recording interface (an <a href="http://www.amazon.com/M-Audio-Track-Mobile-Interface-Preamps/dp/B000BD31ZW">M-Audio Fast Track Pro</a>) and then just put one of the fuzzy Garageband bass effects on the tracks and the sound was actually ok so I ended up keeping it. </p>

<p>From there it was time to play with keyboards! The paino parts are all pretty simple, mainly just to add some depth and tone to the song. I had a lot of fun writing some cool little counter-melodies on the synth. I've always had a soft spot for bands like Zolf the Rock and Roll Destoyer and Motion City Soundtrack so I really enjoyed being able to write some really poppy synth driven stuff.</p>

<p><strong>lyrics</strong> </p>

<p>And now lyrics. Like I said, this song was an exercise in not overthinking things. I just sort of wrote the first things that came to mind so this song ended up overtly being a generic pop sound with vauge romantic sentements. That said, the ideas for the lyrics came from watching <a href="http://drhorrible.com/">Doctor Horrible's Sing-a-long Blog</a> and from spending a weekend home alone when Eileen was out of town.</p>

<p><em>chorus</em></p>

<p>Well I can't get you out of my head <br />
I dream about you when I go to bed <br />
I can't get you off of my mind <br />
And I don't mind <br />
I can't get you out of my head <br />
I keep replaying every word you said <br />
I'd like to give you some of my time <br />
If you don't mind </p>

<p>The deep insight here is that I had a bunch of songs from Doctor Horrible stuck in my head for a long time. They're really good! You should seriously watch it. That's honestly the extent of the depth of that chorus, I just kind of took the theme of having something stuck in your head and presented it in a general enough way to make for a good, hopefully catchy, pop chorus.</p>

<p><em>verse 1</em></p>

<p>Well I've been spending too much time <br />
Home alone on my couch drinking too much wine <br />
Watching TV and waiting for <br />
You to come here and walk right through my door</p>

<p><em>verse 2</em></p>

<p>Now I don't eat and I barely sleep <br />
I don't know how much longer I can keep <br />
Walking through these empty rooms <br />
Before I pick up my phone and call you</p>

<p>I wrote a lot of the music for this song over a weekend when Eileen was out of town so when I was looking for lyrical ideas for the verse I decided to just use the theme of being home alone and again present it in a vague way to make it sound like semi-romantic pop. I did take some liberties with the concepts. For example, there was no wine consumed that weekend but it's harder to find good words that rhyme with whiskey. I did watch copious amounts of TV, mostly <a href="http://www.watchtheguild.com/">The Guild</a>, and I don't really do a good job of feeding myself or going to bed at a reasonable time when I am left home alone, so there is some truth to these words. I wasn't as happy with the vocals I got when recording the verses. I just couldn't seem to get a tone I was totally happy with, but I don't think it's too distracting.</p>

<p><strong>the song</strong></p>

<p>I'm really proud of how this song turned out.  I had a lot of fun with the style and its always rewarding to hear a completed project that has some complextiy to it. If you don't want to travel all the way over to Soundcloud to hear the song, you can listen to it RIGHT HERE!</p>

<iframe width="100%" height="166" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/121317485&color=ff6600&auto_play=false&show_artwork=false"></iframe>
]]>
    </content>
    
    <category term="songwriting" />
    
    <category term="music" />
    
  </entry>
  
  <entry>
    <title>Darwinning, My Ruby Gem for Genetic Algorithms</title>
    <link href="https://dinosaurseateverybody.com/blog/darwinning-my-ruby-gem-for-genetic-algorithms" rel="alternate" type="text/html" title="Darwinning, My Ruby Gem for Genetic Algorithms" />
    <id>https://dinosaurseateverybody.com/blog/darwinning-my-ruby-gem-for-genetic-algorithms</id>
    <published>2013-11-11T00:00:00-06:00</published>
    <updated>2013-11-11T00:00:00-06:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>Well, this writeup is a bit late. I wanted to write about Darwinning right after I launched it but here we are.</p>

<p><strong>So, what is Darwinning?</strong></p>

<p>Darwinning is a Ruby Gem built to help people write <a href="http://en.wikipedia.org/wiki/Genetic_algorithm">genetic algorithms</a>.  I got into genetic algorithms while taking a machine learning course during my masters and I've had a casual interest in them ever since. I even wrote <a href="http://mountsaintawesome.com/comic.php?id=30">a comic</a> about them! I have also been enjoying Ruby lately, so I wanted to learn how to build a Gem. This project was started to satisfy both of those interests.</p>

<p>I also played with the Ruby unit testing framework, RSpec, for the first time with this project.  The test coverage for Darwinning isn't great, but at least it's a start.</p>

<p><strong>So, how do I use Darwinning?</strong></p>

<p>Darwinning is totally available via <a href="http://rubygems.org/gems/darwinning">RubyGems</a> so you can install it the same way you would install almost any Gem:</p>

<pre><code class="bash">gem install darwinning
</code></pre>

<p>Once it's installed you can make use of the <code>Population</code>, <code>Organism</code>, and <code>Gene</code> classes to build your own genetic algorithm based programs.</p>

<p>Here's an dumb example of how you might use Darwinning to solve a pointless problem:</p>

<p>Let's say for some reason you need a set of 3 number that add up to 15.  This is a strange problem to have, but let's solve it anyway.</p>

<pre><code class="ruby">class Triple < Darwinning::Organism

  @name = "Triple"
  @genes = [
      Darwinning::Gene.new("first digit", (0..9)),
      Darwinning::Gene.new("second digit", (0..9)),
      Darwinning::Gene.new("third digit", (0..9))
    ]

  def fitness
    # Try to get the sum of the 3 digits to add up to 15
    (genotypes.inject{ |sum, x| sum + x } - 15).abs
  end
end 

p = Darwinning::Population.new(Triple, 10, 0, 0.1, 100)
p.evolve!

p.best_member.nice_print # prints the member representing the solution
</code></pre>

<p>This code declares an organism class that inherits from Darwinning's Organism parent class to represent solutions.  Then we create a population of these solution organisms and evolve the population until a solution meets the fitness threshold or the generation limit is met.</p>

<p><strong>So, what else can I do with it?</strong></p>

<p>If any of this sounds remotely interesting to you, please check out the project on <a href="https://github.com/dorkrawk/darwinning">Github</a>. I'm always happy to take good pull requests if other people want to contribute. I haven't been very active lately because I've been spending a lot of time on <a href="http://dinosaurseateverybody.com">this website</a> and my <a href="http://daveandeileen.com">wedding website</a>, but I do keep an eye on the project.</p>
]]>
    </content>
    
    <category term="ruby" />
    
    <category term="tech" />
    
  </entry>
  
  <entry>
    <title>Sinatra + Jekyll + Prose</title>
    <link href="https://dinosaurseateverybody.com/blog/sinatra-jekyll-prose" rel="alternate" type="text/html" title="Sinatra + Jekyll + Prose" />
    <id>https://dinosaurseateverybody.com/blog/sinatra-jekyll-prose</id>
    <published>2013-11-05T00:00:00-06:00</published>
    <updated>2013-11-05T00:00:00-06:00</updated>
    <author>
      <name>Dinosaurs Eat Everybody</name>
    </author>
    <content type="html">
      <![CDATA[<p>Welcome to the new Dinosaurs Eat Everybody blog! The old site/blog was an interesting mess of custom PHP and some custom build hooks into a Word Press blog and though it worked pretty well but I was tired of maintaining stuff in PHP so when my old hosting was about to expire I decided to move to a <a href="https://www.digitalocean.com/">VPS</a> and build something new. The result is what you see before you today.</p>

<p>This new site is built mainly on <a href="http://www.sinatrarb.com/" title="I like my web frameworks like I like my brews, micro.">Sinatra</a> with <a href="http://jekyllrb.com/" title="a static file blogging platform">Jekyll</a> mixed in for some blogging functionality.  I didn't really need any sort of content management system for most of the site so there is no database behind it and I'm using flat files (mostly just handwritten JSON) for anything that seems dynamic.</p>

<p>The interesting part was adding a Jekyll blog to an existing Sinatra site. Jekyll is super easy to set up on its own but I didn't want it to run the whole site. I wanted to be able to serve dynamic pages if I wanted.  With some help from <a href="http://derekeder.com/blog/hello-world-setting-up-a-jekyll-blog-in-sinatra">this</a> blog post it was actually pretty easy to get things up and running.  That post is a bit out of date but still very helpful.  </p>

<p>To add Jekyll to Sinatra I first just created a new Jekyll site in a seperate directory and copied it over into a <code>jekyll_blog/</code> folder in the root of my Sinatra project. I then removed the <code>.gitignore</code>, the <code>default.html</code> layout and the whole <code>css/</code> directory (after moving the Pygments <code>syntax.css</code> into my main stylesheet directory) from the new Jekyll directory. I also adjusted the <code>_post.html</code> layout to not have a layout of its own by just removing all the YAML Front-matter from the file. This is because I want Sinatra to handle the layouts for everything.</p>

<p>The real meat of this is a custom function in the /blog route:</p>

<pre><code class="ruby">get '/blog/?*' do
    jekyll_blog(request.path)
end

def jekyll_blog(path)
  @page_title = "blog"

  file_path = File.join(File.dirname(__FILE__), 'jekyll_blog/_site',  path.gsub('/blog',''))
  file_path = File.join(file_path, 'index.html') unless file_path =~ /\.[a-z]+$/i 

  if File.exist?(file_path)
    file = File.open(file_path, "rb")
    contents = file.read
    file.close

    erb contents
  end
end
</code></pre>

<p>This just calls the <code>jekyll_blog(path)</code> function whenever you go to a page that starts with /blog/ and that just pulls the html content of either the post or the Jekyll index.html and puts into the <code><%= yield %></code> in my Sinatra erb layout.</p>

<p>This is a pretty simplistic solution and I want to add better 404 checking and a way to pull the post title out for use in the page title, but it gets the job done by pulling out the content of the post html file generated by Jekyll and putting it into the content container of Sinatra.  Now all my layouts are handled by the same file and all my CSS comes from the same source.</p>

<p>While I like the idea of being able to write my blog posts in <a href="http://daringfireball.net/projects/markdown/">Markdown</a> and from whatever editor I want I also wanted to have some sort of web based editor for my posts so I'm trying <a href="http://prose.io/">Prose</a>. Prose is basically a web based editor for Github files (which is where all the content for this site resides anyways.  It lets me go in and create new posts through a pretty nice looking Markdown editor with preview. It also helps with syntax and media uploading (though I haven't tried that yet).  I've included a <code>_prose.rb</code> config file that sends me right to the <code>_posts/</code> directory of this project when I'm working on it:</p>

<pre><code class="ruby">prose:
  rooturl: 'jekyll_blog/_posts'
  media: 'public/images/blog_media'
</code></pre>

<p>I think that the transiton from a really polished, very user friendly system like Word Press to something more technical like Jekyll will be interesting. I feel like I still need to work some kinks out of the system and I'm still not totally won over by Prose but it has been really fun to set this up. I'd also like to add comments through <a href="http://disqus.com/">Disqus</a> soon. Hopefully now I'll make this work worthwhile and actually write a few blog posts every now and then.</p>
]]>
    </content>
    
    <category term="ruby" />
    
    <category term="tech" />
    
  </entry>
  
</feed>
