Add rough estimation of reading time for each article
This commit is contained in:
parent
c45999ecfa
commit
91f2fdd014
2 changed files with 95 additions and 13 deletions
|
@ -7,4 +7,76 @@ It's that time again... I've started a new project to build and maintain my site
|
||||||
and of course it has to come with a new blog post. I'm trying to have it
|
and of course it has to come with a new blog post. I'm trying to have it
|
||||||
generate an index based on the files in this directory.
|
generate an index based on the files in this directory.
|
||||||
|
|
||||||
I don't want it to include anything beyond the first paragraph, though.
|
I don't want it to include anything beyond the first paragraph, though. Now I
|
||||||
|
need to write some content so that it doesn't stay at a 1 minute read. If the
|
||||||
|
average reading speed is 225 words per minute (it's probably not, but that's
|
||||||
|
just what I've set my value to right now), I need at least 450 words to go above
|
||||||
|
the 2 minutes. This means I have to write more nonsense into this post.
|
||||||
|
|
||||||
|
It was fun getting the dynamic block up and working, although I still need to
|
||||||
|
get rid of the =#+BEGIN: blog-posts= from the export. It's really hard to write
|
||||||
|
enough words for this.
|
||||||
|
|
||||||
|
I'm just going to add some Riker ipsum...
|
||||||
|
|
||||||
|
I I am your worst nightmare! Damage report! Talk about going nowhere fast.
|
||||||
|
Commander William Riker of the Starship Enterprise. Your shields were failing,
|
||||||
|
sir. You bet I'm agitated! I may be surrounded by insanity, but I am not insane.
|
||||||
|
Now, how the hell do we defeat an enemy that knows us better than we know
|
||||||
|
ourselves? Sorry, Data. When has justice ever been as simple as a rule book?
|
||||||
|
Some days you get the bear, and some days the bear gets you. Maybe if we felt
|
||||||
|
any human loss as keenly as we feel one of those close to us, human history
|
||||||
|
would be far less bloody. You're going to be an interesting companion, Mr. Data.
|
||||||
|
Fate. It protects fools, little children, and ships named "Enterprise." Well,
|
||||||
|
that's certainly good to know. The look in your eyes, I recognize it. You used
|
||||||
|
to have it for me. How long can two people talk about nothing? Your head is not
|
||||||
|
an artifact! I recommend you don't fire until you're within 40,000 kilometers. A
|
||||||
|
surprise party? Mr. Worf, I hate surprise parties. I would *never* do that to you.
|
||||||
|
Sure. You'd be surprised how far a hug goes with Geordi, or Worf. We have a
|
||||||
|
saboteur aboard. Worf, It's better than music. It's jazz. I think you've let
|
||||||
|
your personal feelings cloud your judgement. The Federation's gone; the Borg is
|
||||||
|
everywhere! The game's not big enough unless it scares you a little. What? We're
|
||||||
|
not at all alike! They were just sucked into space. I will obey your orders. I
|
||||||
|
will serve this ship as First Officer. And in an attack against the Enterprise,
|
||||||
|
I will die with this crew. But I will not break my oath of loyalty to Starfleet.
|
||||||
|
My oath is between Captain Kargan and myself. Your only concern is with how you
|
||||||
|
obey my orders. Or do you prefer the rank of prisoner to that of lieutenant?
|
||||||
|
Computer, belay that order. I can't. As much as I care about you, my first duty
|
||||||
|
is to the ship. Maybe if we felt any human loss as keenly as we feel one of
|
||||||
|
those close to us, human history would be far less bloody. Shields up! Rrrrred
|
||||||
|
alert! Mr. Crusher, ready a collision course with the Borg ship. Yes,
|
||||||
|
absolutely, I do indeed concur, wholeheartedly! What's a knock-out like you
|
||||||
|
doing in a computer-generated gin joint like this? Ensign Babyface! Well, I'll
|
||||||
|
say this for him - he's sure of himself. Why don't we just give everybody a
|
||||||
|
promotion and call it a night - 'Commander'? I suggest you drop it, Mr. Data.
|
||||||
|
Travel time to the nearest starbase? This is not about revenge. This is about
|
||||||
|
justice. About four years. I got tired of hearing how young I looked. and attack
|
||||||
|
the Romulans. I'm afraid I still don't understand, sir. Then maybe you should
|
||||||
|
consider this: if anything happens to them, Starfleet is going to want a full
|
||||||
|
investigation. A lot of things can change in twelve years, Admiral. Computer,
|
||||||
|
lights up! We know you're dealing in stolen ore. But I wanna talk about the
|
||||||
|
assassination attempt on Lieutenant Worf. Some days you get the bear, and some
|
||||||
|
days the bear gets you. I'd like to think that I haven't changed those things,
|
||||||
|
sir. Is it my imagination, or have tempers become a little frayed on the ship
|
||||||
|
lately? Besides, you look good in a dress. When has justice ever been as simple
|
||||||
|
as a rule book? Wouldn't that bring about chaos? But the probability of making a
|
||||||
|
six is no greater than that of rolling a seven. Did you come here for something
|
||||||
|
in particular or just general Riker-bashing? Captain, why are we out here
|
||||||
|
chasing comets? In all trust, there is the possibility for betrayal. Wait a
|
||||||
|
minute - you've been declared dead. You can't give orders around here. Not if I
|
||||||
|
weaken first. I've had twelve years to think about it. And if I had it to do
|
||||||
|
over again, I would have grabbed the phaser and pointed it at you instead of
|
||||||
|
them. We could cause a diplomatic crisis. Take the ship into the Neutral Zone
|
||||||
|
Fear is the true enemy, the only enemy. Now we know what they mean by 'advanced'
|
||||||
|
tactical training. And blowing into maximum warp speed, you appeared for an
|
||||||
|
instant to be in two places at once. Fate protects fools, little children and
|
||||||
|
ships named Enterprise. The Enterprise computer system is controlled by three
|
||||||
|
primary main processor cores, cross-linked with a redundant melacortz ramistat,
|
||||||
|
fourteen kiloquad interface modules. For an android with no feelings, he sure
|
||||||
|
managed to evoke them in others. Could someone survive inside a transporter
|
||||||
|
buffer for 75 years? Our neural pathways have become accustomed to your sensory
|
||||||
|
input patterns. That might've been one of the shortest assignments in the
|
||||||
|
history of Starfleet. I guess it's better to be lucky than good. Mr. Worf, you
|
||||||
|
do remember how to fire phasers? The unexpected is our normal routine. Yesterday
|
||||||
|
I did not know how to eat gagh. Earl Grey tea, watercress sandwiches... and
|
||||||
|
Bularian canapés? Are you up for promotion?
|
||||||
|
|
|
@ -38,10 +38,10 @@
|
||||||
|
|
||||||
(defun project-config-parse-element (org-element)
|
(defun project-config-parse-element (org-element)
|
||||||
(pcase org-element
|
(pcase org-element
|
||||||
(`(keyword ,something) (cons (plist-get something :key)
|
(`(keyword ,something) (cons (intern (plist-get something :key))
|
||||||
(plist-get something :value)))
|
(plist-get something :value)))
|
||||||
(`(paragraph ,something) (cons
|
(`(paragraph ,something) (cons
|
||||||
"BODY"
|
'BODY
|
||||||
(buffer-substring-no-properties
|
(buffer-substring-no-properties
|
||||||
(plist-get something :contents-begin)
|
(plist-get something :contents-begin)
|
||||||
(plist-get something :contents-end))))))
|
(plist-get something :contents-end))))))
|
||||||
|
@ -50,21 +50,31 @@
|
||||||
(with-current-buffer (find-file document)
|
(with-current-buffer (find-file document)
|
||||||
(goto-char (point-min))
|
(goto-char (point-min))
|
||||||
(let (alist)
|
(let (alist)
|
||||||
(while (not (alist-get "BODY" alist nil nil #'equal))
|
(while (not (alist-get 'BODY alist nil nil #'equal))
|
||||||
(setq alist (cons (project-config-parse-element (org-element-at-point))
|
(setq alist (cons (project-config-parse-element (org-element-at-point))
|
||||||
alist))
|
alist))
|
||||||
(org-forward-element))
|
(org-forward-element))
|
||||||
alist)))
|
alist)))
|
||||||
|
|
||||||
(defun project-config-print-element (filename alist)
|
(defun project-config-print-element (alist)
|
||||||
(format "* %s\n :PROPERTIES:\n :ID: %s\n :PUBDATE: %s\n :END:\n\n %s\n[[file:%s][Read more]]\n"
|
(format "* %s\n :PROPERTIES:\n :ID: %s\n :PUBDATE: %s\n :END:\n\n %s\n[[file:%s][Read more (%d minutes)]]\n"
|
||||||
(alist-get "TITLE" alist nil nil #'equal)
|
(alist-get 'TITLE alist)
|
||||||
(alist-get "ID" alist nil nil #'equal)
|
(alist-get 'ID alist)
|
||||||
(alist-get "PUBDATE" alist nil nil #'equal)
|
(alist-get 'PUBDATE alist)
|
||||||
(alist-get "BODY" alist nil nil #'equal)
|
(alist-get 'BODY alist)
|
||||||
filename))
|
(alist-get 'NAME alist)
|
||||||
|
(alist-get 'LENGTH alist)))
|
||||||
|
|
||||||
|
(defun project-config-reading-time (file)
|
||||||
|
(with-current-buffer (find-file file)
|
||||||
|
(max 1 (/ (count-words (point-min) (point-max)) 225))))
|
||||||
|
|
||||||
|
(defun project-config-print-file (file)
|
||||||
|
(project-config-print-element
|
||||||
|
(append `((NAME . ,(concat "posts/" file))
|
||||||
|
(LENGTH . ,(project-config-reading-time (concat "posts/" file))))
|
||||||
|
(project-config-parse-document (concat "posts/" file)))))
|
||||||
|
|
||||||
(defun org-dblock-write:blog-posts (params)
|
(defun org-dblock-write:blog-posts (params)
|
||||||
(let ((files (cl-remove-if (lambda (item) (string-prefix-p "." item)) (directory-files "posts"))))
|
(let ((files (cl-remove-if (lambda (item) (string-prefix-p "." item)) (directory-files "posts"))))
|
||||||
(insert (format "%s" (apply #'concat (mapcar (lambda (file) (project-config-print-element (concat "posts/" file) (project-config-parse-document (concat "posts/" file))))
|
(insert (format "%s" (apply #'concat (mapcar #'project-config-print-file files))))))
|
||||||
files))))))
|
|
||||||
|
|
Loading…
Reference in a new issue