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/