Hacker News new | comments | show | ask | jobs | submit login
Letterpress — A minimal, Markdown based blogging system written in Python (wangling.me)
89 points by an00na on Feb 22, 2013 | hide | past | web | favorite | 77 comments

It's worth remembering that 99.999% of ordinary users will never switch to a static generation blog system, no matter how carefully it is explained.

The problem really is that somebody has to pay the piper.

I'm going to create a new rule.

    Chester's First Law:
    Essential complexity in the problem domain 
    is a conserved quantity.
Either your system absorbs and obscures it; or you push it back on the user somehow. Even within a system you can push it around to different places, but it never goes away.

Consider: the problem domain for a blogging system is take stuff from an author and produce HTML for readers.

Movable Type used to "build" a whole site at a time. Wordpress does it per-view unless you use caching. Wordpress won inter alia because the cost of the complexity was pushed from the authors to the readers -- and it's authors who pick the blogging engine.

Static site generators are like Movable Type, in that they take the essential complexity that used to be on the readers and push it back to the author.

A more complex system would strike a balance by proactively generating new cached output based on POSTs, not GETs. That would push both halves of the essential complexity into the system itself, away from both authors and readers.

At all times, the sum of essential complexity has been conserved.

Never used movable type, but if somebody made a fast static website generator with a web GUI, a decent online editor and a good plugin system, along with an easy-to-setup deployment system, why wouldn't people pick it up? Apart from the fact that they already use Wordpress, but this has no bearing on the dynamic-vs-static website generator debate. There is nothing intrinsic about static website generator that makes them harder to use.

But of course, in this case you should not aim for the sexy "minimal" label (or better, write a GUI leveraging an existing system).

