Archive page for May 2016

Starting with v0.89r, maintains a monthly archive page in addition to the home page and story pages.

Here's the archive page for May for this blog.

Part of the change that makes this possible is that the server now returns all the messages of the current month to the editor when it starts up. Without the posts resident on the editing machine there would be no way to build the archive page.

There was a server update too, v0.94s.

How to test

Click on the body of a post to edit it.

Click the Update button.

The current monthly archive page will be rebuilt. 


It only works for the current month. If you rebuild a post in a previous month it will not build the archive page for that month. 

I'm playing around with a new feature in the server. 

If it works, when you click on this: -- you should see what used to be at a much longer urlAnd when you click on the longer url, that might already be linked to from a variety of places, you are whooshed off to the short version. 

I found a neat way to implement it, just wondering if I thought of all the problems that could come up. 

There's a new much nicer template editor that uses the open source Ace editor. It's the same editor that GitHub uses. It's got some great features. It's not an outliner, and for some people that's a good thing. 

Here's a screen shot

If you're using to do your blogging, you already have the new template editor. When you choose it from the PlugIns menu, you'll get the new editor. 

If you're running your own server, the URL of the new editor is this. Replace it in config.json following the instructions on this page

Today there's a big new feature in both the server and the editor, support for plugins.

And there's a new plugin that's part of the release, the template editor.

If you're running your own server, you will have to configure it to run plugins. That's explained in a new doc on the 1999-project site. 

Plugins are already installed on This doc explains how to get access to plugins in the editor, once they are already installed on the server. 

Enable plugins

  1. Choose Settings in the System menu. 
  2. Click on the Misc panel. 
  3. There's a new checkbox that allows you to show the PlugIns menu. Check it and click OK to save the new setting.

You should now see the PlugIns menu with one item in it, Template Editor.

Important caveat

Unless you have access to the server, once you edit the template with the text editor, you will not be able to edit it in the outliner. 

It is not reversible. 

You can certainly look at the editor, and make changes, but once you click Update, that's it.

How to edit the template

Choose Template Editor from the PlugIns menu.

The editor opens. Edit it. When you want to save, click the Update button.

The changes in the template won't be reflected in page renderings until you rebuild them. To test it, edit one of your posts and click Update. View the rendered page. You should see the change at this point.

Versions: Server -- 0.94q, Editor 0.89j.

One of the features Frank McPherson asked for in his feedback post was a glossary. He uses the feature in Fargo, my Dropbox-based outliner, but it actually goes back way before that. It was a feature of the earliest web CMSes I did in the mid-late 90s. (Again, why the product is called 1999.)

I already had the glossary in 1999 almost completely done, so I put in a couple of hours over the weekend to finishing and testing the feature and now in v0.89g, it's released.

The basic idea

Think of the glossary as a two-column table with strings in each column. 

When we "run" text through the glossary, we look for occurrences of strings in the left column and replace them with strings in the right column.

It's like the glossary in the back of a book, but for writing. 

It's useful for links that might change, as an example. So I could create a glossary element that's triggered by "Wikipedia" and when it appears in text, it's replaced with Wikipedia. That way in the unlikely event that the site moves, I can just change the definition in the glossary and rebuild. 

It's also good for saving work! wink

How it works in 1999

There's a new setting in the Misc panel that lets you enter the URL of an OPML file that contains your glossary. Here's a screen shot of the panel, as I have it set up on my blog.

This is a link to the OPML file it points to.

When 1999 launches, it reads the file, and uses it to compile the glossary table. Then whenever it you save a post it passes the text through the glossary, doing the substitutions it calls for. 

The OPML file is organized so that the top-level items are the terms (the left column) and the text subordinate to the items are the definitions (the right column). 

When you edit the OPML file, you have to reload to get the changes to show up in 1999. It isn't watching the file for changes. 

You also have to reload the app when you first enter the URL in the Settings dialog.

You can use Fargo to edit your OPML files. It's possible at some point we will have a glossary editor inside, as we have one for templates and menus. 

