From 08588f9907299b1a927e281d5c65b46b7cefa427 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Apr 2023 08:33:41 -0300 Subject: Revamp v2/ --- v2/src/content/.well-known/security.txt | 4 + v2/src/content/favicon.svg | 1 + .../pastebins/raku-tuple-type-annotation.md | 37 +++++ v2/src/content/pastebins/sicp-exercise-3-19.md | 10 +- v2/src/content/public.asc.txt | 86 ++++++++++++ v2/src/content/static/atom.svg | 1 - v2/src/content/static/envelope.svg | 1 - v2/src/content/static/favicon.svg | 1 - v2/src/content/static/link.svg | 1 - v2/src/content/static/lock.svg | 1 - v2/src/content/static/public.asc.txt | 1 - v2/src/content/static/styles.css | 149 --------------------- v2/src/content/style.css | 149 +++++++++++++++++++++ v2/src/content/tils/lisp-three-way-conditional.md | 63 +++++++++ 14 files changed, 345 insertions(+), 160 deletions(-) create mode 100644 v2/src/content/.well-known/security.txt create mode 120000 v2/src/content/favicon.svg create mode 100644 v2/src/content/pastebins/raku-tuple-type-annotation.md create mode 100644 v2/src/content/public.asc.txt delete mode 120000 v2/src/content/static/atom.svg delete mode 120000 v2/src/content/static/envelope.svg delete mode 120000 v2/src/content/static/favicon.svg delete mode 120000 v2/src/content/static/link.svg delete mode 120000 v2/src/content/static/lock.svg delete mode 120000 v2/src/content/static/public.asc.txt delete mode 100644 v2/src/content/static/styles.css create mode 100644 v2/src/content/style.css create mode 100644 v2/src/content/tils/lisp-three-way-conditional.md (limited to 'v2/src/content') diff --git a/v2/src/content/.well-known/security.txt b/v2/src/content/.well-known/security.txt new file mode 100644 index 0000000..dd35c49 --- /dev/null +++ b/v2/src/content/.well-known/security.txt @@ -0,0 +1,4 @@ +Contact: mailto:eu@euandre.org +Encryption: https://euandre.org/public.asc.txt +Expires: 2024-07-15T00:00:00z +Preferred-Languages: en, pt diff --git a/v2/src/content/favicon.svg b/v2/src/content/favicon.svg new file mode 120000 index 0000000..313dcc5 --- /dev/null +++ b/v2/src/content/favicon.svg @@ -0,0 +1 @@ +../../../static/lord-favicon.svg \ No newline at end of file diff --git a/v2/src/content/pastebins/raku-tuple-type-annotation.md b/v2/src/content/pastebins/raku-tuple-type-annotation.md new file mode 100644 index 0000000..3d5ff34 --- /dev/null +++ b/v2/src/content/pastebins/raku-tuple-type-annotation.md @@ -0,0 +1,37 @@ +--- + +title: Raku tuple type annotation + +date: 2019-12-29 + +layout: post + +lang: en + +ref: raku-tuple-type-annotation + +--- + +```perl +# Single Str return value: this works +sub f1(Str $in --> Str) { + $in; +} + +# Tuple of Str as return value: this works +sub f2(Str $in) { + ($in, $in); +} + +# Tuple of Str as return value with type annotation: this doesn't works +sub f2(Str $in --> (Str, Str)) { + ($in, $in); +} +``` + +Error log is: + +```perl +===SORRY!=== Error while compiling /path/to/my/file +Malformed return value +``` diff --git a/v2/src/content/pastebins/sicp-exercise-3-19.md b/v2/src/content/pastebins/sicp-exercise-3-19.md index fd2c52b..8834889 100644 --- a/v2/src/content/pastebins/sicp-exercise-3-19.md +++ b/v2/src/content/pastebins/sicp-exercise-3-19.md @@ -1,14 +1,14 @@ --- -TITLE='SICP exercise 3.19' +title: SICP exercise 3.19 -DATE='2021-09-02' +date: 2021-09-02 -LAYOUT='post' +layout: post -LANGUAGE='en' +lang: en -REF='sicp-exercise-3-19' +id: sicp-exercise-3-19 --- diff --git a/v2/src/content/public.asc.txt b/v2/src/content/public.asc.txt new file mode 100644 index 0000000..533b54c --- /dev/null +++ b/v2/src/content/public.asc.txt @@ -0,0 +1,86 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +LsPdAc9FGcUNEy+/AlLpM1Y= +=2ZCp +-----END PGP PUBLIC KEY BLOCK----- diff --git a/v2/src/content/static/atom.svg b/v2/src/content/static/atom.svg deleted file mode 120000 index 41c6d3f..0000000 --- a/v2/src/content/static/atom.svg +++ /dev/null @@ -1 +0,0 @@ -../../../../static/atom.svg \ No newline at end of file diff --git a/v2/src/content/static/envelope.svg b/v2/src/content/static/envelope.svg deleted file mode 120000 index bd0c577..0000000 --- a/v2/src/content/static/envelope.svg +++ /dev/null @@ -1 +0,0 @@ -../../../../static/envelope.svg \ No newline at end of file diff --git a/v2/src/content/static/favicon.svg b/v2/src/content/static/favicon.svg deleted file mode 120000 index 33566ab..0000000 --- a/v2/src/content/static/favicon.svg +++ /dev/null @@ -1 +0,0 @@ -../../../../static/lord-favicon.svg \ No newline at end of file diff --git a/v2/src/content/static/link.svg b/v2/src/content/static/link.svg deleted file mode 120000 index bf69c40..0000000 --- a/v2/src/content/static/link.svg +++ /dev/null @@ -1 +0,0 @@ -../../../../static/link.svg \ No newline at end of file diff --git a/v2/src/content/static/lock.svg b/v2/src/content/static/lock.svg deleted file mode 120000 index f9a4f33..0000000 --- a/v2/src/content/static/lock.svg +++ /dev/null @@ -1 +0,0 @@ -../../../../static/lock.svg \ No newline at end of file diff --git a/v2/src/content/static/public.asc.txt b/v2/src/content/static/public.asc.txt deleted file mode 120000 index 5175f38..0000000 --- a/v2/src/content/static/public.asc.txt +++ /dev/null @@ -1 +0,0 @@ -../../../../public.asc \ No newline at end of file diff --git a/v2/src/content/static/styles.css b/v2/src/content/static/styles.css deleted file mode 100644 index 0ec67a8..0000000 --- a/v2/src/content/static/styles.css +++ /dev/null @@ -1,149 +0,0 @@ -/* General declarations */ - -body { - margin: 0px auto; - padding: 1%; - max-width: 750px; -} - -.svg-icon { - vertical-align: middle; -} - - -/* Navigation header */ - -nav a { - color: maroon; - font-size: 18px; - margin: 12px; - text-decoration: none; -} - -nav ul, nav li { - display: inline; -} - -nav ul li a { - color: black; - font-size: 14px; - margin: 6px; -} - - -/* Article bodies */ - -.timestamp { - color: #555; - font-size: 14px; - font-style: italic; -} - -blockquote { - font-style: italic; - color: dimgrey; - padding-left: 10px; - border-left: 3px solid #ccc; -} - -ul.no-style { - list-style-type: none; -} - -ul.no-style li { - margin: 20px 0px; -} - - -/* Footer */ - -footer { - font-size: 14px; - margin-top: 30px; - padding: 12px 0px 12px 0px; -} - -footer li { - list-style-type: none; - margin-top: 10px; -} - -footer li a { - margin-left: 5px; - user-select: none; -} - -/* Code blocks */ - -/* The "lineno" class is the default generated by Rouge for table-row in code blocks, see: - https://github.com/rouge-ruby/rouge */ -.line-number, pre.lineno { - margin-right: 3px; - padding-right: 3px; - border-right: 1px solid; - border-color: hsla(0, 0%, 0%, 0.3); - text-align: right; - user-select: none; -} - -.code-line { - padding-left: 8px; -} - -.code-block { - padding: 6px 4px; - display: block; -} - -.code-block, pre.highlight { - border: 1px solid #ccc; - border-radius: 10px; -} - -pre { - overflow: auto; -} - - -/* Code block anchors */ - -.line-number a, a.code-line-anchor { - color: black; - text-decoration: none; -} - -a.code-line-anchor:hover { - text-decoration: underline; -} - - -/* Header anchor */ - -.header-anchor { - color: black; - text-decoration: none; - display: block; - margin-bottom: 15px; -} - -.header-anchor { -} - - -.header-anchor img { - margin-left: 5px; - visibility: hidden; -} - -.header-anchor:hover img { - visibility: visible; -} - - -/* Plaintext code block links */ - -.plaintext-link { - margin: auto auto 0 auto; - text-align: right; - font-family: monospace; -} diff --git a/v2/src/content/style.css b/v2/src/content/style.css new file mode 100644 index 0000000..0ec67a8 --- /dev/null +++ b/v2/src/content/style.css @@ -0,0 +1,149 @@ +/* General declarations */ + +body { + margin: 0px auto; + padding: 1%; + max-width: 750px; +} + +.svg-icon { + vertical-align: middle; +} + + +/* Navigation header */ + +nav a { + color: maroon; + font-size: 18px; + margin: 12px; + text-decoration: none; +} + +nav ul, nav li { + display: inline; +} + +nav ul li a { + color: black; + font-size: 14px; + margin: 6px; +} + + +/* Article bodies */ + +.timestamp { + color: #555; + font-size: 14px; + font-style: italic; +} + +blockquote { + font-style: italic; + color: dimgrey; + padding-left: 10px; + border-left: 3px solid #ccc; +} + +ul.no-style { + list-style-type: none; +} + +ul.no-style li { + margin: 20px 0px; +} + + +/* Footer */ + +footer { + font-size: 14px; + margin-top: 30px; + padding: 12px 0px 12px 0px; +} + +footer li { + list-style-type: none; + margin-top: 10px; +} + +footer li a { + margin-left: 5px; + user-select: none; +} + +/* Code blocks */ + +/* The "lineno" class is the default generated by Rouge for table-row in code blocks, see: + https://github.com/rouge-ruby/rouge */ +.line-number, pre.lineno { + margin-right: 3px; + padding-right: 3px; + border-right: 1px solid; + border-color: hsla(0, 0%, 0%, 0.3); + text-align: right; + user-select: none; +} + +.code-line { + padding-left: 8px; +} + +.code-block { + padding: 6px 4px; + display: block; +} + +.code-block, pre.highlight { + border: 1px solid #ccc; + border-radius: 10px; +} + +pre { + overflow: auto; +} + + +/* Code block anchors */ + +.line-number a, a.code-line-anchor { + color: black; + text-decoration: none; +} + +a.code-line-anchor:hover { + text-decoration: underline; +} + + +/* Header anchor */ + +.header-anchor { + color: black; + text-decoration: none; + display: block; + margin-bottom: 15px; +} + +.header-anchor { +} + + +.header-anchor img { + margin-left: 5px; + visibility: hidden; +} + +.header-anchor:hover img { + visibility: visible; +} + + +/* Plaintext code block links */ + +.plaintext-link { + margin: auto auto 0 auto; + text-align: right; + font-family: monospace; +} diff --git a/v2/src/content/tils/lisp-three-way-conditional.md b/v2/src/content/tils/lisp-three-way-conditional.md new file mode 100644 index 0000000..f53451b --- /dev/null +++ b/v2/src/content/tils/lisp-three-way-conditional.md @@ -0,0 +1,63 @@ +--- + +title: Three-way conditional for number signs on Lisp + +date: 2021-04-24 3 + +updated_at: 2021-08-14 + +layout: post + +lang: en + +ref: three-way-conditional-for-number-signs-on-lisp + +--- + +A useful macro from Paul Graham's [On Lisp][on-lisp] book: + +```lisp +(defmacro nif (expr pos zero neg) + (let ((g (gensym))) + `(let ((,g ,expr)) + (cond ((plusp ,g) ,pos) + ((zerop ,g) ,zero) + (t ,neg))))) +``` + +After I looked at this macro, I started seeing opportunities to using it in many places, and yet I didn't see anyone else using it. + +The latest example I can think of is section 1.3.3 of [Structure and Interpretation of Computer Programs][sicp], which I was reading recently: + +```scheme +(define (search f neg-point pos-point) + (let ((midpoint (average neg-point pos-point))) + (if (close-enough? neg-point post-point) + midpoint + (let ((test-value (f midpoint))) + (cond ((positive? test-value) + (search f neg-point midpoint)) + ((negative? test-value) + (search f midpoint pos-point)) + (else midpoint)))))) +``` + +Not that the book should introduce such macro this early, but I couldn't avoid feeling bothered by not using the `nif` macro, which could even remove the need for the intermediate `test-value` variable: + +```scheme +(define (search f neg-point pos-point) + (let ((midpoint (average neg-point pos-point))) + (if (close-enough? neg-point post-point) + midpoint + (nif (f midpoint) + (search f neg-point midpoint) + (midpoint) + (search f midpoint pos-point))))) +``` + +It also avoids `cond`'s extra clunky parentheses for grouping, which is unnecessary but built-in. + +As a macro, I personally feel it tilts the balance towards expressivenes despite its extra cognitive load toll. + +[on-lisp]: http://www.paulgraham.com/onlisptext.html +[sicp]: https://mitpress.mit.edu/sites/default/files/sicp/index.html -- cgit v1.2.3