Well that kinda was Movable Type in a nutshell. I think it lost because people actually frequently want dynamic content (even if it's for something as simple as a contact form, or comments).

I think some guy named Kolmogorov beat you to that law.

Looks like my standard disclaimer is correct again.


Chester's Zeroth Law: He's never had an original idea, only good ideas that sometimes he doesn't know are unoriginal.

If you haven't read Neal Stephenson's Anathem, you should. (That idea is called Saunt Lora's Proposition -- all possible ideas have already been found -- in the book. Good stuff.)

"Confound those who have said our remarks before us" -- Aelius Donatus, circa 4th century AD.

Chester's First Law shouldn't be a law. Essential complexity varies at different levels of abstraction and abstractions are what causes them to change. So, it isn't a conserved quantity.

Computer tech and even programming is a great example of complexity being reduced, in some cases, as an abstraction is added.

Note that I said in the problem domain. You can absolutely reduce complexity in the solution domain through abstraction, but somebody somewhere has payed the piper to sustain that illusion.

I think the biggest barrier to ordinary users using a static site generator lies right here:

>Installation >Install pyinotify. bash pip install pyinotify

I mean, considering the ordinary user we're talking about doesn't code and on top of that, probably runs Windows, well...

If you're serious about Windows support, I'm guessing that you could use msys to make a zip (that's Windows for "tarball") with everything pre-installed. Then have people point-and-click on the launcher.

Of course, nowadays I hear devs have to pay Microsoft to have the privilege of not having Windows call their products viruses...

The author's choice is still subject to fads, to what's in vogue, to the zeitgeist.

And as of late, the static generation fervor has been getting stronger.

Blogger used to (maybe still does?) have an FTP option that would render a static version of your blog and push it to your own hosting account.

Personally, that's what I'd like to see. A cms or email based blog that generates the static files and pushes them to whatever service/host you want (Dropbox, s3, github, FTP, SFTP, etc).

> Personally, that's what I'd like to see. A cms or email based blog that generates the static files and pushes them to whatever service/host you want (Dropbox, s3, github, FTP, SFTP, etc).

This is what I've been doing, after Posterous announced its retirement: http://code.dealmeida.net/nefelibata. You generate a static website from markdown files, publish it to configurable services (S3 initially, but it's plugin based), announce it to social networks (FB and Twitter). The idea is also that it will collect comments from FB and Twitter and add them to the static pages, so that discussion can happen on the social network du jour, but content will remain forever.

Blogger disabled that option a few years back.

Some of us might even remember that before Blogspot came to, you had to have access to a server via FTP to publish.

How about some caching/proxy layer on top of Wordpress that both creates AND serves the static versions of the pages?

I mean, I think that's what some of the caching plugins do now , but in my experience they require a ton a configuration (e.g. a 100+ line .htaccess file). Plus I'm just not a fan of WP in general.

I see what you're getting at here, but how does WordPress push complexity towards the user?

>Wordpress won inter alia because the cost of the complexity was pushed from the authors to the readers

In what way does wordpress push complexity to readers?

They have to pay for the rendering of the page for every visit, instead of the author paying for rendering at creation time.

At no time did the problem that somehow the page had to be rendered go away.

Wait a second, wouldn't it be more accurate to say the complexity had been pushed into the browser, affecting the browser developers perhaps. The reader might just have to pay in terms of waiting longer to read. Or do you mean "reader" is the browser software. The thread of the discussion started with (I thought) the difficulty for the non-technical user to install and use a static site generator?

I do think the concept of "conservation of complexity" has some analytical value in the design of software systems.

I think that it'll never be a mathematically sound rule, so "Law" is a bit of poetic license. But I think it is a useful heuristic.

I've felt this way for a long time about lots of particular design/architecture debates, but this is the first time I've been able to consolidate them to a single statement.

Wordpress is successfull because it is easy to install and hosting is cheap. Furthermore the basic wordpress set has very little capabilities. (but they are 100% blogger oriented)

However wordpress is a pain to customize and extend, i always found drupal was easier to customize for non developpers ( you have to mess with php pretty fast with wordpress ). Drupal is on the contrary a little more complicated to setup , but the basic set up is more powerfull than wordpress ( and the plugin system is better ).

That's why i dont think non php scripts can be popular to non programmers. you can just drop some python or some ruby on a webserver and expect it to work just like php does,

And few shared hosting providers support mod_python or stuff like that ( which is the shame because i see no reason why mod_python is worse than mod_php and we would have a whole generation of better programmers if people used python over php).

To clear up some confusion:

> Wordpress won inter alia because ...

"inter alia" is a short hand that roughly means "amongst other things, which I won't list here because it would obscure the point I am trying to make".

"Amongst other things" is the literal translation.

"Never use a foreign phrase, a scientific word, or a jargon word if you can think of an everyday English equivalent." (George Orwell, Politics and the English Language[1])

[1] http://www.orwell.ru/library/essays/politics/english/e_polit...

I love that essay.

Can you give an equivalent word which conveys the full meaning of inter alia with the same degree of pithiness and directness?

"One reason Wordpress won is..."

"Wordpress won because..., for one."

A word is none of direct, forceful, or brief if your audience must look it up to understand.

> A word is none of direct, forceful, or brief if your audience must look it up to understand.

Good point.

"Among other things" is one equivalent. Note that inter alia is a phrase, so you should probably be asking for an equivalent phrase and not a word.

>with the same degree of pithiness and directness?

I think you overestimate the degree of both "pithiness and directness" in this particular use of the phrase.

Perhaps the Latin was counterproductive in this context.

But it's such a handy shorthand :(

yeah, but you're pushing the complexity away from the author and onto the reader who needs to decode it, and the readers don't like it ;)

If you wanted a shortcut you could have tried Chinese.

It would have taken only one or two characters as opposed to 10, and you would be using a living language with more speakers than latin (including people that only know latin quotations and a few generic phrases).

While if I was deciding what terms to choose ab initio from the universe of all possible words in all possible languages, my alibi here is that I studied law for a few years. Most of the phrases I picked up en route are mostly obiter dicta, et cetera, with only limited utility. Others are enormously useful; "inter alia" has escaped into other parts of academia.

But while ceteris paribus it might be the case that I could use Chinese characters, English has a far greater de facto affinity to, and stock of, Latin due to the historical connection commencing in the 1066 Norman Conquest and the imposition of the lingua Franca.

>While if I was deciding what terms to choose ab initio from the universe of all possible words in all possible languages, my alibi here is that I studied law for a few years.

Well, you should also work on the "syntax" thing, for I find the first phrase above ("while if...") incomplete.

That said, you studied law? That makes two of us. Only in my case, "studied" mostly means I've watched every "Boston Legal" and "Law and Order" episode.

>Most of the phrases I picked up en route are mostly obiter dicta, et cetera, with only limited utility. Others are enormously useful; "inter alia" has escaped into other parts of academia.

Has it escaped because it is enormously useful, though, or because it makes for "pretty" and "refined-sounding" phrasing? Because academia is full of such, well, to put it succinctly, bullshit. (I admit that in law it can be well known and have an additional well defined role that augments the standard latin meaning).

>But while ceteris paribus it might be the case that I could use Chinese characters, English has a far greater de facto affinity to, and stock of, Latin due to the historical connection commencing in the 1066 Norman Conquest and the imposition of the lingua Franca.

Sure, but with the Chinese conquest of the economy and commerce space, commencing circa 1995 and the slow financial, diplomatic and cultural decline of the US, one could say that the era of the previous lingua Franca is over.

Res ipsa loquitur.

Err, I mean 用事实说话.

(Come to think of it: does this succinctness mean that the Chinese can write their whole life story in Twitter with room to spare?)

Movable Type ran on every host that Wordpress supported, no?

Earlier versions were written in Perl, so no.

There are dozens of such projects now, all of them 1 or 2% different from the others, little differences that would be more suitable as plugins or extensions to a defacto static generator (Jekyll).

Instead we get a mass duplication of effort into implementing essentially the same thing, a common problem with open source projects.

What is really required is a dead-simple static generator, the equivalent to what Wordpress and Movable Type did for the old style of blogging. A simple app that ordinary computer users can plug their FTP or S3 details into and then publish.

Yes, I've been slowly reviewing several of them:


Still found I had to write my own..

Why don't you write the dead-simple static generator. Then we can observe that it is only 2% different from the others and throw it on the pile :)

I tried:


I had a bunch of friends and family members who needed simple static sites so I generated it for them (this was before Jekyll).

I could use it myself, but I could never get them to do the updates themselves from their own machines.

Once Jekyll and the rest came out, I switched my own use over and switched everybody else over to Weebly, and then didn't bother continuing work on Floyd and just let it idle (I pushed it up to GitHub).

Each time one of these projects is released I scan through them and try them out to see if there is any new idea to pick up on.

It then occurred to me that a real innovation in this space is a lot of work and trial+error.

For technical people, you have Jekyll, Hyde, etc. For non-technical people you don't really have anything at the moment. I think a project with a web interface that generates files would be interesting, or having a folder of text files (or Word, Pages etc. documents) that are then generated and uploaded by double-clicking on an icon.

I know there are a bunch of apps in the Mac AppStore in this space, but I haven't tried any of them - so it is possible that this solution already exists. I am not so in love with the idea that I would drop everything else right now to work on it.

Edit: I realize my original comment might offend OP but I didn't intend it to be that way, there are only so many ways you can say "work on expanding the potential uses rather than reimplementing etc." without it sounding dickish

(Shameless plug)

I got sick of trying out different static site generators that were all just a little bit too complicated to setup and install, so I went about building just what you describe - a simple, plug-in-your-ftp-and-click-publish static site generator[1]. I'm still working out the finer details, but I'm happy with where it's at at the moment.

[1]: https://staticmate.com

I wonder if the author knows that "Letterpress" is a rather popular iOS game.

My guess is that if there's a battle of wills that's going to occur, the game will win. It's easier to change a name on a web project than an iOS game. There's months of advertisement that've gone in to Loren's Letterpress at this point.

Does it matter?

It'll matter when the blog guy wants an iOS app and has to call it "LP MAKER PLUS" or something dumb.

Pointless trivia: In the UK, throughout the 80s and 90s there was both a (usually lemon) kitchen cleaner and a lemon juice called Jif. It didn't seem to cause any problems, although the kitchen cleaner became Cif for unrelated reasons.

Not overly so, but it does make it hard to be discovered or searched for, especially with the months of links and reviews for the iOS game boosting it in search engines.

Setting aside any legal issues, it just seems odd and probably not in the OPs best interest to have a name that is so strongly associated with an extremely popular mobile game.

Major issue in the static blog:

There no comments, and if you want comments, they're not owned by you.

I read there's some local comment servers being written (ie you cleanly separate the blog static content and the dynamic comments), but i've yet to see a "mainstream one that just works" (tm).

I'm writing my own blog engine after Posterous' announcement. The way it works is that I create a static site which is upload somewhere, and it also publishes the post on Facebook and Twitter. Discussion happens there, on the social networks, and on the next build the comments are downloaded and stored in static files. This way when Facebook dies all the discussions will remain on the static site -- for good or bad. :-P

I wrote chronicle which handles this via a CGI. Comments are dumped into text-files and they are included in the rebuild.

That means there is a lag and a rebuild needed to publish them, but it works for me & my blog:


If you are a Ruby person, you could go with Juvia: https://github.com/phusion/juvia

I never used it though, as I decided against comments (and am using other tools now).

It's easy to add Disqus. But if you think you don't own comments in Disqus, it is a problem.

I blog since 2000. I used almost all blogging platforms. Now I'm switching to Jekyll from Wordpress. Most of the blogging tools, specially those with mySQL, have an unlimited growth of features. Instead becoming limited, and scalable with plugins they start to become slower as bigger in code to do simply blogging. These tools derivate to website making tools, wich is really odd.

I love Jekyll. I'm designer and I didn't had too much trouble to switch from wordpress to something local on my machine and deploy it to my own server.

Today is the first day I will be completely off from Wordpress.

Use pandoc instead of markdown (the executable), then it gets even smaller. ;)

