1
1
mirror of https://github.com/sdiehl/wiwinwlh.git synced 2024-09-11 12:05:25 +03:00

Write more

This commit is contained in:
sdiehl 2020-01-25 14:27:07 +00:00
parent de3ed731cb
commit 5b127bd40d
6 changed files with 292 additions and 37 deletions

View File

@ -8,7 +8,7 @@ ETEMPLATE = resources/page.epubt
UNICODE_MAP = resources/unicodemapping.tex UNICODE_MAP = resources/unicodemapping.tex
FLAGS = --standalone --toc --toc-depth=2 --highlight-style pygments FLAGS = --standalone --toc --toc-depth=2 --highlight-style tango
LFLAGS = --top-level-division=chapter -V documentclass=book LFLAGS = --top-level-division=chapter -V documentclass=book
HFLAGS = -c css/style.css -c css/layout.css HFLAGS = -c css/style.css -c css/layout.css
EFLAGS = EFLAGS =

144
img/cover.ps Normal file
View File

@ -0,0 +1,144 @@
%!PS-Adobe-3.0
%%Creator: cairo 1.16.0 (https://cairographics.org)
%%CreationDate: Sat Jan 25 14:11:28 2020
%%Pages: 1
%%DocumentData: Clean7Bit
%%LanguageLevel: 2
%%DocumentMedia: 170x120mm 482 340 0 () ()
%%BoundingBox: 0 0 482 341
%%EndComments
%%BeginProlog
/languagelevel where
{ pop languagelevel } { 1 } ifelse
2 lt { /Helvetica findfont 12 scalefont setfont 50 500 moveto
(This print job requires a PostScript Language Level 2 printer.) show
showpage quit } if
/q { gsave } bind def
/Q { grestore } bind def
/cm { 6 array astore concat } bind def
/w { setlinewidth } bind def
/J { setlinecap } bind def
/j { setlinejoin } bind def
/M { setmiterlimit } bind def
/d { setdash } bind def
/m { moveto } bind def
/l { lineto } bind def
/c { curveto } bind def
/h { closepath } bind def
/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto
0 exch rlineto 0 rlineto closepath } bind def
/S { stroke } bind def
/f { fill } bind def
/f* { eofill } bind def
/n { newpath } bind def
/W { clip } bind def
/W* { eoclip } bind def
/BT { } bind def
/ET { } bind def
/BDC { mark 3 1 roll /BDC pdfmark } bind def
/EMC { mark /EMC pdfmark } bind def
/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def
/Tj { show currentpoint cairo_store_point } bind def
/TJ {
{
dup
type /stringtype eq
{ show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse
} forall
currentpoint cairo_store_point
} bind def
/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore
cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def
/Tf { pop /cairo_font exch def /cairo_font_matrix where
{ pop cairo_selectfont } if } bind def
/Td { matrix translate cairo_font_matrix matrix concatmatrix dup
/cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point
/cairo_font where { pop cairo_selectfont } if } bind def
/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def
cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def
/g { setgray } bind def
/rg { setrgbcolor } bind def
/d1 { setcachedevice } bind def
/cairo_data_source {
CairoDataIndex CairoData length lt
{ CairoData CairoDataIndex get /CairoDataIndex CairoDataIndex 1 add def }
{ () } ifelse
} def
/cairo_flush_ascii85_file { cairo_ascii85_file status { cairo_ascii85_file flushfile } if } def
/cairo_image { image cairo_flush_ascii85_file } def
/cairo_imagemask { imagemask cairo_flush_ascii85_file } def
/cairo_set_page_size {
% Change paper size, but only if different from previous paper size otherwise
% duplex fails. PLRM specifies a tolerance of 5 pts when matching paper size
% so we use the same when checking if the size changes.
/setpagedevice where {
pop currentpagedevice
/PageSize known {
2 copy
currentpagedevice /PageSize get aload pop
exch 4 1 roll
sub abs 5 gt
3 1 roll
sub abs 5 gt
or
} {
true
} ifelse
{
2 array astore
2 dict begin
/PageSize exch def
/ImagingBBox null def
currentdict end
setpagedevice
} {
pop pop
} ifelse
} {
pop
} ifelse
} def
%%EndProlog
%%BeginSetup
%%EndSetup
%%Page: 1 1
%%BeginPageSetup
%%PageMedia: 170x120mm
%%PageBoundingBox: 0 0 482 341
482 341 cairo_set_page_size
%%EndPageSetup
q 0 0 482 341 rectclip
1 0 0 -1 0 341 cm q
Q q
q
0 0 482 341 re W n
[ 1 0 0 1 0 0 ] concat
q
0 g
8.503937 w
0 J
0 j
[] 0.0 d
4 M q 1 0 0 1 0 0 cm
0 340.156 m 37.797 283.465 75.59 226.77 113.387 170.078 c 75.59 113.387
37.797 56.691 0 0 c 28.348 0 56.691 0 85.039 0 c 122.836 56.691 160.629
113.387 198.426 170.078 c 160.629 226.77 122.836 283.465 85.039 340.156
c 56.691 340.156 28.348 340.156 0 340.156 c h
0 340.156 m S Q
q 1 0 0 1 0 0 cm
113.387 340.156 m 226.773 170.078 l 113.387 0 l 198.426 0 l 425.195 340.156
l 340.156 340.156 l 269.293 233.859 l 198.426 340.156 l h
113.387 340.156 m S Q
q 1 0 0 1 0 0 cm
387.402 240.945 m 349.609 184.254 l 481.891 184.25 l 481.891 240.945 l
h
387.402 240.945 m S Q
q 1 0 0 1 0 0 cm
330.711 155.906 m 292.914 99.215 l 481.891 99.211 l 481.891 155.906 l h
330.711 155.906 m S Q
Q
Q
Q Q
showpage
%%Trailer
%%EOF

92
resources/haskell.sty Normal file
View File

@ -0,0 +1,92 @@
\usepackage{xcolor}
\usepackage{xcolor-solarized}
\usepackage{textcomp}
\definecolor{sbase03}{HTML}{002B36}
\definecolor{sbase02}{HTML}{073642}
\definecolor{sbase01}{HTML}{586E75}
\definecolor{sbase00}{HTML}{657B83}
\definecolor{sbase0}{HTML}{839496}
\definecolor{sbase1}{HTML}{93A1A1}
\definecolor{sbase2}{HTML}{EEE8D5}
\definecolor{sbase3}{HTML}{FDF6E3}
\definecolor{syellow}{HTML}{B58900}
\definecolor{sorange}{HTML}{CB4B16}
\definecolor{sred}{HTML}{DC322F}
\definecolor{smagenta}{HTML}{D33682}
\definecolor{sviolet}{HTML}{6C71C4}
\definecolor{sblue}{HTML}{268BD2}
\definecolor{scyan}{HTML}{2AA198}
\definecolor{sgreen}{HTML}{859900}
\providecommand{\KeywordTok}{}
\providecommand{\DataTypeTok}{}
\providecommand{\DecValTok}{}
\providecommand{\BaseNTok}{}
\providecommand{\FloatTok}{}
\providecommand{\ConstantTok}{}
\providecommand{\CharTok}{}
\providecommand{\SpecialCharTok}{}
\providecommand{\StringTok}{}
\providecommand{\VerbatimStringTok}{}
\providecommand{\SpecialStringTok}{}
\providecommand{\ImportTok}{}
\providecommand{\CommentTok}{}
\providecommand{\DocumentationTok}{}
\providecommand{\AnnotationTok}{}
\providecommand{\CommentVarTok}{}
\providecommand{\OtherTok}{}
\providecommand{\FunctionTok}{}
\providecommand{\VariableTok}{}
\providecommand{\ControlFlowTok}{}
\providecommand{\OperatorTok}{}
\providecommand{\BuiltInTok}{}
\providecommand{\ExtensionTok}{}
\providecommand{\PreprocessorTok}{}
\providecommand{\AttributeTok}{}
\providecommand{\RegionMarkerTok}{}
\providecommand{\InformationTok}{}
\providecommand{\WarningTok}{}
\providecommand{\AlertTok}{}
\providecommand{\ErrorTok}{}
\providecommand{\NormalTok}{}
\DefineShortVerb[commandchars=\\\{\}]{\|}
\DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}}
\newenvironment{Shaded}{\begin{shaded}}{\end{shaded}}
\definecolor{shadecolor}{gray}{0.97}
\renewcommand{\KeywordTok}[1]{\textcolor{sblue}{\textbf{#1}}}
\renewcommand{\DataTypeTok}[1]{\textcolor{syellow}{{#1}}}
\renewcommand{\DecValTok}[1]{\textcolor{scyan}{{#1}}}
\renewcommand{\BaseNTok}[1]{\textcolor{scyan}{{#1}}}
\renewcommand{\FloatTok}[1]{\textcolor{scyan}{{#1}}}
\renewcommand{\ConstantTok}[1]{\textcolor{scyan}{{#1}}}
\renewcommand{\CharTok}[1]{\textcolor{scyan}{{#1}}}
\renewcommand{\SpecialCharTok}[1]{\textcolor{sred}{{#1}}}
\renewcommand{\StringTok}[1]{\textcolor{scyan}{{#1}}}
\renewcommand{\VerbatimStringTok}[1]{{#1}}
\renewcommand{\SpecialStringTok}[1]{\textcolor{sred}{{#1}}}
\renewcommand{\ImportTok}[1]{{#1}}
\renewcommand{\CommentTok}[1]{\textcolor{sbase1}{\textit{{#1}}}}
\renewcommand{\DocumentationTok}[1]{\textcolor{sbase1}{\textit{{#1}}}}
\renewcommand{\AnnotationTok}[1]{\textcolor{sbase1}{\textbf{\textit{{#1}}}}}
\renewcommand{\CommentVarTok}[1]{\textcolor{sbase1}{\textbf{\textit{{#1}}}}}
\renewcommand{\OtherTok}[1]{\textcolor{sblue}{#1}}
\renewcommand{\FunctionTok}[1]{\textcolor{sblue}{{#1}}}
\renewcommand{\VariableTok}[1]{\textcolor{sblue}{{#1}}}
\renewcommand{\ControlFlowTok}[1]{\textcolor{sgreen}{\textbf{{#1}}}}
\renewcommand{\OperatorTok}[1]{\textcolor{sgreen}{{#1}}}
\renewcommand{\BuiltInTok}[1]{{#1}}
\renewcommand{\ExtensionTok}[1]{{#1}}
\renewcommand{\PreprocessorTok}[1]{\textcolor{sorange}{{#1}}}
\renewcommand{\AttributeTok}[1]{{#1}}
\renewcommand{\RegionMarkerTok}[1]{{#1}}
\renewcommand{\InformationTok}[1]{\textcolor{sbase1}{\textbf{\textit{{#1}}}}}
\renewcommand{\WarningTok}[1]{\textcolor{sorange}{\textbf{\textit{{#1}}}}}
\renewcommand{\AlertTok}[1]{\textcolor{sred}{\textbf{{#1}}}}
\renewcommand{\ErrorTok}[1]{\textcolor{sred}{\textbf{{#1}}}}
\renewcommand{\NormalTok}[1]{{#1}}
% Paragraph Literals
\renewcommand{\texttt}[1]{\colorbox{sbase2}{{\ttfamily #1}}}

View File

@ -26,12 +26,18 @@
\usepackage{amssymb,amsmath} \usepackage{amssymb,amsmath}
\usepackage{framed} \usepackage{framed}
\usepackage{fancyvrb} \usepackage{fancyvrb}
\usepackage{catchfile}
% Syntax Higlighting
\usepackage{listings} \usepackage{listings}
\usepackage{resources/haskell}
\lstset{ \lstset{
language=haskell, language=haskell,
frame=ltb, frame=ltb,
framerule=0pt, framerule=0pt,
xleftmargin=2pt, xleftmargin=15pt,
framexleftmargin=16pt, framexleftmargin=16pt,
framextopmargin=25pt, framextopmargin=25pt,
framexbottommargin=25pt, framexbottommargin=25pt,
@ -64,9 +70,6 @@
\urlstyle{same} \urlstyle{same}
$if(highlighting-macros)$
$highlighting-macros$
$endif$
$if(tables)$ $if(tables)$
\usepackage{longtable,booktabs} \usepackage{longtable,booktabs}
$endif$ $endif$
@ -147,27 +150,33 @@ $endfor$
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{titlepage} \begin{titlepage}
\definecolor{titlepagecolor}{HTML}{8A1C0A} \definecolor{titlepagecolor}{HTML}{FDF6E3}
\definecolor{namecolor}{cmyk}{1,.50,0,.10} \definecolor{namecolor}{cmyk}{1,.50,0,.10}
\pagecolor{titlepagecolor} \pagecolor{titlepagecolor}
\color{white}
\vspace*{\stretch{1.0}} \vspace*{\stretch{1.0}}
\begin{center} \begin{center}
\Huge\textbf{What I Wish I Knew When Learning Haskell}\\ \Huge\textbf{What I Wish I Knew When Learning Haskell}\\
\large\textit{Stephen Diehl} \vspace*{\stretch{0.5}}
\Large\textit{Stephen Diehl}
\end{center} \end{center}
\vspace*{\stretch{2.0}} \vspace*{\stretch{2.0}}
\begin{figure} \begin{figure}
\centering \centering
\includegraphics[height=3in,width=3in]{img/Haskell-Logo.ps} \includegraphics[height=3in,width=3in]{img/cover.ps}
\end{figure} \end{figure}
\end{titlepage} \end{titlepage}
\pagecolor{white} \pagecolor{white}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\textbf{Date}: \today \\
\textbf{Git Commit:} \texttt{\input{.git/ORIG_HEAD}}
\newpage
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
$if(abstract)$ $if(abstract)$
\begin{abstract} \begin{abstract}
$abstract$ $abstract$

View File

@ -13,4 +13,6 @@
\newunicodechar{}{\ensuremath{\sbullet}} \newunicodechar{}{\ensuremath{\sbullet}}
\newunicodechar{λ}{\ensuremath{\lambda}} \newunicodechar{λ}{\ensuremath{\lambda}}
\newunicodechar{Λ}{\ensuremath{\Lambda}} \newunicodechar{Λ}{\ensuremath{\Lambda}}
\newunicodechar{}{\ensuremath{\blacksquare}}
\newunicodechar{μ}{\ensuremath{\mu}}
\newunicodechar{}{\ensuremath{\mathbb{N}}} \newunicodechar{}{\ensuremath{\mathbb{N}}}

View File

@ -2,8 +2,6 @@
% Stephen Diehl % Stephen Diehl
% January 2020 % January 2020
Stephen Diehl (<a class="author" href="https://twitter.com/smdiehl">@smdiehl</a> )
Version Version
------- -------
@ -3598,7 +3596,7 @@ Partial types may be used to avoid writing uninteresting pieces of the
signature, which can be convenient in development: signature, which can be convenient in development:
```haskell ```haskell
{-# OPTIONS -XPartialTypeSignatures #-} {-# LANGUAGE PartialTypeSignatures #-}
triple :: Int -> _ triple :: Int -> _
triple i = (i,i,i) triple i = (i,i,i)
@ -3607,8 +3605,9 @@ triple i = (i,i,i)
If the `-Wpartial-type-signatures` GHC option is set, partial types will still If the `-Wpartial-type-signatures` GHC option is set, partial types will still
trigger warnings. trigger warnings.
See: [Partial Type Signatures](https://ghc.haskell.org/trac/ghc/wiki/PartialTypeSignatures) See:
* [Partial Type Signatures](https://ghc.haskell.org/trac/ghc/wiki/PartialTypeSignatures)
RecursiveDo RecursiveDo
----------- -----------
@ -10208,13 +10207,8 @@ Cryptonite is the standard Haskell cryptography library. It provides support for
hash functions, elliptic curve cryptography, ciphers, one time passwords, hash functions, elliptic curve cryptography, ciphers, one time passwords,
entropy generation and safe memory handling. entropy generation and safe memory handling.
* AES SHA Hashing
* Ed25519 -----------
* Curve25519
* Blake2
* Argon2
**Hashing**
A cryptographic hash function is a special class of hash function that has A cryptographic hash function is a special class of hash function that has
certain properties which make it suitable for use in cryptography. It is a certain properties which make it suitable for use in cryptography. It is a
@ -10222,21 +10216,29 @@ mathematical algorithm that maps data of arbitrary size to a bit string of a
fixed size (a hash function) which is designed to also be a one-way function, fixed size (a hash function) which is designed to also be a one-way function,
that is, a function which is infeasible to invert. that is, a function which is infeasible to invert.
#### SHA3
~~~~ {.haskell include="src/32-cryptography/Keccak.hs"}
~~~~
#### SHA256
SHA-256 is a cryptographic hash function from the SHA-2 family and is SHA-256 is a cryptographic hash function from the SHA-2 family and is
standardized by NIST. It produces a 256-bit message digest. standardized by NIST. It produces a 256-bit message digest.
~~~~ {.haskell include="src/32-cryptography/SHA.hs"} ~~~~ {.haskell include="src/32-cryptography/SHA.hs"}
~~~~ ~~~~
memory ~~~~ {.haskell include="src/32-cryptography/Keccak.hs"}
------ ~~~~
Password Hashing
----------------
Curve25519 Diffie-Hellman
-------------------------
Ed25519 EdDSA
-------------
* Blake2
* Argon2
Secure Memory Handling
----------------------
ByteArray ByteArray
@ -10252,26 +10254,32 @@ convertToBase :: (ByteArrayAccess bin, ByteArray bout) => Base -> bin -> bout
convertFromBase :: (ByteArrayAccess bin, ByteArray bout) => Base -> bin -> Either String bout convertFromBase :: (ByteArrayAccess bin, ByteArray bout) => Base -> bin -> Either String bout
``` ```
galois-field AES Ciphers
------------ -----------
TODO TODO
elliptic-curve Galois Fields
-------------- -------------
TODO TODO
pairing Elliptic Curves
------- ---------------
TODO TODO
arithmetic-circuits Pairing Cryptography
------------------- --------------------
TODO TODO
zkSNARKs
--------
TODO
Date and Time Date and Time
============= =============