From 6be9638ae0dc6d21459eb9cb10ea54b5870335c6 Mon Sep 17 00:00:00 2001 From: Lucian Mogosanu Date: Sun, 17 Feb 2019 16:44:01 +0200 Subject: [PATCH] posts: 084 --- posts/y05/084-gutenberg-ii.markdown | 88 +++++++++++++++++++++-------------- uploads/2019/02/file-types-dot.png | Bin 0 -> 37586 bytes uploads/2019/02/plot.R | 16 +++++++ uploads/2019/02/plot.sh | 15 ++++++ 4 files changed, 83 insertions(+), 36 deletions(-) create mode 100644 uploads/2019/02/file-types-dot.png create mode 100644 uploads/2019/02/plot.R create mode 100644 uploads/2019/02/plot.sh diff --git a/posts/y05/084-gutenberg-ii.markdown b/posts/y05/084-gutenberg-ii.markdown index 8763525..c5aadf8 100644 --- a/posts/y05/084-gutenberg-ii.markdown +++ b/posts/y05/084-gutenberg-ii.markdown @@ -1,7 +1,7 @@ --- postid: 084 -title: gutenberg.org, part zwei, a dissection -date: February 12, 2019 +title: gutenberg.org part zwei, a dissection +date: February 17, 2019 author: Lucian Mogoșanu tags: tmsr --- @@ -11,19 +11,19 @@ Now that we, and by "we" I mean "I", have a full copy of the before publishing it is to have a look at what's actually there, keeping in mind the objective of [separating][btcbase-1894708] [the wheat from the chaff][btcbase-1894768]. However, before finding out -what's there, there's the legitimate question of what "finding out -what's there" even means: ideally, one'd catalogue everything that's -there, which is, I guess, not such a difficult task, given that the -archive already contains some metadata; also, it's conceivable that one -would want to verify the authenticity of (some of) the writings, which -is hard, or maybe downright sisyphean if we're to consider every single -text that's in there[^1]. - -For now, I'm going to narrow down the scope of this "finding out what's -there" to discovering what file types there are, how many of them and -how much they weigh in bytes. To this end, I'm publishing a script +what's there, there's the question of what "finding out what's there" +even means: ideally, one'd catalogue everything, which is, I guess, not +such a difficult task, given that the archive already contains some +metadata; also, it's conceivable that one would want to verify the +authenticity of (some of) the writings, which is hard, or maybe +downright sisyphean if we're to consider every single text on +gutenberg.org[^1]. + +For now, we're going to narrow down the scope of this "finding out +what's there" to discovering what file types there are, how many of them +and how much they weigh in bytes. To this end, I'm publishing a script called [dissect-guten.bash][dissect-guten.bash], that, for each file in -the gutenberg archive, it: +the gutenberg.org archive: 1. looks at its extension, and 2. if the extension exists, i.e. if the file is of the form @@ -84,7 +84,7 @@ the form: ext:n:siz ~~~~ -where `ext` is an extension, `n` is the number of files with that +where `ext` is a file extension, `n` is the number of files bearing said extension and `siz` is the total size in bytes. We can then e.g.: ~~~~ @@ -93,46 +93,62 @@ $ awk -F':' '{print $1,$2,$3,($3/(1024*1024*1024)),$3/$2/(1024*1024)}' \ ~/file-types-sorted.txt ~~~~ -which reveals to us that the biggest offenders are zip archives +and further massage the data set to obtain a fancy graph, such as: + + + +which reveals to us that the biggest offenders are zip archives[^2] (~300GB), mp3 and ogg files (~230GB total), images (~140GB total) and video files (a bit over 20GB), with the rest being pdf, epub, iso -etc. and ~40GB representing actual text files. +etc. and, *finally*, ~40GB representing actual text files. Of course, the text files can be further cut by removing e.g. copyright -headers[^2], the illustrations can be given a thorough review to +headers[^3], the illustrations can be given a thorough review to establish what's actually worth keeping, but we'll leave these for the next episodes of this saga. -[^1]: Which I'm not sure of either, given that much of the text might be - garbage. To be honest, I just don't know. - -[^2]: If you're not aware of it by now, let me remind you that there is - only one type of "[intellectual property][intellectual-ownership]": - that in which something is owned by being thoroughly examined and - deeply understood, [layer by layer][re-reading]. Sure, this is - further away from "copyright" (and other such fictions) than the - average orc mind can conceive; or, in other words, if you're not - aware of it by now, then there is very little hope left for you in - this world. +[^1]: Although I'm not sure that's worth the effort, given that much of + the writing might be garbage. To be honest, I have no idea. + +[^2]: Looking a bit deeper at this, the zip files contain various + "versions" of the book, e.g. the HTML files plus illustrations. This + yields a lot of duplicate data. For example: + + ~~~~ + $ ls -1 guten/2/2/2/2/22229/22229*.zip + guten/2/2/2/2/22229/22229-8.zip + guten/2/2/2/2/22229/22229-h.zip + guten/2/2/2/2/22229/22229.zip + ~~~~ + + Where the `-h.zip` file contains the HTML book, the `-8.zip` file + contains the same thing in some non-ASCII text format and finally + `22229.zip` contains the ASCII text file. + +[^3]: Let us remember that there is only one type of + "[intellectual property][intellectual-ownership]": that in which + something is owned by being thoroughly examined and understood in + depth, [layer by layer][re-reading]. Sure, this is further away from + "copyright" (and other such fictions) than the average orc mind can + conceive; but really, who cares? By now there is little hope left + for those who aren't aware of it. And now, assuming you've understood the previous paragraph and have come to a realization regarding the value of actual intellectual work, imagine the entirety of modern journalism and popular culture produced in the last few decades, the music and movie "industries", all the "best-sellers", the [academic wank][hogwash] and so on and - so forth. [Imagine][inchipuiti-va] that and how worthless a pile of - junk it is. - + so forth. Imagine all that and how worthless a pile of junk it is -- I'm sure Gutenberg himself would have been in awe looking at all the - multilaterally valuable intellectual valuables published in the late + multilaterally valuable intellectual stuff published in the late 20th/early 21st century! [gutenberg-i]: /posts/y05/083-gutenberg-rsync.html [btcbase-1894708]: http://btcbase.org/log/2019-02-10#1894708 [btcbase-1894768]: http://btcbase.org/log/2019-02-10#1894768 -[dissect-guten.bash]: TODO -[file-types.txt]: TODO +[dissect-guten.bash]: /uploads/2019/02/dissect-guten.bash +[file-types.txt]: /uploads/2019/02/file-types.txt [intellectual-ownership]: /posts/y04/069-on-intellectual-ownership.html [re-reading]: http://trilema.com/2017/re-reading-is-the-most-powerful-tool/#selection-21.114-21.433 [hogwash]: /posts/y02/045-academic-hogwash.html -[inchipuiti-va]: http://trilema.com/2009/inchipuiti-va/ diff --git a/uploads/2019/02/file-types-dot.png b/uploads/2019/02/file-types-dot.png new file mode 100644 index 0000000000000000000000000000000000000000..cbf1449bf1a128647c7301eb8a963a25bcf20685 GIT binary patch literal 37586 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

