Settings

Theme

Creating a simple blog system with a 500-line bash script (2011)

mmb.pcb.ub.es

74 points by deadwait 13 years ago · 30 comments

Reader

carlesfe 13 years ago

Author here. Feel free to drop any comments, this was a "weekend project" as I couldn't find anything as simple as that.

By the way, I recently uploaded the code to github: https://github.com/carlesfe/bashblog and some people are using it to publish their blogs via dropbox and site44, cool!

  • oliverhunt 13 years ago

    I know this probably isn't meant for me since I don't seem to know what I'm doing. But how do you run this? An answer in a bit more detail than your github link would be useful. I have it on my server in a public folder and now I don't know what to do.

    • carlesfe 13 years ago

      Open a shell on your public server, run ./bb.sh post, and that's it. You can now access your blog from your public URL.

  • Cigano 13 years ago

    Is the motivation something like "we can't install some kind of PHP and a database for you"?

    • carlesfe 13 years ago

      Not actually, the motivation is "my server is quite slow so I don't want to run dynamic content on it" :)

  • danso 13 years ago

    1. Thanks!

    2. I referenced this in a sub-comment: what are the options of parsing Markdown using a bash-only blogging utility?

    • carlesfe 13 years ago

      It is theoretically easy, one would only have to add a parse_markdown() function which converts MD to HTML, there are many parsers out there.

      For me, after many years of making web pages, HTML is easier than Markdown.

eksith 13 years ago

I'm SO going to use this! If only because of the ridiculous simplicity of it all. Maybe I won't replace my main blog, but I can see this in use for something simple I've had in mind for a while.

And why did we stop using plain HTML files for simple blogs (that are self-hosted)? Do I really need a "CMS" and/or framework to spew some formatted content if I'm not even gonna have comments? I've seen blogs that use some custom Ruby app or PHP and they're just a combination of an archive index and posts.

  • danso 13 years ago

    Just wondering, but have you heard of Jekyll or Octopress? Both are static HTML generators (Jekyll is done in ruby, octopress is a layer on top of it)

    https://github.com/mojombo/jekyll http://octopress.org/

    • eksith 13 years ago

      Yes, I have, but... Jekyll is done in ruby, octopress is a layer on top of it

      This kinda defeats the "simple" bit doesn't it? ;)

      I have nothing against these and if that floats your boat, then by all means, use it. But just the idea of not having to install anything (in fact, nothing) extra and just having this all work with a single file is very appealing to me.

      • danso 13 years ago

        Ah yes, it's true...but for a Ruby developer, something that involves Ruby is just about as good as something that involves bash :)

        I guess I was thinking of "simple" in terms of the static HTML and deploy. I don't think you actually have to run any Ruby commands, you just run a command line task and it reads the textfiles from the specified directory.

        Unless I missed it in the OP's description, one huge advantage that Jekyll has over the OP's bash solution is the ability to write in Markdown, made possible by the inclusion of Markdown parsing Ruby libraries. So the complexity added in the framework part, IMO, is more than made up in the simplicity of actual content-production.

        • eksith 13 years ago

            for i in ./*.md; do perl Markdown.pl --html4tags $i > pub/${i%.*}.txt; done;
          
          And viola! We have markdown formatted to html.

          Now if you consider "maintenance" or "separation of concerns" or any of the other things anyone using a framework takes for granted, this is inadequate, but that's not what I see this as. I could, of course, use grep and sed to do maintenance if I felt as much.

          I think maybe both you and cmelbye in his reply are not considering is that this is just a step above manually editing and creating HTML files. The appeal isn't just simplicity, but a bit of nostalgia as well.

          I guess it's a bit hard to explain, but the idea here is not having more layers than absolutely necessary between my thoughts and having it accessible to the web. I hope that made sense.

      • cmelbye 13 years ago

        That's a nice idea, but it gets complicated when you want to create a uniform layout across all of pages, etc. Jekyll automates that so that you don't have to copy and paste header and footer blocks and things like that.

FraaJad 13 years ago

The grand-daddy of bash based static site generators: http://nanoblogger.sourceforge.net

Example use: http://www.cs.uni.edu/~wallingf/blog/ (9 years)

Incidentally, the creator of nb announced that he is postponing the development of nb indefinitely last month.

OP: Do you think you might want to take up that development?

  • carlesfe 13 years ago

    I checked nb before writing bashblog, but it's not as simple as it seems. I actually spent some hours trying to modify it to suit it to my needs, without any luck

sigil 13 years ago

By the way, cperciva's blog is also generated by a shell script called "blogsh." Pretty similar to OP's here, except the templating is external rather than built into the script.

I got a copy by request back in 2008 -- good stuff.

http://www.daemonology.net/blog/2005-09-12-blogsh.html

p4bl0 13 years ago

See also my little project fugitive [1] a blog engine running on top of git using hooks written in Bash (not much more than 500 lines either), well technically it's even written in bare sh.

[1] http://gitorious.org/fugitive

  • rson 13 years ago

    I really wanted to do this exact thing before I started using Jekyll, kudos to you for accomplishing it.

    I think the only thing that I might have done differently would have been to allow myself to use Perl since it is a dependency of git anyway.

    • p4bl0 13 years ago

      And you would have been sooooooooo right. Since I wanted to use sh only and not even Bash, I don't even have some useful Bash features such as arrays, so I use temporary files for many many things. Plus invoking a git process for each meta information, plus an awefull lot of sed processes for the templating system… I have a few users with a growing number of blogposts who are complaining about the speed when regenerating their archives page and RSS feed. But now I don't feel like rewriting it in Perl. Plus I had a lot of fun coding in sh.

      If you or anyone feels like writing a fugitive clone in Perl, I can assure you a few users as soon as its working!

tquai 13 years ago

I did this once, too. It's so nice to hear other people appreciate the approach!

The "CMS" I wrote was about 75 lines of sh, and had slightly fewer features than the one linked here. That's the beauty of writing your own: you decide what to include, and no more. cp wc sort awk etc. is all you need. If you want it to look beautiful, that's where design and CSS come into play, both of which are outside the scope of content management.

pixelbeat 13 years ago

It's cool to see static web sites becoming popular. As for comments (dynamic) you could integrate with discuss, or as I do wrote my own simple comments app for google app engine.

Details here: http://www.pixelbeat.org/docs/web/feed.html

mgi 13 years ago

I like this. I used to have an emacs org-mode set up to edit/publish blog post (sadly just to discover that I haven't much to say in a blog). My set up allowed me to publish "data" content (mostly images) that can be linked into a post. How do you handle this with bashblog?

  • carlesfe 13 years ago

    It doesn't handle it. You just upload the image to a public folder in your server, then link it from your html content. All pages are edited with vim and treated as plain HTML, there is no post processing --except for adding dates, headers, etc

danso 13 years ago

I know not everyone is a fan of Disqus, but it's as easy to implement (OK, the scripting side, anyway) as Google Analytics. Probably wouldn't be more than a couple of lines to have that option and then put Disqus comments at the bottom of the template.

  • przemoc 13 years ago

    Problem with using Disqus (and similar solutions) is that comments are at Disqus, so you have no real control over them. Yet not many people care about it.

    Ask HN: Open source commenting systems for static pages - alternatives to Juvia?

    https://news.ycombinator.com/item?id=4125787

    • asb 13 years ago

      Can you not import them locally via the Disqus API, so that if at some point in the future you are not happy with Disqus, you can move to an alternative solution?

bensw 13 years ago

Markdown Support?

Keyboard Shortcuts

j
Next item
k
Previous item
o / Enter
Open selected item
?
Show this help
Esc
Close modal / clear selection