<?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 ⚙️ PGXN Blog</title><link>https://blog.pgxn.org/posts/</link><description>Recent content in Posts on ⚙️ PGXN Blog</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Tue, 08 Sep 2026 22:12:29 +0000</lastBuildDate><atom:link href="https://blog.pgxn.org/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>Inter-documentation and image links now work on PGXN</title><link>https://blog.pgxn.org/2026/relative-links/</link><pubDate>Tue, 08 Sep 2026 22:12:29 +0000</pubDate><guid>https://blog.pgxn.org/2026/relative-links/</guid><description>&lt;p&gt;Way back in 2015, I opened a &lt;a href="https://github.com/pgxn/pgxn-api/issues/38" title="Teach Parser to resolve doc links to the .html files they generate"&gt;PGXN API issue&lt;/a&gt; to allow links between documents
rendered by PGXN to work. In 2024 I followed up with &lt;a href="https://github.com/pgxn/pgxn-api/issues/40" title="Teach Parser to resolve relative Image Links"&gt;another issue&lt;/a&gt; to enable
relative links to images to work. I mean, everyone wants this, right? It&amp;rsquo;s how
your favorite source code sit works.&lt;/p&gt;
&lt;p&gt;Now so does PGXN. As of today, links between documents and to images work.
Check it out in the newly-released &lt;a href="https://pgxn.org/dist/chdb/0.1.1/" title="chdb 0.1.1 on PGXN"&gt;chdb extension docs&lt;/a&gt;, which both link to
the &lt;code&gt;chdb&lt;/code&gt; and &lt;code&gt;chdb_hook&lt;/code&gt; docs and to some nice benchmark graphs.&lt;/p&gt;</description></item><item><title>Improved Markdown Parsing</title><link>https://blog.pgxn.org/2025/improved-markdown-parsing/</link><pubDate>Mon, 15 Dec 2025 15:55:59 +0000</pubDate><guid>https://blog.pgxn.org/2025/improved-markdown-parsing/</guid><description>&lt;p&gt;Quick announcement to say that I&amp;rsquo;ve replaced the ancient markdown parser with
a new one, &lt;a href="https://www.pell.portland.or.us/~orc/Code/discount/"&gt;discount&lt;/a&gt;, which supports tables, code fences, definition lists,
and more. I reindexed &lt;a href="https://pgxn.org/dist/pg_clickhouse" title="pg_clickhouse on PGXN"&gt;pg_clickhouse&lt;/a&gt; this morning and it&amp;rsquo;s sooo nice to see
&lt;a href="https://pgxn.org/dist/pg_clickhouse/0.1.0/#Test.Case:.TPC-H"&gt;the table&lt;/a&gt; properly formatted.&lt;/p&gt;
&lt;p&gt;New uploads will use this parser for Markdown (but not MultiMarkdown) files
from now on. I think I&amp;rsquo;ll start working on reindexing all existing extensions,
too. Give me a holler if you don&amp;rsquo;t see an improvement in your extensions in
the next few days.&lt;/p&gt;</description></item><item><title>New PGXN Mastodon Account</title><link>https://blog.pgxn.org/2024/new-pgxn-mastodon-account/</link><pubDate>Sun, 01 Dec 2024 16:03:09 +0000</pubDate><guid>https://blog.pgxn.org/2024/new-pgxn-mastodon-account/</guid><description>&lt;p&gt;Sadly, the home of the PGXN Mastodon bot for the last two years,
&lt;a href="https://botsin.space/"&gt;botsin.space&lt;/a&gt; is shutting down. I&amp;rsquo;ve created a new
account, &lt;a href="https://mastodon.social/@pgxn"&gt;@pgxn@mastodon.social&lt;/a&gt; and moved all
the followers. Please give it a follow if you didn&amp;rsquo;t follow the old account,
and stay up-to-date on the latest PGXN releases!&lt;/p&gt;</description></item><item><title>Feedback Wanted: Meta Spec Sketch</title><link>https://blog.pgxn.org/2024/updated-meta-spec-sketch/</link><pubDate>Thu, 21 Mar 2024 00:00:00 +0000</pubDate><guid>https://blog.pgxn.org/2024/updated-meta-spec-sketch/</guid><description>&lt;p&gt;New post up on Just a Theory, &lt;a href="https://justatheory.com/2024/03/rfc-pgxn-metadata-sketch/"&gt;RFC: PGXN Metadata Sketch&lt;/a&gt;, seeking feedback on
a slew of ideas to update the &lt;a href="https://pgxn.org/spec/"&gt;PGXN Meta Spec&lt;/a&gt;. Help us to help make the
future of PGXN and the broader extension ecosystem better!&lt;/p&gt;</description></item><item><title>Recent PGXN Improvements</title><link>https://blog.pgxn.org/2024/recent-work/</link><pubDate>Thu, 22 Feb 2024 00:00:00 +0000</pubDate><guid>https://blog.pgxn.org/2024/recent-work/</guid><description>&lt;p&gt;One of the perks of my &lt;a href="https://tembo.io/blog/welcoming-david-wheeler"&gt;new gig at Tembo&lt;/a&gt; is that I have more time to work on
PGXN. In the last ten years I&amp;rsquo;ve had very little time to give, so things have
stagnated. The &lt;a href="https://github.com/pgxn/pgxn-api"&gt;API&lt;/a&gt;, for example, hasn&amp;rsquo;t seen a meaningful update since 2016!&lt;/p&gt;
&lt;p&gt;But that&amp;rsquo;s all changed now, and every bit of the PGXN architecture has
experienced a fair bit of TLC in the last few weeks. A quick review.&lt;/p&gt;</description></item><item><title>Presentation: Introduction to the PGXN</title><link>https://blog.pgxn.org/2024/presentation-introduction-to-the-pgxn/</link><pubDate>Fri, 02 Feb 2024 15:32:53 +0000</pubDate><guid>https://blog.pgxn.org/2024/presentation-introduction-to-the-pgxn/</guid><description>&lt;p&gt;&lt;a href="https://tembo.io/blog/pgxn-architecture"&gt;&lt;img src="https://blog.pgxn.org/2024/presentation-introduction-to-the-pgxn/architecture.png" alt="Presentation: Introduction to the PGXN Architecture | Tembo"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The Tembo blog has posted a presentation on the PGXN architecture. There
hasn&amp;rsquo;t been much coverage of it since a few posts here on the PGXN blog back
in 2012, so worth a revisit &amp;mdash; and a fair bit changed in the interim, as
well!&lt;/p&gt;</description></item><item><title>PGXN Tools Docker Image Updated</title><link>https://blog.pgxn.org/2024/pgxn-tools-v4/</link><pubDate>Wed, 31 Jan 2024 16:52:19 +0000</pubDate><guid>https://blog.pgxn.org/2024/pgxn-tools-v4/</guid><description>&lt;p&gt;Just a quick note to highlight some bug fixes and improvements in the
&lt;a href="https://github.com/pgxn/docker-pgxn-tools/"&gt;pgxn/pgxn-tools Docker image&lt;/a&gt; in the last few weeks.&lt;/p&gt;
&lt;p&gt;v1.4.0 adds the &lt;code&gt;GIT_BUNDLE_OPTS&lt;/code&gt; and &lt;code&gt;ZIP_BUNDLE_OPTS&lt;/code&gt; environment variables.
The former is passed to &lt;code&gt;git archive&lt;/code&gt; and the latter to zip, and let
additional options be passed to those commands. For example, the &lt;a href="https://pgxn.org/dist/vectorize/"&gt;vectorize
extension&lt;/a&gt;&amp;rsquo;s &lt;a href="https://github.com/tembo-io/pg_vectorize/blob/v0.9.0/.github/workflows/pgxn-release.yml"&gt;release workflow&lt;/a&gt; sets &lt;code&gt;GIT_BUNDLE_OPTS: --add-file META.json&lt;/code&gt;
because git archive archives only checked-in files, and &lt;code&gt;META.json&lt;/code&gt; is not
checked in but &lt;a href="https://github.com/tembo-io/pg_vectorize/blob/v0.9.0/Makefile#L17-L18"&gt;generated from&lt;/a&gt; &lt;code&gt;META.json.in&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Hello Mastodon 🐘</title><link>https://blog.pgxn.org/2023/hello-mastodon/</link><pubDate>Sat, 18 Feb 2023 22:53:46 +0000</pubDate><guid>https://blog.pgxn.org/2023/hello-mastodon/</guid><description>&lt;p&gt;Hey all you Postgres people out there! Just wanted to make a quick post
regarding the PGXN &lt;a href="https://twitter.com/pgxn"&gt;twitter bot&lt;/a&gt;. In light of the recent announcements by
Twitter to charge for API use, I updated &lt;a href="https://manager.pgxn.org"&gt;PGXN Manager&lt;/a&gt; to also post to
Mastodon! If you&amp;rsquo;re have joined the exodus to the Fediverse, give it a follow:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://mastodon.social/@pgxn"&gt;@pgxn@mastodon.social&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In fact, I made some time to rewrite the notification bits of the manager
service. Previously there was just some code jammed into the upload controller
that would make an API call to Twitter. I ripped that out, and added a trigger
to the distributions table that posts a a &lt;a href="https://www.postgresql.org/docs/current/sql-notify.html"&gt;LISTEN/NOTIFY&lt;/a&gt; message.&lt;/p&gt;</description></item><item><title>Password Storage Update</title><link>https://blog.pgxn.org/2021/password-storage-update/</link><pubDate>Mon, 05 Jul 2021 23:12:12 +0000</pubDate><guid>https://blog.pgxn.org/2021/password-storage-update/</guid><description>&lt;p&gt;Just a quick note to say that &lt;a href="https://manager.pgxn.org/"&gt;PGXN Manager&lt;/a&gt; has been updated with more secure
password storage. Existing passwords are unmodified, but the next time you
change your password, it will be upgraded to a more robust password hashing
algorithm that&amp;rsquo;s more resistant to attacks. I recommend everyone update their
passwords. If you have a PGXN Manager account, just hit &lt;a href="https://manager.pgxn.org/account/forgotten"&gt;password reset&lt;/a&gt;,
enter your username or email address, and check your mail for a reset link.
Once you update your password, it will be stored in the new, more secure
format.&lt;/p&gt;</description></item><item><title>A Few Belated PGXN Updates</title><link>https://blog.pgxn.org/2021/a-few-belated-pgxn-updates/</link><pubDate>Sat, 15 May 2021 03:16:44 +0000</pubDate><guid>https://blog.pgxn.org/2021/a-few-belated-pgxn-updates/</guid><description>&lt;p&gt;The last couple weeks I&amp;rsquo;ve returned to PGXN and made a few updates. Nothing
huge, but all long overdue.&lt;/p&gt;
&lt;p&gt;First up, &lt;a href="https://manager.pgxn.org"&gt;PGXN Manager&lt;/a&gt; is all TSL now. No public HTTP-only site. What
started as a convenient division of labor (http for the public site and https
for the authenticated site) turned out to be quite irksome &amp;mdash; especially
since some browsers wouldn&amp;rsquo;t load the non-TLS site at all anymore. So I did
away with it, and now it&amp;rsquo;s all TLS, authenticated and not. (The API and search
sites have been TLS for a while now.)&lt;/p&gt;</description></item><item><title>PGXN Manager Upgraded</title><link>https://blog.pgxn.org/2015/pgxn-manager-upgraded/</link><pubDate>Mon, 31 Aug 2015 21:48:54 +0000</pubDate><guid>https://blog.pgxn.org/2015/pgxn-manager-upgraded/</guid><description>&lt;p&gt;I took a little time this summer to finally address some nagging issues in
&lt;a href="https://manager.pgxn.org/"&gt;PGXN Manager&lt;/a&gt;, the site to which extensions are uploaded and added to the
&lt;a href="https://master.pgxn.org/"&gt;master repository&lt;/a&gt;. Most of the changes were internal, improving the
interface through which I sometimes have to re-index a release. There are also
a couple of minor changes to the sample &lt;code&gt;Makefile&lt;/code&gt; in the &lt;a href="https://manager.pgxn.org/howto"&gt;How To&lt;/a&gt;. But the
most important change for new releases going forward is that version ordering
is now enforced. That means two things:&lt;/p&gt;</description></item><item><title>PGXN Release Badges</title><link>https://blog.pgxn.org/2015/badges/</link><pubDate>Sat, 11 Apr 2015 04:34:08 +0000</pubDate><guid>https://blog.pgxn.org/2015/badges/</guid><description>&lt;p&gt;Looks like it&amp;rsquo;s been close to two years since my last post on the PGXN blog.
Apologies for that. I&amp;rsquo;ve thought for a while maybe I should organize an
&amp;ldquo;extension of the week&amp;rdquo; series or something. Would there be interest in such a
thing?&lt;/p&gt;
&lt;p&gt;Meanwhile, I&amp;rsquo;m finally getting back to posting to report on a fun thing you
can now do with your PGXN distributions. Thanks to the &lt;a href="https://badge.fury.io"&gt;Version Badge&lt;/a&gt; service
from the nice folks at &lt;a href="https://gemfury.com/"&gt;Gemfury&lt;/a&gt;, you can badge your distributions! Badges
look like this:&lt;/p&gt;</description></item><item><title>How To, Example Makefile Updated</title><link>https://blog.pgxn.org/2013/howto-updated/</link><pubDate>Fri, 21 Jun 2013 00:28:13 +0000</pubDate><guid>https://blog.pgxn.org/2013/howto-updated/</guid><description>&lt;p&gt;I deployed a new version of &lt;a href="https://manager.pgxn.org/"&gt;Manager&lt;/a&gt; last week, and it included a major
update to the &lt;a href="https://manager.pgxn.org/howto"&gt;How To&lt;/a&gt;. A lot of the changes are narrative: I tried to keep
things shorter and more to-the-point. But from a technical point of view,
perhaps the most important improvements are in the &lt;code&gt;Makefile&lt;/code&gt; example. Thanks
to ongoing work by &lt;a href="https://www.linkedin.com/in/cedricvillemain"&gt;Cédric Villemain&lt;/a&gt;, it now tries harder to stay out of your
way, while integrating better with PostgreSQL&amp;rsquo;s own &lt;code&gt;make&lt;/code&gt; targets.&lt;/p&gt;</description></item><item><title>PGXN Distribution Prerelease Versions Fixed</title><link>https://blog.pgxn.org/2013/semver-fix/</link><pubDate>Wed, 19 Jun 2013 19:24:10 +0000</pubDate><guid>https://blog.pgxn.org/2013/semver-fix/</guid><description>&lt;p&gt;A couple years ago, the &lt;a href="https://semver.org/"&gt;Semantic Version&lt;/a&gt; specification was &lt;a href="https://github.com/mojombo/semver/commit/05a00df02db3d4ba83e0caaff6b31c10c77f7d3d"&gt;updated&lt;/a&gt; to
require a hyphen between the &amp;ldquo;patch version&amp;rdquo; and the &amp;ldquo;prerelease version.&amp;rdquo;
This despite the fact that v1.0.0 of the spec had been published on the site
for a while (see all the gory issues &lt;a href="https://github.com/mojombo/semver/issues/49#issuecomment-19705479"&gt;here&lt;/a&gt;). Naturally, I had already
implemented that format for PGXN in a &lt;a href="https://metacpan.org/module/SemVer"&gt;Perl module&lt;/a&gt; and &lt;a href="https://pgxn.org/extension/semver/"&gt;Postgres data type&lt;/a&gt;.
Since we already had some PGXN extensions with the non-hyphenated format, and
I knew supporting the hyphen would break them, I held off updating those
implementations for a year or so.&lt;/p&gt;</description></item><item><title>Now updating the API server every five minutes ⓣ</title><link>https://blog.pgxn.org/2012/now-updating-the-api-server-every-five-minutes-rather-t/</link><pubDate>Wed, 02 May 2012 16:53:50 +0000</pubDate><guid>https://blog.pgxn.org/2012/now-updating-the-api-server-every-five-minutes-rather-t/</guid><description>&lt;p&gt;Now updating the API server every five minutes rather than hourly. New uploads
will appear on pgxn.org more quickly.&lt;/p&gt;</description></item><item><title>No site feed for uploads, but I just realized that ⓣ</title><link>https://blog.pgxn.org/2012/no-site-feed-for-uploads-but-i-just-realized-that-the/</link><pubDate>Wed, 02 May 2012 16:24:43 +0000</pubDate><guid>https://blog.pgxn.org/2012/no-site-feed-for-uploads-but-i-just-realized-that-the/</guid><description>&lt;p&gt;No site feed for uploads, but I just realized that the Twitter feed provides
exactly that. &lt;a href="https://twitter.com/statuses/user_timeline/pgxn.atom"&gt;https://twitter.com/statuses/user_timeline/pgxn.atom&lt;/a&gt;&lt;/p&gt;</description></item><item><title>pgxn-utils 0.1.4 is out!</title><link>https://blog.pgxn.org/2012/pgxn-utils-014-is-out/</link><pubDate>Sun, 15 Apr 2012 21:44:12 +0000</pubDate><guid>https://blog.pgxn.org/2012/pgxn-utils-014-is-out/</guid><description>&lt;p&gt;&lt;em&gt;by Dickson S. Guedes&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Hi everybody!&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m proud to tell you that a new version of &lt;a href="https://github.com/guedes/pgxn-utils"&gt;PGXN Utils&lt;/a&gt; was released with
this new features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Git support&lt;/li&gt;
&lt;li&gt;Templates and custom templates&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pgxnclient.projects.postgresql.org/"&gt;PGXN Client&lt;/a&gt; integration&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="git-support"&gt;Git support&lt;/h2&gt;
&lt;p&gt;You can start a new extension with or without version control. By default
&lt;code&gt;pgxn-utils&lt;/code&gt; supports &lt;a href="https://git-scm.org"&gt;git&lt;/a&gt; but it will not create a repository unless you use
&lt;code&gt;--git&lt;/code&gt; option in the skeleton task.&lt;/p&gt;
&lt;p&gt;You can try:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;$&lt;/span&gt; pgxn-utils skeleton my_cool_versioned_extension --git
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;When you create a new extension with git support in addition to creating the
skeleton, &lt;code&gt;pgxn-utils&lt;/code&gt; will initialize a git repository and create the initial
commit.&lt;/p&gt;</description></item><item><title>Lose USE_PGXS in your Makefiles</title><link>https://blog.pgxn.org/2012/lose-use-pgxs/</link><pubDate>Wed, 11 Apr 2012 16:36:00 +0000</pubDate><guid>https://blog.pgxn.org/2012/lose-use-pgxs/</guid><description>&lt;p&gt;Traditionally, folks have created extensions for PostgreSQL by copying one of
the &lt;a href="https://www.postgresql.org/docs/current/static/contrib.html"&gt;contrib modules&lt;/a&gt; and hacking it into something new. One of the things
that comes along for the ride is the &lt;code&gt;Makefile&lt;/code&gt; (&lt;a href="https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=contrib/isn/Makefile;hb=HEAD"&gt;example&lt;/a&gt;). As a result,
there are a lot of third-party extensions that use the &lt;code&gt;USE_PGXS&lt;/code&gt; variable.&lt;/p&gt;
&lt;p&gt;A bit of background. The core contrib extensions generally rely on a relative
path to include the core &lt;code&gt;Makefile&lt;/code&gt;s needed to build the extension. Because
they ship with the core distribution, they can generally expect that the core
has already been compiled, the necessary &lt;code&gt;Makefile&lt;/code&gt;s have been created, and
that they should be built against them. All the assumptions are that the
extensions should be built against the source tree in which they are
distributed. So there is no need to use &lt;a href="https://www.postgresql.org/docs/current/static/app-pgconfig.html"&gt;&lt;code&gt;pg_config&lt;/code&gt;&lt;/a&gt; to find &lt;a href="https://www.postgresql.org/docs/current/static/extend-pgxs.html"&gt;PGXS&lt;/a&gt;; it
already knows where to find what it needs.&lt;/p&gt;</description></item><item><title>Only Stable Releases are Indexed</title><link>https://blog.pgxn.org/2012/stable-only-indexed/</link><pubDate>Fri, 06 Apr 2012 17:02:19 +0000</pubDate><guid>https://blog.pgxn.org/2012/stable-only-indexed/</guid><description>&lt;p&gt;I&amp;rsquo;ve had a few reports over the last few months that folks uploaded new
extensions to &lt;a href="https://pgxn.org/"&gt;PGXN&lt;/a&gt; but they failed to show up in search results. For
example, as of right now, if you &lt;a href="https://pgxn.org/search?q=distinct&amp;amp;in=docs"&gt;search for &amp;ldquo;distinct&amp;rdquo;&lt;/a&gt;, you get two results,
&lt;a href="https://pgxn.org/dist/omnipitr/doc/internals.html"&gt;OmniPITR&lt;/a&gt; and &lt;a href="https://pgxn.org/dist/pgtap/doc/pgtap.html"&gt;pgTAP&lt;/a&gt;. This despite the fact that the recently-released
&lt;a href="https://pgxn.org/dist/adaptive_estimator/"&gt;adaptive_estimator&lt;/a&gt; extension is &lt;a href="https://pgxn.org/tag/distinct/"&gt;tagged &amp;ldquo;distinct&amp;rdquo;&lt;/a&gt;. Author &lt;a href="https://pgxn.org/user/tomasv"&gt;Tomas Vondra&lt;/a&gt;
reported this issue, and it took me a couple of days to realize why it wasn&amp;rsquo;t
showing up.&lt;/p&gt;</description></item><item><title>New version of api.pgxn.org released, with a new ⓣ</title><link>https://blog.pgxn.org/2012/new-version-of-apipgxnorg-released-with-a-new-index/</link><pubDate>Tue, 14 Feb 2012 06:55:36 +0000</pubDate><guid>https://blog.pgxn.org/2012/new-version-of-apipgxnorg-released-with-a-new-index/</guid><description>&lt;p&gt;New version of api.pgxn.org released, with a new index generated. Better
parsing of reST docs thanks to @dvarrazzo.&lt;/p&gt;</description></item><item><title>Okay, I think the API sync issue is fixed ⓣ</title><link>https://blog.pgxn.org/2012/okay-i-think-the-api-sync-issue-is-fixed-omnipitr-v0/</link><pubDate>Fri, 13 Jan 2012 05:43:42 +0000</pubDate><guid>https://blog.pgxn.org/2012/okay-i-think-the-api-sync-issue-is-fixed-omnipitr-v0/</guid><description>&lt;p&gt;Okay, I think the API sync issue is fixed; omnipitr v0.3.1 now shows up on the
site. &lt;a href="https://www.pgxn.org/dist/omnipitr/"&gt;https://www.pgxn.org/dist/omnipitr/&lt;/a&gt; #phew&lt;/p&gt;</description></item><item><title>here seem to be some issues with the API syncing ⓣ</title><link>https://blog.pgxn.org/2012/here-seem-to-be-some-issues-with-the-api-syncing-will/</link><pubDate>Thu, 12 Jan 2012 18:20:14 +0000</pubDate><guid>https://blog.pgxn.org/2012/here-seem-to-be-some-issues-with-the-api-syncing-will/</guid><description>&lt;p&gt;here seem to be some issues with the API syncing; will get them fixed today.
Sorry for the lack up site updates in the meantime.&lt;/p&gt;</description></item><item><title>PGXN Has a New Home</title><link>https://blog.pgxn.org/2012/pgxn-moved/</link><pubDate>Thu, 12 Jan 2012 04:51:04 +0000</pubDate><guid>https://blog.pgxn.org/2012/pgxn-moved/</guid><description>&lt;p&gt;Day before yesterday, I finally got all of &lt;a href="https://pgxn.org/"&gt;PGXN&lt;/a&gt; moved to a new server. I had
been using a small server owned by my company, &lt;a href="https://kineticode.com/"&gt;Kineticode&lt;/a&gt;, and hosted by
&lt;a href="https://commandprompt.com/"&gt;Command Prompt&lt;/a&gt;. That was fine for a while, but CMD was needing its rack
space back, and what with my &lt;a href="https://justatheory.com/autobiographical/iovationeering.html"&gt;new job&lt;/a&gt;, I was shutting down Kineticode, too.
It was time to move PGXN elsewhere.&lt;/p&gt;
&lt;p&gt;For a while, I got a lot of support and assistance towards moving PGXN to a
&lt;a href="https://www.postgresql.org/"&gt;PostgreSQL&lt;/a&gt; community server. &lt;a href="https://pgsnake.blogspot.com/"&gt;Dave&lt;/a&gt;, &lt;a href="https://blog.hagander.net/"&gt;Magnus&lt;/a&gt;, and &lt;a href="https://www.kaltenbrunner.cc/blog/"&gt;Stefan&lt;/a&gt; kindly spun up a
VM for me, and gave me permission to install Perl modules from &lt;a href="https://cpan.org"&gt;CPAN&lt;/a&gt;,
provided I supply them with a script to report to Nagios when Perl modules
were out of date, which of course I did. This was necessary because I built
PGXN with some pretty recent versions of CPAN modules that are not yet
available in Debian stable. I was looking forward to getting things running
and integrating with the community authentication service.&lt;/p&gt;</description></item><item><title>Many thanks to depesz for the new PGXN hosting ⓣ</title><link>https://blog.pgxn.org/2012/many-thanks-to-depesz-for-the-new-pgxn-hosting/</link><pubDate>Tue, 10 Jan 2012 05:24:04 +0000</pubDate><guid>https://blog.pgxn.org/2012/many-thanks-to-depesz-for-the-new-pgxn-hosting/</guid><description>&lt;p&gt;Many thanks to depesz for the new PGXN hosting! &lt;a href="https://depesz.com/"&gt;https://depesz.com/&lt;/a&gt;&lt;/p&gt;</description></item><item><title>PGXN Manager will be back up as soon as your DNS ⓣ</title><link>https://blog.pgxn.org/2012/pgxn-manager-will-be-back-up-as-soon-as-your-dns-record/</link><pubDate>Tue, 10 Jan 2012 05:03:32 +0000</pubDate><guid>https://blog.pgxn.org/2012/pgxn-manager-will-be-back-up-as-soon-as-your-dns-record/</guid><description>&lt;p&gt;PGXN Manager will be back up as soon as your DNS records update. All the PGXN
sites are on their new server.&lt;/p&gt;</description></item><item><title>manager.pgxn.org will be doing down for the move ⓣ</title><link>https://blog.pgxn.org/2012/managerpgxnorg-will-be-doing-down-for-the-move-to-the/</link><pubDate>Tue, 10 Jan 2012 03:43:44 +0000</pubDate><guid>https://blog.pgxn.org/2012/managerpgxnorg-will-be-doing-down-for-the-move-to-the/</guid><description>&lt;p&gt;manager.pgxn.org will be doing down for the move to the new server in 10
minutes. #WishMeLuck&lt;/p&gt;</description></item><item><title>PGXN Manager will be going down for the move to ⓣ</title><link>https://blog.pgxn.org/2012/pgxn-manager-will-be-going-down-for-the-move-to-the-new/</link><pubDate>Mon, 09 Jan 2012 19:46:27 +0000</pubDate><guid>https://blog.pgxn.org/2012/pgxn-manager-will-be-going-down-for-the-move-to-the-new/</guid><description>&lt;p&gt;PGXN Manager will be going down for the move to the new server this evening.
Stay tuned for details!&lt;/p&gt;</description></item><item><title>Anyone interested in building RPMs and/or Debian ⓣ</title><link>https://blog.pgxn.org/2011/anyone-interested-in-building-rpms-andor-debian-packag/</link><pubDate>Mon, 12 Dec 2011 18:29:46 +0000</pubDate><guid>https://blog.pgxn.org/2011/anyone-interested-in-building-rpms-andor-debian-packag/</guid><description>&lt;p&gt;Anyone interested in building RPMs and/or Debian packages for the various
parts of the PGXN infrastruture?&lt;/p&gt;</description></item><item><title>New server fell through, unfortunately ⓣ</title><link>https://blog.pgxn.org/2011/new-server-fell-through-unfortunately-will-be-looking/</link><pubDate>Mon, 12 Dec 2011 17:27:10 +0000</pubDate><guid>https://blog.pgxn.org/2011/new-server-fell-through-unfortunately-will-be-looking/</guid><description>&lt;p&gt;New server fell through, unfortunately. Will be looking for a new home for
PGXN this week.&lt;/p&gt;</description></item><item><title>PGXN Client 1.0 Released!</title><link>https://blog.pgxn.org/2011/pgxn-client-10-released/</link><pubDate>Mon, 28 Nov 2011 00:34:34 +0000</pubDate><guid>https://blog.pgxn.org/2011/pgxn-client-10-released/</guid><description>&lt;p&gt;Finally, here it is. Well tested, documented, and pampered. With the &lt;a href="https://pgxnclient.projects.postgresql.org/"&gt;PGXN
Client&lt;/a&gt; installing extensions from the &lt;a href="https://pgxn.org/"&gt;PGXN Network&lt;/a&gt; is a breeze:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;$&lt;/span&gt; pgxn install semver
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;$&lt;/span&gt; pgxn load semver
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;$&lt;/span&gt; psql
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;=# select &amp;#39;foo&amp;#39;::semver;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;ERROR: bad semver value &amp;#39;foo&amp;#39;: expected number at foo
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;LINE 1: select &amp;#39;foo&amp;#39;::semver;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Error! Meaning: success!&lt;/p&gt;
&lt;p&gt;The number of extensions on PGXN is steadily increasing, so we hope the client
will make their adoption even easier.&lt;/p&gt;
&lt;p&gt;The client is now extensible: either writing in Python to reuse some of the
other commands implementation or writing new self-contained scripts in any
language to be invoked by the pgxn commands dispatcher. The first client
extensions are already available: &lt;a href="https://github.com/guedes/pgxn-utils"&gt;PGXN Utils&lt;/a&gt; and &lt;a href="https://github.com/pgxn/pgxn-meta-validator/"&gt;PGXN:Meta:Validator&lt;/a&gt; are
targeted for easier development of new extensions.&lt;/p&gt;</description></item><item><title>Thank you Jon Erdman for your donation ⓣ</title><link>https://blog.pgxn.org/2011/thank-you-jon-erdman-for-your-donation-your-t-shirt-is/</link><pubDate>Thu, 22 Sep 2011 05:18:57 +0000</pubDate><guid>https://blog.pgxn.org/2011/thank-you-jon-erdman-for-your-donation-your-t-shirt-is/</guid><description>&lt;p&gt;Thank you Jon Erdman for your donation! Your t-shirt is in the mail. #pgxn
#fundraising&lt;/p&gt;</description></item><item><title>Postgres Open</title><link>https://blog.pgxn.org/2011/postgres-open/</link><pubDate>Tue, 13 Sep 2011 16:40:24 +0000</pubDate><guid>https://blog.pgxn.org/2011/postgres-open/</guid><description>&lt;p&gt;I&amp;rsquo;m off to Chicago today for &lt;a href="https://www.postgresopen.org/"&gt;Postgres Open&lt;/a&gt;, a new PostgreSQL conference. I&amp;rsquo;m
pleased that I&amp;rsquo;ll be presenting &amp;ldquo;&lt;a href="https://postgresopen.org/2011/schedule/presentations/83/"&gt;Get Your Preferred Feature Developed!&lt;/a&gt;&amp;rdquo;&lt;/p&gt;
&lt;p&gt;There are lots of developers out there who, like me, have ideas for projects
they want to work on for PostgreSQL, but don&amp;rsquo;t have the free time to make it
happen. The idea for this talk is to pitch this fact to an audience of
organizations with a major investment in PostgreSQL and an interest in seeing
it improve. Perhaps one or more of them will look into sponsoring development
of something that interests them, or that they need. This way, interested
developers might get &lt;em&gt;paid&lt;/em&gt; to work on projects that interest them, to the
benefit of the project, the community, and of course their sponsors.
Naturally, I&amp;rsquo;ll be drawing on PGXN as an example of how this sort of thing can
work.&lt;/p&gt;</description></item><item><title>PGXN Utils 0.1.3 Released!</title><link>https://blog.pgxn.org/2011/pgxn-utils-013-released/</link><pubDate>Thu, 08 Sep 2011 06:39:00 +0000</pubDate><guid>https://blog.pgxn.org/2011/pgxn-utils-013-released/</guid><description>&lt;p&gt;Hello everyone!&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m proud to tell you that a new version of &lt;a href="https://github.com/guedes/pgxn-utils"&gt;pgxn_utils&lt;/a&gt; was released!&lt;/p&gt;
&lt;p&gt;In this version some errors with OpenSSL was fixed (thanks @theory to report
then), and now you can release an extension to &lt;a href="https://pgxn.org"&gt;PGXN&lt;/a&gt; &lt;a href="https://blog.pgxn.org/post/6883009649/pgxn-utils-0-1-2-released"&gt;in &lt;strong&gt;five steps&lt;/strong&gt;&lt;/a&gt;
even using Ruby 1.8!&lt;/p&gt;
&lt;p&gt;Another change was the executable&amp;rsquo;s name that changed from &lt;code&gt;pgxn_utils&lt;/code&gt; to
&lt;code&gt;pgxn-utils&lt;/code&gt; for a close integration with next version of &lt;a href="https://pgxnclient.projects.postgresql.org"&gt;PGXN Client&lt;/a&gt;, but
some work need to be done, yet.&lt;/p&gt;</description></item><item><title>My presentation at the 2012 PDXPUG PGDay</title><link>https://blog.pgxn.org/2011/video-building-and-distributing-extensions-without-c/</link><pubDate>Wed, 10 Aug 2011 18:58:09 +0000</pubDate><guid>https://blog.pgxn.org/2011/video-building-and-distributing-extensions-without-c/</guid><description>&lt;figure&gt;
&lt;figcaption&gt;
My presentation at the 2012 PDXPUG PGDay. It covers the basics of how to
create useful extensions to PostgreSQL and distribute them on PGXN---without
needing to learn C.
&lt;/figcaption&gt;
&lt;/figure&gt;</description></item><item><title>PGXN Utils 0.1.2 Released!</title><link>https://blog.pgxn.org/2011/pgxn-utils-012-released/</link><pubDate>Fri, 24 Jun 2011 23:53:00 +0000</pubDate><guid>https://blog.pgxn.org/2011/pgxn-utils-012-released/</guid><description>&lt;p&gt;Hello everyone!&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m proud to tell you that a new version of &lt;a href="https://github.com/guedes/pgxn-utils"&gt;pgxn_utils&lt;/a&gt; was released!&lt;/p&gt;
&lt;p&gt;Now you can release a distribution to &lt;a href="https://pgxn.org"&gt;PGXN&lt;/a&gt; in &lt;strong&gt;five steps&lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;First&lt;/strong&gt;, install it:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;gem install pgxn_utils
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Second&lt;/strong&gt;, create your extension, optionally overwrite some defaults:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir &lt;span class="nv"&gt;$HOME&lt;/span&gt;/extensions
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="nv"&gt;$HOME&lt;/span&gt;/extensions
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pgxn_utils skeleton my_extension --maintainer &lt;span class="s2"&gt;&amp;#34;Dickson S. Guedes&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Third&lt;/strong&gt;, code!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fourth&lt;/strong&gt;, bundle it:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;pgxn_utils bundle my_extension
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;Extension generated at: /home/guedes/extensions/my_extension-0.0.1.zip
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Fifth&lt;/strong&gt;, release it:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;pgxn_utils release my_extension-0.0.1.zip
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;Enter your PGXN username: guedes
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;Enter your PGXN password: ******
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;Trying to release my_cool_extension-0.0.1.zip ... released successfully!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;Visit: https://manager.pgxn.org/distributions/my_cool_extension/0.0.1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ah, you can export &lt;code&gt;PGXN_USER&lt;/code&gt; and &lt;code&gt;PGXN_PASSWORD&lt;/code&gt; if you are tired to type
your username and password every time.&lt;/p&gt;</description></item><item><title>Aaaand manager.pgxn.org is back and better than ⓣ</title><link>https://blog.pgxn.org/2011/aaaand-managerpgxnorg-is-back-and-better-than-ever/</link><pubDate>Wed, 01 Jun 2011 04:24:36 +0000</pubDate><guid>https://blog.pgxn.org/2011/aaaand-managerpgxnorg-is-back-and-better-than-ever/</guid><description>&lt;p&gt;Aaaand manager.pgxn.org is back and better than ever!&lt;/p&gt;</description></item><item><title>manager.pgxn.org will be going down for an upgrade ⓣ</title><link>https://blog.pgxn.org/2011/managerpgxnorg-will-be-going-down-for-an-upgrade-shor/</link><pubDate>Wed, 01 Jun 2011 03:47:48 +0000</pubDate><guid>https://blog.pgxn.org/2011/managerpgxnorg-will-be-going-down-for-an-upgrade-shor/</guid><description>&lt;p&gt;manager.pgxn.org will be going down for an upgrade shortly. Will holler when
it&amp;rsquo;s back.&lt;/p&gt;</description></item><item><title>Validate your META.json ⓣ</title><link>https://blog.pgxn.org/2011/validate-your-metajson-cpan-pgxnmetavalidator-va/</link><pubDate>Wed, 25 May 2011 17:46:24 +0000</pubDate><guid>https://blog.pgxn.org/2011/validate-your-metajson-cpan-pgxnmetavalidator-va/</guid><description>&lt;p&gt;Validate your META.json: cpan PGXN::Meta::Validator; validate_pgxn_meta
META.json META.json is OK&lt;/p&gt;</description></item><item><title>PGCon slides ⓣ</title><link>https://blog.pgxn.org/2011/pgcon-slides/</link><pubDate>Tue, 24 May 2011 21:44:31 +0000</pubDate><guid>https://blog.pgxn.org/2011/pgcon-slides/</guid><description>&lt;p&gt;PGCon slides: &lt;a href="https://www.pgcon.org/2011/schedule/events/291.en.html"&gt;https://www.pgcon.org/2011/schedule/events/291.en.html&lt;/a&gt;&lt;/p&gt;</description></item><item><title>PGXN Utils 0.1.1 Released!</title><link>https://blog.pgxn.org/2011/pgxn-utils-011-released/</link><pubDate>Mon, 23 May 2011 04:53:30 +0000</pubDate><guid>https://blog.pgxn.org/2011/pgxn-utils-011-released/</guid><description>&lt;p&gt;Hello everyone!&lt;/p&gt;
&lt;p&gt;This was a productive weekend that allowed me to work on some new features in
&lt;a href="https://github.com/guedes/pgxn-utils"&gt;pgxn_utils&lt;/a&gt; and I&amp;rsquo;m proud to tell you that a new version was released!&lt;/p&gt;
&lt;p&gt;Trying to simplify your extension-development life I&amp;rsquo;ve added two tasks to
&lt;code&gt;pgxn_utils&lt;/code&gt;: &lt;code&gt;change&lt;/code&gt; and &lt;code&gt;bundle&lt;/code&gt;. The first one is just a convenient way to
change META information about extension, incrementally, the second one is an
easy way to archive your extension in a zip file well named.&lt;/p&gt;</description></item><item><title>The PGCon PGXN talk starts in 17 minutes ⓣ</title><link>https://blog.pgxn.org/2011/the-pgcon-pgxn-talk-starts-in-17-minutes/</link><pubDate>Fri, 20 May 2011 18:42:52 +0000</pubDate><guid>https://blog.pgxn.org/2011/the-pgcon-pgxn-talk-starts-in-17-minutes/</guid><description>&lt;p&gt;The PGCon PGXN talk starts in 17 minutes.
&lt;a href="https://www.pgcon.org/2011/schedule/events/291.en.html"&gt;https://www.pgcon.org/2011/schedule/events/291.en.html&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Sorting @pgxn shirts ⓣ</title><link>https://blog.pgxn.org/2011/sorting-pgxn-shirts-stillsomeextras/</link><pubDate>Thu, 19 May 2011 00:53:19 +0000</pubDate><guid>https://blog.pgxn.org/2011/sorting-pgxn-shirts-stillsomeextras/</guid><description>&lt;p&gt;Sorting @pgxn shirts. #StillSomeExtras&lt;/p&gt;</description></item><item><title>Release an extension on PGXN this week and get an ⓣ</title><link>https://blog.pgxn.org/2011/release-an-extension-on-pgxn-this-week-and-get-an-invit/</link><pubDate>Wed, 18 May 2011 20:36:54 +0000</pubDate><guid>https://blog.pgxn.org/2011/release-an-extension-on-pgxn-this-week-and-get-an-invit/</guid><description>&lt;p&gt;Release an extension on PGXN this week and get an invite to the launch party
Friday night at #pgcon.&lt;/p&gt;</description></item><item><title>PGXN Utils</title><link>https://blog.pgxn.org/2011/pgxn-utils/</link><pubDate>Sat, 14 May 2011 01:05:00 +0000</pubDate><guid>https://blog.pgxn.org/2011/pgxn-utils/</guid><description>&lt;p&gt;Do you ever have problems with copy and paste? I often did, and that is why I
create custom templates for often used files that match certain patterns.&lt;/p&gt;
&lt;p&gt;With files from the structure of PostgreSQL&amp;rsquo;s extensions was the same thing.&lt;/p&gt;
&lt;p&gt;I was tired of creating the files and edit the META, controlfile, READMEs,
etc. every time I start a new extension and felt that I need something that
made me more productive, so I decided to create an automatic generator and
share it with the world.&lt;/p&gt;</description></item><item><title>New HOWTO</title><link>https://blog.pgxn.org/2011/new-howto/</link><pubDate>Fri, 13 May 2011 20:34:46 +0000</pubDate><guid>https://blog.pgxn.org/2011/new-howto/</guid><description>&lt;p&gt;I updated the &lt;a href="https://manager.pgxn.org/"&gt;howto&lt;/a&gt; yesterday. This document explains how to create a PGXN
distribution. If you&amp;rsquo;re interested in releasing PostgreSQL extensions on
&lt;a href="https://pgxn.org/"&gt;PGXN&lt;/a&gt;, this document is worth a read.&lt;/p&gt;
&lt;p&gt;In essence, it&amp;rsquo;s really simple: Just create a &lt;a href="https://pgxn.org/spec/"&gt;&lt;code&gt;META.json&lt;/code&gt;&lt;/a&gt; and upload. But to
get the full benefit, there are quite a few other recommendations. Already
familiar with it? Here&amp;rsquo;s the checklist:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create a &lt;a href="https://pgxn.org/spec/"&gt;&lt;code&gt;META.json&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Create a &lt;a href="https://www.postgresql.org/docs/9.1/static/extend-extensions.html"&gt;control file&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Create a &lt;a href="https://www.postgresql.org/docs/current/static/xfunc-c.html#XFUNC-C-PGXS"&gt;&lt;code&gt;Makefile&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Implement the code in the &lt;code&gt;sql&lt;/code&gt; and &lt;code&gt;src&lt;/code&gt; directories&lt;/li&gt;
&lt;li&gt;Write tests in the &lt;code&gt;test&lt;/code&gt; directory&lt;/li&gt;
&lt;li&gt;Write a &lt;a href="https://search.cpan.org/perldoc?Text::Markup"&gt;Text::Markup&lt;/a&gt;-recognizable &lt;code&gt;README&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Write &lt;a href="https://search.cpan.org/perldoc?Text::Markup"&gt;Text::Markup&lt;/a&gt;-recognizable documentation in the &lt;code&gt;doc&lt;/code&gt; directory&lt;/li&gt;
&lt;li&gt;Consider including other files: &lt;code&gt;Changes&lt;/code&gt;, &lt;code&gt;LICENSE&lt;/code&gt;, &lt;code&gt;INSTALL&lt;/code&gt;, &lt;code&gt;COPYING&lt;/code&gt;,
&lt;code&gt;AUTHORS&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://manager.pgxn.org/"&gt;Release it&lt;/a&gt;!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Be sure to read the &lt;a href="https://manager.pgxn.org/"&gt;howto&lt;/a&gt; for details. Got feedback or suggestions? Leave a
comment!&lt;/p&gt;</description></item><item><title>Using JSONP Callbacks</title><link>https://blog.pgxn.org/2011/jsonp-callbacks/</link><pubDate>Fri, 13 May 2011 03:58:33 +0000</pubDate><guid>https://blog.pgxn.org/2011/jsonp-callbacks/</guid><description>&lt;p&gt;Using the new &lt;a href="https://github.com/pgxn/pgxn-api/wiki/JSONP"&gt;JSONP callback support&lt;/a&gt; in the PGXN API, I just added a sidebar
to &lt;a href="https://www.justatheory.com/" title="Just a Theory"&gt;my personal blog&lt;/a&gt; that shows a list of all my PGXN distributions. The code
is simple:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;links&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;PGXN Code&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;text/javascript&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;pgxn_distros&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;lt;dl&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;dist&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;releases&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;&amp;lt;dt&amp;gt;&amp;lt;a href=https://pgxn.org/dist/&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;dist&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;&amp;gt;&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;dist&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;lt;/a&amp;gt;&amp;lt;/dt&amp;gt;&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;&amp;lt;dd&amp;gt;&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;releases&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;dist&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="kr"&gt;abstract&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;lt;/dd&amp;gt;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;lt;/dl&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;text/javascript&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://api.pgxn.org/user/theory.json?callback=pgxn_distros&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And the output looks like this:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.pgxn.org/2011/jsonp-callbacks/pgxn-code.png" alt="PGXN Code"&gt;&lt;/p&gt;
&lt;p&gt;Not bad, eh? AS you can see, JSONP is dead easy to use with the JSON files
served by the JSON API. Try that, CPAN!&lt;/p&gt;</description></item><item><title>sudo gem install pgxn_utils ⓣ</title><link>https://blog.pgxn.org/2011/sudo-gem-install-pgxnutils-awesome/</link><pubDate>Thu, 12 May 2011 23:49:40 +0000</pubDate><guid>https://blog.pgxn.org/2011/sudo-gem-install-pgxnutils-awesome/</guid><description>&lt;p&gt;sudo gem install pgxn_utils &lt;a href="https://github.com/guedes/pgxn-utils"&gt;https://github.com/guedes/pgxn-utils&lt;/a&gt; #Awesome&lt;/p&gt;</description></item><item><title>Know Perl? Interested in PGXN? @-message me for an ⓣ</title><link>https://blog.pgxn.org/2011/know-perl-interested-in-pgxn-message-me-for-an-offe/</link><pubDate>Wed, 11 May 2011 17:07:41 +0000</pubDate><guid>https://blog.pgxn.org/2011/know-perl-interested-in-pgxn-message-me-for-an-offe/</guid><description>&lt;p&gt;Know Perl? Interested in PGXN? @-message me for an offer you cannot refuse.&lt;/p&gt;</description></item><item><title>Want to create a PGXN distribution? Dickson Guedes ⓣ</title><link>https://blog.pgxn.org/2011/want-to-create-a-pgxn-distribution-dickson-guedes-show/</link><pubDate>Wed, 11 May 2011 16:22:18 +0000</pubDate><guid>https://blog.pgxn.org/2011/want-to-create-a-pgxn-distribution-dickson-guedes-show/</guid><description>&lt;p&gt;Want to create a PGXN distribution? Dickson Guedes shows you how.
&lt;a href="https://pgcasts.com/media/pgxn_utils-usage-example.mpeg"&gt;https://pgcasts.com/media/pgxn_utils-usage-example.mpeg&lt;/a&gt; #SoAwesome&lt;/p&gt;</description></item><item><title>Distribution Name Constraint</title><link>https://blog.pgxn.org/2011/distribution-name-constraint/</link><pubDate>Wed, 04 May 2011 20:42:37 +0000</pubDate><guid>https://blog.pgxn.org/2011/distribution-name-constraint/</guid><description>&lt;p&gt;Following &lt;a href="https://groups.google.com/group/pgxn-users/browse_thread/thread/4528b2a02e8886ff"&gt;a pgxn-users discussion&lt;/a&gt;, I&amp;rsquo;m looking at adding a constraint on the
names distributions can have. I&amp;rsquo;m thinking this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DOMAIN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;namespace&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CITEXT&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CHECK&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VALUE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;^[-a-z0-9_]{2,}$&amp;#39;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;So, just ASCII numbers and letters, dash, and underscore, with a minimum
length of two characters. Maybe &lt;code&gt;,&lt;/code&gt; and &lt;code&gt;+&lt;/code&gt; should be allowed, too? What do
you think? What constraints do you expect on distribution download file names?&lt;/p&gt;</description></item><item><title>Hrm ⓣ</title><link>https://blog.pgxn.org/2011/hrm-i-wonder-if-the-jsonp-callback-query-param-should/</link><pubDate>Tue, 03 May 2011 03:27:44 +0000</pubDate><guid>https://blog.pgxn.org/2011/hrm-i-wonder-if-the-jsonp-callback-query-param-should/</guid><description>&lt;p&gt;Hrm. I wonder if the JSONP callback query param should be called &amp;ldquo;jsonp&amp;rdquo; or
&amp;ldquo;callback&amp;rdquo;?&lt;/p&gt;</description></item><item><title>Updating the API server, might be some instability ⓣ</title><link>https://blog.pgxn.org/2011/updating-the-api-server-might-be-some-instability-over/</link><pubDate>Tue, 03 May 2011 00:09:51 +0000</pubDate><guid>https://blog.pgxn.org/2011/updating-the-api-server-might-be-some-instability-over/</guid><description>&lt;p&gt;Updating the API server, might be some instability over the next few minutes.&lt;/p&gt;</description></item><item><title>New release for the PGXN client</title><link>https://blog.pgxn.org/2011/new-release-for-the-pgxn-client/</link><pubDate>Mon, 02 May 2011 00:59:37 +0000</pubDate><guid>https://blog.pgxn.org/2011/new-release-for-the-pgxn-client/</guid><description>&lt;p&gt;During the last days I&amp;rsquo;ve done some lightweight hacking on the PGXN client,
and I&amp;rsquo;ve just released the last package on PyPI, with the still very shy
version number of 0.1a4.&lt;/p&gt;
&lt;p&gt;First change: the package name. The package is now called &lt;code&gt;pgxnclient&lt;/code&gt;,
without the point. As &lt;a href="https://blog.pgxn.org/post/5026314153/writing-a-client-for-pgxn#dsq-comments"&gt;Marti has commented&lt;/a&gt;, the point in the name could
create problems to some distributions which may have needed to munge it into a
shape fitting their naming constraints. So, in order to install the last
release you will need the command:&lt;/p&gt;</description></item><item><title>PGXN is on CPAN ⓣ</title><link>https://blog.pgxn.org/2011/pgxn-is-on-cpan/</link><pubDate>Sat, 30 Apr 2011 00:48:25 +0000</pubDate><guid>https://blog.pgxn.org/2011/pgxn-is-on-cpan/</guid><description>&lt;p&gt;PGXN is on CPAN! &lt;a href="https://search.cpan.org/search?query=PGXN"&gt;https://search.cpan.org/search?query=PGXN&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Release most of the toolchain to CPAN ⓣ</title><link>https://blog.pgxn.org/2011/release-most-of-the-toolchain-to-cpan/</link><pubDate>Fri, 29 Apr 2011 21:16:39 +0000</pubDate><guid>https://blog.pgxn.org/2011/release-most-of-the-toolchain-to-cpan/</guid><description>&lt;p&gt;Release most of the toolchain to CPAN.&lt;/p&gt;</description></item><item><title>About the Infrastructure: PGXN API</title><link>https://blog.pgxn.org/2011/about-pgxn-api/</link><pubDate>Fri, 29 Apr 2011 20:44:02 +0000</pubDate><guid>https://blog.pgxn.org/2011/about-pgxn-api/</guid><description>&lt;p&gt;The second piece of the PGXN infrastructure, after &lt;a href="https://blog.pgxn.org/post/4854707157/pgxn-manager" title="About the Infrastructure: PGXN Manager"&gt;PGXN Maanager&lt;/a&gt;, is the
&lt;a href="https://api.pgxn.org/"&gt;PGXN API Server&lt;/a&gt;. I&amp;rsquo;ve just finished the &lt;a href="https://github.com/pgxn/pgxn-api/wiki"&gt;API documentation&lt;/a&gt;, which covers
both the lightweight static file API provided by mirrors and the superset
provided by the API server. So now seems like a good time to talk about the
design of the API server and how it works.&lt;/p&gt;
&lt;p&gt;At its core, the PGXN API server is just another mirror. It has an hourly cron
job that &lt;code&gt;rsync&lt;/code&gt;s to the master mirror, updating the mirror. But then it
iterates over the &lt;code&gt;rsync&lt;/code&gt; log and transforms some things. Here&amp;rsquo;s what it does:&lt;/p&gt;</description></item><item><title>Writing a client for PGXN</title><link>https://blog.pgxn.org/2011/writing-a-client-for-pgxn/</link><pubDate>Fri, 29 Apr 2011 00:15:00 +0000</pubDate><guid>https://blog.pgxn.org/2011/writing-a-client-for-pgxn/</guid><description>&lt;p&gt;PostgreSQL 9.1 is quickly rolling to the beta phase, and the release will
bring a new useful feature: &lt;a href="https://developer.postgresql.org/pgdocs/postgres/extend-extensions.html"&gt;extensions&lt;/a&gt;. Well, actually extensions have
always existed, but they didn&amp;rsquo;t have an identity before: what you used to get
was a set of loose objects and mysterious functions in your namespace,
typically getting in the way in your dump and restore. Now here it is: &lt;a href="https://developer.postgresql.org/pgdocs/postgres/sql-createextension.html"&gt;CREATE
EXTENSION&lt;/a&gt;, in all its uppercase glory!&lt;/p&gt;
&lt;p&gt;So, an extension will exist in your database, and this finally gives the
possibility to organize them, this is what &lt;a href="https://pgxn.org/"&gt;PGXN&lt;/a&gt; is for: a repository for
metadata, documentation and code, neatly packaged and asking to be picked off
the shelf. I&amp;rsquo;ve recently &lt;a href="https://pgmp.projects.postgresql.org/"&gt;written an extension&lt;/a&gt; myself so I got some original
material to play with PGXN, which has resulted in quite a pleasant experience:
&lt;a href="https://manager.pgxn.org/"&gt;the infrastructure&lt;/a&gt; is well done thanks to David&amp;rsquo;s design, and &lt;a href="https://github.com/pgxn/pgxn-api/wiki/index-api"&gt;the API&lt;/a&gt; is
ridiculously easy to interact with: I&amp;rsquo;ve literally explored it using curl.&lt;/p&gt;</description></item><item><title>The PGXN API documentation is complete ⓣ</title><link>https://blog.pgxn.org/2011/the-pgxn-api-documentation-is-complete-have-a-look/</link><pubDate>Thu, 28 Apr 2011 19:19:33 +0000</pubDate><guid>https://blog.pgxn.org/2011/the-pgxn-api-documentation-is-complete-have-a-look/</guid><description>&lt;p&gt;The PGXN API documentation is complete.
&lt;a href="https://github.com/pgxn/pgxn-api/wiki"&gt;https://github.com/pgxn/pgxn-api/wiki&lt;/a&gt; Have a look!&lt;/p&gt;</description></item><item><title>Just deployed new versions ⓣ</title><link>https://blog.pgxn.org/2011/just-deployed-new-versions-download-files-are-now-zip/</link><pubDate>Wed, 27 Apr 2011 19:04:25 +0000</pubDate><guid>https://blog.pgxn.org/2011/just-deployed-new-versions-download-files-are-now-zip/</guid><description>&lt;p&gt;Just deployed new versions. Download files are now .zip instead of .pgz.
&lt;a href="https://pgxn.org/"&gt;https://pgxn.org/&lt;/a&gt;&lt;/p&gt;</description></item><item><title>PGXN API Docs Published</title><link>https://blog.pgxn.org/2011/api-docs-published/</link><pubDate>Wed, 27 Apr 2011 00:27:55 +0000</pubDate><guid>https://blog.pgxn.org/2011/api-docs-published/</guid><description>&lt;p&gt;The &lt;a href="https://github.com/pgxn/pgxn-api/wiki"&gt;PGXN API Documentation&lt;/a&gt; is up! I&amp;rsquo;ve just finished writing the docs for
the lightweight REST API provided by all PGXN mirrors. It also documents how
the same APIs differ when provided by the &lt;a href="https://api.pgxn.org/"&gt;API server&lt;/a&gt;. Their are four more
documents to write still, APIs provided by the API server but not the mirrors
(including full-text search); I should be able to get those done tomorrow.&lt;/p&gt;
&lt;p&gt;So if you&amp;rsquo;re interested in use the API for various things, please &lt;a href="https://github.com/pgxn/pgxn-api/wiki"&gt;have a
look&lt;/a&gt;! I&amp;rsquo;d appreciate any feedback or corrections.&lt;/p&gt;</description></item><item><title>Case Insensitivity</title><link>https://blog.pgxn.org/2011/case-insensitivity/</link><pubDate>Tue, 26 Apr 2011 04:09:08 +0000</pubDate><guid>https://blog.pgxn.org/2011/case-insensitivity/</guid><description>&lt;p&gt;I pushed out new versions of PGXN::Manager, PGXN::API, and PGXN::Site today,
all with the aim of resolving some issues with case-sensitivity. I was alerted
to this when Daniele Varrzzo released &lt;a href="https://pgxn.org/dist/italian_fts/"&gt;italian_fts&lt;/a&gt; with the &lt;a href="https://pgxn.org/tag/italian/"&gt;Italian tag&lt;/a&gt; and
the API sync blew up. Oops.&lt;/p&gt;
&lt;p&gt;So here&amp;rsquo;s the deal. The following objects have case-insensitive names on PGXN:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Distributions&lt;/li&gt;
&lt;li&gt;Extensions&lt;/li&gt;
&lt;li&gt;Versions&lt;/li&gt;
&lt;li&gt;Users (nickname)&lt;/li&gt;
&lt;li&gt;Tags&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These names are case-preserving, so they should show up with the proper
capitalization in JSON files and whatnot. But to avoid issues with URLs, I
decided that all file names should be lowercase only. Fortunately, nearly
everything was lowercase already: only a few nickname JSON files were not
lowercased, plus the files for &lt;a href="https://pgxn.org/dist/pgtap/"&gt;pgTAP&lt;/a&gt;. So once I got the code updated, I
renamed those files appropriately. In the case of the pgTAP download, I
actually re-indexed it, so that the prefix in the zip file would properly be
&amp;ldquo;pgtap-0.25.0&amp;rdquo; instead of &amp;ldquo;pgTAP-0.25.0&amp;rdquo;, since the file name is now
&lt;code&gt;pgtap-0.25.0.pgz&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>New site deployed with case-sensitivity issues ⓣ</title><link>https://blog.pgxn.org/2011/new-site-deployed-with-case-sensitivity-issues-fixed/</link><pubDate>Mon, 25 Apr 2011 18:28:10 +0000</pubDate><guid>https://blog.pgxn.org/2011/new-site-deployed-with-case-sensitivity-issues-fixed/</guid><description>&lt;p&gt;New site deployed with case-sensitivity issues fixed. &lt;a href="https://pgxn.org/"&gt;https://pgxn.org/&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Would appreciate feedback on the format of the API ⓣ</title><link>https://blog.pgxn.org/2011/would-appreciate-feedback-on-the-format-of-the-api-docs/</link><pubDate>Sun, 24 Apr 2011 05:28:55 +0000</pubDate><guid>https://blog.pgxn.org/2011/would-appreciate-feedback-on-the-format-of-the-api-docs/</guid><description>&lt;p&gt;Would appreciate feedback on the format of the API docs. So far only &amp;ldquo;index&amp;rdquo;
and &amp;ldquo;download&amp;rdquo; are documented. &lt;a href="https://github.com/pgxn/pgxn-api/wiki"&gt;https://github.com/pgxn/pgxn-api/wiki&lt;/a&gt;&lt;/p&gt;</description></item><item><title>About the Infrastructure: PGXN Manager</title><link>https://blog.pgxn.org/2011/pgxn-manager/</link><pubDate>Sat, 23 Apr 2011 02:54:34 +0000</pubDate><guid>https://blog.pgxn.org/2011/pgxn-manager/</guid><description>&lt;p&gt;The PGXN infrastructure is currently made up of four parts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The network of &lt;a href="https://api.pgxn.org/mirror/meta/mirrors.json"&gt;mirrors&lt;/a&gt;, derived from the &lt;a href="https://master.pgxn.org/"&gt;master mirror&lt;/a&gt;, and synchronized
on various schedules via &lt;code&gt;rsync&lt;/code&gt; (&lt;a href="https://pgxn.org/mirroring/"&gt;host a mirror&lt;/a&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://manager.pgxn.org/"&gt;PGXN Manager&lt;/a&gt; (&lt;a href="https://github.com/pgxn/pgxn-manager/" title="Fork PGXN::Manager on GitHub"&gt;code&lt;/a&gt;) is the core of the network. It provides the
interface for users to upload releases, processes those releases, indexes
them, and puts them on the master mirror. Details below.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://api.pgxn.org"&gt;PGXN API&lt;/a&gt; (&lt;a href="https://github.com/pgxn/pgxn-api" title="Fork PGXN::API on GitHub"&gt;code&lt;/a&gt;) is a mirror server with benefits. Once an hour, it
&lt;code&gt;rsync&lt;/code&gt;s from the master mirror, and does extra processing of new and
modified files, notably full-text indexing. I&amp;rsquo;ll write up some details next
week.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://pgxn.org"&gt;PGXN Site&lt;/a&gt; (&lt;a href="https://github.com/pgxn/pgxn-site" title="Fork PGXN::Site on GitHub"&gt;code&lt;/a&gt;) powers the main site. It&amp;rsquo;s a thin wrapper around the
API server, using &lt;a href="https://github.com/pgxn/www-pgxn" title="Fork WWW::PGXN on GitHub"&gt;WWW::PGXN&lt;/a&gt; to fetch JSON files and convert them to HTML.
I&amp;rsquo;ll write more about this bit next week, too.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Working on the donor shirt design</title><link>https://blog.pgxn.org/2011/shirt-mockup/</link><pubDate>Thu, 21 Apr 2011 17:10:58 +0000</pubDate><guid>https://blog.pgxn.org/2011/shirt-mockup/</guid><description>&lt;figure&gt;&lt;img src="https://blog.pgxn.org/2011/shirt-mockup/shirt.jpg"
alt="Photo of a male torso in a blue-ish shirt with the PGXN logo pinned to its side"&gt;&lt;figcaption&gt;
&lt;p&gt;Working on the donor shirt design.&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;</description></item><item><title>What Media Types for Browsing?</title><link>https://blog.pgxn.org/2011/safe-media-types/</link><pubDate>Thu, 21 Apr 2011 16:56:43 +0000</pubDate><guid>https://blog.pgxn.org/2011/safe-media-types/</guid><description>&lt;p&gt;Thanks to a comment from &amp;ldquo;Anon,&amp;rdquo; I&amp;rsquo;m auditing the media types used to serve
files from the &amp;ldquo;Browse&amp;rdquo; links on the site. The browse interface is managed by
&lt;a href="https://search.cpan.org/perldoc?Plack::App::Directory"&gt;Plack::App::Directory&lt;/a&gt;, which gets its media type mapping from &lt;a href="https://github.com/miyagawa/Plack/blob/master/lib/Plack/MIME.pm"&gt;this file&lt;/a&gt;.
What PGXN::API does is simply change the mappings of some of those types to
&lt;code&gt;text/plain&lt;/code&gt;. As of &lt;a href="https://github.com/pgxn/pgxn-api/commit/0157c18cbc0835b627fa2e42b2433337f5f3fff5"&gt;this commit&lt;/a&gt;, files are served as plain text if:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The strings &amp;ldquo;html&amp;rdquo;, &amp;ldquo;x-c&amp;rdquo;, &amp;ldquo;xml&amp;rdquo;, &amp;ldquo;calendar&amp;rdquo;, or &amp;ldquo;vcard&amp;rdquo; appear in the
default media type; or&lt;/li&gt;
&lt;li&gt;The file name extension is one of &lt;code&gt;.bat&lt;/code&gt;, &lt;code&gt;.css&lt;/code&gt;, &lt;code&gt;.eml&lt;/code&gt;, &lt;code&gt;.js&lt;/code&gt;, &lt;code&gt;.json&lt;/code&gt;,
&lt;code&gt;.mime&lt;/code&gt;, or &lt;code&gt;.swf&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Are there other &lt;a href="https://github.com/miyagawa/Plack/blob/master/lib/Plack/MIME.pm"&gt;media types&lt;/a&gt; that should be disabled for safe
browsing of user-submitted content?&lt;/p&gt;</description></item><item><title>Extension Makefiles for PostgreSQL 9.1</title><link>https://blog.pgxn.org/2011/extension-makefiles/</link><pubDate>Wed, 20 Apr 2011 19:29:00 +0000</pubDate><guid>https://blog.pgxn.org/2011/extension-makefiles/</guid><description>&lt;p&gt;In order to keep distribution packaging as simple as possible, I worked up
this &lt;code&gt;Makefile&lt;/code&gt; some time ago:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-makefile" data-lang="makefile"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;DATA&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;$(&lt;/span&gt;wildcard sql/*.sql&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;DOCS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;$(&lt;/span&gt;wildcard doc/*.txt&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;TESTS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;$(&lt;/span&gt;wildcard test/sql/*.sql&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;REGRESS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;$(&lt;/span&gt;patsubst test/sql/%.sql,%,&lt;span class="k"&gt;$(&lt;/span&gt;TESTS&lt;span class="k"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;REGRESS_OPTS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; --inputdir&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;test&lt;/span&gt; --load-language&lt;span class="o"&gt;=&lt;/span&gt;plpgsql
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;MODULES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;$(&lt;/span&gt;patsubst %.c,%,&lt;span class="k"&gt;$(&lt;/span&gt;wildcard src/*.c&lt;span class="k"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;PG_CONFIG&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; pg_config
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;PGXS&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="k"&gt;$(&lt;/span&gt;shell &lt;span class="k"&gt;$(&lt;/span&gt;PG_CONFIG&lt;span class="k"&gt;)&lt;/span&gt; --pgxs&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;include&lt;/span&gt; &lt;span class="k"&gt;$(&lt;/span&gt;&lt;span class="nv"&gt;PGXS&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The nice thing about this code is that it has nothing specific to a
distribution in it. It figures out what SQL files there are, what doc files
there are, and what C files need compiling by just looking in the &lt;code&gt;sql&lt;/code&gt;,
&lt;code&gt;doc&lt;/code&gt;, and &lt;code&gt;src&lt;/code&gt; directories, respectively. It also specifies that tests are
in the &lt;code&gt;test&lt;/code&gt; directory. About the only thing I&amp;rsquo;ve customized here is adding
&lt;code&gt;--load-language=plpgsql&lt;/code&gt; to &lt;code&gt;REGRESS_OPTS&lt;/code&gt;, as the tests for the distribution
I&amp;rsquo;ve copied this from require PL/pgSQL to run. Simple, and anyone can use it
with very little need to tweak it, as long as they don&amp;rsquo;t mind storing their
files in the specified directories.&lt;/p&gt;</description></item><item><title>Building PostgreSQL HEAD in order to update my ⓣ</title><link>https://blog.pgxn.org/2011/building-postgresql-head-in-order-to-update-my-extensio/</link><pubDate>Wed, 20 Apr 2011 16:09:47 +0000</pubDate><guid>https://blog.pgxn.org/2011/building-postgresql-head-in-order-to-update-my-extensio/</guid><description>&lt;p&gt;Building PostgreSQL HEAD in order to update my extensions for the 9.1
extensions support. Will update the HOWTO with details soon.&lt;/p&gt;</description></item><item><title>Deployment done, sites are back up ⓣ</title><link>https://blog.pgxn.org/2011/deployment-done-sites-are-back-up-blog-post-tomorr/</link><pubDate>Wed, 20 Apr 2011 05:45:45 +0000</pubDate><guid>https://blog.pgxn.org/2011/deployment-done-sites-are-back-up-blog-post-tomorr/</guid><description>&lt;p&gt;Deployment done, sites are back up. Blog post tomorrow.&lt;/p&gt;</description></item><item><title>Deployment done, sites are back up ⓣ</title><link>https://blog.pgxn.org/2011/m-deployment-done-sites-are-back-up-blog-post-tomorr/</link><pubDate>Wed, 20 Apr 2011 05:45:45 +0000</pubDate><guid>https://blog.pgxn.org/2011/m-deployment-done-sites-are-back-up-blog-post-tomorr/</guid><description>&lt;p&gt;Deployment done, sites are back up. Blog post tomorrow.&lt;/p&gt;</description></item><item><title>Pushing out new changes to the sites; might be ⓣ</title><link>https://blog.pgxn.org/2011/am-pushing-out-new-changes-to-the-sites-might-be-unst/</link><pubDate>Wed, 20 Apr 2011 05:36:51 +0000</pubDate><guid>https://blog.pgxn.org/2011/am-pushing-out-new-changes-to-the-sites-might-be-unst/</guid><description>&lt;p&gt;Pushing out new changes to the sites; might be unstable for a few minutes.&lt;/p&gt;</description></item><item><title>Next Thursday: PDXPUG: Distributing Extensions on ⓣ</title><link>https://blog.pgxn.org/2011/next-thursday-pdxpug-distributing-extensions-on-pgxn/</link><pubDate>Fri, 15 Apr 2011 20:14:46 +0000</pubDate><guid>https://blog.pgxn.org/2011/next-thursday-pdxpug-distributing-extensions-on-pgxn/</guid><description>&lt;p&gt;Next Thursday: PDXPUG: Distributing Extensions on PGXN
&lt;a href="https://calagator.org/events/1250460492"&gt;https://calagator.org/events/1250460492&lt;/a&gt;&lt;/p&gt;</description></item><item><title>It's Finally Up: The New PGXN Site!</title><link>https://blog.pgxn.org/2011/new-pgxn-site/</link><pubDate>Thu, 14 Apr 2011 06:32:06 +0000</pubDate><guid>https://blog.pgxn.org/2011/new-pgxn-site/</guid><description>&lt;p&gt;I&amp;rsquo;m pleased to announce that the new &lt;a href="https://pgxn.org/"&gt;PGXN SITE&lt;/a&gt; went live last night. Some of
the things it does:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Full text search of all documentation, distribution metadata and &lt;code&gt;README&lt;/code&gt;s,
extensions metadata, and users&lt;/li&gt;
&lt;li&gt;list of the 56 most recent uploads&lt;/li&gt;
&lt;li&gt;Find users by first letter of nickname (mostly so search spiders can drill
down to all site content)&lt;/li&gt;
&lt;li&gt;A tag cloud with the 56 most commonly-used tags (they&amp;rsquo;re all the same size
and color right now because each one is used only once at the moment)&lt;/li&gt;
&lt;li&gt;Pages for users (&lt;a href="https://pgxn.org/user/alexk"&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Pages for distributions, with inlined &lt;code&gt;README&lt;/code&gt; (&lt;a href="https://pgxn.org/dist/explanation/"&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Browse unzipped distributions (&lt;a href="https://api.pgxn.org/src/semver/semver-0.2.0/"&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Pages for documentation (&lt;a href="https://pgxn.org/dist/explanation/doc/explanation.html"&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Permalinks for extensions &lt;a href="https://pgxn.org/extension/pair"&gt;example&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The entire site is backed by the &lt;a href="https://api.pgxn.org/"&gt;API Server&lt;/a&gt;, which is mainly composed of
static JSON and HTML files read by the site back end from the local file
system. So the site is quite fast. Please browse around, let me know what you
think, and please &lt;a href="https://github.com/pgxn/pgxn-site/issues"&gt;report any bugs&lt;/a&gt; you find.&lt;/p&gt;</description></item><item><title>And thew new PGXN is live ⓣ</title><link>https://blog.pgxn.org/2011/and-thew-new-pgxn-is-live-woo/</link><pubDate>Wed, 13 Apr 2011 06:35:34 +0000</pubDate><guid>https://blog.pgxn.org/2011/and-thew-new-pgxn-is-live-woo/</guid><description>&lt;p&gt;And thew new PGXN is live! &lt;a href="https://pgxn.org/"&gt;https://pgxn.org/&lt;/a&gt; #woo&lt;/p&gt;</description></item><item><title>Releasing the new PGXN site ⓣ</title><link>https://blog.pgxn.org/2011/m-releasing-the-new-pgxn-site-might-be-unstble-for-th/</link><pubDate>Wed, 13 Apr 2011 06:24:47 +0000</pubDate><guid>https://blog.pgxn.org/2011/m-releasing-the-new-pgxn-site-might-be-unstble-for-th/</guid><description>&lt;p&gt;Releasing the new PGXN site. Might be unstble for the next few minutes&amp;hellip;&lt;/p&gt;</description></item><item><title>Releasing the new PGXN site ⓣ</title><link>https://blog.pgxn.org/2011/releasing-the-new-pgxn-site-might-be-unstble-for-th/</link><pubDate>Wed, 13 Apr 2011 06:24:47 +0000</pubDate><guid>https://blog.pgxn.org/2011/releasing-the-new-pgxn-site-might-be-unstble-for-th/</guid><description>&lt;p&gt;Releasing the new PGXN site. Might be unstable for the next few minutes&amp;hellip;&lt;/p&gt;</description></item><item><title>Hrm ⓣ</title><link>https://blog.pgxn.org/2011/hrm-wondering-if-i-should-change-the-search-url-to-end/</link><pubDate>Wed, 13 Apr 2011 01:23:42 +0000</pubDate><guid>https://blog.pgxn.org/2011/hrm-wondering-if-i-should-change-the-search-url-to-end/</guid><description>&lt;p&gt;Hrm. Wondering if I should change the search URL to end in .json.
&lt;a href="https://api.pgxn.org/index.json"&gt;https://api.pgxn.org/index.json&lt;/a&gt;&lt;/p&gt;</description></item><item><title>New version of the beta site is up ⓣ</title><link>https://blog.pgxn.org/2011/new-version-of-the-beta-site-is-up-plan-to-switch-over/</link><pubDate>Tue, 12 Apr 2011 04:59:09 +0000</pubDate><guid>https://blog.pgxn.org/2011/new-version-of-the-beta-site-is-up-plan-to-switch-over/</guid><description>&lt;p&gt;New version of the beta site is up. Plan to switch over tomorrow.
&lt;a href="https://beta.pgxn.org/"&gt;https://beta.pgxn.org/&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Will be deploying a released candidate for the new ⓣ</title><link>https://blog.pgxn.org/2011/will-be-deploying-a-released-candidate-for-the-new-site/</link><pubDate>Fri, 08 Apr 2011 09:55:49 +0000</pubDate><guid>https://blog.pgxn.org/2011/will-be-deploying-a-released-candidate-for-the-new-site/</guid><description>&lt;p&gt;Will be deploying a released candidate for the new site tomorrow. Getting
close!&lt;/p&gt;</description></item><item><title>Added tag cloud and recent releases page to ⓣ</title><link>https://blog.pgxn.org/2011/added-tag-cloud-and-recent-releases-page-to-check-it/</link><pubDate>Thu, 07 Apr 2011 22:07:01 +0000</pubDate><guid>https://blog.pgxn.org/2011/added-tag-cloud-and-recent-releases-page-to-check-it/</guid><description>&lt;p&gt;Added tag cloud and recent releases page to &lt;a href="https://beta.pgxn.org/."&gt;https://beta.pgxn.org/.&lt;/a&gt; Check it
out!&lt;/p&gt;</description></item><item><title>Thank you Younicycle for your donation ⓣ</title><link>https://blog.pgxn.org/2011/thank-you-younicycle-for-your-donation/</link><pubDate>Sat, 02 Apr 2011 20:18:34 +0000</pubDate><guid>https://blog.pgxn.org/2011/thank-you-younicycle-for-your-donation/</guid><description>&lt;p&gt;Thank you Younicycle for your donation! &lt;a href="https://www.younicycle.com/"&gt;https://www.younicycle.com/&lt;/a&gt;&lt;/p&gt;</description></item><item><title>New home for all the PGXN source code ⓣ</title><link>https://blog.pgxn.org/2011/new-home-for-all-the-pgxn-source-code/</link><pubDate>Fri, 01 Apr 2011 22:11:04 +0000</pubDate><guid>https://blog.pgxn.org/2011/new-home-for-all-the-pgxn-source-code/</guid><description>&lt;p&gt;New home for all the PGXN source code: &lt;a href="https://github.com/pgxn/"&gt;https://github.com/pgxn/&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Thoughts on Content Localization</title><link>https://blog.pgxn.org/2011/content-localization/</link><pubDate>Fri, 01 Apr 2011 05:33:16 +0000</pubDate><guid>https://blog.pgxn.org/2011/content-localization/</guid><description>&lt;p&gt;The new site is coming along &lt;em&gt;very&lt;/em&gt; nicely. I&amp;rsquo;m really excited about it. The
addition of the API server has turned out to be an inspiration. I never
realized how clean the separation between content and presentation could be
until I did this &amp;ndash; even though I&amp;rsquo;ve preached that very separation for years
in one of my &lt;a href="https://www.kineticode.com/"&gt;day jobs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;But speaking of that separation, I am running into a bit of an annoyance with
content specific to the site. All the content from the network is working
beautifully &amp;ndash; I just fetch it from the API server. But the site has its own
content page independent of the network, including an FAQ, a page on setting
up a mirror, a list of our backers, etc. And the ugly bit has to do with
localization.&lt;/p&gt;</description></item><item><title>Is it stupid to have a REST API return a different ⓣ</title><link>https://blog.pgxn.org/2011/is-it-stupid-to-have-a-rest-api-return-a-different-json/</link><pubDate>Thu, 31 Mar 2011 20:30:44 +0000</pubDate><guid>https://blog.pgxn.org/2011/is-it-stupid-to-have-a-rest-api-return-a-different-json/</guid><description>&lt;p&gt;Is it stupid to have a REST API return a different JSON structure based on the
value of a query parameter?&lt;/p&gt;</description></item><item><title>If a search requires a query, what status code ⓣ</title><link>https://blog.pgxn.org/2011/if-a-search-requires-a-query-what-status-code-should-b/</link><pubDate>Fri, 25 Mar 2011 07:52:23 +0000</pubDate><guid>https://blog.pgxn.org/2011/if-a-search-requires-a-query-what-status-code-should-b/</guid><description>&lt;p&gt;If a search requires a query, what status code should be returned if there is
no query? 404 not found doesn&amp;rsquo;t seem right.&lt;/p&gt;</description></item><item><title>Thoughts on Indexing and Documentation</title><link>https://blog.pgxn.org/2011/indexing-docs/</link><pubDate>Tue, 22 Mar 2011 05:13:00 +0000</pubDate><guid>https://blog.pgxn.org/2011/indexing-docs/</guid><description>&lt;p&gt;So I&amp;rsquo;m designing the full text indexing for the PGXN search site. I&amp;rsquo;m modeling
it on &lt;a href="https://http//search.cpan.org"&gt;CPAN Search&lt;/a&gt;, which has been great. There are four search options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Full documentation search. This is the most common. Includes doc title and
body.&lt;/li&gt;
&lt;li&gt;User search. Search on names, nicknames, email addresses, URIs, etc.&lt;/li&gt;
&lt;li&gt;Distribution search. Search on distribution name, abstract, description,
tags, and the README.&lt;/li&gt;
&lt;li&gt;Extension search. Search on extension name and abstract.&lt;/li&gt;
&lt;li&gt;Tag search. Search on tag name only.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The documentation search is the one I&amp;rsquo;m perhaps least sure about. It assumes
that each extension in a distribution will have documentation. But so far that
has not really been the practice for PostgreSQL extensions. Most folks seem to
stick the documentation in the README. And even then it can be &lt;a href="https://master.pgxn.org/dist/countnulls/1.0.0/README.txt"&gt;almost
nothing&lt;/a&gt;. So a search for &amp;ldquo;count nulls&amp;rdquo; probably would not find &amp;ldquo;countnulls&amp;rdquo;
extension, because there is no documentation. What should I do about this? I&amp;rsquo;m
thinking one of:&lt;/p&gt;</description></item><item><title>Wow, @alexeyklyukin is the new PGXN champ ⓣ</title><link>https://blog.pgxn.org/2011/wow-alexeyklyukin-is-the-new-pgxn-champ-he-now-has-6/</link><pubDate>Wed, 16 Mar 2011 21:47:51 +0000</pubDate><guid>https://blog.pgxn.org/2011/wow-alexeyklyukin-is-the-new-pgxn-champ-he-now-has-6/</guid><description>&lt;p&gt;Wow, @alexeyklyukin is the new PGXN champ! He now has 6 distributions!
&lt;a href="https://master.pgxn.org/by/user/alexk.json"&gt;https://master.pgxn.org/by/user/alexk.json&lt;/a&gt;&lt;/p&gt;</description></item><item><title>manager.pgxn.org is back up ⓣ</title><link>https://blog.pgxn.org/2011/is-back-up-and-the-issue-has-been-fixed-thank-you-for/</link><pubDate>Tue, 15 Mar 2011 22:20:11 +0000</pubDate><guid>https://blog.pgxn.org/2011/is-back-up-and-the-issue-has-been-fixed-thank-you-for/</guid><description>&lt;p&gt;&lt;a href="https://manager.pgxn.org/"&gt;https://manager.pgxn.org/&lt;/a&gt; is back up and the issue has been fixed. Thank you
for your patience!&lt;/p&gt;</description></item><item><title>Taking down ⓣ</title><link>https://blog.pgxn.org/2011/taking-down-to-do-some-troubleshooting-will-get-it-bac/</link><pubDate>Tue, 15 Mar 2011 21:42:03 +0000</pubDate><guid>https://blog.pgxn.org/2011/taking-down-to-do-some-troubleshooting-will-get-it-bac/</guid><description>&lt;p&gt;Taking down &lt;a href="https://manager.pgxn.org/"&gt;https://manager.pgxn.org/&lt;/a&gt; to do some troubleshooting. Will get
it back up ASAP.&lt;/p&gt;</description></item><item><title>Cranking on the new site ⓣ</title><link>https://blog.pgxn.org/2011/cranking-on-the-new-site-should-be-able-to-show-someth/</link><pubDate>Sat, 12 Mar 2011 09:12:07 +0000</pubDate><guid>https://blog.pgxn.org/2011/cranking-on-the-new-site-should-be-able-to-show-someth/</guid><description>&lt;p&gt;Cranking on the new site. Should be able to show something off late next week
or early the following.&lt;/p&gt;</description></item><item><title>Reorganized things a big and updated the main ⓣ</title><link>https://blog.pgxn.org/2011/reorganized-things-a-big-and-updated-the-main-readme/</link><pubDate>Sat, 12 Mar 2011 00:04:16 +0000</pubDate><guid>https://blog.pgxn.org/2011/reorganized-things-a-big-and-updated-the-main-readme/</guid><description>&lt;p&gt;Reorganized things a big and updated the main README.
&lt;a href="https://github.com/theory/pgxn"&gt;https://github.com/theory/pgxn&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Question: Ajax and Search Engine Indexing</title><link>https://blog.pgxn.org/2011/ajax-search-indexing/</link><pubDate>Fri, 04 Mar 2011 20:20:08 +0000</pubDate><guid>https://blog.pgxn.org/2011/ajax-search-indexing/</guid><description>&lt;p&gt;I&amp;rsquo;ve started working on the main (search) site in earnest now. The basic
layout is done, and I&amp;rsquo;m working on the distribution view (&lt;a href="https://theory.github.com/pgxn/pgtapdist.html"&gt;mockup&lt;/a&gt;). My
thinking so far has been that I would simply serve a page that requested, say,
&lt;code&gt;/dist/pgTAP/&lt;/code&gt;, and that page would use Ajax requests to fetch the data from
the &lt;a href="https://api.pgxn.org/"&gt;API server&lt;/a&gt; and display stuff. I think this will work pretty well except
for one thing: 404s.&lt;/p&gt;</description></item><item><title>First deployment of the API server is up ⓣ</title><link>https://blog.pgxn.org/2011/first-deployment-of-the-api-server-is-up-not-much-to/</link><pubDate>Thu, 03 Mar 2011 05:12:06 +0000</pubDate><guid>https://blog.pgxn.org/2011/first-deployment-of-the-api-server-is-up-not-much-to/</guid><description>&lt;p&gt;First deployment of the API server is up: &lt;a href="https://api.pgxn.org/."&gt;https://api.pgxn.org/.&lt;/a&gt; Not much to
look at without docs , but will build search site with it next.&lt;/p&gt;</description></item><item><title>Updated ⓣ</title><link>https://blog.pgxn.org/2011/updated-to-add-the-abstract-key-to-provides-and-updated/</link><pubDate>Sat, 26 Feb 2011 04:13:40 +0000</pubDate><guid>https://blog.pgxn.org/2011/updated-to-add-the-abstract-key-to-provides-and-updated/</guid><description>&lt;p&gt;Updated &lt;a href="https://manager.pgxn.org/"&gt;https://manager.pgxn.org/&lt;/a&gt; to add the abstract key to provides and
updated existing distributions.&lt;/p&gt;</description></item><item><title>Modified Meta spec; added `abstract` to the ⓣ</title><link>https://blog.pgxn.org/2011/modified-meta-spec-added-abstract-to-the-requires/</link><pubDate>Sat, 26 Feb 2011 01:49:14 +0000</pubDate><guid>https://blog.pgxn.org/2011/modified-meta-spec-added-abstract-to-the-requires/</guid><description>&lt;p&gt;Modified Meta spec; added &lt;code&gt;abstract&lt;/code&gt; to the &lt;code&gt;requires&lt;/code&gt; object. Markdown:
&lt;a href="https://pgxn.org/meta/spec.txt;"&gt;https://pgxn.org/meta/spec.txt;&lt;/a&gt; HTML: &lt;a href="https://pgxn.org/meta/spec.html"&gt;https://pgxn.org/meta/spec.html&lt;/a&gt;&lt;/p&gt;</description></item><item><title>I'm going to have to create META.json-management ⓣ</title><link>https://blog.pgxn.org/2011/im-going-to-have-to-create-metajson-management-tools/</link><pubDate>Sat, 26 Feb 2011 00:06:19 +0000</pubDate><guid>https://blog.pgxn.org/2011/im-going-to-have-to-create-metajson-management-tools/</guid><description>&lt;p&gt;I&amp;rsquo;m going to have to create META.json-management tools soon; I just fixed a
broken META.json of my own &amp;ndash; the second time I&amp;rsquo;ve had to do so.&lt;/p&gt;</description></item><item><title>Working on the REST API, realized I forgot to ⓣ</title><link>https://blog.pgxn.org/2011/working-on-the-rest-api-realized-i-forgot-to-include-t/</link><pubDate>Fri, 25 Feb 2011 05:50:24 +0000</pubDate><guid>https://blog.pgxn.org/2011/working-on-the-rest-api-realized-i-forgot-to-include-t/</guid><description>&lt;p&gt;Working on the REST API, realized I forgot to include the release date in
distribution metadata. Now added and all distributions updated.&lt;/p&gt;</description></item><item><title>Added an "Upload" link to the PGXN site nav, ⓣ</title><link>https://blog.pgxn.org/2011/added-an-upload-link-to-the-pgxn-site-nav-linking-to/</link><pubDate>Wed, 23 Feb 2011 22:00:59 +0000</pubDate><guid>https://blog.pgxn.org/2011/added-an-upload-link-to-the-pgxn-site-nav-linking-to/</guid><description>&lt;p&gt;Added an &amp;ldquo;Upload&amp;rdquo; link to the PGXN site nav, linking to PGXN manager, the web
app for releasing extensions to PGXN.&lt;/p&gt;</description></item><item><title>Just released Text::Markup to CPAN ⓣ</title><link>https://blog.pgxn.org/2011/just-released-textmarkup-to-cpan-will-be-essential-f/</link><pubDate>Wed, 23 Feb 2011 01:09:00 +0000</pubDate><guid>https://blog.pgxn.org/2011/just-released-textmarkup-to-cpan-will-be-essential-f/</guid><description>&lt;p&gt;Just released Text::Markup to CPAN. Will be essential for parsing doc files
for PGXN. &lt;a href="https://p3rl.org/Text::Markup"&gt;https://p3rl.org/Text::Markup&lt;/a&gt;&lt;/p&gt;</description></item><item><title>PGXN Manager is back up ⓣ</title><link>https://blog.pgxn.org/2011/pgxn-manager-is-back-up-it-now-uses-the-native-semver/</link><pubDate>Fri, 11 Feb 2011 00:28:18 +0000</pubDate><guid>https://blog.pgxn.org/2011/pgxn-manager-is-back-up-it-now-uses-the-native-semver/</guid><description>&lt;p&gt;PGXN Manager is back up. It now uses the native semver data type:
&lt;a href="https://master.pgxn.org/dist/semver/"&gt;https://master.pgxn.org/dist/semver/&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Taking PGXN Manager down for a few minutes to ⓣ</title><link>https://blog.pgxn.org/2011/taking-pgxn-manager-down-for-a-few-minutes-to-upgrade-i/</link><pubDate>Fri, 11 Feb 2011 00:16:00 +0000</pubDate><guid>https://blog.pgxn.org/2011/taking-pgxn-manager-down-for-a-few-minutes-to-upgrade-i/</guid><description>&lt;p&gt;Taking PGXN Manager down for a few minutes to upgrade it to use the new semver
data type.&lt;/p&gt;</description></item><item><title>PGXN API RFC</title><link>https://blog.pgxn.org/2011/pgxn-api-rfc/</link><pubDate>Fri, 04 Feb 2011 04:05:33 +0000</pubDate><guid>https://blog.pgxn.org/2011/pgxn-api-rfc/</guid><description>&lt;p&gt;Things slowed up a bit over the last couple of months, I admit. There are any
number of reasons for that, not the least were the intrusion of the holidays
and a &lt;a href="https://www.designsceneapp.com/"&gt;little side project&lt;/a&gt; I&amp;rsquo;ve been hacking on after-hours (and sometimes
during-hours). But I&amp;rsquo;m ramping things up again now and need &lt;em&gt;your&lt;/em&gt; feedback on
my current plans. Here&amp;rsquo;s what I&amp;rsquo;m working on: the search site.&lt;/p&gt;
&lt;h2 id="search-sites-and-apis"&gt;Search Sites and APIs&lt;/h2&gt;
&lt;p&gt;Well, sort of. First of all, I&amp;rsquo;ve decided that the &amp;ldquo;search site&amp;rdquo; should not be
a separate thing. The &lt;a href="https://pgxn.org/"&gt;main site&lt;/a&gt; will be the search site. This is following
the example of &lt;a href="https://openjsan.org"&gt;JSAN&lt;/a&gt;, as well as feedback from &lt;a href="https://search.cpan.org/~gbarr/"&gt;Graham Barr&lt;/a&gt;, who created and
maintains &lt;a href="https://search.cpan.org/"&gt;CPAN Search&lt;/a&gt;. Apparently people are often confused that
&lt;a href="https://search.cpan.org/"&gt;search.cpan.org&lt;/a&gt; is separate from &lt;a href="https://www.cpan.org"&gt;www.cpan.org&lt;/a&gt;. No point in
adding in confusion from the beginning. And besides, now that the PGXN
fund-raising &lt;a href="https://blog.pgxn.org/post/2063677299/goooooooaaaal"&gt;is over&lt;/a&gt;, I don&amp;rsquo;t know what else would go on the home page.&lt;/p&gt;</description></item><item><title>Started a new GitHub project to create a PGXN API ⓣ</title><link>https://blog.pgxn.org/2011/m-started-a-new-github-project-to-create-a-pgxn-api-se/</link><pubDate>Mon, 31 Jan 2011 23:25:03 +0000</pubDate><guid>https://blog.pgxn.org/2011/m-started-a-new-github-project-to-create-a-pgxn-api-se/</guid><description>&lt;p&gt;Started a new GitHub project to create a PGXN API server:
&lt;a href="https://github.com/theory/pgxn-api"&gt;https://github.com/theory/pgxn-api&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Started a new GitHub project to create a PGXN API ⓣ</title><link>https://blog.pgxn.org/2011/started-a-new-github-project-to-create-a-pgxn-api-se/</link><pubDate>Mon, 31 Jan 2011 23:25:03 +0000</pubDate><guid>https://blog.pgxn.org/2011/started-a-new-github-project-to-create-a-pgxn-api-se/</guid><description>&lt;p&gt;Started a new GitHub project to create a PGXN API server:
&lt;a href="https://github.com/theory/pgxn-api"&gt;https://github.com/theory/pgxn-api&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Want to use the PGXN logo in a presentation paper ⓣ</title><link>https://blog.pgxn.org/2011/want-to-use-the-pgxn-logo-in-a-presentation-paper-get/</link><pubDate>Wed, 05 Jan 2011 18:53:43 +0000</pubDate><guid>https://blog.pgxn.org/2011/want-to-use-the-pgxn-logo-in-a-presentation-paper-get/</guid><description>&lt;p&gt;Want to use the PGXN logo in a presentation paper? Get the artwork under the
CC BY-SA license here: &lt;a href="https://pgxn.org/art/"&gt;https://pgxn.org/art/&lt;/a&gt; /thanks @strongrrl&lt;/p&gt;</description></item><item><title>Mirror administration has been deployed to ⓣ</title><link>https://blog.pgxn.org/2011/mirror-administration-has-been-deployed-to-pgxnmanage/</link><pubDate>Tue, 04 Jan 2011 22:58:32 +0000</pubDate><guid>https://blog.pgxn.org/2011/mirror-administration-has-been-deployed-to-pgxnmanage/</guid><description>&lt;p&gt;Mirror administration has been deployed to PGXN::Manager. Check out the
newly-generated list: &lt;a href="https://master.pgxn.org/meta/mirrors.json"&gt;https://master.pgxn.org/meta/mirrors.json&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Goooooooaaaal!</title><link>https://blog.pgxn.org/2010/goooooooaaaal/</link><pubDate>Wed, 01 Dec 2010 22:39:00 +0000</pubDate><guid>https://blog.pgxn.org/2010/goooooooaaaal/</guid><description>&lt;p&gt;I&amp;rsquo;m pleased to announce that, thanks to a pledge from &lt;a href="https://www.enovafinancial.com/"&gt;Enova Financial&lt;/a&gt; at the
newly-minted &amp;ldquo;Patron&amp;rdquo; level, we have achieved our fundraising goal of
$25,000. Thanks to Jim &amp;ldquo;Decibel!&amp;rdquo; Nasby for putting together the contribution
that put us over the top!&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m thrilled to find that this approach to getting a project going actually
works. I&amp;rsquo;ve had the idea for PGXN for a long time, but knew that I was never
going to be able to make it happen unless I could get help. So putting things
together, writing &lt;a href="https://wiki.postgresql.org/wiki/PGXN"&gt;a spec&lt;/a&gt; and &lt;a href="https://pgxn.org/status.html"&gt;project plan&lt;/a&gt;, and putting together the
&lt;a href="https://pgxn.org/"&gt;fundraising site&lt;/a&gt; with a prominent &amp;ldquo;fundraising thermometer&amp;rdquo; and contribution
levels&amp;hellip;well, it really paid off.&lt;/p&gt;</description></item><item><title>Thank you Enova Financial for your contribution ⓣ</title><link>https://blog.pgxn.org/2010/thank-you-enova-financial-for-your-contribution-blog-p/</link><pubDate>Wed, 01 Dec 2010 20:37:45 +0000</pubDate><guid>https://blog.pgxn.org/2010/thank-you-enova-financial-for-your-contribution-blog-p/</guid><description>&lt;p&gt;Thank you Enova Financial for your contribution! Blog post soon.&lt;/p&gt;</description></item><item><title>What's on your PGXN wish list? Make it known ⓣ</title><link>https://blog.pgxn.org/2010/whats-on-your-pgxn-wish-list-make-it-known/</link><pubDate>Wed, 01 Dec 2010 20:15:37 +0000</pubDate><guid>https://blog.pgxn.org/2010/whats-on-your-pgxn-wish-list-make-it-known/</guid><description>&lt;p&gt;What&amp;rsquo;s on your PGXN wish list? Make it known!
&lt;a href="https://github.com/theory/pgxn/wiki/PGXN-Wish-List/"&gt;https://github.com/theory/pgxn/wiki/PGXN-Wish-List/&lt;/a&gt;&lt;/p&gt;</description></item><item><title>PGWest Slides, Manager Access, Wish List, Back to Work</title><link>https://blog.pgxn.org/2010/slides-manager-work/</link><pubDate>Wed, 24 Nov 2010 22:56:54 +0000</pubDate><guid>https://blog.pgxn.org/2010/slides-manager-work/</guid><description>&lt;p&gt;PGWest Slides, Back to Work&lt;/p&gt;
&lt;p&gt;Well, back to work a bit, anyway. Tomorrow is Thanksgiving in the U.S., so I&amp;rsquo;m
not likely to do much more until next week. But I&amp;rsquo;ll be heads down on it,
then, working to get the search site done.&lt;/p&gt;
&lt;p&gt;Before I talk about that, though, I realize that I forgot to post the link to
my slides from &lt;a href="https://www.postgresqlconference.org/2010/west/"&gt;PGWest&lt;/a&gt;. I actually posted them &lt;em&gt;before&lt;/em&gt; the talk, I just
never got round to mentioning it here. So, here it is:&lt;/p&gt;</description></item><item><title>Fixing Foreign Key Deadlocks in PostgreSQL ⓣ</title><link>https://blog.pgxn.org/2010/fixing-foreign-key-deadlocks-in-postgresql-help-commu/</link><pubDate>Wed, 24 Nov 2010 22:32:32 +0000</pubDate><guid>https://blog.pgxn.org/2010/fixing-foreign-key-deadlocks-in-postgresql-help-commu/</guid><description>&lt;p&gt;Fixing Foreign Key Deadlocks in PostgreSQL
&lt;a href="https://www.justatheory.com/computers/databases/postgresql/fk-locks-project.html"&gt;https://www.justatheory.com/computers/databases/postgresql/fk-locks-project.html&lt;/a&gt;
#help #community&lt;/p&gt;</description></item><item><title>What's on *your* PGXN wish list? Add it here ⓣ</title><link>https://blog.pgxn.org/2010/whats-on-your-pgxn-wish-list-add-it-here/</link><pubDate>Tue, 23 Nov 2010 01:33:38 +0000</pubDate><guid>https://blog.pgxn.org/2010/whats-on-your-pgxn-wish-list-add-it-here/</guid><description>&lt;p&gt;What&amp;rsquo;s on &lt;em&gt;your&lt;/em&gt; PGXN wish list? Add it here:
&lt;a href="https://github.com/theory/pgxn/wiki/PGXN-Wish-List"&gt;https://github.com/theory/pgxn/wiki/PGXN-Wish-List&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Slides from pgWest ⓣ</title><link>https://blog.pgxn.org/2010/slides-from-pgwest/</link><pubDate>Thu, 18 Nov 2010 17:28:06 +0000</pubDate><guid>https://blog.pgxn.org/2010/slides-from-pgwest/</guid><description>&lt;p&gt;Slides from #pgWest:
&lt;a href="https://www.slideshare.net/justatheory/building-and-distributing-postgresql-extensions-without-learning-c"&gt;https://www.slideshare.net/justatheory/building-and-distributing-postgresql-extensions-without-learning-c&lt;/a&gt;&lt;/p&gt;</description></item><item><title>PGWest, Search Site Sneak Peak</title><link>https://blog.pgxn.org/2010/pgwest-and-sneak-peak/</link><pubDate>Wed, 03 Nov 2010 21:09:00 +0000</pubDate><guid>https://blog.pgxn.org/2010/pgwest-and-sneak-peak/</guid><description>&lt;p&gt;I&amp;rsquo;ve been working on my &lt;a href="https://www.postgresqlconference.org/content/building-and-distributing-postgresql-extensions-without-learning-c"&gt;PostgreSQL Conference West presentation&lt;/a&gt;, which
heavily features PGXN, of course. I think it&amp;rsquo;s looking good. If you&amp;rsquo;re at
&lt;a href="https://www.postgresqlconference.org/2010/west/"&gt;PGWest&lt;/a&gt; or are in the San Francisco area and free, come see the talk! Should
be a good introduction to creating PostgreSQL extensions and distributing them
on PGXN. The latest bit I added is a section on the modifications needed to
support the forthcoming &lt;a href="https://s.coop/pgext"&gt;&lt;code&gt;CREATE EXTENSION&lt;/code&gt;&lt;/a&gt; support slated for 9.1.
Fortunately it&amp;rsquo;s dead simple, and will make dealing with extensions in the
database a lot simpler, administratively. Really looking forward to that. Of
course I&amp;rsquo;ll post slides once the talk is over.&lt;/p&gt;</description></item><item><title>Checked off a bunch of items on the status page ⓣ</title><link>https://blog.pgxn.org/2010/checked-off-a-bunch-of-items-on-the-status-page-need-t/</link><pubDate>Sun, 24 Oct 2010 21:48:29 +0000</pubDate><guid>https://blog.pgxn.org/2010/checked-off-a-bunch-of-items-on-the-status-page-need-t/</guid><description>&lt;p&gt;Checked off a bunch of items on the status page. Need to keep it more
up-to-date. &lt;a href="https://pgxn.org/status.html"&gt;https://pgxn.org/status.html&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Fixed the internal server error in the How To page ⓣ</title><link>https://blog.pgxn.org/2010/fixed-the-internal-server-error-in-the-how-to-page-che/</link><pubDate>Sun, 24 Oct 2010 21:39:48 +0000</pubDate><guid>https://blog.pgxn.org/2010/fixed-the-internal-server-error-in-the-how-to-page-che/</guid><description>&lt;p&gt;Fixed the internal server error in the How To page. Check it out.
&lt;a href="https://manager.pgxn.org/howto"&gt;https://manager.pgxn.org/howto&lt;/a&gt;&lt;/p&gt;</description></item><item><title>The new PGXN Manager "Internal Server Error" page</title><link>https://blog.pgxn.org/2010/internal-server-error/</link><pubDate>Fri, 22 Oct 2010 19:12:14 +0000</pubDate><guid>https://blog.pgxn.org/2010/internal-server-error/</guid><description>&lt;figure&gt;&lt;img src="https://blog.pgxn.org/2010/internal-server-error/owowow.png"
alt="Photo of a male torso in a blue-ish shirt with the PGXN logo pinned to its side"&gt;&lt;figcaption&gt;
&lt;p&gt;The new PGXN Manager &amp;ldquo;Internal Server Error&amp;rdquo; page.&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;</description></item><item><title>Reserved Extensions</title><link>https://blog.pgxn.org/2010/reserved-extensions/</link><pubDate>Thu, 21 Oct 2010 20:43:00 +0000</pubDate><guid>https://blog.pgxn.org/2010/reserved-extensions/</guid><description>&lt;p&gt;I&amp;rsquo;m thinking about how to add support for reserved extensions. These are
extensions that one needs to depend on, but aren&amp;rsquo;t distributed via PGXN.
Primarily, this means stuff distributed with the PostgreSQL core, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PostgreSQL itself&lt;/li&gt;
&lt;li&gt;Bundled procedural languages (plpgsql, plperl, etc.)&lt;/li&gt;
&lt;li&gt;All &lt;a href="https://www.postgresql.org/docs/current/static/contrib.html"&gt;contributed modules&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Basically, anything that an extension might want to declare as a dependency,
but that isn&amp;rsquo;t on PGXN itself.&lt;/p&gt;
&lt;p&gt;There are a number of ways to do this. Which do you think would be the best
approach?&lt;/p&gt;</description></item><item><title>Creating Distributions</title><link>https://blog.pgxn.org/2010/creating-distributions/</link><pubDate>Tue, 19 Oct 2010 22:28:00 +0000</pubDate><guid>https://blog.pgxn.org/2010/creating-distributions/</guid><description>&lt;p&gt;Following the &lt;a href="https://blog.pgxn.org/post/1352326020/first-upload"&gt;upload of &lt;code&gt;pair&lt;/code&gt;&lt;/a&gt; to PGXN, I wanted to take a few minutes to
write about how to structure a PGXN distribution.&lt;/p&gt;
&lt;h2 id="omg-distribution-wtf"&gt;OMG Distribution WTF?&lt;/h2&gt;
&lt;p&gt;First of all, what is a &amp;ldquo;distribution&amp;rdquo; in the PGXN sense? Basically, it&amp;rsquo;s a
collection of one or more PostgreSQL extensions. That&amp;rsquo;s it.&lt;/p&gt;
&lt;p&gt;So why allow more than one extension? Maybe no PGXN distribution will ever
have more than one extension. After all, the goal should be many focused,
minimalist tools that folks can combine in their apps. But sometimes it
doesn&amp;rsquo;t work out that way.&lt;/p&gt;</description></item><item><title>Fundraising and Development Update</title><link>https://blog.pgxn.org/2010/fundraising-development-update/</link><pubDate>Tue, 19 Oct 2010 18:43:57 +0000</pubDate><guid>https://blog.pgxn.org/2010/fundraising-development-update/</guid><description>&lt;p&gt;Yesterday was a busy day. In addition to making the &lt;a href="https://blog.pgxn.org/post/1352326020/first-upload"&gt;first PGXN release&lt;/a&gt;, I
updated the fundraising spreadsheet and then the thermometer displayed on the
&lt;a href="https://pgxn.org/contributors.html"&gt;main site&lt;/a&gt;. The good news is that things are coming along nicely. Thanks to
recent contributions from &lt;a href="https://www.commandprompt.com/"&gt;Command Prompt&lt;/a&gt;, &lt;a href="https://www.marchex.com/"&gt;Marchex&lt;/a&gt;, Hitoshi Harada, and
&lt;a href="https://www.25th-floor.com/"&gt;25th-floor&lt;/a&gt;, we are now just $2500 short of our goal of $25,000. Thank you
all!&lt;/p&gt;
&lt;p&gt;Can you help us get to our goal in time for &lt;a href="https://www.postgresqlconference.org/2010/west/"&gt;PgWest 2010&lt;/a&gt;, which is November
2-4 in San Francisco? I&amp;rsquo;ll be giving a talk there, &amp;ldquo;&lt;a href="https://www.postgresqlconference.org/content/building-and-distributing-postgresql-extensions-without-learning-c"&gt;Building and Distributing
PostgreSQL Extensions Without Learning C&lt;/a&gt;&amp;rdquo;, in which PGXN will of course be
featured. Would be great to announce that the fundraising was successful.&lt;/p&gt;</description></item><item><title>First Upload to PGXN</title><link>https://blog.pgxn.org/2010/first-upload/</link><pubDate>Tue, 19 Oct 2010 17:46:44 +0000</pubDate><guid>https://blog.pgxn.org/2010/first-upload/</guid><description>&lt;p&gt;Last night I deployed &lt;a href="https://github.com/theory/pgxn-manager/"&gt;PGXN::Manager&lt;/a&gt; v0.2.1 and uploaded the first
distribution, &lt;a href="https://master.pgxn.org/dist/pair/"&gt;pair&lt;/a&gt;. If you follow that link you&amp;rsquo;ll see three files:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://master.pgxn.org/dist/pair/pair-0.1.0.json"&gt;&lt;code&gt;pair-0.1.0.json&lt;/code&gt;&lt;/a&gt; is metadata file generated by PGXN manager to describe
the distribution. Most of its data is taken from the &lt;a href="https://github.com/theory/kv-pair/blob/master/META.json"&gt;&lt;code&gt;META.json&lt;/code&gt;&lt;/a&gt; included
in the uploaded zip file, but a few keys, like &amp;ldquo;sha1&amp;rdquo;, are generated, and
others, like &amp;ldquo;release_status&amp;rdquo; are added if they&amp;rsquo;re not in the included
&lt;code&gt;META.json&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://master.pgxn.org/dist/pair/pair-0.1.0.readme"&gt;pair-0.0.1.readme&lt;/a&gt; is a copy of the &lt;code&gt;README&lt;/code&gt; file distributed with pair.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://master.pgxn.org/dist/pair/pair-0.1.0.pgz"&gt;pair-0.1.0.pgz&lt;/a&gt; is the distribution zip file. That&amp;rsquo;s the file you want to
download, unzip, and build and install.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Following the spec I previously &lt;a href="https://blog.pgxn.org/post/988613682/restful-directory"&gt;wrote up&lt;/a&gt;, there are a number of other files
that get created when a new distribution is uploaded to PGXN. For the pair
extension, we got:&lt;/p&gt;</description></item><item><title>First extension library uploaded to PGXN and ⓣ</title><link>https://blog.pgxn.org/2010/first-extension-library-uploaded-to-pgxn-and-making-its/</link><pubDate>Tue, 19 Oct 2010 04:03:23 +0000</pubDate><guid>https://blog.pgxn.org/2010/first-extension-library-uploaded-to-pgxn-and-making-its/</guid><description>&lt;p&gt;First extension library uploaded to PGXN and making its way to the mirrors.
Blog post tomorrow.&lt;/p&gt;</description></item><item><title>Thank you August Zajonc for your contribution ⓣ</title><link>https://blog.pgxn.org/2010/thank-you-august-zajonc-for-your-contribution/</link><pubDate>Mon, 18 Oct 2010 18:38:40 +0000</pubDate><guid>https://blog.pgxn.org/2010/thank-you-august-zajonc-for-your-contribution/</guid><description>&lt;p&gt;Thank you August Zajonc for your contribution!&lt;/p&gt;</description></item><item><title>How Can I Detect a Proxied SSL Request?</title><link>https://blog.pgxn.org/2010/how-can-i-detect-a-proxied-ssl-request/</link><pubDate>Mon, 11 Oct 2010 15:00:29 +0000</pubDate><guid>https://blog.pgxn.org/2010/how-can-i-detect-a-proxied-ssl-request/</guid><description>&lt;p&gt;I&amp;rsquo;ve been thinking about how best to create two sections of the PGXN Manager
site, one that requires authentication and is on SSL and one that&amp;rsquo;s public. So
far, I&amp;rsquo;ve just had all the authenticated stuff go to /auth (because I&amp;rsquo;m using
basic auth), but what I want to do now is require authentication if the
connection is via SSL. However, using a reverse proxy with mod_proxy to map to
the PGXN Manger Plack app running on an internal port, I&amp;rsquo;ve found no
environment variables passed through that would allow me, in code, to
determine whether a request is via a proxied SSL or non-SSL connection. Most
irritating.&lt;/p&gt;</description></item><item><title>Mail List, SSL</title><link>https://blog.pgxn.org/2010/mail-list-ssl/</link><pubDate>Sat, 09 Oct 2010 06:01:08 +0000</pubDate><guid>https://blog.pgxn.org/2010/mail-list-ssl/</guid><description>&lt;p&gt;I&amp;rsquo;m &lt;em&gt;this&lt;/em&gt; close to having PGXN Manager ready for a limited beta. I&amp;rsquo;ve got it
running on &lt;a href="https://kineticode.com/"&gt;Kineticode&lt;/a&gt;&amp;rsquo;s server, and have been tweaking things here and
there, fixing some bugs and filling in a few missing bits. In the next couple
of days I&amp;rsquo;ll get some more kinks worked out and then start inviting folks in.
If you&amp;rsquo;re interested &amp;ndash; especially if you have an extension you&amp;rsquo;d like to
release, leave a comment here to let me know.&lt;/p&gt;</description></item><item><title>RT @theory Hrm… Free GoDaddy OSS SSL cert ( ⓣ</title><link>https://blog.pgxn.org/2010/rt-theory-hrm-free-godaddy-oss-ssl-cert-or-free/</link><pubDate>Sat, 09 Oct 2010 03:07:55 +0000</pubDate><guid>https://blog.pgxn.org/2010/rt-theory-hrm-free-godaddy-oss-ssl-cert-or-free/</guid><description>&lt;p&gt;RT @theory Hrm&amp;hellip; Free GoDaddy OSS SSL cert (&lt;a href="https://bit.ly/9Ek7ea"&gt;https://bit.ly/9Ek7ea&lt;/a&gt;) or Free
StartSSL cert (&lt;a href="https://www.startssl.com/?app=32"&gt;https://www.startssl.com/?app=32&lt;/a&gt;)? #ssl #pgxn&lt;/p&gt;</description></item><item><title>PGXN Manager now has 4035 assertions ⓣ</title><link>https://blog.pgxn.org/2010/pgxn-manager-now-has-4035-assertions-tests/</link><pubDate>Thu, 07 Oct 2010 05:19:12 +0000</pubDate><guid>https://blog.pgxn.org/2010/pgxn-manager-now-has-4035-assertions-tests/</guid><description>&lt;p&gt;PGXN Manager now has 4035 assertions. Tests:
&lt;a href="https://github.com/theory/pgxn-manager/tree/master/t/"&gt;https://github.com/theory/pgxn-manager/tree/master/t/&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Thanks to Michael Nacos and Hitoshi Harada for ⓣ</title><link>https://blog.pgxn.org/2010/thanks-to-michael-nacos-and-hitoshi-harada-for-their-do/</link><pubDate>Wed, 06 Oct 2010 02:57:42 +0000</pubDate><guid>https://blog.pgxn.org/2010/thanks-to-michael-nacos-and-hitoshi-harada-for-their-do/</guid><description>&lt;p&gt;Thanks to Michael Nacos and Hitoshi Harada for their donations. We&amp;rsquo;re getting
closer to our goal!&lt;/p&gt;</description></item><item><title>Thank you depesz for your contribution ⓣ</title><link>https://blog.pgxn.org/2010/thank-you-depesz-for-your-contribution/</link><pubDate>Fri, 01 Oct 2010 18:33:24 +0000</pubDate><guid>https://blog.pgxn.org/2010/thank-you-depesz-for-your-contribution/</guid><description>&lt;p&gt;Thank you depesz for your contribution! &lt;a href="https://pgxn.org/contributors.html"&gt;https://pgxn.org/contributors.html&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Thank you Chris Spotts for your contribution ⓣ</title><link>https://blog.pgxn.org/2010/thank-you-chris-spotts-for-your-contribution/</link><pubDate>Fri, 01 Oct 2010 18:18:03 +0000</pubDate><guid>https://blog.pgxn.org/2010/thank-you-chris-spotts-for-your-contribution/</guid><description>&lt;p&gt;Thank you Chris Spotts for your contribution!
&lt;a href="https://pgxn.org/contributors.html"&gt;https://pgxn.org/contributors.html&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Trying to meet our fundraising goal by the end of ⓣ</title><link>https://blog.pgxn.org/2010/trying-to-meet-our-fundraising-goal-by-the-end-of-the-w/</link><pubDate>Thu, 30 Sep 2010 18:06:49 +0000</pubDate><guid>https://blog.pgxn.org/2010/trying-to-meet-our-fundraising-goal-by-the-end-of-the-w/</guid><description>&lt;p&gt;Trying to meet our fundraising goal by the end of the week, and some folks are
stepping up. Have you?&lt;/p&gt;</description></item><item><title>Just successfully uploaded a distribution archive ⓣ</title><link>https://blog.pgxn.org/2010/just-successfully-uploaded-a-distribution-archive-to-th/</link><pubDate>Wed, 29 Sep 2010 23:27:24 +0000</pubDate><guid>https://blog.pgxn.org/2010/just-successfully-uploaded-a-distribution-archive-to-th/</guid><description>&lt;p&gt;Just successfully uploaded a distribution archive to the test server!
#AlmostThere&lt;/p&gt;</description></item><item><title>Conflict and Redirection on POST</title><link>https://blog.pgxn.org/2010/conflict-redirection-on-post/</link><pubDate>Wed, 29 Sep 2010 21:10:00 +0000</pubDate><guid>https://blog.pgxn.org/2010/conflict-redirection-on-post/</guid><description>&lt;p&gt;Had an interesting discussion on &lt;a href="#ZgotmplZ"&gt;#plack&lt;/a&gt;. The upload form, which takes a POST
request for an upload, sends a redirect on a successful form submission. This
is known as the &lt;a href="https://en.wikipedia.org/wiki/Post/Redirect/Get"&gt;Post/Redirect/Get (RDG)&lt;/a&gt; pattern, though I didn&amp;rsquo;t know that
before &lt;a href="https://duckduckgo.com/?q=redirect&amp;#43;from&amp;#43;post"&gt;DuckDuckGoing it&lt;/a&gt; it today. But I realized that the code was &lt;em&gt;not&lt;/em&gt;
redirecting on a failed form submission, but reloading the form. I was
thinking that one should always redirect on POST, and so was looking into a
Rails-like &lt;code&gt;flash&lt;/code&gt; pattern to cache an error message and the form contents on
the redirect. But in this discussion, I learned a few things:&lt;/p&gt;</description></item><item><title>Account Requests and Moderation</title><link>https://blog.pgxn.org/2010/account-moderation/</link><pubDate>Tue, 28 Sep 2010 18:47:37 +0000</pubDate><guid>https://blog.pgxn.org/2010/account-moderation/</guid><description>&lt;p&gt;Last week I created the &lt;a href="https://github.com/theory/pgxn-manager" title="PGXN Manager repository on GitHub"&gt;PGXN Manager&lt;/a&gt; interface for requesting a PGXN user
account. It looks like this:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.pgxn.org/2010/account-moderation/request-account.png" alt="Request PGXN Account"&gt;&lt;/p&gt;
&lt;p&gt;I really like the placeholder support in HTML 5, here nicely rendered by
Safari. I&amp;rsquo;ve also used the jQuery &lt;a href="https://docs.jquery.com/Plugins/Validation"&gt;Validation plugin&lt;/a&gt; to validate the form
fields. So if you try to submit an incomplete form, it will complain before
submitting, like so:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.pgxn.org/2010/account-moderation/incomplete-form.png" alt="Incomplete PGXN Request Form"&gt;&lt;/p&gt;
&lt;p&gt;The back end does similar validation if you have JavaScript disabled, so it
should degrade nicely. I think I might add a Twitter field so &lt;a href="https://twitter.com/pgxn"&gt;@pgxn&lt;/a&gt; can
credit users for their uploads, but otherwise this is done.&lt;/p&gt;</description></item><item><title>Quick Status Update</title><link>https://blog.pgxn.org/2010/quick-status-update/</link><pubDate>Tue, 28 Sep 2010 17:29:48 +0000</pubDate><guid>https://blog.pgxn.org/2010/quick-status-update/</guid><description>&lt;p&gt;Sometimes I wish I weren&amp;rsquo;t such a perfectionist.&lt;/p&gt;
&lt;p&gt;But not often.&lt;/p&gt;
&lt;p&gt;A quick update:&lt;/p&gt;
&lt;p&gt;So far, I&amp;rsquo;ve spent 43 hours on the &lt;a href="https://github.com/theory/pgxn-manager" title="PGXN Manager repository on GitHub"&gt;PGXN Manager&lt;/a&gt; database. I had estimated 24
hours. Ha ha ha ha ha!&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve spent 45 hours on the implementation of the app itself. I had estimated
40 hours.&lt;/p&gt;
&lt;p&gt;How will I make up the difference? I&amp;rsquo;m not sure, really. I&amp;rsquo;ve already
under-recorded my hours quite a lot, basically donating my time to create
&lt;a href="https://search.cpan.org/perldoc?SemVer"&gt;SemVer&lt;/a&gt; and to create the basic HTML layout for the site (I suck at design,
but found &lt;a href="https://andreasviklund.com/templates/andreas07/"&gt;a good template&lt;/a&gt; to base it on). That will likely continue. This is
an OSS project, and while I&amp;rsquo;m getting paid to work on it thanks to our
&lt;a href="https://pgxn.org/contributors.html"&gt;generous contributors&lt;/a&gt;, I&amp;rsquo;m also contributing quite a lot of time to it.&lt;/p&gt;</description></item><item><title>Hacking furiously, hope to have something to show ⓣ</title><link>https://blog.pgxn.org/2010/hacking-furiously-hope-to-have-something-to-show-off-b/</link><pubDate>Wed, 22 Sep 2010 16:37:14 +0000</pubDate><guid>https://blog.pgxn.org/2010/hacking-furiously-hope-to-have-something-to-show-off-b/</guid><description>&lt;p&gt;Hacking furiously, hope to have something to show off by tomorrow.&lt;/p&gt;</description></item><item><title>Architecture, New Extension JSON Format</title><link>https://blog.pgxn.org/2010/arch-and-extension-json/</link><pubDate>Fri, 17 Sep 2010 17:33:00 +0000</pubDate><guid>https://blog.pgxn.org/2010/arch-and-extension-json/</guid><description>&lt;p&gt;I&amp;rsquo;m making good progress on &lt;a href="https://github.com/theory/pgxn-manager"&gt;PGXN Manager&lt;/a&gt;. Hopefully I can start alpha
testing it next week. As I mentioned &lt;a href="https://blog.pgxn.org/post/1082188310/db-status-update"&gt;previously&lt;/a&gt;, I had estimated 40 hours of
work to create it, but was hoping to get it done in around 30 (because I spent
10 extra hours on the database design). So far I&amp;rsquo;m at 23 hours, so it&amp;rsquo;s
looking pretty good.&lt;/p&gt;
&lt;p&gt;Architecturally, I&amp;rsquo;ve gone for a very minimal &lt;a href="https://plackperl.org/"&gt;Plack&lt;/a&gt;-based app. No
&lt;a href="https://www.catalystframework.org/"&gt;Catalyst&lt;/a&gt;, &lt;a href="https://jifty.org/"&gt;Jifty&lt;/a&gt;, or even &lt;a href="https://perldancer.org/"&gt;Dancer&lt;/a&gt;. Just a very simple &lt;a href="https://github.com/theory/pgxn-manager/blob/master/lib/PGXN/Manager/Router.pm"&gt;Plack app&lt;/a&gt; that
uses &lt;a href="https://search.cpan.org/perldoc?Router::Simple::Sinatraish"&gt;Router::Simple::Sinatraish&lt;/a&gt; to route URIs to the appropriate
&lt;a href="https://github.com/theory/pgxn-manager/blob/master/lib/PGXN/Manager/Controller.pm"&gt;controller&lt;/a&gt; actions (which are just class methods). The controller just
dispatches to &lt;a href="https://search.cpan.org/perldoc?Template::Declare"&gt;Template::Declare&lt;/a&gt;-based &lt;a href="https://github.com/theory/pgxn-manager/blob/master/lib/PGXN/Manager/Templates.pm"&gt;templates&lt;/a&gt; for the HTML rendering. I
guess I&amp;rsquo;ve kind of created my own framework here, but really, there ain&amp;rsquo;t much
to it. This app is simple enough that I couldn&amp;rsquo;t see the use of adding all the
overhead of a framework.&lt;/p&gt;</description></item><item><title>Implementation of the upload server is humming ⓣ</title><link>https://blog.pgxn.org/2010/implementation-of-the-upload-server-is-humming-along/</link><pubDate>Fri, 17 Sep 2010 04:43:06 +0000</pubDate><guid>https://blog.pgxn.org/2010/implementation-of-the-upload-server-is-humming-along/</guid><description>&lt;p&gt;Implementation of the upload server is humming along.
&lt;a href="https://github.com/theory/pgxn-manager/"&gt;https://github.com/theory/pgxn-manager/&lt;/a&gt;&lt;/p&gt;</description></item><item><title>On Legacy File Systems</title><link>https://blog.pgxn.org/2010/legacy-file-systems/</link><pubDate>Wed, 08 Sep 2010 23:41:00 +0000</pubDate><guid>https://blog.pgxn.org/2010/legacy-file-systems/</guid><description>&lt;p&gt;When we last looked at the &lt;a href="https://blog.pgxn.org/post/988613682/restful-directory"&gt;organization of the mirror&lt;/a&gt;, I was pretty happy
with the design except for one thing: The use of the letter hashing variables
in the URI templates. It&amp;rsquo;s just ugly and, damnit, is it really necessary
anymore? I mean, sure, I had to &lt;a href="https://github.com/bricoleurs/bricolage/commit/37c3ac85006503bde4240f642a315ff4c3fb425b"&gt;work around this issue in Bricolage&lt;/a&gt; back in
2005, but on modern file systems like zfs and ext3, does it really matter
anymore?&lt;/p&gt;
&lt;p&gt;I was chatting about this with &lt;a href="https://schwern.dreamhosters.com/"&gt;Schwern&lt;/a&gt; just now, and he thought it just
didn&amp;rsquo;t matter anymore. So I asked my fellow &lt;a href="https://pgexperts.com/"&gt;PGX&lt;/a&gt; associate &lt;a href="https://www.facebook.com/frosty996"&gt;Jeff Frost&lt;/a&gt; about
this, and he said, &amp;ldquo;Used to be anytime you went above 1000 entries in one
directory, things would start to slow down. Certainly reiserfs, xfs, jfs, and
zfs don&amp;rsquo;t suffer that issue.&amp;rdquo; But what about ext3?&lt;/p&gt;</description></item><item><title>Status Update: DB API, Extension Versions RFC</title><link>https://blog.pgxn.org/2010/db-status-update/</link><pubDate>Tue, 07 Sep 2010 18:46:38 +0000</pubDate><guid>https://blog.pgxn.org/2010/db-status-update/</guid><description>&lt;p&gt;I spent most of the time I had to work on PGXN the last two weeks creating the
database for &lt;a href="https://github.com/theory/pgxn-manager/"&gt;PGXN Manager&lt;/a&gt;. I had estimated 24 hours of work to design the
database. So far I&amp;rsquo;ve logged 34 hours. But I think that will come out in the
wash, really, because I did a lot of work to generate JSON from database
functions. This is code I had originally expected to do in the app layer. I&amp;rsquo;m
starting work on that this week, with an estimated 40 hours. Hope I can do it
in 30. :-)&lt;/p&gt;</description></item><item><title>Turns out you don't need ALIAS after all ⓣ</title><link>https://blog.pgxn.org/2010/turns-out-you-dont-need-alias-after-all-updated-post/</link><pubDate>Tue, 07 Sep 2010 16:52:23 +0000</pubDate><guid>https://blog.pgxn.org/2010/turns-out-you-dont-need-alias-after-all-updated-post/</guid><description>&lt;p&gt;Turns out you don&amp;rsquo;t need ALIAS after all. Updated post:
&lt;a href="https://blog.pgxn.org/post/1053165383/alias-in-vogue#update-20100907"&gt;https://blog.pgxn.org/post/1053165383/alias-in-vogue#update-20100907&lt;/a&gt;
#plpgsql&lt;/p&gt;</description></item><item><title>Thank you @darkixion for your latest donation ⓣ</title><link>https://blog.pgxn.org/2010/thank-you-darkixion-for-your-latest-donation-sponsor/</link><pubDate>Thu, 02 Sep 2010 18:20:12 +0000</pubDate><guid>https://blog.pgxn.org/2010/thank-you-darkixion-for-your-latest-donation-sponsor/</guid><description>&lt;p&gt;Thank you @darkixion for your latest donation!
&lt;a href="https://pgxn.org/contributors.html"&gt;https://pgxn.org/contributors.html&lt;/a&gt; #sponsors&lt;/p&gt;</description></item><item><title>ALIAS Back in Vogue</title><link>https://blog.pgxn.org/2010/alias-in-vogue/</link><pubDate>Thu, 02 Sep 2010 13:00:00 +0000</pubDate><guid>https://blog.pgxn.org/2010/alias-in-vogue/</guid><description>&lt;p&gt;I&amp;rsquo;ve been hard at work on &lt;a href="https://github.com/theory/pgxn-manager"&gt;PGXN Manager&lt;/a&gt;, the app for users to upload
distributions to PGXN. I am of course following my own dictum: &amp;ldquo;the database
&lt;em&gt;is&lt;/em&gt; the model.&amp;rdquo; As a result, I&amp;rsquo;ve been creating an API for creating,
updating, and deleting entities, as well as generating JSON (more on that
later).&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m also using PostgreSQL 9. The motivation to make the jump to 9.0 was to to
try to use the &lt;a href="https://commitfest.postgresql.org/action/patch_view?id=351"&gt;JSON data type patch&lt;/a&gt;, but I abandoned it when I couldn&amp;rsquo;t get
it to compile. (I might come back to it later, but right now I&amp;rsquo;m trying to
practice &lt;a href="https://en.wikipedia.org/wiki/YAGNI"&gt;YAGNI&lt;/a&gt; and &lt;a href="https://www.urbandictionary.com/define.php?term=JFDI"&gt;JFDI&lt;/a&gt; so that I don&amp;rsquo;t end up owning a yak farm). But
there are other reasons to stick with 9.0, like improved &lt;a href="https://developer.postgresql.org/pgdocs/postgres/hstore.html"&gt;hstore&lt;/a&gt; support, the
&lt;a href="https://developer.postgresql.org/pgdocs/postgres/sql-do.html"&gt;DO&lt;/a&gt; statement, and &lt;a href="https://developer.postgresql.org/pgdocs/postgres/sql-syntax-calling-funcs.html#SQL-SYNTAX-CALLING-FUNCS-NAMED"&gt;named parameters&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Generating JSON in SQL is fun ⓣ</title><link>https://blog.pgxn.org/2010/generating-json-in-sql-is-fun-json-pgxn/</link><pubDate>Wed, 01 Sep 2010 06:56:11 +0000</pubDate><guid>https://blog.pgxn.org/2010/generating-json-in-sql-is-fun-json-pgxn/</guid><description>&lt;p&gt;Generating JSON in SQL is fun! &lt;a href="https://bit.ly/dolkKb"&gt;https://bit.ly/dolkKb&lt;/a&gt; #json #pgxn&lt;/p&gt;</description></item><item><title>Changed "owner" to maintainer in the meta spec ⓣ</title><link>https://blog.pgxn.org/2010/changed-owner-to-maintainer-in-the-meta-spec/</link><pubDate>Tue, 24 Aug 2010 21:26:09 +0000</pubDate><guid>https://blog.pgxn.org/2010/changed-owner-to-maintainer-in-the-meta-spec/</guid><description>&lt;p&gt;Changed &amp;ldquo;owner&amp;rdquo; to maintainer in the meta spec
&lt;a href="https://github.com/theory/pgxn/wiki/PGXN-Meta-Spec"&gt;https://github.com/theory/pgxn/wiki/PGXN-Meta-Spec&lt;/a&gt;&lt;/p&gt;</description></item><item><title>PGXN Manager now has users and admins ⓣ</title><link>https://blog.pgxn.org/2010/pgxn-manager-now-has-users-and-admins-progress/</link><pubDate>Mon, 23 Aug 2010 23:28:33 +0000</pubDate><guid>https://blog.pgxn.org/2010/pgxn-manager-now-has-users-and-admins-progress/</guid><description>&lt;p&gt;PGXN Manager now has users and admins.
&lt;a href="https://github.com/theory/pgxn-manager/commit/0be7dd7d819e8bb622bfbe7415f1647aeede8dfa"&gt;https://github.com/theory/pgxn-manager/commit/0be7dd7d819e8bb622bfbe7415f1647aeede8dfa&lt;/a&gt;
#progress&lt;/p&gt;</description></item><item><title>A RESTful Directory</title><link>https://blog.pgxn.org/2010/restful-directory/</link><pubDate>Sat, 21 Aug 2010 18:52:00 +0000</pubDate><guid>https://blog.pgxn.org/2010/restful-directory/</guid><description>&lt;p&gt;Following my post outlining a possible network &lt;a href="https://blog.pgxn.org/post/954535657/thoughts-on-the-network-directory-structure"&gt;directory structure&lt;/a&gt;,
&lt;a href="https://plasmasturm.org/"&gt;Aristotle Pagaltzis&lt;/a&gt; saw fit to bug me via email about a different approach.
I couldn&amp;rsquo;t understand WTF he was talking about until today. Then it lit my
brain on fire. As a result, I now think that there is a much better way to
organize the metadata files for the PGXN &amp;ndash; one that happens not to include
any symbolic links (which is something that &lt;a href="https://search.cpan.org/~andk/"&gt;Andreas König&lt;/a&gt; has been flagging,
via email, as a possible bottleneck).&lt;/p&gt;</description></item><item><title>Thank you Jeff Davis for your contriubution ⓣ</title><link>https://blog.pgxn.org/2010/thank-you-jeff-davis-for-your-contriubution/</link><pubDate>Fri, 20 Aug 2010 21:30:58 +0000</pubDate><guid>https://blog.pgxn.org/2010/thank-you-jeff-davis-for-your-contriubution/</guid><description>&lt;p&gt;Thank you Jeff Davis for your contriubution!
&lt;a href="https://pgxn.org/contributors.html"&gt;https://pgxn.org/contributors.html&lt;/a&gt;&lt;/p&gt;</description></item><item><title>RFC: The PGXN Metadata Specification</title><link>https://blog.pgxn.org/2010/meta-spec-rfc/</link><pubDate>Tue, 17 Aug 2010 13:00:00 +0000</pubDate><guid>https://blog.pgxn.org/2010/meta-spec-rfc/</guid><description>&lt;p&gt;I&amp;rsquo;ve posted a draft of the &amp;ldquo;PGXN distribution metadata specification,&amp;rdquo; or
&lt;a href="https://github.com/theory/pgxn/wiki/PGXN-Meta-Spec"&gt;PGXN Meta Spec&lt;/a&gt;.&amp;quot; This document specifies the structure and format of the
&lt;code&gt;META.json&lt;/code&gt; file that PGXN will require in every distribution. In fact, this
is the &lt;em&gt;only&lt;/em&gt; required file in a distribution. Its job is to describe the
distribution, its extensions, and its dependencies, among other things. This
file is key to the whole thing.&lt;/p&gt;
&lt;p&gt;To create it, I&amp;rsquo;ve ported the &lt;a href="https://search.cpan.org/perldoc?CPAN::Meta::Sepc"&gt;CPAN Meta Spec&lt;/a&gt;, version 2, but with all
deprecated fields removed, and some of the more complex stuff taken out. I
also made a couple of the &amp;ldquo;required&amp;rdquo; fields &amp;ldquo;optional.&amp;rdquo; At its simplest, the
file might look something like this:&lt;/p&gt;</description></item><item><title>First draft of the PGXN Meta Spec ⓣ</title><link>https://blog.pgxn.org/2010/first-draft-of-the-pgxn-meta-spec/</link><pubDate>Mon, 16 Aug 2010 23:54:27 +0000</pubDate><guid>https://blog.pgxn.org/2010/first-draft-of-the-pgxn-meta-spec/</guid><description>&lt;p&gt;First draft of the PGXN Meta Spec.
&lt;a href="https://github.com/theory/pgxn/wiki/PGXN-Meta-Spec"&gt;https://github.com/theory/pgxn/wiki/PGXN-Meta-Spec&lt;/a&gt;&lt;/p&gt;</description></item><item><title>About the Logo</title><link>https://blog.pgxn.org/2010/about-the-logo/</link><pubDate>Mon, 16 Aug 2010 13:00:00 +0000</pubDate><guid>https://blog.pgxn.org/2010/about-the-logo/</guid><description>&lt;p&gt;I decided to get on creating the PGXN logo sooner rather that later, both to
create a stronger identity for the project and to have a uniform look across
the various services (the &lt;a href="https://pgxn.org/"&gt;site&lt;/a&gt;, &lt;a href="https://blog.pgxn.org/"&gt;blog&lt;/a&gt;, &lt;a href="https://twitter.com/pgxn/"&gt;twitter stream&lt;/a&gt;, &lt;a href="https://ident.ca/pgxn/"&gt;identi.ca&lt;/a&gt;,
etc.). So I began hunting around for useful iconography to inspire a design
direction.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.iconfinder.com/icondetails/40094/128/data_database_seta_icon"&gt;&lt;img src="https://cdn.iconfinder.net/data/icons/database/PNG/128/Database_1.png" alt="Database Icon"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Let me tell, you, that&amp;rsquo;s a lot easier than it sounds. After browsing through
images returned for queries such as &amp;ldquo;pixin,&amp;rdquo; &amp;ldquo;pig skin,&amp;rdquo; &amp;ldquo;zen,&amp;rdquo; &amp;ldquo;zen stones,&amp;rdquo;
&amp;ldquo;pixies,&amp;rdquo; and god knows what else, I finally focused on &amp;ldquo;database icon.&amp;rdquo; This
was much more useful, as I hit on images such as the one to the right. Pretty
standard database icon, right? Three disks stacked up. I&amp;rsquo;m not sure why this
is the classic graphical abstraction for a database, but I&amp;rsquo;ve seen it a
zillion times. So often that it&amp;rsquo;s a cliché.&lt;/p&gt;</description></item><item><title>Thoughts on the Network Directory Structure</title><link>https://blog.pgxn.org/2010/thoughts-on-the-network-directory-structure/</link><pubDate>Sat, 14 Aug 2010 23:59:12 +0000</pubDate><guid>https://blog.pgxn.org/2010/thoughts-on-the-network-directory-structure/</guid><description>&lt;p&gt;I&amp;rsquo;ve been thinking about the arrangement of stuff to be distributed to the
mirrors. In doing so, I&amp;rsquo;ve kept three goals in mind:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Allow things to scale.&lt;/li&gt;
&lt;li&gt;Try to put things in intuitive locations.&lt;/li&gt;
&lt;li&gt;Allow for metadata to be stored to act as a Web API.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The first two are a bit mutually-contradicting. Thinking scalability mainly
means minimizing the chances that too many files can be put into a single
directory. &lt;a href="https://www.cpan.org/misc/ZCAN.html" title="Zen of Comprehensive Archive Networks (look for “Naming”)"&gt;CPAN&lt;/a&gt; started out with all author directories in a single
directory. Given the sheer number of CPAN contributors, this quickly got to be
a bottleneck. To correct for that, they started &amp;ldquo;hashing&amp;rdquo; the first two
letters of author names to create subdirectories. My CPAN directory, for
example, is &lt;a href="https://www.cpan.org/authors/id/D/DW/DWHEELER/"&gt;&lt;code&gt;D/DW/DWHEELER&lt;/code&gt;&lt;/a&gt;. That doesn&amp;rsquo;t quite make for an intuitive
location, but it&amp;rsquo;s not bad, and the tradeoff seems sufficient to keep things
sane.&lt;/p&gt;</description></item><item><title>Started documenting admin stuff in the wiki ⓣ</title><link>https://blog.pgxn.org/2010/started-documenting-admin-stuff-in-the-wiki/</link><pubDate>Sat, 14 Aug 2010 22:19:39 +0000</pubDate><guid>https://blog.pgxn.org/2010/started-documenting-admin-stuff-in-the-wiki/</guid><description>&lt;p&gt;Started documenting admin stuff in the wiki.
&lt;a href="https://github.com/theory/pgxn/wiki"&gt;https://github.com/theory/pgxn/wiki&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Start Your Mirrors!</title><link>https://blog.pgxn.org/2010/start-your-mirrors/</link><pubDate>Fri, 13 Aug 2010 23:45:00 +0000</pubDate><guid>https://blog.pgxn.org/2010/start-your-mirrors/</guid><description>&lt;p&gt;Work has finally started. We now have &lt;a href="https://pgxn.org/mirroring.html"&gt;mirroring&lt;/a&gt;. This was the first task for
the project, and it&amp;rsquo;s now checked off on the &lt;a href="https://pgxn.org/status.html"&gt;status&lt;/a&gt; page. Hurrah!&lt;/p&gt;
&lt;p&gt;This turned out to be a pretty simple task, of course. For now I&amp;rsquo;m using the
&lt;a href="https://www.kineticode.com/"&gt;Kineticode&lt;/a&gt; (my other employer) server to host both the &lt;a href="https://www.pgxn.org/"&gt;PGXN site&lt;/a&gt; and the
master mirror. This is temporary, just a way to get things up and going as
quickly as possible. The master mirror runs &lt;code&gt;rsyncd&lt;/code&gt; with read-only access to
the &lt;code&gt;pgxn&lt;/code&gt; path. So all you have to do to mirror it is set up a &lt;code&gt;cron&lt;/code&gt; job
like:&lt;/p&gt;</description></item><item><title>New Blog feed sans Tweets ⓣ</title><link>https://blog.pgxn.org/2010/new-blog-feed-sans-tweets/</link><pubDate>Fri, 13 Aug 2010 22:12:00 +0000</pubDate><guid>https://blog.pgxn.org/2010/new-blog-feed-sans-tweets/</guid><description>&lt;p&gt;New Blog feed sans Tweets:
&lt;a href="https://feedrinse.com/services/rinse/?rinsedurl=1be2d432150dc8f60f15ce3e4d521b64"&gt;https://feedrinse.com/services/rinse/?rinsedurl=1be2d432150dc8f60f15ce3e4d521b64&lt;/a&gt;&lt;/p&gt;</description></item><item><title>We have mirroring ⓣ</title><link>https://blog.pgxn.org/2010/we-have-mirroring/</link><pubDate>Fri, 13 Aug 2010 19:31:25 +0000</pubDate><guid>https://blog.pgxn.org/2010/we-have-mirroring/</guid><description>&lt;p&gt;We have mirroring! &lt;a href="https://pgxn.org/mirroring.html"&gt;https://pgxn.org/mirroring.html&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Thank you Greg Smith for your contribution ⓣ</title><link>https://blog.pgxn.org/2010/thank-you-greg-smith-for-your-contribution/</link><pubDate>Fri, 13 Aug 2010 16:58:47 +0000</pubDate><guid>https://blog.pgxn.org/2010/thank-you-greg-smith-for-your-contribution/</guid><description>&lt;p&gt;Thank you Greg Smith for your contribution!
&lt;a href="https://pgxn.org/contributors.html"&gt;https://pgxn.org/contributors.html&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Thank you www.urbandb.com for your contribution ⓣ</title><link>https://blog.pgxn.org/2010/thank-you-wwwurbandbcom-for-your-contribution/</link><pubDate>Thu, 12 Aug 2010 21:05:55 +0000</pubDate><guid>https://blog.pgxn.org/2010/thank-you-wwwurbandbcom-for-your-contribution/</guid><description>&lt;p&gt;Thank you &lt;a href="https://www.urbandb.com"&gt;www.urbandb.com&lt;/a&gt; for your contribution!
&lt;a href="https://pgxn.org/contributors.html"&gt;https://pgxn.org/contributors.html&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Follow us on identi.ca ⓣ</title><link>https://blog.pgxn.org/2010/follow-us-on-identica/</link><pubDate>Thu, 12 Aug 2010 17:50:44 +0000</pubDate><guid>https://blog.pgxn.org/2010/follow-us-on-identica/</guid><description>&lt;p&gt;Follow us on identi.ca: &lt;a href="https://identi.ca/pgxn/"&gt;https://identi.ca/pgxn/&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Thank you @xdg for your contribution ⓣ</title><link>https://blog.pgxn.org/2010/thank-you-xdg-for-your-contribution/</link><pubDate>Thu, 12 Aug 2010 17:30:00 +0000</pubDate><guid>https://blog.pgxn.org/2010/thank-you-xdg-for-your-contribution/</guid><description>&lt;p&gt;Thank you @xdg for your contribution! &lt;a href="https://pgxn.org/contributors.html"&gt;https://pgxn.org/contributors.html&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Fundraising Update</title><link>https://blog.pgxn.org/2010/fundraising-update/</link><pubDate>Wed, 04 Aug 2010 19:50:24 +0000</pubDate><guid>https://blog.pgxn.org/2010/fundraising-update/</guid><description>&lt;p&gt;This project started when I wrote up the &lt;a href="https://wiki.postgresql.org/wiki/PGXN"&gt;specification&lt;/a&gt; and got general
approval from &lt;a href="https://www.mail-archive.com/pgsql-hackers@postgresql.org/msg143645.html" title="RFC: PostgreSQL Add-On Network"&gt;pgsql-hackers&lt;/a&gt;. Then, at &lt;a href="https://www.pgcon.org/2010/"&gt;PGCon&lt;/a&gt;, it made the list of
&lt;a href="https://wiki.postgresql.org/wiki/PgCon_2010_Developer_Meeting#Development_Priorities_for_9.1"&gt;development priorities for PostgreSQL 9.1&lt;/a&gt; (when I was then calling it
&amp;ldquo;PGAN&amp;rdquo;). It was when &lt;a href="https://www.myyearbook.com/"&gt;MyYearbook.com&lt;/a&gt;&amp;rsquo;s Gavin Roy pledged a founding
contribution of $5,000 (also at PGCon) that I was able to put in the time to
create the fundraising site and start soliciting donations. I&amp;rsquo;m really
grateful to Gavin for stepping up like that, putting his money on the line on
the assumption that I would be as good as my word and get the work done.&lt;/p&gt;</description></item><item><title>Blog and Twitter</title><link>https://blog.pgxn.org/2010/blog-and-twitter/</link><pubDate>Wed, 04 Aug 2010 03:01:00 +0000</pubDate><guid>https://blog.pgxn.org/2010/blog-and-twitter/</guid><description>&lt;p&gt;I&amp;rsquo;m pleased to announce two things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://blog.pgxn.org/"&gt;This blog&lt;/a&gt;. Here I&amp;rsquo;ll make regular posts as I develop &lt;a href="https://pgxn.org/"&gt;PGXN&lt;/a&gt;, and to keep
it up to date with regular operational updates and release announcements
(for extensions on PGXN, not just PGXN itself) once the site goes live.
Subscribe to &lt;a href="https://blog.pgxn.org/rss"&gt;the feed&lt;/a&gt; to stay up-to-date in your favorite reader.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The &lt;a href="https://twitter.com/pgxn/"&gt;PGXN Twitter stream&lt;/a&gt;. Follow along as our fundraising draws to an
exciting conclusion and development begins. Once the site is launched, new
extension releases will be tweeted, as well.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>