<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Posts on Eric Greer Weblog</title>
    <link>/post/</link>
    <description>Recent content in Posts on Eric Greer Weblog</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Mon, 01 Jan 0001 00:00:00 +0000</lastBuildDate>
    <atom:link href="/post/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Just use `git` to manage your dotfiles</title>
      <link>/post/2025-08-31-simple-dotfiles-script/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/post/2025-08-31-simple-dotfiles-script/</guid>
      <description>&lt;p&gt;There are a lot of dotfile managers out there like &lt;a href=&#34;https://www.chezmoi.io/&#34;&gt;chezmoi&lt;/a&gt;, &lt;a href=&#34;https://www.gnu.org/software/stow/&#34;&gt;stow&lt;/a&gt;, &lt;a href=&#34;https://yadm.io/&#34;&gt;yadm&lt;/a&gt;, and plenty more I&amp;rsquo;m sure. They each solve the problem of sharing configs in different ways, but they all require some kind of tool to be installed and some commands to be learned.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;But you don&amp;rsquo;t really need any of these&lt;/strong&gt; to have versioned and synchronized dotfiles, just &lt;code&gt;git&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;git&lt;/code&gt; tracks everything by default, so I just flip the logic. I simply ignore everything using a &lt;code&gt;.gitignore&lt;/code&gt; in my home directory, then force-add the files I actually want by hand, like so:&lt;/p&gt;</description>
    </item>
    <item>
      <title>My Case Against the Contracts Proposal for Go (updated)</title>
      <link>/post/my-case-against-go-contracts/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/post/my-case-against-go-contracts/</guid>
      <description>&lt;p&gt;&lt;em&gt;The original version of this post was &lt;a href=&#34;/post/my-case-against-go-contracts-old&#34;&gt;here&lt;/a&gt;.  I have made adjustments and fixes after further review of the spec and listening to feedback online.  Thanks to everyone who responded!&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-generics-draft&#34;&gt;The Generics Draft&lt;/h2&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://go.googlesource.com/proposal/+/master/design/go2draft-contracts.md&#34;&gt;design draft for generics in Go 2&lt;/a&gt; has been published for some days now and it&amp;rsquo;s no surprise given the &lt;a href=&#34;https://docs.google.com/document/d/1vrAy9gMpMoS3uaVphB32uVXX4pi-HnNjkMEgyAHX4N4/view&#34;&gt;immense amount of history&lt;/a&gt; that has taken place.  Go already supports &lt;a href=&#34;https://tour.golang.org/methods/16&#34;&gt;type switches&lt;/a&gt; and &lt;a href=&#34;https://tour.golang.org/methods/9&#34;&gt;interfaces&lt;/a&gt; that enable very loose generic code, but still another kind of generic behavior is desired enough to bring about this draft.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My Case Against the Contracts Proposal for Go (original)</title>
      <link>/post/my-case-against-go-contracts-old/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/post/my-case-against-go-contracts-old/</guid>
      <description>&lt;h2 id=&#34;the-proposal&#34;&gt;The Proposal&lt;/h2&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://go.googlesource.com/proposal/+/master/design/go2draft-contracts.md&#34;&gt;design draft for generics in Go 2&lt;/a&gt; is published for some days now and it&amp;rsquo;s no surprise given the &lt;a href=&#34;https://docs.google.com/document/d/1vrAy9gMpMoS3uaVphB32uVXX4pi-HnNjkMEgyAHX4N4/view&#34;&gt;immense amount of history&lt;/a&gt; that has taken place.  Go already supports &lt;a href=&#34;https://tour.golang.org/methods/16&#34;&gt;type switches&lt;/a&gt; and &lt;a href=&#34;https://tour.golang.org/methods/9&#34;&gt;interfaces&lt;/a&gt; that enable very loose generic code, but still some kind of generic behavior is desired enough to bring about this proposal.&lt;/p&gt;&#xA;&lt;p&gt;I intend to demonstrate that the draft for contracts proposes an unfit solution to generics on the grounds that it breaks several key benefits of the language for little benefit.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Better, More Idiomatic Flags Package for Go</title>
      <link>/post/a-better-flags-package-for-go/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/post/a-better-flags-package-for-go/</guid>
      <description>&lt;img width=&#34;200px&#34; src=&#39;https://github.com/integrii/flaggy/raw/master/assets/flaggy-gopher.png&#39;&gt;&#xA;&lt;p&gt;Github: &lt;a href=&#34;https://github.com/integrii/flaggy&#34;&gt;github.com/integrii/flaggy&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Today, I am happy to announce &lt;a href=&#34;https://github.com/integrii/flaggy&#34;&gt;flaggy&lt;/a&gt; as stable for production use.  Flaggy was originally built out of frustrations with all other flag packages available today.  There are a lot of flag packages out there, but missing features, lack of subcommand support, and strange hard-to-remember patterns are all too common.  Flaggy is new, but has been polished and tested extensively.  I think you&amp;rsquo;re going to like it.&lt;/p&gt;&#xA;&lt;p&gt;Most people use &lt;a href=&#34;https://github.com/spf13/cobra&#34;&gt;Cobra&lt;/a&gt; when they want subcommands and robust flag support, but that imposes an entire package structure on your project.  Your &lt;code&gt;main&lt;/code&gt; ends up as a tiny program that calls a &lt;a href=&#34;https://github.com/spf13/cobra#getting-started&#34;&gt;variety of specially crafted packages&lt;/a&gt;.  I &lt;a href=&#34;https://github.com/spf13/cobra/issues/641&#34;&gt;brought this up as an issue&lt;/a&gt; and despite getting a few thumbs up, never got a response (or even label applied).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Judging the Stupidity of GitHub Projects by Stars and Forks</title>
      <link>/post/judging-the-stupidity-of-github-projects/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/post/judging-the-stupidity-of-github-projects/</guid>
      <description>&lt;img style=&#34;float: right;margin:20px;max-width:50%;&#34; src=&#34;/img/fork-me.jpg&#34;&gt;&#xA;&lt;p&gt;I was scouting around github today and noticed that many projects seem to have a huge number of forks&amp;hellip;  Way more forks than are actually being used.  At first this seemed strange, but I quickly realized that this large number of forks is due to people not knowing what forks are actually for.&lt;/p&gt;&#xA;&lt;p&gt;Forks are for making your own snapshot of a codebase so that you can make a new&#xA;version of it with your own special sauce, or so that you can contribute a change in the form of a pull request.  Simply, you must make a fork whenever you&#xA;need to modify the codebase, but do not have direct access to do so. New users&#xA;don&amp;rsquo;t understand this and end up equating the &amp;lsquo;fork&amp;rsquo; button with &amp;lsquo;download&amp;rsquo; or&#xA;&amp;lsquo;bookmark&amp;rsquo;.  Little do they know, you can download code directly from the&#xA;original repository and you can bookmark things using Github&amp;rsquo;s stars.&lt;/p&gt;</description>
    </item>
    <item>
      <title>RServe Chef Cookbook</title>
      <link>/post/rserve-chef-cookbook-released/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/post/rserve-chef-cookbook-released/</guid>
      <description>&lt;p&gt;I needed to deploy a bunch of &lt;a href=&#34;https://rforge.net/Rserve/&#34;&gt;Rserve&lt;/a&gt; instances in AWS, but there weren&amp;rsquo;t any available cookbooks for doing such a thing on the &lt;a href=&#34;http://supermarket.chef.io&#34;&gt;chef supermarket&lt;/a&gt; yet.  I rolled up my sleeves and created one.  I hope people find it useful and/or contribute.  I would have used CentOS 7, but Rserve still isn&amp;rsquo;t installing properly there.  There are some missing libraries.&lt;/p&gt;&#xA;&lt;p&gt;The cookbook sets up a daemon and listens on port 6311.&lt;/p&gt;</description>
    </item>
    <item>
      <title>(go-redis-migrator) Migrate keys between Redis hosts or clusters using GO</title>
      <link>/post/migrate-redis-keys-between-hosts-or-clusters/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/post/migrate-redis-keys-between-hosts-or-clusters/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://raw.githubusercontent.com/integrii/go-redis-migrator/master/logo.png&#34; alt=&#34;Go Redis Migrator&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Migrate between Redis instances and clusters easily.  Get Redis Migrator on Github &lt;a href=&#34;https://github.com/integrii/go-redis-migrator&#34;&gt;here&lt;/a&gt;!&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;I recently have been both working with &lt;a href=&#34;http://golang.org&#34;&gt;go&lt;/a&gt; and &lt;a href=&#34;http://redis.io&#34;&gt;Redis&lt;/a&gt; a lot.  When I came across the need to copy all the keys in a cluster to a single host (for use with development and testing), I set out to find a simple key migrator utility that supported clusters.  Turns out, there aren&amp;rsquo;t any I could find!  Clustering just came to Redis in version 3.0 and is still pretty new.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Meet LightningPHP</title>
      <link>/post/lightningphp-mvc-hhvm-framework/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/post/lightningphp-mvc-hhvm-framework/</guid>
      <description>&lt;p&gt;I have been writing an application that is planned to scale pretty big.  This means that every 1% of processing time saved turns into a big bottom line difference in the budget.  I created LightningPHP to work very similar to CodeIgniter but to more importantly and always foremost run extremely fast.  During my tests, my code ran &lt;strong&gt;15 times faster&lt;/strong&gt; with HHVM and LightningPHP over Codeigniter, PHP and Apache.&lt;/p&gt;&#xA;&lt;p&gt;Check it out on Github at &lt;a href=&#34;http://github.com/integrii/LightningPHP&#34;&gt;integrii/LightningPHP&lt;/a&gt; - it is well documented!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Redis Clustering - Setup on Centos 6 and Advanced Failover Testing</title>
      <link>/post/redis-clustering-setup-on-centos-6/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/post/redis-clustering-setup-on-centos-6/</guid>
      <description>&lt;p&gt;My new project Sophia requires a ton of database calls.  When I say a ton, I mean a TON.  Thankfully, the tech world has JUST started vetting exactly the solution I need: Redis clustering.&lt;/p&gt;&#xA;&lt;p&gt;Redis is a super fast memory &lt;code&gt;key:value&lt;/code&gt; store like memcache, but supports more types of data.  Everything is kept in memory and sync&amp;rsquo;d to disk every 5m or whatever you set it to.&lt;/p&gt;&#xA;&lt;p&gt;Redis clustering is still in beta and very new.  In fact, to even get your hands on it, you have to compile it from the unstable branch on github.  With that said, clustering has been worked on for about TWO YEARS now and when setup right, it seems to work.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
