diff --git a/data.xml b/data.xml
index 96a33c6..dd504aa 100644
--- a/data.xml
+++ b/data.xml
@@ -20,6 +20,29 @@
]>
+
+
+
Fri, 15 Sep 2019 00:00 UT
covers/ds099.jpg
@@ -43,477 +66,559 @@ Zudem gibt es einen neuen Redaktions-PGP-Key, erhältlich auf allen Keyservern o
Lange war es ruhig um die Datenschleuder. Fast schon zu lange. Daher freuen wir uns umso mehr, dass die Ausgabe 97 fertig gedruckt und auf dem Weg zu den Mitgliedern und Abonnenten ist. Wie üblich können Abonnements und Einzelausgaben direkt beim CCC erworben werden.
- Sun, 18 Dec 2011 00:00 UT
covers/ds96.jpg
/pdfs/ds096.pdf
9558786
+ Sun, 18 Dec 2011 00:00 UT
Passend zum 28. Chaos Communication Congress ist die 96. Datenschleuder erschienen und befindet sich ATM auf dem Weg zu den Abonnenten. Wie immer gibt es zur Überbrückung der Wartezeit das Editorial online zum Selberausdrucken.
Es gibt einen neuen Redaktions-PGP-Key, erhältlich auf allen Keyservern oder hier.
- Sun, 04 Sep 2011 00:00 UT
covers/ds95.jpg
/pdfs/ds095.pdf
1633452
+ Sun, 04 Sep 2011 00:00 UT
Nach längerer Wartezeit ist jetzt die 95. Ausgabe der Datenschleuder erschienen und auf dem Weg zu den Abonnenten. Sie ist wie immer im gut sortierten Buchhandel oder direkt vom CCC auch als Einzelexemplar zu beziehen. Während Ihr auf Euer Exemplar wartet, lest doch solange das Editorial.
Aufgrund eines kleinen «Fuckups» wird die Datenschleuder bei den Abonnenten voraussichtlich. fünf. bis zehn Minu... äh, Tage später eintreffen. Wir bitten um Verständnis.
- Mon, 27 Sep 2010 00:00 UT
covers/ds94.jpg
/pdfs/ds094.pdf
9366127
+ Mon, 27 Sep 2010 00:00 UT
- Wed, 17 Dec 2008 00:00 UT
covers/ds93.jpg
/pdfs/ds093.pdf
8651240
+ Wed, 17 Dec 2008 00:00 UT
Pünktlich zum 25. Chaos Communication Congress sollten die inzwischen fast 2800 Mitglieder und Abonnenten ihre Datenschleuder im Briefkasten vorfinden. Schwerpunkte sind in dieser Ausgabe der dilettantische Umgang des BNDs mit ihren achsogeheimen Netzen und eine Analyse des XMPP-Protokolls nach kryptografischen Gesichtspunkten. Wie immer gibt es zum Schmökern neben der bereits veröffentlichten Vorabmeldung auch das Editorial zum Internetausdrucken und vorm Kamin lesen.
Der Vorstand des CCC hat die Wiedereinführung der beliebten 8-Ausgaben Miniabos beschlossen. Details gibt es hier.
- Sat, 29 Mar 2008 00:00 UT
covers/ds92.jpg
/pdfs/ds092.pdf
5805592
+ Sat, 29 Mar 2008 00:00 UT
Die 92. Ausgabe der Datenschleuder ist erschienen und auf dem Weg zu den Abonnenten. Als besonderes Gimmick liegt ihr dieses Mal eine Fingerattrappe nach dem Bild unseres geliebten Innenministers bei. Sie ist wie immer im gut sortierten Buchhandel oder direkt vom CCC auch als Einzelexemplar zu beziehen. Während ihr auf Eure Ausgabe wartet, lest doch solange das Editorial.
- Thu, 19 Jul 2007 00:00 UT
covers/ds91.jpg
/pdfs/ds091.pdf
8523204
+ Thu, 19 Jul 2007 00:00 UT
- Tue, 03 Oct 2006 00:00 UT
covers/ds90.jpg
/pdfs/ds090.pdf
2249622
+ Tue, 03 Oct 2006 00:00 UT
Das Experiment ist beendet. Die Datenschleuder ist dank dem Einsatz hochmoderner Technologien (HTML) auf dem besten Wege, den dreijährigen Rückstand wieder aufzuholen. Redaktionssysteme sind im Prinzip in Ordnung. In der Praxis rockt jedoch vi.
covers/ds89.jpg
/pdfs/ds089.pdf
3860454
+
covers/ds88.jpg
/pdfs/ds088.pdf
1262835
+
covers/ds87.jpg
/pdfs/ds087.pdf
2331105
+
covers/ds86.jpg
/pdfs/ds086.pdf
1807977
+
covers/ds85.jpg
/pdfs/ds085.pdf
1635260
+
covers/ds84.jpg
/pdfs/ds084.pdf
890339
+
covers/ds83.jpg
/pdfs/ds083.pdf
1114051
+
covers/ds82.jpg
/pdfs/ds082.pdf
1692019
+
covers/ds81.jpg
/pdfs/ds081.pdf
659054
+
covers/ds80.jpg
/pdfs/ds080.pdf
563840
+
covers/ds79.jpg
/pdfs/ds079.pdf
5295970
+
covers/ds78.jpg
/pdfs/ds078.pdf
3068721
+
covers/ds77.jpg
/pdfs/ds077.pdf
7138473
+
covers/ds76.jpg
/pdfs/ds076.pdf
8175112
+
covers/ds75.jpg
/pdfs/ds075.pdf
8351323
+
covers/ds74.jpg
/pdfs/ds074.pdf
2064807
+
covers/ds73.jpg
/pdfs/ds073.pdf
5497703
+
covers/ds72.jpg
/pdfs/ds072.pdf
278270
+
covers/ds71.jpg
/pdfs/ds071.pdf
499707
+
covers/ds70.jpg
/pdfs/ds070.pdf
4904429
+
covers/ds68.jpg
/pdfs/ds068.pdf
8750789
+
covers/ds67.jpg
/pdfs/ds067.pdf
685776
+
covers/ds66.jpg
/pdfs/ds066.pdf
381865
+
covers/ds65.jpg
/pdfs/ds065.pdf
191921
+
covers/ds64.jpg
/pdfs/ds064.pdf
683107
+
covers/ds63.jpg
/pdfs/ds063.pdf
402940
+
covers/ds62.jpg
/pdfs/ds062.pdf
645827
+
covers/ds61.jpg
/pdfs/ds061.pdf
2218050
+
covers/ds60.jpg
/pdfs/ds060.pdf
525227
+
covers/ds59.jpg
/pdfs/ds059.pdf
441467
+
covers/ds58.jpg
/pdfs/ds058.pdf
287742
+
covers/ds57.jpg
/pdfs/ds057.pdf
761897
+
covers/ds56.jpg
/pdfs/ds056.pdf
467698
+
covers/ds55.jpg
/pdfs/ds055.pdf
2922086
+
covers/ds54.jpg
/pdfs/ds054.pdf
7974465
+
covers/ds53.jpg
/pdfs/ds053.pdf
817544
+
covers/ds52.jpg
/pdfs/ds052.pdf
1152589
+
covers/ds51.jpg
/pdfs/ds051.pdf
1887242
+
covers/ds50.jpg
/pdfs/ds050.pdf
1275237
+
covers/ds49.jpg
/pdfs/ds049.pdf
943611
+
covers/ds48.jpg
/pdfs/ds048.pdf
841492
+
covers/ds47.jpg
/pdfs/ds047.pdf
1369065
+
covers/ds46.jpg
/pdfs/ds046.pdf
1432054
+
covers/ds45.jpg
/pdfs/ds045.pdf
959569
+
covers/ds44,5.jpg
/pdfs/ds044,5.pdf
2245359
+
covers/ds44.jpg
/pdfs/ds044.pdf
934477
+
covers/ds43.jpg
/pdfs/ds043.pdf
1511021
+
covers/ds42.jpg
/pdfs/ds042.pdf
1008532
+
covers/ds41.jpg
/pdfs/ds041.pdf
1772903
+
covers/ds40.jpg
/pdfs/ds040.pdf
724630
+
covers/ds39.jpg
/pdfs/ds039.pdf
5660515
+
covers/ds38.jpg
/pdfs/ds038.pdf
9309080
+
covers/ds37.jpg
/pdfs/ds037.pdf
5955897
+
covers/ds36.jpg
/pdfs/ds036.pdf
3988877
+
covers/ds35.jpg
/pdfs/ds035.pdf
1132711
+
covers/ds34.jpg
/pdfs/ds034.pdf
2377237
+
covers/ds33.jpg
/pdfs/ds033.pdf
3594296
+
covers/ds32.jpg
/pdfs/ds032.pdf
1007002
+
covers/ds31.jpg
/pdfs/ds031.pdf
1686370
+
covers/ds30.jpg
/pdfs/ds030.pdf
793690
+
covers/ds28-29.jpg
https://www.offiziere.ch/trust-us/ds/28/index.html
+
covers/ds26-27.jpg
/pdfs/ds2627.pdf
11978057
+
covers/ds25.jpg
/pdfs/ds025.pdf
7984192
+
covers/ds24.jpg
/pdfs/ds024.pdf
3317604
+
covers/ds23.jpg
/pdfs/ds023.pdf
4669143
+
covers/ds22.jpg
https://www.offiziere.ch/trust-us/ds/22/index.html
+
covers/ds21.jpg
/pdfs/ds021.pdf
8305087
+
covers/ds20.jpg
/pdfs/ds020.pdf
8998068
+
covers/ds19.jpg
/pdfs/ds019.pdf
8295587
+
covers/ds18.jpg
/pdfs/ds018.pdf
10486554
+
covers/ds17.jpg
/pdfs/ds017.pdf
5632452
+
- Thu, 11 Sep 1986 00:00 UT
covers/ds16.jpg
/pdfs/ds016.pdf
1177879
+ Thu, 11 Sep 1986 00:00 UT
covers/ds15.jpg
/pdfs/ds015.pdf
1116319
+
covers/ds14.jpg
/pdfs/ds014.pdf
629409
+
covers/ds13.jpg
/pdfs/ds013.pdf
1400728
+
covers/ds11-12.jpg
/pdfs/ds1112.pdf
652112
+
covers/ds9-10.jpg
/pdfs/ds0910.pdf
604829
+
covers/ds8,5.jpg
/alteszeug.html
+
covers/ds8.jpg
/pdfs/ds008.pdf
520716
+
covers/ds7.jpg
/pdfs/ds007.pdf
159023
+
covers/ds5-6.jpg
/pdfs/ds0506.pdf
995187
+
- Sun, 12 Aug 1984 00:00 UT
covers/ds4.jpg
/pdfs/ds004.pdf
3338710
+ Sun, 12 Aug 1984 00:00 UT
- Tue, 12 Jun 1984 00:00
covers/ds3.jpg
/pdfs/ds003.pdf
2638305
+ Tue, 12 Jun 1984 00:00
covers/ds02.jpg
/pdfs/ds002.pdf
748189
+
covers/ds1.jpg
https://www.offiziere.ch/trust-us/ds/01/index.html
+
diff --git a/gen.sh b/gen.sh
index 98d57ff..0d09777 100755
--- a/gen.sh
+++ b/gen.sh
@@ -22,8 +22,15 @@ assert_source () {
datafn="data.xml";
>&2 printf "assuming fallback '${datafn}'.\n";
}
- test -f "$datafn" && { >&2 printf "from ${datafn} …\n"; exit 0; } || { >&2 printf "failed.\nfile '${datafn}' does not exist.\n"; exit 1; }
- printf "$datafn"
+ err=0
+ while test "${err}" -lt 2; do
+ test -f "$datafn" 2>/dev/null && { >&2 printf "from ${datafn} …\n"; err=0; break; } || {
+ >&2 printf "failed.\nfile '${datafn}' does not exist.\n"
+ err=$(( $err + 1 ));
+ datafn="data.xml";
+ }
+ done
+ test $err -eq 0 && { printf "$datafn"; exit 0; } || exit $err
}
build () {
datafn="$1"
@@ -77,8 +84,13 @@ newdataentry () {
dependencies="cat grep head cut rev date printf"
assert_tools ${dependencies}
- #~ datafn=$(assert_source $1) && { shift; } || { >&2 printf "file '${datafn}' not found."; err=1; exit 1; }
- datafn="data.xml"
+ datafn=$(assert_source $1) && {
+ if test "$datafn" = "$1" ; then
+ shift
+ fi
+ } || {
+ >&2 printf "file '${datafn}' not found."; err=1; exit 1;
+ }
err=0
customdir=$(pwd)
@@ -91,59 +103,62 @@ newdataentry () {
# todo: switches
#~ for o in "$@"; do
+ # assigned parameters with equal sign
#~ on=$(printf $o|cut -d"=" -f1)
#~ ov=$(printf $o|cut -d"=" -f2-)
#~ case $on in
# custom data directory for availability test and filesize, default pwd
- #~ c)
- #~ customdir) ;;
+ #~ c|customdir) ;;
# custom issue, default next after top entry in ${datafn}
- #~ i)
- #~ issue) ;;
+ #~ i|issue) ;;
# custom timestamp, default: current time
- #~ d)
- #~ datetime) ;;
+ #~ d|datetime) ;;
# custom teaser xml-text, default: none
- #~ t)
- #~ teaser) ;;
+ #~ t|teaser) ;;
# custom fs for files
- #~ p)
- #~ pdffs) ;;
- #~ e)
- #~ epubfs) ;;
+ #~ p|pdffs) ;;
+ #~ e|epubfs) ;;
# help text
- #~ h)
- #~ help)
+ #~ h|help)
#~ *) ;;
#~ esac
+ # or without equal sign …
+ #~ case $o in
+ #~ c|customdir) ;;
+ #~ i|issue) ;;
+ #~ esac
#~ done
- test -d $1 && {
- customdir=$1; shift
+ test $# -gt 0 && test -d $1 && {
+ customdir=$1
>&2 printf "custom base directory for files such as jpg, pdf, epub: "${customdir}".\n\n"
+ shift
}
- test "$1" = "help" && {
- printf "prints a new data entry for a release of datenschleuder\n\n"
+ test $# -gt 0 && test "$1" = "help" && {
+ bold="\033[1m"
+ nobold="\033[0m"
+ printf "\n${bold}datenschleuder release xml snippet generation${nobold}\nprints a new data entry for a release of datenschleuder\n\n"
printf "release [options]\n\n"
- printf "option\tdescription\n\n"
+ printf "${bold}option\t\tdescription${nobold}\n\n"
printf "directory\tcustom data directory for availability test and filesize, default pwd\n\n"
- printf "number\tprint entry for release with custom number, default is the increment of the top entry in ${datafn}\n\n"
- printf "date\tuse a unix timestamp for a custom date\n\n"
- printf "teaser\tinclude teaser xml-message as last argument(s)\n\n"
- printf "full example: './gen.sh release 99 1568505600 Die Ausgabe 99 ist fertig.'\n"
+ printf "number\t\tprint entry for release with custom number, default is the increment of the top entry in ${datafn}\n\n"
+ printf "date\t\tuse a unix timestamp for a custom date\n\n"
+ printf "teaser\t\tinclude teaser xml-message as last argument(s)\n\n"
+ printf "${bold}full example:${nobold} '\$./gen.sh release 99 1568505600 Die Ausgabe 99 ist fertig.'\n\n"
exit 1
}
- 2>/dev/null test $(( $1 * 1 )) -eq $1 && {
+
+ 2>/dev/null test $# -gt 0 && test $(( $1 * 1 )) -eq $1 && {
newentry=$1; shift;
>&2 printf "custom issue number '${newentry}' for '${datafn}'.\n"
} || {
printf "next argument not a number. assuming issue based on top entry.\n"
}
- 2>/dev/null test $(( $1 * 1 )) -eq $1 && {
- >&2 printf "custom datetime.\n\n"
+ 2>/dev/null test $# -gt 0 && test $(( $1 * 1 )) -eq $1 && {
+ >&2 printf "custom datetime.\n"
datetime="$1"; shift;
} || { printf "next argument not a number. using actual system time.\n"; datetime=0; } # remaining arguments should be teaser xml-message.
- printf "\nschleuder id=\"$newentry\">\n"
+ printf "\n\n"
# todo: switch for dtg, integrate custom datetime input early
# or simply implement xslt for handling ISO and nothing else for input
# RFC-5322-Format without seconds and TZ
@@ -174,7 +189,7 @@ newdataentry () {
printf "\t"${cover}"\n"
} || {
fs=$(stat -c %s ${customdir}"/"${ffn})
- printf "\t"${ffn}"\n"
+ printf "\t%s\n" "${fs}" "${ffn}"
}
} || {
mfl=${mfl}" "${ffn}"\n"
@@ -182,21 +197,21 @@ newdataentry () {
err=3
}
done
- #~ printf "\t\n" # not used on server yet
+ #~ printf "\t\n" # not used on server yet
test $# -eq 0 && { teaser="" ; } || {
teaser="$@";
- printf "\t"${teaser}"\n"
+ printf "\t${teaser}\n"
}
printf "\n"
test "$teaser" = "" && { >&2 printf "\nmissing teaser message.\n"; }
- test -e ${customdir}"/"$cover || { >&2 printf "\nmissing cover file: "${cover}"\n"; }
- test $err -gt 0 && { >&2 printf "\nmissing files:\n"${mfl}"\n"; }
+ test -e ${customdir}"/"$cover || { >&2 printf "\nmissing cover file: ${cover}\n"; }
+ test $err -gt 0 && { >&2 printf "\nmissing files:\n${mfl}\n"; }
}
newinfoentry () {
>&2 printf "not implemented yet.\n\nwill be similar to 'release'.\n"
}
-echo $# $@
+#~ echo $# $@
if test $# -lt 1 ; then
printf "missing parameter.\n"
@@ -205,13 +220,15 @@ else
# a mirror is useful for local testing with files
case "$1" in
build)
- f=$(assert_source $@) && { shift; } || { exit 1; }
+ shift
+ f=$(assert_source $@) || { exit 1; }
build "${f}"
;;
- #~ sortxml)
- #~ f=$(assert_source $@) && { shift; } || { exit 1; }
- #~ sortxml "${f}"
- #~ ;;
+ sortxml)
+ shift
+ f=$(assert_source $@) || { exit 1; }
+ sortxml "${f}"
+ ;;
mirror)
>&2 printf "downloading the website may take quite some time.\n"
mirror_website http://ds.ccc.de/