<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Nerderati</title>
    <subtitle>I primarily yell at code. Well, I look sternly in its general direction, gently urging it to do my bidding.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://nerderati.com/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://nerderati.com"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2024-10-28T00:00:00+00:00</updated>
    <id>https://nerderati.com/atom.xml</id>
    <entry xml:lang="en">
        <title>Automatically run `uv sync` on git branch change</title>
        <published>2024-10-28T00:00:00+00:00</published>
        <updated>2024-10-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Joël Perras
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://nerderati.com/automatically-run-uv-sync-on-git-branch-change/"/>
        <id>https://nerderati.com/automatically-run-uv-sync-on-git-branch-change/</id>
        
        <summary type="html">&lt;p&gt;This is a bit of a silly post: it&#x27;s relatively trivial, but someone asked me if
this was possible the other day and I realized that it&#x27;s perhaps &lt;em&gt;not&lt;&#x2F;em&gt; so
trivial if you&#x27;re unfamiliar with the various bits of necessary tooling.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>MVP table stakes</title>
        <published>2024-09-23T00:00:00+00:00</published>
        <updated>2024-09-23T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Joël Perras
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://nerderati.com/mvp-table-stakes/"/>
        <id>https://nerderati.com/mvp-table-stakes/</id>
        
        <summary type="html">&lt;p&gt;Creating new apps has never been easier! Or so I&#x27;ve been told.&lt;&#x2F;p&gt;
&lt;p&gt;What I &lt;em&gt;have&lt;&#x2F;em&gt; noticed is that customers expect a certain baseline of
functionality. Features that they have grown accustomed to. Features and
functionality that exists in other, more mature applications. Applications and
services with teams and teams of engineers and managers behind them. You know,
easy stuff.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Tracing the evolution of a Python function with git log</title>
        <published>2024-07-25T00:00:00+00:00</published>
        <updated>2024-07-25T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Joël Perras
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://nerderati.com/tracing-the-evolution-of-a-python-function-with-git-log/"/>
        <id>https://nerderati.com/tracing-the-evolution-of-a-python-function-with-git-log/</id>
        
        <summary type="html">&lt;p&gt;Have you ever been frustrated by the amount of noise you have to wade through
with &lt;code&gt;git log -p -- &amp;lt;filepath&amp;gt;&lt;&#x2F;code&gt;? What if there was a way to narrow down the diff
output so that you could see how a single function or method evolved over time,
and ignore all the other cruft that you don&#x27;t care about?&lt;&#x2F;p&gt;
&lt;p&gt;As with most things &lt;code&gt;git&lt;&#x2F;code&gt;, there&#x27;s an obscure and underutilized option in the
docs that can do exactly that!&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>A Python Epoch Timestamp Timezone Trap</title>
        <published>2024-07-15T00:00:00+00:00</published>
        <updated>2024-07-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Joël Perras
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://nerderati.com/a-python-epoch-timestamp-timezone-trap/"/>
        <id>https://nerderati.com/a-python-epoch-timestamp-timezone-trap/</id>
        
        <summary type="html">&lt;p&gt;Date and time handling in software has always been a pain point — because date-time math and timezones are hard! — and Python has has historically made some ill-advised choices in the past that catch even the most seasoned developers off-guard.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>How to differentiate between empty strings and NULL values in the psql CLI</title>
        <published>2024-07-11T00:00:00+00:00</published>
        <updated>2024-07-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Joël Perras
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://nerderati.com/how-to-differentiate-nulls-and-empty-string-in-psql-cli/"/>
        <id>https://nerderati.com/how-to-differentiate-nulls-and-empty-string-in-psql-cli/</id>
        
        <summary type="html">&lt;p&gt;The PostgreSQL interactive CLI has the wonderfully convenient &lt;a href=&quot;https:&#x2F;&#x2F;www.postgresql.org&#x2F;docs&#x2F;current&#x2F;app-psql.html#APP-PSQL-META-COMMAND-PSET&quot;&gt;&lt;code&gt;\pset&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; command, which can be invoked to modify the display output of query results.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Use a Pretty Printer by Default in Python Shell Contexts</title>
        <published>2020-08-10T00:00:00+00:00</published>
        <updated>2020-08-10T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Joël Perras
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://nerderati.com/use-a-pretty-printer-by-default-in-python-shell-contexts/"/>
        <id>https://nerderati.com/use-a-pretty-printer-by-default-in-python-shell-contexts/</id>
        
        <summary type="html">&lt;p&gt;I can&#x27;t believe it took me years to figure this out, but you can very easily set
