Add social page with archived mastodon posts, move source to /site

This commit is contained in:
天クマ 2026-07-04 16:57:55 -03:00
commit 648869bf76
40 changed files with 58 additions and 2 deletions

View file

@ -0,0 +1,131 @@
---
pageTitle: "Demonstração da API do Prof. Rodrigo Ribeiro"
---
<style>
#mainAPI, #login {
display: none;
}
#mainAPI.selected, #login.selected {
display: flex;
}
</style>
<div style="display: flex; gap: 1em; flex-direction: column;">
<h1>{{pageTitle}}</h1>
<p>A API do Prof. Rodrigo Ribeiro permite que o <i>client</i> envie uma imagem, assim retornando o resultado de uma leitura óptica realizada sobre a mesma com inteligência artificial. Esse client lê o resultado e o mostra de forma simples para o usuário.</p>
<p><a href="https://api.rodrigoribeiro.net/doc">Mais informações sobre a API podem ser encontradas no seu website.</a></p>
<div id="token">Token: Ausente</div>
<div id="login" class="selected" style="flex-direction: column; gap: .6em;">
<input type="text" id="username" placeholder="E-mail">
<input type="password" id="password" placeholder="Senha">
<div>
<button id="submit">Logar</button>
<button id="submitb">Criar Usuário</button>
</div>
</div>
<div id="mainAPI" style="flex-direction: column; gap: 1em;">
<div style="display: flex; flex-direction: column; gap: .6em;">
<input type="file" id="file">
<div>
<button id="submitImage">Enviar imagem.</button>
<button id="logout">Deletar token</button>
</div>
</div>
<div id="imageResults">
<p>Resultados da leitura óptica:</p>
</div>
</div>
</div>
<script>
const usernameInput = document.getElementById('username');
const passwordInput = document.getElementById('password');
const tokenLabel = document.getElementById('token');
const submitButton = document.getElementById('submit');
const cuButton = document.getElementById('submitb');
const fileEl = document.getElementById('file');
const submitImageButton = document.getElementById('submitImage');
const imageResults = document.getElementById("imageResults");
const loginDiv = document.getElementById("login");
const apiDiv = document.getElementById("mainAPI");
const logoutButton = document.getElementById("logout");
let token = '';
async function api(endpoint, data) {
const info = {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
},
body: JSON.stringify(data),
}
let res = await fetch(`https://api.rodrigoribeiro.net/${endpoint}`, info);
res = await res.json()
console.log(res)
return res;
}
function login(username, password, createAccount = false) {
return api(createAccount ? "registrar" : "login", { email: username, senha: password });
}
submitButton.addEventListener('click', async () => {
if (!usernameInput.value && !passwordInput.value) {
alert("Preencha os campos necessários.")
return;
}
res = await login(usernameInput.value, passwordInput.value);
const is_logged = (res.status_code == 200);
if (is_logged) {
token = res.response.token;
toggleDivsVisibility();
}
tokenLabel.innerHTML = `Token: ${is_logged ? 'Presente' : 'Ausente (erro de autenticação)'}`;
})
cuButton.addEventListener('click', async () => {
if (!usernameInput.value && !passwordInput.value) {
alert("Preencha os campos necessários.")
return;
}
res = await login(usernameInput.value, passwordInput.value, true);
const is_logged = (res.status_code == 201);
tokenLabel.innerHTML = `Token: ${is_logged ? 'Ausente (conta criada e pronta para logar)' : 'Ausente (erro ao criar usuário)'}`;
})
submitImageButton.addEventListener('click', async () => {
const file = fileEl.files[0];
if (!file) return;
const fr = new FileReader();
fr.onload = async () => {
const dataUrl = fr.result;
const base64 = dataUrl.split(',')[1];
const res = await api('detectar', {
"image": base64,
"preview": true
})
imageResults.innerHTML = "";
res.response.objects.forEach(object => {
let resultsEntry = document.createElement("p");
resultsEntry.innerHTML = `<i>${object.class}</i> detectado com confiança de ${object.score * 100}%`
imageResults.appendChild(resultsEntry);
});
};
fr.readAsDataURL(file);
});
logout.addEventListener('click', () => {
token = "";
toggleDivsVisibility();
tokenLabel.innerText = "Token: Ausente"
})
function toggleDivsVisibility() {
apiDiv.classList.toggle('selected');
loginDiv.classList.toggle('selected');
}
</script>

View file

