<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Jinked!</title>
    <description>Devops, Code, and Baking, with the occasional side of Gaming.</description>
    <link>http://blog.jinked.com/</link>
    <atom:link href="http://blog.jinked.com/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Sun, 10 Sep 2017 21:19:04 +0000</pubDate>
    <lastBuildDate>Sun, 10 Sep 2017 21:19:04 +0000</lastBuildDate>
    <generator>Jekyll v3.5.2</generator>
    
      <item>
        <title>I Work At Google Now</title>
        <description>&lt;p&gt;Just so we’re clear on my bias and all.&lt;/p&gt;
</description>
        <pubDate>Wed, 06 Sep 2017 14:55:29 +0000</pubDate>
        <link>http://blog.jinked.com/eh/2017/09/06/I-Work-At-Google-Now.html</link>
        <guid isPermaLink="true">http://blog.jinked.com/eh/2017/09/06/I-Work-At-Google-Now.html</guid>
        
        
        <category>eh</category>
        
      </item>
    
      <item>
        <title>How To Scale Celery</title>
        <description>&lt;p&gt;You can’t.&lt;/p&gt;
</description>
        <pubDate>Thu, 15 Jun 2017 12:02:47 +0000</pubDate>
        <link>http://blog.jinked.com/python/2017/06/15/How-to-Scale-Celery.html</link>
        <guid isPermaLink="true">http://blog.jinked.com/python/2017/06/15/How-to-Scale-Celery.html</guid>
        
        
        <category>python</category>
        
      </item>
    
      <item>
        <title>How To Make Elasticsearch Fast</title>
        <description>&lt;p&gt;Add the following to the settings of an index you want to speed up:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;settings&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;index&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;queries&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;cache&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
          &lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&quot;everything&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;// for test purposes only
public static final Setting&amp;lt;Boolean&amp;gt; INDEX_QUERY_CACHE_EVERYTHING_SETTING =
    Setting.boolSetting(&quot;index.queries.cache.everything&quot;, false, Property.IndexScope);

// This setting is an escape hatch in case not caching term queries would slow some users down
// Do not document.
public static final Setting&amp;lt;Boolean&amp;gt; INDEX_QUERY_CACHE_TERM_QUERIES_SETTING =
    Setting.boolSetting(&quot;index.queries.cache.term_queries&quot;, false, Property.IndexScope);
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Alternatively, if you’re serious about searching, use &lt;a href=&quot;http://lucene.apache.org/solr/&quot;&gt;Solr&lt;/a&gt;. Bonus points if you &lt;a href=&quot;https://cwiki.apache.org/confluence/display/solr/Running+Solr+on+HDFS&quot;&gt;back it with HDFS&lt;/a&gt; so you never have to sync data.&lt;/p&gt;

&lt;p&gt;Good luck!&lt;/p&gt;
</description>
        <pubDate>Fri, 12 May 2017 12:11:28 +0000</pubDate>
        <link>http://blog.jinked.com/elasticsearch/2017/05/12/How-To-Make-Elasticsearch-Fast.html</link>
        <guid isPermaLink="true">http://blog.jinked.com/elasticsearch/2017/05/12/How-To-Make-Elasticsearch-Fast.html</guid>
        
        
        <category>elasticsearch</category>
        
      </item>
    
      <item>
        <title>Using Go in a Unirepo</title>
        <description>&lt;p&gt;I’ve recently started a love affair with Go, much to the disgust of some of my coworkers. One of the best things about using Go is how ridiculously fast your work cycle becomes when compared to other languages, such as Erlang and Elixir. Simple things that require a tremendous amount of work are a non-issue in Go, which ultimately helps you get to market faster.&lt;/p&gt;

&lt;p&gt;However, a common complaint about Go is package and dependency management. There are no shortages of community developed package managers for Go, but in general I don’t think a package manager is really needed so long as you structure your work correctly.&lt;/p&gt;

