From 93330ddc2874c8814476d1d6adc5cb12ee99899b Mon Sep 17 00:00:00 2001 From: jultty Date: Fri, 23 Feb 2024 20:00:34 -0300 Subject: [PATCH] Initial commit --- .gitignore | 1 + README.md | 4 +++ assets/Share Tech Mono 400.ttf | Bin 0 -> 43272 bytes assets/js/data.js | 11 +++++++ assets/js/main.js | 13 ++++++++ assets/style.css | 57 +++++++++++++++++++++++++++++++++ index.html | 19 +++++++++++ posts/gen.ml | 11 +++++++ posts/scripts-em-ocaml.md | 29 +++++++++++++++++ 9 files changed, 145 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 assets/Share Tech Mono 400.ttf create mode 100644 assets/js/data.js create mode 100644 assets/js/main.js create mode 100644 assets/style.css create mode 100644 index.html create mode 100755 posts/gen.ml create mode 100644 posts/scripts-em-ocaml.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8c74b0d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +posts/html/* diff --git a/README.md b/README.md new file mode 100644 index 0000000..29575eb --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +A bare-bones personal website relying only on simple scripts. + +## Next +- [ ] Update data object programmatically on HTML post generation diff --git a/assets/Share Tech Mono 400.ttf b/assets/Share Tech Mono 400.ttf new file mode 100644 index 0000000000000000000000000000000000000000..1611474a4cc94c3cb51664597cae92a6f3c68857 GIT binary patch literal 43272 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
    h-yF5UG71b?Fw^3m4gqh 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 literal 0 HcmV?d00001 diff --git a/assets/js/data.js b/assets/js/data.js new file mode 100644 index 0000000..275e8de --- /dev/null +++ b/assets/js/data.js @@ -0,0 +1,11 @@ +function get_data() { + return { + posts: [ + { + title: "Scripts em OCaml", + slug: "scripts-em-ocaml", + }, + ] + } +} + diff --git a/assets/js/main.js b/assets/js/main.js new file mode 100644 index 0000000..163b399 --- /dev/null +++ b/assets/js/main.js @@ -0,0 +1,13 @@ +const data = get_data() +const post_list = document.getElementById("posts") + +document.addEventListener("DOMContentLoaded", function() { + data.posts.forEach(post => { + const item = document.createElement("li") + const anchor = document.createElement("a") + anchor.innerText = post.title + anchor.href = 'posts/html/' + post.slug + '.md.html' + item.appendChild(anchor) + post_list.appendChild(item) + }) +}) diff --git a/assets/style.css b/assets/style.css new file mode 100644 index 0000000..df8e50a --- /dev/null +++ b/assets/style.css @@ -0,0 +1,57 @@ +* { + margin: 0px; +} + +@font-face { + font-family: 'ShareTech'; + src: url('Share Tech Mono 400.ttf'), format('truetype'); +} + +body { + background-color: #222222; + font-family: 'ShareTech', monospace; +} + +p { + color: #F1E9E5; + margin: 30px; +} + +a { + text-decoration: underline dotted #888; + color: #AEDBCE; +} + +a:hover { + color: #39AEA9; + text-decoration: underline dotted #fff; + transition: 1500ms; +} + +h1 { + font-size: 25px; + font-weight: bold; + color: #ccc; + font-size: 25px; + margin: 20px 0px 10px 20px; +} + +h2 { + font-size: 25px; + font-weight: bold; + color: #ccc; + font-size: 25px; + margin: 20px 0px 10px 20px; +} + +ul { + margin-top: 10px; + color: #F1E9E5; +} + +li { + margin-bottom: 10px; +} + +.sourceCode { color: #ccc; } +.sourceCode span { margin-left: 20px; } diff --git a/index.html b/index.html new file mode 100644 index 0000000..54dbcbc --- /dev/null +++ b/index.html @@ -0,0 +1,19 @@ +! + + + + + jutty.dev + + + + + +

    +

    jutty.dev

    +
    + + + diff --git a/posts/gen.ml b/posts/gen.ml new file mode 100755 index 0000000..4a57b22 --- /dev/null +++ b/posts/gen.ml @@ -0,0 +1,11 @@ +#!/usr/bin/env utop + +let pandoc_params = "--css ../../assets/style.css -s --to html5 --metadata pagetitle='basename' " + +let vert md = begin + if md <> "gen.ml" && md <> "html" then + ignore( Sys.command ("pandoc " ^ pandoc_params ^ md ^ " -o html/" ^ md ^ ".html ") ) +end ;; + +let contents = Array.to_list (Sys.readdir ".") in +List.map vert contents ;; diff --git a/posts/scripts-em-ocaml.md b/posts/scripts-em-ocaml.md new file mode 100644 index 0000000..8fb9b4f --- /dev/null +++ b/posts/scripts-em-ocaml.md @@ -0,0 +1,29 @@ +# Scripts em OCaml + +Este blog gera suas postagens com o Pandoc, mas quem faz o trabalho lógico de identificar os arquivos e montar os comandos é um pequeno script em OCaml. + +Descobri essa linguagem quando comecei a investigar como poderia substituir o Bash como uma linguagem para scripts. Eu acho que o Bash é excelente para cumprir essa função, apesar de bastante inseguro e propenso a erros. O que me incomodava mesmo era ver que todo aquele tempo escrevendo scripts com Bash poderia ser tempo aprendendo uma linguagem cujo conhecimento se transferisse para muitas outras aplicações. + +O script consiste nestas nove linhas apenas: + +```ocaml +let pandoc_params = "--css ../../assets/style.css -s --to html5 --metadata pagetitle='basename' " + +let vert md = begin + if md <> "gen.ml" && md <> "html" then + ignore( Sys.command ("pandoc " ^ pandoc_params ^ md ^ " -o html/" ^ md ^ ".html ") ) +end ;; + +let contents = Array.to_list (Sys.readdir ".") in +List.map vert contents ;; +``` + +Primeiro, armazeno em `pandoc_params` os parâmetros comuns que serão passados ao Pandoc para gerar os arquivos HTML a partir dos arquivos em Markdown. + +Em seguida, defino a função `vert`, que, caso o arquivo não se chame "gen.ml" (o próprio script) nem "html" (o diretório onde os arquivos gerados ficam), o comando do Pandoc é chamado com os nomes dos arquivos de entrada e saída. + +Essa função então é aplicada com `List.map vert contents` a cada arquivo do diretório atual. + +## Referências +- [Pandoc Markdown CSS Theme](https://jez.io/pandoc-markdown-css-theme/) +- [Walk a directory/Non-recursively - Rosetta Code](https://rosettacode.org/wiki/Walk_a_directory/Non-recursively#OCaml)