@ -0,0 +1,88 @@
---
postTitle: "Guia para novatos no IFC."
langKey: pt
layout: post.njk
date: 2026-01-13
background: ifc.jpg
backgroundOpacity: .35
title: Adrian Victor:Escola
---
<style>
.screenshotBox img {
margin: auto;
max-width: 80%;
box-shadow:
2px 7px 5px rgba(0,0,0,0.4),
0px -4px 10px rgba(0,0,0,0.4);
border: medium solid white
}
.screenshotBox {
display: flex;
flex-direction: column;
gap: 1em;
margin: 2em 0;
}
.screenshotBox p {
text-align: center;
}
</style>
<p>Antes de tudo, quero dar boas vindas a qualquer novato que esteja lendo esse documento, o IF é uma grande oportunidade que felizmente você não deixou passar! Não vou me extender muito nesse tópico pois tenho certeza que vocês vão ouvir depoimentos de ex-alunos bem-sucedidos ao longo do período letivo.</p>
<p>Estou organizando esse documento para evitar que os veteranos tenham que explicar tudo para cada novato que apresentar a mesma dúvida, centralizando o conteúdo para facilitar quando você dá aquela esquecida sobre como algo funciona. Ao mesmo tempo, não quero que ele substitua o contato que você poderia ter com um veterano, não deixe de conversar e fazer novas amizades!</p>
<p>Para correções ou dúvidas que não sanei aqui, você pode me mandar um e-mail (adrianvictor@disroot.org) ou me contactar por qualquer outro lugar que você conseguir, vou corrigir/adicionar o mais rápido possível. Caso algum veterano se interesse em escrever algo para complementar essa postagem, fico feliz em adicionar seu texto ou link aqui.</p>
<h2>O SIGAA</h2>
<p>SIGAA (Sistema Integrado Para Ferrar com os Alunos) vai ser o lugar onde você vê as suas notas, frequências, aplica para auxílios e entrega trabalhos caso você encontre um professor que ainda tem sanidade pra usar essa coisa além do que se faz obrigatório.</p>
<p>Ofensas à parte, vamos dar uma olhada nas partes importantes do sistema.</p>
<h3>Login e cadastro</h3>
<div class="screenshotBox">
<img class="screenshotImg" src="/static/images/sigaa-login.png" alt="">
<p>1 - Tela de login do SIGAA.</p>
</div>
<p>Após acessar o site do SIGAA, você deve ver a tela de login mostrada na imagem. Antes de tudo, verifique se você está no SIGAA dos alunos.<sup>(1.1)</sup></p>
<p>Caso você tenha um login, o acesso é bem simples, apenas preencha os campos de usuário e senha<sup>(1.2)</sup> e confirme. O login expira em 1 minuto de inatividade.</p>
<p>No caso de você não possuir um cadastro, use o link abaixo da tela de login<sup>(1.3)</sup> para abrir o formulário de cadastro.</p>
<h3>Tela Principal</h3>
<div class="screenshotBox">
<img src="/static/images/sigaa-inicio.png" alt="">
<p>2 - Tela inicial do SIGAA</p>
</div>
<p>A tela principal do SIGAA é uma bagunça, mas você não vai usar nem metade do que tem nela, por isso vamos dar uma olhada somente nas funcionalidades principais dela.</p>
<p>No cabeçalho<sup>(2.1)</sup> você tem acesso a coisas como boletim, atestado de frequência, etc... Também é o lugar que você gerencia seus auxílios.</p>
<p>É possível gerenciar seu perfil público e dados na barra lateral<sup>(2.2)</sup>, assim como acessar alguns links úteis (como o da biblioteca digital). O seu perfil fica visível em postagens e respostas enviadas no forum do SIGAA.<sup>(2.6)</sup> Por algum motivo, minha foto de perfil some toda hora, já não me dou mais o trabalho de colocar de volta.</p>
<p>Não cadastre um e-mail que você usa com frequência no SIGAA, pois ele vai entupir sua caixa de entrada com SPAM. E os e-mails que seriam úteis chegam tão tarde que perdem a utilidade (já recebemos e-mail sobre cancelamento de aulas com um mês de atraso). Se você quiser manter seu e-mail pessoal no SIGAA, já que eles realmente mandam alguma coisa importante uma vez ou outra por ano, configure um filtro para o endereço do IF (ifc.edu.br) que joga todos os e-mails do SIGAA para uma caixa diferente no seu e-mail.</p>
<p>Continuando, chegamos na lista de matérias do seu ano letivo<sup>(2.5)</sup>, você vai usar ela para acessar a <a href="#página-da-matéria">página da matéria.</a></p>
<p>E por fim, temos o forum<sup>(2.6)</sup>, que eu incluí por dó, pois ninguém nunca usa ele. Em teoria ele serve para alunos tirarem suas dúvidas e/ou buscarem ajuda sobre algum tópico relevante do curso, mas acabou que ele virou uma bagunça empoierada que quase não tem atividade nenhuma.</p>
<h3>Página da Matéria</h3>
<div class="screenshotBox">
<img src="/static/images/sigaa-materia.png" alt="">
<p>3 - Página da matéria no SIGAA</p>
</div>
<p>Essa é, provavelmente, a página que você mais vai usar do SIGAA, ela mostra todas as atividades do ano na lista principal<sup>(3.2)</sup>. Essa lista vai ficando mais bagunçada ao decorrer do ano, ela mostra as atividades das mais antigas para as mais novas, portanto quando o ano passar e o(a) professor(a) adicionar muitas atividades, você vai ter que rolar até o final para achar a mais recente. Se o seu professor adicionar atividades futuras na lista, você também terá que procurar a desse dia.</p>
<p>O Menu da Turma Virtual<sup>(3.1)</sup> também é importantíssimo, e dessa vez não tenho muito o que dizer, ele funciona como um menu. Os itens que você mais vai usar são <i>Alunos > Frequência</i> para ver sua frequência nessa matéria e <i>Alunos > Ver notas</i>, que mostra suas notas individuais dessa matéria, até mesmo as que não aparecem no boletim ainda.</p>
<p>Na barra lateral da direita<sup>(3.3)</sup> você encontra o andamento das aulas, que é a quantidade de aulas ministradas em relação ao total. O número de aulas ministradas pode exceder o número de aulas totais, porém as excedentes não vão afetar a sua média de faltas. Também tem algumas outras caixas de notícias, enquetes, atividades, avaliações e forum, mas nenhuma é usada com frequência.</p>
<p>Vale ressaltar que no celular é difícil rolar a página quando você dá zoom, para resolver isso você precisa rolar (arrastar) no Menu da Turma Virtual, porque na lista principal vai rolar apenas a lista de atividades.</p>
<h2>Frequência</h2>
<p>As frequências são contabilizadas pela chamada que os professores fazem no começo da aula. Eventos como a FICE e OLINCAC também contam presença e geralmente um professor fica encarregado de fazer a chamada da manhã, enquanto outro fica na tarde (é bem fácil pegar a chamada da manhã/tarde e ir embora).</p>
<p>O aluno não pode exceder em faltas 25% do total de aulas e o limite por matéria do SIGAA não conta no boletim, portanto se você exceder ele sem ultrapassar o limite total, você ainda passa. As matérias optativas são uma excessão, com essas você precisa tomar cuidado para não atingir o limite de faltas.</p>
<p>Por mais que o limite esteja entorno de 300 faltas, não recomendo que se acostume a faltar, pois temos 9 aulas por dia, ou seja, 9 faltas. Até as faltas em aulas específicas somam rápido.</p>
<h2>Referências</h2>
<ul>
<li><a href="https://desciclopedia.ws/wiki/Cambori%C3%BA#Instituto_CannabialFederal_Catarinense">https://desciclopedia.ws/wiki/Cambori%C3%BA#Instituto_CannabialFederal_Catarinense</a></li>
</ul>