Glossary substitution is case-insensitive. 

This short video shows how to add an audio podcast to a blog post.

  1. Upload the media file and copy the URL to the clipboard.
  2. Choose Set enclosure from the popup menu on the post.
  3. Paste the URL of the media file and click OK.
  4. When you publish the item, the feed will contain an enclosure element for the podcast with the length and type attributes properly set.

On the 1999-server mail list I asked for feedback on the product. 

There were several very useful responses in the form of blog posts. Here are links to the posts and my responses follow.

Scott Hanson says it's simple. 

Jack Baty is a former Frontier and Fargo user. 

Frank McPherson has specific feature requests, all of which are good ideas, and some are even being planned at this time. 


I had the same concern as Jack re archives and what happens when you get over 1000 messages (an arbitrary number). He says that no one has hit that yet, but I did. On Scripting News, and I figured out what to do about it.

I wrote a script that breaks the JSON file up into months.

You don't need all the messages to be in the chatLog.json file for it to work. It works fine with just the last month's files in it.

What I don't have now is a way to display a single month's file, but that won't be hard to do. It's basically just a repurposing of the code that generates the home page.

I tested this just before inviting you guys to run servers. It's the last thing I wanted to be sure I knew how to do before inflicting this on anyone else. wink


About themes, I very much want to do that. But first people have to start playing with templates.

I don't want to lock anything down re themes until there are one or two designers working on 1999 as a design platform.

Bryan Bell led this effort in Manila and Radio. It would be ideal if I had someone to work with like that. It's a whole other dimension, and I am not that kind of designer, but I always am on the lookout for blog templates that work on other systems.

Right now all 1999 sites I've seen look like mine. We should try to make that not true.

This should be one of the areas that 1999 shines in, because it's both very flexible, and to design templates requires no knowledge of how the technology under it works. So we should be able to accomplish quite a lot here.

So someone should dig into this and start reporting either success or problems with template work. Let's shake that part of the product out.

I also have a doc on that.

Anyone with experience working with Manila or Radio will immediately understand that doc, imho. 


You all really nailed what the product is about and about the design of it.

I found I had ideas that didn't fit in Twitter and didn't belong on my blog. Too long for Twitter, too short for a blog post.

I was aware of this frustration almost from the beginning with Twitter. I used to have a good way to do this before all that, I used an outliner to write Scripting News, and it quite elegantly handled long and short form posts in one document.

My goal with "1999" was to move all the extra stuff out of the way, and achieve the simplicity of Twitter and Facebook, yet have all the options of a good blogging system.

It's such a natural place for me to write that I also write my long-form stuff there.

But for really serious docs, I use the OPML Editor. I need all the power of the outliner, for big writing jobs. Like all the docs on the 1999-project site. All OPML.

Now you can launch a server from an Amazon AMI. 

It's even easier than the basic Ubuntu setup, because I've done most of the installation for you. It just needs a few bits and you're ready to go.

Note: These are not poet-level instructions, they're for people with a little experience setting up an AMI and DNS. 

Here's the how to...

The AMI is ami-abcd2fc6. It's public. 

It can be a micro instance. And it should qualify for the free tier, meaning if you're new to AWS you can run it for free for a year.

These ports should be open -- 22, 80, 81, 1999, 2000.

You should assign a domain to the IP address allocated for the server. That will be the value for myDomain in config.json.

Once the instance is running, edit config.json, as explained in the howto, change myDomain, twitterConsumerKey and twitterConsumerSecret as explained in the setup howto. (You don't have to create it, it's already there.)

Map port 80 to port 1999. Here's the magic incantation that does that: 

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 1999 

I went through these steps with the AMI, and it worked. 

Now when you choose the Insert HTML command in the popup menu on each item, the text is inserted at the cursor location instead of at the beginning of the text. 

If there's a selection the HTML replaces the selected text.

I had to figure out how and when to save and restore the selection, because pulling down the menu temporarily loses the focus on the editing object.