summaryrefslogtreecommitdiff
path: root/generated/fi
diff options
context:
space:
mode:
Diffstat (limited to 'generated/fi')
-rw-r--r--generated/fi/blog/index.html233
-rw-r--r--generated/fi/blog/post.html220
-rw-r--r--generated/fi/blog/sivujen-uudistus.html221
-rw-r--r--generated/fi/blog/tekstinsyotto.html312
-rw-r--r--generated/fi/blog/yksinkertaisesti-monipuolinen.txt226
-rw-r--r--generated/fi/index.html221
-rw-r--r--generated/fi/pgp.html212
7 files changed, 1645 insertions, 0 deletions
diff --git a/generated/fi/blog/index.html b/generated/fi/blog/index.html
new file mode 100644
index 0000000..a90b024
--- /dev/null
+++ b/generated/fi/blog/index.html
@@ -0,0 +1,233 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="fi" xml:lang="fi">
+<head>
+<!-- 2026-06-14 Sun 12:20 -->
+<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1" />
+<title>Blogin sisällys</title>
+<meta name="author" content="Joel Kronqvist" />
+<meta name="generator" content="Org Mode" />
+<style type="text/css">
+ #content { max-width: 60em; margin: auto; }
+ .title { text-align: center;
+ margin-bottom: .2em; }
+ .subtitle { text-align: center;
+ font-size: medium;
+ font-weight: bold;
+ margin-top:0; }
+ .todo { font-family: monospace; color: red; }
+ .done { font-family: monospace; color: green; }
+ .priority { font-family: monospace; color: orange; }
+ .tag { background-color: #eee; font-family: monospace;
+ padding: 2px; font-size: 80%; font-weight: normal; }
+ .timestamp { color: #bebebe; }
+ .timestamp-kwd { color: #5f9ea0; }
+ .org-right { margin-left: auto; margin-right: 0px; text-align: right; }
+ .org-left { margin-left: 0px; margin-right: auto; text-align: left; }
+ .org-center { margin-left: auto; margin-right: auto; text-align: center; }
+ .underline { text-decoration: underline; }
+ #postamble p, #preamble p { font-size: 90%; margin: .2em; }
+ p.verse { margin-left: 3%; }
+ pre {
+ border: 1px solid #e6e6e6;
+ border-radius: 3px;
+ background-color: #f2f2f2;
+ padding: 8pt;
+ font-family: monospace;
+ overflow: auto;
+ margin: 1.2em;
+ }
+ pre.src {
+ position: relative;
+ overflow: auto;
+ }
+ pre.src:before {
+ display: none;
+ position: absolute;
+ top: -8px;
+ right: 12px;
+ padding: 3px;
+ color: #555;
+ background-color: #f2f2f299;
+ }
+ pre.src:hover:before { display: inline; margin-top: 14px;}
+ /* Languages per Org manual */
+ pre.src-asymptote:before { content: 'Asymptote'; }
+ pre.src-awk:before { content: 'Awk'; }
+ pre.src-authinfo::before { content: 'Authinfo'; }
+ pre.src-C:before { content: 'C'; }
+ /* pre.src-C++ doesn't work in CSS */
+ pre.src-clojure:before { content: 'Clojure'; }
+ pre.src-css:before { content: 'CSS'; }
+ pre.src-D:before { content: 'D'; }
+ pre.src-ditaa:before { content: 'ditaa'; }
+ pre.src-dot:before { content: 'Graphviz'; }
+ pre.src-calc:before { content: 'Emacs Calc'; }
+ pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
+ pre.src-fortran:before { content: 'Fortran'; }
+ pre.src-gnuplot:before { content: 'gnuplot'; }
+ pre.src-haskell:before { content: 'Haskell'; }
+ pre.src-hledger:before { content: 'hledger'; }
+ pre.src-java:before { content: 'Java'; }
+ pre.src-js:before { content: 'Javascript'; }
+ pre.src-latex:before { content: 'LaTeX'; }
+ pre.src-ledger:before { content: 'Ledger'; }
+ pre.src-lisp:before { content: 'Lisp'; }
+ pre.src-lilypond:before { content: 'Lilypond'; }
+ pre.src-lua:before { content: 'Lua'; }
+ pre.src-matlab:before { content: 'MATLAB'; }
+ pre.src-mscgen:before { content: 'Mscgen'; }
+ pre.src-ocaml:before { content: 'Objective Caml'; }
+ pre.src-octave:before { content: 'Octave'; }
+ pre.src-org:before { content: 'Org mode'; }
+ pre.src-oz:before { content: 'OZ'; }
+ pre.src-plantuml:before { content: 'Plantuml'; }
+ pre.src-processing:before { content: 'Processing.js'; }
+ pre.src-python:before { content: 'Python'; }
+ pre.src-R:before { content: 'R'; }
+ pre.src-ruby:before { content: 'Ruby'; }
+ pre.src-sass:before { content: 'Sass'; }
+ pre.src-scheme:before { content: 'Scheme'; }
+ pre.src-screen:before { content: 'Gnu Screen'; }
+ pre.src-sed:before { content: 'Sed'; }
+ pre.src-sh:before { content: 'shell'; }
+ pre.src-sql:before { content: 'SQL'; }
+ pre.src-sqlite:before { content: 'SQLite'; }
+ /* additional languages in org.el's org-babel-load-languages alist */
+ pre.src-forth:before { content: 'Forth'; }
+ pre.src-io:before { content: 'IO'; }
+ pre.src-J:before { content: 'J'; }
+ pre.src-makefile:before { content: 'Makefile'; }
+ pre.src-maxima:before { content: 'Maxima'; }
+ pre.src-perl:before { content: 'Perl'; }
+ pre.src-picolisp:before { content: 'Pico Lisp'; }
+ pre.src-scala:before { content: 'Scala'; }
+ pre.src-shell:before { content: 'Shell Script'; }
+ pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
+ /* additional language identifiers per "defun org-babel-execute"
+ in ob-*.el */
+ pre.src-cpp:before { content: 'C++'; }
+ pre.src-abc:before { content: 'ABC'; }
+ pre.src-coq:before { content: 'Coq'; }
+ pre.src-groovy:before { content: 'Groovy'; }
+ /* additional language identifiers from org-babel-shell-names in
+ ob-shell.el: ob-shell is the only babel language using a lambda to put
+ the execution function name together. */
+ pre.src-bash:before { content: 'bash'; }
+ pre.src-csh:before { content: 'csh'; }
+ pre.src-ash:before { content: 'ash'; }
+ pre.src-dash:before { content: 'dash'; }
+ pre.src-ksh:before { content: 'ksh'; }
+ pre.src-mksh:before { content: 'mksh'; }
+ pre.src-posh:before { content: 'posh'; }
+ /* Additional Emacs modes also supported by the LaTeX listings package */
+ pre.src-ada:before { content: 'Ada'; }
+ pre.src-asm:before { content: 'Assembler'; }
+ pre.src-caml:before { content: 'Caml'; }
+ pre.src-delphi:before { content: 'Delphi'; }
+ pre.src-html:before { content: 'HTML'; }
+ pre.src-idl:before { content: 'IDL'; }
+ pre.src-mercury:before { content: 'Mercury'; }
+ pre.src-metapost:before { content: 'MetaPost'; }
+ pre.src-modula-2:before { content: 'Modula-2'; }
+ pre.src-pascal:before { content: 'Pascal'; }
+ pre.src-ps:before { content: 'PostScript'; }
+ pre.src-prolog:before { content: 'Prolog'; }
+ pre.src-simula:before { content: 'Simula'; }
+ pre.src-tcl:before { content: 'tcl'; }
+ pre.src-tex:before { content: 'TeX'; }
+ pre.src-plain-tex:before { content: 'Plain TeX'; }
+ pre.src-verilog:before { content: 'Verilog'; }
+ pre.src-vhdl:before { content: 'VHDL'; }
+ pre.src-xml:before { content: 'XML'; }
+ pre.src-nxml:before { content: 'XML'; }
+ /* add a generic configuration mode; LaTeX export needs an additional
+ (add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
+ pre.src-conf:before { content: 'Configuration File'; }
+
+ table { border-collapse:collapse; }
+ caption.t-above { caption-side: top; }
+ caption.t-bottom { caption-side: bottom; }
+ td, th { vertical-align:top; }
+ th.org-right { text-align: center; }
+ th.org-left { text-align: center; }
+ th.org-center { text-align: center; }
+ td.org-right { text-align: right; }
+ td.org-left { text-align: left; }
+ td.org-center { text-align: center; }
+ dt { font-weight: bold; }
+ .footpara { display: inline; }
+ .footdef { margin-bottom: 1em; }
+ .figure { padding: 1em; }
+ .figure p { text-align: center; }
+ .equation-container {
+ display: table;
+ text-align: center;
+ width: 100%;
+ }
+ .equation {
+ vertical-align: middle;
+ }
+ .equation-label {
+ display: table-cell;
+ text-align: right;
+ vertical-align: middle;
+ }
+ .inlinetask {
+ padding: 10px;
+ border: 2px solid gray;
+ margin: 10px;
+ background: #ffffcc;
+ }
+ #org-div-home-and-up
+ { text-align: right; font-size: 70%; white-space: nowrap; }
+ textarea { overflow-x: auto; }
+ .linenr { font-size: smaller }
+ .code-highlighted { background-color: #ffff00; }
+ .org-info-js_info-navigation { border-style: none; }
+ #org-info-js_console-label
+ { font-size: 10px; font-weight: bold; white-space: nowrap; }
+ .org-info-js_search-highlight
+ { background-color: #ffff00; color: #000000; font-weight: bold; }
+ .org-svg { }
+</style>
+<link rel="stylesheet"type="text/css" href="../../static/global.css">
+</head>
+<body>
+<div id="preamble" class="status">
+<header>
+<a id="skiptocontent" href="#content">Siirry pääsisältöön</a>
+<a href="/fi/">FI</a> · <a href="/en/">EN</a>
+</header>
+</div>
+<div id="content" class="content">
+<h1 class="title">Blogin sisällys</h1>
+<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
+
+
+<colgroup>
+<col class="org-left" />
+</colgroup>
+<tbody>
+<tr>
+<td class="org-left"><a href="./post.html">Test-post-title</a> (2026-06-12) Test subtitle</td>
+</tr>
+
+<tr>
+<td class="org-left"><a href="./sivujen-uudistus.html">Verkkosivujeni uudistus</a> (2026-06-14) Alaotsikkoa ei saatavilla</td>
+</tr>
+
+<tr>
+<td class="org-left"><a href="./tekstinsyotto.html">tekstinsyotto</a> (2025-07-28) Alaotsikkoa ei saatavilla</td>
+</tr>
+
+<tr>
+<td class="org-left"><a href="./yksinkertaisesti-monipuolinen.txt">yksinkertaisesti-monipuolinen</a> (2024-05-06) Alaotsikkoa ei saatavilla</td>
+</tr>
+</tbody>
+</table>
+</div>
+</body>
+</html>
diff --git a/generated/fi/blog/post.html b/generated/fi/blog/post.html
new file mode 100644
index 0000000..575af71
--- /dev/null
+++ b/generated/fi/blog/post.html
@@ -0,0 +1,220 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="fi" xml:lang="fi">
+<head>
+<!-- 2026-06-14 Sun 12:20 -->
+<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1" />
+<title>Test-post-title</title>
+<meta name="author" content="Joel Kronqvist" />
+<meta name="generator" content="Org Mode" />
+<style type="text/css">
+ #content { max-width: 60em; margin: auto; }
+ .title { text-align: center;
+ margin-bottom: .2em; }
+ .subtitle { text-align: center;
+ font-size: medium;
+ font-weight: bold;
+ margin-top:0; }
+ .todo { font-family: monospace; color: red; }
+ .done { font-family: monospace; color: green; }
+ .priority { font-family: monospace; color: orange; }
+ .tag { background-color: #eee; font-family: monospace;
+ padding: 2px; font-size: 80%; font-weight: normal; }
+ .timestamp { color: #bebebe; }
+ .timestamp-kwd { color: #5f9ea0; }
+ .org-right { margin-left: auto; margin-right: 0px; text-align: right; }
+ .org-left { margin-left: 0px; margin-right: auto; text-align: left; }
+ .org-center { margin-left: auto; margin-right: auto; text-align: center; }
+ .underline { text-decoration: underline; }
+ #postamble p, #preamble p { font-size: 90%; margin: .2em; }
+ p.verse { margin-left: 3%; }
+ pre {
+ border: 1px solid #e6e6e6;
+ border-radius: 3px;
+ background-color: #f2f2f2;
+ padding: 8pt;
+ font-family: monospace;
+ overflow: auto;
+ margin: 1.2em;
+ }
+ pre.src {
+ position: relative;
+ overflow: auto;
+ }
+ pre.src:before {
+ display: none;
+ position: absolute;
+ top: -8px;
+ right: 12px;
+ padding: 3px;
+ color: #555;
+ background-color: #f2f2f299;
+ }
+ pre.src:hover:before { display: inline; margin-top: 14px;}
+ /* Languages per Org manual */
+ pre.src-asymptote:before { content: 'Asymptote'; }
+ pre.src-awk:before { content: 'Awk'; }
+ pre.src-authinfo::before { content: 'Authinfo'; }
+ pre.src-C:before { content: 'C'; }
+ /* pre.src-C++ doesn't work in CSS */
+ pre.src-clojure:before { content: 'Clojure'; }
+ pre.src-css:before { content: 'CSS'; }
+ pre.src-D:before { content: 'D'; }
+ pre.src-ditaa:before { content: 'ditaa'; }
+ pre.src-dot:before { content: 'Graphviz'; }
+ pre.src-calc:before { content: 'Emacs Calc'; }
+ pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
+ pre.src-fortran:before { content: 'Fortran'; }
+ pre.src-gnuplot:before { content: 'gnuplot'; }
+ pre.src-haskell:before { content: 'Haskell'; }
+ pre.src-hledger:before { content: 'hledger'; }
+ pre.src-java:before { content: 'Java'; }
+ pre.src-js:before { content: 'Javascript'; }
+ pre.src-latex:before { content: 'LaTeX'; }
+ pre.src-ledger:before { content: 'Ledger'; }
+ pre.src-lisp:before { content: 'Lisp'; }
+ pre.src-lilypond:before { content: 'Lilypond'; }
+ pre.src-lua:before { content: 'Lua'; }
+ pre.src-matlab:before { content: 'MATLAB'; }
+ pre.src-mscgen:before { content: 'Mscgen'; }
+ pre.src-ocaml:before { content: 'Objective Caml'; }
+ pre.src-octave:before { content: 'Octave'; }
+ pre.src-org:before { content: 'Org mode'; }
+ pre.src-oz:before { content: 'OZ'; }
+ pre.src-plantuml:before { content: 'Plantuml'; }
+ pre.src-processing:before { content: 'Processing.js'; }
+ pre.src-python:before { content: 'Python'; }
+ pre.src-R:before { content: 'R'; }
+ pre.src-ruby:before { content: 'Ruby'; }
+ pre.src-sass:before { content: 'Sass'; }
+ pre.src-scheme:before { content: 'Scheme'; }
+ pre.src-screen:before { content: 'Gnu Screen'; }
+ pre.src-sed:before { content: 'Sed'; }
+ pre.src-sh:before { content: 'shell'; }
+ pre.src-sql:before { content: 'SQL'; }
+ pre.src-sqlite:before { content: 'SQLite'; }
+ /* additional languages in org.el's org-babel-load-languages alist */
+ pre.src-forth:before { content: 'Forth'; }
+ pre.src-io:before { content: 'IO'; }
+ pre.src-J:before { content: 'J'; }
+ pre.src-makefile:before { content: 'Makefile'; }
+ pre.src-maxima:before { content: 'Maxima'; }
+ pre.src-perl:before { content: 'Perl'; }
+ pre.src-picolisp:before { content: 'Pico Lisp'; }
+ pre.src-scala:before { content: 'Scala'; }
+ pre.src-shell:before { content: 'Shell Script'; }
+ pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
+ /* additional language identifiers per "defun org-babel-execute"
+ in ob-*.el */
+ pre.src-cpp:before { content: 'C++'; }
+ pre.src-abc:before { content: 'ABC'; }
+ pre.src-coq:before { content: 'Coq'; }
+ pre.src-groovy:before { content: 'Groovy'; }
+ /* additional language identifiers from org-babel-shell-names in
+ ob-shell.el: ob-shell is the only babel language using a lambda to put
+ the execution function name together. */
+ pre.src-bash:before { content: 'bash'; }
+ pre.src-csh:before { content: 'csh'; }
+ pre.src-ash:before { content: 'ash'; }
+ pre.src-dash:before { content: 'dash'; }
+ pre.src-ksh:before { content: 'ksh'; }
+ pre.src-mksh:before { content: 'mksh'; }
+ pre.src-posh:before { content: 'posh'; }
+ /* Additional Emacs modes also supported by the LaTeX listings package */
+ pre.src-ada:before { content: 'Ada'; }
+ pre.src-asm:before { content: 'Assembler'; }
+ pre.src-caml:before { content: 'Caml'; }
+ pre.src-delphi:before { content: 'Delphi'; }
+ pre.src-html:before { content: 'HTML'; }
+ pre.src-idl:before { content: 'IDL'; }
+ pre.src-mercury:before { content: 'Mercury'; }
+ pre.src-metapost:before { content: 'MetaPost'; }
+ pre.src-modula-2:before { content: 'Modula-2'; }
+ pre.src-pascal:before { content: 'Pascal'; }
+ pre.src-ps:before { content: 'PostScript'; }
+ pre.src-prolog:before { content: 'Prolog'; }
+ pre.src-simula:before { content: 'Simula'; }
+ pre.src-tcl:before { content: 'tcl'; }
+ pre.src-tex:before { content: 'TeX'; }
+ pre.src-plain-tex:before { content: 'Plain TeX'; }
+ pre.src-verilog:before { content: 'Verilog'; }
+ pre.src-vhdl:before { content: 'VHDL'; }
+ pre.src-xml:before { content: 'XML'; }
+ pre.src-nxml:before { content: 'XML'; }
+ /* add a generic configuration mode; LaTeX export needs an additional
+ (add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
+ pre.src-conf:before { content: 'Configuration File'; }
+
+ table { border-collapse:collapse; }
+ caption.t-above { caption-side: top; }
+ caption.t-bottom { caption-side: bottom; }
+ td, th { vertical-align:top; }
+ th.org-right { text-align: center; }
+ th.org-left { text-align: center; }
+ th.org-center { text-align: center; }
+ td.org-right { text-align: right; }
+ td.org-left { text-align: left; }
+ td.org-center { text-align: center; }
+ dt { font-weight: bold; }
+ .footpara { display: inline; }
+ .footdef { margin-bottom: 1em; }
+ .figure { padding: 1em; }
+ .figure p { text-align: center; }
+ .equation-container {
+ display: table;
+ text-align: center;
+ width: 100%;
+ }
+ .equation {
+ vertical-align: middle;
+ }
+ .equation-label {
+ display: table-cell;
+ text-align: right;
+ vertical-align: middle;
+ }
+ .inlinetask {
+ padding: 10px;
+ border: 2px solid gray;
+ margin: 10px;
+ background: #ffffcc;
+ }
+ #org-div-home-and-up
+ { text-align: right; font-size: 70%; white-space: nowrap; }
+ textarea { overflow-x: auto; }
+ .linenr { font-size: smaller }
+ .code-highlighted { background-color: #ffff00; }
+ .org-info-js_info-navigation { border-style: none; }
+ #org-info-js_console-label
+ { font-size: 10px; font-weight: bold; white-space: nowrap; }
+ .org-info-js_search-highlight
+ { background-color: #ffff00; color: #000000; font-weight: bold; }
+ .org-svg { }
+</style>
+<link rel="stylesheet"type="text/css" href="../../static/global.css">
+</head>
+<body>
+<div id="preamble" class="status">
+<header>
+<a id="skiptocontent" href="#content">Siirry pääsisältöön</a>
+<a href="/fi/">FI</a> · <a href="/en/">EN</a>
+</header>
+</div>
+<div id="content" class="content">
+<h1 class="title">Test-post-title
+<br />
+<span class="subtitle">Test subtitle</span>
+</h1>
+<div id="outline-container-orgbd54fd1" class="outline-2">
+<h2 id="orgbd54fd1">Test post</h2>
+<div class="outline-text-2" id="text-orgbd54fd1">
+<p>
+This is a test org post.
+</p>
+</div>
+</div>
+</div>
+</body>
+</html>
diff --git a/generated/fi/blog/sivujen-uudistus.html b/generated/fi/blog/sivujen-uudistus.html
new file mode 100644
index 0000000..bdf59e4
--- /dev/null
+++ b/generated/fi/blog/sivujen-uudistus.html
@@ -0,0 +1,221 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="fi" xml:lang="fi">
+<head>
+<!-- 2026-06-14 Sun 12:20 -->
+<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1" />
+<title>Verkkosivujeni uudistus</title>
+<meta name="author" content="Joel Kronqvist" />
+<meta name="generator" content="Org Mode" />
+<style type="text/css">
+ #content { max-width: 60em; margin: auto; }
+ .title { text-align: center;
+ margin-bottom: .2em; }
+ .subtitle { text-align: center;
+ font-size: medium;
+ font-weight: bold;
+ margin-top:0; }
+ .todo { font-family: monospace; color: red; }
+ .done { font-family: monospace; color: green; }
+ .priority { font-family: monospace; color: orange; }
+ .tag { background-color: #eee; font-family: monospace;
+ padding: 2px; font-size: 80%; font-weight: normal; }
+ .timestamp { color: #bebebe; }
+ .timestamp-kwd { color: #5f9ea0; }
+ .org-right { margin-left: auto; margin-right: 0px; text-align: right; }
+ .org-left { margin-left: 0px; margin-right: auto; text-align: left; }
+ .org-center { margin-left: auto; margin-right: auto; text-align: center; }
+ .underline { text-decoration: underline; }
+ #postamble p, #preamble p { font-size: 90%; margin: .2em; }
+ p.verse { margin-left: 3%; }
+ pre {
+ border: 1px solid #e6e6e6;
+ border-radius: 3px;
+ background-color: #f2f2f2;
+ padding: 8pt;
+ font-family: monospace;
+ overflow: auto;
+ margin: 1.2em;
+ }
+ pre.src {
+ position: relative;
+ overflow: auto;
+ }
+ pre.src:before {
+ display: none;
+ position: absolute;
+ top: -8px;
+ right: 12px;
+ padding: 3px;
+ color: #555;
+ background-color: #f2f2f299;
+ }
+ pre.src:hover:before { display: inline; margin-top: 14px;}
+ /* Languages per Org manual */
+ pre.src-asymptote:before { content: 'Asymptote'; }
+ pre.src-awk:before { content: 'Awk'; }
+ pre.src-authinfo::before { content: 'Authinfo'; }
+ pre.src-C:before { content: 'C'; }
+ /* pre.src-C++ doesn't work in CSS */
+ pre.src-clojure:before { content: 'Clojure'; }
+ pre.src-css:before { content: 'CSS'; }
+ pre.src-D:before { content: 'D'; }
+ pre.src-ditaa:before { content: 'ditaa'; }
+ pre.src-dot:before { content: 'Graphviz'; }
+ pre.src-calc:before { content: 'Emacs Calc'; }
+ pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
+ pre.src-fortran:before { content: 'Fortran'; }
+ pre.src-gnuplot:before { content: 'gnuplot'; }
+ pre.src-haskell:before { content: 'Haskell'; }
+ pre.src-hledger:before { content: 'hledger'; }
+ pre.src-java:before { content: 'Java'; }
+ pre.src-js:before { content: 'Javascript'; }
+ pre.src-latex:before { content: 'LaTeX'; }
+ pre.src-ledger:before { content: 'Ledger'; }
+ pre.src-lisp:before { content: 'Lisp'; }
+ pre.src-lilypond:before { content: 'Lilypond'; }
+ pre.src-lua:before { content: 'Lua'; }
+ pre.src-matlab:before { content: 'MATLAB'; }
+ pre.src-mscgen:before { content: 'Mscgen'; }
+ pre.src-ocaml:before { content: 'Objective Caml'; }
+ pre.src-octave:before { content: 'Octave'; }
+ pre.src-org:before { content: 'Org mode'; }
+ pre.src-oz:before { content: 'OZ'; }
+ pre.src-plantuml:before { content: 'Plantuml'; }
+ pre.src-processing:before { content: 'Processing.js'; }
+ pre.src-python:before { content: 'Python'; }
+ pre.src-R:before { content: 'R'; }
+ pre.src-ruby:before { content: 'Ruby'; }
+ pre.src-sass:before { content: 'Sass'; }
+ pre.src-scheme:before { content: 'Scheme'; }
+ pre.src-screen:before { content: 'Gnu Screen'; }
+ pre.src-sed:before { content: 'Sed'; }
+ pre.src-sh:before { content: 'shell'; }
+ pre.src-sql:before { content: 'SQL'; }
+ pre.src-sqlite:before { content: 'SQLite'; }
+ /* additional languages in org.el's org-babel-load-languages alist */
+ pre.src-forth:before { content: 'Forth'; }
+ pre.src-io:before { content: 'IO'; }
+ pre.src-J:before { content: 'J'; }
+ pre.src-makefile:before { content: 'Makefile'; }
+ pre.src-maxima:before { content: 'Maxima'; }
+ pre.src-perl:before { content: 'Perl'; }
+ pre.src-picolisp:before { content: 'Pico Lisp'; }
+ pre.src-scala:before { content: 'Scala'; }
+ pre.src-shell:before { content: 'Shell Script'; }
+ pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
+ /* additional language identifiers per "defun org-babel-execute"
+ in ob-*.el */
+ pre.src-cpp:before { content: 'C++'; }
+ pre.src-abc:before { content: 'ABC'; }
+ pre.src-coq:before { content: 'Coq'; }
+ pre.src-groovy:before { content: 'Groovy'; }
+ /* additional language identifiers from org-babel-shell-names in
+ ob-shell.el: ob-shell is the only babel language using a lambda to put
+ the execution function name together. */
+ pre.src-bash:before { content: 'bash'; }
+ pre.src-csh:before { content: 'csh'; }
+ pre.src-ash:before { content: 'ash'; }
+ pre.src-dash:before { content: 'dash'; }
+ pre.src-ksh:before { content: 'ksh'; }
+ pre.src-mksh:before { content: 'mksh'; }
+ pre.src-posh:before { content: 'posh'; }
+ /* Additional Emacs modes also supported by the LaTeX listings package */
+ pre.src-ada:before { content: 'Ada'; }
+ pre.src-asm:before { content: 'Assembler'; }
+ pre.src-caml:before { content: 'Caml'; }
+ pre.src-delphi:before { content: 'Delphi'; }
+ pre.src-html:before { content: 'HTML'; }
+ pre.src-idl:before { content: 'IDL'; }
+ pre.src-mercury:before { content: 'Mercury'; }
+ pre.src-metapost:before { content: 'MetaPost'; }
+ pre.src-modula-2:before { content: 'Modula-2'; }
+ pre.src-pascal:before { content: 'Pascal'; }
+ pre.src-ps:before { content: 'PostScript'; }
+ pre.src-prolog:before { content: 'Prolog'; }
+ pre.src-simula:before { content: 'Simula'; }
+ pre.src-tcl:before { content: 'tcl'; }
+ pre.src-tex:before { content: 'TeX'; }
+ pre.src-plain-tex:before { content: 'Plain TeX'; }
+ pre.src-verilog:before { content: 'Verilog'; }
+ pre.src-vhdl:before { content: 'VHDL'; }
+ pre.src-xml:before { content: 'XML'; }
+ pre.src-nxml:before { content: 'XML'; }
+ /* add a generic configuration mode; LaTeX export needs an additional
+ (add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
+ pre.src-conf:before { content: 'Configuration File'; }
+
+ table { border-collapse:collapse; }
+ caption.t-above { caption-side: top; }
+ caption.t-bottom { caption-side: bottom; }
+ td, th { vertical-align:top; }
+ th.org-right { text-align: center; }
+ th.org-left { text-align: center; }
+ th.org-center { text-align: center; }
+ td.org-right { text-align: right; }
+ td.org-left { text-align: left; }
+ td.org-center { text-align: center; }
+ dt { font-weight: bold; }
+ .footpara { display: inline; }
+ .footdef { margin-bottom: 1em; }
+ .figure { padding: 1em; }
+ .figure p { text-align: center; }
+ .equation-container {
+ display: table;
+ text-align: center;
+ width: 100%;
+ }
+ .equation {
+ vertical-align: middle;
+ }
+ .equation-label {
+ display: table-cell;
+ text-align: right;
+ vertical-align: middle;
+ }
+ .inlinetask {
+ padding: 10px;
+ border: 2px solid gray;
+ margin: 10px;
+ background: #ffffcc;
+ }
+ #org-div-home-and-up
+ { text-align: right; font-size: 70%; white-space: nowrap; }
+ textarea { overflow-x: auto; }
+ .linenr { font-size: smaller }
+ .code-highlighted { background-color: #ffff00; }
+ .org-info-js_info-navigation { border-style: none; }
+ #org-info-js_console-label
+ { font-size: 10px; font-weight: bold; white-space: nowrap; }
+ .org-info-js_search-highlight
+ { background-color: #ffff00; color: #000000; font-weight: bold; }
+ .org-svg { }
+</style>
+<link rel="stylesheet"type="text/css" href="../../static/global.css">
+</head>
+<body>
+<div id="preamble" class="status">
+<header>
+<a id="skiptocontent" href="#content">Siirry pääsisältöön</a>
+<a href="/fi/">FI</a> · <a href="/en/">EN</a>
+</header>
+</div>
+<div id="content" class="content">
+<h1 class="title">Verkkosivujeni uudistus</h1>
+<div id="outline-container-org94b1e2e" class="outline-2">
+<h2 id="org94b1e2e"><span class="todo TODO">TODO</span> Päivitä sivut loppuun <code>[0/5]</code></h2>
+<div class="outline-text-2" id="text-org94b1e2e">
+<ul class="org-ul">
+<li class="off"><code>[&#xa0;]</code> Lisää git-tietosäilöt, erityisesti sivujen koodi</li>
+<li class="off"><code>[&#xa0;]</code> Selitä muutokset täällä ja englanninkielisellä puolella</li>
+<li class="off"><code>[&#xa0;]</code> Luo englanninkielinen puoli</li>
+<li class="off"><code>[&#xa0;]</code> Tyylittele linkkilistat</li>
+<li class="off"><code>[&#xa0;]</code> Aseta blogin indeksi aikajärjestykseen</li>
+</ul>
+</div>
+</div>
+</div>
+</body>
+</html>
diff --git a/generated/fi/blog/tekstinsyotto.html b/generated/fi/blog/tekstinsyotto.html
new file mode 100644
index 0000000..9ae7d80
--- /dev/null
+++ b/generated/fi/blog/tekstinsyotto.html
@@ -0,0 +1,312 @@
+<!DOCTYPE html>
+<html lang="fi">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <link href="/static/global.css" rel="stylesheet" type="text/css">
+ <title>Tarina toimivamman tekstinsyöttämiseni taustalla</title>
+ </head>
+
+ <body>
+ <a id="skiptocontent" href="#content">Siirry pääsisältöön</a>
+ <header>
+ <a href="/fi/">FI</a> · <a href="/en/">EN</a>
+ </header>
+ <main id="content">
+ <h1>Tarina toimivamman tekstinsyöttämiseni taustalla</h1>
+
+<p>Näppäimistöni ovat aina herättäneet hilpeyttä ystävieni keskuudessa.
+Koska ensimmäisessä blogikirjoituksessani kerroin, kuinka näppärää raakateksti voi olla,
+lienee sopivaa luoda katsaus,
+miten kirjoitan ohjelmakoodia ja muuta raakatekstiä tietokoneella,
+ ja kuinka ohjelmisto- ja laitteistoratkaisuni tekstinmuokkauksen suhteen ovat muuttuneet ajan saatossa.</p>
+
+
+<p>Joskus lukion alkupuolella siirryin asteittain käyttämään Linuxia,
+ensin MinGW:n* kautta, sen jälkeen rinnakkain Windowsin kanssa
+ja myöhemmin ainoana käyttöjärjestelmänäni.
+Linuxin muokattavuus auttoi minua ymmärtämään,
+että kykenen itse vaikuttamaan siihen,
+miten ergonomisesti ja tehokkaasti kykenen työskentelemään tietokoneellani.</p>
+
+<p>Kun etsin tietoa netistä ratkaistakseni erinäisiä haasteita,
+en voinut olla törmäämättä mainintoihin Vim-ohjelmasta.
+Se on juurikin eräs ratkaisuista,
+jotka ovat auttaneet minua parantamaan työskentelyni sujuvuutta.</p>
+
+<p>Vim on tehokas tilapohjainen tekstinmuokkausohjelma.
+Sen tärkeimmät tilat ovat liiketila ja tekstinsyöttötila.
+Tekstinsyöttötilassa kirjoitettu teksti päätyy kulloinkin auki olevaan tiedostoon**.
+Liiketilassa taas voi siirtää kursoria ja suorittaa komentoja.
+Liiketilan erillisyys tekstinsyöttötilasta on äärimmäisen hyödyllistä;
+liiketilassa se mahdollistaa tavallisten kirjainten käytön liikkumis- ja yleiskomentoja vastaavina näppäinyhdistelminä.
+Kursoria liikutetaan HJKL-näppäimillä nuolinäppäinten tavoin,
+"N G" siirtää kursorin riville N, "$" taas rivin loppuun,
+"y y" kopioi rivin, jolla kursori on ja niin edelleen.
+Kaikkeen löytyy näppäinyhdistelmä.
+ Liiketilassa on helppoa yhdistellä, toistaa ja ketjuttaa komentoja.
+Vimin etsi ja korvaa -toiminto on tehokkain, minkä olen nähnyt missään koodieditorissa.</p>
+
+<p>Tehokkaan tekstinmuokkauksen lisäksi
+Vimin toimintaa voi muokata tarkemmin kuin useimpia muita tekstinmuokkausohjelmia.
+Yksi osa tätä on nimenomaan liiketila – voit helposti lisätä näppäinyhdistelmiä, jotka tekevät mitä ikinä tahdot.
+Pitkälti kaikkia varsin laajassa dokumentaatiossa [1] mainittuja komentoja ja muuttujia voi muokata omien mieltymystensä mukaan.
+Vimiin on saatavilla runsaasti lisäosia [2], jotka voivat esimerkiksi lisätä Vimin yhteensopivuutta muiden ohjelmien kanssa.
+Olen sittemmin siirtynyt käyttämään Neovimiä.
+Se on Vimin modernimpi ja toteutukseltaan kevyempi***, mutta käytännössä samat ominaisuudet sisältävä versio.
+Neovim sisältää sisäänrakennettuna jopa LSP-tuen [3].
+LSP:n tiedoilla se kykenee muun muassa huomauttamaan tekstin muokkaajaa virheistä tämän työstämässä lähdekoodissa.
+Käytännössä ohjelma muuttuu LSP-serverin avulla täysiveriseksi IDE:ksi.</p>
+
+<p>Mikäli Vimin kuvaus jäi epäselväksi, on sen itse kokeileminen ja oppiminen sangen helppoa.
+Sitä oppii käyttämään katsomalla pari tutoriaalia YouTubesta (esim. <a href="https://youtu.be/-txKSRn0qeA">youtu.be/-txKSRn0qeA</a>) ja tekemällä
+Vimiin sisäänrakennetun tutoriaalin kirjoittamalla ":tutor" ja painamalla enteriä.
+Jos Vimin asennus ei vielä houkuta,
+löytyy samainen tutoriaali netistä,
+esimerkiksi osoitteesta <a href="https://remarkablemark.org/vimtutor/">remarkablemark.org/vimtutor/</a>.</p>
+
+
+<p>Viime aikoina olen myös tehnyt kokeiluja GNU Emacs -kehitysympäristön parissa,
+ja olen vaikuttunut sen kyvyistä.
+Lisäosien voimalla käytän sitä toistaiseksi kuitenkin enimmäkseen Vimin tavoin.
+On muutenkin järkevää jättää sen käsittely myöhemmäksi –
+se on luonteeltaan lähempänä käyttöjärjestelmää kuin tekstinmuokkausohjelmaa.</p>
+
+
+<p>Toinen suuri muutos,
+jonka tein vaihdettuani Linuxiin,
+oli näppäimistöasetteluni vaihtaminen.
+En koskaan oppinut kymmensormijärjestelmää kunnolla QWERTY-asettelulla,
+muun muassa oudosti aseteltujen näppäinten vuoksi,
+jotka hankaloittivat kymmensormijärjestelmän oikeaoppista käyttöä.
+Lienee kuitenkin paikallaan selventää,
+miksi QWERTY ei ollut minulle – ja tuskin muillekkaan paljon kirjoittaville – toimivin näppäimistöasettelu.</p>
+
+<p>QWERTY-asettelu kehitettiin aikanaan pääasiassa kirjoituskoneille.
+Erilaisia asetteluita oli olemassa paljon, joista varhaisimmissa
+näppäimet olivat käytännössä vain aakkosjärjestyksessä [4,5].
+Ensimmäisessä sähkeistä suoraan luettavaa tekstiä – morsekoodin sijaan – tuottavassa lennätikoneessa kirjaimet olivat aakkosjärjestyksen lisäksi kaikki samassa rivissä [6].
+Koska sellaisella näppäimistöllä oli vaivalloista kirjoittaa, siirrettiin kirjaimet kolmeen riviin ja numerot neljänteen.
+Nyt peräkkäin ja vierekkäin olevat näppäimet saattoivat kuitenkin painaessa juuttua toisiinsa.
+Ratkaisuna näppäimet aseteltiin siten, että useimmiten käytetyt näppäimet eivät olleet vierekkäin.</p>
+
+<p>Monilla Youtube-videoilla, joihin törmäsin todennäköisesti Linux-mielenkiintoni ja Youtuben algoritmin vuoksi,
+perusteltiin toiseen näppäimistöasetteluun vaihtamista jotakuinkin vastaavasti.
+Niillä vihjattiin, ettei ole järkevää, että useimmiten käytetyt kirjaimet ovat hajallaan ympäri näppäimistöä.
+<a href="#fig1">Kuvasta 1</a> näkee helposti,
+kuinka yleisimmin käytettyjä kirjaimia vastaavat näppäimet ovat QWERTYllä kaukana toisistaan.
+Mistä muusta muutokset ihmisten käytöksessä nykyään johtuisivat kuin YouTubesta.</p>
+
+<figure id="fig1">
+ <img src="/img/qwerty.png" alt="Kuva QWERTY-näppäimistöstä korostuksilla">
+ <figcaption>Kuva 1. Englanninkielinen QWERTY-asettelu, jossa näppäimiä on tummennettu sen perusteella, kuinka paljon niitä vastaavat kirjaimet esiintyvät teksteissä Wikipedian mukaan [7]. Tämä tuottamani kuva on vapaasti käytettävissä <a href="https://creativecommons.org/publicdomain/zero/1.0/legalcode.en">CC0-lisenssillä</a>.</figcaption>
+</figure>
+
+<p>Ei ole perusteltua sanoa, että näppäinten asettelua näppäimistölle ei olisi aikanaan mietitty.
+Olisi kuitenkin järkevämpää, että useimmiten käytetyt näppäimet olisivat niin kutsutulla kotirivillä,
+jolla sormia oletusarvoisesti pidetään näppäimistöä käytettäessä.
+Tällöin sormien tarvitsisi harvemmin jättää kotirivi,
+kasvattaen kirjoitusnopeutta ja lyhentäen matkaa, joka sormien on kuljettava näppäimistön yllä.</p>
+
+<p>Joidenkin kokeilujen kautta päädyin käyttämään Colemak-näppäimistöasettelua [8].
+Vuosilukujen valossa sen voidaan olettaa olevan QWERTYä paremmin suunniteltu.
+QWERTY syntyi 1800- ja 1900-luvuilla.
+Colemak puolestaan on suunniteltu 2000-luvulla [9] tehokkuutta ergonomisuutta ajatellen [8].
+Tietokoneet oli kehitetty jo pitkälle, kun Colemak suunniteltiin,
+joten sitä luodessa voitiin paremmin ottaa huomioon tekijöitä, jotka vaativat laajamittaisempaa laskennallista analyysiä.
+Esimerkiksi saman sormen peräkkäisiä kirjainpainalluksia,
+saman käden kirjainpainalluksia ja kotirivin eri puolille vuoroin kurottavia (esim. ”minimi” QWERTYllä) näppäily-yhdistelmien esiintyvyyksiä on voitu minimoida [10, 11].
+Yksinkertaisin argumentti Colemakin puolesta lienee se,
+että useimmin käytetyt näppäimet sijaitsevat kotirivillä,
+kuten <a href="#fig2">Kuvasta 2</a> näkyy.</p>
+
+<figure id="fig2">
+ <img src="/img/colemak.png" alt="Kuva Colemak-näppäimistöstä korostuksilla">
+ <figcaption>Kuva 2. Colemak, värikoodi tuotettu samoin kuin <a href="#fig1">Kuvassa 1</a>. Tämä tuottamani kuva on vapaasti käytettävissä <a href="https://creativecommons.org/publicdomain/zero/1.0/legalcode.en">CC0-lisenssillä</a>.</figcaption>
+</figure>
+
+<p>Colemak on toiminut hyvin omassa käytössäni.
+Uudella asettelulla kirjoittamista harjoitellessa näppäimistöni näppäinhatut olivat fyysisesti yhä QWERTY-asettelussa.
+Koska en voinut tarkastaa näppäimen sijaintia silmilläni,
+opin kirjoittamaan katsomatta näppäimistöä ollenkaan,
+mikä oli ollut minulle QWERTYä käyttäessä hankalaa.
+Kirjoittaminen myös on myös tuntunut mukavammalta;
+sormien tarvitsee harvemmin poistua kotiriviltä ja epämukavia näppäilysarjoja tuntuu esiintyvän harvemmin.</p>
+
+<p>On tietysti hyvä huomata, että Colemak on suunniteltu nimenomaan englannin kirjoittamista varten.
+Tahdon itse käyttää kaikista järkevistä käyttöjärjestelmistä löytyvää yleisnäppäimistöä,
+joka on samoin aseteltu riippumatta kielestä, jota kirjoitan.
+Koska kirjoitan paljon sekä suomea että englantia, ja joskus ruotsia,
+joudun joka tapauksessa näppäimistöasettelua valitessa tekemään kompromissin kielten välillä,
+tai valitsemaan jonkun harrastelijan tekemän esoteerisen useamman kielen yhdistävän näppäimistöasettelun,
+jota tuskin on todettu toimivaksi käytössä.
+Kaikeksi onneksi Suomeakin kirjoittaessa Colemak on tuntunut minusta luontevammalta kuin QWERTY.</p>
+
+<p>Alun perin kokeilin ensimmäisenä näppäimistöasettelunani QWERTYn jälkeen Dvorakia****.
+Saatoin mututuntumalla kirjoittaa Dvorakilla nopeammin kuin Colemakilla,
+mutta sillä kirjoittaminen oli käsilleni epämukavaa, etenkin oikealle pikkurillilleni,
+joka joutui usein kurkottamaan L-näppäimen perään.
+Hiljalleen ymmärsin,
+että itselle sopivaa näppäimistöasettelua valitessa
+olennaisinta on asettelun ergonomisuus eikä kirjoitusnopeus.
+Mitä hyötyä on nopeasta kirjoitustyylistä,
+jos ei voi kirjoittaa rasitusvamman vuoksi.</p>
+
+<p>Näppäimistöasettelua valitessani minulle oli tärkeää myös erikoismerkkien helppo saatavuus.
+Dvorakissa ei ollut juurikaan erikoismerkkejä, ei edes AltGr:n takana.
+Colemakilla käytettävissäni ovat helposti muun muassa paljon käyttämäni
+nk. ysiysi-lainausmerkit ‘”’ (AltGr+Shift+0)
+sekä m-viiva ‘–’ (AltGr+-), ja mukavuuksina esimerkiksi
+numeroiden potenssiversioita ‘¹²³’.</p>
+
+<p>Voit saada ensikosketuksen Colemakiin netissä esim. nopeuspelin <a href="https://gnusenpai.net/colemakclub/">gnusenpai.net/colemakclub/</a> kautta.
+Asennus-/käyttöönotto-ohjeet Colemakille puolestaan löytyvät osoitteesta <a href="https://colemak.com/Download">colemak.com/Download</a>.
+Muitakin eri tarkoituksiin optimoituja näppäimistöasetteluja löytyy runsaasti netistä,
+mutta Colemak lienee kaikista testatuin ja luotetuin vaihtoehto,
+joka löytyy monista laitteista vaihtoehtona ilman erillistä asennusta.
+</p>
+
+
+<p>Kiinnostuttuani näppäimistöasetteluni ergonomisuudesta aloin pohtimaan myös fyysisen näppäimistöni ergonomisuutta.
+Aloitetaan hyvin yksinkertaisella ajatusleikillä.
+Kuvittele olevasi pöydän ääressä ennen ateriaa.
+Miten asetat kätesi rennosti pöydälle eteesi?
+Entä jos niiden on oltava ainakin hieman erillään eikä yhdessä?
+Todennäköisesti kätesi olisivat keskemmällä kuin kyynärpääsi.
+On luultavaa,
+että ranteesi olisivat suorina,
+verrattuna esimerkiksi asentoon,
+jossa pikkurillejä taittaa kohti kyynärluita.
+Lopulta on yleistä, että kämmenesi eivät olisi olleet litteinä pöytää vasten,
+vaan että ranteesi peukalopuoli osoitti joko suoraan ylös tai hieman yläviistoon.</p>
+
+<p>Tavallinen näppäimistö pakottaa kädet epäluonnolliseen suppuun.
+Kuvittele ranteesi suoraan sormiesi takana.
+Vie sitten sormesi näppäimistön kotiriville.
+Joudut taittamaan pikkurilliäsi kohti kyynärluutasi.
+Epämukava asento, eikö?
+Ongelma ratkeaa jakamalla näppäimistö keskeltä kahtia .
+Tällöin eri puoliskot voi asettaa itselleen mieluisiin kulmiin
+ja itselleen mieluiselle leveydelle
+siten, että ranteet saavat olla suorassa.
+Samalla lapasi ja hartiasi pääsevät rentoutumaan.</p>
+
+<p>Ranteita on myös mukava kallistaa nostamalla peukkut ylemmäs kuin pikkurillit.
+Nyt kun näppäimistösi on kahdessa osassa,
+voit vapaasti kallistaa ne kulmaan, joka on ranteillesi mieluinen.
+Ainakin, jos näppäimistöillä on telineet,
+jotka sallivat niiden kallistamisen kätevästi.
+Jotkut kirjoittavat jopa näppäimistönpuolikkaat lähes pystysuorassa.</p>
+
+<p>Lopulta mielenkiintoisena huomiona on varsin kummallista, että näppäimistöjen sarakkeet ovat useimmiten viistossa eivätkä suoraan ylhäältä alas.
+Tämä on QWERTYn lisäksi toinen epäoptimaalinen jäänne kirjoituskoneiden ajalta.
+Olihan näppäinten varsien jotenkin ulotuttava pääasialliseen kirjoituslaitteistoon.
+Jos näppäimistöt suunniteltaisiin ensimmäistä kertaa nykyään ilman historiallista taakkaa, miksi tabulaattori-, näppäinlukko- ja shift-näppäimiä päätettäisiin kasvattaa eri pituisiksi siten, että loput kirjaimet joutuvat kuin väistämään toisiaan.
+Viistous ei sinänsä ole välttämättä epäergonomista,
+mutta esimerkiksi kaukana kotirivistä olevien numeronäppäinten löytäminen voi olla hankalaa,
+kun vaikkapa numero 5 on etusormen yläpuolella,
+vaikka sarakkeiden suoraan mennessä siinä pitäisi olla nelonen.</p>
+
+<p>Markkinoilla on näppäimistöjä, jotka ratkaisevat kaikki nämä ongelmat.
+Esimerkiksi Ergodox Ez [12] ja Voyager [13] ovat suosittuja vaihtoehtoja.
+Ne vain maksavat halvimmillaan runsaat kolmesataa euroa parilta,
+mahdollisia kuljetuskuluja ja tulleja huomioimatta,
+ja olen köyhä opiskelija, joten en aio hankkia sellaisia ainakaan vielä.</p>
+
+<p>Olisin kuitenkin paljon halunnut kyseisenlaisen näppäimistön.
+Runsas vuosi sitten yritin lievittää pulmaani tilaamalla
+Perixx Periboard-524B-näppäimistön.
+Näppäimistö on toiminut kiitettävästi,
+mutta sen sarakkeet eivät mene suoraan.
+Lisäksi näppäimistöllä ei ole mekaanisen näppäimistön hyötyjä.
+Muutoin näkemykseni siitä ei ole juurikaan muuttunut sen jälkeen,
+kun kirjoitin siitä geminikapselissani [14].</p>
+
+<p>Epäonnekseni tuhlasin rahaa – pian näppäimistön ostamisen jälkeen julkaistiin parempi vaihtoehto, jonka hankkiminen maksaa suunnilleen saman verran.
+Onnekseni voin hankkia sen paremman vaihtoehdon nyt, kun huomasin asian.
+Noin 10 kuukautta sitten
+eräs suomalainen tietotekniikan opiskelija julkaisi netissä ohjeet juuri tarpeeni täyttävän näppäimistön kokoamiseen.
+Näppäimistö on vieläpä suunniteltu juuri budjettiystävällisyys ja kokoamisen helppous mielessä.
+Näppäimistön nimi on Silakka54, ja sen kokoamisohjeet löytyvät GitHubista [15].
+Voit nähdä näppäimistön <a href="#fig3">Kuvassa 3</a>.
+Oletuksena näppäimistössä ei ole kallistavaa telinettä,
+mutta olen jo 3D-tulostanut sellaisen.
+Näppäimistöjä on saatavilla valmiiksi koottuina AliExpressistä,
+tai näppäimistön voi koota tilaamillaan osilla,
+kuten itse aion tehdä aidon vapaan lähdekoodin hengen mukaisesti.</p>
+
+<figure id="fig3">
+ <img src="/img/silakka54.png" alt="Kuva Silakka54-näppäimistöstä">
+ <figcaption>Kuva 3. Silakka54-näppäimistö. Kuva on <a href="https://github.com/Squalius-cephalus">Juho ”Squalius-cephalus” T.:n</a> ja se on lisensoitu <a href="/static/silakka54-license.txt">MIT-lisenssillä</a>.</figcaption>
+</figure>
+
+<p>Paremman asettelun lisäksi Silakka54:n hyötyjä ovat helppo muokattavuus,
+mekaanisten näppäinkytkinten tuoma tuntuma sekä QMK:n (tai Vialin) avulla muokattava firmware.
+Näppäimistöä voi muokata esimerkiksi sisältämään lisää kerroksia
+(vrt. AltGr:n pohjassa pitäminen,
+mutta eri näppäimen pohjassa pitäminen avaa pääsyn niihin merkkeihin,
+joita itse useimmiten tarvitsee),
+ja tavallisia näppäimiä voi asettaa toimimaan eri näppäiminä pohjaan painaessa
+– esimerkiksi välilyönnistä voi tehdä myös Ctrl-näppäimen.</p>
+
+<p>Koska näppäimistöasettelu määritellään firmware-tasolla,
+voi oman asettelunsa myös ottaa mukaan kaikkialle,
+minne näppäimistönsä saa mukaan.
+Itse aion hyödyntää tätä esimerkiksi sähköisessä EXAM-tenttijärjestelmässä,
+mikäli sallittua,
+sillä kyseinen järjestelmä pohjautuu ainoalle yleiselle käyttöjärjestelmälle,
+joka ei tarjoa Colemak-näppäimistöasettelua.</p>
+
+
+<p>Lopuksi maininnan ansainnee Thumb-Key,
+jota käytän näppäimistönä puhelimellani.
+Siinä näppäimet ovat suuremmat (ne ovat 4x4-ruudukossa),
+joten niihin on helpompi osua.
+Toki kääntöpuolena kaikki kirjaimet eivät mahdu näppäimille,
+mutta loput merkit saa kirjoitettua vetämällä oikeasta näppäimestä oikeaan suuntaan.
+Pidän isommista näppäimistä, muita perusteluja kyseiselle näppäimistölle en anna.</p>
+
+
+<p>En varmasti ole vielä valmis työskentelytapojeni optimoinnin kanssa.
+Tämä antoi kuitenkin katsauksen nykyään käyttämiini olennaisimpiin tekstinsyöttööni vaikuttaviin ratkaisuihin,
+niin ohjelmistojen kuin näppäimistöjen osalta.
+Ratkaisut ovat kaikki helposti kokeiltavissa, paitsi mahdollisesti Silakka54 – fyysisiä esineitä kun on hankala kokeilla heti netissä.
+Kokeilemalla ei menetä mitään ja kärsivällisellä harjoittelulla kokeilu voi olla sekä hyödyllinen että hauska.</p>
+
+
+<h2>Linkkejä ja lähteitä</h2>
+
+<p>
+[1] Vimin dokumentaatio. Vim-ohjelmassa saatavilla komennolla ":help", verkossa <a href="https://vimhelp.org/">vimhelp.org</a><br>
+[2] Ks. esim. <a href="https://vimawesome.com/">vimawesome.com</a><br>
+[3] Neovimin dokumentaation LSP-serverien konfiguroinnista: <a href="https://neovim.io/doc/user/lsp.html">neovim.io/doc/user/lsp.html</a><br>
+[4] <a href="https://distantwriting.co.uk/instruments.html">distantwriting.co.uk/instruments.html</a>, kuva 23<br>
+[5] W. A. Burt. Patentti laitteelle Typographer. 1829. United states patent and trademark office. Saatavilla <a href="https://ppubs.uspto.gov/api/pdf/downloadPdf/X005581?requestToken=eyJzdWIiOiJlYTExNzhhMy0xNTExLTQ1YTktOWJjMy0yMzdlYTNkYTM4NzgiLCJ2ZXIiOiIwODRjMTAzOC01ZGVjLTQwNjItOWUwNC05M2VjNzlmZWU1ZjUiLCJleHAiOjB9">ppubs.uspto.gov/api/pdf/downloadPdf/[...]</a>.<br>
+[6] Wikipedia: Printing telegraph. <a href="https://en.wikipedia.org/wiki/Printing_telegraph">en.wikipedia.org/wiki/Printing_telegraph</a><br>
+[7] Wikipedia, kirjainten esiintyvyys. <a href="https://en.wikipedia.org/w/index.php?title=Letter_frequency&oldid=1295211904">en.wikipedia.org/wiki/Letter_frequency</a><br>
+[8] Colemakin verkkosivut: <a href="https://colemak.com/">colemak.com</a><br>
+[9] Wikipedia-artikkeli Colemakista: <a href="https://en.wikipedia.org/wiki/Colemak">en.wikipedia.org/wiki/Colemak</a><br>
+[10] Colemakin suunnitteluprosessista: <a href="https://colemak.com/Design">colemak.com/Design</a><br>
+[11] Colemakin ergonomiset tekijät: <a href="https://colemak.com/Ergonomic">colemak.com/Ergonomic</a><br>
+[12] Ergodox Ez: <a href="https://ergodox-ez.com">ergodox-ez.com</a><br>
+[13] Voyager: <a href="https://zsa.io/voyager">zsa.io/voyager</a><br>
+[14] Geminilokini: ”Perixx budget split keyboard – first impression” <a href="gemini://cron4.fi/gemlog/periboard.gmi">gemini://cron4.fi/gemlog/periboard.gmi</a>, Verkkoportaalin kautta <a href="https://portal.mozz.us/gemini/cron4.fi/gemlog/periboard.gmi">portal.mozz.us/[...]</a><br>
+[15] Silakka54 <a href="https://squalius-cephalus.github.io/silakka54">squalius-cephalus.github.io/silakka54</a><br>
+</p>
+
+<br>
+
+<p>
+*MinGW ei tietenkään ole Linux, mutta sen kautta sain ensikosketuksen GNU:n komentoriviohjelmiin.<br>
+**Oikeastaan teksti päätyy vain tekstikenttään, josta se sitten usein tallennetaan (kirjoitetaan) tiedostoon.
+Usein tekstikentän sisältö myös vastaa kyseisen tiedoston sisältöä välitallennuksia vaille.
+Kuitenkaan tekstiä ei suoraan kirjoiteta tiedostoon
+kuten ei käytännössä missään tekstinmuokkausohjelmassa.
+Tosiasiassa tekstikentän ei tarvitse kuvata mitään tiedostoa,
+eikä sen sisältöjä tarvitse kirjoittaa mihinkään tiedostoon.<br>
+***Neovim sovelluksena vie vähemmän tilaa kuin Vim.<br>
+****Todellisuudessa käytin Svdvorakia, Dvorakin ruotsin kirjoittamiseen tarkoitettua versiota, koska oletus-dvorakista ei löydy ääkkösiäkään, toisin kuin oletus-colemakista.<br>
+</p>
+ </main>
+ </body>
+</html>
diff --git a/generated/fi/blog/yksinkertaisesti-monipuolinen.txt b/generated/fi/blog/yksinkertaisesti-monipuolinen.txt
new file mode 100644
index 0000000..8295fd7
--- /dev/null
+++ b/generated/fi/blog/yksinkertaisesti-monipuolinen.txt
@@ -0,0 +1,226 @@
+
+ yksinkertaisesti-monipuolinen.txt
+ =================================
+
+Jos tämä virke ei mahdu 2 riville puhelimesi näytöllä, käännä laitetta, niin lukeminen on helpompaa.
+
+Tietokoneiden alkuaikoina ihmisen ja tietokoneen
+välinen kommunikaatio tapahtui pääosin tekstin
+välityksellä. Komentokehotteeseen kirjoitettiin
+tekstikomento ja suoritettu ohjelma tulosti käyt-
+täjälle yhtä lailla tekstipohjaisen vastauksen.
+Kun internet saapui, kommunikoivat ihmiset myös
+toistensa kanssa tekstin välityksellä: esimerkik-
+si sähköpostit olivat aluksi raakatekstiä.
+
+Nykyään pelkkään tekstiin (raakateksti, “plain
+text”) törmää harvoin ja sitä kavahdetaan. En pie-
+nempänä ymmärtänyt edes, mistä raakatekstissä on
+kyse. Tietokoneet esittäytyivät minulle word-doku-
+menttien, verkkosivustojen ja pdf-tiedostojen
+kautta. En tajunnut, että tietokoneissa taustalla
+toimii raaempaa tekstiä. Suurin osa muista ikäi-
+sistäni ovat varmasti lähteneet samasta käsityk-
+sestä, vaikka ovatkin ehkä löytäneet raakateks-
+tinkin varttuessaan.
+
+Teksti on monissa dokumenteissa pääsisältö, mutta
+raakatekstin ja verkkosivujen tai pdf-dokumenttien
+ero on siinä, että jälkimmäisissä dokumentin suun-
+nittelija on vastuussa myös dokumentin ulkoasusta
+ja voi lisätä siihen multimediaa. Verkko-ohjel-
+moija suunnittelee verkkosivun ulkoasun ja lisää
+sille videoita, ja word-dokumentin kirjoittaja
+muuttaa dokumentin fonttia ja lisää siihen kuvia.
+
+Raakatekstissä mikään tästä ei ole mahdollista.
+Raakatekstiä on se, mitä Windows-käyttäjä kirjoit-
+taa Notepadiin. Raakatekstistä koostuu myös tämä
+blogipostaus.
+
+Ohjelmistotasolla raakateksti koostuu tavuista,
+joista jokainen vastaa tiettyä merkkiä. Nykyään
+käytännössä kaikki raakateksti noudattaa UTF-8
+-standardia, joka määrittelee tavujen ja merkkien
+vastaavuudet. 01000001 vastaa isoa A:ta, 01000010
+isoa B:tä, 0011 1111 kysymysmerkkiä ja niin edel-
+leen. Jotkin merkit koostuvat useammasta tavusta,
+koska kahdeksan nollaa tai ykköstä ei riitä esit-
+tämään kaikkia merkkejä — näin jopa emojeille löy-
+tyy tuki UTF-8 -tekstistä, mikäli fontti sallii🥳
+
+Käyttöön raakateksti pääsee nykyään harvoin — jopa
+yksinkertaiset muistiinpanot kirjoitetaan esimer-
+kiksi Google Docsiin. Se on harmillista, koska
+raakatekstillä on ominaisuuksia, jotka tekevät
+siitä monissa tapauksissa käyttökelpoisempaa kuin
+mistään muusta datan muodosta.
+
+Raakatekstin kaksi suurinta hyötyä ovat sen yksin-
+kertaisuus ja kaikkialla toimivuus. Tekstin for-
+maatista vallitsee suurempi yksimielisyys kuin
+muiden formaattien osalta ja se on yksikäsittei-
+sempää.
+
+Edellä mainittujen ominaisuuksiensa ansiosta
+raakateksti toimii mainiosti tietokoneohjelmien
+kanssa kommunikointiin ja niiden välillä tapahtu-
+vaan tiedonvaihtoon. On helppoa kirjoittaa
+ohjelma, joka lukee tekstiä. Ohjelma tietää mitä
+se lukee, koska teksti on hyvin standardisoitua.
+Lisäksi se saa datan puhtaana — sen ei tarvitse
+eritellä sille olennaista informaatiota ympäröi-
+västä ihmissilmälle tarkoitetusta esitystapaa kos-
+kevasta informaatiosta kuten tekstin sijainnista
+tai fontista.
+
+Tämä mahdollistaa tekstipohjaisten ohjelmien käy-
+tön tehokkaaseen tiedon muokkaamiseen, “skriptaa-
+miseen”. Otetaan esimerkiksi aloitus- ja lopetus-
+puheiden koostaminen. Miksaan välillä Lohjan seu-
+rakunnan messuja ja lähetän ne radioon. Lähetysten
+alkuun ja loppuun lausutaan lyhyet ns. spiikit,
+jotka koostan aluksi tekstinä. Tykkään kerätä
+spiikkien muuttuvat tiedot edellisen päivän iltana
+puhelimeeni tekstitiedostoon, ja kun tulen aamulla
+kirkolle, kirjoitan vain tietokoneella:
+
+ $ nc -l 1234 >> Desktop/Spiikit/2020-01-01.txt
+
+ja puhelimellani
+
+ $ nc 10.10.16.231 1234 < infot.txt
+
+ja olen näin saanut liitettyä tarpeelliset tiedot
+puhelimeltani oikeaan tiedostoon seurakunnan
+tietokoneella. Mikään tästä ei toimisi — ainakaan
+läheskään yhtä hyvin — jos käyttäisin raakatekstin
+sijaan vaikkapa `.docx`-dokumentteja. Erilaisia
+tekstipohjaisia ohjelmia voi yhdistellä vielä
+käyttökelpoisemmin ja monipuolisemmin: Wikipedi-
+asta löytyy hyvä esimerkki [1] (linkki dokumentin
+lopussa).
+
+Pelkän tekstin mukana ei myöskään tule turhaa tie-
+toa, kuten fonttia, tekstin väriä, videoita tai —
+raakatekstiin keskittyvien protokollien yhtey-
+dessä — evästeitä. Lukijan ei siis tarvitse odot-
+taa, kun verkkosivu lataa kymmenien megatavujen
+kokoista videota hipstereistä hyppimässä kännyköi-
+densä kanssa (ks. `https://agt.fi`) ja miettiä,
+mistä hän saisi paremman nettiliittymän tai kirota
+esimerkiksi VPN:n tai Tor-verkon hitautta. Sen
+sijaan hän pääsee lähes välittömästi muutaman
+(kymmenen) kilotavun kokoisen, hänen kannaltaan
+olennaisen tekstisisällön pariin. Resursseja
+säästyy ja joidenkin mielestä tiedonsaanti on näin
+myös mukavampaa.
+
+Raakateksti on tehokasta tietojenkäsittelyssä,
+mutta mitä tapahtuu, kun päättää tietoisesti käyt-
+tää sitä osuvamman formaatin sijaan? Mitä käy esi-
+merkiksi, kun kirjoittaa blogipostauksen pelkällä
+tekstillä verkkosivuilla tavallisesti käytetyn
+HTML-merkintäkielen sijaan?
+
+HTML:n käyttäminen tarjoasi mahdollisuuden lisätä
+tekstiin linkkejä ja kuvia. Lisäksi se tarjoaa
+tavan viestittää dokumentin eri osia — koodissa
+lukee, mikä osio on tarkoitettu valikoksi, mistä
+löytyy pääsisältö ja mikä sen sisällä on otsikko
+ja mikä taas alaotsikko.
+
+Kuten rajoitteiden kanssa yleensä käy, pakottaa
+pelkän tekstin käyttäminen kirjoittajan ylittämään
+formaatin asettamat rajoitukset ja kannustaa näin
+luovuuteen. Jos tekstidokumenttiin tahtoo lisätä
+linkin, täytyy se kirjoittaa auki. Voin esimer-
+kiksi kertoa, että HTML:n standardi löytyy osoit-
+teesta `https://www.rfc-editor.org/rfc/rfc2854`.
+Linkin auki kirjoittamisesta on yllättävää
+hyötyä: lukija näkee välittömästi minne se vie.
+Lisäksi se toimii, vaikka dokumentin tulostaisi
+paperille.
+
+Kuvien välittäminen tekstin kautta taas on luonut
+kokonaisen taiteen alan, nimittäin ASCII-taiteen.
+Siinä kuva esitetään raakatekstin tarjoamien merk-
+kien puitteissa. Yksinkertaisia kaaviokuvia on
+tietyissä tapauksissa varsin helppokin piirtää:
+ ________________________________
+ | |
+ | H H H CH3 |
+ | | | | \ |
+ | H - C - C - C - OH C = O |
+ | | | | | |
+ | H H H OH |
+ |________________________________|
+ Propanoli ja etaanihappo
+ _____________________
+ | _ |
+ | v |
+ | ---------> |
+ | |
+ | ^ _ |
+ | | N |
+ | | |
+ | | |
+ | ___|___ |
+ | | | |
+ | _ <--| | |
+ | Fµ | | | |
+ | _____|___|___|_____ |
+ | | _ |
+ | | G |
+ | v |
+ |_____________________|
+ Liukuva kappale
+
+ (huom. kuvien näkemiseksi selaimesi on käytettävä
+ tiedoston näyttämiseen tasavälistä fonttia)
+
+Kaaviokuvien lisäksi on myös ASCII-taidetta, jossa
+paino on nimenomaan sanalla 'taide'. Netistä löy-
+tyy paljon ASCII-taiteen kokoelmia, esimerkiksi
+osoitteesta `https://www.asciiart.eu` ja
+`https://ascii.mozz.us:7070`.
+
+Tekstin arvaamattoman kauneuden, sen tehokkuuden
+ja vähän turhan informaation vuoksi internetissä
+on syntynyt uusia yhteisöjä ja protokollia raaka-
+tekstin ympärille. Ylläpidän itse esimerkiksi
+geminikapselia osoitteessa
+“gemini://gemini.jorl.fi”. Geminin kuvauksen
+ensimmäinen lause on vapaasti suomennettuna:
+“Gemini on uusi, yhteenlinkitettyjä tekstidoku-
+mentteja tukeva internet-teknologia.” [2] Muitakin
+protokollia ja yhteisöjä on, joista hyvän otoksen
+saa esimerkiksi Michael Lazarin kotisivujen etusi-
+vulta `https://mozz.us`.
+
+Lopulta on myös huomioitava, että käytännössä
+kaikki tietokoneohjelmat kirjoitetaan raakateks-
+tinä. Projektieni tiedostot ovat luettavissa
+netissä tekstinä. [3] (Ja kuka kirjoittaisi tieto-
+koneohjelmia Wordilla? Siitä on olemassa jopa
+satiirinen Youtube-video! [4]) Suuri osa tiedonvä-
+litysprotokollista on määritelty raakateksti
+lähtökohtana. Raakateksti siis muodostaa tietoko-
+neiden ja laskennan selkärangan.
+
+Jos tahdomme oppia käyttämään tietokoneita tehok-
+kaammin ja sulavammin, tulisi raakatestistä ja
+sen käsittelystä siis tehdä normi eikä pelottavien
+hakkerien tapa. Näin myös ymmärtäisimme paremmin
+tietokoneita — ja ehkä löytäisimme osan tekstin
+kadotettua kauneutta.
+
+
+ Viitteet
+ --------
+
+[1] https://en.wikipedia.org/w/index.php?title=Pipeline_(Unix)&oldid=1219096916#Example
+[2] https://geminiprotocol.net
+ gemini://geminiprotocol.net
+[3] Esim. https://jorl.fi/git/stdu/Makefile
+[4] https://www.youtube.com/watch?v=X34ZmkeZDos
diff --git a/generated/fi/index.html b/generated/fi/index.html
new file mode 100644
index 0000000..f1a1013
--- /dev/null
+++ b/generated/fi/index.html
@@ -0,0 +1,221 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="fi" xml:lang="fi">
+<head>
+<!-- 2026-06-14 Sun 12:20 -->
+<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1" />
+<title>Joel Kronqvist</title>
+<meta name="author" content="Joel Kronqvist" />
+<meta name="generator" content="Org Mode" />
+<style type="text/css">
+ #content { max-width: 60em; margin: auto; }
+ .title { text-align: center;
+ margin-bottom: .2em; }
+ .subtitle { text-align: center;
+ font-size: medium;
+ font-weight: bold;
+ margin-top:0; }
+ .todo { font-family: monospace; color: red; }
+ .done { font-family: monospace; color: green; }
+ .priority { font-family: monospace; color: orange; }
+ .tag { background-color: #eee; font-family: monospace;
+ padding: 2px; font-size: 80%; font-weight: normal; }
+ .timestamp { color: #bebebe; }
+ .timestamp-kwd { color: #5f9ea0; }
+ .org-right { margin-left: auto; margin-right: 0px; text-align: right; }
+ .org-left { margin-left: 0px; margin-right: auto; text-align: left; }
+ .org-center { margin-left: auto; margin-right: auto; text-align: center; }
+ .underline { text-decoration: underline; }
+ #postamble p, #preamble p { font-size: 90%; margin: .2em; }
+ p.verse { margin-left: 3%; }
+ pre {
+ border: 1px solid #e6e6e6;
+ border-radius: 3px;
+ background-color: #f2f2f2;
+ padding: 8pt;
+ font-family: monospace;
+ overflow: auto;
+ margin: 1.2em;
+ }
+ pre.src {
+ position: relative;
+ overflow: auto;
+ }
+ pre.src:before {
+ display: none;
+ position: absolute;
+ top: -8px;
+ right: 12px;
+ padding: 3px;
+ color: #555;
+ background-color: #f2f2f299;
+ }
+ pre.src:hover:before { display: inline; margin-top: 14px;}
+ /* Languages per Org manual */
+ pre.src-asymptote:before { content: 'Asymptote'; }
+ pre.src-awk:before { content: 'Awk'; }
+ pre.src-authinfo::before { content: 'Authinfo'; }
+ pre.src-C:before { content: 'C'; }
+ /* pre.src-C++ doesn't work in CSS */
+ pre.src-clojure:before { content: 'Clojure'; }
+ pre.src-css:before { content: 'CSS'; }
+ pre.src-D:before { content: 'D'; }
+ pre.src-ditaa:before { content: 'ditaa'; }
+ pre.src-dot:before { content: 'Graphviz'; }
+ pre.src-calc:before { content: 'Emacs Calc'; }
+ pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
+ pre.src-fortran:before { content: 'Fortran'; }
+ pre.src-gnuplot:before { content: 'gnuplot'; }
+ pre.src-haskell:before { content: 'Haskell'; }
+ pre.src-hledger:before { content: 'hledger'; }
+ pre.src-java:before { content: 'Java'; }
+ pre.src-js:before { content: 'Javascript'; }
+ pre.src-latex:before { content: 'LaTeX'; }
+ pre.src-ledger:before { content: 'Ledger'; }
+ pre.src-lisp:before { content: 'Lisp'; }
+ pre.src-lilypond:before { content: 'Lilypond'; }
+ pre.src-lua:before { content: 'Lua'; }
+ pre.src-matlab:before { content: 'MATLAB'; }
+ pre.src-mscgen:before { content: 'Mscgen'; }
+ pre.src-ocaml:before { content: 'Objective Caml'; }
+ pre.src-octave:before { content: 'Octave'; }
+ pre.src-org:before { content: 'Org mode'; }
+ pre.src-oz:before { content: 'OZ'; }
+ pre.src-plantuml:before { content: 'Plantuml'; }
+ pre.src-processing:before { content: 'Processing.js'; }
+ pre.src-python:before { content: 'Python'; }
+ pre.src-R:before { content: 'R'; }
+ pre.src-ruby:before { content: 'Ruby'; }
+ pre.src-sass:before { content: 'Sass'; }
+ pre.src-scheme:before { content: 'Scheme'; }
+ pre.src-screen:before { content: 'Gnu Screen'; }
+ pre.src-sed:before { content: 'Sed'; }
+ pre.src-sh:before { content: 'shell'; }
+ pre.src-sql:before { content: 'SQL'; }
+ pre.src-sqlite:before { content: 'SQLite'; }
+ /* additional languages in org.el's org-babel-load-languages alist */
+ pre.src-forth:before { content: 'Forth'; }
+ pre.src-io:before { content: 'IO'; }
+ pre.src-J:before { content: 'J'; }
+ pre.src-makefile:before { content: 'Makefile'; }
+ pre.src-maxima:before { content: 'Maxima'; }
+ pre.src-perl:before { content: 'Perl'; }
+ pre.src-picolisp:before { content: 'Pico Lisp'; }
+ pre.src-scala:before { content: 'Scala'; }
+ pre.src-shell:before { content: 'Shell Script'; }
+ pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
+ /* additional language identifiers per "defun org-babel-execute"
+ in ob-*.el */
+ pre.src-cpp:before { content: 'C++'; }
+ pre.src-abc:before { content: 'ABC'; }
+ pre.src-coq:before { content: 'Coq'; }
+ pre.src-groovy:before { content: 'Groovy'; }
+ /* additional language identifiers from org-babel-shell-names in
+ ob-shell.el: ob-shell is the only babel language using a lambda to put
+ the execution function name together. */
+ pre.src-bash:before { content: 'bash'; }
+ pre.src-csh:before { content: 'csh'; }
+ pre.src-ash:before { content: 'ash'; }
+ pre.src-dash:before { content: 'dash'; }
+ pre.src-ksh:before { content: 'ksh'; }
+ pre.src-mksh:before { content: 'mksh'; }
+ pre.src-posh:before { content: 'posh'; }
+ /* Additional Emacs modes also supported by the LaTeX listings package */
+ pre.src-ada:before { content: 'Ada'; }
+ pre.src-asm:before { content: 'Assembler'; }
+ pre.src-caml:before { content: 'Caml'; }
+ pre.src-delphi:before { content: 'Delphi'; }
+ pre.src-html:before { content: 'HTML'; }
+ pre.src-idl:before { content: 'IDL'; }
+ pre.src-mercury:before { content: 'Mercury'; }
+ pre.src-metapost:before { content: 'MetaPost'; }
+ pre.src-modula-2:before { content: 'Modula-2'; }
+ pre.src-pascal:before { content: 'Pascal'; }
+ pre.src-ps:before { content: 'PostScript'; }
+ pre.src-prolog:before { content: 'Prolog'; }
+ pre.src-simula:before { content: 'Simula'; }
+ pre.src-tcl:before { content: 'tcl'; }
+ pre.src-tex:before { content: 'TeX'; }
+ pre.src-plain-tex:before { content: 'Plain TeX'; }
+ pre.src-verilog:before { content: 'Verilog'; }
+ pre.src-vhdl:before { content: 'VHDL'; }
+ pre.src-xml:before { content: 'XML'; }
+ pre.src-nxml:before { content: 'XML'; }
+ /* add a generic configuration mode; LaTeX export needs an additional
+ (add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
+ pre.src-conf:before { content: 'Configuration File'; }
+
+ table { border-collapse:collapse; }
+ caption.t-above { caption-side: top; }
+ caption.t-bottom { caption-side: bottom; }
+ td, th { vertical-align:top; }
+ th.org-right { text-align: center; }
+ th.org-left { text-align: center; }
+ th.org-center { text-align: center; }
+ td.org-right { text-align: right; }
+ td.org-left { text-align: left; }
+ td.org-center { text-align: center; }
+ dt { font-weight: bold; }
+ .footpara { display: inline; }
+ .footdef { margin-bottom: 1em; }
+ .figure { padding: 1em; }
+ .figure p { text-align: center; }
+ .equation-container {
+ display: table;
+ text-align: center;
+ width: 100%;
+ }
+ .equation {
+ vertical-align: middle;
+ }
+ .equation-label {
+ display: table-cell;
+ text-align: right;
+ vertical-align: middle;
+ }
+ .inlinetask {
+ padding: 10px;
+ border: 2px solid gray;
+ margin: 10px;
+ background: #ffffcc;
+ }
+ #org-div-home-and-up
+ { text-align: right; font-size: 70%; white-space: nowrap; }
+ textarea { overflow-x: auto; }
+ .linenr { font-size: smaller }
+ .code-highlighted { background-color: #ffff00; }
+ .org-info-js_info-navigation { border-style: none; }
+ #org-info-js_console-label
+ { font-size: 10px; font-weight: bold; white-space: nowrap; }
+ .org-info-js_search-highlight
+ { background-color: #ffff00; color: #000000; font-weight: bold; }
+ .org-svg { }
+</style>
+<link rel="stylesheet"type="text/css" href="../../static/global.css">
+</head>
+<body>
+<div id="preamble" class="status">
+<header>
+<a id="skiptocontent" href="#content">Siirry pääsisältöön</a>
+<a href="/fi/">FI</a> · <a href="/en/">EN</a>
+</header>
+</div>
+<div id="content" class="content">
+<h1 class="title">Joel Kronqvist</h1>
+<p>
+Tervetuloa verkkosivuilleni! Löydät täältä seuraavaa:
+</p>
+
+<ul class="org-ul">
+<li><a href="./blog">Blogi</a></li>
+<li><a href="./pgp.html">Julkinen avaimeni</a></li>
+</ul>
+
+<p>
+Uudistin verkkosivut juuri, ja tietoa muutoksista löydät <a href="./blog/sivujen-uudistus.html">tästä blogipostauksesta</a>!
+</p>
+</div>
+</body>
+</html>
diff --git a/generated/fi/pgp.html b/generated/fi/pgp.html
new file mode 100644
index 0000000..32e3173
--- /dev/null
+++ b/generated/fi/pgp.html
@@ -0,0 +1,212 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="fi" xml:lang="fi">
+<head>
+<!-- 2026-06-14 Sun 12:20 -->
+<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1" />
+<title>Julkinen avaimeni</title>
+<meta name="author" content="Joel Kronqvist" />
+<meta name="generator" content="Org Mode" />
+<style type="text/css">
+ #content { max-width: 60em; margin: auto; }
+ .title { text-align: center;
+ margin-bottom: .2em; }
+ .subtitle { text-align: center;
+ font-size: medium;
+ font-weight: bold;
+ margin-top:0; }
+ .todo { font-family: monospace; color: red; }
+ .done { font-family: monospace; color: green; }
+ .priority { font-family: monospace; color: orange; }
+ .tag { background-color: #eee; font-family: monospace;
+ padding: 2px; font-size: 80%; font-weight: normal; }
+ .timestamp { color: #bebebe; }
+ .timestamp-kwd { color: #5f9ea0; }
+ .org-right { margin-left: auto; margin-right: 0px; text-align: right; }
+ .org-left { margin-left: 0px; margin-right: auto; text-align: left; }
+ .org-center { margin-left: auto; margin-right: auto; text-align: center; }
+ .underline { text-decoration: underline; }
+ #postamble p, #preamble p { font-size: 90%; margin: .2em; }
+ p.verse { margin-left: 3%; }
+ pre {
+ border: 1px solid #e6e6e6;
+ border-radius: 3px;
+ background-color: #f2f2f2;
+ padding: 8pt;
+ font-family: monospace;
+ overflow: auto;
+ margin: 1.2em;
+ }
+ pre.src {
+ position: relative;
+ overflow: auto;
+ }
+ pre.src:before {
+ display: none;
+ position: absolute;
+ top: -8px;
+ right: 12px;
+ padding: 3px;
+ color: #555;
+ background-color: #f2f2f299;
+ }
+ pre.src:hover:before { display: inline; margin-top: 14px;}
+ /* Languages per Org manual */
+ pre.src-asymptote:before { content: 'Asymptote'; }
+ pre.src-awk:before { content: 'Awk'; }
+ pre.src-authinfo::before { content: 'Authinfo'; }
+ pre.src-C:before { content: 'C'; }
+ /* pre.src-C++ doesn't work in CSS */
+ pre.src-clojure:before { content: 'Clojure'; }
+ pre.src-css:before { content: 'CSS'; }
+ pre.src-D:before { content: 'D'; }
+ pre.src-ditaa:before { content: 'ditaa'; }
+ pre.src-dot:before { content: 'Graphviz'; }
+ pre.src-calc:before { content: 'Emacs Calc'; }
+ pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
+ pre.src-fortran:before { content: 'Fortran'; }
+ pre.src-gnuplot:before { content: 'gnuplot'; }
+ pre.src-haskell:before { content: 'Haskell'; }
+ pre.src-hledger:before { content: 'hledger'; }
+ pre.src-java:before { content: 'Java'; }
+ pre.src-js:before { content: 'Javascript'; }
+ pre.src-latex:before { content: 'LaTeX'; }
+ pre.src-ledger:before { content: 'Ledger'; }
+ pre.src-lisp:before { content: 'Lisp'; }
+ pre.src-lilypond:before { content: 'Lilypond'; }
+ pre.src-lua:before { content: 'Lua'; }
+ pre.src-matlab:before { content: 'MATLAB'; }
+ pre.src-mscgen:before { content: 'Mscgen'; }
+ pre.src-ocaml:before { content: 'Objective Caml'; }
+ pre.src-octave:before { content: 'Octave'; }
+ pre.src-org:before { content: 'Org mode'; }
+ pre.src-oz:before { content: 'OZ'; }
+ pre.src-plantuml:before { content: 'Plantuml'; }
+ pre.src-processing:before { content: 'Processing.js'; }
+ pre.src-python:before { content: 'Python'; }
+ pre.src-R:before { content: 'R'; }
+ pre.src-ruby:before { content: 'Ruby'; }
+ pre.src-sass:before { content: 'Sass'; }
+ pre.src-scheme:before { content: 'Scheme'; }
+ pre.src-screen:before { content: 'Gnu Screen'; }
+ pre.src-sed:before { content: 'Sed'; }
+ pre.src-sh:before { content: 'shell'; }
+ pre.src-sql:before { content: 'SQL'; }
+ pre.src-sqlite:before { content: 'SQLite'; }
+ /* additional languages in org.el's org-babel-load-languages alist */
+ pre.src-forth:before { content: 'Forth'; }
+ pre.src-io:before { content: 'IO'; }
+ pre.src-J:before { content: 'J'; }
+ pre.src-makefile:before { content: 'Makefile'; }
+ pre.src-maxima:before { content: 'Maxima'; }
+ pre.src-perl:before { content: 'Perl'; }
+ pre.src-picolisp:before { content: 'Pico Lisp'; }
+ pre.src-scala:before { content: 'Scala'; }
+ pre.src-shell:before { content: 'Shell Script'; }
+ pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
+ /* additional language identifiers per "defun org-babel-execute"
+ in ob-*.el */
+ pre.src-cpp:before { content: 'C++'; }
+ pre.src-abc:before { content: 'ABC'; }
+ pre.src-coq:before { content: 'Coq'; }
+ pre.src-groovy:before { content: 'Groovy'; }
+ /* additional language identifiers from org-babel-shell-names in
+ ob-shell.el: ob-shell is the only babel language using a lambda to put
+ the execution function name together. */
+ pre.src-bash:before { content: 'bash'; }
+ pre.src-csh:before { content: 'csh'; }
+ pre.src-ash:before { content: 'ash'; }
+ pre.src-dash:before { content: 'dash'; }
+ pre.src-ksh:before { content: 'ksh'; }
+ pre.src-mksh:before { content: 'mksh'; }
+ pre.src-posh:before { content: 'posh'; }
+ /* Additional Emacs modes also supported by the LaTeX listings package */
+ pre.src-ada:before { content: 'Ada'; }
+ pre.src-asm:before { content: 'Assembler'; }
+ pre.src-caml:before { content: 'Caml'; }
+ pre.src-delphi:before { content: 'Delphi'; }
+ pre.src-html:before { content: 'HTML'; }
+ pre.src-idl:before { content: 'IDL'; }
+ pre.src-mercury:before { content: 'Mercury'; }
+ pre.src-metapost:before { content: 'MetaPost'; }
+ pre.src-modula-2:before { content: 'Modula-2'; }
+ pre.src-pascal:before { content: 'Pascal'; }
+ pre.src-ps:before { content: 'PostScript'; }
+ pre.src-prolog:before { content: 'Prolog'; }
+ pre.src-simula:before { content: 'Simula'; }
+ pre.src-tcl:before { content: 'tcl'; }
+ pre.src-tex:before { content: 'TeX'; }
+ pre.src-plain-tex:before { content: 'Plain TeX'; }
+ pre.src-verilog:before { content: 'Verilog'; }
+ pre.src-vhdl:before { content: 'VHDL'; }
+ pre.src-xml:before { content: 'XML'; }
+ pre.src-nxml:before { content: 'XML'; }
+ /* add a generic configuration mode; LaTeX export needs an additional
+ (add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
+ pre.src-conf:before { content: 'Configuration File'; }
+
+ table { border-collapse:collapse; }
+ caption.t-above { caption-side: top; }
+ caption.t-bottom { caption-side: bottom; }
+ td, th { vertical-align:top; }
+ th.org-right { text-align: center; }
+ th.org-left { text-align: center; }
+ th.org-center { text-align: center; }
+ td.org-right { text-align: right; }
+ td.org-left { text-align: left; }
+ td.org-center { text-align: center; }
+ dt { font-weight: bold; }
+ .footpara { display: inline; }
+ .footdef { margin-bottom: 1em; }
+ .figure { padding: 1em; }
+ .figure p { text-align: center; }
+ .equation-container {
+ display: table;
+ text-align: center;
+ width: 100%;
+ }
+ .equation {
+ vertical-align: middle;
+ }
+ .equation-label {
+ display: table-cell;
+ text-align: right;
+ vertical-align: middle;
+ }
+ .inlinetask {
+ padding: 10px;
+ border: 2px solid gray;
+ margin: 10px;
+ background: #ffffcc;
+ }
+ #org-div-home-and-up
+ { text-align: right; font-size: 70%; white-space: nowrap; }
+ textarea { overflow-x: auto; }
+ .linenr { font-size: smaller }
+ .code-highlighted { background-color: #ffff00; }
+ .org-info-js_info-navigation { border-style: none; }
+ #org-info-js_console-label
+ { font-size: 10px; font-weight: bold; white-space: nowrap; }
+ .org-info-js_search-highlight
+ { background-color: #ffff00; color: #000000; font-weight: bold; }
+ .org-svg { }
+</style>
+<link rel="stylesheet"type="text/css" href="../../static/global.css">
+</head>
+<body>
+<div id="preamble" class="status">
+<header>
+<a id="skiptocontent" href="#content">Siirry pääsisältöön</a>
+<a href="/fi/">FI</a> · <a href="/en/">EN</a>
+</header>
+</div>
+<div id="content" class="content">
+<h1 class="title">Julkinen avaimeni</h1>
+<div id="outline-container-org7f3a04a" class="outline-2">
+<h2 id="org7f3a04a"><span class="todo TODO">TODO</span> Lisää sisältö vanhoilta verkkosivuilta</h2>
+</div>
+</div>
+</body>
+</html>