From Critiques Of Libertarianism
Revision as of 07:23, 29 January 2019 by Mhuben (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search



Initially, I thought using mediawiki would be a very easy way to build my site. But it turned out that it really called upon many of my nerdy skills.

  1. Wikitext -- the mediawiki markup language; the bulk of the work is in this.
  2. HTML -- needed intermittently in conjunction with wikitext.
  3. DPL -- Dynamic Page List, an extension that allows more complicated lists than mediawiki categories.
  4. PHP -- mediawiki is implemented in and configured with PHP.
  5. MySQL -- the database I use for mediawiki.
  6. javascript -- I use it primarily for forms that generate wikitext for new articles.
  7. XML -- I use dumps from Delicious Library in XML. Typing in hundreds of books is much more tedious than scanning them.
  8. Python -- I use it primarily to generate wikitext for new articles about books from XML dumps.
  9. Various extensions: DPL, Nuke, Interwiki, ParserFunctions, StringFunctions
  10. CSS -- not yet used, but fundamental to the display of a wiki.

Implementation Tricks

Producing indexes using categories is simple, but had several ugly drawbacks:

  • Their titles all start with "Category:".
  • Categories do not let you add extra information beyond the title of a page.
  • Categories do not let you mix wiki pages with external links.

Making manual indexes means that if you want to link something twice in different indexes, you have to copy the link and description each place. Hard to maintain!

I solved these problems with several tricks.

  • Extensions ParserFunctions, MyVariables, DynamicPageList.
  • Template:DES which allows me to associate descriptions with each page.
  • Template:URL which allows me to optionally associate an external URL with a page.
  • Index templates Template:List and Template:Quotations. These let me list categories with DPL and display descriptions with each page. If a page is for an external link, that link is used rather than the internal wiki link.
  • Link templates, Template:Link, let me treat internal and external links uniformly, relying on the single URL stored on a page.
  • A number of templates that associate other data with pages, such as external links (Template:URL), text from external links (Template:Text) and citation information. External URLs exist as only one copy on one page, and are retrieved with templates.
  • A few templates create debugging categories, which are hidden with __HIDDENCAT__.
  • Page building services written in JavaScript that automatically construct wiki page code and open the page to paste it into. [Indexable Page/Quote]
  • A short hack to the mediawiki OutputPage.php code that makes the categories links at the bottom of each page go directly to a main namespace page instead of a category namespace page when the main namespace page exists.

# MRH Make category listings at bottom of page go directly to page with the
# MRH name of the category.  Can still use the Go box to get to the categories.
# MRH                           $title = Title::makeTitleSafe( NS_CATEGORY, $category );
                               $title = Title::makeTitleSafe( NS_MAIN, $category );
                               if ( ! $title->isknown() ) {
                                       $title = Title::makeTitleSafe( NS_CATEGORY, $category );
# MRH end of changes

Thus, no sending people to category pages or having category pages redirect to regular pages. You can still go to Category pages directly.

The end result is:

  • I can make and rapidly index pages with the category mechanism in a flexible and powerful way that allows me to present more information than the title.
  • I can index external pages with the same category mechanism.
  • External page code rot due to URL changes is simple to fix in one place.
  • Broken external links can be automatically looked up in the internet archive from the in-wiki page.
  • External text can be searched within the wiki because it is in the database.
  • Categories can be combined for listing by making them subcategories of each other. Category:Friedrich Hayek is a subcategory of Category:Friedrich von Hayek, so listing the latter includes the former.


Other Notes

When upgraded to version > 1.17:



Investigate using:

Things to fix:

  • generation of book pages
  • main page choices at top
  • test if an external link works before leaving site: if broken, go to in-wiki page with broken link message.
  • remove old category redirects
  • examine where I should be using