5
site/school/school.json Normal file
View file

@ -0,0 +1,5 @@
{
"layout": "base.njk",
"title": "Adrian Victor:Trabalhos",
"langKey": "pt"
}

102
site/school/telnet-pt.html Normal file
View file

@ -0,0 +1,102 @@
---
postTitle: "Telnet"
layout: post.njk
date: 2025-08-27
background: redes.jpg
authors: Adrian Victor & Arthur Borges
langKey: pt
---
<script src="/static/scripts/telnetSimulator.js" defer></script>
<h2>O que é o protocolo, sua função e histórico</h2>
<p>O Telnet (do inglês <b>TEL</b>ecommunication <b>NET</b>work) é um protocolo de rede da pilha
TCP/IP que permite a comunicação remota entre computadores em modo texto. Sua
função principal é proporcionar uma sessão interativa, em que um usuário pode
acessar e controlar outro dispositivo como se estivesse em um terminal local.</p>
<p>Criado em 1969, o Telnet foi um dos primeiros protocolos desenvolvidos para a
ARPANET (a rede que deu origem à Internet) e tornou-se fundamental para a
administração de sistemas e dispositivos nas décadas de 1970, 1980 e 1990. Com o
tempo, caiu em desuso devido à falta de segurança, sendo substituído por
alternativas mais modernas, como o SSH (Secure Shell).</p>
<h2>Implementação</h2>
<p><b>Porta padrão:</b> 23/TCP.<br>
Funciona na camada de aplicação do modelo OSI.<br>
<b>Formato:</b> Baseado em troca de caracteres ASCII, sem criptografia.<br>
<b>RFC:</b> Definido pela RFC 854 (1983).<br>
<b>Arquitetura:</b> Segue o modelo cliente-servidor</p>
<h2>Funcionamento</h2>
<p>Na prática, o Telnet funciona de maneira relativamente simples. O processo começa
quando o cliente estabelece uma conexão TCP com o servidor por meio da porta 23.
Em seguida, uma sessão de terminal remoto é iniciada e o usuário deve fornecer
suas credenciais, como nome de usuário e senha. Após a autenticação, os
comandos digitados no cliente são transmitidos em texto puro ao servidor, que os
processa e retorna a saída correspondente. A sessão permanece ativa enquanto o
usuário desejar, sendo encerrada normalmente com comandos como <i>exit</i> ou <i>logout</i></p>
<h2>Cenários de uso</h2>
<p>Durante muitos anos, o Telnet foi amplamente utilizado para acesso remoto a
servidores Unix, Linux e Windows, especialmente em versões mais antigas desses
sistemas. Também se tornou bastante comum na administração de dispositivos de
rede, como roteadores e switches, até que o SSH passou a ser adotado como
padrão. Além disso, grandes computadores centrais, conhecidos como mainframes,
e alguns dispositivos legados ainda utilizam Telnet até hoje. Outra aplicação prática
do protocolo está em ambientes educacionais e no diagnóstico de redes, onde é
usado para testar portas abertas e verificar conectividade de serviços, como ao
executar “telnet servidor.com 80” para checar se a porta de um servidor web está em
funcionamento.</p>
<h2>Criptografia: o problema inerente</h2>
<p>O Telnet não possui criptografia nativa, o que o torna extremamente vulnerável. Para
solucionar esse problema, surgiram alternativas mais seguras. A principal delas é o
SSH (Secure Shell), desenvolvido nos anos 1990 como um substituto direto do
Telnet. O SSH oferece as mesmas funcionalidades, mas garante a proteção dos
dados por meio de autenticação forte e criptografia de todo o tráfego. Outra
possibilidade, embora menos comum, é o uso de SSL/TLS para tunelar sessões
Telnet, mas na prática essa abordagem raramente é utilizada.</p>
<h2>Vantagens e desvantagens</h2>
<p>Entre as vantagens do Telnet, destacam-se sua simplicidade, baixo consumo de
recursos e compatibilidade com diferentes sistemas antigos, o que facilitou sua
adoção ao longo dos anos. Contudo, essas qualidades são superadas por suas
desvantagens. A principal é a ausência de criptografia, que expõe todos os dados
transmitidos, incluindo senhas, em texto puro. Isso o torna vulnerável a ataques
como o sniffing, que captura pacotes de rede, e o hijacking, que sequestra sessões
ativas. Por esse motivo, o Telnet é considerado obsoleto e inseguro para uso em
redes abertas, como a própria Internet.</p>
<h2>Relação com outros protocolos</h2>
<p>O Telnet faz parte da família de protocolos da pilha TCP/IP e utiliza o TCP para
garantir a confiabilidade na comunicação. Assim como outros protocolos dessa pilha,
como HTTP, FTP e SMTP, ele se baseia em conexões estáveis para realizar suas
funções, mas seu diferencial sempre foi a interatividade em modo terminal. No
entanto, devido às falhas de segurança, acabou sendo substituído por seu sucessor
natural, o SSH, que manteve a mesma base conceitual do Telnet, mas adicionou
camadas robustas de proteção.</p>
<h2>Exemplo funcional</h2>
<p>Abaixo há um simulador de conexão Telnet feito em JavaScript.</p>
<div id="telnetSimulationLoadingHolder">
<p id="telnetSimulationLoadingText">Loading...</p>
<div class="ellipsis-loader" aria-role="alert" aria-label="Loading. Please wait">
<div class="ellipsis-loader__dot"></div>
<div class="ellipsis-loader__dot"></div>
<div class="ellipsis-loader__dot"></div>
<div class="ellipsis-loader__dot"></div>
</div>
</div>
<div id="telnetSimulation">
<div id="telnetSimulationServer">
<h3>Servidor</h3>
<textarea name="" id="telnetSimulationServerScreen" readonly>Bem vindo ao Zubuntu 30.1!
Rodando script de inicialização: start_telnet_server.sh
Servidor Telnet iniciado em localhost:23
Pronto para receber comandos.
----
</textarea>
<button id="telnetSimulationServerClean">Limpar</button>
</div>
<div id="telnetSimulationClient">
<h3>Cliente</h3>
<textarea name="" id="telnetSimulationClientScreen" readonly>Envie help para ver a lista de comandos suportados pelo servidor!
----
</textarea>
<div id="telnetSimulationInput">
<input type="text" id="telnetSimulationInputBox">
<button id="telnetSimulationClientSend">Enviar</button>
</div>
</div>
</div>