&lt;h3 id=&quot;unirepo-folder-layout&quot;&gt;Unirepo Folder Layout&lt;/h3&gt;
&lt;p&gt;Short and simple, here’s what works the best:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;code/ &amp;lt;--- This is your GOPATH, but you don't ever need to set it. Keep reading.
  bin/
  pkg/
  src/
    make/
      Makefile
  tools/
  .git/
  .gitignore
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;installing-dependencies&quot;&gt;Installing Dependencies&lt;/h3&gt;
&lt;p&gt;Again, keep it simple and just do&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;GOPATH=/path/to/code go get -u github.com/...
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;setting-up-your-code&quot;&gt;Setting Up Your Code&lt;/h3&gt;
&lt;p&gt;All new projects should live in &lt;code class=&quot;highlighter-rouge&quot;&gt;code/src/&amp;lt;project_name&amp;gt;&lt;/code&gt;. In each project folder, create a Makefile and include the following in it&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;include ../make/Makefile
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3 id=&quot;compiling-your-code&quot;&gt;Compiling Your Code&lt;/h3&gt;
&lt;p&gt;This one is a bit tricky, but with the magic of Bash and Make, you can make life pretty easy. In &lt;code class=&quot;highlighter-rouge&quot;&gt;code/src/make/Makefile&lt;/code&gt;, paste the following&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;GOPATH&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;realpath &lt;span class=&quot;nf&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;shell&lt;/span&gt; dirname &lt;span class=&quot;err&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;realpath &lt;span class=&quot;err&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;lastword &lt;span class=&quot;nv&quot;&gt;$(MAKEFILE_LIST))))&lt;/span&gt;/../../&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;GOBIN&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;GOPATH&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;/bin
&lt;span class=&quot;k&quot;&gt;export &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;APP&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;shell&lt;/span&gt; basename &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$$&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;PWD&quot;&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;nl&quot;&gt;build&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;
	go build
	go install

&lt;span class=&quot;nl&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;
	../../bin/&lt;span class=&quot;nv&quot;&gt;$(APP)&lt;/span&gt;

&lt;span class=&quot;nl&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;@&lt;/span&gt;mkdir -p &lt;span class=&quot;nv&quot;&gt;$(GOPATH)&lt;/span&gt;/tests/
	&lt;span class=&quot;p&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;'mode: set'&lt;/span&gt; &amp;gt; coverage.txt &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; go list &lt;span class=&quot;nv&quot;&gt;$(APP)&lt;/span&gt;/... | xargs -n1 -I&lt;span class=&quot;o&quot;&gt;{}&lt;/span&gt; sh -c &lt;span class=&quot;s1&quot;&gt;'go test -covermode=set 	-coverprofile=coverage.tmp {} &amp;amp;&amp;amp; tail -n +2 coverage.tmp &amp;gt;&amp;gt; coverage.txt'&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; rm coverage.tmp
	&lt;span class=&quot;p&quot;&gt;@&lt;/span&gt;go tool cover -html&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;coverage.txt -o &lt;span class=&quot;nv&quot;&gt;$(GOPATH)&lt;/span&gt;/tests/&lt;span class=&quot;nv&quot;&gt;$(APP)&lt;/span&gt;.html
	&lt;span class=&quot;p&quot;&gt;@&lt;/span&gt;rm coverage.txt

&lt;span class=&quot;nl&quot;&gt;package&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;
	&lt;span class=&quot;nv&quot;&gt;GOOS&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;linux &lt;span class=&quot;nv&quot;&gt;GOARCH&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;amd64 go build -o ../../bin/&lt;span class=&quot;nv&quot;&gt;$(APP)&lt;/span&gt;.linux
	&lt;span class=&quot;nv&quot;&gt;GOOS&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;darwin &lt;span class=&quot;nv&quot;&gt;GOARCH&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;amd64 go build -o ../../bin/&lt;span class=&quot;nv&quot;&gt;$(APP)&lt;/span&gt;.mac

&lt;span class=&quot;nl&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;@&lt;/span&gt;:
&lt;span class=&quot;nl&quot;&gt;.PHONY&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;test&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Now any project that includes this file (as noted in the section above) will work with Make. For example&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;cd code/src/someProject
make
make run
make test
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;It’s important to note this setup &lt;strong&gt;automatically sets your GOPATH, you do not need to set it in your bash profile, and is 100% portable across folder locations and OS’s.&lt;/strong&gt;&lt;/p&gt;

&lt;h3 id=&quot;this-is-dumb-why-would-you-do-this&quot;&gt;This Is Dumb; Why Would You Do This?&lt;/h3&gt;
&lt;p&gt;Speed and simplicity of management.&lt;/p&gt;

&lt;p&gt;Consider working in a large environment where many people will write many different libraries. Every time you want to make a change to a library, you need to commit your code in some other repository, push that code, pull it back down to your Go project, compile, etc. If you have a bug in your new code, you’ll have to do it all over again. Making many small changes? Good luck.&lt;/p&gt;

&lt;p&gt;With this setup, you commit the whole tree, and just focus on what you need to do: edit your code. Need to make a change to a dep? Then do it and recompile. The next time you push and merge, your changes will be available to every app within your organization.&lt;/p&gt;

