--- /dev/null
+# Makefile for www.vanrenterghem.biz
+
+.PHONY: all publish rebuild
+
+all: publish rsync
+
+publish: maak-website.el
+ @echo "Publishing... only changed files."
+ emacs --batch --load maak-website.el --funcall org-publish-all
+
+rebuild: maak-website.el
+ @echo "Publishing... total rebuild."
+ emacs --batch --load maak-website.el --eval='(org-publish "website" t)'
+
+rsync:
+ @echo "rsync published site to niihau."
+ rsync --human-readable --archive --verbose target/ --rsh="ssh" frederik@niihau.vanrenterghem.biz:/srv/www2.vanrenterghem.biz/
<link href="/assets/styles/bootstrap-5.3.0/css/bootstrap.min.css" rel="stylesheet">
<link href="/assets/styles/org-htmlize.css" rel="stylesheet">
<link rel="webmention" href="https://www.vanrenterghem.biz/webmention">
+ <link rel="SHORTCUT ICON" href="/assets/favicon.ico" />
<meta charset="utf-8" />
<title>{{title}}</title>
<body>
{{>navbar}}
- <main class="container content inlinepage">
-
- {{{contents}}}
- </main>
+ <div class="container-fluid">
+ <div class="row justify-content-center">
+ <div class="col-auto d-none d-md-block pt-2 ps-2">
+ <aside id="sidebar" class="card">
+ <section class="card-body">
+ <p>Tags</p>
+ <!--# include file="/tag-index-body.html" -->
+ </section>
+ </aside>
+ </div> <!-- end of column 1 -->
+ <div class="col-xs-11 col-sm-11 col-md-8 col-lg-9 col-xl-9 col-xxl-9 pt-2 ps-2 pe-2">
+ <main id="content" class="content inlinepage">
+ {{{contents}}}
+ </main>
+ </div> <!-- end of column 2 -->
+ </div> <!-- end of row -->
+ </div> <!-- end of container -->
{{>footer}}
</body>
</head>
<body>
{{>navbar}}
- <nav aria-label="breadcrumb">
- <ol class="breadcrumb">
- <li class="breadcrumb-item"><a href="/">Home</a></li>
- <li class="breadcrumb-item"><a href="/posts/sitemap.html">Blog</a></li>
- <li class="breadcrumb-item active" aria-current="page">{{title}}</li>
- </ol>
- </nav>
- <article class="container content inlinepage card h-entry">
- <div class="info d-flex flex-row align-items-baseline bg-light">
- <ul class="tags d-flex align-items-baseline list-unstyled px=2"><p class="px-2">Tags:</p>
+ <nav aria-label="breadcrumb">
+ <ol class="breadcrumb">
+ <li class="breadcrumb-item"><a href="/">Home</a></li>
+ <li class="breadcrumb-item"><a href="/posts/sitemap.html">Blog</a></li>
+ <li class="breadcrumb-item active" aria-current="page">{{title}}</li>
+ </ol>
+ </nav>
+ <article class="container content inlinepage card h-entry">
+ <section id="content" role="main" class="e-content card-body">
+ <!-- <h1>{{title}}</h1> -->
+ {{{contents}}}
+ </section>
+ <div class="info row bg-light">
+ <div class="col">
+ <ul class="tags d-flex align-items-baseline list-unstyled mb-0">
+ <p>Tags:</p>
{{#tags}}
- <li class="px-1"><a href='/posts/tag-{{tag}}.html'>{{tag}}</a></li>
+ <li class="px-1 g-0"><a href='/posts/tag-{{tag}}.html'>{{tag}}</a></li>
{{/tags}}
</ul>
</div>
- <div class="info d-flex flex-row align-items-baseline p-0 bg-light">
- <p class="px-2">Posted on {{{date}}}</p>
+ <div class="w-100">
</div>
- <section id="content" role="main" class="e-content">
- <h1>{{title}}</h1>
- {{{contents}}}
- </section>
- </article>
+ <div class="col">
+ <p>Posted on {{{date}}}</p>
+ </div>
+ </div>
+ </article>
{{>footer}}
</body>
</html>
(require 'cl-lib)
(require 'org)
(require 'ox-publish)
+(add-to-list 'load-path "~/.emacs.d/elpa/ox-rss-20230408.231")
+(add-to-list 'load-path "~/.emacs.d/elpa/mustache-20230713.514")
+(add-to-list 'load-path "~/.emacs.d/elpa/s-20220902.1511")
+(add-to-list 'load-path "~/.emacs.d/elpa/dash-20230714.723")
+(add-to-list 'load-path "~/.emacs.d/elpa/f-20230823.1159")
+(add-to-list 'load-path "~/.emacs.d/elpa/htmlize-20210825.2150")
(require 'ox-rss)
(load "~/.emacs.d/lisp/mustache-html.el")
(setq org-html-htmlize-output-type 'css) ; default: 'inline-css
(setq org-time-stamp-custom-formats '("%A %e %B %Y" . "%A %e %B %Y at %H:%M"))
(setq org-display-custom-times t)
+(setq org-html-container-element "div") ;; TODO - check
(setq my-blog-base-folder "~/websites/stage.vanrenterghem.biz")
(setq my-blog-source-folder "~/websites/stage.vanrenterghem.biz/source")
(setq my-blog-target-folder "~/websites/stage.vanrenterghem.biz/target")
(defun my-blog-create-tags-files (plist)
"Create org files for each tag defined in FILETAGS in posts, storing them in my-blog-tags-folder."
- (unless (file-directory-p my-blog-tags-folder) (make-directory my-blog-tags-folder))
- (with-temp-file (file-name-concat my-blog-source-folder "tag-index.org")
+ (let* ((tagfolder (file-name-concat
+ (plist-get (cdr (assoc "landing" org-publish-project-alist)) :base-directory)))
+ (postfolder (file-name-concat
+ (plist-get (cdr (assoc "posts" org-publish-project-alist)) :base-directory)))
+ (relpostfolder (file-relative-name postfolder tagfolder)))
+ (unless (file-directory-p my-blog-tags-folder) (make-directory my-blog-tags-folder))
+ (with-temp-file (file-name-concat tagfolder "tag-index.org")
(insert (concat "#+mustache-template: " (file-name-concat my-blog-mustache-folder "tags-index.mustache") "\n"))
(insert (concat "#+TITLE: Blog - All tags\n"))
(insert "#+OPTIONS: ^:nil\n") ; do not use underscores as subscript
(insert "\n")
(dolist (tag (sort (my-org-get-all-filetags) (lambda (x y) (string-lessp (car x) (car y))) ))
- (insert (concat "- [[file:" (file-name-concat my-blog-posts-folder (concat "tag-" (car tag) ".org")) "][" (car tag) "]]\n"))))
+ (insert (concat "- [[file:" (file-name-concat relpostfolder (concat "tag-" (car tag) ".org")) "][" (car tag) "]]\n")))))
(dolist (tag (my-org-get-all-filetags))
(with-temp-file (file-name-concat my-blog-tags-folder (concat "tag-" (car tag) ".org"))
(insert (concat "#+mustache-template: " (file-name-concat my-blog-mustache-folder "tags.mustache") "\n"))
(let* ((abspath (file-name-concat "/home/frederik/websites/stage.vanrenterghem.biz/source/posts" file))
(relpath (file-relative-name abspath "/home/frederik/websites/stage.vanrenterghem.biz/source/posts/"))
(title (org-publish-find-title file project-plist))
- (date (format-time-string (cdr org-time-stamp-formats) (org-publish-find-date file project-plist)))
+ (date (format-time-string (cdr org-time-stamp-custom-formats) (org-publish-find-date file project-plist)))
(preview (my-blog-get-preview abspath))
)
;; insert a horizontal line before every post, kill the first one
;; before saving
- (insert "-----\n")
(insert (concat "* [[file:" relpath "][" title "]]\n"))
;; add properties for `ox-rss.el' here
(let ((rss-permalink (concat (file-name-sans-extension relpath) ".html"))
- (rss-pubdate date))
+ (rss-pubdate (format-time-string (cdr org-time-stamp-formats) (org-publish-find-date file project-plist))))
(org-mode)
+ (org-set-property "HTML_CONTAINER_CLASS" "card mb-2") ;Bootstrap margin border 2
+ (org-set-property "HTML_HEADLINE_CLASS" "card-header card-title border-bottom-0 fs-5 fw-bold text-decoration-none")
(org-set-property "RSS_PERMALINK" rss-permalink)
(org-set-property "PUBDATE" rss-pubdate)
(org-set-property "RSS_TITLE" title))
;; insert the date, preview, & read more link
+ (insert "#+ATTR_HTML: :class card-header\n")
(insert (concat "Published: " date "\n\n"))
+ (insert "#+BEGIN_export html\n")
+ (insert "<section class=\"card-body\">\n")
+ (insert "#+END_export\n")
(insert preview)
;(insert (concat "#+INCLUDE: \"" relpath "\" :only-contents t :lines \"1-10\"\n"))
- (insert "\n")
- (insert (concat "[[file:" relpath "][Read More...]]\n"))))
+ (insert "\n")
+ (insert (concat "[[file:" relpath "][Read More...]]\n"))
+ (insert "#+BEGIN_export html\n")
+ (insert "</section> <!-- END CARD-BODY-->\n")
+ (insert "#+END_export\n")
+ ))
;; kill the first hrule to make this look OK
- (goto-char (point-min))
- (let ((kill-whole-line t)) (kill-line))
+ ;(goto-char (point-min))
+ ;(let ((kill-whole-line t)) (kill-line))
;; insert a title and save
(insert "#+OPTIONS: title:nil\n")
(insert "#+TITLE: Frederik Vanrenterghem's blog\n")
(defun my-blog-cleanup-sitemaps (plist)
"Clean up temporary files created in the process of publishing"
+ ;; Create a body-only version of the tags index. Needs absolute path to posts folder.
+ (with-temp-file (file-name-concat
+ (plist-get (cdr (assoc "landing" org-publish-project-alist)) :publishing-directory)
+ "tag-index-body.html")
+ (insert-file-contents (file-name-concat
+ (plist-get (cdr (assoc "landing" org-publish-project-alist)) :base-directory)
+ "tag-index.org"))
+ (org-export-to-buffer 'mustache-html (current-buffer) nil nil nil t nil)
+ (replace-string "href=\"posts" "href=\"/posts"))
(delete-file (file-name-concat my-blog-source-folder "sitemap.org"))
(delete-file (file-name-concat my-blog-posts-folder "sitemap.org"))
- )
+ (delete-file (file-name-concat my-blog-posts-folder "sitemap.org~")))
(setq org-publish-project-alist
`(("landing"
}
pre {}
-pre {background-color:lightgoldenrodyellow;color:#1f058E;}
+pre {background-color:#000000;color:#FFFFFF;}
pre span.org-builtin {color:#006FE0;font-weight:bold;}
pre span.org-string {color:#008000;}
pre span.org-doc {color:#008000;}
* G'day mate!
-Welcome on my little corner of the world wide web!
+Welcome to my little corner of the world wide web!
I'm Frederik Vanrenterghem, living in Western Australia with my family since 2014. The fact I even maintain a website anymore probably gives away my age - yes, I was born before the 80's!
#+OPTIONS: toc:nil \r
#+date: <2019-09-16 22:03:03>\r
\r
-* What \r
After having read the first part of a Rcpp tutorial which compared native R vs C++ implementations of a Fibonacci sequence generator, I resorted to drawing the so-called Golden Spiral using R.\r
\r
-* Details\r
Libraries used in this example are the following\r
\r
#+BEGIN_SRC R :session R\r
#+RESULTS:\r
: TRUE\r
\r
-* Result\r
With everything now ready in the right coordinate system, it's now only a matter of setting some options to make the output look acceptable.\r
#+BEGIN_SRC R :session R :results output file graphics :file ../assets/golden_spiral-ggplot-coord-fixed.png :width 800 :height 800 :exports both\r
ggplot(df, aes(x=X1,y=X2)) +\r
y = "")\r
#+END_SRC\r
\r
-* Note on how this post was written.\r
-After a long hiatus, I set about using emacs, org-mode and ESS together to create this post. All code is part of an .org file, and gets exported to markdown using the orgmode conversion - C-c C-e m m.\r
+Note on how this post was written: After a long hiatus, I set about using emacs, org-mode and ESS together to create this post. All code is part of an .org file, and gets exported to markdown using the orgmode conversion - C-c C-e m m.\r
#+filetags: :R:analysis:
#+title: Explore Australian road fatalities.
-** Road fatalities in Australia
-:PROPERTIES:
-:CUSTOM_ID: road-fatalities-in-australia
-:END:
Recently inspired to doing a little analysis again, I landed on a
dataset from
[[https://bitre.gov.au/statistics/safety/fatal_road_crash_database.aspx]],
** Trends
:PROPERTIES:
:CUSTOM_ID: trends
+:HTML_CONTAINER_CLASS: card-body
:END:
I started by looking at the trends - what is the approximate number of
road fatalities a year, and how is it evolving over time? Are there any
** What age group is most at risk in city traffic?
:PROPERTIES:
:CUSTOM_ID: what-age-group-is-most-at-risk-in-city-traffic
+:HTML_CONTAINER_CLASS: card-body
:END:
Next, I wondered if there were any particular ages that were more at
risk in city traffic. I opted to quickly bin the data to produce a
** Hypothesis
:PROPERTIES:
:CUSTOM_ID: hypothesis
+:HTML_CONTAINER_CLASS: card-body
:END:
Based on the above, I wondered - are people above 65 more likely to die
in slow traffic areas? To make this a bit easier, I added two variables
** Conclusion
:PROPERTIES:
:CUSTOM_ID: conclusion
+:HTML_CONTAINER_CLASS: card-body
:END:
It's possible to conclude older people are over-represented in the
fatalities in lower speed zones. Further ideas for investigation are