summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDirk Engling <erdgeist@erdgeist.org>2025-01-02 03:42:39 +0100
committerDirk Engling <erdgeist@erdgeist.org>2025-01-02 03:42:39 +0100
commit9bb5248dab5fafc7e999ec92667b8dba8a5cc644 (patch)
treecbd78cd873f58d1e557c5fa16e0d9f6ba03e81e2
parentb58baee6f027fd03d81d1847be54aec33e0b2f95 (diff)
bring the blog up to date
-rw-r--r--blog/2015/hello-world.rst3
-rw-r--r--blog/2015/write-the-flogging-manual.rst6
-rw-r--r--files/arts/software/opentracker/opentracker-1.0.tar.bz2bin0 -> 66863 bytes
-rw-r--r--stories/index.rst2
-rw-r--r--stories/music/Sven.rst2
-rw-r--r--stories/music/index.rst4
-rw-r--r--stories/poetry/index.rst2
-rw-r--r--stories/projects/Telefonbuch.rst2
-rw-r--r--stories/projects/anonbox.rst2
-rw-r--r--stories/projects/el.rst2
-rw-r--r--stories/projects/elektropost.rst46
-rw-r--r--stories/projects/etherpad.rst2
-rw-r--r--stories/projects/ezjail.rst4
-rw-r--r--stories/projects/jaildaemon.rst14
-rw-r--r--stories/projects/minimunin.rst10
-rw-r--r--stories/projects/opentracker.rst33
-rw-r--r--stories/projects/timestretch.rst2
-rw-r--r--stories/projects/vchat-client.rst2
-rw-r--r--themes/erdgeist/templates/base.tmpl21
-rw-r--r--themes/erdgeist/templates/base_helper.tmpl66
-rw-r--r--themes/erdgeist/templates/index_helper.tmpl27
-rw-r--r--themes/erdgeist/templates/list_poetry.tmpl2
-rw-r--r--themes/erdgeist/templates/list_projectnews.tmpl2
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 :)
6This is just to demonstrate my new static blog and web engine nikola 6This 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
4More 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). 4More 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
6So 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. 10So 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
29A 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>`_. 29A 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
9Die 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>`_. 9Die 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
78Configure dovecot 78Configure 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
102Install 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``.
63Version history 63Version 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
32You 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). 32You 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-
62Version history 62Version 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 @@
26Overview 26Overview
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
33Version History 33Version 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. 36Use ``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
56Some variables in *opentracker*'s Makefile control features and behaviour of *opentracker*. Here they are: 69Some 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
70Invocation 85Invocation
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
75When 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``. 90When 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
100Statistics 115Statistics
101========== 116==========
102 117
103Given 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``. 118Given 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
105Statistics 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. 120Statistics 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
113Philosophy 128Philosophy
114========== 129==========
115 130
116A 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. 131A 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
118Utilizing 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 ;) 133Utilizing 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
8Newbies Guide to vchat via 'Buntclient' 8Newbies 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" \
26lang="${lang}"> 27lang="${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>