&lt;p&gt;As an added bonus, the next time Github is DDOS’d, your work flow won’t be disrupted, assuming you’re not using Github as your primary repository (you’re not, right?).&lt;/p&gt;

&lt;p&gt;Enjoy.&lt;/p&gt;
</description>
        <pubDate>Wed, 21 Dec 2016 12:11:28 +0000</pubDate>
        <link>http://blog.jinked.com/golang/2016/12/21/Using-Go-in-a-Unirepo.html</link>
        <guid isPermaLink="true">http://blog.jinked.com/golang/2016/12/21/Using-Go-in-a-Unirepo.html</guid>
        
        
        <category>golang</category>
        
      </item>
    
      <item>
        <title>How To Start An Elixir App In Production</title>
        <description>&lt;p&gt;Elixir has been gaining a lot of traction lately, particularly because of the immensely popular Phoenix web framework. Most of the users of Elixir tend to be smaller shops that have very simple deployment needs, and as such, documentation on large scale/automated deployment of Elixir apps is lacking.&lt;/p&gt;

&lt;h3 id=&quot;commands&quot;&gt;Commands&lt;/h3&gt;
&lt;p&gt;Elixir programs are run by executing a few different commands at the shell, not too dissimilar from Java, Erlang, etc. Elixir has several commands that do a few different things. The frustrating bit is all of these commands cross over and call each other in obscure and confusing ways. You’ll see what I mean a bit later.&lt;/p&gt;

&lt;p&gt;Below is an outline of the two commands we will be using. Note, these aren’t all the commands but only the commands we need to productionize and support Elixir.&lt;/p&gt;

&lt;h4 id=&quot;elixir&quot;&gt;elixir&lt;/h4&gt;
&lt;p&gt;This command evaluates a project file and runs it, but also acts as an interface of sorts to the underlaying Erlang VM. This is ultimately the command that will run Erlang, and is what you will use to launch Elixir in production (sort of, keep reading).&lt;/p&gt;

&lt;h4 id=&quot;mix&quot;&gt;mix&lt;/h4&gt;
&lt;p&gt;This command also launches projects and code, but is also the compile tool and the main tool you use to launch your app in production.&lt;/p&gt;

&lt;h3 id=&quot;configuration&quot;&gt;Configuration&lt;/h3&gt;
&lt;p&gt;Elixir handles configuration in a way that is incredibly similar to Ruby/Rails. When starting your application, it will read from &lt;code class=&quot;highlighter-rouge&quot;&gt;config/config.exs&lt;/code&gt;. At the bottom of that file, you should see something like so:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;import_config &quot;#{Mix.env}.exs&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;This tells Elixir to include another config file, ie: prod, dev, test. You can specify which environment to load by setting the &lt;code class=&quot;highlighter-rouge&quot;&gt;MIX_ENV&lt;/code&gt; environmental variable when starting your application. For example, setting:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;MIX_ENV=prod
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;will load &lt;code class=&quot;highlighter-rouge&quot;&gt;config/prod.exs&lt;/code&gt;.&lt;/p&gt;

&lt;h3 id=&quot;compiling&quot;&gt;Compiling&lt;/h3&gt;
&lt;p&gt;Compiling is a one liner:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mix compile
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;while in your project root. If you like to be explicit, you can do:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mix deps.compile
mix compile
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Which will compile deps independently.&lt;/p&gt;

&lt;h3 id=&quot;running&quot;&gt;Running&lt;/h3&gt;
&lt;p&gt;Running an Elixir app is a bit tricky depending on your needs. If you’re running distributed nodes, you must run it like so:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;MIX_ENV=prod elixir --name app@hostname --cookie &quot;MyErlangCookie&quot; -S mix run --no-compile --no-halt
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;A few things to note:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;You should be using an init system that is event based. That is, use Upstart, systemd, runit, etc. Do not use sysvinit.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;elixir&lt;/code&gt; sets Erlang parameters, and in this case we’re setting the node name and Erlang cookie.&lt;/li&gt;
  &lt;li&gt;Replace the &lt;code class=&quot;highlighter-rouge&quot;&gt;app@hostname&lt;/code&gt; bit with something more suitable for your environment.&lt;/li&gt;
  &lt;li&gt;Passing &lt;code class=&quot;highlighter-rouge&quot;&gt;-S mix run&lt;/code&gt; tells Elixir to start the app it self using mix. Since mix is the compile tool, we want to instruct mix not to compile our code in production, and to not halt once the code as started running.&lt;/li&gt;
  &lt;li&gt;The &lt;code class=&quot;highlighter-rouge&quot;&gt;MIX_ENV&lt;/code&gt; can be omitted and instead put into some other facility of your init script, ie: Upstart env stanza, etc.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Using the above command, your Elixir app will launch cleanly into the foreground… unless you are using Phoenix! There is one last thing that you must do in order to make a Phoenix app work. Edit your &lt;code class=&quot;highlighter-rouge&quot;&gt;config/prod.exs&lt;/code&gt; file and make sure the following is uncommented:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;config :phoenix, :serve_endpoints, true
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;This will start Phoenix when you do &lt;code class=&quot;highlighter-rouge&quot;&gt;mix run&lt;/code&gt;. Without the above line, Phoenix won’t be told to start up, resulting in all your code launching, except the web server it self.&lt;/p&gt;

