Navigation Menu

Skip to content

Project Origin

Karl Voit edited this page Jun 4, 2017 · 1 revision

Original Post (How This All Started)

Copied from: http://article.gmane.org/gmane.emacs.orgmode/49747/

Hi!

I got a nice idea on how a very easy to use Org-mode blog system should look like.

Currently, I am using Serendipidy with web-based editor to write HTML. Org-mode enabled me to write blog entries and export it to HTML. Then I paste the HTML and have to modify minor things (images, …) a bit. I guess the time from finishing the Org-mode entry to the final blog entry is approximately ten to twenty minutes.

Overall, I do not want to do this process when I just want to quickly write a view paragraphs within a couple of minutes. I need a workflow with much less annoying overhead.

Therefore I sat down and thought about a workflow that should be enough for writing simple weblog entries:

  • create an Org-mode heading (anywhere!)
  • make sure that there is an (uniq) :ID: property
  • add the tag :blog: to heading
  • <write content, subheadings, …>
  • change state of top-heading to DONE
    • this enables blog entries «in the queue»
  • (manually) invoke generation-script

This enables me quick blogging with a list of advantages:

  • a blog entry can be located anywhere in all of my Orgmode files
  • no extra formatting steps
  • very small (almost non-existent) overhead to create a blog entry
  • no duplicate information
    • updates only in Orgmode, not HTML or any in-between format
  • static (fast) pages
  • self-hosting without any fancy services behind like RDBS

What do you think of my ideas so far?

