Blog.sh
Agora eu estou usando o meu próprio SSG.
This commit is contained in:
parent
047601c1ea
commit
6e5d30428f
26 changed files with 633 additions and 990 deletions
0
.site
Normal file
0
.site
Normal file
BIN
assets/gif/myles.gif
Normal file
BIN
assets/gif/myles.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.5 MiB |
|
@ -82,6 +82,10 @@ strong {
|
|||
font-family: "io-bold";
|
||||
}
|
||||
|
||||
s {
|
||||
color: var(--grey);
|
||||
}
|
||||
|
||||
pre,
|
||||
code,
|
||||
kdb,
|
||||
|
@ -181,7 +185,7 @@ footer {
|
|||
background-color: var(--grey);
|
||||
}
|
||||
|
||||
.content {
|
||||
article {
|
||||
max-width: 80ch;
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
|
@ -190,77 +194,6 @@ footer {
|
|||
min-height: 100vh;
|
||||
}
|
||||
|
||||
.todo {
|
||||
color: var(--red);
|
||||
}
|
||||
|
||||
.done {
|
||||
color: var(--green);
|
||||
}
|
||||
|
||||
#table-of-contents {
|
||||
background-color: var(--grey);
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
#table-of-contents ul {
|
||||
list-style-type: "./";
|
||||
}
|
||||
|
||||
.src-C::before,
|
||||
.src-hare::before,
|
||||
.src-bash::before,
|
||||
.src-html::before,
|
||||
.src-javascript::before,
|
||||
.src-css::before,
|
||||
.src-lua::before,
|
||||
.src-emacs-lisp::before,
|
||||
.src-cpp::before,
|
||||
.src-python::before {
|
||||
float: right;
|
||||
color: var(--primary);
|
||||
}
|
||||
|
||||
.src-C:hover::before {
|
||||
content: "C"
|
||||
}
|
||||
|
||||
.src-hare:hover::before {
|
||||
content: "Hare"
|
||||
}
|
||||
|
||||
.src-bash:hover::before {
|
||||
content: "Bash"
|
||||
}
|
||||
|
||||
.src-html:hover::before {
|
||||
content: "HTML"
|
||||
}
|
||||
|
||||
.src-javascript:hover::before {
|
||||
content: "Javascript"
|
||||
}
|
||||
|
||||
.src-css:hover::before {
|
||||
content: "CSS"
|
||||
}
|
||||
|
||||
.src-lua:hover::before {
|
||||
content: "Lua"
|
||||
}
|
||||
|
||||
.src-emacs-lisp:hover::before {
|
||||
content: "Elisp"
|
||||
}
|
||||
|
||||
.src-cpp:hover::before {
|
||||
content: "C++"
|
||||
}
|
||||
|
||||
.src-python:hover::before {
|
||||
content: "Python"
|
||||
}
|
||||
|
||||
/* Visualização mobile */
|
||||
|
||||
@media only screen and (max-width: 830px) {
|
22
build.el
22
build.el
|
@ -1,22 +0,0 @@
|
|||
(require 'ox-publish)
|
||||
(require 'htmlize)
|
||||
(setq org-html-head "<link rel=icon type=\"image/webp\" href=\"/assets/fav.webp\"> <link rel=stylesheet href=\"/assets/css/styles.css\" />"
|
||||
org-html-head-include-default-style nil
|
||||
org-html-head-include-scripts nil
|
||||
org-html-preamble nil
|
||||
org-html-postamble nil
|
||||
org-html-use-infojs nil)
|
||||
(setq org-publish-project-alist
|
||||
(list
|
||||
(list "Tukain's Blog"
|
||||
:base-directory "./content"
|
||||
:recursive t
|
||||
:html-postamble "<footer><p>%a - %C</p></footer>"
|
||||
:htmlized-source t
|
||||
:publishing-directory "./public"
|
||||
:section-numbers nil
|
||||
:language "pt-br"
|
||||
:publishing-function 'org-html-publish-to-html)))
|
||||
(org-publish-all t)
|
||||
(shell-command "cp -r assets public")
|
||||
(message "Site gerado!")
|
88
content/9990.fiz-meu-ssg
Normal file
88
content/9990.fiz-meu-ssg
Normal file
|
@ -0,0 +1,88 @@
|
|||
# Blog.sh, o meu próprio SSG
|
||||
|
||||
Dos produtores de "Ovorefazermeusaite", vêm aí "E se eu fizer meu próprio
|
||||
gerador de sites?"!
|
||||
|
||||
Agora falando sério, eu realmente fiz o meu próprio SSG (Static Site Generator).
|
||||
|
||||
Ele não é nada demais, na realidade ele não é muito diferente dos scripts que eu
|
||||
fazia para conseguir criar um post novo de forma mais rápida, a diferença fica só
|
||||
na sofisticação do script e um pouco da forma em que ele opera.
|
||||
|
||||
## Pera aí, você não estava usando o org-mode para fazer o site?
|
||||
|
||||
Exatamente, estava. Mas agora eu vou utilizar a minha própria ferramenta, no
|
||||
maior estilo Myles Morales:
|
||||
|
||||
<img src="/assets/gif/myles.gif">
|
||||
|
||||
Apesar disso, eu fiz questão de deixar a usabilidade e a experiência de uso
|
||||
o mais próximo possível, e na realidade, deixando até mesmo mais fácil.
|
||||
|
||||
## Geração de site rápida pra k7
|
||||
|
||||
Uma coisa que é extremamente notável é a diferença na hora de fazer a geração do
|
||||
site. É simplesmente absurdo. É como comparar a velocidade de um jogo feito em
|
||||
C, para um feito em JavaScript.
|
||||
|
||||
No Emacs, a geração do site feito em org-mode leva uma coisa de 2 a 4 segundos,
|
||||
o que é relativamente rápido, porém, o meu script leva aproximadamente 0.071
|
||||
segundos para fazer a mesma coisa.
|
||||
|
||||
Tudo bem, eu não tenho uma tabela de conteúdo e nem o syntax highlighting,
|
||||
porém, essas são coisas que eu estou disposto a descartar se significar que eu
|
||||
vou ter uma geração de páginas dezenas de vezes mais rápida.
|
||||
|
||||
## Por debaixo dos panos
|
||||
|
||||
O script possui um comando que cuida da criação da estrutura de arquivos e um
|
||||
que "compila" o site com base nessa estrutura. Como você faz para usar essa
|
||||
estrutura de arquivos e quais as regras impostas pelo script podem ser achadas
|
||||
no readme que é gerado junto do website
|
||||
|
||||
Todos os arquivos dentro do diretório `content` são lidos pelo `smu`, programa
|
||||
que é utilizado para converter um texto no estilo Markdown para HTML.
|
||||
|
||||
O `smu` não tem suporte para tudo o que o Markdown tem a oferecer, porém ele
|
||||
aceita o uso de tags HTML, então tudo o que o `smu` não tiver suporte pode ser
|
||||
substituído por uma tag.
|
||||
|
||||
## Por que?
|
||||
|
||||
Eu fiz isso puramente para ver se eu conseguiria fazer um SSG, e, se tratando de
|
||||
funcionalidade básica, eu consegui sem nenhum problema.
|
||||
|
||||
Mas um outro ponto que me fez fazer isso foi o Neovim... Olha, eu não sei se
|
||||
isso é algum tipo de apego ou algo do gênero, mas eu simplesmente fiquei com
|
||||
saudades de usar o meu Neovim. A configuração que eu tenho é equivalente à
|
||||
minha configuração do Emacs, não em todos os aspectos, mas quando se trata de
|
||||
edição de texto/código, ambos são quase os mesmos, porém o Neovim ainda leva a
|
||||
vantagem, porque o Neovim tem suporte ao LSP (Language Server Protocol), o que
|
||||
faz com que o auto-complete do Neovim seja muito mais versátil e preciso do que
|
||||
usar o company-mode no Emacs.
|
||||
|
||||
Outra coisa que eu consigo fazer agora que eu fiz o meu próprio SSG é usar ele
|
||||
em conjunto com o Neovim ou qualquer outro editor de texto que eu queira, basta
|
||||
eu salvar o arquivo e digitar o comando:
|
||||
|
||||
blog.sh build
|
||||
|
||||
E na realidade eu nem vou precisar digitar esse comando, eu já fiz um outro
|
||||
comando que é um equivalente ao `hugo serve` da vida. Tudo o que eu preciso
|
||||
fazer é digitar
|
||||
|
||||
blog.sh serve
|
||||
|
||||
E isso vai abrir um servidor HTTP usando o `python -m http.server` e também vai
|
||||
executar o comando `entr`, que serve para "ficar de olho em mudanças", e sempre
|
||||
que o `entr` notar alguma mudança em algum arquivo do diretório `content` ele
|
||||
mesmo executa o `blog.sh build` e atualiza as páginas.
|
||||
|
||||
Tudo o que eu preciso fazer agora é ficar de olho em qualquer bug que possa
|
||||
aparecer.
|
||||
|
||||
## _Fin_
|
||||
|
||||
Enfim, é isso o que eu tinha para falar por agora.
|
||||
|
||||
Te vejo no próximo post!
|
47
content/9991.viper-mode
Normal file
47
content/9991.viper-mode
Normal file
|
@ -0,0 +1,47 @@
|
|||
# Vi, só que entro do Emacs!
|
||||
|
||||
Esse mostro de programa é tão cheio de coisa para se falar que já garantiu até uma trilogia nesse blog.
|
||||
|
||||
## Viper
|
||||
|
||||
A um pouco mais de 3 horas atrás, enquanto eu ainda estava no meu trabalho, eu fiquei pesquisando um pouco sobre o Emacs, e eu acabei achando o diretório de manuais de referência dele. Dois deles me chamaram (e muito) a minha atenção, os manuais de referência do vip-mode e do viper-mode.
|
||||
|
||||
Obviamente que quando eu vi esses manuais eu cliquei neles para ver do que eles se tratavam, e bom, eles são modos que emulam os controles do VI, o editor de texto modal que vem com qualquer sistema Unix e que foi dele que surgiu o Vim (VI iMproved).
|
||||
|
||||
Eu decidi usar o viper no lugar do vip só porque ele aparenta ser uma opção mais completa em comparação. Ele chega no nível de até mesmo ter um mini-tutorial e um wizard perguntando qual o seu nível de expertise com ele.
|
||||
|
||||
## Bem, e como é usar ele?
|
||||
|
||||
Como já disse, o viper emula o VI e não o Vim (isso é o que o evil-mode faz), sendo assim ele não tem as mesmas teclas/comandos que o Vim possui. Porém, você ainda pode usar as teclas do Emacs em conjunto com as teclas do VI, o que mais que compensa, na minha opinião, a falta das teclas do Vim.
|
||||
|
||||
Só de ter uma parte das teclas que são usadas no Vim já torna a minha experiência muito melhor. Afinal, apesar do Emacs ser um programa que é ótimo em diversos aspectos, as teclas de atalho dele não são particularmente um ponto positivo dele.
|
||||
|
||||
E é claro que como tudo no Emacs, eu posso customizar o viper e adicionar os comandos que eu acho extremamente úteis do Vim, no viper, criando assim um Frankenstein que nunca deveria ter nascido.
|
||||
|
||||
A minha configuração dele, inclusive, está bem modesta, com poucas linhas de código, mas já são o suficiente para deixar o meu uso do Emacs 10 vezes mais aconchegante.
|
||||
|
||||
(setq viper-mode t)
|
||||
(require 'viper)
|
||||
(setq viper-inhibit-startup-message 't)
|
||||
(setq viper-expert-level '5)
|
||||
(setq viper-want-ctl-h-help t)
|
||||
(setq viper-ex-style-editing nil)
|
||||
(setq viper-no-multiple-ESC nil)
|
||||
(setq viper-syntax-preference 'extended)
|
||||
(setq viper-vi-style-in-minibuffer nil)
|
||||
(define-key viper-vi-basic-map (kbd "v") 'set-mark-command)
|
||||
(define-key viper-vi-basic-map (kbd "f") 'find-file)
|
||||
(define-key viper-vi-basic-map (kbd "R") 'replace-rectangle)
|
||||
(define-key viper-vi-basic-map (kbd "C-v") 'rectangle-mark-mode)
|
||||
(define-key viper-vi-basic-map (kbd "x") 'kill-region)
|
||||
(viper-mode)
|
||||
|
||||
Como eu disse, ainda está bem modesta. Apesar de que só tacar um bloco de código do nada não explica direito o que está acontecendo, Elisp é uma linguagem bem simples de entender, então eu acho que não vai ser tão problemático assim.
|
||||
|
||||
Mas, basicamente eu só ativei o =viper-mode= e configurei 5 teclas de atalho que "emulam" algumas teclas que eu uso no Neovim. Não são completamente idênticas, mas já dão conta do recado.
|
||||
|
||||
## _Fin_
|
||||
|
||||
Bom, é isso, acho que por agora eu não tenho mais o que falar sobre esse lindo programa chamado Emacs.
|
||||
|
||||
Até o próximo post!
|
69
content/9992.emacs-parte-2
Normal file
69
content/9992.emacs-parte-2
Normal file
|
@ -0,0 +1,69 @@
|
|||
# Emacs parte 2
|
||||
|
||||
Hmmm… Parte 2? Hmmm…
|
||||
|
||||
Bem, eu não acho que isso vá ser um post longo ou que vá adicionar muito ao post original, então você pode ignorar ele a vontade.
|
||||
|
||||
## Sobre o "ambiente onde eu possa usar o Emacs"
|
||||
|
||||
Então, eu já consegui fazer um. É meio que feito na gambiarra, mas funciona.
|
||||
|
||||
Eu estou utilizando o compositor wayland Cage, um compositor que tem o objetivo de ser uma ferramenta para criação de kiosk's. Tipo um kiosk onde tem um menu de restaurante e etc.
|
||||
|
||||
Porém, como eu posso rodar qualquer programa que eu quiser nele, então nada melhor do que fazer um "kiosk" com o Emacs!
|
||||
|
||||
O resultado dessa monstruosidade é um Emacs rodando em tela cheia com um teclado inteiro a disposição para ser usado sem ter algum outro elemento que possa ter teclas de atalho conflitantes com as do Emacs.
|
||||
|
||||
Simplificando, eu posso usar até mesmo a tecla super (Windows) se eu quiser e eu vou estar de boa.
|
||||
|
||||
## O que mais adicionei à minha configuração do Emacs?
|
||||
|
||||
Teclas de atalho novas, como por exemplo, teclas para:
|
||||
|
||||
- Aumentar/diminuir o brilho da tela do meu notebook;
|
||||
- Aumentar/diminuir o volume do meu notebook;
|
||||
- Capturar a tela do Emacs (usando o próprio emacs).
|
||||
- Gravar a tela
|
||||
|
||||
Também deixei habilitados por padrão 2 minor-modes do Emacs que são pré-instalados (por alguma razão), eles são o display-battery-mode, e display-time-mode. Ambos são minor-modes que poem seu output na barra do Emacs (eu não faço ideia de qual é o nome oficial dessa bagaça), o que significa que a barra do Emacs se tornou o equivalente à barra do Sway, o meu compositor wayland favorito.
|
||||
|
||||
## Org-publish é praticamente um SSG
|
||||
|
||||
Eu sei que eu já comentei algo parecido com isso no meu outro post:
|
||||
|
||||
> Apesar de ter usado diversos SSG's nos últimos tempos, nenhum deles possui a praticidade de simplesmente gerar uma página HTML a partir de um buffer que esteja aberto no seu editor com a mesma facilidade que o Emacs junto do Org-mode conseguem ter.
|
||||
|
||||
> Esse site inteiro foi refeito utilizando essa ferramenta de gereção de sites nativa do Emacs.
|
||||
|
||||
Mas acho que eu não consegui transparecer o quão prático e simples é o processo de escrever e "publicar" o que foi escrito.
|
||||
|
||||
Se você já usou um SSG como por exemplo o Jekyll, você pode interpretar o org-publish como uma template do Jekyll em que você pode fazer algumas modificações e que não tem muitas automações por parte dela.
|
||||
|
||||
Todas as páginas seguem um padrão pré-definido, todas.
|
||||
|
||||
Ou seja, você pode usar o seu CSS pensando somente em 1 página, porque todas as outras vão ser clones dessa página em que você está se inspirando.
|
||||
|
||||
Um bom exemplo disso é esse próprio site. Se você observar bem, não existe muito uma grande diferença entre a página de um post e a página de index. Na verdade a única diferença é a falta de uma tabela de conteúdo na página index.
|
||||
|
||||
Outra coisa também que eu encontrei, depois de xeretar um pouco na inter-webs, eu encontrei algumas características interessantes sobre o ox-publish. Uma delas é que as variáveis que criam o preâmbulo e o pós-âmbulo da página (são uns bagulho de autor e de validação da página) podem ser modificadas para qualquer string que o usuário prefira. Ou seja, eu posso colocar meu próprio HTML nelas!
|
||||
|
||||
O que em termos práticos, faz com que o ox-publish faça o que eu achava que era a maior utilidade de um SSG: re-utilizar um elemento de uma página em todas as outras.
|
||||
|
||||
Por enquanto eu só adicionei uma footer com o nome do author do artigo e com a data de última modificação do arquivo (sim, esse bagulho tem até variáveis que você pode usar).
|
||||
|
||||
## O site é praticamente um espelho da minha config
|
||||
|
||||
O meu site e o meu Emacs possuem uma aparência muito similar, o que é proposital, já que dessa forma eu consigo ter uma certa noção de como meu site vai ficar, tirando a necessidade de usar um navegador para visualizar a página do meu site.
|
||||
|
||||
Não é que eu não veja como a página fica, mas eu não tenho a necessidade de ver como ele fica.
|
||||
|
||||
Melhor do que só mencionar é mostrar, então aqui está uma screenshot do meu Emacs:
|
||||
|
||||
<img src='/assets/img/emacs-parte-2.webp'>
|
||||
|
||||
Não é um completo clone 1 por 1, mas pelo menos eles tem certa semelhança, dessa maneira eu consigo me concentrar apenas em escrever com tranquilidade, afinal de contas o site final é extremamente semelhante ao o que eu já estou vendo no editor.
|
||||
Fin
|
||||
|
||||
Bem, é isso. Eu falei que esse posts seria algo rápido.
|
||||
|
||||
Enfim, até o próximo post!
|
100
content/9993.emacs
Normal file
100
content/9993.emacs
Normal file
|
@ -0,0 +1,100 @@
|
|||
# Emacs
|
||||
|
||||
Olha só quem voltou! E mais uma vez com o site completamente mudado!
|
||||
|
||||
Pois é, estou de volta, e dessa vez trago comigo algumas novidades em relação ao site e ao meu setup atual (spoiler: tá tudo no Emacs).
|
||||
|
||||
## Emacs, que saudades que estava de você!
|
||||
|
||||
A um tempo eu vim tendo essa vontade de voltar a usar o Emacs, mas a preguiça de ter que refazer a minha config do 0 era muito grande, até que bem, vamos dizer que o hiperfoco atacou e eu refiz a minha configuração de qualquer jeito.
|
||||
|
||||
A maior diferença é que eu já tenho alguma experiência no assunto, então não tive muita dificuldade em fazer essa nova config. Posso inclusive dizer que esta é, até o momento, a melhor configuração que eu já fiz até agora.
|
||||
|
||||
## Org-mode, o criador de sites mais prático que conheço
|
||||
|
||||
Apesar de ter usado diversos SSG's nos últimos tempos, nenhum deles possui a praticidade de simplesmente gerar uma página HTML a partir de um buffer que esteja aberto no seu editor com a mesma facilidade que o Emacs junto do Org-mode conseguem ter.
|
||||
|
||||
Esse site inteiro foi refeito utilizando essa ferramenta de gereção de sites nativa do Emacs.
|
||||
|
||||
## Zero JavaScript
|
||||
|
||||
Mais uma vez, estou com 0 JS presente neste site, o que por si só já é uma conquista e tanto, afinal, quanto menos JS, melhor.
|
||||
|
||||
E não é porque eu não tenho JS que eu perco coisas como Table-of-contents ou Syntax-highlighting, nada disso, ambos são coisas nativas do org-mode, feitos para serem utilizados e abusados.
|
||||
|
||||
Ele também é o melhor highlighter que eu já usei, porque literalmente qualquer coisa que eu tenha um syntax highlight no Emacs fica com o mesmo syntax-highlight no site gerado.
|
||||
|
||||
## Quase um SSG… Quase.
|
||||
|
||||
Apesar de tudo, o org-mode não vem com um SSG, essa função na realidade é uma ferramenta de publicação de artigos, tanto que o nome do pacote é ox-publish. Ainda assim, com um script simples e um pouco de elisp, você consegue ter um pouco do que um SSG consegue te oferecer.
|
||||
|
||||
E quando eu falo um pouco, eu não tô de sacanagem, isso é tudo o que eu preciso para ter meu site na forma em que eu quero:
|
||||
|
||||
Configurando o ox-publish e automatizando o processo de criação de HTML.
|
||||
|
||||
(require 'ox-publish)
|
||||
(require 'package)
|
||||
(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/"))
|
||||
(package-initialize)
|
||||
(unless (package-installed-p 'use-package)
|
||||
(package-refresh-contents)
|
||||
(package-install 'use-package))
|
||||
(eval-when-compile
|
||||
(require 'use-package))
|
||||
(use-package htmlize
|
||||
:ensure t)
|
||||
(use-package kanagawa-themes
|
||||
:ensure t
|
||||
:init (load-theme 'kanagawa-wave t))
|
||||
(require 'htmlize)
|
||||
(setq org-html-head "<link rel=stylesheet href=\"/assets/css/styles.css\" />"
|
||||
org-html-head-include-default-style nil
|
||||
org-html-head-include-scripts nil
|
||||
org-html-preamble nil
|
||||
org-html-postamble nil
|
||||
org-html-use-infojs nil)
|
||||
(setq org-publish-project-alist
|
||||
(list
|
||||
(list "Tukain's Blog"
|
||||
:base-directory "./content"
|
||||
:recursive t
|
||||
:htmlized-source t
|
||||
:publishing-directory "./public"
|
||||
:section-numbers nil
|
||||
:publishing-function 'org-html-publish-to-html)))
|
||||
(org-publish-all t)
|
||||
(message "Site gerado!")
|
||||
|
||||
Um script para executar os comandos necessários para gerar o site
|
||||
|
||||
#!/bin/sh
|
||||
mkdir -p public && emacs -x build.el && cp -r assets/ public/
|
||||
|
||||
Depois disso, o único trabalho que eu tenho é de fazer um artigo e listá-lo na minha homepage, e pronto!
|
||||
Outras coisas que estão no meu Emacs
|
||||
|
||||
É mais que claro que o Emacs é conhecido por seus usuários que, em boa parte dos casos, transformam o Emacs em um sistema operacional praticamente. E eu não sou muito diferente deles 🤓.
|
||||
|
||||
Atualmente eu já configurei o Emacs o suficiente para substituir a minha configuração do Neovim, e também configurei coisas como:
|
||||
|
||||
- Um servidor HTTP (para visualizar o meu site localmente)
|
||||
- Um agente PGP (EasyPG).
|
||||
- Um cliente de email (Gnus)
|
||||
- Uma interface para o Git (Magit)
|
||||
- Um leitor de feeds RSS (Elfeed)
|
||||
|
||||
Também estou vendo como configurar um cliente Jabber (XMPP) e vou configurar o Erc (o cliente IRC nativo do Emacs). Há também outras coisas que eu quero fazer, mas não acho que seja necessário falar sobre elas, afinal já estou tagarelando demais.
|
||||
|
||||
## Aos poucos, estou deixando o meu setup ser apenas um ambiente onde eu possa usar o Emacs
|
||||
|
||||
Eu ainda não iniciei o meu arco Uchirra da vida e saí eliminando meus programas, ainda.
|
||||
|
||||
Eu já tenho em mente o que eu quero fazer e como eu vou fazer para conseguir transformar o meu setup atual em algo que serve apenas para acomodar o Emacs. Alguns programas que eu posso remover, por exemplo, são o Lazygit (Porque eu já tenho o Magit) e o lf (Porque o Emacs vem com o Dired).
|
||||
|
||||
Mas vou deixar para fazer isso outra hora, afinal de contas isso vai tomar um pouco do meu tempo para poder concluir.
|
||||
|
||||
## _Fin_
|
||||
|
||||
Enfim, acho que já é hora de eu para de ficar tagarelando.
|
||||
|
||||
Te vejo no próximo post!
|
35
content/9994.proton
Normal file
35
content/9994.proton
Normal file
|
@ -0,0 +1,35 @@
|
|||
# Tô usando os serviços da Proton
|
||||
|
||||
Depois de aproximadamente 1 ano, eu criei uma nova conta no Proton. Um serviço de e-mail/calendário online/VPN/cloud storage/gerenciador de senhas/carteira de bitcoin, enfim, um serviço que foca em prover basicamente as ferramentas que comumemte utilizamos com mais frequência do Google (Gmail, Google Calendar, Google Drive, Google Passwords) com aquela pitada de privacidade que só a mão do Shaquille O'Neal consegue fazer.
|
||||
|
||||
## Por que?
|
||||
|
||||
Nas últimas semanas eu comecei a voltar ao meu antigo estilo de vida sem o Google, o fato de eu ter conseguido um emprego foi um facilitador nesse aspecto. No dia do aniversário do meu irmão, eu troquei de celular com ele, dando o meu Poco M4 Pro para ele e ficando com o Moto G52 dele.
|
||||
|
||||
Essa não foi a primeira vez que a gente fez isso, na verdade na primeira vez que fiz isso com ele foi porque o Moto G52 possui uma ROM oficial da LineageOS disponível, e digamos que quando eu descobri isso eu tive uma ativação neural e no mesmo dia a gente fez essa troca. E claro, eu coloquei a Lineage no G52.
|
||||
|
||||
Enfim, vou cortar um pouco da história e pular para o presente. Depois que eu fiquei com o G52 com a Lineage instalada novamente, eu comecei a fazer uma especie de "detox digital", mas eu não estava deletando contas, eu estava desvinculando o Google delas. Porém, uma coisa que estava sendo uma pedra no meu caminho era o Gmail, e bem, eu tenho e-mails alternativos, mas os servidores deles são lentos o suficiente para que eu basicamente só leia um e-mail 1 hora depois que eu "recebi" ele.
|
||||
|
||||
Tendo isso em mente, eu criei uma nova conta no Proton, que dentre várias coisas, também me dá acesso a 10 e-mail aliases. O que me permite remover o Gmail da jogada, e mesmo as coisas que não estão (ainda) usando aliases não ficam presas no limbo, já que o Proton me permite receber os e-mails do Gmail, no Proton, ou seja, eu não preciso nem mesmo abrir o Gmail para ler os e-mails que chegam por lá.
|
||||
|
||||
## Mudanças no armazenamento
|
||||
|
||||
Ano passado, quando eu tinha uma conta no Proton, o armazenamento era bem limitado, somente 1Gb (depois de fazer uma configuração na conta, o padrão era 512Mb) era disponível. Esses 1Gb eram compartilhado entre o serviço de e-mail/calendário e o de cloud storage. Não sei se já ficou claro, mas 1Gb não é lá muita coisa para um serviço de cloud storage, muito menos quando isso é compartilhado com outros serviços.
|
||||
|
||||
Mas, com a nova conta que criei ainda hoje, eu reparei que no serviço de e-mail o armazenamento continua sendo de 1Gb, porém o serviço de cloud storage se inicia com 3Gb! Podendo ser aumentado para 5Gb depois de seguir um passo a passo de configuração!
|
||||
|
||||
Isso é algo que eu simplesmente não tava esperando, mas é uma mudança mais que bem vinda, porque eu posso mover os arquivos que eu tinha no Google Drive para cá com muito mais folga.
|
||||
|
||||
## Uma senha praticamente impossível de digitar para a minha conta do Google
|
||||
|
||||
Eu também estou dificultando ao máximo o meu login do Google, praticamente tornando impossível que eu faça login sem utilizar o KeePass, o que por sua vez, faz com que eu deixe de utilizar um sistema que não seja uma distro linux, no caso do meu pc, ou a LinageOS, no meu celular.
|
||||
|
||||
O KeePassXC havia lançado a +/- 2 meses atrás uma função que te permite criar passkeys utilizando o próprio KeePassXC, o que elimina a necessidade de um celular com a Google impregnada ou um iPhone. Óbviamente eu já passei a limpa em todas as contas que eu usava uma passkey da Google e gerei novas usando o KeePassXC.
|
||||
|
||||
Tudo isso me deixa cada vez menos dependente do Google, o que é algo que sinceramente qualquer pessoa deveria tentar fazer. Não só com o Google, mas com basicamente qualquer uma dessas empresas que até um idoso de 90 anos reconhece de tão popular.
|
||||
|
||||
## _Fin_
|
||||
|
||||
Enfim, acho que já tagarelei demais.
|
||||
|
||||
Até o próximo post!
|
30
content/9995.raylib
Normal file
30
content/9995.raylib
Normal file
|
@ -0,0 +1,30 @@
|
|||
# Raylib.ha
|
||||
|
||||
Nos últimos dias eu ando trabalhando em um pequeno projeto, esse sendo algo que estou fazendo como uma forma de aprendizado. O nome que dei a esse projeto é raylib.ha.
|
||||
|
||||
A minha inspiração foi uma live de um streamer que eu acompanho, o Tsoding. A live em questão é uma em que ele explora a Harelang pela primeira vez, ao decorrer da live, ele se questiona se ele poderia usar a raylib com a Hare. Depois de alguns minutos explorando, ele descobre como ele pode fazer isso, e parte em direção para criar uma janela com um quadrado vermelho que pode se movimentar na janela com as teclas W/A/S/D.
|
||||
|
||||
## Do que se trata
|
||||
|
||||
Bem, antes de falar sobre o meu projeto, acho melhor esclarecer a aqueles que não conhece a raylib o que ela é. A raylib, como o nome já pode soar, é uma biblioteca que serve para a criação de jogos em C sem muita dor de cabeça.
|
||||
|
||||
E o meu projeto se trata de algo cujo o objetivo é criar bindings que permitam o uso da raylib por meio da Harelang.
|
||||
## Meus objetivos
|
||||
|
||||
Quero que, ao finalizar o projeto, seja possível criar jogos usando a raylib com a mesma facilidade, se não até mais, do que quando sendo feito usando C. Por enquanto estou focando nas partes necessárias para fazer um jogo 2D, seja esse jogo um plataformer, seja ele arena-shooter top-down.
|
||||
|
||||
Claro que isso implica também a necessidade de fazer bindings para a raymath, já que um jogo, por mais simples que seja, também precisa ter física. E eu vou sim fazer isso, só não agora. Ainda assim, não vai demorar muito para eu começar a fazer as bindings da raymath.
|
||||
|
||||
## Meu progresso até agora
|
||||
|
||||
Ainda me considero um iniciante, e falta muito para conseguir fazer todas as bindings para jogos 2D, quem dirá para todo o resto. Porém, já consegui finalizar coisas como o input via gamepads, teclado e mouse, praticamente todas as formas geométricas com a excessão de apenas 3, funções de timing, enfim, tive um avanço significativo.
|
||||
|
||||
Além da tradução direta das funções feitas em C, eu também fiz algumas adaptações para que não ouvesse atrito/diferença na forma em que você usa algumas funções. Também adicionei um método alternativo para a criação de triângulos.
|
||||
|
||||
A última coisa que realizei até o momento foi o suporte a músicas, e irei adicionar as demais funções relacionadas a áudio ainda nessa semana. Essa última função foi também fruto de uma intuição sobre como poder utilizar structs definidos fora da raylib.ha, e pode ter certeza de que foi gratificante saber que deu certo.
|
||||
|
||||
## _Fin_
|
||||
|
||||
Bem, isso é tudo o que eu tenho a comentar por agora.
|
||||
|
||||
Até o próximo post!
|
82
content/9996.algumas-atualizações
Normal file
82
content/9996.algumas-atualizações
Normal file
|
@ -0,0 +1,82 @@
|
|||
# Algumas Atualizações
|
||||
|
||||
Tudo bem com você? Espero que sim. Bom, na última semana eu ando passando quase que por uma montanha-russa de emoções. Mudei a estrutura do meu site, migrei do Github para 3 serviços Git diferentes, voltei a usar o Neovim, decidi deixar a Hare de lado… Mas esse último não durou muito, e eu vou começar comentando sobre ele.
|
||||
|
||||
## Já estou usando a Hare de novo.
|
||||
|
||||
Bom, apesar de tudo o que eu disse em um post de uma semana atrás, eu acabei voltando a usar a Hare. Dessa vez eu não sei muito bem como explicar o motivo de voltar, mas posso dizer que foi algo mais emocional do que lógico. Algo como um sentimento de nostalgia, já que Hare foi a primeira linguagem de programação que eu realmente parei para estudar e aprender a programar com ela.
|
||||
|
||||
Pode haver também um pouco de orgulho envolvido, já que ela é uma linguagem relativamente desconhecida e por conta disso não existem tutoriais e vídeos sobre ela por aí, com excessão dos vindos dos próprios desenvolvedores da Hare e de poucas excessões como o Tsoding.
|
||||
|
||||
E não, eu ainda não sei programar, mas posso dizer que estou aprendendo uma coisa ou outra, e devo isso à Hare. Acho que o design dela faz com que quando eu tente fazer algo e ele não funciona, o problema está puramente na forma em que eu me expressei, e não na forma que eu pensei.
|
||||
|
||||
Um exemplo muito bom disso é um problema que tive ao fazer um clone do comando “cat”. O problema era o seguinte:
|
||||
|
||||
O programa conseguia ler o arquivo dado pelo usuário sem problema, porém, ele mostrava apenas a primeira linha do arquivo. Então, eu precisaria de uma forma de mostrar a linha atual e depois disso a próxima e assim por diante, incrementando a posição atual.
|
||||
|
||||
Eu provavelmente não vou conseguir escrever exatamente como que estava a linha de código que só mostrava a primeira linha, mas era algo mais ou menos assim:
|
||||
|
||||
fn lerArquivo(lines: []str) void = {
|
||||
let total = len(lines);
|
||||
|
||||
for (let i = 0z; i < total) {
|
||||
fmt::println(lines[i])!;
|
||||
i=i+1;
|
||||
};
|
||||
};
|
||||
|
||||
O erro está na 6ª linha, eu tentei fazer o valor de “i” ser incrementado por “1” até que o valor de “i” fosse igual ao “total”, o que em questão de lógica está correto, mas a expressão “i = i+1” está errada.
|
||||
|
||||
Se eu não estou enganado, esta é a sintaxe usada na linguagem de programação Lua.
|
||||
|
||||
A forma correta de incrementar um número em Hare (e em outras línguas) é com o operador “+=”, que serve justamente para incrementar. Então, feita essa pequena modificação, o programa re-itera pelo arquivo, lê, e escreve a linha atual sem nenhum problema.
|
||||
|
||||
E sim, eu tomei como base parte de um exemplo da documentação da Hare para fazer esse programa, sendo essa parte alguns dos módulos usados, mas a lógica em si e a execução foram feitos por conta própria.
|
||||
|
||||
## O site sofreu várias mudanças
|
||||
|
||||
Acompanhada dessa minha saga de estudos sobre programação, vieram também diversas mudanças com esse site. Se bem que nesse aspecto, mudar o site é algo extremamente recorrente. Mas devo mencionar a atual presença de nenhum framework ou gerador de site estático sendo usada para a criação de páginas/posts.
|
||||
|
||||
Em relação a Web, a única coisa que se mantém consistente em todas as versões do meu site que já existiram é a falta ou presença mínima de javascript. Com excessão disso, já fiz diversas mudanças que variam de coisas como a estrutura de arquivos do site, para tags usadas, classes, propriedades, enfim, toda a infraestrutura.
|
||||
|
||||
A mudança mais atual é o meu próprio css sendo implementado e alterado conforme minhas necessidades. É a basicamente a minha primeira vez fazendo o css do meu site completamente do 0, e tomando cuidado também em relação a resposividade dele com aparelhos mobile, na verdade dando um foco especial a esses aparelhos.
|
||||
|
||||
O motivo disso é porque a única pessoa que eu tenho não só plena certeza de que lê todos os posts, como também é alguém que eu sempre tento agradar com cada post: a minha namorada.
|
||||
|
||||
E bom, a forma que ela lê os artigos é por meio do celular dela, então nada mais justo do que dar uma atenção especial para este tipo de aparelho.
|
||||
|
||||
## Migrei do Github para 3 serviços Git diferentes
|
||||
|
||||
Ok, isso é algo que precisa de uma explicação mais detalhada.
|
||||
|
||||
A não muito tempo atrás esse site, junto de outros projetos, era hosteado no Github, o que eu já devo admitir que não gostava nem um pouco. A interface gráfica é muito sem personalidade, basicamente um espelho das interfaces corporativas que vemos pelo mundo afora.
|
||||
|
||||
O que não é uma surpresa na verdade, afinal, o Github é um produto da Microsoft, então isso não é nada além do mínimo esperado. E claro, ele também é algo de código fechado.
|
||||
|
||||
Ao menos para mim, não é muito confortável deixar algo de código aberto guardado em um produto de código fechado, muito menos depender desse produto.
|
||||
|
||||
Mas enfim, o motivo que me fez deixar de usar o Github foi simples: Ele simplesmente desabilitou minha conta por conta de “atividade suspeita na conta”, sendo que essa atividade foi realizada por mim mesmo, usando uma chave ssh verificada pela minha conta (que inclusive tem também autenticação de 2 fatores via OTP e app).
|
||||
|
||||
E já que o Github descidiu dar o primeiro passo, eu segui adiante.
|
||||
|
||||
Atualmente o meu site é hosteado no Codeberg, e também é nele que guardo meus projetos, porém, ele não é o meu Git principal, ele é o meu secundário. O meu git primário é o git.cbps.xyz/guapito, e eu também tenho um git reserva que uso como backup no git.disroot.org.
|
||||
|
||||
Eu mantenho todos os 3 gits sincronizados usando uma função que os 3 compartilham por usarem o mesmo software de servidor: push mirrors.
|
||||
|
||||
Tudo o que eu preciso fazer é garantir que todos os 3 possuem os mesmos repositórios, depois, em 1 dos gits eu adiciono os repositórios dos demais nas configurações do repositório respectivo na seção de push mirros e pronto, quaisquer mudanças feitas nesse repositório serão refletidas nos demais.
|
||||
|
||||
## Voltei a usar o Neovim
|
||||
|
||||
Bom, eu já esperava que essa volta viria cedo ou tarde. O Helix é um ótimo editor de texto, e ele realmente é melhor que a minha configuração do Neovim, porém, o problema vive justamente aí, eu posso deixar o meu Neovim melhor que o Helix com apenas alguns ajustes e 2/3 plugins.
|
||||
|
||||
E eu fiz diversas mudanças na minha configuração do Neovim, a única coisa que está faltando mesmo é suporte a lsp, tirando isso, ela já está melhor que o Helix em seu estado atual.
|
||||
|
||||
A simples possibilidade de modificar a interface e como as coisas funcionam da forma que quiser já é algo que me faz preferir o Neovim. Claro que eu não sou um maníaco por customização, sempre que uma opção limitada for melhor que a customizável em certa tarefa, eu vou usar a opção limitada, e bom, esse foi o caso do Helix enquanto eu não aprimorava a minha configuração do Neovim.
|
||||
|
||||
E agora que a minha configuração está muito mais madura, eu oficialmente posso colocar o Helix em uma posição de editor de texto secundário, tomando o lugar do Emacs, que deixei de utilizar a um tempo.
|
||||
|
||||
## Fin
|
||||
|
||||
Enfim, obrigado por ler este artigo, significa muito para mim.
|
||||
|
||||
Até o próximo post!
|
36
content/9997.tchau-hare
Normal file
36
content/9997.tchau-hare
Normal file
|
@ -0,0 +1,36 @@
|
|||
# Deixando a Hare de lado… Por enquanto.
|
||||
|
||||
Irei começar me explicando o porquê de eu ter decidido isso de forma tão repentina. Bom, se você leu o meu último artigo, então sabe que eu ando estudando 2 linguagens de programação: C e Hare. Apesar de ter gostado e muito de estudar as duas línguas em conjunto, eu tenho que encarar um fato: eu não sei programar.
|
||||
|
||||
## Quer dizer então que vou desistir?
|
||||
|
||||
Nada disso. Irei continuar meus estudos, porém, apenas usando uma língua, a C. O motivo disso é uma consequência de não saber programação no geral, há coisas que eu preciso de uma documentação detalhada ou até mesmo uma explicação em si, mas a Hare não está pronta, muito menos a sua documentação, sem se falar que ela é qualquer coisa, menos popular. A consequência disso é que se eu estou em dúvida sobre algo que eu quero fazer, eu não vou achar no Google, e tem uma boa chance de não achar na documentação também.
|
||||
|
||||
Por isso irei continuar apenas com a C, ela é uma linguagem que é extremamente popular e utilizada até hoje, não falta nenhuma documentação/explicação sobre algo, e é uma linguagem que já está terminada.
|
||||
|
||||
## Ainda assim irei sentir saudades da Hare.
|
||||
|
||||
Apesar de ter essa “deficiência” em relação a documentação, a Hare é uma linguagem muito boa, mesmo em seus estágios iniciais. O único erro foi eu querer aprender a programar com uma linguagem que não está pronta ainda.
|
||||
|
||||
O maior problema de tentar fazer o que eu fiz é que você não tem a quem, ou o que recorrer. Você está por conta própria. Sendo assim, a Hare é uma linguagem que eu recomendaria apenas para as pessoas que já são programadores, principalmente as que tem certa familiaridade com C.
|
||||
C também não é muito amigável, mas estou acostumado.
|
||||
|
||||
Você poderia até mesmo achar que eu querer aprender a programar com C seria outra ideia ruim, mas eu acho que (para o meu caso) essa é uma ideia boa.
|
||||
|
||||
C é famosa por ser uma linguagem “difícil”, “insegura”, “limitada” e até mesmo “defasada”. A verdade é que certas coisas realmente estão corretas em relação a C, já que ela foi criada a quase 60 anos atrás, mas isso não quer dizer que ela é uma linguagem que não se deve aprender.
|
||||
|
||||
E até mesmo por ela ser “limitada” acaba tornando-a uma boa língua para aprender a programar. Ela é uma linguagem simples, com pouca coisa, mas com o suficiente para você conseguir fazer programas sem nenhuma dificuldade. E também, funciona em qualquer coisa que tenha um processador.
|
||||
|
||||
## Eu penso um pouco com a lógica de C.
|
||||
|
||||
Posso estar me expressando mal ao dizer isso, mas eu tenho uma linha de raciocício que segue +/- a forma em que você faz algo em C. Por isso até que eu tive certa facilidade com a Hare e Go.
|
||||
|
||||
Um dos prováveis motivos de eu ter essa linha de raciocício pode ter sido o período em que eu utilizava softwares da suckless. Todos eles são feitos em C puro, e eu costumava aplicar muitos patches, por consequência, tive o hábito de consertar inconsistências e de corrigir erros na aplicação de patches.
|
||||
|
||||
Por conta disso, memorizei muitas das palavras-chave de C e também um pouco de como um programa feito em C é estruturado.
|
||||
|
||||
## _Fin_
|
||||
|
||||
Hoje isso é tudo o que eu tenho a dizer.
|
||||
|
||||
Até o próximo post!
|
81
content/9998.c-e-hare
Normal file
81
content/9998.c-e-hare
Normal file
|
@ -0,0 +1,81 @@
|
|||
# A simplicidade da C e da Hare
|
||||
|
||||
Recentemente eu fiz um post sobre os meus estudos com a linguagem de programação Hare, falei sobre o que eu planejo fazer com esse conhecimento entre outras coisas. Mas algo que eu não comentei sobre foi o fato de eu estar estudando Hare em conjunto com C (só mencionei que a sintaxe da Hare é semelhante a C).
|
||||
|
||||
## Por quê estou fazendo isso?
|
||||
|
||||
Bom, isso é algo que eu simplesmente esqueci de comentar no meu último post, estou fazendo isso por 2 motivos principais:
|
||||
|
||||
As sintaxes são semelhantes, então posso pegar um conhecimento novo de uma e levar para outra; Ambas são linguagens low-level, com foco em alto desempenho e possuem manipulação manual de memória, então posso aprender esse conceito de forma prática. Claro que existem outros motivos para eu fazer algo nesse estilo, mas eu não vejo a necessidade de listar todos eles aqui. Afinal, já é algo “estranho” para um jovem da minha idade ter interesse em uma “linguagem defasada e insegura” como a C, ao invés de querer aprender algo como Python, Ruby ou Javascript.
|
||||
|
||||
## Existe algum outro motivo?
|
||||
|
||||
Óbviamente que sim. Aprender C/Hare é algo como um sonho que quero, e posso, tornar realidade. É algo que chega perto de uma romantização, um sentimento que dá vontade de correr atrás, de se esforçar para alcança-lo.
|
||||
|
||||
Quase como você sonha em ter seu próprio carro, viver sozinho, ou viajar o mundo. Não é um sentimento fácil de por em palavras.
|
||||
|
||||
## Como está meu progresso até agora?
|
||||
|
||||
Bom, eu iniciei meus estudos a pouquíssimo tempo, então ainda estou em meus estágios iniciais. Porém já aprendi alguns conceitos básicos como if statements, which loop, for loop, switch-case, structs e alguns types também (tanto em C quanto em Hare).
|
||||
|
||||
Também comecei a fazer alguns programas extremamente simples só para fixar esses conceitos na minha cabeça, um exemplo desses programas é um programa que cria um arquivo vazio usando um nome que o usuário fornece.
|
||||
|
||||
Escrito em C:
|
||||
|
||||
int main()
|
||||
{
|
||||
FILE *arq;
|
||||
char nome[100];
|
||||
|
||||
printf("Digite o nome do arquivo: ");
|
||||
scanf("%s", &nome[0]);
|
||||
|
||||
if (fopen(nome, "r"))
|
||||
{
|
||||
printf("O arquivo já existe.\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
arq = fopen(nome, "w");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Escrito em Hare:
|
||||
|
||||
use os;
|
||||
use bufio;
|
||||
use strings;
|
||||
|
||||
export fn main() void = {
|
||||
let arquivo = nomeDoArquivo();
|
||||
|
||||
if (os::exists(arquivo)) {
|
||||
fmt::println("Arquivo já existe.\n")!;
|
||||
} else {
|
||||
os::create(arquivo, 384)!;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
fn nomeDoArquivo() str = {
|
||||
fmt::printf("Escreva o nome do arquivo.\n:")!;
|
||||
const inputUser = bufio::read_line(os::stdin)! as []u8;
|
||||
return strings::fromutf8(inputUser)!;
|
||||
};
|
||||
|
||||
|
||||
## As diferenças
|
||||
|
||||
Algo que já para notar nesses exemplos é que o código em Hare é um pouco maior que o código em C, o motivo disso é que a Hare tem um foco na manipulação de erros. O que faz com que você tenha não só ter plena noção do que deve ser feito em caso de algum erro, mas também dizer ao programa o que ele vai fazer em caso de erro.
|
||||
|
||||
A consequência disso é ter um pouco mais de linhas de código necessárias e também mais símbolos para serem utilizados durante a escrita do programa.
|
||||
|
||||
Apesar disso, eu acho a sintaxe da Hare mais legível que a C em alguns casos, como por exemplo na criação e utilização de structs.
|
||||
|
||||
## _Fin_
|
||||
|
||||
Bem, isso é tudo o que eu tenho a dizer por agora.
|
||||
|
||||
Até o próximo post!
|
||||
|
44
content/9999.hare
Normal file
44
content/9999.hare
Normal file
|
@ -0,0 +1,44 @@
|
|||
# Hare
|
||||
|
||||
## Praticamente C, mas com diversas melhorias
|
||||
|
||||
A Hare é uma linguagem da família das linguagens C-like, e a sua sintaxe deixa
|
||||
isso bem explícito, porém, ela tem algumas das inovações das últimas décadas
|
||||
consigo e também se inspira na sintaxe de outras linguagens, como a Rust.
|
||||
Porém, diferente de Rust, você não vai ter que esperar por minutos ou horas
|
||||
para o compilador terminar o serviço, nem quebrar a cabeça com o seu código
|
||||
para que ele seja "memory safe", ela não tem garbage collectors nem nada desse
|
||||
tipo, é como eu disse, ela é praticamente C. Contudo, ela não é uma linguagem
|
||||
com as mesmas limitações ou problemas que C possui, e além disso ela tem uma
|
||||
sintaxe que, para mim, não só é mais clara, como mais fácil de entender o que
|
||||
está acontecendo. Claramente isso é apenas algo que depende da minha
|
||||
experiência, mas até mesmo a minha namorada conseguiu entender como um Struct
|
||||
estava sendo usado em um dos exemplos que eu escrevi em Hare, enquanto isso, o
|
||||
mesmo exemplo em C foi… Confuso para dizer no mínimo.
|
||||
|
||||
## QBE como backend
|
||||
|
||||
O compilador da Hare usa o QBE Backend, o que torna o compilador dela
|
||||
extremamente rápido e leve, e também facilita o processo de criar ports do
|
||||
compilador para outras arquiteturas. Eu não irei entrar muito em detalhes sobre
|
||||
o que é um Compiler Backend, mas devo parafrasear algo vindo do próprio site do
|
||||
QBE:
|
||||
|
||||
> QBE é um backend para compiladores, com o foco de providenciar 70% da
|
||||
> performance de compiladores otimizados da indústria com 10% do código.
|
||||
|
||||
De certa forma, o QBE se encaixa até mesmo na filosofia suckless, o que para
|
||||
mim pelo menos, é um grande ponto possitivo.
|
||||
|
||||
## O que eu planejo fazer aprendendo a programar?
|
||||
|
||||
Atualmente, eu vejo a programação como um hobbie para mim, um hobbie que eu
|
||||
gosto e muito, mas isso não me impede de colocar essa habilidade no meu
|
||||
currículo, um dia isso pode vir a ser extremamente útil. Por enquanto eu estou
|
||||
aprendendo o básico, recém fiz o meu primeiro Struct, ainda falta muito para eu
|
||||
dizer que eu sei fazer alguma coisa, quanto mais dizer que eu sei programar.
|
||||
Mas isso só depende do meu esforço, então irei correr atrás.
|
||||
|
||||
## _Fin_
|
||||
|
||||
Enfim, é isso, até o próximo post!
|
|
@ -1,25 +0,0 @@
|
|||
#+TITLE: Tukain's Blog
|
||||
#+AUTHOR: Tukain
|
||||
#+DESCRIPTION: Um blog simples, feito usando o org-mode.
|
||||
#+OPTIONS: toc:nil
|
||||
|
||||
*** [[https://neocities.org/site/tukainpng][Neocities]] [[https://codeberg.org/tukain][Codeberg]] [[https://www.linkedin.com/in/diogo-fernandes-710193282/][LinkedIn]]
|
||||
*** /feito com <3 usando o org-mode/
|
||||
|
||||
* Bem-vindo ao meu blog!
|
||||
|
||||
Aqui é um lugar onde eu gosto de comentar sobre assuntos envolvendo o
|
||||
meu cotidiano nesse vasto mundo chamado internet. E também sobre
|
||||
alguns assuntos que eu achar relevante o suficiente para comentar.
|
||||
|
||||
** Posts
|
||||
|
||||
- [[./posts/viper-mode.html]]
|
||||
- [[./posts/emacs-parte-2.org]]
|
||||
- [[./posts/emacs.org]]
|
||||
- [[./posts/proton.html]]
|
||||
- [[./posts/raylib-ha.html]]
|
||||
- [[./posts/algumas-atualizações.html]]
|
||||
- [[./posts/tchau-hare.html]]
|
||||
- [[./posts/c-e-hare.html]]
|
||||
- [[./posts/hare.html]]
|
|
@ -1,186 +0,0 @@
|
|||
#+TITLE: Algumas atualizações
|
||||
|
||||
Tudo bem com você? Espero que sim. Bom, na última semana eu ando
|
||||
passando quase que por uma montanha-russa de emoções. Mudei a
|
||||
estrutura do meu site, migrei do Github para 3 serviços Git
|
||||
diferentes, voltei a usar o Neovim, decidi deixar a Hare de lado… Mas
|
||||
esse último não durou muito, e eu vou começar comentando sobre ele.
|
||||
|
||||
* Já estou usando a Hare de novo.
|
||||
|
||||
Bom, apesar de tudo o que eu disse em um post de uma semana atrás, eu
|
||||
acabei voltando a usar a Hare. Dessa vez eu não sei muito bem como
|
||||
explicar o motivo de voltar, mas posso dizer que foi algo mais
|
||||
emocional do que lógico. Algo como um sentimento de nostalgia, já que
|
||||
Hare foi a primeira linguagem de programação que eu realmente parei
|
||||
para estudar e aprender a programar com ela.
|
||||
|
||||
|
||||
Pode haver também um pouco de orgulho envolvido, já que ela é uma
|
||||
linguagem relativamente desconhecida e por conta disso não existem
|
||||
tutoriais e vídeos sobre ela por aí, com excessão dos vindos dos
|
||||
próprios desenvolvedores da Hare e de poucas excessões como o Tsoding.
|
||||
|
||||
|
||||
E não, eu ainda não sei programar, mas posso dizer que estou
|
||||
aprendendo uma coisa ou outra, e devo isso à Hare. Acho que o design
|
||||
dela faz com que quando eu tente fazer algo e ele não funciona, o
|
||||
problema está puramente na forma em que eu me expressei, e não na
|
||||
forma que eu pensei.
|
||||
|
||||
Um exemplo muito bom disso é um problema que tive ao fazer um clone do
|
||||
comando “cat”. O problema era o seguinte:
|
||||
|
||||
|
||||
O programa conseguia ler o arquivo dado pelo usuário sem problema,
|
||||
porém, ele mostrava apenas a primeira linha do arquivo. Então, eu
|
||||
precisaria de uma forma de mostrar a linha atual e depois disso a
|
||||
próxima e assim por diante, incrementando a posição atual.
|
||||
|
||||
|
||||
Eu provavelmente não vou conseguir escrever exatamente como que estava
|
||||
a linha de código que só mostrava a primeira linha, mas era algo mais
|
||||
ou menos assim:
|
||||
|
||||
#+begin_src hare
|
||||
fn lerArquivo(lines: []str) void = {
|
||||
let total = len(lines);
|
||||
|
||||
for (let i = 0z; i < total) {
|
||||
fmt::println(lines[i])!;
|
||||
i=i+1;
|
||||
};
|
||||
};
|
||||
#+end_src
|
||||
|
||||
O erro está na 6ª linha, eu tentei fazer o valor de “i” ser
|
||||
incrementado por “1” até que o valor de “i” fosse igual ao “total”, o
|
||||
que em questão de lógica está correto, mas a expressão “i = i+1” está
|
||||
errada.
|
||||
|
||||
|
||||
Se eu não estou enganado, esta é a sintaxe usada na linguagem de
|
||||
programação Lua.
|
||||
|
||||
|
||||
A forma correta de incrementar um número em Hare (e em outras línguas)
|
||||
é com o operador “+=”, que serve justamente para incrementar. Então,
|
||||
feita essa pequena modificação, o programa re-itera pelo arquivo, lê,
|
||||
e escreve a linha atual sem nenhum problema.
|
||||
|
||||
|
||||
E sim, eu tomei como base parte de um exemplo da documentação da Hare
|
||||
para fazer esse programa, sendo essa parte alguns dos módulos usados,
|
||||
mas a lógica em si e a execução foram feitos por conta própria.
|
||||
|
||||
* O site sofreu várias mudanças
|
||||
|
||||
Acompanhada dessa minha saga de estudos sobre programação, vieram
|
||||
também diversas mudanças com esse site. Se bem que nesse aspecto,
|
||||
mudar o site é algo extremamente recorrente. Mas devo mencionar a
|
||||
atual presença de nenhum framework ou gerador de site estático sendo
|
||||
usada para a criação de páginas/posts.
|
||||
|
||||
|
||||
Em relação a Web, a única coisa que se mantém consistente em todas as
|
||||
versões do meu site que já existiram é a falta ou presença mínima de
|
||||
javascript. Com excessão disso, já fiz diversas mudanças que variam de
|
||||
coisas como a estrutura de arquivos do site, para tags usadas,
|
||||
classes, propriedades, enfim, toda a infraestrutura.
|
||||
|
||||
|
||||
A mudança mais atual é o meu próprio css sendo implementado e alterado
|
||||
conforme minhas necessidades. É a basicamente a minha primeira vez
|
||||
fazendo o css do meu site completamente do 0, e tomando cuidado também
|
||||
em relação a resposividade dele com aparelhos mobile, na verdade dando
|
||||
um foco especial a esses aparelhos.
|
||||
|
||||
|
||||
O motivo disso é porque a única pessoa que eu tenho não só plena
|
||||
certeza de que lê todos os posts, como também é alguém que eu sempre
|
||||
tento agradar com cada post: a minha namorada.
|
||||
|
||||
|
||||
E bom, a forma que ela lê os artigos é por meio do celular dela, então
|
||||
nada mais justo do que dar uma atenção especial para este tipo de
|
||||
aparelho.
|
||||
|
||||
* Migrei do Github para 3 serviços Git diferentes
|
||||
|
||||
Ok, isso é algo que precisa de uma explicação mais detalhada.
|
||||
|
||||
A não muito tempo atrás esse site, junto de outros projetos, era
|
||||
hosteado no Github, o que eu já devo admitir que não gostava nem um
|
||||
pouco. A interface gráfica é muito sem personalidade, basicamente um
|
||||
espelho das interfaces corporativas que vemos pelo mundo afora.
|
||||
|
||||
|
||||
O que não é uma surpresa na verdade, afinal, o Github é um produto da
|
||||
Microsoft, então isso não é nada além do mínimo esperado. E claro, ele
|
||||
também é algo de código fechado.
|
||||
|
||||
|
||||
Ao menos para mim, não é muito confortável deixar algo de código
|
||||
aberto guardado em um produto de código fechado, muito menos depender
|
||||
desse produto.
|
||||
|
||||
|
||||
Mas enfim, o motivo que me fez deixar de usar o Github foi simples:
|
||||
Ele simplesmente desabilitou minha conta por conta de “atividade
|
||||
suspeita na conta”, sendo que essa atividade foi realizada por mim
|
||||
mesmo, usando uma chave ssh verificada pela minha conta (que inclusive
|
||||
tem também autenticação de 2 fatores via OTP e app).
|
||||
|
||||
|
||||
E já que o Github descidiu dar o primeiro passo, eu segui adiante.
|
||||
|
||||
Atualmente o meu site é hosteado no Codeberg, e também é nele que
|
||||
guardo meus projetos, porém, ele não é o meu Git principal, ele é o
|
||||
meu secundário. O meu git primário é o git.cbps.xyz/guapito, e eu
|
||||
também tenho um git reserva que uso como backup no git.disroot.org.
|
||||
|
||||
|
||||
Eu mantenho todos os 3 gits sincronizados usando uma função que os 3
|
||||
compartilham por usarem o mesmo software de servidor: push mirrors.
|
||||
|
||||
|
||||
Tudo o que eu preciso fazer é garantir que todos os 3 possuem os
|
||||
mesmos repositórios, depois, em 1 dos gits eu adiciono os repositórios
|
||||
dos demais nas configurações do repositório respectivo na seção de
|
||||
push mirros e pronto, quaisquer mudanças feitas nesse repositório
|
||||
serão refletidas nos demais.
|
||||
|
||||
|
||||
* Voltei a usar o Neovim
|
||||
|
||||
Bom, eu já esperava que essa volta viria cedo ou tarde. O Helix é um
|
||||
ótimo editor de texto, e ele realmente é melhor que a minha
|
||||
configuração do Neovim, porém, o problema vive justamente aí, eu posso
|
||||
deixar o meu Neovim melhor que o Helix com apenas alguns ajustes e 2/3
|
||||
plugins.
|
||||
|
||||
|
||||
E eu fiz diversas mudanças na minha configuração do Neovim, a única
|
||||
coisa que está faltando mesmo é suporte a lsp, tirando isso, ela já
|
||||
está melhor que o Helix em seu estado atual.
|
||||
|
||||
|
||||
A simples possibilidade de modificar a interface e como as coisas
|
||||
funcionam da forma que quiser já é algo que me faz preferir o
|
||||
Neovim. Claro que eu não sou um maníaco por customização, sempre que
|
||||
uma opção limitada for melhor que a customizável em certa tarefa, eu
|
||||
vou usar a opção limitada, e bom, esse foi o caso do Helix enquanto eu
|
||||
não aprimorava a minha configuração do Neovim.
|
||||
|
||||
|
||||
E agora que a minha configuração está muito mais madura, eu
|
||||
oficialmente posso colocar o Helix em uma posição de editor de texto
|
||||
secundário, tomando o lugar do Emacs, que deixei de utilizar a um
|
||||
tempo.
|
||||
|
||||
|
||||
* /Fin/
|
||||
|
||||
Enfim, obrigado por ler este artigo, significa muito para mim.
|
||||
|
||||
Até o próximo post!
|
|
@ -1,112 +0,0 @@
|
|||
#+TITLE: A simplicidade da C e da Hare
|
||||
|
||||
Recentemente eu fiz um post sobre os meus estudos com a linguagem de
|
||||
programação Hare, falei sobre o que eu planejo fazer com esse
|
||||
conhecimento entre outras coisas. Mas algo que eu não comentei sobre
|
||||
foi o fato de eu estar estudando Hare em conjunto com C (só mencionei
|
||||
que a sintaxe da Hare é semelhante a C).
|
||||
|
||||
* Por quê estou fazendo isso?
|
||||
|
||||
Bom, isso é algo que eu simplesmente esqueci de comentar no meu último
|
||||
post, estou fazendo isso por 2 motivos principais:
|
||||
|
||||
As sintaxes são semelhantes, então posso pegar um conhecimento novo de
|
||||
uma e levar para outra; Ambas são linguagens low-level, com foco em
|
||||
alto desempenho e possuem manipulação manual de memória, então posso
|
||||
aprender esse conceito de forma prática. Claro que existem outros
|
||||
motivos para eu fazer algo nesse estilo, mas eu não vejo a necessidade
|
||||
de listar todos eles aqui. Afinal, já é algo “estranho” para um jovem
|
||||
da minha idade ter interesse em uma “linguagem defasada e insegura”
|
||||
como a C, ao invés de querer aprender algo como Python, Ruby ou
|
||||
Javascript.
|
||||
|
||||
* Existe algum outro motivo?
|
||||
|
||||
Óbviamente que sim. Aprender C/Hare é algo como um sonho que quero, e
|
||||
posso, tornar realidade. É algo que chega perto de uma romantização,
|
||||
um sentimento que dá vontade de correr atrás, de se esforçar para
|
||||
alcança-lo.
|
||||
|
||||
Quase como você sonha em ter seu próprio carro, viver sozinho, ou
|
||||
viajar o mundo. Não é um sentimento fácil de por em palavras.
|
||||
|
||||
* Como está meu progresso até agora?
|
||||
|
||||
Bom, eu iniciei meus estudos a pouquíssimo tempo, então ainda estou em
|
||||
meus estágios iniciais. Porém já aprendi alguns conceitos básicos como
|
||||
if statements, which loop, for loop, switch-case, structs e alguns
|
||||
types também (tanto em C quanto em Hare).
|
||||
|
||||
Também comecei a fazer alguns programas extremamente simples só para
|
||||
fixar esses conceitos na minha cabeça, um exemplo desses programas é
|
||||
um programa que cria um arquivo vazio usando um nome que o usuário
|
||||
fornece.
|
||||
|
||||
Escrito em C:
|
||||
|
||||
#+begin_src C
|
||||
int main()
|
||||
{
|
||||
FILE *arq;
|
||||
char nome[100];
|
||||
|
||||
printf("Digite o nome do arquivo: ");
|
||||
scanf("%s", &nome[0]);
|
||||
|
||||
if (fopen(nome, "r"))
|
||||
{
|
||||
printf("O arquivo já existe.\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
arq = fopen(nome, "w");
|
||||
}
|
||||
}
|
||||
#+end_src
|
||||
|
||||
Escrito em Hare:
|
||||
|
||||
#+begin_src hare
|
||||
use os;
|
||||
use bufio;
|
||||
use strings;
|
||||
|
||||
export fn main() void = {
|
||||
let arquivo = nomeDoArquivo();
|
||||
|
||||
if (os::exists(arquivo)) {
|
||||
fmt::println("Arquivo já existe.\n")!;
|
||||
} else {
|
||||
os::create(arquivo, 384)!;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
fn nomeDoArquivo() str = {
|
||||
fmt::printf("Escreva o nome do arquivo.\n:")!;
|
||||
const inputUser = bufio::read_line(os::stdin)! as []u8;
|
||||
return strings::fromutf8(inputUser)!;
|
||||
};
|
||||
#+end_src
|
||||
|
||||
As diferenças
|
||||
|
||||
Algo que já para notar nesses exemplos é que o código em Hare é um
|
||||
pouco maior que o código em C, o motivo disso é que a Hare tem um foco
|
||||
na manipulação de erros. O que faz com que você tenha não só ter plena
|
||||
noção do que deve ser feito em caso de algum erro, mas também dizer ao
|
||||
programa o que ele vai fazer em caso de erro.
|
||||
|
||||
A consequência disso é ter um pouco mais de linhas de código
|
||||
necessárias e também mais símbolos para serem utilizados durante a
|
||||
escrita do programa.
|
||||
|
||||
Apesar disso, eu acho a sintaxe da Hare mais legível que a C em alguns
|
||||
casos, como por exemplo na criação e utilização de structs.
|
||||
|
||||
* /Fin/
|
||||
|
||||
Bem, isso é tudo o que eu tenho a dizer por agora.
|
||||
|
||||
Até o próximo post!
|
|
@ -1,107 +0,0 @@
|
|||
#+TITLE: Emacs - Parte 2
|
||||
|
||||
Hmmm... Parte 2? Hmmm...
|
||||
|
||||
Bem, eu não acho que isso vá ser um post longo ou que vá adicionar
|
||||
muito ao [[./emacs.html][post original]], então você pode ignorar ele a vontade.
|
||||
|
||||
* Sobre o "ambiente onde eu possa usar o Emacs"
|
||||
|
||||
Então, eu já consegui fazer um. É meio que feito na gambiarra, mas
|
||||
funciona.
|
||||
|
||||
Eu estou utilizando o compositor wayland Cage, um compositor que tem o
|
||||
objetivo de ser uma ferramenta para criação de kiosk's. Tipo um kiosk
|
||||
onde tem um menu de restaurante e etc.
|
||||
|
||||
Porém, como eu posso rodar qualquer programa que eu quiser nele, então
|
||||
nada melhor do que fazer um "kiosk" com o Emacs!
|
||||
|
||||
O resultado dessa monstruosidade é um Emacs rodando em tela cheia com
|
||||
um teclado inteiro a disposição para ser usado sem ter algum outro
|
||||
elemento que possa ter teclas de atalho conflitantes com as do Emacs.
|
||||
|
||||
Simplificando, eu posso usar até mesmo a tecla super (Windows) se eu
|
||||
quiser e eu vou estar de boa.
|
||||
|
||||
* O que mais adicionei à minha configuração do Emacs?
|
||||
|
||||
Teclas de atalho novas, como por exemplo, teclas para:
|
||||
|
||||
- Aumentar/diminuir o brilho da tela do meu notebook;
|
||||
- Aumentar/diminuir o volume do meu notebook;
|
||||
- Capturar a tela do Emacs ([[https://gitlab.com/marcowahl/emacsshot][usando o próprio emacs]]).
|
||||
- Gravar a tela
|
||||
|
||||
Também deixei habilitados por padrão 2 minor-modes do Emacs que são
|
||||
pré-instalados (por alguma razão), eles são o ~display-battery-mode~,
|
||||
e ~display-time-mode~. Ambos são minor-modes que poem seu output na
|
||||
barra do Emacs (eu não faço ideia de qual é o nome oficial dessa
|
||||
bagaça), o que significa que a barra do Emacs se tornou o equivalente
|
||||
à barra do Sway, o meu compositor wayland favorito.
|
||||
|
||||
* Org-publish é praticamente um SSG
|
||||
|
||||
Eu sei que eu já comentei algo parecido com isso no meu [[./emacs.html][outro post]]:
|
||||
|
||||
#+begin_quote
|
||||
Apesar de ter usado diversos SSG's nos últimos tempos, nenhum deles
|
||||
possui a praticidade de simplesmente gerar uma página HTML a partir de
|
||||
um buffer que esteja aberto no seu editor com a mesma facilidade que o
|
||||
Emacs junto do Org-mode conseguem ter.
|
||||
|
||||
Esse site inteiro foi refeito utilizando essa ferramenta de gereção de
|
||||
sites nativa do Emacs.
|
||||
#+end_quote
|
||||
|
||||
Mas acho que eu não consegui transparecer o quão prático e simples é o
|
||||
processo de escrever e "publicar" o que foi escrito.
|
||||
|
||||
Se você já usou um SSG como por exemplo o Jekyll, você pode
|
||||
interpretar o org-publish como uma template do Jekyll em que você pode
|
||||
fazer algumas modificações e que não tem muitas automações por parte
|
||||
dela.
|
||||
|
||||
Todas as páginas seguem um padrão pré-definido, todas.
|
||||
|
||||
Ou seja, você pode usar o seu CSS pensando somente em 1 página, porque
|
||||
todas as outras vão ser clones dessa página em que você está se
|
||||
inspirando.
|
||||
|
||||
Um bom exemplo disso é esse próprio site. Se você observar bem, não
|
||||
existe muito uma grande diferença entre a página de um post e a página
|
||||
de index. Na verdade a única diferença é a falta de uma tabela de
|
||||
conteúdo na página index.
|
||||
|
||||
Outra coisa também que eu encontrei, depois de xeretar um pouco na
|
||||
inter-webs, eu encontrei algumas características interessantes sobre o
|
||||
ox-publish. Uma delas é que as variáveis que criam o preâmbulo e o
|
||||
pós-âmbulo da página (são uns bagulho de autor e de validação da
|
||||
página) podem ser modificadas para qualquer string que o usuário
|
||||
prefira. Ou seja, eu posso colocar meu próprio HTML nelas!
|
||||
|
||||
O que em termos práticos, faz com que o ox-publish faça o que eu
|
||||
achava que era a maior utilidade de um SSG: re-utilizar um elemento de
|
||||
uma página em todas as outras.
|
||||
|
||||
Por enquanto eu só adicionei uma footer com o nome do author do artigo
|
||||
e com a data de última modificação do arquivo (sim, esse bagulho tem
|
||||
até variáveis que você pode usar).
|
||||
|
||||
* A site é praticamente um espelho da minha config
|
||||
|
||||
O meu site e o meu Emacs possuem uma aparência muito similar, o que é proposital, já que dessa forma eu consigo ter uma certa noção de como meu site vai ficar, tirando a necessidade de usar um navegador para visualizar a página do meu site.
|
||||
|
||||
Não é que eu não veja como a página fica, mas eu não tenho a necessidade de ver como ele fica.
|
||||
|
||||
Melhor do que só mencionar é mostrar, então aqui está uma screenshot do meu Emacs:
|
||||
|
||||
[[../assets/img/emacs-parte-2.webp]]
|
||||
|
||||
Não é um completo clone 1 por 1, mas pelo menos eles tem certa semelhança, dessa maneira eu consigo me concentrar apenas em escrever com tranquilidade, afinal de contas o site final é extremamente semelhante ao o que eu já estou vendo no editor.
|
||||
|
||||
* /Fin/
|
||||
|
||||
Bem, é isso. Eu falei que esse posts seria algo rápido.
|
||||
|
||||
Enfim, até o próximo post!
|
|
@ -1,137 +0,0 @@
|
|||
#+TITLE: Emacs
|
||||
|
||||
Olha só quem voltou! E mais uma vez com o site completamente mudado!
|
||||
|
||||
Pois é, estou de volta, e dessa vez trago comigo algumas novidades em
|
||||
relação ao site e ao meu setup atual (spoiler: tá tudo no Emacs).
|
||||
|
||||
* Emacs, que saudades que estava de você!
|
||||
|
||||
A um tempo eu vim tendo essa vontade de voltar a usar o Emacs, mas a
|
||||
preguiça de ter que refazer a minha config do 0 era muito grande, até
|
||||
que bem, vamos dizer que o hiperfoco atacou e eu refiz a minha
|
||||
configuração de qualquer jeito.
|
||||
|
||||
A maior diferença é que eu já tenho alguma experiência no assunto,
|
||||
então não tive muita dificuldade em fazer essa nova config. Posso
|
||||
inclusive dizer que esta é, até o momento, a melhor configuração que eu
|
||||
já fiz até agora.
|
||||
|
||||
* Org-mode, o criador de sites mais prático que conheço
|
||||
|
||||
Apesar de ter usado diversos SSG's nos últimos tempos, nenhum deles
|
||||
possui a praticidade de simplesmente gerar uma página HTML a partir de
|
||||
um buffer que esteja aberto no seu editor com a mesma facilidade que o
|
||||
Emacs junto do Org-mode conseguem ter.
|
||||
|
||||
Esse site inteiro foi refeito utilizando essa ferramenta de gereção de
|
||||
sites nativa do Emacs.
|
||||
|
||||
* Zero JavaScript
|
||||
|
||||
Mais uma vez, estou com 0 JS presente neste site, o que por si só já é
|
||||
uma conquista e tanto, afinal, quanto menos JS, melhor.
|
||||
|
||||
E não é porque eu não tenho JS que eu perco coisas como
|
||||
/Table-of-contents/ ou /Syntax-highlighting/, nada disso, ambos são
|
||||
coisas nativas do org-mode, feitos para serem utilizados e abusados.
|
||||
|
||||
Ele também é o melhor highlighter que eu já usei, porque literalmente
|
||||
qualquer coisa que eu tenha um syntax highlight no Emacs fica com o
|
||||
mesmo syntax-highlight no site gerado.
|
||||
|
||||
* Quase um SSG... Quase.
|
||||
|
||||
Apesar de tudo, o org-mode não vem com um SSG, essa função na
|
||||
realidade é uma ferramenta de publicação de artigos, tanto que o nome
|
||||
do pacote é ox-*publish*. Ainda assim, com um script simples e um
|
||||
pouco de elisp, você consegue ter um pouco do que um SSG consegue te
|
||||
oferecer.
|
||||
|
||||
E quando eu falo um pouco, eu não tô de sacanagem, isso é tudo o que
|
||||
eu preciso para ter meu site na forma em que eu quero:
|
||||
|
||||
/Configurando o ox-publish e automatizando o processo de criação de HTML./
|
||||
#+begin_src emacs-lisp
|
||||
(require 'ox-publish)
|
||||
(require 'package)
|
||||
(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/"))
|
||||
(package-initialize)
|
||||
(unless (package-installed-p 'use-package)
|
||||
(package-refresh-contents)
|
||||
(package-install 'use-package))
|
||||
(eval-when-compile
|
||||
(require 'use-package))
|
||||
(use-package htmlize
|
||||
:ensure t)
|
||||
(use-package kanagawa-themes
|
||||
:ensure t
|
||||
:init (load-theme 'kanagawa-wave t))
|
||||
(require 'htmlize)
|
||||
(setq org-html-head "<link rel=stylesheet href=\"/assets/css/styles.css\" />"
|
||||
org-html-head-include-default-style nil
|
||||
org-html-head-include-scripts nil
|
||||
org-html-preamble nil
|
||||
org-html-postamble nil
|
||||
org-html-use-infojs nil)
|
||||
(setq org-publish-project-alist
|
||||
(list
|
||||
(list "Tukain's Blog"
|
||||
:base-directory "./content"
|
||||
:recursive t
|
||||
:htmlized-source t
|
||||
:publishing-directory "./public"
|
||||
:section-numbers nil
|
||||
:publishing-function 'org-html-publish-to-html)))
|
||||
(org-publish-all t)
|
||||
(message "Site gerado!")
|
||||
#+end_src
|
||||
|
||||
/Um script para executar os comandos necessários para gerar o site/
|
||||
#+begin_src bash
|
||||
#!/bin/sh
|
||||
|
||||
mkdir -p public && emacs -x build.el && cp -r assets/ public/
|
||||
#+end_src
|
||||
|
||||
Depois disso, o único trabalho que eu tenho é de fazer um artigo e
|
||||
listá-lo na minha homepage, e pronto!
|
||||
|
||||
* Outras coisas que estão no meu Emacs
|
||||
|
||||
É mais que claro que o Emacs é conhecido por seus usuários que, em boa
|
||||
parte dos casos, transformam o Emacs em um sistema operacional praticamente. E
|
||||
eu não sou muito diferente deles 🤓.
|
||||
|
||||
Atualmente eu já configurei o Emacs o suficiente para substituir a minha
|
||||
configuração do Neovim, e também configurei coisas como:
|
||||
|
||||
- Um servidor HTTP (para visualizar o meu site localmente)
|
||||
- Um agente PGP (EasyPG).
|
||||
- Um cliente de email (Gnus)
|
||||
- Uma interface para o Git (Magit)
|
||||
- Um leitor de feeds RSS (Elfeed)
|
||||
|
||||
Também estou vendo como configurar um cliente Jabber (XMPP) e vou configurar
|
||||
o Erc (o cliente IRC nativo do Emacs). Há também outras coisas que eu quero
|
||||
fazer, mas não acho que seja necessário falar sobre elas, afinal já estou
|
||||
tagarelando demais.
|
||||
|
||||
* Aos poucos, estou deixando o meu setup ser apenas um ambiente onde eu possa usar o Emacs
|
||||
|
||||
Eu ainda não iniciei o meu arco Uchirra da vida e saí eliminando meus programas,
|
||||
ainda.
|
||||
|
||||
Eu já tenho em mente o que eu quero fazer e como eu vou fazer para conseguir
|
||||
transformar o meu setup atual em algo que serve apenas para acomodar o
|
||||
Emacs. Alguns programas que eu posso remover, por exemplo, são o Lazygit (Porque
|
||||
eu já tenho o Magit) e o lf (Porque o Emacs vem com o Dired).
|
||||
|
||||
Mas vou deixar para fazer isso outra hora, afinal de contas isso vai tomar um
|
||||
pouco do meu tempo para poder concluir.
|
||||
|
||||
* /Fin/
|
||||
|
||||
Enfim, acho que já é hora de eu para de ficar tagarelando.
|
||||
|
||||
Te vejo no próximo post!
|
|
@ -1,53 +0,0 @@
|
|||
#+TITLE: Hare
|
||||
|
||||
Eu sei que isso soa contraditório depois de ter feito um post sobre a Go,
|
||||
mas a realidade é que eu não quero aprender a programar com a Go,
|
||||
eu quero aprender a programar com uma linguagem low-level,
|
||||
tipo a C (que eu também estou estudando), e é aí que a Hare entra.
|
||||
|
||||
* Praticamente C, mas com diversas melhorias
|
||||
|
||||
A Hare é uma linguagem da família das linguagens C-like,
|
||||
e a sua sintaxe deixa isso bem explícito, porém, ela tem algumas das
|
||||
inovações das últimas décadas consigo e também se inspira na sintaxe
|
||||
de outras linguagens, como a Rust. Porém, diferente de Rust, você não
|
||||
vai ter que esperar por minutos ou horas para o compilador terminar o
|
||||
serviço, nem quebrar a cabeça com o seu código para que ele seja
|
||||
"memory safe", ela não tem garbage collectors nem nada desse tipo,
|
||||
é como eu disse, ela é praticamente C. Contudo, ela não é uma
|
||||
linguagem com as mesmas limitações ou problemas que C possui,
|
||||
e além disso ela tem uma sintaxe que, para mim, não só é mais clara,
|
||||
como mais fácil de entender o que está acontecendo. Claramente isso é
|
||||
apenas algo que depende da minha experiência, mas até mesmo a
|
||||
minha namorada conseguiu entender como um Struct estava sendo usado
|
||||
em um dos exemplos que eu escrevi em Hare, enquanto isso, o mesmo
|
||||
exemplo em C foi... Confuso para dizer no mínimo.
|
||||
|
||||
* QBE como backend
|
||||
|
||||
O compilador da Hare usa o QBE Backend, o que torna o compilador dela
|
||||
extremamente rápido e leve, e também facilita o processo de criar ports do
|
||||
compilador para outras arquiteturas. Eu não irei entrar muito em detalhes sobre
|
||||
o que é um Compiler Backend, mas devo parafrasear algo vindo do próprio site do
|
||||
QBE:
|
||||
|
||||
#+begin_quote
|
||||
QBE é um backend para compiladores, com o foco de providenciar 70% da
|
||||
performance de compiladores otimizados da indústria com 10% do código.
|
||||
#+end_quote
|
||||
|
||||
De certa forma, o QBE se encaixa até mesmo na filosofia suckless, o que para mim
|
||||
pelo menos, é um grande ponto possitivo.
|
||||
|
||||
* O que eu planejo fazer aprendendo a programar?
|
||||
|
||||
Atualmente, eu vejo a programação como um hobbie para mim, um hobbie que eu
|
||||
gosto e muito, mas isso não me impede de colocar essa habilidade no meu
|
||||
currículo, um dia isso pode vir a ser extremamente útil. Por enquanto eu estou
|
||||
aprendendo o básico, recém fiz o meu primeiro Struct, ainda falta muito para eu
|
||||
dizer que eu sei fazer alguma coisa, quanto mais dizer que eu sei programar. Mas
|
||||
isso só depende do meu esforço, então irei correr atrás.
|
||||
|
||||
* /Fin/
|
||||
|
||||
Enfim, é isso, até o próximo post!
|
|
@ -1,79 +0,0 @@
|
|||
#+TITLE: Tô usando o Proton
|
||||
|
||||
Depois de aproximadamente 1 ano, eu criei uma nova conta no [[https://proton.me][Proton]].
|
||||
Um serviço de e-mail/calendário online/VPN/cloud storage/gerenciador
|
||||
de senhas/carteira de bitcoin, enfim, um serviço que foca em prover
|
||||
basicamente as ferramentas que comumemte utilizamos com mais frequência
|
||||
do Google (Gmail, Google Calendar, Google Drive, Google Passwords) com
|
||||
aquela pitada de privacidade que só a mão do Shaquille O'Neal
|
||||
consegue fazer.
|
||||
|
||||
* Por que?
|
||||
|
||||
Nas últimas semanas eu comecei a voltar ao meu antigo estilo de vida
|
||||
sem o Google, o fato de eu ter conseguido um emprego foi um
|
||||
facilitador nesse aspecto. No dia do aniversário do meu irmão, eu
|
||||
troquei de celular com ele, dando o meu Poco M4 Pro para ele e ficando
|
||||
com o Moto G52 dele.
|
||||
|
||||
Essa não foi a primeira vez que a gente fez isso, na verdade na
|
||||
primeira vez que fiz isso com ele foi porque o Moto G52 possui uma
|
||||
ROM oficial da LineageOS disponível, e digamos que quando eu
|
||||
descobri isso eu tive uma [[https://i.pinimg.com/736x/87/07/97/8707972a759975b07d188308c948cc27.jpg][ativação neural]] e no mesmo dia a gente fez
|
||||
essa troca. E claro, eu coloquei a Lineage no G52.
|
||||
|
||||
Enfim, vou cortar um pouco da história e pular para o presente.
|
||||
Depois que eu fiquei com o G52 com a Lineage instalada novamente,
|
||||
eu comecei a fazer uma especie de "detox digital", mas eu não estava
|
||||
deletando contas, eu estava desvinculando o Google delas. Porém, uma
|
||||
coisa que estava sendo uma pedra no meu caminho era o Gmail, e bem, eu
|
||||
tenho e-mails alternativos, mas os servidores deles são lentos o
|
||||
suficiente para que eu basicamente só leia um e-mail 1 hora depois
|
||||
que eu "recebi" ele.
|
||||
|
||||
Tendo isso em mente, eu criei uma nova conta no Proton, que dentre
|
||||
várias coisas, também me dá acesso a 10 e-mail aliases. O que me
|
||||
permite remover o Gmail da jogada, e mesmo as coisas que não estão
|
||||
(ainda) usando aliases não ficam presas no limbo, já que o Proton me
|
||||
permite receber os e-mails do Gmail, no Proton, ou seja, eu não
|
||||
preciso nem mesmo abrir o Gmail para ler os e-mails que chegam por lá.
|
||||
|
||||
* Mudanças no armazenamento
|
||||
Ano passado, quando eu tinha uma conta no Proton, o armazenamento era
|
||||
bem limitado, somente 1Gb (depois de fazer uma configuração na conta,
|
||||
o padrão era 512Mb) era disponível. Esses 1Gb eram compartilhado entre
|
||||
o serviço de e-mail/calendário e o de cloud storage. Não sei se já
|
||||
ficou claro, mas 1Gb não é lá muita coisa para um serviço de cloud
|
||||
storage, muito menos quando isso é compartilhado com outros serviços.
|
||||
|
||||
Mas, com a nova conta que criei ainda hoje, eu reparei que no serviço
|
||||
de e-mail o armazenamento continua sendo de 1Gb, porém o serviço de
|
||||
cloud storage se inicia com 3Gb! Podendo ser aumentado para 5Gb depois
|
||||
de seguir um passo a passo de configuração!
|
||||
|
||||
Isso é algo que eu simplesmente não tava esperando, mas é uma mudança
|
||||
mais que bem vinda, porque eu posso mover os arquivos que eu tinha no
|
||||
Google Drive para cá com muito mais folga.
|
||||
|
||||
* Uma senha praticamente impossível de digitar para a minha conta do Google
|
||||
|
||||
Eu também estou dificultando ao máximo o meu login do Google,
|
||||
praticamente tornando impossível que eu faça login sem utilizar o
|
||||
KeePass, o que por sua vez, faz com que eu deixe de utilizar um
|
||||
sistema que não seja uma distro linux, no caso do meu pc, ou a
|
||||
LinageOS, no meu celular.
|
||||
|
||||
O KeePassXC havia lançado a +/- 2 meses atrás uma função que te
|
||||
permite criar passkeys utilizando o próprio KeePassXC, o que elimina a
|
||||
necessidade de um celular com a Google impregnada ou um iPhone. Óbviamente eu já passei a limpa em todas as contas que eu usava uma passkey da Google e gerei novas usando o KeePassXC.
|
||||
|
||||
Tudo isso me deixa cada vez menos dependente do Google, o que é algo
|
||||
que sinceramente qualquer pessoa deveria tentar fazer. Não só com o
|
||||
Google, mas com basicamente qualquer uma dessas empresas que até um
|
||||
idoso de 90 anos reconhece de tão popular.
|
||||
|
||||
* /Fin/
|
||||
|
||||
Enfim, acho que já tagarelei demais.
|
||||
|
||||
Até o próximo post!
|
|
@ -1,62 +0,0 @@
|
|||
#+TITLE: Raylib.ha
|
||||
|
||||
Nos últimos dias eu ando trabalhando em um pequeno projeto, esse sendo
|
||||
algo que estou fazendo como uma forma de aprendizado. O nome que dei a
|
||||
esse projeto é raylib.ha.
|
||||
|
||||
A minha inspiração foi uma live de um streamer que eu acompanho, o
|
||||
Tsoding. A live em questão é uma em que ele explora a Harelang pela
|
||||
primeira vez, ao decorrer da live, ele se questiona se ele poderia
|
||||
usar a raylib com a Hare. Depois de alguns minutos explorando, ele
|
||||
descobre como ele pode fazer isso, e parte em direção para criar uma
|
||||
janela com um quadrado vermelho que pode se movimentar na janela com
|
||||
as teclas W/A/S/D.
|
||||
|
||||
* Do que se trata
|
||||
|
||||
Bem, antes de falar sobre o meu projeto, acho melhor esclarecer a
|
||||
aqueles que não conhece a raylib o que ela é. A raylib, como o nome já
|
||||
pode soar, é uma biblioteca que serve para a criação de jogos em C sem
|
||||
muita dor de cabeça.
|
||||
|
||||
|
||||
E o meu projeto se trata de algo cujo o objetivo é criar bindings que
|
||||
permitam o uso da raylib por meio da Harelang.
|
||||
|
||||
* Meus objetivos
|
||||
|
||||
Quero que, ao finalizar o projeto, seja possível criar jogos usando a
|
||||
raylib com a mesma facilidade, se não até mais, do que quando sendo
|
||||
feito usando C. Por enquanto estou focando nas partes necessárias para
|
||||
fazer um jogo 2D, seja esse jogo um plataformer, seja ele
|
||||
arena-shooter top-down.
|
||||
|
||||
Claro que isso implica também a necessidade de fazer bindings para a
|
||||
raymath, já que um jogo, por mais simples que seja, também precisa ter
|
||||
física. E eu vou sim fazer isso, só não agora. Ainda assim, não vai
|
||||
demorar muito para eu começar a fazer as bindings da raymath.
|
||||
|
||||
* Meu progresso até agora
|
||||
|
||||
Ainda me considero um iniciante, e falta muito para conseguir fazer
|
||||
todas as bindings para jogos 2D, quem dirá para todo o resto. Porém,
|
||||
já consegui finalizar coisas como o input via gamepads, teclado e
|
||||
mouse, praticamente todas as formas geométricas com a excessão de
|
||||
apenas 3, funções de timing, enfim, tive um avanço significativo.
|
||||
|
||||
Além da tradução direta das funções feitas em C, eu também fiz algumas
|
||||
adaptações para que não ouvesse atrito/diferença na forma em que você
|
||||
usa algumas funções. Também adicionei um método alternativo para a
|
||||
criação de triângulos.
|
||||
|
||||
A última coisa que realizei até o momento foi o suporte a músicas, e
|
||||
irei adicionar as demais funções relacionadas a áudio ainda nessa
|
||||
semana. Essa última função foi também fruto de uma intuição sobre como
|
||||
poder utilizar structs definidos fora da raylib.ha, e pode ter certeza
|
||||
de que foi gratificante saber que deu certo.
|
||||
|
||||
* /Fin/
|
||||
|
||||
Bem, isso é tudo o que eu tenho a comentar por agora.
|
||||
|
||||
Até o próximo post!
|
|
@ -1,86 +0,0 @@
|
|||
#+TITLE: Deixando a Hare de lado... Por enquanto.
|
||||
|
||||
|
||||
|
||||
Irei começar me explicando o porquê de eu ter decidido isso de forma
|
||||
tão repentina. Bom, se você leu o meu último artigo, então sabe que eu
|
||||
ando estudando 2 linguagens de programação: C e Hare. Apesar de ter
|
||||
gostado e muito de estudar as duas línguas em conjunto, eu tenho que
|
||||
encarar um fato: eu não sei programar.
|
||||
|
||||
* Quer dizer então que vou desistir?
|
||||
|
||||
Nada disso. Irei continuar meus estudos, porém, apenas usando uma
|
||||
língua, a C. O motivo disso é uma consequência de não saber
|
||||
programação no geral, há coisas que eu preciso de uma documentação
|
||||
detalhada ou até mesmo uma explicação em si, mas a Hare não está
|
||||
pronta, muito menos a sua documentação, sem se falar que ela é
|
||||
qualquer coisa, menos popular. A consequência disso é que se eu estou
|
||||
em dúvida sobre algo que eu quero fazer, eu não vou achar no Google, e
|
||||
tem uma boa chance de não achar na documentação também.
|
||||
|
||||
|
||||
Por isso irei continuar apenas com a C, ela é uma linguagem que é
|
||||
extremamente popular e utilizada até hoje, não falta nenhuma
|
||||
documentação/explicação sobre algo, e é uma linguagem que já está
|
||||
terminada.
|
||||
|
||||
|
||||
* Ainda assim irei sentir saudades da Hare.
|
||||
|
||||
Apesar de ter essa “deficiência” em relação a documentação, a Hare é
|
||||
uma linguagem muito boa, mesmo em seus estágios iniciais. O único erro
|
||||
foi eu querer aprender a programar com uma linguagem que não está
|
||||
pronta ainda.
|
||||
|
||||
|
||||
O maior problema de tentar fazer o que eu fiz é que você não tem a
|
||||
quem, ou o que recorrer. Você está por conta própria. Sendo assim, a
|
||||
Hare é uma linguagem que eu recomendaria apenas para as pessoas que já
|
||||
são programadores, principalmente as que tem certa familiaridade com
|
||||
C.
|
||||
|
||||
|
||||
* C também não é muito amigável, mas estou acostumado.
|
||||
|
||||
Você poderia até mesmo achar que eu querer aprender a programar com C
|
||||
seria outra ideia ruim, mas eu acho que (para o meu caso) essa é uma
|
||||
ideia boa.
|
||||
|
||||
|
||||
C é famosa por ser uma linguagem “difícil”, “insegura”, “limitada” e
|
||||
até mesmo “defasada”. A verdade é que certas coisas realmente estão
|
||||
corretas em relação a C, já que ela foi criada a quase 60 anos atrás,
|
||||
mas isso não quer dizer que ela é uma linguagem que não se deve
|
||||
aprender.
|
||||
|
||||
|
||||
E até mesmo por ela ser “limitada” acaba tornando-a uma boa língua
|
||||
para aprender a programar. Ela é uma linguagem simples, com pouca
|
||||
coisa, mas com o suficiente para você conseguir fazer programas sem
|
||||
nenhuma dificuldade. E também, funciona em qualquer coisa que tenha um
|
||||
processador.
|
||||
|
||||
|
||||
* Eu penso um pouco com a lógica de C.
|
||||
|
||||
Posso estar me expressando mal ao dizer isso, mas eu tenho uma linha
|
||||
de raciocício que segue +/- a forma em que você faz algo em C. Por
|
||||
isso até que eu tive certa facilidade com a Hare e Go.
|
||||
|
||||
|
||||
Um dos prováveis motivos de eu ter essa linha de raciocício pode ter
|
||||
sido o período em que eu utilizava softwares da suckless. Todos eles
|
||||
são feitos em C puro, e eu costumava aplicar muitos patches, por
|
||||
consequência, tive o hábito de consertar inconsistências e de corrigir
|
||||
erros na aplicação de patches.
|
||||
|
||||
|
||||
Por conta disso, memorizei muitas das palavras-chave de C e também um
|
||||
pouco de como um programa feito em C é estruturado.
|
||||
|
||||
* /Fin/
|
||||
|
||||
Hoje isso é tudo o que eu tenho a dizer.
|
||||
|
||||
Até o próximo post!
|
|
@ -1,49 +0,0 @@
|
|||
#+TITLE: Vi, só que dentro do Emacs!
|
||||
|
||||
Esse mostro de um programa é tão cheio de coisa para se falar que já garantiu até uma trilogia nesse blog.
|
||||
|
||||
* Viper
|
||||
|
||||
A um pouco mais de 3 horas atrás, enquanto eu ainda estava no meu trabalho, eu fiquei pesquisando um pouco sobre o Emacs, e eu acabei achando o diretório de manuais de referência dele. Dois deles me chamaram (e muito) a minha atenção, os manuais de referência do vip-mode e do =viper-mode=.
|
||||
|
||||
Obviamente que quando eu vi esses manuais eu cliquei neles para ver do que eles se tratavam, e bom, eles são modos que emulam os controles do VI, o editor de texto modal que vem com qualquer sistema Unix e que foi dele que surgiu o Vim (VI iMproved).
|
||||
|
||||
Eu decidi usar o =viper= no lugar do vip só porque ele aparenta ser uma opção mais completa em comparação. Ele chega no nível de até mesmo ter um mini-tutorial e um wizard perguntando qual o seu nível de expertise com ele.
|
||||
|
||||
* Bem, e como é usar ele?
|
||||
|
||||
Como já disse, o =viper= emula o VI e não o Vim (isso é o que o evil-mode faz), sendo assim ele não tem as mesmas teclas/comandos que o Vim possui. Porém, você ainda pode usar as teclas do Emacs em conjunto com as teclas do VI, o que mais que compensa, *na minha opinião*, a falta das teclas do Vim.
|
||||
|
||||
Só de ter uma parte das teclas que são usadas no Vim já torna a minha experiência muito melhor. Afinal, apesar do Emacs ser um programa que é ótimo em diversos aspectos, as teclas de atalho dele não são particularmente um ponto positivo dele.
|
||||
|
||||
E é claro que como tudo no Emacs, eu posso customizar o =viper= e adicionar os comandos que eu acho extremamente úteis do Vim, no =viper=, criando assim um Frankenstein que nunca deveria ter nascido.
|
||||
|
||||
A minha configuração dele, inclusive, está bem modesta, com poucas linhas de código, mas já são o suficiente para deixar o meu uso do Emacs 10 vezes mais aconchegante.
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(setq viper-mode t)
|
||||
(require 'viper)
|
||||
(setq viper-inhibit-startup-message 't)
|
||||
(setq viper-expert-level '5)
|
||||
(setq viper-want-ctl-h-help t)
|
||||
(setq viper-ex-style-editing nil)
|
||||
(setq viper-no-multiple-ESC nil)
|
||||
(setq viper-syntax-preference 'extended)
|
||||
(setq viper-vi-style-in-minibuffer nil)
|
||||
(define-key viper-vi-basic-map (kbd "v") 'set-mark-command)
|
||||
(define-key viper-vi-basic-map (kbd "f") 'find-file)
|
||||
(define-key viper-vi-basic-map (kbd "R") 'replace-rectangle)
|
||||
(define-key viper-vi-basic-map (kbd "C-v") 'rectangle-mark-mode)
|
||||
(define-key viper-vi-basic-map (kbd "x") 'kill-region)
|
||||
(viper-mode)
|
||||
#+end_src
|
||||
|
||||
Como eu disse, ainda está bem modesta. Apesar de que só tacar um bloco de código do nada não explica direito o que está acontecendo, Elisp é uma linguagem bem simples de entender, então eu acho que não vai ser tão problemático assim.
|
||||
|
||||
Mas, basicamente eu só ativei o =viper-mode= e configurei 5 teclas de atalho que "emulam" algumas teclas que eu uso no Neovim. Não são completamente idênticas, mas já dão conta do recado.
|
||||
|
||||
* /Fin/
|
||||
|
||||
Bom, é isso, acho que por agora eu não tenho mais o que falar sobre esse lindo programa chamado Emacs.
|
||||
|
||||
Até o próximo post!
|
3
pages/footer.html
Normal file
3
pages/footer.html
Normal file
|
@ -0,0 +1,3 @@
|
|||
</article>
|
||||
</body>
|
||||
<footer><p>Made with <a href="https://codeberg.org/tukain/blog.sh">blog.sh</a></p></footer>
|
13
pages/head.html
Normal file
13
pages/head.html
Normal file
|
@ -0,0 +1,13 @@
|
|||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<meta http-equiv="Content-Language" content="pt_br" />
|
||||
<meta name="generator" content="blog.sh" />
|
||||
<meta name="author" content="Tukain" />
|
||||
<meta name="description" content="<h2>Bem-vindo ao meu blog!</h2><p>Aqui é um lugar onde eu gosto de comentar sobre assuntos envolvendo o meu cotidiano nesse vasto mundo chamado internet. E também sobre alguns assuntos que eu achar relevante o suficiente para comentar.</p>" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="icon" href="/assets/fav.webp" type="image/webp" />
|
||||
<link href="/assets/styles.css" rel="stylesheet">
|
||||
<title>Tukain's Blog</title>
|
||||
</head>
|
||||
<body>
|
||||
<article>
|
Loading…
Reference in a new issue