diff --git a/a_defective_system.html.pm b/a_defective_system.html.pm
index 30fd858b..a047baeb 100644
--- a/a_defective_system.html.pm
+++ b/a_defective_system.html.pm
@@ -31,17 +31,17 @@ If I did print money---a ◊strong{lot} of money---and spent it like this, what
For starters, if I just kept the money without spending it, nothing would change:
-◊img[#:src "/images/counterfeiting1.png" #:alt "The counterfeiter can print a large stash of cash."]{
+◊img[#:src "/images/counterfeiting1.png" #:alt "The counterfeiter can print a large stash of cash, but other people would not benefit."]{
The counterfeit money is colored yellow and the real money is green.
}
Then if I decided to buy a bunch of LEGO®, the store would get some of my money:
-◊img[#:src "/images/counterfeiting2.png" #:alt "The counterfeiter buys LEGO."]{}
+◊img[#:src "/images/counterfeiting2.png" #:alt "The counterfeiter buys LEGO, sharing the wealth with the store."]{}
After a while the store would use the counterfeited money to pay their supplier:
-◊img[#:src "/images/counterfeiting3.png" #:alt "Money further trickles down to the supplier, but not to everyone."]{}
+◊img[#:src "/images/counterfeiting3.png" #:alt "Money further trickles down to the supplier, but not to everyone. The poor people did not get more money than they had before, and now they're even poorer relative to the others."]{}
Who in turn will use it to buy other stuff, and in this way the counterfeited money slowly trickles out into the rest of the economy. This extra money has two important effects:
@@ -356,7 +356,7 @@ While taking out debt to fuel investments was only supposed to be a temporary me
◊; Actual source
◊; https://fred.stlouisfed.org/graph/?id=GFDEBTN,
-◊img[#:src "images/usa-debt.svg" #:link #t #:alt "The federal debt of the United States, measure in trillions of dollars, since 1966."]{
+◊img[#:src "images/usa-debt.svg" #:link #t #:alt "The federal debt of the United States figure"]{
The ◊link[usa-national-debt]{federal debt of the United States}, measure in trillions of dollars, since 1966.
After the ◊link[financial_crisis]{2008 financial crisis} the amount of debt skyrocketed, signifying a shift in economic policy.
During the COVID-19 pandemic the debt explosively increased at a pace unseen before.
@@ -444,18 +444,18 @@ It seems like we're moving away from the original Keynesian ideas to something e
There's a worrying trend in the world: ◊link[global-inequality]{global inequality is rising}. The rich get richer and the poor get... poorer.
-◊img[#:src "images/income-inequality-world.svg" #:link #t #:alt "Top 10% income share between 1980 and 2015."]{
+◊img[#:src "images/income-inequality-world.svg" #:link #t #:alt "World income share figure"]{
Top 10% income share between 1980 and 2015.
Source ◊link[inequality-data]{World Inequality Database}.
}
The inequality is on the rise in nearly every country. If we take a closer look at the United States, it paints a gloomy picture:◊mn{report}
-◊img[#:src "images/income-inequality.svg" #:link #t #:alt "Income share in the United States between 1962 and 2014."]{
+◊img[#:src "images/income-inequality.svg" #:link #t #:alt "United States income share figure"]{
Income share in the United States between 1962 and 2014.
Source ◊link[inequality-data]{World Inequality Database}.
}
-◊img[#:src "images/wealth-inequality.svg" #:link #t #:alt "Net personal wealth in the United States between 1962 and 2014."]{
+◊img[#:src "images/wealth-inequality.svg" #:link #t #:alt "Net personal wealth figure"]{
Net personal wealth in the United States between 1962 and 2014.
Source ◊link[inequality-data]{World Inequality Database}.
}
diff --git a/about_the_book.html.pm b/about_the_book.html.pm
index 341052d9..3f6f0f2f 100644
--- a/about_the_book.html.pm
+++ b/about_the_book.html.pm
@@ -6,6 +6,7 @@
◊(define-meta updated "2021-05-07T19:11:00+01:00")
◊(define-meta uuid "7ea80c78-aff2-46a1-8d05-1253d7033dc6")
◊(define-meta template "chapter.html")
+◊(define-meta article-type "introduction")
◊(clear-sidenotes)
@@ -64,13 +65,15 @@ I must admit I'm also being selfish---writing a book is on my bucket list.
This book tries to describe what value cryptocurrencies have using several examples. In particular I'll argue that:
◊ol{
- ◊li{Cryptocurrencies aren't just scams.◊mn{scams} ◊note-pos{scams}}
+ ◊li{Cryptocurrencies aren't just scams.◊mn{scams}}
◊li{It's more than just a speculative asset.}
◊li{They do many things better than any alternative.}
◊li{There are legal use cases.}
◊li{They have valuable use cases.}
}
+◊note-pos{scams}
+
Of course, everything new brings positive and negative aspects with it. It's up to you to decide where on the global spectrum of good and bad cryptocurrencies lie.
@@ -103,8 +106,8 @@ A problem-centric view is great for an engineer or a problem solver, but it also
Instead of putting on blinders and getting stuck at these problems---which I believe can be addressed---we'll focus on the potential cryptocurrencies have. Only with this vantage point can we see if the problems are worth working on, or if we instead should scrap the whole idea.
-◊center{
- ◊strong[#:style "font-size: 1.1rem"]{And of course, none of this is investment advice.}
+◊div[#:class "not-investment"]{
+ And of course, none of this is investment advice.
}
Well, the only advice I'll give is to understand what you're investing in, and my hope is that this book can help with that.
diff --git a/acknowledgements.html.pm b/acknowledgements.html.pm
index acd194e0..309ef215 100644
--- a/acknowledgements.html.pm
+++ b/acknowledgements.html.pm
@@ -2,6 +2,7 @@
◊(define-meta title "Acknowledgments")
◊;(define-meta subtitle "A perspective beyond the hype")
+◊(define-meta article-type "acknowledgments")
◊(define-meta published "2020-03-09T21:07:17+01:00")
◊(define-meta updated "2021-03-10T19:01:43+01:00")
◊(define-meta uuid "d33953be-5f6c-43b0-a700-eab1e1540447")
diff --git a/antifragile.html.pm b/antifragile.html.pm
index 2a929f06..c1dafa5a 100644
--- a/antifragile.html.pm
+++ b/antifragile.html.pm
@@ -6,6 +6,7 @@
◊(define-meta updated "2021-05-07T19:11:00+01:00")
◊(define-meta uuid "9ce74583-fbbd-42d4-940e-3a9e44ed0658")
◊(define-meta template "chapter.html")
+◊(define-meta article-type "appendix")
◊; https://unchained-capital.com/blog/bitcoin-is-antifragile/
◊; https://cryptofundamental.com/in-pursuit-of-lindycoin-212bacafc395?gi=416e2a7a461c
@@ -142,11 +143,11 @@ Cryptocurrencies work the same way. When a weakness is discovered developers wil
While you can argue that an individual cryptocurrency is antifragile, antifragility also applies to the cryptocurrency concept itself. People like to point at the thousands of cryptocurrencies as some sort of drawback, but it's actually the opposite. Cryptocurrencies being created and then dying off en mass is good as each time one fails we might learn something new and use that to improve the survivors.
-◊img[#:src "/images/btc-hydra.png" #:alt "A hydra with one Bitcoin head"]{
+◊img[#:src "/images/btc-hydra.png" #:alt "A hydra with one head looking like the Bitcoin logo."]{
Cryptocurrencies are like a Hydra.
}
-◊img[#:src "/images/bch-xmr-hydra.png" #:alt "A hydra with two heads, one Bitcoin Cash and one Monero"]{
+◊img[#:src "/images/bch-xmr-hydra.png" #:alt "A hydra with three heads; one cut off, one like the Bitcoin Cash logo and one like the Monero logo."]{
Cut off one head, two more shall take its place.
}
diff --git a/appendix.html.pm b/appendix.html.pm
index 4e2247c9..d18eb8cb 100644
--- a/appendix.html.pm
+++ b/appendix.html.pm
@@ -5,6 +5,7 @@
◊(define-meta no-side-space #t)
◊(define-meta no-section-chapters-header #t)
◊(define-meta extra-article-class "appendix")
+◊(define-meta article-type "appendix")
◊(define-meta skip-feed #t)
◊(define-meta template "chapter.html")
diff --git a/are_cryptocurrencies_money.html.pm b/are_cryptocurrencies_money.html.pm
index e5aa5664..d3c0722c 100644
--- a/are_cryptocurrencies_money.html.pm
+++ b/are_cryptocurrencies_money.html.pm
@@ -27,7 +27,7 @@ To decide how well cryptocurrencies can function as money, we'll take a look at
◊ol{
◊li{◊strong{Acceptable}
- Nobody's excluded from using cryptocurrencies---they're open to everyone by design. The drawback is that you need a device with internet connection.◊mn{crypto-acceptable} ◊note-pos{crypto-acceptable}
+ Nobody's excluded from using cryptocurrencies---they're open to everyone by design. The drawback is that you need a device with internet connection.◊mn{crypto-acceptable}
}
◊li{◊strong{Divisible}
@@ -35,7 +35,7 @@ To decide how well cryptocurrencies can function as money, we'll take a look at
}
◊li{◊strong{Durable}
- Coins can be used an infinite amount of times. The only drawback is keeping your private key secure, so you don't lose your coins.◊mn{backups} ◊note-pos{backups}
+ Coins can be used an infinite amount of times. The only drawback is keeping your private key secure, so you don't lose your coins.◊mn{backups}
}
◊li{◊strong{Fungible & Uniform}
@@ -59,6 +59,9 @@ To decide how well cryptocurrencies can function as money, we'll take a look at
}
}
+◊note-pos{crypto-acceptable}
+◊note-pos{backups}
+
All in all cryptocurrencies fulfil the properties excellently.
Cryptocurrencies can also be considered to be ◊def[sound-money]{sound money}---the value is entirely market driven and there's no manipulation of the supply.◊mn{backed}
@@ -96,19 +99,19 @@ This is a table of how I think cryptocurrencies compare to other forms of money.
I know this might be controversial, so let me motivate some of the entries:
◊ol{
- ◊li{Digital fiat gets a poor score on ◊strong{acceptable} because it requires a bank account to use. This ◊link[for_the_unbanked]{isn't something everyone can get} as banks have the right to ◊link[undesirable_businesses]{reject you if they want}.◊mn{acceptable} ◊note-pos{acceptable}
+ ◊li{Digital fiat gets a poor score on ◊strong{acceptable} because it requires a bank account to use. This ◊link[for_the_unbanked]{isn't something everyone can get} as banks have the right to ◊link[undesirable_businesses]{reject you if they want}.◊mn{acceptable}
}
◊li{Digital money is inherently easier to ◊strong{divide} than physical variants. You can always send an exact amount without having to mix and match change.}
- ◊li{Paper notes can easily wear out or burn up. While cryptocurrencies cannot themselves burn up or deteriorate, the security backups and your phone can. Therefore they score lower than gold on ◊strong{durability}, which is near indestructible.◊mn{durability} ◊note-pos{durability}}
+ ◊li{Paper notes can easily wear out or burn up. While cryptocurrencies cannot themselves burn up or deteriorate, the security backups and your phone can. Therefore they score lower than gold on ◊strong{durability}, which is near indestructible.◊mn{durability}}
- ◊li{I see no major problems with ◊strong{fungibility} or ◊strong{uniformity}.◊mn{again-monero} ◊note-pos{again-monero}}
+ ◊li{I see no major problems with ◊strong{fungibility} or ◊strong{uniformity}.◊mn{again-monero}}
◊li{Both digital and physical fiat gets a poor score on ◊strong{limited supply}. Per the discussion in ◊link[prev-chapter]{the previous chapter} fiat money is unsound.
}
- ◊li{Cryptocurrencies are simply much more ◊strong{portable} than the other options. Carrying large amounts in cash or gold is cumbersome and digital fiat isn't easy to move across borders.◊mn{borders} ◊note-pos{borders}}
+ ◊li{Cryptocurrencies are simply much more ◊strong{portable} than the other options. Carrying large amounts in cash or gold is cumbersome and digital fiat isn't easy to move across borders.◊mn{borders}}
◊li{While it's possible to check for fake cash and gold coins, it requires expertise and certain tools. Therefore they get a lower ◊strong{recognizable} score.
}
@@ -118,10 +121,16 @@ I know this might be controversial, so let me motivate some of the entries:
You could argue that because you need a device with internet access, cryptocurrencies should get a lower score on ◊em{acceptable}. But you could also argue that having to transact in person is another drawback, and to me they cancel out.
}
+◊note-pos{durability}
+
◊ndef["durability"]{
The definition of ◊em{durability} is only concerned with reuse, where cryptocurrencies score excellently. I wanted to include the storage drawback that didn't fit anywhere else.
}
+◊note-pos{again-monero}
+
+◊note-pos{borders}
+
Even if you disagree about certain choices, it's hard to deny that cryptocurrencies come out of the comparison pretty well. Of course, this doesn't give the whole picture. There are other significant differences, for example:
◊ul{
@@ -203,7 +212,7 @@ We've looked at the properties---but how well do they function as money, today?
The valuation is highly speculation driven and has been notoriously volatile.◊mn{sov} ◊note-pos{sov}
- ◊img[#:src "images/btc-valuation.svg" #:link #t #:alt "Bitcoin closing price per month, between 2010 and 2019."]{
+ ◊img[#:src "images/btc-valuation.svg" #:link #t #:alt "Bitcoin closing price per month, between 2010 and 2020."]{
◊link[btc-valuation]{Bitcoin price per week up to the beginning of 2020}.
The price peaked in December 2017 to $19,870, and some exchanges had it even higher. A year later the price had dropped to $3,177, a drop of over 84%.
}
diff --git a/bitcoin_whitepaper.html.pm b/bitcoin_whitepaper.html.pm
index 2b4e3990..ee21cdc0 100644
--- a/bitcoin_whitepaper.html.pm
+++ b/bitcoin_whitepaper.html.pm
@@ -6,6 +6,7 @@
◊(define-meta updated "2021-05-07T19:11:00+01:00")
◊(define-meta uuid "581c4917-d862-49cb-9d01-495a9106081b")
◊(define-meta template "chapter.html")
+◊(define-meta article-type "appendix")
◊(clear-sidenotes)
diff --git a/challenges.html.pm b/challenges.html.pm
index e2d924ae..3a141dad 100644
--- a/challenges.html.pm
+++ b/challenges.html.pm
@@ -6,6 +6,7 @@
◊(define-meta updated "2021-05-07T19:11:00+01:00")
◊(define-meta uuid "c13d8405-fb3e-411c-b035-aae08eedddf1")
◊(define-meta template "chapter.html")
+◊(define-meta article-type "appendix")
◊(clear-sidenotes)
@@ -97,12 +98,12 @@ Bitcoin, like most cryptocurrencies, uses a public ledger where all transactions
"https://www.chainalysis.com/"
"Chainalysis: The Blockchain Analysis Company"))
-◊img[#:src "/images/coin-tracing.png" #:alt "Paying someone with allows you to see their funds."]{
+◊img[#:src "/images/coin-tracing.png" #:alt "Image of John's address that has sent 1 BTC to the merchant and 13 BTC to another address."]{
After the merchant receives a payment from John, the merchant can see that John has sent 13 BTC to another address, out of an initial 40 BTC.
John appears to be quite rich.
}
-◊img[#:src "/images/coin-tracing2.png" #:alt "You can trace coins back in history."]{
+◊img[#:src "/images/coin-tracing2.png" #:alt "Image of how John's 40 BTC originates from a hacked exchange."]{
It's possible to trace coins further back in history. Here we see that John's coins come from a hacked exchange, whose address is known. It might mean John is the hacker or, more probably, that John has received ◊em{tainted} coins (coins associated with illegal behavior).
}
@@ -119,7 +120,7 @@ You can explore the Bitcoin blockchain, and see all transactions and addresses,
In an attempt to make Bitcoin more private "mixing" services such as ◊link[coinjoin]{CoinJoin} can be used. They work by mixing together your coins with the coins of others, in an attempt to obscure where the coins are coming from:
-◊img[#:src "/images/coinjoin.png" #:alt "Obfuscation by mixing coins with other addresses."]{
+◊img[#:src "/images/coinjoin.png" #:alt "Image of mixing coins by sending them to and from various addresses."]{
A mixing service makes several addresses send to each other, in order to obfuscate the history. Although not shown here, because it would be too messy, all addresses and amounts are still visible.
}
diff --git a/chapter.html.p b/chapter.html.p
index 61615336..ae2d9ecd 100644
--- a/chapter.html.p
+++ b/chapter.html.p
@@ -19,10 +19,17 @@
◊(define side-space? (not (select-from-metas 'no-side-space here)))
◊(define section-chapters-headers? (not (select-from-metas 'no-section-chapters-header here)))
◊(define article-class
+ ; This used to be on but is now on main. Meh.
(let ((extra (select-from-metas 'extra-article-class here)))
(if extra
(string-append "chapter " extra)
"chapter")))
+◊(define article-type
+ (let ((type (select-from-metas 'article-type here)))
+ (if type
+ type
+ "chapter")))
+
◊(define prev-page
(let ((p (previous here)))
(if (equal? p 'index.html)
@@ -46,59 +53,38 @@
(->html
(make-link #:title title (string-append "/" (symbol->string page)) txt)))
-
+
◊|head-title|
-
-
+
-
-
-
+
-
-
+
- ◊(->html doc #:splice? #t)
+ ◊(->html doc #:splice? #t)
+
◊(->html (make-section-nav #:section-header? section-chapters-headers?
here))
-
+
◊(when side-space? (->html `(div ((class "side-space")))))
-
-
diff --git a/cryptography.html.pm b/cryptography.html.pm
index 1a9f23fd..a59ba5cd 100644
--- a/cryptography.html.pm
+++ b/cryptography.html.pm
@@ -6,6 +6,7 @@
◊(define-meta updated "2021-05-07T19:11:00+01:00")
◊(define-meta uuid "6a8759d6-2e0c-4224-b0b8-61009c5484d0")
◊(define-meta template "chapter.html")
+◊(define-meta article-type "appendix")
◊(clear-sidenotes)
@@ -110,7 +111,7 @@ You ◊em{encrypt} a message by placing it in the mailbox, this way nobody but t
This is where our mailbox metaphor breaks down a bit. It may seem that it's more inconvenient to sign a message than to encrypt one, but digitally they're both straightforward.
}
-◊img[#:src "/images/encrypted_mailbox.png" #:alt "Placing a letter in the mailbox."]{
+◊img[#:src "/images/encrypted_mailbox.png" #:alt "A letter is placed in the mailbox."]{
Placing a message inside the mailbox ensures that only the one with the key can read it.
}
diff --git a/darknet_markets.html.pm b/darknet_markets.html.pm
index 69408774..9ad8328c 100644
--- a/darknet_markets.html.pm
+++ b/darknet_markets.html.pm
@@ -38,16 +38,13 @@ There's a concept we need to have in mind while looking at darknet markets: some
Here's a table to illustrate the problem:
+◊(define sbr
+ `(br))
+
◊table-body[#:class "legal-moral"]{
- ◊tr{◊td{} ◊ths{Legal} ◊ths{Illegal}}
- ◊tr{◊tds{Moral} ◊good{Self defense
- Free speech}
- ◊mo-il{Some types of sex
- Starving child steals food}}
- ◊tr{◊tds{Immoral} ◊im-le{Mass surveillance
- Civil asset forfeiture}
- ◊bad{Slavery
- Murder}}
+ ◊tr{◊td{} ◊ths{Legal} ◊ths{Illegal}}
+ ◊tr{◊tds{Moral} ◊good{Self defense◊|sbr|Free speech} ◊mo-il{Some types of sex◊|sbr|Starving child steals food}}
+ ◊tr{◊tds{Immoral} ◊im-le{Mass surveillance◊|sbr|Civil asset forfeiture} ◊bad{Slavery◊|sbr|Murder}}
}
It's actually quite hard to classify things as legal or illegal and moral or immoral; they both change depending on the country, the time period and who you ask. For instance most would agree that slavery is immoral and should be illegal, but it was legal and viewed as normal for thousands of years. Similarly today in the western world we take free speech for granted, but that's not the case in all countries.
@@ -152,7 +149,7 @@ So if none of those things are available, what can you buy on a darknet market?
The following example, based on a real-life story I read a few years ago, illustrates why darknet markets aren't purely evil.
-◊div[#:class "story"]{
+◊section[#:class "story"]{
Tom met the love of his life five years ago, when he went to get some of his teeth removed. Hardly the most romantic meeting, with her drilling into his aching teeth, but it was love at first sight.
diff --git a/ebook-files/.gitignore b/ebook-files/.gitignore
new file mode 100644
index 00000000..d7ec32ea
--- /dev/null
+++ b/ebook-files/.gitignore
@@ -0,0 +1 @@
+!*.xml
diff --git a/ebook-files/acknowledgements.xhtml b/ebook-files/acknowledgements.xhtml
new file mode 100644
index 00000000..f4e5d2ca
--- /dev/null
+++ b/ebook-files/acknowledgements.xhtml
@@ -0,0 +1,23 @@
+
+
+
+
+ Why Cryptocurrencies?: Acknowledgments
+
+
+
+
+
+
+
+
+
Acknowledgments
+
+
+
As usual, there is a great woman behind every idiot.
Sometimes, I’m an idiot, but it’s clear that I have a great woman in Veronica that supports me, and without her this book would’ve never seen the light of day.
A big thanks to Filip Strömbäck, who proof-read everything and provided me with tons of good feedback.
And thanks to all others who gave me supportive comments, feedback, pull requests and donations. I’m forever grateful.
+
+
+
+
+
+
diff --git a/ebook-files/container.xml b/ebook-files/container.xml
new file mode 100644
index 00000000..aba0b3e6
--- /dev/null
+++ b/ebook-files/container.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/ebook-files/content.opf b/ebook-files/content.opf
new file mode 100644
index 00000000..d0d08f57
--- /dev/null
+++ b/ebook-files/content.opf
@@ -0,0 +1,55 @@
+
+
+
+ Why Cryptocurrencies?
+ main
+ What they are, what they do and why they matter
+ subtitle
+ Jonas Hietala
+ aut
+ Jonas Hietala
+ en-US
+ urn:isbn:978-91-986762-1-1
+ urn:isbn:978-91-986762-0-4
+ ◊DATE
+ ◊DATE
+
+ reflowable
+ scrolled-doc
+
+
+
+
+
+
+
+
+
+ ◊MANIFEST_POSTS_TAG
+ ◊MANIFEST_IMG_TAG
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ◊MANIFEST_FONT_TAG
+
+
+
+
+
+
+
+ ◊SPINE_TOC
+
+
diff --git a/ebook-files/cover_page.xhtml b/ebook-files/cover_page.xhtml
new file mode 100644
index 00000000..47996ef6
--- /dev/null
+++ b/ebook-files/cover_page.xhtml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+ Why cryptocurrencies?
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ebook-files/toc.ncx b/ebook-files/toc.ncx
new file mode 100644
index 00000000..09952498
--- /dev/null
+++ b/ebook-files/toc.ncx
@@ -0,0 +1,243 @@
+
+
+
+
+
+
+
+
+
+
+ Why cryptocurrencies?
+
+
+
+
+ About the book
+
+
+
+
+
+ Why cryptocurrencies in five minutes
+
+
+
+
+
+ What is a cryptocurrency?
+
+
+
+
+ Properties of a cryptocurrency
+
+
+
+
+
+ How do cryptocurrencies work?
+
+
+
+
+
+ Look out for snake oil
+
+
+
+
+
+ What is money?
+
+
+
+
+
+ Are cryptocurrencies money?
+
+
+
+
+
+
+ Better digital payments
+
+
+
+
+ Cheaper & faster
+
+
+
+
+
+ “Undesirable” businesses
+
+
+
+
+
+ Freezing of merchant accounts
+
+
+
+
+
+ Uncensorable donations
+
+
+
+
+
+ For the unbanked
+
+
+
+
+
+
+ A better currency
+
+
+
+
+ The financial crisis, bad loans and bailouts
+
+
+
+
+
+ The blind leading the blind
+
+
+
+
+
+ A defective system
+
+
+
+
+
+ Private money
+
+
+
+
+
+ A global currency
+
+
+
+
+
+
+ Brave new world
+
+
+
+
+ Darknet markets
+
+
+
+
+
+ A Swiss bank account in your pocket
+
+
+
+
+
+ The cashless dystopia
+
+
+
+
+
+ Protection against government confiscation
+
+
+
+
+
+ Separation of money and state
+
+
+
+
+
+
+ Extensions
+
+
+
+
+ Timestamping service
+
+
+
+
+
+ Uncensorable Twitter
+
+
+
+
+
+ Provably fair gambling
+
+
+
+
+
+ Tokens
+
+
+
+
+
+ Improved voting
+
+
+
+
+
+
+ Appendix
+
+
+
+
+ The Bitcoin white paper
+
+
+
+
+
+ Challenges for cryptocurrencies
+
+
+
+
+
+ A hitchhiker’s guide to cryptography
+
+
+
+
+
+ Cryptocurrencies are antifragile
+
+
+
+
+
+
+ About me, the author
+
+
+
+
+
diff --git a/ebookify b/ebookify
new file mode 100755
index 00000000..ba0a46d9
--- /dev/null
+++ b/ebookify
@@ -0,0 +1,422 @@
+#!/usr/bin/python3
+
+import glob
+import subprocess
+import os.path
+import re
+import sys
+import datetime
+
+# See
+# http://www.jedisaber.com/eBooks/Tutorial.shtml
+
+uid = "urn:isbn:978-91-986762-1-1"
+
+now = datetime.datetime.now()
+
+dirname = os.path.dirname(__file__)
+site_dir = os.path.join(dirname, "_site")
+ebook_files_dir = os.path.join(dirname, "ebook-files")
+
+ebook_dir = os.path.join(dirname, "_ebook")
+meta_dir = os.path.join(ebook_dir, "META-INF")
+oebps_dir = os.path.join(ebook_dir, "OEBPS")
+css_dir = oebps_dir
+image_dir = os.path.join(oebps_dir, "images")
+font_dir = os.path.join(oebps_dir, "fonts")
+short_commit = subprocess.run(['git', 'rev-parse', '--short', 'HEAD'],
+ stdout=subprocess.PIPE).stdout.decode('utf-8')
+
+toc = [
+ # Moved out of TOC
+ #"acknowledgements.html",
+ "about_the_book.html",
+ "eli5.html",
+ "what_is_a_cryptocurrency.html",
+ "properties_of_a_cryptocurrency.html",
+ "how_do_cryptocurrencies_work.html",
+ "look_out_for_snake_oil.html",
+ "what_is_money.html",
+ "are_cryptocurrencies_money.html",
+ "better_digital_payments.html",
+ "cheaper_faster.html",
+ "undesirable_businesses.html",
+ "freezing_of_merchant_accounts.html",
+ "uncensorable_donations.html",
+ "for_the_unbanked.html",
+ "better_currency.html",
+ "financial_crisis.html",
+ "the_blind_leading_the_blind.html",
+ "a_defective_system.html",
+ "private_money.html",
+ "global_currency.html",
+ "brave_new_world.html",
+ "darknet_markets.html",
+ "swiss_bank_account_in_your_pocket.html",
+ "cashless_dystopia.html",
+ "protection_against_government_confiscation.html",
+ "separation_of_money_and_state.html",
+ "extensions.html",
+ "timestamping_service.html",
+ "uncensorable_twitter.html",
+ "provably_fair_gambling.html",
+ "tokens.html",
+ "voting.html",
+ "appendix.html",
+ "bitcoin_whitepaper.html",
+ "challenges.html",
+ "cryptography.html",
+ "antifragile.html",
+ "about_me.html",
+]
+
+titles = {
+ "acknowledgements.html": "Acknowledgments",
+ "about_the_book.html": "About the book",
+ "eli5.html": "Why cryptocurrencies in five minutes",
+ "what_is_a_cryptocurrency.html": "What is a cryptocurrency?",
+ "properties_of_a_cryptocurrency.html": "Properties of a cryptocurrency",
+ "how_do_cryptocurrencies_work.html": "How do cryptocurrencies work?",
+ "look_out_for_snake_oil.html": "Look out for snake oil",
+ "what_is_money.html": "What is money?",
+ "are_cryptocurrencies_money.html": "Are cryptocurrencies money?",
+ "better_digital_payments.html": "Better digital payments",
+ "cheaper_faster.html": "Cheaper & faster",
+ "undesirable_businesses.html": "“Undesirable” businesses",
+ "freezing_of_merchant_accounts.html": "Freezing of merchant accounts",
+ "uncensorable_donations.html": "Uncensorable donations",
+ "for_the_unbanked.html": "For the unbanked",
+ "better_currency.html": "A better currency",
+ "financial_crisis.html": "The financial crisis, bad loans and bailouts",
+ "the_blind_leading_the_blind.html": "The blind leading the blind",
+ "a_defective_system.html": "A defective system",
+ "private_money.html": "Private money",
+ "global_currency.html": "A global currency",
+ "brave_new_world.html": "Brave new world",
+ "darknet_markets.html": "Darknet markets",
+ "swiss_bank_account_in_your_pocket.html":
+ "A Swiss bank account in your pocket",
+ "cashless_dystopia.html": "The cashless dystopia",
+ "protection_against_government_confiscation.html":
+ "Protection against government confiscation",
+ "separation_of_money_and_state.html": "Separation of money and state",
+ "extensions.html": "Extensions",
+ "timestamping_service.html": "Timestamping service",
+ "uncensorable_twitter.html": "Uncensorable Twitter",
+ "provably_fair_gambling.html": "Provably fair gambling",
+ "tokens.html": "Tokens",
+ "voting.html": "Improved voting",
+ "appendix.html": "Appendix",
+ "bitcoin_whitepaper.html": "The Bitcoin white paper",
+ "challenges.html": "Challenges for cryptocurrencies",
+ "cryptography.html": "A hitchhiker’s guide to cryptography",
+ "antifragile.html": "Cryptocurrencies are antifragile",
+ "about_me.html": "About me, the author",
+}
+
+# {src: dst} of hrefs we need to replace
+link_replace = {}
+images = []
+fonts = []
+
+
+def main():
+ clean()
+ setup_basics()
+
+ setup_images()
+ setup_fonts()
+
+ setup_content_opf()
+ setup_toc_ncx()
+ setup_encryption()
+ setup_css()
+
+ setup_post_replacements()
+ setup_posts()
+
+ setup_static_pages()
+ setup_toc()
+
+ create_zip()
+
+
+def clean():
+ # Clean destination directory.
+ subprocess.run(f"rm -r {ebook_dir}/", shell=True)
+ subprocess.run("rm why_cryptocurrencies.epub", shell=True)
+
+
+def setup_basics():
+ # Create mimetype file
+ subprocess.run(f"mkdir -p {ebook_dir}/", shell=True)
+ with open(os.path.join(ebook_dir, "mimetype"), 'w') as f:
+ f.write("application/epub+zip")
+
+ # Create container
+ subprocess.run(f"mkdir -p {meta_dir}", shell=True)
+ subprocess.run(f"cp {ebook_files_dir}/container.xml {meta_dir}/",
+ shell=True)
+
+
+def setup_images():
+ subprocess.run(f"mkdir -p {image_dir}", shell=True)
+ subprocess.run(f"mkdir -p {image_dir}/markets", shell=True)
+ subprocess.run(f"mkdir -p {image_dir}/cover", shell=True)
+ subprocess.run(f"mkdir -p {image_dir}/donations", shell=True)
+
+ # Manually added images
+ subprocess.run(f"cp {ebook_files_dir}/images/* {image_dir}/", shell=True)
+
+ for match in ["images/*", "images/*/*"]:
+ for src in glob.glob(match):
+ if src.startswith("images/landing"):
+ continue
+
+ if src.startswith("images/donations"):
+ continue
+
+ if src.startswith("images/cover"):
+ if src != "images/cover/front.png":
+ continue
+
+ if os.path.isfile(src):
+ dst = os.path.join(oebps_dir, src)
+ subprocess.run(f"cp {src} {dst}", shell=True)
+
+ images.append(src)
+
+ (_, ext) = os.path.splitext(dst)
+ if ext == ".svg":
+ replace_svg_data(dst)
+
+ return images
+
+
+svg_doc_re = re.compile(r"\w*]+>\w*")
+
+
+def replace_svg_data(img):
+ with open(img, 'r') as f:
+ data = f.read()
+
+ data = svg_doc_re.sub("", data)
+
+ with open(img, 'w') as f:
+ f.write(data)
+
+
+def setup_fonts():
+ subprocess.run(f"mkdir -p {font_dir}", shell=True)
+ for src in glob.glob("fonts/*.woff*"):
+ dst = os.path.join(oebps_dir, src)
+ subprocess.run(
+ f"epub-font-obfuscator --id {uid} --input {src} --output {dst}",
+ shell=True)
+ # subprocess.run(f"cp {src} {dst}", shell=True)
+
+ fonts.append(src)
+
+
+def post_id(link):
+ base = os.path.basename(link)
+ (name, ext) = os.path.splitext(base)
+ return name
+
+
+def manifest_post_tag(post):
+ id = post_id(post)
+ href = id + ".xhtml"
+ return f''
+
+
+def spine_toc_post(post):
+ id = post_id(post)
+ return f''
+
+
+def img_id(img):
+ (name, _) = os.path.splitext(img)
+ return name.replace("/", "-")
+
+
+def manifest_img_tag(img):
+ (_, ext) = os.path.splitext(img)
+ id = img_id(img)
+
+ fallback = ""
+ if ext == ".png":
+ t = "png"
+ elif ext == ".svg":
+ t = "svg+xml"
+ fallback = id + "-fallback"
+ elif ext == ".jpg":
+ t = "jpeg"
+ fallback = id + "-fallback"
+ elif ext == ".gif":
+ t = "gif"
+ fallback = id + "-fallback"
+ else:
+ sys.exit("unknown image: " + ext + " " + img)
+
+ if fallback:
+ fallback = f'fallback="{fallback}"'
+
+ properties = ""
+ if id == "images-cover-front":
+ properties = 'properties="cover-image"'
+
+ return f''
+
+
+def manifest_font_tag(font):
+ base = os.path.basename(font)
+ (id, _) = os.path.splitext(base)
+ return f''
+
+
+def setup_content_opf():
+ with open(f"{ebook_files_dir}/content.opf", 'r') as f:
+ data = f.read()
+
+ data = data.replace("◊DATE",
+ datetime.datetime.now().strftime("%Y-%m-%dT%H:%M:%SZ"))
+
+ # ◊MANIFEST_POSTS_TAG
+ #
+ manifest_posts = ('\n' + ' ' * 8).join(
+ [manifest_post_tag(post) for post in toc])
+ data = data.replace("◊MANIFEST_POSTS_TAG", manifest_posts)
+
+ # ◊MANIFEST_IMG_TAG
+ #
+ manifest_imgs = ('\n' + ' ' * 8).join(
+ [manifest_img_tag(img) for img in images])
+ data = data.replace("◊MANIFEST_IMG_TAG", manifest_imgs)
+
+ # ◊MANIFEST_FONT_TAG
+ manifest_fonts = ('\n' + ' ' * 8).join(
+ [manifest_font_tag(font) for font in fonts])
+ data = data.replace("◊MANIFEST_FONT_TAG", manifest_fonts)
+
+ # ◊SPINE_TOC
+ #
+ spine_toc = ('\n' + ' ' * 8).join([spine_toc_post(post) for post in toc])
+ data = data.replace("◊SPINE_TOC", spine_toc)
+
+ with open(f"{oebps_dir}/content.opf", 'w') as f:
+ f.write(data)
+
+
+def post_title(post):
+ return titles[post]
+
+
+def setup_toc_ncx():
+ with open(f"{ebook_files_dir}/toc.ncx", 'r') as f:
+ data = f.read()
+
+ with open(f"{oebps_dir}/toc.ncx", 'w') as f:
+ f.write(data)
+
+
+def font_encryption_descr(font):
+ return f"""
+
+
+
+
+ """
+
+
+def setup_encryption():
+ with open(f"{ebook_files_dir}/encryption.xml", 'r') as f:
+ data = f.read()
+
+ font_encryption = ('\n' + ' ' * 4).join(
+ [font_encryption_descr(font) for font in fonts])
+
+ data = data.replace("◊FONTS_TAG", font_encryption)
+
+ with open(f"{meta_dir}/encryption.xml", 'w') as f:
+ f.write(data)
+
+
+def setup_css():
+ subprocess.run(f"mkdir -p {css_dir}", shell=True)
+ subprocess.run(
+ f"sassc sass/main.scss --style compressed > {css_dir}/main.css",
+ shell=True)
+
+
+def setup_toc():
+ with open("toc.html", 'r') as f:
+ data = f.read()
+
+ data = replace_post_data(data)
+
+ with open(f"{oebps_dir}/toc.xhtml", 'w') as f:
+ f.write(data)
+
+
+def setup_static_pages():
+ for src in glob.glob(f"{ebook_files_dir}/*.xhtml"):
+ with open(src, 'r') as f:
+ data = f.read()
+
+ data = replace_post_data(data)
+
+ dst = os.path.join(oebps_dir, os.path.basename(src))
+ with open(dst, 'w') as f:
+ f.write(data)
+
+
+def setup_post_replacements():
+ for post in toc:
+ (name, ext) = os.path.splitext(post)
+ dst = f'{name}.xhtml'
+ link_replace[post] = dst
+
+
+def setup_posts():
+ for post in toc:
+ setup_post(post)
+
+
+def setup_post(post):
+ (name, ext) = os.path.splitext(post)
+ dst = f'{oebps_dir}/{name}.xhtml'
+ with open(post, 'r') as f:
+ data = f.read()
+
+ data = replace_post_data(data)
+
+ with open(dst, 'w') as f:
+ f.write(data)
+
+
+def replace_post_data(data):
+ for link, new_link in link_replace.items():
+ data = data.replace(link, new_link)
+ data = data.replace('Cheaper & faster', 'Cheaper & faster')
+ # https://github.com/Scripler/scripler/issues/430
+ data = data.replace(' ', ' ')
+ # Use relative links to internal things, not absolute links
+ data = data.replace('href="/', 'href="')
+ data = data.replace('src="/', 'src="')
+ data = data.replace(
+ "◊SHORT_COMMIT", short_commit)
+ # Can be used for debug purposes
+ # data = data.replace(
+ # "◊SHORT_COMMIT", short_commit + ' ' +
+ # datetime.datetime.now().strftime("%Y-%m-%dT%H:%M:%SZ"))
+
+ return data
+
+
+def create_zip():
+ subprocess.run('./zippify')
+
+
+if __name__ == '__main__':
+ main()
diff --git a/for_the_unbanked.html.pm b/for_the_unbanked.html.pm
index e92b1e44..8c7c5969 100644
--- a/for_the_unbanked.html.pm
+++ b/for_the_unbanked.html.pm
@@ -44,7 +44,7 @@ There are ◊strong{◊link[findex-report]{1.7 billion adults}} without a bank a
◊; #df65b0 36-60
◊; #dd1c77 61-80
◊; #980043 81-100
-◊img[#:src "images/unbanked-map.png" #:class "fullwidth" #:link #t #:alt "Adults without a bank account, 2017."]{
+◊img[#:src "images/unbanked-map.png" #:class "fullwidth" #:link #t #:alt "A world map showing the fraction of adults without a bank account in each country, 2017."]{
Adults without a bank account, 2017.
Source ◊link[findex-report]{Global Findex database}.
}
@@ -63,7 +63,7 @@ Another way to look at the world is to visualize the raw number of unbanked in e
◊;#43a2ca 50 - 100 mil
◊; 100 - 150 mil (no country!)
◊;#0868ac > 150 mil
-◊img[#:src "images/unbanked-count-map.png" #:class "fullwidth" #:link #t #:alt "The number of adults without a bank account, 2017."]{
+◊img[#:src "images/unbanked-count-map.png" #:class "fullwidth" #:link #t #:alt "A world map showing the number of adults without a bank account in each country, 2017."]{
The number of adults without a bank account, 2017.
Source ◊link[findex-report]{Global Findex database} (◊link[findex-interactive]{interactive}).
}
@@ -81,7 +81,7 @@ The ◊link[findex-report]{Global Findex database} also tried to examine why peo
If this is interesting to you I suggest you ◊link[findex-report]{give the report a read}. There are tons of different statistics and I only refer to a fraction of the data available.
}
-◊img[#:src "images/why-unbanked.svg" #:link #t #:alt "Reported reason for adults not having a bank account, 2017."]{
+◊img[#:src "images/why-unbanked.svg" #:link #t #:alt "Reported reasons table."]{
Reported reason for adults not having a bank account, 2017. More than one reason could be given.
Source ◊link[findex-report]{Global Findex database}.
}
diff --git a/freezing_of_merchant_accounts.html.pm b/freezing_of_merchant_accounts.html.pm
index 5c9d178b..c3c50ad9 100644
--- a/freezing_of_merchant_accounts.html.pm
+++ b/freezing_of_merchant_accounts.html.pm
@@ -30,7 +30,7 @@ This chapter continues on the same idea as the ◊link[prev]{previous one}, but
Imagine coming in to work one day and having this conversion with your boss:
-◊div[#:class "story"]{
+◊section[#:class "story"]{
◊trow{I'm sorry John, but we'll pay you in 6 months.}
◊trow{What?}
◊trow{Don't worry, you'll still get your full salary, but we'll pay it in 6 months.}
diff --git a/gen-and-check-ebook b/gen-and-check-ebook
new file mode 100755
index 00000000..0b224b6c
--- /dev/null
+++ b/gen-and-check-ebook
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+./generate
+./ebookify
+epub-check ./_ebook/why_cryptocurrencies.epub
+
diff --git a/global_currency.html.pm b/global_currency.html.pm
index 1b879e06..5bcddd7f 100644
--- a/global_currency.html.pm
+++ b/global_currency.html.pm
@@ -9,7 +9,7 @@
◊(clear-sidenotes)
-◊img[#:src "/images/global.png" #:alt "You can send coins all over the world."]{}
+◊img[#:src "/images/global.png" #:alt "You can send coins all over the world." #:decorative #t]{}
Cryptocurrencies don't have any borders. They allow you to send and receive money from anywhere in the world; to bypass sanctions and border control; opt-out of local monetary policies; and use a currency that's global to an extent we've never seen before.
diff --git a/how_do_cryptocurrencies_work.html.pm b/how_do_cryptocurrencies_work.html.pm
index 81768f4b..cfdc6ed5 100644
--- a/how_do_cryptocurrencies_work.html.pm
+++ b/how_do_cryptocurrencies_work.html.pm
@@ -83,7 +83,7 @@ For example, Sneaky Steve wants to buy a computer from Honest Harry and wants to
What Sneaky Steve tries to do is send ◊sans-tnum{1 BTC} to the merchant, Honest Harry, and then send a copy of ◊sans-tnum{1 BTC} to his other address: ◊sans-tnum{Sneaky Steve 2}. (It's possible to have as many addresses as you want---a consequence of the permissionless nature of Bitcoin.)
◊img[#:src "/images/double-spend.png"
- #:alt "Double spending by sending a coin to someone and back to himself."]{Sneaky Steve sends a digital coin both to Honest Harry and himself.}
+ #:alt "Double spending figure"]{Sneaky Steve sends a digital coin both to Honest Harry and himself.}
If we didn't prevent this, the ledger might look like this:
@@ -269,7 +269,7 @@ When a miner finds a solution, she can update the ledger by adding a block to th
A blockchain is what it sounds like: a chain of blocks where a new block builds on previous blocks. When a miner searches for a solution, she must target a block on a specific height---the POW problem includes a reference to the previous block and it only fits at a specific position in the chain. When a new block is added, all miners need to work on a new problem targeting that block.
-◊img[#:src "/images/add_block.png" #:alt "A new block is added by linking it with a POW solution."]{
+◊img[#:src "/images/add_block.png" #:alt "A new block is added by linking it to the previous block with a POW solution."]{
The blocks in the blockchain are linked with a key obtained by solving the POW problem.
}
@@ -344,7 +344,7 @@ The blockchain is duplicated, stored, and maintained by many different people; y
What happens if two miners find a block at the same height? For example, one where Sneaky Steve sends money to Honest Harry and one where Sneaky Steve sends money to himself?
◊img[#:src "/images/double_spend_fork.png"
- #:alt "Two blocks can be added at the same height."]{
+ #:alt "Two blocks can be added at the same height, even if they contain different transactions."]{
Two blocks at the same height with different transactions.
}
@@ -388,7 +388,7 @@ It works like this:
}
}
-◊img[#:src "/images/reversal1.png" #:alt "Sneaky Steve pays Honest Harry."]{
+◊img[#:src "/images/reversal1.png" #:alt "Sneaky Steve paying Honest Harry, and a block with two confirmations."]{
Sneaky Steve pays Honest Harry and they wait until the transaction has two confirmations.
}
◊img[#:src "/images/reversal3.png" #:alt "Honest Harry gives Sneaky Steve jeans."]{
@@ -504,10 +504,12 @@ A 51% can be detected and there can be severe negative consequences:
◊ul{
◊li{The Bitcoin price might crash.}
◊li{Exchanges might blacklist the stolen funds.}
- ◊li{The community might change POW and make all mining rigs worthless.◊mn{monero-POW} ◊note-pos{monero-POW}}
+ ◊li{The community might change POW and make all mining rigs worthless.◊mn{monero-POW}}
◊li{It's hard to keep warehouses full of mining rigs of that scale a secret---there's a big risk to get caught.}
}
+◊note-pos{monero-POW}
+
Bitcoin miners are rewarded in bitcoin and they also can't be spent until after 100 blocks---roughly 16 hours. Executing a 51% attack that crashes the price would directly affect the rewards. If the community goes for the nuclear option and change POW, the massive initial investment into mining equipment might be lost.
These risks needs to weighed against what profits a 51% attack could generate. Maybe exchanges could get defrauded for $100 million (roughly a 5% return on investment)? A 51% miner would make that back in about one week---risk-free.◊mn{btg2}
diff --git a/images/hn-html.png b/images/hn-html.png
new file mode 100644
index 00000000..8f8140f0
--- /dev/null
+++ b/images/hn-html.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8ce9f307f17ce9ff9f7c8fc4e1d8227981782bf81cb4c359d4241638d474d8d1
+size 34003
diff --git a/landing.html.p b/landing.html.p
index 95bd7d97..1dc9e43e 100644
--- a/landing.html.p
+++ b/landing.html.p
@@ -1,16 +1,13 @@
◊(local-require pollen/tag)
-
+
◊|main-title|
-
-
+
-
-
-
-
+ ◊(->html doc #:splice #t)
diff --git a/tokens.html.pm b/tokens.html.pm
index 824d80b4..c1282d6d 100644
--- a/tokens.html.pm
+++ b/tokens.html.pm
@@ -165,15 +165,15 @@ I think visualizations can help us compare large amounts like these, so here's o
◊div[#:class "money-visualization"]{
- ◊(small-img "Jeff Bezos" "/images/markets/small.png")◊mn[#:top -3]{bezos}
+ ◊(small-img "Jeff Bezos" "/images/markets/small.png")◊mn2[#:top -3]{bezos}
- ◊(market-img "Gold" "/images/markets/gold.png")◊mn[#:top -4]{gold}
+ ◊(market-img "Gold" "/images/markets/gold.png")◊mn2[#:top -4]{gold}
- ◊(market-img "Money" "/images/markets/money.png")◊mn[#:top -5]{money}
+ ◊(market-img "Money" "/images/markets/money.png")◊mn2[#:top -5]{money}
- ◊(market-img "Derivatives" "/images/markets/derivatives.png")◊mn[#:top -22]{derivatives}
+ ◊(market-img "Derivatives" "/images/markets/derivatives.png")◊mn2[#:top -22]{derivatives}
- ◊(small-img "Bitcoin" "/images/markets/small.png")◊mn[#:top -5]{bitcoin}
+ ◊(small-img "Bitcoin" "/images/markets/small.png")◊mn2[#:top -5]{bitcoin}
}
◊ndef["bezos"]{
@@ -207,12 +207,12 @@ I think visualizations can help us compare large amounts like these, so here's o
`(div ((class "block"))
(div ((class "title")) ,title)
(div ((class "wrapper"))
- (img ((src ,src))))))
+ (img ((src ,src) (role "presentation") (alt ,title))))))
◊(define (small-img title src)
`(div ((class "block"))
(div ((class "title")) ,title)
(div ((class "wrapper small"))
- (img ((src ,src))))))
+ (img ((src ,src) (role "presentation") (alt ,title))))))
◊; Extremely difficult to this with text, as fonts/sizes looks very different.
diff --git a/uncensorable_donations.html.pm b/uncensorable_donations.html.pm
index b1e5980b..129b1edb 100644
--- a/uncensorable_donations.html.pm
+++ b/uncensorable_donations.html.pm
@@ -195,7 +195,7 @@ This is ◊strong{not} a glorification of WikiLeaks---they have ◊link[wikileak
◊entry["The Chelsea Manning leaks"
#:date "July 5, 2010"]{
- ◊div[#:class "caution"]{First I must caution you: it's very easy to become numb when you read about these leaks. The sheer amount of horror is enough to overwhelm you and might cause your brain to suppress your emotions, maybe out of self-defense. But try to remember that this happened to real people---it's not just a mass of text and numbers. Please don't relegate this as just another forgettable statistic.}
+ ◊div[#:class "caution" #:role "note"]{First I must caution you: it's very easy to become numb when you read about these leaks. The sheer amount of horror is enough to overwhelm you and might cause your brain to suppress your emotions, maybe out of self-defense. But try to remember that this happened to real people---it's not just a mass of text and numbers. Please don't relegate this as just another forgettable statistic.}
Chelsea Manning (formerly Bradley Manning) is a former soldier of the United States who provided WikiLeaks with nearly 750,000 military and diplomatic documents. They were released in batches and spread out over a period of time. Some of the content was absolutely shocking and caused global outrage, I've tried to pick out some notable leaks◊mn{more-leaks}:
@@ -220,7 +220,7 @@ This is ◊strong{not} a glorification of WikiLeaks---they have ◊link[wikileak
At 2019-08-28 the transcript timestamps are slightly off compared to the full video, I've tried to match them up better.
}
- ◊div[#:class "transcript-wrapper"]{
+ ◊section[#:class "transcript-wrapper"]{
◊transcript{
02:34 He's got an RPG [Rocket Propelled Grenade]?
@@ -308,10 +308,10 @@ This is ◊strong{not} a glorification of WikiLeaks---they have ◊link[wikileak
66 thousand innocent people dead in six years. That's like 22 World Trade center attacks (where 2,977 people died)---more than three a year. Or 31 innocent people dead every day during the six years.
}
- ◊note-pos[#:top -7]{wtc}
-
}
+ ◊note-pos[#:top -7]{wtc}
+
Countless numbers of civilians killed---while soldiers are laughing---and systematic cover-ups to hide it all.◊mn{purpose}
◊ndef["purpose"]{
@@ -589,10 +589,10 @@ This is ◊strong{not} a glorification of WikiLeaks---they have ◊link[wikileak
(if (string=? row "\n")
""
(let ((cols (string-split row " ")))
- `(div ((class "row"))
- (span ((class "time")) ,(car cols))
- (span ((class "txt")) ,@(cdr cols))))))
- `(div ((class "transcript"))
+ `(div ((class "row") (role "row"))
+ (span ((class "time") (role "cell")) ,(car cols))
+ (span ((class "txt") (role "cell")) ,@(cdr cols))))))
+ `(div ((class "transcript") (role "grid"))
,@(map make-row rows)))
◊(define execution-of-children
@@ -828,9 +828,11 @@ Of course, covering up or rationalizing events isn't a U.S. only phenomena. Here
It was even forbidden to talk about them negatively.
}
- ◊li{How the Soviet Union tried to cover up the ◊link[chernobyl-accident]{Chernobyl nuclear disaster}.◊mn{chernobyl-TV} ◊note-pos{chernobyl-TV}}
+ ◊li{How the Soviet Union tried to cover up the ◊link[chernobyl-accident]{Chernobyl nuclear disaster}.◊mn{chernobyl-TV}}
}
+◊note-pos{chernobyl-TV}
+
◊ndef["dan-hitler"]{
Dan Carlin, creator of the excellent ◊link[hardcore-history]{Hardcore History} podcast, brought up an interesting question:
diff --git a/undesirable_businesses.html.pm b/undesirable_businesses.html.pm
index 32ad9c1a..bf6b6412 100644
--- a/undesirable_businesses.html.pm
+++ b/undesirable_businesses.html.pm
@@ -161,14 +161,14 @@ Therefore, most payment processors ◊link[stripe-restricted]{explicitly forbid}
◊img[#:src "/images/xxx-payments1.png"
- #:alt "Payment processor doesn't want to do business with porn."]{
+ #:alt "Payment processing denied figure"]{
Payment processors usually don't want anything to do with porn sites.
}
Instead, they have a third-party request the payment on their behalf and do some shady stuff. They can for example claim the payment is for another type of business, which isn't banned by the payment processor.
◊img[#:src "/images/xxx-payments2.png"
- #:alt "An intermediary makes it possible for the porn business to use a payment processor."]{
+ #:alt "Payment processing ok with an intermediary figure"]{
Another party acting as an intermediary might get accepted by the payment processor, especially if they disguise themselves.
}
diff --git a/voting.html.pm b/voting.html.pm
index b251225b..46ffe745 100644
--- a/voting.html.pm
+++ b/voting.html.pm
@@ -280,7 +280,7 @@ With the tokens distributed, you could cast a vote by sending them to predetermi
It's easy to give multiple options. For example if you want to be able to differentiate between those who don't care, and those who want to vote but not any candidate, just have an additional "blank" address voters can send to.
}
-◊img[#:src "/images/voting.png" #:alt "One vote is given out to each person, who then sends it to their voting address of choice."]{
+◊img[#:src "/images/voting.png" #:alt "One vote is given out to each person by the state, who then sends it to their voting address of choice (Hillary or Trump)."]{
Each arrow corresponds to a token transaction and the "Hillary" and "Trump" boxes are addresses. The state is responsible for issuing the voting tokens to the voters and the voters in turn send them to the address they want to vote for. In this example Hillary got 1 vote and Trump got 2, and everyone voted.
}
diff --git a/what_is_money.html.pm b/what_is_money.html.pm
index 888d44f6..88ff2a28 100644
--- a/what_is_money.html.pm
+++ b/what_is_money.html.pm
@@ -40,13 +40,13 @@ First, let's look at some interesting historical examples of items that have bee
◊money["Shells"
#:date "1200 B.C."
#:img "/images/cowry.png"
- #:alt "Sea shells."]{
+ #:alt "Sea shells"]{
Sea shells ◊link[sea-shells]{have been used as money for centuries} and were commonly used in parts of Africa and Asia but also in other parts of the world. In West Africa, they saw ◊link[shell-usage]{significant use until the 20◊sup{th} century}.
}
◊money["Coins in ancient Greece"
#:date "500 B.C."
#:img "images/greek_coin.png"
- #:alt "A greek coin."]{
+ #:alt "A greek coin"]{
The Greeks ◊link[ancient-greece-coinage]{used coins} made from precious metal like silver, bronze, and gold. They also stamped the coins with beautiful portraits for a truly modern look.
}
◊money["Rai stones"
@@ -58,7 +58,7 @@ First, let's look at some interesting historical examples of items that have bee
◊money["A 20kg copper coin"
#:date "1644"
#:img "images/20kg_copper.png"
- #:alt "A 20kg copper coin in a wheelbarrow."]{
+ #:alt "A 20kg copper coin in a wheelbarrow"]{
Another example of---let's say interesting---form of money is ◊link[largest-coin]{the world's largest coin.} It's a copper coin weighing 20kg, issued in Sweden.
Since copper was worth much less than silver, very large coins had to be made to offset the difference. At that time, coins did contain raw materials according to their value, which isn't the case today.
@@ -66,7 +66,7 @@ First, let's look at some interesting historical examples of items that have bee
◊money["A 100 billion mark note"
#:date "1924"
#:img "images/german_notes.png"
- #:alt "A large pyramid of paper money."]{
+ #:alt "A large pyramid of paper money"]{
Bank notes---paper money---are easy to use but they do have problems of their own. Unless kept in check, by for example ◊link[rel-gold-standard]{the gold standard}, they can be mass produced to cause ◊link[hyperinflation]{hyperinflation}.
◊link[germany-wallpaper]{This is what happened in Germany} after the first World War. They had massive debts after losing the war, so they tried to print enough money to pay off the debts.◊mn{germany-stories}
@@ -78,13 +78,13 @@ First, let's look at some interesting historical examples of items that have bee
◊money["Cigarettes in prison"
#:date `("20" (sup "th") " century")
#:img "images/prison_money.png"
- #:alt "A cigarette."]{
+ #:alt "A cigarette"]{
Like depicted in the movie Shawshank Redemption cigarettes are used in some prisons ◊link[prison-cigarettes]{as a form of money}. Today, some prisons have started to ban smoking, so they instead use things like ◊link[prison-stamps]{stamps} or ◊link[prison-ramen]{ramen}.
}
◊money["Euro bank notes"
#:date `("21" (sup "th") " century")
#:img "images/bank_notes.png"
- #:alt "Euro bank notes."]{
+ #:alt "Euro bank notes"]{
There are many kinds of ◊em{fiat currencies},◊mn{fiat-commodity} for example, the Euro. Modern coins aren't made of valuable metal and paper notes are used for large denominations.
◊note-pos[#:top -6 #:bottom -20]{fiat-commodity}
@@ -92,13 +92,13 @@ First, let's look at some interesting historical examples of items that have bee
◊money["Dogecoin"
#:date "2013"
#:img "images/doge.png"
- #:alt "Doge."]{
+ #:alt "Doge"]{
Dogecoin is a cryptocurrency and while created as a "joke currency" it quickly gained popularity as a tipping tool online. You can still find merchants who accept it today for things like domain names, web hosting, VPNs, or games.
}
◊money["Marbles on the school yard"
#:date "2017"
#:img "images/marbles.png"
- #:alt "Two people playing with marbles."]{
+ #:alt "Two people playing with marbles"]{
Kids on the school-yard often come up with interesting forms of money. For example, collectible card games or game components. Another example is marbles used in a Swedish game where you win your opponents marbles. (And those with many marbles had higher status in class.)◊mn{pokemon}
◊note-pos[#:bottom -20]{pokemon}
@@ -131,7 +131,7 @@ First, let's look at some interesting historical examples of items that have bee
[else
""]))
`(div ((class "example"))
- (img ((src ,img) (alt ,alt)))
+ (img ((src ,img) (alt ,alt) (role "presentation")))
(div ((class "txt"))
(div ((class "header"))
(h3 ,title)
diff --git a/zippify b/zippify
new file mode 100755
index 00000000..96a04b30
--- /dev/null
+++ b/zippify
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+cd _ebook/
+zip -X0 why_cryptocurrencies.epub mimetype
+zip -Xur9D why_cryptocurrencies.epub *