Of course, I looked into existing solutions and found those:

  • http://orgmode.org/worg/org-blog-wiki.html
    • cool overview page for various solutions
  • http://orgmode.org/worg/blorgit.html
    • pretty complex set up :-(
    • I do not need a web-interface to edit Org-mode files
    • seem to have «different» use cases
  • http://orgmode.org/worg/org-tutorials/org-jekyll.html
    • uses HTML as in-between format; seems to provide many error possibilities(?)
    • converting whole files only (not desired)
    • have to try it someday
  • http://emacs-fu.blogspot.com/2009/05/writing-and-blogging-with-org-mode.html
    • uses only HTML export
  • http://blog.herraiz.org/archives/241
    • uses only HTML export
  • https://github.com/chrismgray/ikiwiki-org-plugin
    • promising but only one part of a possible solution

So nothing offers the features and small footprint as my idea above :-(

With some prerequisites, it should not be that hard to even implement it by myself:

  • usage of only very basic markup
    • paragraphs (p)
    • headings (h1..n)
    • http-references (a href)
    • lists (ul)
    • images (img)
    • quote (verbatim)

Still there are some open issues:

  • comments
    • simplest form: generate unique Email link and add at bottom
      • very easy to be done for catch-all MTAs
      • automatically derive whitelist for MTA to avoid old spam
    • simple HTML form
      • POST to script, adding comment to my inbox.org (containing link to ID)
    • disqus: I do not want to outsource comment hosting :-(
  • how to include and format graphics?
    • sometimes, I e.g. want to have an image aligned right with text flowing around it
  • probably: usage of in-between format like ikiwiki
    • Orgmode syntax -> ikiwiki markup (markdown?) -> usual ikiwiki-workflow
      • should be not much effort since prerequisites limit to few markup things
    • benefits from not having to re-implement many things
    • in-between-format HTML (like Manoj uses) is way too complicated causing misc potential error sources

The basic script workflow is not that complicated:

  • find all headings with state DONE and tag :blog:
    • optionally: add all other tags starting with “blog-” as blog tags
  • one entry starts at such a heading until EOF OR same or less level heading is found
  • compare raw text and IDs with last run
    • known ID, raw text unchanged: ignore, no change
    • new ID
      • generate new blog entry
        • extract YYYY-MM-DD from LOGBOOK-drawer (first *->DONE transformation)
        • generate YYYY/MM/DD-folder structure in blog accordingly
        • generate sanitized blog title as file name
    • known ID, raw text differs
      • generate update of existing entry
        • add “(Update n)” (with n is the n-th update) to entry title
          • optionally: add this also to URL
            • disadvantage: broken old URLs
            • advantage: URL reflects update state
  • on any activity:
    • re-write feed for last n entries
    • optionally: generate overview page for last n entries
    • optionally: generate calendar archive page(s)
    • optionally: generate tag overview page(s)

Early Wishlist Without Compromises

NOTE: if entries are marked as done in this section, they are not implemented but moved to a (separate) user-story above.

  • [X] Workflow to create a blog entry
    • make sure that there is an (uniq) :ID: property
    • add tag :blog: to heading
    • write content, subheadings, …
    • change state of top-heading to DONE
    • (manually) invoke generation-script
  • usage of only very basic markup
    • [X] paragraphs (p)
    • [X] headings (h1..n)
    • [X] http-references (a href)
    • [X] lists (ul)
    • [X] quote (verbatim)
    • [ ] images (img)
    • [X] tables
    • [X] inline-HTML
    • [X] internal links to other entries
  • advantages
    • a blog entry can be located anywhere in all of my Orgmode files
    • no extra formatting steps
    • very small overhead to create a blog entry
    • no duplicate information
      • update only in Orgmode, not HTML or any in-between format
    • static (fast) pages
    • self-hosting without any fancy services behind like RDBS
  • open issues
    • [X] comments
      • simplest form: generate unique Email link and add at bottom
        • very easy to be done for catch-all MTAs
        • automatically derive whitelist for MTA to avoid old spam
      • simple HTML form
        • POST to script, adding comment to my inbox.org (containing link to ID)
      • disqus: I do not want to outsource comment hosting :-(
    • [ ] how to include and format graphics?
      • sometimes, I e.g. want to have an image aligned right with text flowing around it
    • [-] probably: usage of in-between format like ikiwiki
      • Orgmode syntax -> ikiwiki markup (markdown?) -> usual ikiwiki-workflow
        • should be not much effort since prerequisites limit to few markup things
      • benefits from not having to re-implement many things
      • in-between-format HTML (like Manoj uses) is way too complicated causing misc potential error sources
  • [ ] basic script workflow
    • find all headings with state DONE and tag :blog:
      • optionally: add all other tags starting with “blog-” as blog tags
    • one entry starts at such a heading until EOF OR same or less level heading is found
    • compare raw text and IDs with last run
      • known ID, raw text unchanged: ignore, no change
      • new ID
        • generate new blog entry
          • extract YYYY-MM-DD from LOGBOOK-drawer (first *->DONE transformation)
          • generate YYYY/MM/DD-folder structure in blog accordingly
          • generate sanitized blog title as file name
      • known ID, raw text differs
        • generate update of existing entry
          • add “(Update n)” (with n is the n-th update) to entry title
            • optionally: add this also to URL
              • disadvantage: broken old URLs
              • advantage: URL reflects update state
    • on any activity:
      • re-write feed for last n entries
      • optionally: generate overview page for last n entries
      • optionally: generate calendar archive page(s)
      • optionally: generate tag overview page(s)
    • on any error:
      • create an orgmode event from current time that appears on agenda
      • with daily repeat -> so it gets noticed on the next day(s) too
      • in the description of that entry:
        • babel-sh-snippet with prepared command to re-try the run :-)

Naming

«lazyblorg» - a mixture of lazy, blogging, blog, org-mode - emphasizes the fact that the user of it may be very lazy. This relates to the minimal effort she/he has to do in order to create a new blog entry.

There are no hits in Google search for “lazyblorg”. However, there are some for “lazyblog” (without the ‘r’).

  • Other cool names would be:
    • invisiblorg
      • invisible, blog, org-mode
      • emphasizes the invisibility of the blog mechanism once it is set up
      • no hits for ”invisiblorg” but some for “invisiblog” or “invisibl.org”