<?xml version="1.0" encoding="UTF-8" standalone="yes"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-us"><id>https://blog.pgxn.org/tags/readme/</id><title>README</title><updated>2011-05-23T04:53:30Z</updated><link rel="self" type="application/atom+xml" href="https://blog.pgxn.org/tags/readme/feed.xml"/><link rel="alternate" type="text/html" href="https://blog.pgxn.org/tags/readme/"/><author><name>The PGXN Maintainers</name></author><generator uri="https://gohugo.io/" version="0.167.0">Hugo</generator><entry><id>https://blog.pgxn.org/post/5758832725</id><title type="html">PGXN Utils 0.1.1 Released!</title><link rel="alternate" type="text/html" href="https://blog.pgxn.org/2011/pgxn-utils-011-released/"/><updated>2026-10-07T16:13:48Z</updated><published>2011-05-23T04:53:30Z</published><author><name>Dickson S. Guedes</name></author><category scheme="https://blog.pgxn.org/tags" term="build" label="Build"/><category scheme="https://blog.pgxn.org/tags" term="create-extension" label="Create Extension"/><category scheme="https://blog.pgxn.org/tags" term="utils" label="Utils"/><category scheme="https://blog.pgxn.org/tags" term="bundle-extension" label="Bundle Extension"/><category scheme="https://blog.pgxn.org/tags" term="meta" label="Meta"/><category scheme="https://blog.pgxn.org/tags" term="readme" label="README"/><category scheme="https://blog.pgxn.org/tags" term="skeleton" label="Skeleton"/><summary type="html"><![CDATA[<p>Hello everyone!</p>
<p>This was a productive weekend that allowed me to work on some new features in
<a href="https://github.com/guedes/pgxn-utils">pgxn_utils</a> and I&rsquo;m proud to tell you that a new version was released!</p>
<p>Trying to simplify your extension-development life I&rsquo;ve added two tasks to
<code>pgxn_utils</code>: <code>change</code> and <code>bundle</code>. 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.</p>]]></summary><content type="html" xml:base="https://blog.pgxn.org/" xml:space="preserve"><![CDATA[<p>Hello everyone!</p>
<p>This was a productive weekend that allowed me to work on some new features in
<a href="https://github.com/guedes/pgxn-utils">pgxn_utils</a> and I&rsquo;m proud to tell you that a new version was released!</p>
<p>Trying to simplify your extension-development life I&rsquo;ve added two tasks to
<code>pgxn_utils</code>: <code>change</code> and <code>bundle</code>. 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.</p>
<p>To install it just type:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">gem install pgxn_utils
</span></span></code></pre></div><p>Or, if you don&rsquo;t want to install it yet, see it in action on this <a href="https://blip.tv/pgcasts/pgxn_utils-0-1-1-released-5194610">screencast</a>
3:05.</p>
<p><strong>Work in progress&hellip;</strong></p>
<p>I&rsquo;m working now to simplify the release, creating a task to send bundled file
to <a href="https://pgxn.org">PGXN</a>.</p>
<p>There are a lot of work to do yet so, please, <a href="https://github.com/guedes/pgxn-utils/issues">tell me</a> if you found a bug or
have suggestions.</p>
<p>Have a nice code! &ldquo;:)</p>
]]></content></entry><entry><id>https://blog.pgxn.org/post/5465631144</id><title type="html">PGXN Utils</title><link rel="alternate" type="text/html" href="https://blog.pgxn.org/2011/pgxn-utils/"/><updated>2026-10-07T16:13:48Z</updated><published>2011-05-14T01:05:00Z</published><author><name>Dickson S. Guedes</name></author><category scheme="https://blog.pgxn.org/tags" term="build" label="Build"/><category scheme="https://blog.pgxn.org/tags" term="makefile" label="Makefile"/><category scheme="https://blog.pgxn.org/tags" term="control-file" label="Control File"/><category scheme="https://blog.pgxn.org/tags" term="readme" label="README"/><category scheme="https://blog.pgxn.org/tags" term="meta" label="Meta"/><category scheme="https://blog.pgxn.org/tags" term="create-extension" label="Create Extension"/><category scheme="https://blog.pgxn.org/tags" term="skeleton" label="Skeleton"/><category scheme="https://blog.pgxn.org/tags" term="generator" label="Generator"/><summary type="html"><![CDATA[<p>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.</p>
<p>With files from the structure of PostgreSQL&rsquo;s extensions was the same thing.</p>
<p>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.</p>]]></summary><content type="html" xml:base="https://blog.pgxn.org/" xml:space="preserve"><![CDATA[<p>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.</p>
<p>With files from the structure of PostgreSQL&rsquo;s extensions was the same thing.</p>
<p>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.</p>
<p>I called it <a href="https://github.com/guedes/pgxn-utils/">pgxn-utils</a>, and you should give it a try: it is easy to install,
easy to use and will help you to start hacking quickly!</p>
<p><strong>How?</strong></p>
<ol>
<li>
<p>First install it:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">gem install pgxn_utils
</span></span></code></pre></div></li>
<li>
<p>Then start a new extension:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">pgxn_utils skeleton my_cool_extension
</span></span></code></pre></div></li>
</ol>
<p>Thats all! It will create the initial skeleton for you and you can start
coding! But, if you don&rsquo;t want to install it, <a href="https://pgcasts.com/media/pgxn_utils-usage-example.mpeg">see it in action</a></p>
<p>Good hack!</p>
]]></content></entry><entry><id>https://blog.pgxn.org/post/5458118596</id><title type="html">New HOWTO</title><link rel="alternate" type="text/html" href="https://blog.pgxn.org/2011/new-howto/"/><updated>2026-10-07T16:13:48Z</updated><published>2011-05-13T20:34:46Z</published><author><name>David E. Wheeler</name></author><category scheme="https://blog.pgxn.org/tags" term="howto" label="HOWTO"/><category scheme="https://blog.pgxn.org/tags" term="build" label="Build"/><category scheme="https://blog.pgxn.org/tags" term="makefile" label="Makefile"/><category scheme="https://blog.pgxn.org/tags" term="readme" label="README"/><category scheme="https://blog.pgxn.org/tags" term="changes" label="Changes"/><category scheme="https://blog.pgxn.org/tags" term="documentation" label="Documentation"/><category scheme="https://blog.pgxn.org/tags" term="meta.json" label="META.json"/><category scheme="https://blog.pgxn.org/tags" term="control-file" label="Control File"/><summary type="html"><![CDATA[<p>I updated the <a href="https://manager.pgxn.org/">howto</a> yesterday. This document explains how to create a PGXN
distribution. If you&rsquo;re interested in releasing PostgreSQL extensions on
<a href="https://pgxn.org/">PGXN</a>, this document is worth a read.</p>
<p>In essence, it&rsquo;s really simple: Just create a <a href="https://pgxn.org/spec/"><code>META.json</code></a> and upload. But to
get the full benefit, there are quite a few other recommendations. Already
familiar with it? Here&rsquo;s the checklist:</p>
<ul>
<li>Create a <a href="https://pgxn.org/spec/"><code>META.json</code></a></li>
<li>Create a <a href="https://www.postgresql.org/docs/9.1/static/extend-extensions.html">control file</a></li>
<li>Create a <a href="https://www.postgresql.org/docs/current/static/xfunc-c.html#XFUNC-C-PGXS"><code>Makefile</code></a></li>
<li>Implement the code in the <code>sql</code> and <code>src</code> directories</li>
<li>Write tests in the <code>test</code> directory</li>
<li>Write a <a href="https://search.cpan.org/perldoc?Text::Markup">Text::Markup</a>-recognizable <code>README</code></li>
<li>Write <a href="https://search.cpan.org/perldoc?Text::Markup">Text::Markup</a>-recognizable documentation in the <code>doc</code> directory</li>
<li>Consider including other files: <code>Changes</code>, <code>LICENSE</code>, <code>INSTALL</code>, <code>COPYING</code>,
<code>AUTHORS</code></li>
<li><a href="https://manager.pgxn.org/">Release it</a>!</li>
</ul>
<p>Be sure to read the <a href="https://manager.pgxn.org/">howto</a> for details. Got feedback or suggestions? Leave a
comment!</p>]]></summary><content type="html" xml:base="https://blog.pgxn.org/" xml:space="preserve"><![CDATA[<p>I updated the <a href="https://manager.pgxn.org/">howto</a> yesterday. This document explains how to create a PGXN
distribution. If you&rsquo;re interested in releasing PostgreSQL extensions on
<a href="https://pgxn.org/">PGXN</a>, this document is worth a read.</p>
<p>In essence, it&rsquo;s really simple: Just create a <a href="https://pgxn.org/spec/"><code>META.json</code></a> and upload. But to
get the full benefit, there are quite a few other recommendations. Already
familiar with it? Here&rsquo;s the checklist:</p>
<ul>
<li>Create a <a href="https://pgxn.org/spec/"><code>META.json</code></a></li>
<li>Create a <a href="https://www.postgresql.org/docs/9.1/static/extend-extensions.html">control file</a></li>
<li>Create a <a href="https://www.postgresql.org/docs/current/static/xfunc-c.html#XFUNC-C-PGXS"><code>Makefile</code></a></li>
<li>Implement the code in the <code>sql</code> and <code>src</code> directories</li>
<li>Write tests in the <code>test</code> directory</li>
<li>Write a <a href="https://search.cpan.org/perldoc?Text::Markup">Text::Markup</a>-recognizable <code>README</code></li>
<li>Write <a href="https://search.cpan.org/perldoc?Text::Markup">Text::Markup</a>-recognizable documentation in the <code>doc</code> directory</li>
<li>Consider including other files: <code>Changes</code>, <code>LICENSE</code>, <code>INSTALL</code>, <code>COPYING</code>,
<code>AUTHORS</code></li>
<li><a href="https://manager.pgxn.org/">Release it</a>!</li>
</ul>
<p>Be sure to read the <a href="https://manager.pgxn.org/">howto</a> for details. Got feedback or suggestions? Leave a
comment!</p>
<p>Oh, and check out <a href="https://github.com/guedes/pgxn-utils/">pgxn-utils</a> and simplify your extension-development life.</p>
]]></content></entry><entry><id>https://blog.pgxn.org/post/4018670551</id><title type="html">Thoughts on Indexing and Documentation</title><link rel="alternate" type="text/html" href="https://blog.pgxn.org/2011/indexing-docs/"/><updated>2026-10-07T16:13:48Z</updated><published>2011-03-22T05:13:00Z</published><author><name>David E. Wheeler</name></author><category scheme="https://blog.pgxn.org/tags" term="indexing" label="Indexing"/><category scheme="https://blog.pgxn.org/tags" term="full-text-search" label="Full Text Search"/><category scheme="https://blog.pgxn.org/tags" term="readme" label="README"/><category scheme="https://blog.pgxn.org/tags" term="documentation" label="Documentation"/><category scheme="https://blog.pgxn.org/tags" term="search-results" label="Search Results"/><category scheme="https://blog.pgxn.org/tags" term="search" label="Search"/><summary type="html"><![CDATA[<p>So I&rsquo;m designing the full text indexing for the PGXN search site. I&rsquo;m modeling
it on <a href="https://http//search.cpan.org">CPAN Search</a>, which has been great. There are four search options:</p>
<ul>
<li>Full documentation search. This is the most common. Includes doc title and
body.</li>
<li>User search. Search on names, nicknames, email addresses, URIs, etc.</li>
<li>Distribution search. Search on distribution name, abstract, description,
tags, and the README.</li>
<li>Extension search. Search on extension name and abstract.</li>
<li>Tag search. Search on tag name only.</li>
</ul>
<p>The documentation search is the one I&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 <a href="https://master.pgxn.org/dist/countnulls/1.0.0/README.txt">almost
nothing</a>. So a search for &ldquo;count nulls&rdquo; probably would not find &ldquo;countnulls&rdquo;
extension, because there is no documentation. What should I do about this? I&rsquo;m
thinking one of:</p>]]></summary><content type="html" xml:base="https://blog.pgxn.org/" xml:space="preserve"><![CDATA[<p>So I&rsquo;m designing the full text indexing for the PGXN search site. I&rsquo;m modeling
it on <a href="https://http//search.cpan.org">CPAN Search</a>, which has been great. There are four search options:</p>
<ul>
<li>Full documentation search. This is the most common. Includes doc title and
body.</li>
<li>User search. Search on names, nicknames, email addresses, URIs, etc.</li>
<li>Distribution search. Search on distribution name, abstract, description,
tags, and the README.</li>
<li>Extension search. Search on extension name and abstract.</li>
<li>Tag search. Search on tag name only.</li>
</ul>
<p>The documentation search is the one I&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 <a href="https://master.pgxn.org/dist/countnulls/1.0.0/README.txt">almost
nothing</a>. So a search for &ldquo;count nulls&rdquo; probably would not find &ldquo;countnulls&rdquo;
extension, because there is no documentation. What should I do about this? I&rsquo;m
thinking one of:</p>
<ul>
<li>
<p>Encourage folks to write documentation. I&rsquo;m going to do this anyway, because
the docs will really help the visibility of an extension on the site. It
looks <a href="https://theory.github.com/pgxn/pgtap.html">like this</a>. If you have no docs for an extension, your extension will
not appear in the search results (or perhaps it might, but link to the
distribution).</p>
</li>
<li>
<p>If there is no documentation for an extension in a distribution, index the
README as the documentation. I&rsquo;m not really keen on this idea, because the
README should describe the distribution, how to install it, etc. I&rsquo;m
planning to use it in the distribution-specific index. Documentation of the
extension should be more about how the extension works, what it&rsquo;s interface
is, etc. Or so it seems to me, at least (I&rsquo;m admittedly biased to this
practice among CPAN modules). But at least with this approach there would be
a link to &ldquo;documentation&rdquo; for an extension on the search site.</p>
</li>
</ul>
<p>Erm, not really thinking of any other options. I feel pretty strongly that
folks should write docs for their extensions, as much as possible, and I&rsquo;ve
set things up so that, from PGXN&rsquo;s point of view, at least, you can write
documentation in whatever format you like (assuming the format is supported by
or added to <a href="https://search.cpan.org/perldoc?Text::Markup">Text::Markup</a>), as long as they&rsquo;re in a <code>doc/</code> or <code>docs</code>
directory. I want it to be as easy as possible. But I also want there to be
decent search results ASAP.</p>
<p>Comments?</p>
]]></content></entry></feed>