<?xml version='1.0' encoding='utf-8'?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title>mo.town blog</title>
    <link>https://muthanna.com/blog/</link>
    <description>Posts from mo.town blog.</description>
    <language>en</language>
    <atom:link href="https://muthanna.com/blog/rss.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>A Zen Garden in your Terminal</title>
      <link>https://muthanna.com/blog/posts/a-zen-garden-in-your-terminal.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/a-zen-garden-in-your-terminal.html</guid>
      <pubDate>Tue, 29 Sep 2026 09:45:33 -0400</pubDate>
      <description>It&amp;#x27;s starting to get too cold outside for me to vegetate in my garden, so I thought I&amp;#x27;d bring the garden to my terminal. Watch the garden animation on GitHub. It uses the Kitty Terminal Graphics Protocol to render high resolution graphics on any compatible terminal, e.g., Ghostty, Kitty, iTerm2,…</description>
    </item>
    <item>
      <title>The Firewall Guy</title>
      <link>https://muthanna.com/blog/posts/the-firewall-guy.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/the-firewall-guy.html</guid>
      <pubDate>Fri, 22 Dec 2023 13:33:00 -0500</pubDate>
      <description>About 20 years ago, I worked as an independent consultant at a major telecom. I wrote a program that did some stuff, and couldn&amp;#x27;t get it to communicate on the network. Developers there didn&amp;#x27;t get root on a machine, and there was limited access to tooling, so I reached out to the sysadmin. A day…</description>
    </item>
    <item>
      <title>Generating Spectrograms with Neural Networks</title>
      <link>https://muthanna.com/blog/posts/generating-spectrograms-with-neural-networks.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/generating-spectrograms-with-neural-networks.html</guid>
      <pubDate>Mon, 02 Mar 2020 14:14:00 -0500</pubDate>
      <description>In a previous experiments, I used spectrograms instead of raw audio as inputs to neural networks, while training them to recognize pitches, intervals, and chords. I found that feeding the networks raw audio data got nowhere. Training was extremely slow, and losses seemed to be bounded at…</description>
    </item>
    <item>
      <title>Time Frequency Duality</title>
      <link>https://muthanna.com/blog/posts/time-frequency-duality.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/time-frequency-duality.html</guid>
      <pubDate>Fri, 28 Feb 2020 07:44:00 -0500</pubDate>
      <description>An particularly interesting characteristic of Fourier transforms is time-frequency duality. This duality exposes a beautiful deep symmetry between the time and frequency domains of a signal. For example, a sinusoid in the time domain is an impulse in the frequency domain, and vice versa. Here&amp;#x27;s…</description>
    </item>
    <item>
      <title>Pitch Detection with Convolutional Networks</title>
      <link>https://muthanna.com/blog/posts/pitch-detection-with-convolutional-networks.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/pitch-detection-with-convolutional-networks.html</guid>
      <pubDate>Sat, 22 Feb 2020 23:11:00 -0500</pubDate>
      <description>While working on Pitchy Ninja and Vexflow, I explored a variety of different techniques for pitch detection that would also work well in a browser. Although, I settled on a relatively well-known algorithm, the exploration took me down an interesting path -- I wondered if you could build neural…</description>
    </item>
    <item>
      <title>No Servers, Just Buckets: Hosting Static Websites on the Cloud</title>
      <link>https://muthanna.com/blog/posts/no-servers-just-buckets-hosting-static-websites-on-the-cloud.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/no-servers-just-buckets-hosting-static-websites-on-the-cloud.html</guid>
      <pubDate>Wed, 19 Feb 2020 13:26:00 -0500</pubDate>
      <description>For over two decades, I&amp;#x27;ve hosted websites on managed servers. Starting with web hosting providers, going to dedicated machines, then dedicated VMs, then cloud VMs. Maintaining these servers tend to come at a high cognitive cost -- machine and network setup, OS patches, web server configuration,…</description>
    </item>
    <item>
      <title>New in VexFlow: ES6, Visual Regression Tests, and more!</title>
      <link>https://muthanna.com/blog/posts/new-in-vexflow-es6-visual-regression-tests-and-more.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/new-in-vexflow-es6-visual-regression-tests-and-more.html</guid>
      <pubDate>Tue, 12 Jul 2016 09:44:00 -0400</pubDate>
      <description>Lots of developments since the last time I posted about VexFlow. VexFlow is ES6 Thanks to the heroics of SilverWolf90 and AaronMars, and the help from many others, VexFlow&amp;#x27;s entire src/ tree has been migrated to ES6. This is a huge benefit to the project and to the health of the codebase. Some of…</description>
    </item>
    <item>
      <title>New in VexFlow (May 2014)</title>
      <link>https://muthanna.com/blog/posts/new-in-vexflow-may-2014.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/new-in-vexflow-may-2014.html</guid>
      <pubDate>Fri, 02 May 2014 11:18:00 -0400</pubDate>
      <description>Lots of commits into the repository lately. Thanks to Cyril Silverman for may of these. Here are some of the highlights: Chord Symbols This includes subscript/superscript support in TextNote and support for common symbols (dim, half-dim, maj7, etc.) Stave Line Arrows This is typically used in…</description>
    </item>
    <item>
      <title>More K-Means Clustering Experiments on Images</title>
      <link>https://muthanna.com/blog/posts/more-k-means-clustering-experiments-on-images.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/more-k-means-clustering-experiments-on-images.html</guid>
      <pubDate>Mon, 02 Jan 2012 13:34:00 -0500</pubDate>
      <description>I spent a little more time experimenting with k-means clustering on images and realized that I could use these clusters to recolor the image in interesting ways. I wrote the function save_recolor to replace pixels from the given clusters (replacements) with new ones of equal intensity, as specified…</description>
    </item>
    <item>
      <title>K-Means Clustering and Art</title>
      <link>https://muthanna.com/blog/posts/k-means-clustering-and-art.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/k-means-clustering-and-art.html</guid>
      <pubDate>Sat, 31 Dec 2011 10:27:00 -0500</pubDate>
      <description>Cross posted from Google+. My coworker at Google, Tony Rippy, has for a while been working on a fascinating problem. Take all the pixels of a photograph, and rearrange them so that the final image looks like an artist&amp;#x27;s palette -- something to which you can take a paintbrush and recreate the…</description>
    </item>
    <item>
      <title>A Web Audio Spectrum Analyzer</title>
      <link>https://muthanna.com/blog/posts/a-web-audio-spectrum-analyzer.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/a-web-audio-spectrum-analyzer.html</guid>
      <pubDate>Sun, 21 Aug 2011 11:15:00 -0400</pubDate>
      <description>In my last post, I went over some of the basics of the Web Audio API and showed you how to generate sine waves of various frequencies and amplitudes. We were introduced to some key Web Audio classes, such as AudioContext, AudioNode, and JavaScriptAudioNode. This time, I&amp;#x27;m going to go take things a…</description>
      <category>webaudio</category>
    </item>
    <item>
      <title>Generating Tones with the Web Audio API</title>
      <link>https://muthanna.com/blog/posts/generating-tones-with-the-web-audio-api.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/generating-tones-with-the-web-audio-api.html</guid>
      <pubDate>Sat, 13 Aug 2011 20:58:00 -0400</pubDate>
      <description>The Web Audio API is a W3C draft standard interface for building in-browser audio applications. Although the draft is well specified, it is almost impossible to find useful documentation on building applications with it. In my quest to deeper understand HTML5 audio, I spent some time figuring out…</description>
    </item>
    <item>
      <title>A Music Theory API</title>
      <link>https://muthanna.com/blog/posts/a-music-theory-api.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/a-music-theory-api.html</guid>
      <pubDate>Thu, 31 Mar 2011 13:50:00 -0400</pubDate>
      <description>Most of my work last week consisted of writing music theory code. VexFlow now has a neat little music theory API, that gives you answers to questions like the following: What note is a minor 3rd above a B? What are the scale tones of a Gb Harmonic Minor? What relation is the C# note to an A Major…</description>
    </item>
    <item>
      <title>Prettier Tablature</title>
      <link>https://muthanna.com/blog/posts/prettier-tablature.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/prettier-tablature.html</guid>
      <pubDate>Sun, 27 Mar 2011 14:48:00 -0400</pubDate>
      <description>Spot the difference: Before After Still can&amp;#x27;t tell? Let me help you out. We have: Slightly greater spacing between the tablature stave lines. This makes it more consistent in appearance with printed tablature. Stave lines are cleared before fret numbers are rendered, vastly improving readability.…</description>
    </item>
    <item>
      <title>The VexFlow Tutorial (...and other goodies)</title>
      <link>https://muthanna.com/blog/posts/the-vexflow-tutorial-and-other-goodies.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/the-vexflow-tutorial-and-other-goodies.html</guid>
      <pubDate>Thu, 24 Mar 2011 16:44:00 -0400</pubDate>
      <description>Finally... finally... finally... we have the humble beginnings of what could be considered &amp;quot;documentation&amp;quot;. I present to you The VexFlow Tutorial. Although still in its infancy, the tutorial covers everything you need to start using VexFlow in your own code. My plan for the next few weeks is to…</description>
      <category>vexflow</category>
    </item>
    <item>
      <title>Editing XML and HTML in Vim</title>
      <link>https://muthanna.com/blog/posts/editing-xml-and-html-in-vim.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/editing-xml-and-html-in-vim.html</guid>
      <pubDate>Wed, 23 Mar 2011 13:26:00 -0400</pubDate>
      <description>I just discovered the Vim xmledit plugin. With features like tag-completion, auto-wrapping and unwrapping, quick navigation, etc., it has, in a matter of minutes, measurably decreased my level of frustration while editing markup in Vim. Installation The quickest way to install the plugin is by…</description>
      <category>vim</category>
    </item>
    <item>
      <title>On Twitter</title>
      <link>https://muthanna.com/blog/posts/on-twitter.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/on-twitter.html</guid>
      <pubDate>Sun, 20 Mar 2011 08:43:00 -0400</pubDate>
      <description>It turns out I&amp;#x27;m on twitter. I have absolutely no idea what I&amp;#x27;m going to do with it. Maybe I&amp;#x27;ll tweet every time time the compiler yells at me... or when my kernel panics... or when my browser frowns. Whatever it is, I&amp;#x27;m on twitter: twitter.com/11111110b That&amp;#x27;s seven ones and a zero, followed by a…</description>
    </item>
    <item>
      <title>Regex Substitution in Haskell</title>
      <link>https://muthanna.com/blog/posts/regex-substitution-in-haskell.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/regex-substitution-in-haskell.html</guid>
      <pubDate>Mon, 13 Sep 2010 11:03:00 -0400</pubDate>
      <description>I&amp;#x27;m shocked and appalled at the fact that there is no generic regex substitution function in the GHC libraries. All I&amp;#x27;m looking for is a simple function equivalent to perl&amp;#x27;s s/.../.../ expression. After digging around a bit, I found subRegex in regex-compat. While this works well, it does not use…</description>
      <category>haskell</category>
    </item>
    <item>
      <title>VexFlow Google Group</title>
      <link>https://muthanna.com/blog/posts/vexflow-google-group.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/vexflow-google-group.html</guid>
      <pubDate>Sun, 12 Sep 2010 12:24:00 -0400</pubDate>
      <description>I&amp;#x27;ve been out of touch for a while, and it took me way too long to set this up; but hey - better late than never. :-) After looking into various options for the VexFlow mailing list, I eventually decided to use Google Groups. It&amp;#x27;s super easy to setup and manage, and has all the features I&amp;#x27;ll ever…</description>
      <category>vexflow</category>
    </item>
    <item>
      <title>VexFlow is Open Source</title>
      <link>https://muthanna.com/blog/posts/vexflow-is-open-source.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/vexflow-is-open-source.html</guid>
      <pubDate>Tue, 03 Aug 2010 18:04:00 -0400</pubDate>
      <description>That&amp;#x27;s right folks! All the VexFlow code is now available in the VexFlow GitHub Repository. It&amp;#x27;s distributed under the OSI approved MIT License, so feel free to tinker, tweak, hack, fix, fork, and redistribute it. A lot of the core infrastructure (e.g., contexts, formatting, etc.) is ready and…</description>
    </item>
    <item>
      <title>More Durations and Better Beaming</title>
      <link>https://muthanna.com/blog/posts/more-durations-and-better-beaming.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/more-durations-and-better-beaming.html</guid>
      <pubDate>Tue, 20 Jul 2010 21:54:00 -0400</pubDate>
      <description>I finally got most of the duration and beaming support worked out last weekend, and I gotta say that the generated scores by VexFlow (and VexTab) are starting to look pretty good. In VexTab notation, you can now set the duration of the subsequent notes using the colon (:) character. By default,…</description>
    </item>
    <item>
      <title>Migrating VexFlow to SCons</title>
      <link>https://muthanna.com/blog/posts/migrating-vexflow-to-scons.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/migrating-vexflow-to-scons.html</guid>
      <pubDate>Wed, 14 Jul 2010 11:51:00 -0400</pubDate>
      <description>I love tools. Tools keep my projects predictable and smooth. Tools help me code fast and release fast. VexFlow has gone through many iterations of design, implementation, and deployment, and I couldn&amp;#x27;t have brought it this far so quickly without my tools. (Well, automated testing had a lot to do…</description>
    </item>
    <item>
      <title>Durations, Code, and Posters</title>
      <link>https://muthanna.com/blog/posts/durations-code-and-posters.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/durations-code-and-posters.html</guid>
      <pubDate>Mon, 12 Jul 2010 14:50:00 -0400</pubDate>
      <description>The last few weeks have been relatively quiet on the VexFlow side. I&amp;#x27;ve been vacationing in Cape Cod with my wife and 3-month-old. Obviously, vacation is never fun without a few good coding sprints. I started work on incorporating standard notation into VexTab. The first thing I needed to do was…</description>
    </item>
    <item>
      <title>Encrypted Incremental Backups to S3</title>
      <link>https://muthanna.com/blog/posts/encrypted-incremental-backups-to-s3.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/encrypted-incremental-backups-to-s3.html</guid>
      <pubDate>Fri, 25 Jun 2010 17:25:00 -0400</pubDate>
      <description>I spent some time this week trying to get secure online backups working for all my machines. So far, I&amp;#x27;ve been managing most of my data and workspaces with replicated Git repositories. I have scripts that allow me to maintain roaming profiles across my machines (almost) seamlessly, and these…</description>
    </item>
    <item>
      <title>On Parsing and Licenses</title>
      <link>https://muthanna.com/blog/posts/on-parsing-and-licenses.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/on-parsing-and-licenses.html</guid>
      <pubDate>Mon, 21 Jun 2010 14:12:00 -0400</pubDate>
      <description>So I spent this weekend rewriting the VexTab parser. The original version, though it served its purpose as a quick prototype for the language, was severely limited due to it being built primarily out of regular expressions. The new parser uses a recursive-descent algorithm, and fully supports the…</description>
    </item>
    <item>
      <title>Benchmarking VexFlow</title>
      <link>https://muthanna.com/blog/posts/benchmarking-vexflow.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/benchmarking-vexflow.html</guid>
      <pubDate>Thu, 17 Jun 2010 15:01:00 -0400</pubDate>
      <description>I have about 340 tests now for VexFlow, and one of the things I find really impressive is the speed at which browsers currently load, execute, and render web-pages. Since the code exercises the browser on a few different dimensions (heavy JavaScript, lots of DOM manipulation, a few new HTML5…</description>
    </item>
    <item>
      <title>Fonts, Tablature, SVG, and a Demo</title>
      <link>https://muthanna.com/blog/posts/fonts-tablature-svg-and-a-demo.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/fonts-tablature-svg-and-a-demo.html</guid>
      <pubDate>Sun, 13 Jun 2010 21:37:00 -0400</pubDate>
      <description>This was a pretty productive weekend. I got a lot working, and a lot to show off. First, a credit to Simon Tatham, who created the awesome Gonville font, which I use for the renderer. Before finding Gonville, I tried to draw many of the glyphs myself and suffice to say, it didn&amp;#x27;t work out too well.…</description>
    </item>
    <item>
      <title>On Beams</title>
      <link>https://muthanna.com/blog/posts/on-beams.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/on-beams.html</guid>
      <pubDate>Mon, 07 Jun 2010 13:37:00 -0400</pubDate>
      <description>Beams are interesting. Engraving rules for beams are extremely inconsistent. In essence, the ideal rendering involves striking a balance between the direction of the music, the angle of the beam, and the length of the stems. You don&amp;#x27;t want beams whose absolute slopes are too high, and you also…</description>
    </item>
    <item>
      <title>The Thing about Accidentals...</title>
      <link>https://muthanna.com/blog/posts/the-thing-about-accidentals.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/the-thing-about-accidentals.html</guid>
      <pubDate>Sun, 23 May 2010 17:40:00 -0400</pubDate>
      <description>...is that they can be a real pain. Last weekend, I mentioned that I threw away most of the layout and formatting code, which I started rewriting from scratch. Well, this weekend I threw away everything else, and started abstracting away many of the general properties that are shared between…</description>
    </item>
    <item>
      <title>Cleaning up the Cruft</title>
      <link>https://muthanna.com/blog/posts/cleaning-up-the-cruft.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/cleaning-up-the-cruft.html</guid>
      <pubDate>Sun, 16 May 2010 21:53:00 -0400</pubDate>
      <description>I spent most of this weekend cleaning up the HTML5 music notation code - tests, refactoring, style fixes, etc. While doing this, I threw away lots of cruft, and started rewriting almost all the layout and formatting code. After looking at and studying lots of scores and tabs, it turned out that I…</description>
    </item>
    <item>
      <title>A Question of Formats</title>
      <link>https://muthanna.com/blog/posts/a-question-of-formats.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/a-question-of-formats.html</guid>
      <pubDate>Wed, 12 May 2010 08:13:00 -0400</pubDate>
      <description>Firstly, a big Thank You to everyone for the comments and advice to my previous post. I went through almost all of the links that were posted, and glanced over the various options for languages, rendering, and formatting. Question 1. Canvas or SVG? This is actually a no-brainer. The library was…</description>
    </item>
    <item>
      <title>Music Notation with HTML5 Canvas</title>
      <link>https://muthanna.com/blog/posts/music-notation-with-html5-canvas.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/music-notation-with-html5-canvas.html</guid>
      <pubDate>Tue, 11 May 2010 14:16:00 -0400</pubDate>
      <description>I spent a few weekends trying to scratch an itch. While looking for online tools to create and render music notation, I was mildly disappointed. The only real options were crummy flash based sites or clumsy server-side image renderers. Neither of these were particularly appealing. So I pulled up my…</description>
    </item>
    <item>
      <title>Desktop Notifications with WebKit</title>
      <link>https://muthanna.com/blog/posts/desktop-notifications-with-webkit.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/desktop-notifications-with-webkit.html</guid>
      <pubDate>Wed, 21 Apr 2010 10:50:00 -0400</pubDate>
      <description>Chrome now supports desktop notifications using WebKit&amp;#x27;s webkitNotifications API. (Try the demo.) Why is this awesome? Because it gives online tools like e-mail clients, calendering software, task managers, monitoring systems, etc. an elegant and consistent way to notify users without having to…</description>
    </item>
    <item>
      <title>My Coding Font</title>
      <link>https://muthanna.com/blog/posts/my-coding-font.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/my-coding-font.html</guid>
      <pubDate>Fri, 16 Apr 2010 10:51:00 -0400</pubDate>
      <description>A few readers have asked me what coding font I use. It&amp;#x27;s Inconsolata and it&amp;#x27;s wickedly awesome. Inconsolata Mad props to Raph Levien for this elegant, easy-on-the-eyes, monospaced, beauty. Inconsolata is distributed under the Open Font License, and is available for download on Raph&amp;#x27;s Inconsolata…</description>
    </item>
    <item>
      <title>Improved Git-enabled Shell Prompt</title>
      <link>https://muthanna.com/blog/posts/improved-git-enabled-shell-prompt.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/improved-git-enabled-shell-prompt.html</guid>
      <pubDate>Thu, 15 Apr 2010 00:31:00 -0400</pubDate>
      <description>In my previous post, I wrote about how you could bolster your shell prompt with Git status information. Today, I added two more Git indicators that I find extremely useful while working on shared code. The first is unmerged branches, which is the list of local branches that are not yet merged into…</description>
    </item>
    <item>
      <title>Adding Git Status Information to your Terminal Prompt</title>
      <link>https://muthanna.com/blog/posts/adding-git-status-information-to-your-terminal-prompt.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/adding-git-status-information-to-your-terminal-prompt.html</guid>
      <pubDate>Tue, 13 Apr 2010 14:41:00 -0400</pubDate>
      <description>If you&amp;#x27;re a heavy git user, you&amp;#x27;ll find this simple prompt customization quite useful. It adds the name of the current branch to the shell prompt along with an asterisk as a dirty indicator. It also displays the number of states you have stashed away with git stash. Start by defining the following…</description>
    </item>
    <item>
      <title>My Vim Configuration</title>
      <link>https://muthanna.com/blog/posts/my-vim-configuration.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/my-vim-configuration.html</guid>
      <pubDate>Mon, 12 Apr 2010 19:44:00 -0400</pubDate>
      <description>I&amp;#x27;ve posted a number of articles on configuring Vim, and a few readers have asked me to post my complete .vimrc file. My configuration includes: Incremental search Status bar at the bottom of the screen Code folding based on indentation level Syntax highlighting Spell checking Digraphs for…</description>
    </item>
    <item>
      <title>Digraphs in Vim</title>
      <link>https://muthanna.com/blog/posts/digraphs-in-vim.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/digraphs-in-vim.html</guid>
      <pubDate>Sun, 11 Apr 2010 09:46:00 -0400</pubDate>
      <description>Ever wondered how to use digraphs to insert characters such as ⇐ or ⅛ into text files with Vim? Simple - use the key combination Ctrl-Kfollowed by the two-letter digraph code directly in insert mode. For example, Ctrl-K DE generates ∆ and Ctrl-K 23 generates ⅔. For a list of all the available…</description>
    </item>
    <item>
      <title>MacVim is Plain Awesome</title>
      <link>https://muthanna.com/blog/posts/macvim-is-plain-awesome.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/macvim-is-plain-awesome.html</guid>
      <pubDate>Sun, 04 Apr 2010 09:32:00 -0400</pubDate>
      <description>Every once in a while, dissatisfied with my current editor, I start scouring the web for an editor more Mac friendly. You know - an editor that respects conventional keyboard shortcuts, an editor that works predictably with the native copy-paste buffers, an editor that works with the mouse (even…</description>
    </item>
    <item>
      <title>Meditation Timer</title>
      <link>https://muthanna.com/blog/posts/meditation-timer.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/meditation-timer.html</guid>
      <pubDate>Sun, 28 Feb 2010 13:08:00 -0500</pubDate>
      <description>For a while now, I&amp;#x27;ve been relying on audio files for use as meditation timers. These files essentially consist of a recorded bell in the beginning, followed by a duration of silence, and another bell at the end. There are many of these available on the web, and are not bad. The problem is that…</description>
    </item>
    <item>
      <title>The Mandelbrot Set in JavaScript</title>
      <link>https://muthanna.com/blog/posts/the-mandelbrot-set-in-javascript.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/the-mandelbrot-set-in-javascript.html</guid>
      <pubDate>Sat, 26 Dec 2009 16:56:00 -0500</pubDate>
      <description>JavaScript turns out to be a great language for toying with graphics and visualization. This morning, I spent a few hours learning about the Mandelbrot set and trying to code up a working implementation. The link below is one of the fruits of my labor: Mandelbrot Set Generator Mathematically, the…</description>
    </item>
    <item>
      <title>Google Chrome Poster from Source Code</title>
      <link>https://muthanna.com/blog/posts/google-chrome-poster-from-source-code.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/google-chrome-poster-from-source-code.html</guid>
      <pubDate>Thu, 24 Dec 2009 11:56:00 -0500</pubDate>
      <description>This holiday weekend, I decided to compose the Google Chrome logo using the browser&amp;#x27;s own source code. I used a combination of Ruby, ImageMagick, and a heavily hacked PDF library to generate this poster. This is the icon that I used: Here&amp;#x27;s what it looks like zoomed in: And zoomed in some more:…</description>
    </item>
    <item>
      <title>Vex Crypto</title>
      <link>https://muthanna.com/blog/posts/vex-crypto.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/vex-crypto.html</guid>
      <pubDate>Mon, 26 Oct 2009 17:59:00 -0400</pubDate>
      <description>So, I was looking a place to store some of my private data, such that I could access it conveniently when I needed to. By &amp;quot;conveniently&amp;quot;, I mean over a web browser at a friend&amp;#x27;s place, or in an Internet cafe. It turns out that outside of setting up an encrypted filesystem on a remote server (or…</description>
    </item>
    <item>
      <title>Everybody Loves Colors</title>
      <link>https://muthanna.com/blog/posts/everybody-loves-colors.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/everybody-loves-colors.html</guid>
      <pubDate>Fri, 25 Sep 2009 19:46:00 -0400</pubDate>
      <description>Colors on terminal scripts are fun. They&amp;#x27;re also easy. class Colors: ESC = &amp;quot;\033[&amp;quot; PURPLE = ESC + &amp;quot;95m&amp;quot; GREEN = ESC + &amp;quot;92m&amp;quot; YELLOW = ESC + &amp;quot;93m&amp;quot; RESET = ESC + &amp;quot;0m&amp;quot; print Colors.YELLOW + &amp;quot;Warning: Colors enabled.&amp;quot; print Colors.RESET</description>
    </item>
    <item>
      <title>Abbreviations in Vim</title>
      <link>https://muthanna.com/blog/posts/abbreviations-in-vim.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/abbreviations-in-vim.html</guid>
      <pubDate>Sat, 11 Apr 2009 19:09:00 -0400</pubDate>
      <description>There are a few bits of text that are common to almost every file I edit with Vim. One of them is, of course, my name. The others are my e-mail address, and the date. Vim allows you to define simple text abbreviations to make entering such strings super-easy. Here&amp;#x27;s a snip of my .vimrc. &amp;quot; Some…</description>
    </item>
    <item>
      <title>Simple Code Folding in Vim</title>
      <link>https://muthanna.com/blog/posts/simple-code-folding-in-vim.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/simple-code-folding-in-vim.html</guid>
      <pubDate>Sun, 05 Apr 2009 11:12:00 -0400</pubDate>
      <description>I&amp;#x27;ve been on a Vim customization frenzy the last few days, and I just discovered an uber-cool feature: code folding. Folding is the process of rolling up a block of lines in the buffer, to a single line. Here&amp;#x27;s what folded code looks like: So, to unfold a block, simply move the cursor to the block…</description>
    </item>
    <item>
      <title>Generating Circular Primes</title>
      <link>https://muthanna.com/blog/posts/generating-circular-primes.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/generating-circular-primes.html</guid>
      <pubDate>Sun, 29 Mar 2009 20:12:00 -0400</pubDate>
      <description>I&amp;#x27;ve been having way too much fun with Project Euler (and Haskell) lately. Below is a listing of my solution to problem 35: &amp;quot;How many circular primes are there below a million?&amp;quot; It solves in about 2 seconds on my laptop (using -O2). This isn&amp;#x27;t great, but not bad given that the only optimizations in…</description>
    </item>
    <item>
      <title>Project Euler</title>
      <link>https://muthanna.com/blog/posts/project-euler.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/project-euler.html</guid>
      <pubDate>Sat, 28 Mar 2009 17:30:00 -0400</pubDate>
      <description>I can&amp;#x27;t believe I never knew about this before. Project Euler is very addictive. You&amp;#x27;ve been warned.</description>
    </item>
    <item>
      <title>Tackling the Awkward Squad</title>
      <link>https://muthanna.com/blog/posts/tackling-the-awkward-squad.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/tackling-the-awkward-squad.html</guid>
      <pubDate>Fri, 17 Oct 2008 13:30:00 -0400</pubDate>
      <description>It&amp;#x27;s been a long time since I&amp;#x27;ve blogged a new post. Some of the time it&amp;#x27;s because I start a topic, and never finish it, leaving behind a mess of draft posts. But most of the time, it&amp;#x27;s because I have nothing interesting to say. Today, I have something interesting to say: Haskell is full of…</description>
    </item>
    <item>
      <title>Scheduling on SMP Hardware</title>
      <link>https://muthanna.com/blog/posts/scheduling-on-smp-hardware.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/scheduling-on-smp-hardware.html</guid>
      <pubDate>Sat, 10 Feb 2007 14:50:00 -0500</pubDate>
      <description>Ever wondered how the Linux scheduler schedules a job on another processor, after the idle task has halted the CPU? On x86 systems, the answer lies in InterProcessor Interrupts (IPI). An IPI is a type of custom interrupt that can be sent from one processor to another, using an Advanced Programmable…</description>
    </item>
    <item>
      <title>The Game of Life in JavaScript</title>
      <link>https://muthanna.com/blog/posts/the-game-of-life-in-javascript.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/the-game-of-life-in-javascript.html</guid>
      <pubDate>Sun, 04 Feb 2007 15:43:00 -0500</pubDate>
      <description>I just discovered the canvas tag. is a HTML element used for embedding vector graphics within your web pages. It was first introduced by Apple for Dashboard Widgets, and was later implemented in Safari. It is now supported by most major browsers, except Internet Explorer. Fortunately, Google has a…</description>
    </item>
    <item>
      <title>Why I Like Working for Google</title>
      <link>https://muthanna.com/blog/posts/why-i-like-working-for-google.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/why-i-like-working-for-google.html</guid>
      <pubDate>Thu, 14 Sep 2006 20:47:00 -0400</pubDate>
      <description>I don&amp;#x27;t really care for the free food, the toys, the microkitchens, or the ridculously-massively-distributed infrastructure. It&amp;#x27;s not the pay, the on-site massages, the flexible work hours, or the free books. Guido van Rossum, Vint Cerf and Rob Pike are great, but they&amp;#x27;re no Angelina Jolie. It&amp;#x27;s…</description>
    </item>
    <item>
      <title>Q&amp;A: How OS X Executes Applications</title>
      <link>https://muthanna.com/blog/posts/q-and-a-how-os-x-executes-applications.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/q-and-a-how-os-x-executes-applications.html</guid>
      <pubDate>Tue, 28 Mar 2006 09:17:00 -0500</pubDate>
      <description>After writing my previous article, How OS X Executes Applications, I received quite a few comments and e-mails with some good questions. I will attempt to answer some of them here, and continue to update this entry as questions arise. Question 1. What is libSystem.B.dylib? evil:~/Temp mohit$ otool…</description>
    </item>
    <item>
      <title>How OS X Executes Applications</title>
      <link>https://muthanna.com/blog/posts/how-os-x-executes-applications.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/how-os-x-executes-applications.html</guid>
      <pubDate>Sun, 26 Mar 2006 10:16:00 -0500</pubDate>
      <description>Being a long-time UNIX user, I generally have a common set of tools that I work with while trying to troubleshoot system problems. More recently, I have been developing software that adds Apple&amp;#x27;s OS X to the list of supported operating systems; and unlike traditional UNIX variants, OS X does not…</description>
    </item>
    <item>
      <title>Using Spotlight from the OS X Commandline</title>
      <link>https://muthanna.com/blog/posts/using-spotlight-from-the-os-x-commandline.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/using-spotlight-from-the-os-x-commandline.html</guid>
      <pubDate>Wed, 22 Mar 2006 07:05:00 -0500</pubDate>
      <description>One significant productivity-enhancing feature that arrived with Tiger was Spotlight. On its own, it changed the way some (if not most) Mac users use their desktops. A simple command-space pops up the Spotlight window, where you can enter a query string, and in a matter of seconds, get a list of…</description>
    </item>
    <item>
      <title>Troubleshooting UNIX Systems with Lsof</title>
      <link>https://muthanna.com/blog/posts/troubleshooting-unix-systems-with-lsof.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/troubleshooting-unix-systems-with-lsof.html</guid>
      <pubDate>Sun, 12 Mar 2006 09:04:00 -0500</pubDate>
      <description>One of the least-talked-about tools in a UNIX sysadmin&amp;#x27;s toolkit is lsof. Lsof lists information about files opened by processes. But that&amp;#x27;s really an understatement. Most people forget that, in UNIX, (almost) everything is a file. The OS makes hardware available to applications by way of files in…</description>
    </item>
    <item>
      <title>Tailing Multiple Log Files with Twisted</title>
      <link>https://muthanna.com/blog/posts/tailing-multiple-log-files-with-twisted.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/tailing-multiple-log-files-with-twisted.html</guid>
      <pubDate>Thu, 09 Mar 2006 08:29:00 -0500</pubDate>
      <description>In my last entry, I described a mechanism to follow a growing log file using the Twisted framework. Now, what if you wanted to follow multiple log files simultaneously? You could try something like this: #!/usr/bin/env python from twisted.internet import reactor from Support.followtail import…</description>
    </item>
    <item>
      <title>Following a Log File with Twisted</title>
      <link>https://muthanna.com/blog/posts/following-a-log-file-with-twisted.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/following-a-log-file-with-twisted.html</guid>
      <pubDate>Tue, 07 Mar 2006 09:21:00 -0500</pubDate>
      <description>Another POE component that I dearly miss in Twisted is POE::Wheel::FollowTail. FollowTail lets you monitor a growing log file, spewing events when new lines are received. It also gracefully handles log-rotated files by reopening it when it resets. After some searching, I found a post in the…</description>
    </item>
    <item>
      <title>Line Filtering With Twisted</title>
      <link>https://muthanna.com/blog/posts/line-filtering-with-twisted.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/line-filtering-with-twisted.html</guid>
      <pubDate>Fri, 03 Mar 2006 15:21:00 -0500</pubDate>
      <description>Unlike POE, the Twisted framework does not allow for generic stream filters. This means that in order to pre- or post-process certain data-streams, one cannot reuse processing code used by other classes. I stumbled across this while trying to parse the output of a running process. Take the…</description>
    </item>
    <item>
      <title>Gentoo Emerge Issues</title>
      <link>https://muthanna.com/blog/posts/gentoo-emerge-issues.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/gentoo-emerge-issues.html</guid>
      <pubDate>Thu, 02 Mar 2006 13:52:00 -0500</pubDate>
      <description>Last night I was unfortunate enough to break one of my staging servers during an emerge world. Access Violations First was the dreaded &amp;quot;ACCESS VIOLATION SUMMARY&amp;quot; error. Portage builds packages inside a virtual sandbox, and uses it to ensure that ebuilds don&amp;#x27;t do anything bad. That said, sometimes…</description>
    </item>
    <item>
      <title>Working at Google</title>
      <link>https://muthanna.com/blog/posts/working-at-google.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/working-at-google.html</guid>
      <pubDate>Tue, 28 Feb 2006 10:36:00 -0500</pubDate>
      <description>So yesterday I accepted the job offer from Google. I will be working with their Site Reliability Engineering team in Manhattan, NY. I know, I know, I should&amp;#x27;ve picked California. Anyhow, I first got an e-mail from Google last September about working there. I never really wanted to leave Toronto,…</description>
    </item>
    <item>
      <title>Finding New Music with Google Sets</title>
      <link>https://muthanna.com/blog/posts/finding-new-music-with-google-sets.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/finding-new-music-with-google-sets.html</guid>
      <pubDate>Sat, 25 Feb 2006 09:32:00 -0500</pubDate>
      <description>So here&amp;#x27;s something cool. Google Labs has this online set completion tool called Google Sets. Basically, you give it a list of items, and it finds you other similar items. For example, sending it &amp;quot;Beef&amp;quot; and &amp;quot;Pork&amp;quot;, brings up &amp;quot;Poultry&amp;quot;, &amp;quot;Chicken&amp;quot;, &amp;quot;Seafood&amp;quot;, &amp;quot;Lamb&amp;quot; etc. It appears that they harness…</description>
    </item>
    <item>
      <title>4 Steps to Telephone Authentication</title>
      <link>https://muthanna.com/blog/posts/4-steps-to-telephone-authentication.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/4-steps-to-telephone-authentication.html</guid>
      <pubDate>Thu, 16 Feb 2006 07:59:00 -0500</pubDate>
      <description>This article explains how you can use the telephone to authenticate users, using the TeleAuth web-service. TeleAuth provides an API that allows you to call a user and request a numeric secret in real-time. It can be used within web-based applications, console apps, or for network services. It can…</description>
    </item>
    <item>
      <title>Useful OS X Shortcuts</title>
      <link>https://muthanna.com/blog/posts/useful-os-x-shortcuts.html</link>
      <guid isPermaLink="true">https://muthanna.com/blog/posts/useful-os-x-shortcuts.html</guid>
      <pubDate>Sat, 07 Jan 2006 09:10:00 -0500</pubDate>
      <description>When you spend 99% of your time on the terminal, it&amp;#x27;s nice not to have to use the mouse... _at all_. And this is quite close. OS X has a feature called &amp;quot;Full Keyboard Access&amp;quot;, that needs to be enabled before the following will work. Ctrl-F1 Enable/Disable Full Keyboard Access Ctrl-F2 Access Menubar…</description>
    </item>
  </channel>
</rss>