the
&lt;a href=&quot;https:&#x2F;&#x2F;docs.python.org&#x2F;3.8&#x2F;library&#x2F;pprint.html#pprint.pprint&quot;&gt;&lt;code&gt;pprint.pprint&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;
function as the default implementation to use when calling &lt;code&gt;print()&lt;&#x2F;code&gt; during the
invocation of a shell or when running a program under the python interpreter.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Speed Up Pylint By Reducing the Number of Files It Examines</title>
        <published>2020-04-20T00:00:00+00:00</published>
        <updated>2020-04-20T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Joël Perras
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://nerderati.com/speed-up-pylint-by-reducing-the-files-it-examines/"/>
        <id>https://nerderati.com/speed-up-pylint-by-reducing-the-files-it-examines/</id>
        
        <summary type="html">&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.pylint.org&#x2F;&quot;&gt;Pylint&lt;&#x2F;a&gt; is a great linter, but it can be horrendously
slow to run on anything but the most trivial of code bases.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Leveraging De Morgan&#x27;s Laws to Rewrite Boolean Expressions</title>
        <published>2018-06-27T00:00:00+00:00</published>
        <updated>2018-06-27T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Joël Perras
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://nerderati.com/leverage-demorgans-laws-to-rewrite-boolean-expressions/"/>
        <id>https://nerderati.com/leverage-demorgans-laws-to-rewrite-boolean-expressions/</id>
        
        <summary type="html">&lt;p&gt;Sometimes the logic in your application get a bit out of hand, and ends up an
unreadable, tangled mess of negated conjunctions and disjunctions. A judicious
application of De Morgan&#x27;s Laws can help you translate confusing expressions or
sub-expressions to something a bit more readable, while maintaining the same
logical truths and falsehoods that you originally intended.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Slack, Messaging Services, and the Overton Window</title>
        <published>2018-03-16T00:00:00+00:00</published>
        <updated>2018-03-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Joël Perras
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://nerderati.com/slack-messaging-services-and-the-overton-window/"/>
        <id>https://nerderati.com/slack-messaging-services-and-the-overton-window/</id>
        
        <summary type="html">&lt;p&gt;Slack has recently begun phasing out their IRC and XMPP gateways, indicating
that:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;[We] can make no guarantee about the security of any IRC&#x2F;XMPP client
(including transport encryption or data security).&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;along with the statement that it is not possible for them to maintain feature
compatibility of their application across these various protocols and
transports.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>What Shaving Can Teach Us About Software Development</title>
        <published>2018-03-13T00:00:00+00:00</published>
        <updated>2018-03-13T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Joël Perras
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://nerderati.com/what-shaving-can-teach-us-about-software-development/"/>
        <id>https://nerderati.com/what-shaving-can-teach-us-about-software-development/</id>
        
        <summary type="html">&lt;p&gt;A few months ago, I started to shave using a straight razor.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Github is forcing me to change my username, and will not tell me why.</title>
        <published>2018-03-09T00:00:00+00:00</published>
        <updated>2018-03-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Joël Perras
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://nerderati.com/github-is-forcing-me-to-change-my-username/"/>
        <id>https://nerderati.com/github-is-forcing-me-to-change-my-username/</id>
        
        <summary type="html">&lt;p&gt;A few days ago I received an email from &lt;code&gt;support@github.com&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>The Container Craze</title>
        <published>2018-02-14T00:00:00+00:00</published>
        <updated>2018-02-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Joël Perras
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://nerderati.com/the-container-craze/"/>
        <id>https://nerderati.com/the-container-craze/</id>
        
        <summary type="html">&lt;p&gt;Containers are everywhere: it&#x27;s hard to go a day without hearing about the
latest Docker feature, the newest post about how Kubernetes has revolutionized
devops, or wondering how you&#x27;ll ever get employed if you don&#x27;t live and breath
and blog daily about containers.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>MIME Encoded Words in Email Headers</title>
        <published>2017-06-09T00:00:00+00:00</published>
        <updated>2017-06-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Joël Perras
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://nerderati.com/mime-encoded-words-in-email-headers/"/>
        <id>https://nerderati.com/mime-encoded-words-in-email-headers/</id>
        
        <summary type="html">&lt;p&gt;A coworker of mine, Andreas Birkebæk, received an email the other day, and sent
it to me thinking that it was some variation of a &lt;a href=&quot;https:&#x2F;&#x2F;nerderati.com&#x2F;hello-my-name-is-joel&#x2F;&quot;&gt;unicode failure that plagues
me regularly&lt;&#x2F;a&gt;. While it &lt;em&gt;was&lt;&#x2F;em&gt; an
encoding failure of sorts, this one was more interesting than your
garden-variety UTF-8&#x2F;ISO8859-1 problem.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>PostgreSQL Tables Can Only Have 1600 Columns, Ever.</title>
        <published>2017-01-03T00:00:00+00:00</published>
        <updated>2017-01-03T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Joël Perras
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://nerderati.com/postgresql-tables-can-have-at-most-1600-columns/"/>
        <id>https://nerderati.com/postgresql-tables-can-have-at-most-1600-columns/</id>
        
        <summary type="html">&lt;p&gt;I ran into a situation today that was particularly frustrating, but for an interesting reason.&lt;&#x2F;p&gt;
&lt;p&gt;PostgreSQL tables are hard-limited to a maximum of &lt;code&gt;1600&lt;&#x2F;code&gt; columns. The limit, as I found out after a bit of digging, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;postgres&#x2F;postgres&#x2F;blob&#x2F;de41869b64d57160f58852eab20a27f248188135&#x2F;src&#x2F;include&#x2F;access&#x2F;htup_details.h#L23-L47&quot;&gt;is specified in the PostgreSQL source&lt;&#x2F;a&gt; and accompanied by a short explanation:&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Hello, My Name is JoÃ«l.</title>
        <published>2016-11-04T00:00:00+00:00</published>
        <updated>2016-11-04T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Joël Perras
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://nerderati.com/hello-my-name-is-joel/"/>
        <id>https://nerderati.com/hello-my-name-is-joel/</id>
        
        <summary type="html">&lt;p&gt;Well, Not really.&lt;&#x2F;p&gt;
&lt;p&gt;My name is, in fact, Joël. You&#x27;d never guess that, however, from the consistent and &lt;em&gt;diverse&lt;&#x2F;em&gt; ways in which my non-ASCII given name is butchered by web applications, email servers, databases, and overzealous baristas that seem to believe I am the father of Superman.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Using CloudFront to Bypass AWS S3 Static Website Hosting Name Requirements</title>
        <published>2016-08-15T00:00:00+00:00</published>
        <updated>2016-08-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Joël Perras
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://nerderati.com/using-cloudfront-to-bypass-the-aws-s3-static-website-hosting-name-requirements/"/>
        <id>https://nerderati.com/using-cloudfront-to-bypass-the-aws-s3-static-website-hosting-name-requirements/</id>
        
        <summary type="html">&lt;p&gt;Amazon Web Services has the ability to serve objects contained within an S3
bucket as a static website. Upload some files to a bucket via their
web-based console or via their API (as implemented in
&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;boto&#x2F;boto&quot;&gt;boto&lt;&#x2F;a&gt;), flip a switch that indicates the bucket
in question is to be used for this purpose:&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Why DHCP Lease Expiration Matters for Your Coffee Shop Router</title>
        <published>2016-07-06T00:00:00+00:00</published>
        <updated>2016-07-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Joël Perras
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://nerderati.com/why-dhcp-lease-expiration-matters-for-your-coffee-shop-router/"/>
        <id>https://nerderati.com/why-dhcp-lease-expiration-matters-for-your-coffee-shop-router/</id>
        
        <summary type="html">&lt;p&gt;I often find myself working out of a café.&lt;&#x2F;p&gt;
&lt;p&gt;Nearly all of my &lt;a href=&quot;https:&#x2F;&#x2F;fictivekin.com&quot;&gt;work&lt;&#x2F;a&gt; requires an internet connection
at some point or another, which means that most of the cafés I frequent have
some sort of WiFi that I take advantage of. While I&#x27;m not generally one
to complain about the quality of free WiFi in the small, locally run
establishments in my neighbourhood, it &lt;em&gt;does&lt;&#x2F;em&gt; frustrate me that they are often
misconfigured to the point where the staff must reset the router every few
hours.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Installing Matplotlib, NumPy, SciPy, NLTK, and Pandas on OS X</title>
        <published>2014-09-03T00:00:00+00:00</published>
        <updated>2014-09-03T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Joël Perras
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://nerderati.com/installing-matplotlib-numpy-scipy-nltk-and-pandas-on-os-x-without-going-crazy/"/>
        <id>https://nerderati.com/installing-matplotlib-numpy-scipy-nltk-and-pandas-on-os-x-without-going-crazy/</id>
        
        <summary type="html">&lt;p&gt;I don&#x27;t know exactly why, but installing science&#x2F;math&#x2F;statistics oriented
Python packages on OS X has historically been a complete pain in the ass. It
seems as though things have improved over the past few years with the
development of custom disk images, meta-package installers and other fanciful
things, but most of these solutions sacrifice the ability to upgrade the given
packages or link against custom builds of supporting libraries due to overly
aggressive sandboxing to ensure that things Just Work™.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Bartering for Beers with Approximate Subset Sums</title>
        <published>2014-08-19T00:00:00+00:00</published>
        <updated>2014-08-19T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Joël Perras
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://nerderati.com/bartering-for-beers-with-approximate-subset-sums/"/>
        <id>https://nerderati.com/bartering-for-beers-with-approximate-subset-sums/</id>
        
        <summary type="html">&lt;p&gt;My favourite days are the ones where I get to solve a seemingly difficult
everyday problem with mathematics. A few weeks ago, my friend &lt;a
href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;a&quot;&gt;Andrei&lt;&#x2F;a&gt; came to me via IRC with a question,
which I have heavily paraphrased:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;I&#x27;ve got a list of the beers in my cellar, and each beer has a price
associated with it. I&#x27;d like to figure out how to generate a list of fair
trades between myself and another person who has their own list of beers and
prices, for any combination of bottles between the two of us.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Or, more generally: given two lists of items, each item with a fixed value, how
may we calculate the possible combinations of “equal” groups of one or more
items for each list when comparing to the other list in question?&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Simplify Your Life With an SSH Config File</title>
        <published>2011-03-17T00:00:00+00:00</published>
        <updated>2011-03-17T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Joël Perras
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://nerderati.com/2011-03-17-simplify-your-life-with-an-ssh-config-file/"/>
        <id>https://nerderati.com/2011-03-17-simplify-your-life-with-an-ssh-config-file/</id>
        
        <summary type="html">&lt;p&gt;If you&#x27;re anything like me, you probably log in and out of a half dozen
remote servers (or these days, local virtual machines) on a daily basis. And if
you&#x27;re even &lt;em&gt;more&lt;&#x2F;em&gt; like me, you have trouble remembering all of the various
usernames, remote addresses and command line options for things like specifying
a non-standard connection port or forwarding local ports to the remote machine.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Ideas of March</title>
        <published>2011-03-15T00:00:00+00:00</published>
        <updated>2011-03-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Joël Perras
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://nerderati.com/ideas-of-march/"/>
        <id>https://nerderati.com/ideas-of-march/</id>
        
        <summary type="html">&lt;p&gt;Four years ago when I started using a
&lt;a href=&quot;http:&#x2F;&#x2F;twitter.com&#x2F;jperras&quot;&gt;micro-blogging&lt;&#x2F;a&gt; service, I revelled in the sheer
simplicity and low barrier to communicating my thoughts. Blogging, in that era,
seemed like a historical vestige on the verge of being consumed and overtaken by
the rapid fire, real-time tweets of my peers. I jumped on that bandwagon, and
never looked back. Until now.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Code Your Art Out</title>
        <published>2011-03-11T00:00:00+00:00</published>
        <updated>2011-03-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Joël Perras
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://nerderati.com/2011-03-11-code-your-art-out/"/>
        <id>https://nerderati.com/2011-03-11-code-your-art-out/</id>
        
        <summary type="html">&lt;p&gt;Ever since I had the pleasure of keynoting at &lt;strong&gt;Make Web Not War: For The Web&lt;&#x2F;strong&gt;
in 2010, I&#x27;ve been eagerly awaiting the announcement of the 2011 edition,
which was announced just a few days ago.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Perpetual IRC - The Proxy Edition</title>
        <published>2010-11-29T00:00:00+00:00</published>
        <updated>2010-11-29T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Joël Perras
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://nerderati.com/perpetual-irc-the-proxy-edition/"/>
        <id>https://nerderati.com/perpetual-irc-the-proxy-edition/</id>
        
        <summary type="html">&lt;p&gt;&lt;a
href=&quot;https:&#x2F;&#x2F;nerderati.com&#x2F;2010&#x2F;09&#x2F;perpetual-irc-the-multiplexer-edition&#x2F;&quot;&gt;Last
time&lt;&#x2F;a&gt;, we looked at how one could maintain a persistent session in IRC
through the use of a terminal multiplexer (such as &lt;strong&gt;screen&lt;&#x2F;strong&gt; or &lt;strong&gt;tmux&lt;&#x2F;strong&gt;) and
SSH. While this has the advantage of being very easy to setup, there are a few
very obvious disadvantages and trade-offs:&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Perpetual IRC - The Multiplexer Edition</title>
        <published>2010-09-07T00:00:00+00:00</published>
        <updated>2010-09-07T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Joël Perras
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://nerderati.com/perpetual-irc-the-multiplexer-edition/"/>
        <id>https://nerderati.com/perpetual-irc-the-multiplexer-edition/</id>
        
        <summary type="html">&lt;p&gt;As is the case with most people involved in Open Source, I&#x27;m on &lt;a
href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Internet_Relay_Chat&quot;&gt;IRC&lt;&#x2F;a&gt; all day long. I
can help people from around the world use some of the &lt;a
href=&quot;https:&#x2F;&#x2F;github.com&#x2F;UnionOfRAD&#x2F;lithium&quot;&gt;projects&lt;&#x2F;a&gt; I&#x27;ve helped
create, as well as &lt;a href=&quot;http:&#x2F;&#x2F;cassandra.apache.org&#x2F;&quot;&gt;some of the&lt;&#x2F;a&gt; &lt;a
href=&quot;http:&#x2F;&#x2F;www.mongodb.org&#x2F;&quot;&gt;software&lt;&#x2F;a&gt; that I use on a daily basis.&lt;&#x2F;p&gt;
&lt;p&gt;One of the major advantages that IRC has over your ‘traditional’ instant
messenger clients is that, with a minimum amount of effort and hardware, you can
create a setup that will remain perpetually connected, even when
you&#x27;re not online. That means that you can keep logs of conversations,
receive messages, catch up on what the current topic of discussion is when
starting your day, and still be able to shut down your computer at night if you
so choose.&lt;&#x2F;p&gt;
&lt;p&gt;There are a few ways of achieving the status of perpetual IRC denizen. Note,
however, that almost any method requires that you have access to a remote server
in addition to your local machine. It doesn&#x27;t need to be anything special -
a cheap VPS will do just fine, as long as you can install software packages and
open the necessary ports in the firewall.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Compiling Vim With Ruby Integration On Snow Leopard</title>
        <published>2010-07-26T00:00:00+00:00</published>
        <updated>2010-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Joël Perras
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://nerderati.com/compiling-vim-with-ruby-integration-on-snow-leopard/"/>
        <id>https://nerderati.com/compiling-vim-with-ruby-integration-on-snow-leopard/</id>
        
        <summary type="html">&lt;p&gt;One of my favourite plugins for Vim is &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;wincent&#x2F;command-t&quot;&gt;command-t&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;An extremely fast, intuitive mechanism for opening files with a minimal number
of keystrokes. It&#x27;s named &amp;quot;Command-T&amp;quot; because it is inspired by
the &amp;quot;Go to File&amp;quot; window bound to Command-T in TextMate.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Sadly, the default installation of Vim on Snow Leopard does &lt;em&gt;not&lt;&#x2F;em&gt; have
support for the ruby interpreter compiled in, which is a pre-requisite for using
the plugin. Luckily, that&#x27;s easy enough to remedy, and in the process
we&#x27;ll learn a thing or two about compiling your own custom Vim binary.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>WebNotWar</title>
        <published>2010-05-20T00:00:00+00:00</published>
        <updated>2010-05-20T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Joël Perras
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://nerderati.com/webnotwar/"/>
        <id>https://nerderati.com/webnotwar/</id>
        
        <summary type="html">&lt;p&gt;I&#x27;m quite happy to announce that I will be giving the keynote address at
this year&#x27;s WebNotWar&#x2F;For The Web conference, taking place on May 27th,
2010.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Suggested Reading</title>
        <published>2010-05-04T00:00:00+00:00</published>
        <updated>2010-05-04T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Joël Perras
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://nerderati.com/suggested-reading/"/>
        <id>https://nerderati.com/suggested-reading/</id>
        
        <summary type="html">&lt;p&gt;Some of my current favourite books on rotation:&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Bijective Function Domains on Words in the English Language</title>
        <published>2010-02-26T00:00:00+00:00</published>
        <updated>2010-02-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Joël Perras
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://nerderati.com/bijective-function-domains-on-words-in-the-english-languge/"/>
        <id>https://nerderati.com/bijective-function-domains-on-words-in-the-english-languge/</id>
        
        <summary type="html">&lt;p&gt;If you were to apply a bijective function to each letter in each word of a
language (e.g. English), how many pre-existing words would you obtain in the
resulting image?&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Shebang</title>
        <published>2010-01-31T00:00:00+00:00</published>
        <updated>2010-01-31T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Joël Perras
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://nerderati.com/shebang/"/>
        <id>https://nerderati.com/shebang/</id>
        
        <summary type="html">&lt;p&gt;An explanation of the shebang, and what it means when included in a script:&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Redis Memory Monitoring - Python Edition</title>
        <published>2010-01-04T00:00:00+00:00</published>
        <updated>2010-01-04T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Joël Perras
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://nerderati.com/redis-memory-monitoring-python-edition/"/>
        <id>https://nerderati.com/redis-memory-monitoring-python-edition/</id>
        
        <summary type="html">&lt;p&gt;A few hours ago, &lt;a href=&quot;http:&#x2F;&#x2F;twitter.com&#x2F;antirez&quot;&gt;Salvatore Sanfilippo&lt;&#x2F;a&gt;
(the lead developer of &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;antirez&#x2F;redis&quot;&gt;Redis&lt;&#x2F;a&gt;), &lt;a
href=&quot;http:&#x2F;&#x2F;twitter.com&#x2F;antirez&#x2F;status&#x2F;7375414227&quot;&gt;tweeted&lt;&#x2F;a&gt; a little Ruby
script to interactively estimate the memory usage of a running &lt;code&gt;redis-server&lt;&#x2F;code&gt;
instance:&lt;&#x2F;p&gt;
</summary>
        
    </entry>
</feed>