&lt;p&gt;That’s about it!&lt;/p&gt;

&lt;h3 id=&quot;tldr&quot;&gt;TL;DR&lt;/h3&gt;
&lt;p&gt;Compile like this:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mix deps.compile
mix compile
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;If using Phoenix, add this to the following to &lt;code class=&quot;highlighter-rouge&quot;&gt;config/prod.exs&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;config :phoenix, :serve_endpoints, true
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;then start your app using Upstart, systemd, runit, and let it handle the &lt;strong&gt;foreground&lt;/strong&gt; process like so&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;MIX_ENV=prod elixir --name app@hostname --cookie &quot;MyErlangCookie&quot; -S mix run --no-compile --no-halt
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;
</description>
        <pubDate>Sat, 12 Sep 2015 12:56:29 +0000</pubDate>
        <link>http://blog.jinked.com/devops/2015/09/12/How-To-Start-An-Elixir-App-In-Production.html</link>
        <guid isPermaLink="true">http://blog.jinked.com/devops/2015/09/12/How-To-Start-An-Elixir-App-In-Production.html</guid>
        
        
        <category>devops</category>
        
      </item>
    
      <item>
        <title>Rendering Engine</title>
        <description>&lt;p&gt;Because every game needs a screenshot of their awesome rendering technology…&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/mud.png&quot; alt=&quot;Graphics!&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Wed, 09 Sep 2015 09:01:02 +0000</pubDate>
        <link>http://blog.jinked.com/eh/2015/09/09/Rendering-Engine.html</link>
        <guid isPermaLink="true">http://blog.jinked.com/eh/2015/09/09/Rendering-Engine.html</guid>
        
        
        <category>eh</category>
        
      </item>
    
      <item>
        <title>NodeMUD</title>
        <description>&lt;p&gt;I’ve long held a passion for MUD’s; ever since I was 12 years old or so I have been playing and writing code for MUD’s. I’ve spent a lot of time over the past two decades writing various small MUD code bases from the ground up in different languages, including C, C++, VB (I’m so sorry…), Perl, Ruby, et al.&lt;/p&gt;

&lt;p&gt;However, after a long time, I’ve finally settled on a language and code base. I present, NodeMUD! NodeMUD is an entire MUD engine for NodeJS (at the time of this writing, 0.12.x should work), written in Coffeescript. Right now, my primary focus is content creation and speed; I want this engine to be fast enough for general purpose MUD’s that support hundreds (thousands?) of players at once. There are some core issues that need to be resolved (such as combat calculations happening on the main loop), but I suppose combat should be implemented before I worry too much about that!&lt;/p&gt;

&lt;p&gt;I’ve taken care to write (mostly) functional code. State is only stored in entity objects; all other code, such as interpreters, should be functional. However it’s entirely possible I missed a thing or two.&lt;/p&gt;

&lt;p&gt;Anyway, feel free to get the code &lt;a href=&quot;http://github.com/cidan/nodemud&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Tue, 08 Sep 2015 22:51:50 +0000</pubDate>
        <link>http://blog.jinked.com/eh/2015/09/08/Node-Mud.html</link>
        <guid isPermaLink="true">http://blog.jinked.com/eh/2015/09/08/Node-Mud.html</guid>
        
        
        <category>eh</category>
        
      </item>
    
      <item>
        <title>Moved.</title>
        <description>&lt;p&gt;I’ve decided to get off of tumblr for now; mostly it was due to a gripe with the post editor/creator. Ultimately I think I’ve landed on Jekyll. We’ll see how this goes.&lt;/p&gt;
</description>
        <pubDate>Tue, 08 Sep 2015 22:03:25 +0000</pubDate>
        <link>http://blog.jinked.com/moved/2015/09/08/moved.html</link>
        <guid isPermaLink="true">http://blog.jinked.com/moved/2015/09/08/moved.html</guid>
        
        
        <category>moved</category>
        
      </item>
    
  </channel>
</rss>