Seems like another similar system to Jekyll, et al. I don't think many heavily technical people understand how alienating this kind of approach is to the average user. Wordpress is popular because its understandable, installation is done in such a way that its fairly easy and its powerful enough.

Static generation blogs may seem simple to us but to most people who want to blog they seem ridiculously complicated.

Are static site generators the new "hello world?"

yeah ! , why not ? it's a cool thing to code imho.

Good point actually. It's simple and easy too.

Funnily enough, I just wrote something similar in node[1] and one of my mates has just written one in Go too. Great minds, or something :-)

[1]: https://github.com/benrhughes/crashdown

Would you mind linking to your friend's implementation in Golang? I'm learning the language and want to see how he did it.

For those interested in a not-self-hosted option, I built http://throwww.com

Growing user base, very simple, markdown-based (includes video markdown), includes RSS & Comments

<end self promotion>

How would you add comments to something like this, if you wanted to have comments for some (probably idiotic and ill thought out, based on most blog comments) reason? Would you be able to embed disqus or something?

It is easy to add Disqus. In fact, I tried using it and there are some commented-out Disqus css in default.css. I disabled it because I really don't need comment right now.

There are HTML templates in the `press` directory; you could easily add Disqus comments to post.html.

So to use dropbox for publishing, the author recommends registering two accounts on dropbox.com. Would that carry a risk of account termination? Sounds like an easy way to game the free space for invites bonus.

> Comments are also just ego feeders

I hate when I can't comment on a blog, like right now I can't remark that comments are useful. And I can't comment that RSS is useful, and that I used it a lot in Firefox (not anymore in Chrome now, Google Reader sucks).

Of course you can, here, and I see them:) If you want comments, it is easy to add Disqus. RSS is something I'll consider later.

So is "Those who do not remember blosxom are doomed to repeat it" a cliche yet?

Remind me of Alexis Sellier's awesome micro blog engine toto(https://github.com/cloudhead/toto), created 3 years ago.

This reminds me a lot of scriptogr.am

Both use dropbox, markdown. The difference is that scriptogram doesn't run from your localhost and its not a static site. Still, there are a lot of similarities

Newbie programmer here. How hard would it be to add RSS to this? It could be an interesting project to help me learn Python.

Built my own a few months back in node for publishing using git to Heroku. Markdown flavored micro blogging is hip!

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact