<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Sean Gillies (Posts about restructuredtext)</title><link>https://sgillies.net/</link><description></description><atom:link href="https://sgillies.net/tags/restructuredtext.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><lastBuildDate>Sun, 31 Dec 2023 01:26:22 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Migration of my blog</title><link>https://sgillies.net/2015/11/29/migration-of-my-blog.html</link><dc:creator>Sean Gillies</dc:creator><description>&lt;p&gt;A while back I switched my blog from a database-backed dynamic site to static
HTML generated by Sphinx and Tinkerer. This weekend I finished migrating eight
years of old posts (with their comments) to the new blog. And I configured my
new blog and home page to support HTTPS. Hello, 2015.&lt;/p&gt;
&lt;p&gt;You may, when visiting old posts, experience browser warnings because of
embedded HTTP resources. Images mainly, but also the odd script here and there.
I have also not yet implemented the redirect rules that will get you from old
style &lt;code class="docutils literal"&gt;number/slug&lt;/code&gt; URLs to the new &lt;code class="docutils literal"&gt;YYYY/MM/DD/slug&lt;/code&gt; URLs, though I have
mapped them all out. Please bear with me, I'll address these issues soon.&lt;/p&gt;
&lt;p&gt;Doing this lets me retire my last dedicated server. My blog now runs on a very
cheap ($5 per month) virtual server provisioned (Nginx, SSL certs and keys, the
works) using Ansible. I build my blog HTML on my laptop and rsync it with the
server also using Ansible.&lt;/p&gt;
&lt;p&gt;I'm pretty sure this blog migration is the final chapter of my Zope story. The
following is very likely my final Zope external method, ever.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code python"&gt;&lt;a id="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-1" name="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-1" href="https://sgillies.net/2015/11/29/migration-of-my-blog.html#rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-1"&gt;&lt;/a&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;json&lt;/span&gt;
&lt;a id="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-2" name="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-2" href="https://sgillies.net/2015/11/29/migration-of-my-blog.html#rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-2"&gt;&lt;/a&gt;
&lt;a id="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-3" name="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-3" href="https://sgillies.net/2015/11/29/migration-of-my-blog.html#rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-3"&gt;&lt;/a&gt;
&lt;a id="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-4" name="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-4" href="https://sgillies.net/2015/11/29/migration-of-my-blog.html#rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-4"&gt;&lt;/a&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;dumper&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;a id="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-5" name="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-5" href="https://sgillies.net/2015/11/29/migration-of-my-blog.html#rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-5"&gt;&lt;/a&gt;    &lt;span class="sd"&gt;"""Dump Python blog posts to JSON"""&lt;/span&gt;
&lt;a id="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-6" name="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-6" href="https://sgillies.net/2015/11/29/migration-of-my-blog.html#rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-6"&gt;&lt;/a&gt;    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;searchResults&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;a id="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-7" name="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-7" href="https://sgillies.net/2015/11/29/migration-of-my-blog.html#rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-7"&gt;&lt;/a&gt;            &lt;span class="n"&gt;meta_type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'COREBlog Entry'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sort_on&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'created'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-8" name="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-8" href="https://sgillies.net/2015/11/29/migration-of-my-blog.html#rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-8"&gt;&lt;/a&gt;            &lt;span class="n"&gt;sort_order&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'descending'&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;a id="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-9" name="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-9" href="https://sgillies.net/2015/11/29/migration-of-my-blog.html#rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-9"&gt;&lt;/a&gt;        &lt;span class="n"&gt;post&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getObject&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;a id="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-10" name="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-10" href="https://sgillies.net/2015/11/29/migration-of-my-blog.html#rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-10"&gt;&lt;/a&gt;
&lt;a id="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-11" name="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-11" href="https://sgillies.net/2015/11/29/migration-of-my-blog.html#rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-11"&gt;&lt;/a&gt;        &lt;span class="n"&gt;doc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;a id="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-12" name="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-12" href="https://sgillies.net/2015/11/29/migration-of-my-blog.html#rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-12"&gt;&lt;/a&gt;        &lt;span class="n"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'id'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;
&lt;a id="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-13" name="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-13" href="https://sgillies.net/2015/11/29/migration-of-my-blog.html#rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-13"&gt;&lt;/a&gt;        &lt;span class="n"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'slug'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;entry_slug&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;a id="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-14" name="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-14" href="https://sgillies.net/2015/11/29/migration-of-my-blog.html#rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-14"&gt;&lt;/a&gt;        &lt;span class="n"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'title'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title_or_id&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;a id="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-15" name="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-15" href="https://sgillies.net/2015/11/29/migration-of-my-blog.html#rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-15"&gt;&lt;/a&gt;        &lt;span class="n"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'body'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;
&lt;a id="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-16" name="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-16" href="https://sgillies.net/2015/11/29/migration-of-my-blog.html#rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-16"&gt;&lt;/a&gt;        &lt;span class="n"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'categories'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;categories&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;a id="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-17" name="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-17" href="https://sgillies.net/2015/11/29/migration-of-my-blog.html#rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-17"&gt;&lt;/a&gt;        &lt;span class="n"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'published'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;published&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;a id="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-18" name="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-18" href="https://sgillies.net/2015/11/29/migration-of-my-blog.html#rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-18"&gt;&lt;/a&gt;        &lt;span class="n"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'html'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;format&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-19" name="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-19" href="https://sgillies.net/2015/11/29/migration-of-my-blog.html#rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-19"&gt;&lt;/a&gt;
&lt;a id="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-20" name="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-20" href="https://sgillies.net/2015/11/29/migration-of-my-blog.html#rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-20"&gt;&lt;/a&gt;        &lt;span class="n"&gt;coms&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;a id="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-21" name="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-21" href="https://sgillies.net/2015/11/29/migration-of-my-blog.html#rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-21"&gt;&lt;/a&gt;        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;comment&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;comment_list&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
&lt;a id="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-22" name="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-22" href="https://sgillies.net/2015/11/29/migration-of-my-blog.html#rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-22"&gt;&lt;/a&gt;            &lt;span class="n"&gt;com&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;a id="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-23" name="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-23" href="https://sgillies.net/2015/11/29/migration-of-my-blog.html#rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-23"&gt;&lt;/a&gt;            &lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'title'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;comment&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;
&lt;a id="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-24" name="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-24" href="https://sgillies.net/2015/11/29/migration-of-my-blog.html#rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-24"&gt;&lt;/a&gt;            &lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'author'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;comment&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;author&lt;/span&gt;
&lt;a id="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-25" name="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-25" href="https://sgillies.net/2015/11/29/migration-of-my-blog.html#rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-25"&gt;&lt;/a&gt;            &lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'url'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;comment&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;
&lt;a id="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-26" name="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-26" href="https://sgillies.net/2015/11/29/migration-of-my-blog.html#rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-26"&gt;&lt;/a&gt;            &lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'body'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;comment&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;
&lt;a id="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-27" name="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-27" href="https://sgillies.net/2015/11/29/migration-of-my-blog.html#rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-27"&gt;&lt;/a&gt;            &lt;span class="n"&gt;coms&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-28" name="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-28" href="https://sgillies.net/2015/11/29/migration-of-my-blog.html#rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-28"&gt;&lt;/a&gt;        &lt;span class="n"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'comments'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;coms&lt;/span&gt;
&lt;a id="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-29" name="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-29" href="https://sgillies.net/2015/11/29/migration-of-my-blog.html#rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-29"&gt;&lt;/a&gt;
&lt;a id="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-30" name="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-30" href="https://sgillies.net/2015/11/29/migration-of-my-blog.html#rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-30"&gt;&lt;/a&gt;        &lt;span class="n"&gt;date&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;published&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'T'&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;a id="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-31" name="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-31" href="https://sgillies.net/2015/11/29/migration-of-my-blog.html#rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-31"&gt;&lt;/a&gt;        &lt;span class="n"&gt;date&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'-'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-32" name="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-32" href="https://sgillies.net/2015/11/29/migration-of-my-blog.html#rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-32"&gt;&lt;/a&gt;
&lt;a id="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-33" name="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-33" href="https://sgillies.net/2015/11/29/migration-of-my-blog.html#rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-33"&gt;&lt;/a&gt;        &lt;span class="n"&gt;outfilename&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'/tmp/blog/&lt;/span&gt;&lt;span class="si"&gt;{0}&lt;/span&gt;&lt;span class="s1"&gt;-&lt;/span&gt;&lt;span class="si"&gt;{1}&lt;/span&gt;&lt;span class="s1"&gt;-&lt;/span&gt;&lt;span class="si"&gt;{2}&lt;/span&gt;&lt;span class="s1"&gt;.json'&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;a id="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-34" name="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-34" href="https://sgillies.net/2015/11/29/migration-of-my-blog.html#rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-34"&gt;&lt;/a&gt;            &lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;entry_slug&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;a id="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-35" name="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-35" href="https://sgillies.net/2015/11/29/migration-of-my-blog.html#rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-35"&gt;&lt;/a&gt;
&lt;a id="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-36" name="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-36" href="https://sgillies.net/2015/11/29/migration-of-my-blog.html#rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-36"&gt;&lt;/a&gt;        &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;outfilename&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'w'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;a id="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-37" name="rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-37" href="https://sgillies.net/2015/11/29/migration-of-my-blog.html#rest_code_d5fafd6b6eee40f5a2e80bd3e11dc1dd-37"&gt;&lt;/a&gt;            &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dump&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;indent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;</description><category>ansible</category><category>https</category><category>life</category><category>python</category><category>restructuredtext</category><category>tinkerer</category><category>zope</category><guid>https://sgillies.net/2015/11/29/migration-of-my-blog.html</guid><pubDate>Sun, 29 Nov 2015 07:00:00 GMT</pubDate></item><item><title>Downgrading my blog</title><link>https://sgillies.net/2013/10/07/downgrading-my-blog.html</link><dc:creator>Sean Gillies</dc:creator><description>&lt;p&gt;Welcome to my new blog. It's made with &lt;a class="reference external" href="http://tinkerer.me"&gt;Tinkerer&lt;/a&gt;.
I'm calling it a downgrade because there's no more database, no more comments,
no more Python objects published for every request. It's just rsync and static
HTML generated by Tinkerer and Sphinx from ReStructured Text docs I type into
Vim.  There are moving parts in this new blog, but they are all on my laptop.
None of them are deployed to a web server.&lt;/p&gt;
&lt;p&gt;My old posts were all written using ReST, so migrating is going to be easy
peasy. Until I get around to it, old posts will be at
&lt;a class="reference external" href="http://sgillies.net/olden-days-blog/"&gt;http://sgillies.net/olden-days-blog/&lt;/a&gt; and I'll make sure the old URLs redirect.&lt;/p&gt;</description><category>blog</category><category>life</category><category>restructuredtext</category><category>sphinx</category><category>tinkerer</category><guid>https://sgillies.net/2013/10/07/downgrading-my-blog.html</guid><pubDate>Mon, 07 Oct 2013 06:00:00 GMT</pubDate></item></channel></rss>