ya|sllYXFNUM4 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 5,] + +# Thumbnail +png("file-types-dot.png", width=690, height=800, res=90) +dotchart(d2$V2, labels=d2$V1, xlim=c(0,40), xlab="% of total guten/ size") +abline(v=d3$V2, lty=3) +text(x=d3$V2, y=match(d3$V2,d2$V2), labels=sprintf("%.01f%%", trunc(d3$V2 * 10)/10), pos=4) diff --git a/uploads/2019/02/plot.sh b/uploads/2019/02/plot.sh new file mode 100644 index 0000000..f1dcab7 --- /dev/null +++ b/uploads/2019/02/plot.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Everything under the 1GB threshold goes into the "other" category +cat file-types.txt | \ + awk -F':' 'BEGIN {OFS=":"} \ + { if ($3 >= (1024 * 1024 * 1024)) print $1,$2,$3 }' > bigger.txt +cat file-types.txt | \ + awk -F':' 'BEGIN { OFS=":"; sum2=0; sum3=0; } \ + { if ($3 < (1024 * 1024 * 1024)) { sum2+=$2; sum3+=$3; } } \ + END { print "others",sum2,sum3 }' > smaller.txt +cat bigger.txt smaller.txt > file-types-aggregated.txt +rm bigger.txt smaller.txt + +Rscript plot.R +rm file-types-aggregated.txt -- 1.7.10.4