diff options
23 files changed, 152 insertions, 104 deletions
diff --git a/blog/2015/hello-world.rst b/blog/2015/hello-world.rst index ce70a17..b93fb4e 100644 --- a/blog/2015/hello-world.rst +++ b/blog/2015/hello-world.rst | |||
@@ -6,9 +6,10 @@ Colorizing countries I have visited and can remember :) | |||
6 | This is just to demonstrate my new static blog and web engine nikola | 6 | This is just to demonstrate my new static blog and web engine nikola |
7 | 7 | ||
8 | .. chart:: maps.world.World | 8 | .. chart:: maps.world.World |
9 | :title: "Reise" | ||
9 | :stroke: False | 10 | :stroke: False |
10 | :style: RotateStyle('#de3804', step=12, background='#fff', plot_background='#fff', foreground='#eee' ) | 11 | :style: RotateStyle('#de3804', step=12, background='#fff', plot_background='#fff', foreground='#eee' ) |
11 | :js: '' | 12 | :js: [''] |
12 | 13 | ||
13 | 'Trip', ['nz', 'au', 'ar', 'cz', 'th', 'cu', 'rw', 'ch', 'pl', 'ma', 'se', 'fi', 'is', 'ee', 'nl', 'it' ] | 14 | 'Trip', ['nz', 'au', 'ar', 'cz', 'th', 'cu', 'rw', 'ch', 'pl', 'ma', 'se', 'fi', 'is', 'ee', 'nl', 'it' ] |
14 | 'Transit', [ 'ae', 'cn', 'ru', 'nc', 'br', 'si' ] | 15 | 'Transit', [ 'ae', 'cn', 'ru', 'nc', 'br', 'si' ] |
diff --git a/blog/2015/write-the-flogging-manual.rst b/blog/2015/write-the-flogging-manual.rst index 278eb9f..f887478 100644 --- a/blog/2015/write-the-flogging-manual.rst +++ b/blog/2015/write-the-flogging-manual.rst | |||
@@ -1,7 +1,11 @@ | |||
1 | .. date: 2015/03/15 18:00 | 1 | .. date: 2015/03/15 18:00 |
2 | .. title: Write the flogging manual | 2 | .. title: Write the flogging manual |
3 | 3 | ||
4 | More than thirteen years ago I set up my personal website. Proudly aligning everything with tables, hand writing HTML with :del:`pico` vi, using "clever" apache server side includes to inherit styles from parent directories and making everything so artsy bordering unreadability. And while in the beginning writing in HTML seemed fun, in the end it became so tedious, that updating the blog came to a grinding halt (we're all not getting younger). | 4 | More than thirteen years ago I set up my personal website. Proudly aligning everything with tables, hand writing HTML with |
5 | .. raw:: html | ||
6 | <del><code>pico</code></del> | ||
7 | |||
8 | vi, using "clever" apache server side includes to inherit styles from parent directories and making everything so artsy bordering unreadability. And while in the beginning writing in HTML seemed fun, in the end it became so tedious, that updating the blog came to a grinding halt (we're all not getting younger). | ||
5 | 9 | ||
6 | So in order to be able to publish again, I needed something more seasonable, with a responsive theme and simple enough to last another thirteen years. But my site accumulated so much cruft others depended on, replacing the apache alone with something more modern seemed unfeasible. Yet, my rather static content would best be served as static files by a *simple* web server – using an insecure scripting language on top of a complex database setup was completely out of the question. I once went through the pain of setting up and maintaining a wordpress site for my dad, there's no need to repeat that agony for something I'd like to use on a daily basis. | 10 | So in order to be able to publish again, I needed something more seasonable, with a responsive theme and simple enough to last another thirteen years. But my site accumulated so much cruft others depended on, replacing the apache alone with something more modern seemed unfeasible. Yet, my rather static content would best be served as static files by a *simple* web server – using an insecure scripting language on top of a complex database setup was completely out of the question. I once went through the pain of setting up and maintaining a wordpress site for my dad, there's no need to repeat that agony for something I'd like to use on a daily basis. |
7 | 11 | ||
diff --git a/files/arts/software/opentracker/opentracker-1.0.tar.bz2 b/files/arts/software/opentracker/opentracker-1.0.tar.bz2 new file mode 100644 index 0000000..356a51a --- /dev/null +++ b/files/arts/software/opentracker/opentracker-1.0.tar.bz2 | |||
Binary files differ | |||
diff --git a/stories/index.rst b/stories/index.rst index f0b86a3..ec01227 100644 --- a/stories/index.rst +++ b/stories/index.rst | |||
@@ -25,7 +25,7 @@ Software projects | |||
25 | ================= | 25 | ================= |
26 | 26 | ||
27 | .. post-list:: | 27 | .. post-list:: |
28 | :all: | 28 | :post_type: all |
29 | :tags: project | 29 | :tags: project |
30 | :template: list_projects.tmpl | 30 | :template: list_projects.tmpl |
31 | :id: projects | 31 | :id: projects |
diff --git a/stories/music/Sven.rst b/stories/music/Sven.rst index d762be0..2689c71 100644 --- a/stories/music/Sven.rst +++ b/stories/music/Sven.rst | |||
@@ -3,7 +3,7 @@ | |||
3 | .. tags: Liedermacher | 3 | .. tags: Liedermacher |
4 | .. date: 1996/08/03 19:10:08 | 4 | .. date: 1996/08/03 19:10:08 |
5 | .. title: Sven | 5 | .. title: Sven |
6 | .. slug: ../arts/music/Sven | 6 | .. slug: ../arts/music/Sven/index.html |
7 | 7 | ||
8 | .. role:: raw-html(raw) | 8 | .. role:: raw-html(raw) |
9 | :format: html | 9 | :format: html |
diff --git a/stories/music/index.rst b/stories/music/index.rst index 2d46eda..dd950b2 100644 --- a/stories/music/index.rst +++ b/stories/music/index.rst | |||
@@ -14,7 +14,7 @@ Liedermacher | |||
14 | ============ | 14 | ============ |
15 | 15 | ||
16 | .. post-list:: | 16 | .. post-list:: |
17 | :all: | 17 | :post_type: all |
18 | :tags: Liedermacher | 18 | :tags: Liedermacher |
19 | :id: singersongwriter | 19 | :id: singersongwriter |
20 | :template: list_poetry.tmpl | 20 | :template: list_poetry.tmpl |
@@ -29,7 +29,7 @@ Punk Rocker | |||
29 | A short and wild detour through amplified guitars. The band was `pumpanickle <http://pumpanickle.de>`_ and we even had a `music video <../arts/music/From_Me_To_You.html>`_. | 29 | A short and wild detour through amplified guitars. The band was `pumpanickle <http://pumpanickle.de>`_ and we even had a `music video <../arts/music/From_Me_To_You.html>`_. |
30 | 30 | ||
31 | .. post-list:: | 31 | .. post-list:: |
32 | :all: | 32 | :post_type: all |
33 | :tags: pumpanickle | 33 | :tags: pumpanickle |
34 | :id: band | 34 | :id: band |
35 | :template: list_poetry.tmpl | 35 | :template: list_poetry.tmpl |
diff --git a/stories/poetry/index.rst b/stories/poetry/index.rst index 8c3c125..3f0026d 100644 --- a/stories/poetry/index.rst +++ b/stories/poetry/index.rst | |||
@@ -7,7 +7,7 @@ | |||
7 | .. hidetitle: | 7 | .. hidetitle: |
8 | 8 | ||
9 | .. post-list:: | 9 | .. post-list:: |
10 | :all: | 10 | :post_type: all |
11 | :tags: poetry | 11 | :tags: poetry |
12 | :template: list_poetry.tmpl | 12 | :template: list_poetry.tmpl |
13 | :id: poetry | 13 | :id: poetry |
diff --git a/stories/projects/Telefonbuch.rst b/stories/projects/Telefonbuch.rst index c672da0..e3a7a66 100644 --- a/stories/projects/Telefonbuch.rst +++ b/stories/projects/Telefonbuch.rst | |||
@@ -3,7 +3,7 @@ | |||
3 | .. tags: project | 3 | .. tags: project |
4 | .. date: 2015/02/01 19:10:08 | 4 | .. date: 2015/02/01 19:10:08 |
5 | .. title: Telefonbuch | 5 | .. title: Telefonbuch |
6 | .. slug: ../arts/software/Telefonbuch/index | 6 | .. slug: ../arts/software/Telefonbuch |
7 | .. prio: 98 | 7 | .. prio: 98 |
8 | 8 | ||
9 | Die Deutsche Telekom bringt seit 1992 im praktischen CD- und später DVD-Format das Verzeichnis aller Fernsprechteilnehmer heraus. Über die Genese des Projekts, diese Daten zu exportieren, gibt es `einen Blogpost </posts/2008/datenmessie.html>`_ und zu den Innerein der vier verschiedenen Datenformate auf den CDs `ein wenig technische Dokumentation </gitweb/Telefonbuch/tree/README>`_. | 9 | Die Deutsche Telekom bringt seit 1992 im praktischen CD- und später DVD-Format das Verzeichnis aller Fernsprechteilnehmer heraus. Über die Genese des Projekts, diese Daten zu exportieren, gibt es `einen Blogpost </posts/2008/datenmessie.html>`_ und zu den Innerein der vier verschiedenen Datenformate auf den CDs `ein wenig technische Dokumentation </gitweb/Telefonbuch/tree/README>`_. |
diff --git a/stories/projects/anonbox.rst b/stories/projects/anonbox.rst index 404ddbb..51e08e3 100644 --- a/stories/projects/anonbox.rst +++ b/stories/projects/anonbox.rst | |||
@@ -3,5 +3,5 @@ | |||
3 | .. tags: project | 3 | .. tags: project |
4 | .. date: 2015/02/01 19:10:08 | 4 | .. date: 2015/02/01 19:10:08 |
5 | .. title: anonbox | 5 | .. title: anonbox |
6 | .. slug: ../arts/software/anonbox/index | 6 | .. slug: ../arts/software/anonbox |
7 | .. prio: 99 | 7 | .. prio: 99 |
diff --git a/stories/projects/el.rst b/stories/projects/el.rst index 8633181..a538f4d 100644 --- a/stories/projects/el.rst +++ b/stories/projects/el.rst | |||
@@ -4,7 +4,7 @@ | |||
4 | .. date: 2015/02/01 19:10:08 | 4 | .. date: 2015/02/01 19:10:08 |
5 | .. title: el | 5 | .. title: el |
6 | .. subtitle: extract lines from text files | 6 | .. subtitle: extract lines from text files |
7 | .. slug: ../arts/software/el/index | 7 | .. slug: ../arts/software/el |
8 | .. prio: 100 | 8 | .. prio: 100 |
9 | 9 | ||
10 | .. contents:: | 10 | .. contents:: |
diff --git a/stories/projects/elektropost.rst b/stories/projects/elektropost.rst index 1a04345..cedd7f7 100644 --- a/stories/projects/elektropost.rst +++ b/stories/projects/elektropost.rst | |||
@@ -4,7 +4,7 @@ | |||
4 | .. date: 2014/02/01 19:10:08 | 4 | .. date: 2014/02/01 19:10:08 |
5 | .. title: elektropost | 5 | .. title: elektropost |
6 | .. subtitle: a FreeBSD jail based mail server project. | 6 | .. subtitle: a FreeBSD jail based mail server project. |
7 | .. slug: ../arts/software/elektropost/index | 7 | .. slug: ../arts/software/elektropost |
8 | .. prio: 750 | 8 | .. prio: 750 |
9 | 9 | ||
10 | .. contents:: | 10 | .. contents:: |
@@ -70,7 +70,7 @@ Install dovecot | |||
70 | =============== | 70 | =============== |
71 | 71 | ||
72 | * ``make install`` in /usr/ports/mail/dovecot | 72 | * ``make install`` in /usr/ports/mail/dovecot |
73 | * choose option VPOPMAIL, keep the rest (maybe disable IPV6) | 73 | * choose option LUA, keep the rest (maybe disable IPV6) |
74 | * ``echo 'dovecot_enable="YES"' >> /etc/rc.conf`` | 74 | * ``echo 'dovecot_enable="YES"' >> /etc/rc.conf`` |
75 | 75 | ||
76 | ---- | 76 | ---- |
@@ -78,7 +78,7 @@ Install dovecot | |||
78 | Configure dovecot | 78 | Configure dovecot |
79 | ================= | 79 | ================= |
80 | 80 | ||
81 | * ``cp /usr/local/etc/dovecot-example.conf /usr/local/etc/dovecot.conf`` | 81 | * ``cp /usr/local/etc/dovecot/dovecot-example.conf /usr/local/etc/dovecot/dovecot.conf`` |
82 | * Change: protocols = imap imaps pop3s | 82 | * Change: protocols = imap imaps pop3s |
83 | * Change: listen = and ssl_listen = to match your ip addresses | 83 | * Change: listen = and ssl_listen = to match your ip addresses |
84 | * Change: ssl_cert_file = /var/qmail/control/servercert.pem | 84 | * Change: ssl_cert_file = /var/qmail/control/servercert.pem |
@@ -88,9 +88,43 @@ Configure dovecot | |||
88 | * Change: first_valid_gid = 1 | 88 | * Change: first_valid_gid = 1 |
89 | * Change: max_mail_processes = 1024 | 89 | * Change: max_mail_processes = 1024 |
90 | * Change: auth_username_format = %Ln@%Ld | 90 | * Change: auth_username_format = %Ln@%Ld |
91 | * Change: #passdb pam { and #} if you do not have local user mail | 91 | * Change:: |
92 | * Change: #userdb passwd { and #} if you do not have local user mail | 92 | |
93 | * Change: userdb vpopmail { and } to use vpopmail's vchkpw | 93 | passdb { |
94 | driver = lua | ||
95 | args = file=/usr/local/etc/dovecot/auth.lua blocking=yes # default is yes | ||
96 | } | ||
97 | userdb { | ||
98 | driver = lua | ||
99 | args = file=/usr/local/etc/dovecot/auth.lua blocking=yes # default is yes | ||
100 | } | ||
101 | |||
102 | Install the file http://erdgeist.org/arts/software/Code/elektropost/auth.lua in ``/usr/local/etc/dovecot/``, | ||
103 | |||
104 | .. code-block:: | ||
105 | |||
106 | function auth_password_verify(req, pass) | ||
107 | local handle = io.popen("/usr/local/vpopmail/bin/vuserinfo -p "..req.user) | ||
108 | local result = handle:read("*a") | ||
109 | handle:close() | ||
110 | |||
111 | local epass = result:match "^%s*(.-)%s*$" | ||
112 | if req:password_verify("{MD5-CRYPT}"..epass,pass) > 0 then | ||
113 | return dovecot.auth.PASSDB_RESULT_OK, {} | ||
114 | end | ||
115 | return dovecot.auth.PASSDB_RESULT_PASSWORD_MISMATCH, {} | ||
116 | end | ||
117 | |||
118 | function auth_userdb_lookup(req) | ||
119 | local handle = io.popen("/usr/local/vpopmail/bin/vuserinfo -d "..req.user) | ||
120 | local result = handle:read("*a") | ||
121 | handle:close() | ||
122 | |||
123 | if result:find("no such user") ~= nil then | ||
124 | return dovecot.auth.USERDB_RESULT_USER_UNKNOWN, "no such user" | ||
125 | end | ||
126 | return dovecot.auth.USERDB_RESULT_OK, "uid=vpopmail gid=vchkpw home="..result:match "^%s*(.-)%s*$" | ||
127 | end | ||
94 | 128 | ||
95 | ---- | 129 | ---- |
96 | 130 | ||
diff --git a/stories/projects/etherpad.rst b/stories/projects/etherpad.rst index cc75def..aae7364 100644 --- a/stories/projects/etherpad.rst +++ b/stories/projects/etherpad.rst | |||
@@ -3,7 +3,7 @@ | |||
3 | .. tags: project | 3 | .. tags: project |
4 | .. date: 2015/02/01 19:10:08 | 4 | .. date: 2015/02/01 19:10:08 |
5 | .. title: etherpad | 5 | .. title: etherpad |
6 | .. slug: ../arts/software/etherpad/index | 6 | .. slug: ../arts/software/etherpad |
7 | 7 | ||
8 | .. contents:: | 8 | .. contents:: |
9 | :depth: 1 | 9 | :depth: 1 |
diff --git a/stories/projects/ezjail.rst b/stories/projects/ezjail.rst index 955baa6..c4494a2 100644 --- a/stories/projects/ezjail.rst +++ b/stories/projects/ezjail.rst | |||
@@ -4,7 +4,7 @@ | |||
4 | .. date: 2000/02/01 19:10:08 | 4 | .. date: 2000/02/01 19:10:08 |
5 | .. title: ezjail | 5 | .. title: ezjail |
6 | .. subtitle: Jail administration framework | 6 | .. subtitle: Jail administration framework |
7 | .. slug: ../arts/software/ezjail/index | 7 | .. slug: ../arts/software/ezjail |
8 | .. prio: 900 | 8 | .. prio: 900 |
9 | 9 | ||
10 | .. contents:: | 10 | .. contents:: |
@@ -27,8 +27,8 @@ News | |||
27 | 27 | ||
28 | .. post-list:: | 28 | .. post-list:: |
29 | :tags: ezjail | 29 | :tags: ezjail |
30 | :template: list_projectnews.tmpl | ||
31 | :stop: 5 | 30 | :stop: 5 |
31 | :template: list_projectnews.tmpl | ||
32 | 32 | ||
33 | ---- | 33 | ---- |
34 | 34 | ||
diff --git a/stories/projects/jaildaemon.rst b/stories/projects/jaildaemon.rst index cc818e3..e49a281 100644 --- a/stories/projects/jaildaemon.rst +++ b/stories/projects/jaildaemon.rst | |||
@@ -3,7 +3,7 @@ | |||
3 | .. date: 2015/02/18 19:10:08 | 3 | .. date: 2015/02/18 19:10:08 |
4 | .. title: jaildaemon | 4 | .. title: jaildaemon |
5 | .. subtitle: A fixed command-line interface for FreeBSD jails to their host system | 5 | .. subtitle: A fixed command-line interface for FreeBSD jails to their host system |
6 | .. slug: ../arts/software/jaildaemon/index | 6 | .. slug: ../arts/software/jaildaemon |
7 | .. prio: 850 | 7 | .. prio: 850 |
8 | 8 | ||
9 | .. contents:: | 9 | .. contents:: |
@@ -63,6 +63,18 @@ Now, from within that Jail, reboot via ``pkill -HUP -f REBOOT``. | |||
63 | Version history | 63 | Version history |
64 | =============== | 64 | =============== |
65 | 65 | ||
66 | * Version 0.5: | ||
67 | |||
68 | * Fix the IPC packet size to match with system's net.local.dgram.maxdgram, which defaults to 2048 | ||
69 | |||
70 | * Version 0.4: | ||
71 | |||
72 | * Fix a bug where proctitle length was not parsed from the correct field | ||
73 | |||
74 | * Version 0.3: | ||
75 | |||
76 | * Add a -g switch to allow *jaildaemon* to be passed a gid. | ||
77 | |||
66 | * Version 0.2: | 78 | * Version 0.2: |
67 | 79 | ||
68 | * Fixed a bug where *jaildaemon* when run from /etc/rc would ignore SIGHUP by default. | 80 | * Fixed a bug where *jaildaemon* when run from /etc/rc would ignore SIGHUP by default. |
diff --git a/stories/projects/minimunin.rst b/stories/projects/minimunin.rst index 07cc2ff..07a4a56 100644 --- a/stories/projects/minimunin.rst +++ b/stories/projects/minimunin.rst | |||
@@ -4,7 +4,7 @@ | |||
4 | .. date: 2015/02/01 19:10:08 | 4 | .. date: 2015/02/01 19:10:08 |
5 | .. title: minimunin | 5 | .. title: minimunin |
6 | .. subtitle: A tiny munin-node implementation for FreeBSD written in pure bourne shell providing basic plugin support | 6 | .. subtitle: A tiny munin-node implementation for FreeBSD written in pure bourne shell providing basic plugin support |
7 | .. slug: ../arts/software/minimunin/index | 7 | .. slug: ../arts/software/minimunin |
8 | .. prio: 800 | 8 | .. prio: 800 |
9 | 9 | ||
10 | .. contents:: | 10 | .. contents:: |
@@ -29,7 +29,7 @@ Code | |||
29 | .. image:: http://www.freebsd.org/gifs/daemon_hammer-tn25.jpg | 29 | .. image:: http://www.freebsd.org/gifs/daemon_hammer-tn25.jpg |
30 | :align: right | 30 | :align: right |
31 | 31 | ||
32 | You can always get the latest version of *minimunin*, use ``git clone git://erdgeist.org/minimunin`` or the legacy view ``cvs -d :pserver:anoncvs@cvs.erdgeist.org:/home/cvsroot co minimunin`` with an empty password to check it out. There is a `minimunin tarball <minimunin-0.5.tar.bz2>`_. You can scroll through the source at `minimunin gitweb </gitweb/minimunin>`_ or `minimunin cvsweb (deprecated) </cvsweb/minimunin>`_. Typing ``make install`` installs the binary in your ``${PREFIX}/bin`` (or ``/usr/local``, if none is set). | 32 | You can always get the latest version of *minimunin*, use ``git clone git://erdgeist.org/minimunin`` or the legacy view ``cvs -d :pserver:anoncvs@cvs.erdgeist.org:/home/cvsroot co minimunin`` with an empty password to check it out. There is a `minimunin tarball <minimunin-0.6.tar.bz2>`_. You can scroll through the source at `minimunin gitweb </gitweb/minimunin>`_ or `minimunin cvsweb (deprecated) </cvsweb/minimunin>`_. Typing ``make install`` installs the binary in your ``${PREFIX}/bin`` (or ``/usr/local``, if none is set). |
33 | 33 | ||
34 | ---- | 34 | ---- |
35 | 35 | ||
@@ -62,6 +62,12 @@ munin plugins `can be configured with ini-file style config files <http://munin- | |||
62 | Version history | 62 | Version history |
63 | =============== | 63 | =============== |
64 | 64 | ||
65 | * V0.6 `minimunin-0.6.tar.bz2 <minimunin-0.6.tar.bz2>`_ (2024-12-08) | ||
66 | |||
67 | * Add a ``cap`` and ``version`` command. | ||
68 | * Use two digit precision for uptime. | ||
69 | * Fix `user` and `command` inside a plugin config section taken from a previous section. | ||
70 | |||
65 | * V0.5 `minimunin-0.5.tar.bz2 <minimunin-0.5.tar.bz2>`_ (2019-09-11) | 71 | * V0.5 `minimunin-0.5.tar.bz2 <minimunin-0.5.tar.bz2>`_ (2019-09-11) |
66 | 72 | ||
67 | * Fix broken plugin list. Thanks to Alexander Moisseev. | 73 | * Fix broken plugin list. Thanks to Alexander Moisseev. |
diff --git a/stories/projects/opentracker.rst b/stories/projects/opentracker.rst index d269fca..11005cb 100644 --- a/stories/projects/opentracker.rst +++ b/stories/projects/opentracker.rst | |||
@@ -4,7 +4,7 @@ | |||
4 | .. date: 2015/02/19 19:10:08 | 4 | .. date: 2015/02/19 19:10:08 |
5 | .. title: opentracker | 5 | .. title: opentracker |
6 | .. subtitle: An open and free bittorrent tracker | 6 | .. subtitle: An open and free bittorrent tracker |
7 | .. slug: ../arts/software/opentracker/index | 7 | .. slug: ../arts/software/opentracker |
8 | .. prio: 1000 | 8 | .. prio: 1000 |
9 | 9 | ||
10 | .. contents:: | 10 | .. contents:: |
@@ -26,14 +26,28 @@ | |||
26 | Overview | 26 | Overview |
27 | ======== | 27 | ======== |
28 | 28 | ||
29 | *opentracker* is a open and free `bittorrent tracker <http://wiki.theory.org/BitTorrentSpecification>`_ project. It aims for minimal resource usage and is intended to run at your wlan router. Currently it is deployed as an open and free tracker instance. Read our `free and open tracker blog <http://opentracker.blog.h3q.com/>`_ and announce your torrents there (but do not hesitate to setup your own free trackers!). | 29 | *opentracker* is an open and free `bittorrent tracker <http://wiki.theory.org/BitTorrentSpecification>`_ project. It aims for minimal resource usage and is intended to run at your wlan router. Currently it is deployed as an open and free tracker instance. Read our `free and open tracker blog <http://opentracker.blog.h3q.com/>`_ and announce your torrents there (but do not hesitate to setup your own free trackers!). |
30 | 30 | ||
31 | ---- | 31 | ---- |
32 | 32 | ||
33 | Version History | 33 | Version History |
34 | =============== | 34 | =============== |
35 | 35 | ||
36 | *opentracker* is currently only available from CVS. A tar ball will be rolled soon. Use ``git clone git://erdgeist.org/opentracker`` or the legacy view ``cvs -d :pserver:anoncvs@cvs.erdgeist.org:/home/cvsroot co opentracker`` with an empty passwort to check it out. An `*opentracker* gitweb </gitweb/opentracker/>`_ and an `*opentracker* cvsweb (deprecated) </cvsweb/opentracker/>`_ are available. | 36 | Use ``git clone git://erdgeist.org/opentracker`` to check it out. An *opentracker* `gitweb </gitweb/opentracker/>`_ is available. |
37 | |||
38 | * CURRENT - not packaged yet | ||
39 | * V1.0 `<opentracker-1.0.tar.bz2>`_ (2025-01-01) | ||
40 | |||
41 | * After 18 years of development, a v1.0 was released. | ||
42 | * It requires libowfat version >= 0.34. | ||
43 | * Since April 2024, opentracker supports IPv4 and IPv6 peers in a single tracker. | ||
44 | |||
45 | * With TCP announces, both IPv4 and IPv6 peers will now be returned. | ||
46 | * Proxy addresses can be networks in CIDR notation now. | ||
47 | * For trackers with many insertions and deletions in black/white lists, dynamic access lists were introduced, with fifo allowing to add or delete torrents. | ||
48 | * Full scrapes and other data intense queries are now delivered using chunked http transfers, allowing generating them on the fly, saving a lot of memory. Also they are compressed by default now. | ||
49 | * UDP replies on the IPv6 side are now limited to amounts of peers that will not cause fragmentation on most routers. | ||
50 | * Better prevent expensive stats operations to be triggered by accident. Some torrents included a stats URL as announce URL. | ||
37 | 51 | ||
38 | ---- | 52 | ---- |
39 | 53 | ||
@@ -46,7 +60,6 @@ Until *opentracker* is declared official release ready, the way to install it is | |||
46 | cd libowfat | 60 | cd libowfat |
47 | make | 61 | make |
48 | cd .. | 62 | cd .. |
49 | # LEGACY: cvs -d:pserver:anoncvs@cvs.erdgeist.org:/home/cvsroot co opentracker | ||
50 | git clone git://erdgeist.org/opentracker | 63 | git clone git://erdgeist.org/opentracker |
51 | cd opentracker | 64 | cd opentracker |
52 | make | 65 | make |
@@ -55,8 +68,10 @@ That should leave you with an exectuable called ``opentracker`` and one debug ve | |||
55 | 68 | ||
56 | Some variables in *opentracker*'s Makefile control features and behaviour of *opentracker*. Here they are: | 69 | Some variables in *opentracker*'s Makefile control features and behaviour of *opentracker*. Here they are: |
57 | 70 | ||
58 | * ``-DWANT_V6`` makes *opentracker* an IPv6-only tracker. More in the v6-section below. | 71 | * ``-DWANT_V4_ONLY`` makes *opentracker* bind only on IPv4 addresses. |
59 | * *opentracker* can deliver gzip compressed full scrapes. Enable this with ``-DWANT_COMPRESSION_GZIP`` option. | 72 | * *opentracker* can deliver gzip compressed full scrapes. Enable this with ``-DWANT_COMPRESSION_GZIP`` option (this is the default). |
73 | |||
74 | * To make *opentracker* deliver gzip compressed full scrapes always, enable the ``-DWANT_COMPRESSION_GZIP_ALWAY`` option (this is the default). | ||
60 | * Normally *opentracker* tracks any torrent announced to it. You can change that behaviour by enabling ONE of ``-DWANT_ACCESSLIST_BLACK`` or ``-DWANT_ACCESSLIST_WHITE``. Note, that you have to provide a whitelist file in order to make *opentracker* do anything in the latter case. More in the closed mode section below. | 75 | * Normally *opentracker* tracks any torrent announced to it. You can change that behaviour by enabling ONE of ``-DWANT_ACCESSLIST_BLACK`` or ``-DWANT_ACCESSLIST_WHITE``. Note, that you have to provide a whitelist file in order to make *opentracker* do anything in the latter case. More in the closed mode section below. |
61 | * *opentracker* can run in a cluster. Enable this behaviour by enabling ``-DWANT_SYNC_LIVE``. Note, that you have to configure your cluster before you can use *opentracker* when this option is on. | 76 | * *opentracker* can run in a cluster. Enable this behaviour by enabling ``-DWANT_SYNC_LIVE``. Note, that you have to configure your cluster before you can use *opentracker* when this option is on. |
62 | * Some statistics *opentracker* can provide are sensitive. You can restrict access to these statistics by enabling ``-DWANT_RESTRICT_STATS``. See section statistics for more details. | 77 | * Some statistics *opentracker* can provide are sensitive. You can restrict access to these statistics by enabling ``-DWANT_RESTRICT_STATS``. See section statistics for more details. |
@@ -70,7 +85,7 @@ Some variables in *opentracker*'s Makefile control features and behaviour of *op | |||
70 | Invocation | 85 | Invocation |
71 | ========== | 86 | ========== |
72 | 87 | ||
73 | *opentracker* can be run by just typing ``./opentracker``. This will make *opentracker* bind to ``0.0.0.0:6969`` and happily serve all torrents presented to it. If ran as root, *opentracker* will immediately chroot to . (or any directory given with the -d option) and drop all priviliges after binding to whatever tcp or udp ports it is requested. | 88 | *opentracker* can be run by just typing ``./opentracker``. This will make *opentracker* bind to ``0.0.0.0:6969`` and ``[::1]:6969`` and happily serve all torrents presented to it. If ran as root, *opentracker* will immediately chroot to . (or any directory given with the -d option) and drop all priviliges after binding to whatever tcp or udp ports it is requested. |
74 | 89 | ||
75 | When options were few, *opentracker* used to accept all of them from command line. While this still is possible for most options, using them is quite unhandy: an example invocation would look like ``./opentracker -i 23.23.23.7 -p 80 -P 80 -p 6969 -i 23.23.23.8 -p 80 -r http://www.mytorrentsite.com/ -d /usr/local/etc/opentracker -w mytorrents.list -A 127.0.0.1``. | 90 | When options were few, *opentracker* used to accept all of them from command line. While this still is possible for most options, using them is quite unhandy: an example invocation would look like ``./opentracker -i 23.23.23.7 -p 80 -P 80 -p 6969 -i 23.23.23.8 -p 80 -r http://www.mytorrentsite.com/ -d /usr/local/etc/opentracker -w mytorrents.list -A 127.0.0.1``. |
76 | 91 | ||
@@ -100,7 +115,7 @@ To make *opentracker* reload it's white/blacklist, send a ``SIGHUP`` unix signal | |||
100 | Statistics | 115 | Statistics |
101 | ========== | 116 | ========== |
102 | 117 | ||
103 | Given its very network centric approach, talking to *opentracker* via http comes very naturally. Besides the ``/announce`` and ``/scrape`` paths, there is a third path you can access the tracker by: ``/stats``. This request takes parameters, for a quick overview just inquire `/stats?mode=everything``. | 118 | Given its very network centric approach, talking to *opentracker* via http comes very naturally. Besides the ``/announce`` and ``/scrape`` paths, there is a third path you can access the tracker by: ``/stats``. This request takes parameters, for a quick overview just inquire `/stats?mode=everything`. |
104 | 119 | ||
105 | Statistics have grown over time and are currently not very tidied up. Most modes were written to dump legacy-SNMP-style blocks that can easily be monitored by `MRTG <http://oss.oetiker.ch/mrtg/>`_. These modes are: ``peer``, ``conn``, ``scrp``, ``udp4``, ``tcp4``, ``busy``, ``torr``, ``fscr``, ``completed``, ``syncs``. I'm not going to explain these here. | 120 | Statistics have grown over time and are currently not very tidied up. Most modes were written to dump legacy-SNMP-style blocks that can easily be monitored by `MRTG <http://oss.oetiker.ch/mrtg/>`_. These modes are: ``peer``, ``conn``, ``scrp``, ``udp4``, ``tcp4``, ``busy``, ``torr``, ``fscr``, ``completed``, ``syncs``. I'm not going to explain these here. |
106 | 121 | ||
@@ -113,7 +128,7 @@ You can inquire *opentracker*'s version (i.e. CVS versions of all its objects) u | |||
113 | Philosophy | 128 | Philosophy |
114 | ========== | 129 | ========== |
115 | 130 | ||
116 | A torrent tracker basically is an http-Server that collects all clients ip addresses into pools sorted by one of the request strings parameters and answers all other clients that specified this exact same parameter a list of all other recent clients. All technologies to implement this are around for more than twenty years. Still most implementations suck performancewise. | 131 | A torrent tracker basically is an http server that collects all clients ip addresses into pools sorted by one of the request strings parameters and answers all other clients that specified this exact same parameter a list of all other recent clients. All technologies to implement this are around for more than twenty years. Still most implementations suck performancewise. |
117 | 132 | ||
118 | Utilizing the highly scalable server framework from `libowfat <http://www.fefe.de/libowfat/>`_, *opentracker* can easily serve multiple thousands of requests on a standard plastic WLAN-router, limited only by your kernels capabilities ;) | 133 | Utilizing the highly scalable server framework from `libowfat <http://www.fefe.de/libowfat/>`_, *opentracker* can easily serve multiple thousands of requests on a standard plastic WLAN-router, limited only by your kernels capabilities ;) |
119 | 134 | ||
diff --git a/stories/projects/timestretch.rst b/stories/projects/timestretch.rst index 15ce5ca..30ec7c5 100644 --- a/stories/projects/timestretch.rst +++ b/stories/projects/timestretch.rst | |||
@@ -4,7 +4,7 @@ | |||
4 | .. date: 2015/02/01 19:10:08 | 4 | .. date: 2015/02/01 19:10:08 |
5 | .. title: timestretch | 5 | .. title: timestretch |
6 | .. subtitle: a fast sample time stretching implementation | 6 | .. subtitle: a fast sample time stretching implementation |
7 | .. slug: ../arts/software/timestretch/index | 7 | .. slug: ../arts/software/timestretch |
8 | 8 | ||
9 | .. contents:: | 9 | .. contents:: |
10 | :depth: 1 | 10 | :depth: 1 |
diff --git a/stories/projects/vchat-client.rst b/stories/projects/vchat-client.rst index f540f04..0d9f096 100644 --- a/stories/projects/vchat-client.rst +++ b/stories/projects/vchat-client.rst | |||
@@ -3,7 +3,7 @@ | |||
3 | .. tags: project | 3 | .. tags: project |
4 | .. date: 2014/02/01 19:10:08 | 4 | .. date: 2014/02/01 19:10:08 |
5 | .. title: vchat-client | 5 | .. title: vchat-client |
6 | .. slug: ../arts/software/vchat-client/index | 6 | .. slug: ../arts/software/vchat-client |
7 | 7 | ||
8 | Newbies Guide to vchat via 'Buntclient' | 8 | Newbies Guide to vchat via 'Buntclient' |
9 | ======================================= | 9 | ======================================= |
diff --git a/themes/erdgeist/templates/base.tmpl b/themes/erdgeist/templates/base.tmpl index 3bdf48d..813b592 100644 --- a/themes/erdgeist/templates/base.tmpl +++ b/themes/erdgeist/templates/base.tmpl | |||
@@ -37,7 +37,7 @@ ${template_hooks['extra_head']()} | |||
37 | </div> | 37 | </div> |
38 | <!--End of body content--> | 38 | <!--End of body content--> |
39 | 39 | ||
40 | <footer> | 40 | <footer id="footer"> |
41 | ${content_footer} | 41 | ${content_footer} |
42 | ${template_hooks['page_footer']()} | 42 | ${template_hooks['page_footer']()} |
43 | </footer> | 43 | </footer> |
@@ -45,13 +45,20 @@ ${template_hooks['extra_head']()} | |||
45 | </div> | 45 | </div> |
46 | 46 | ||
47 | ${base.late_load_js()} | 47 | ${base.late_load_js()} |
48 | <!--script>$('a.image-reference:not(.islink)').colorbox({rel:"gal",maxWidth:"100%",maxHeight:"100%",scalePhotos:true});</script --> | 48 | <!-- fancy dates --> |
49 | <script> | ||
50 | moment.locale("${momentjs_locales[lang]}"); | ||
51 | fancydates(${date_fanciness}, ${js_date_format}); | ||
52 | </script> | ||
53 | <!-- end fancy dates --> | ||
49 | <%block name="extra_js"></%block> | 54 | <%block name="extra_js"></%block> |
50 | % if annotations and post and not post.meta('noannotations'): | 55 | <script> |
51 | ${notes.code()} | 56 | baguetteBox.run('div#content', { |
52 | % elif not annotations and post and post.meta('annotations'): | 57 | ignoreClass: 'islink', |
53 | ${notes.code()} | 58 | captions: function(element) { |
54 | % endif | 59 | return element.getElementsByTagName('img')[0].alt; |
60 | }}); | ||
61 | </script> | ||
55 | ${body_end} | 62 | ${body_end} |
56 | ${template_hooks['body_end']()} | 63 | ${template_hooks['body_end']()} |
57 | </body> | 64 | </body> |
diff --git a/themes/erdgeist/templates/base_helper.tmpl b/themes/erdgeist/templates/base_helper.tmpl index bec4b78..7b44a95 100644 --- a/themes/erdgeist/templates/base_helper.tmpl +++ b/themes/erdgeist/templates/base_helper.tmpl | |||
@@ -1,6 +1,7 @@ | |||
1 | ## -*- coding: utf-8 -*- | 1 | ## -*- coding: utf-8 -*- |
2 | 2 | ||
3 | <%namespace name="notes" file="annotation_helper.tmpl" import="*" /> | 3 | <%namespace name="notes" file="annotation_helper.tmpl" import="*" /> |
4 | <%namespace name="feeds_translations" file="feeds_translations_helper.tmpl" import="*"/> | ||
4 | <%def name="html_headstart()"> | 5 | <%def name="html_headstart()"> |
5 | <!DOCTYPE html> | 6 | <!DOCTYPE html> |
6 | <html | 7 | <html |
@@ -26,17 +27,26 @@ dir="rtl" \ | |||
26 | lang="${lang}"> | 27 | lang="${lang}"> |
27 | <head> | 28 | <head> |
28 | <meta charset="utf-8"> | 29 | <meta charset="utf-8"> |
30 | % if use_base_tag: | ||
31 | <base href="${abs_link(permalink)}"> | ||
32 | % endif | ||
29 | %if description: | 33 | %if description: |
30 | <meta name="description" content="${description}"> | 34 | <meta name="description" content="${description|h}"> |
31 | %endif | 35 | %endif |
32 | <meta name="viewport" content="width=device-width, initial-scale=1"> | 36 | <meta name="viewport" content="width=device-width, initial-scale=1"> |
33 | <title>${title|striphtml} | ${blog_title|striphtml}</title> | 37 | %if title == blog_title: |
38 | <title>${blog_title|h}</title> | ||
39 | %else: | ||
40 | <title>${title|h} | ${blog_title|h}</title> | ||
41 | %endif | ||
34 | 42 | ||
35 | ${html_stylesheets()} | 43 | ${html_stylesheets()} |
36 | ${html_feedlinks()} | 44 | <meta name="theme-color" content="${theme_color}"> |
37 | %if permalink: | 45 | % if meta_generator_tag: |
38 | <link rel="canonical" href="${abs_link(permalink)}"> | 46 | <meta name="generator" content="Nikola (getnikola.com)"> |
39 | %endif | 47 | % endif |
48 | ${feeds_translations.head(classification=None, kind='index', other=False)} | ||
49 | <link rel="canonical" href="${abs_link(permalink)}"> | ||
40 | 50 | ||
41 | %if favicons: | 51 | %if favicons: |
42 | %for name, file, size in favicons: | 52 | %for name, file, size in favicons: |
@@ -55,11 +65,10 @@ lang="${lang}"> | |||
55 | <link rel="next" href="${nextlink}" type="text/html"> | 65 | <link rel="next" href="${nextlink}" type="text/html"> |
56 | %endif | 66 | %endif |
57 | 67 | ||
58 | ${mathjax_config} | ||
59 | %if use_cdn: | 68 | %if use_cdn: |
60 | <!--[if lt IE 9]><script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script><![endif]--> | 69 | <!--[if lt IE 9]><script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script><![endif]--> |
61 | %else: | 70 | %else: |
62 | <!--[if lt IE 9]><script src="${url_replacer(permalink, '/assets/js/html5.js', lang)}"></script><![endif]--> | 71 | <!--[if lt IE 9]><script src="${url_replacer(permalink, '/assets/js/html5.js', lang, url_type)}"></script><![endif]--> |
63 | %endif | 72 | %endif |
64 | 73 | ||
65 | ${extra_head_data} | 74 | ${extra_head_data} |
@@ -81,13 +90,10 @@ lang="${lang}"> | |||
81 | %else: | 90 | %else: |
82 | <script src="/assets/js/jquery.min.js"></script> | 91 | <script src="/assets/js/jquery.min.js"></script> |
83 | <script src="/assets/js/bootstrap.min.js"></script> | 92 | <script src="/assets/js/bootstrap.min.js"></script> |
84 | <script src="/assets/js/moment-with-locales.min.js"></script> | 93 | <script src="/assets/js/baguetteBox.min.js"></script> |
85 | <script src="/assets/js/fancydates.js"></script> | ||
86 | %endif | 94 | %endif |
87 | <script src="/assets/js/jquery.colorbox-min.js"></script> | 95 | <script src="/assets/js/moment-with-locales.min.js"></script> |
88 | %endif | 96 | <script src="/assets/js/fancydates.min.js"></script> |
89 | %if colorbox_locales[lang]: | ||
90 | <script src="/assets/js/colorbox-i18n/jquery.colorbox-${colorbox_locales[lang]}.js"></script> | ||
91 | %endif | 97 | %endif |
92 | ${social_buttons_code} | 98 | ${social_buttons_code} |
93 | </%def> | 99 | </%def> |
@@ -106,30 +112,30 @@ lang="${lang}"> | |||
106 | <link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet"> | 112 | <link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet"> |
107 | %else: | 113 | %else: |
108 | <link href="/assets/css/bootstrap.min.css" rel="stylesheet" type="text/css"> | 114 | <link href="/assets/css/bootstrap.min.css" rel="stylesheet" type="text/css"> |
115 | <link href="/assets/css/baguetteBox.min.css" rel="stylesheet" type="text/css"> | ||
109 | %endif | 116 | %endif |
110 | <link href="/assets/css/rst.css" rel="stylesheet" type="text/css"> | 117 | <link href="/assets/css/rst_base.css" rel="stylesheet" type="text/css"> |
118 | <link href="/assets/css/nikola_rst.css" rel="stylesheet" type="text/css"> | ||
111 | <link href="/assets/css/code.css" rel="stylesheet" type="text/css"> | 119 | <link href="/assets/css/code.css" rel="stylesheet" type="text/css"> |
112 | <link href="/assets/css/colorbox.css" rel="stylesheet" type="text/css"> | ||
113 | <link href="/assets/css/theme.css" rel="stylesheet" type="text/css"> | 120 | <link href="/assets/css/theme.css" rel="stylesheet" type="text/css"> |
114 | %if has_custom_css: | 121 | %if has_custom_css: |
115 | <link href="/assets/css/custom.css" rel="stylesheet" type="text/css"> | 122 | <link href="/assets/css/custom.css" rel="stylesheet" type="text/css"> |
116 | %endif | 123 | %endif |
117 | %endif | 124 | %endif |
118 | % if annotations and post and not post.meta('noannotations'): | 125 | %if needs_ipython_css: |
119 | ${notes.css()} | 126 | <link href="/assets/css/ipython.min.css" rel="stylesheet" type="text/css"> |
120 | % elif not annotations and post and post.meta('annotations'): | 127 | <link href="/assets/css/nikola_ipython.css" rel="stylesheet" type="text/css"> |
121 | ${notes.css()} | 128 | %endif |
122 | % endif | ||
123 | </%def> | 129 | </%def> |
124 | 130 | ||
125 | <%def name="html_navigation_links()"> | 131 | <%def name="html_navigation_links()"> |
126 | %for url, text, icon in navigation_links[lang]: | 132 | %for url, text, icon in navigation_links[lang]: |
127 | % if isinstance(url, tuple): | 133 | % if isinstance(url, tuple): |
128 | <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">${text}<b class="caret"></b></a> | 134 | <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">${text} <b class="caret"></b></a> |
129 | <ul class="dropdown-menu"> | 135 | <ul class="dropdown-menu"> |
130 | %for suburl, text in url: | 136 | %for suburl, text in url: |
131 | % if rel_link(permalink, suburl) == "#": | 137 | % if rel_link(permalink, suburl) == "#": |
132 | <li class="active"><a href="${permalink}" title="${text}"><i class="${icon}"></i></a> | 138 | <li class="active"><a href="${permalink}">${text} <i class="${icon}"></i></a> |
133 | %else: | 139 | %else: |
134 | <li><a href="${suburl}" title="${text}"><i class="${icon}"></i></a> | 140 | <li><a href="${suburl}" title="${text}"><i class="${icon}"></i></a> |
135 | %endif | 141 | %endif |
@@ -146,21 +152,11 @@ lang="${lang}"> | |||
146 | </%def> | 152 | </%def> |
147 | 153 | ||
148 | <%def name="html_feedlinks()"> | 154 | <%def name="html_feedlinks()"> |
149 | %if rss_link: | 155 | ${feeds_translations.head(classification=None, kind='index', other=False)} |
150 | ${rss_link} | ||
151 | %elif generate_rss: | ||
152 | %if len(translations) > 1: | ||
153 | %for language in translations: | ||
154 | <link rel="alternate" type="application/rss+xml" title="RSS (${language})" href="${_link('rss', None, language)}"> | ||
155 | %endfor | ||
156 | %else: | ||
157 | <link rel="alternate" type="application/rss+xml" title="RSS" href="${_link('rss', None)}"> | ||
158 | %endif | ||
159 | %endif | ||
160 | </%def> | 156 | </%def> |
161 | 157 | ||
162 | <%def name="html_translations()"> | 158 | <%def name="html_translations()"> |
163 | %for langname in translations.keys(): | 159 | %for langname in sorted(translations): |
164 | %if langname != lang: | 160 | %if langname != lang: |
165 | <li><a href="${abs_link(_link("root", None, langname))}" rel="alternate" hreflang="${langname}">${messages("LANGUAGE", langname)}</a></li> | 161 | <li><a href="${abs_link(_link("root", None, langname))}" rel="alternate" hreflang="${langname}">${messages("LANGUAGE", langname)}</a></li> |
166 | %endif | 162 | %endif |
diff --git a/themes/erdgeist/templates/index_helper.tmpl b/themes/erdgeist/templates/index_helper.tmpl deleted file mode 100644 index 9331b93..0000000 --- a/themes/erdgeist/templates/index_helper.tmpl +++ /dev/null | |||
@@ -1,27 +0,0 @@ | |||
1 | ## -*- coding: utf-8 -*- | ||
2 | <%def name="html_pager()"> | ||
3 | %if prevlink or nextlink: | ||
4 | <nav class="postindexpager"> | ||
5 | <ul class="pager"> | ||
6 | %if prevlink: | ||
7 | <li class="previous"> | ||
8 | <a href="${prevlink}" rel="prev">${messages("Newer posts")}</a> | ||
9 | </li> | ||
10 | %endif | ||
11 | %if nextlink: | ||
12 | <li class="next"> | ||
13 | <a href="${nextlink}" rel="next">${messages("Older posts")}</a> | ||
14 | </li> | ||
15 | %endif | ||
16 | </ul> | ||
17 | </nav> | ||
18 | %endif | ||
19 | </%def> | ||
20 | |||
21 | <%def name="mathjax_script(posts)"> | ||
22 | %if any(post.is_mathjax for post in posts): | ||
23 | <script type="text/x-mathjax-config"> | ||
24 | MathJax.Hub.Config({tex2jax: {inlineMath: [['$latex ','$'], ['\\(','\\)']]}});</script> | ||
25 | <script src="/assets/js/mathjax.js"></script> | ||
26 | %endif | ||
27 | </%def> | ||
diff --git a/themes/erdgeist/templates/list_poetry.tmpl b/themes/erdgeist/templates/list_poetry.tmpl index 3bde503..d05ec96 100644 --- a/themes/erdgeist/templates/list_poetry.tmpl +++ b/themes/erdgeist/templates/list_poetry.tmpl | |||
@@ -6,7 +6,7 @@ | |||
6 | <ul class="poetry-list multi-columns post-list list-unstyled"> | 6 | <ul class="poetry-list multi-columns post-list list-unstyled"> |
7 | % for post in posts: | 7 | % for post in posts: |
8 | <li class="post-list-item"> | 8 | <li class="post-list-item"> |
9 | <a href="${post.permalink()}">${post.title(lang)}</a><div class="post-date">(${post.formatted_date('%b %Y')})</div> | 9 | <a href="${post.permalink()}">${post.title(lang)}</a><div class="post-date">(${post.formatted_date('MMM Y')})</div> |
10 | </li> | 10 | </li> |
11 | % endfor | 11 | % endfor |
12 | </ul> | 12 | </ul> |
diff --git a/themes/erdgeist/templates/list_projectnews.tmpl b/themes/erdgeist/templates/list_projectnews.tmpl index abb515b..8c6a9eb 100644 --- a/themes/erdgeist/templates/list_projectnews.tmpl +++ b/themes/erdgeist/templates/list_projectnews.tmpl | |||
@@ -6,7 +6,7 @@ | |||
6 | <ul class="poetry-list post-list list-unstyled"> | 6 | <ul class="poetry-list post-list list-unstyled"> |
7 | % for post in posts: | 7 | % for post in posts: |
8 | <li class="post-list-item"> | 8 | <li class="post-list-item"> |
9 | <div style="float:left; margin-right: .6em"><a href="${post.permalink()}">(${post.formatted_date('%Y-%m-%d')})</a></div> ${post.text(lang)} | 9 | <div style="float:left; margin-right: .6em"><a href="${post.permalink()}">(${post.formatted_date('Y-m-d')})</a></div> ${post.text(lang)} |
10 | </li> | 10 | </li> |
11 | % endfor | 11 | % endfor |
12 | </ul> | 12 | </ul> |