Add social page with archived mastodon posts, move source to /site
This commit is contained in:
parent
a301a5cc5e
commit
648869bf76
40 changed files with 58 additions and 2 deletions
131
site/school/api-rodrigoribeiro.html
Normal file
131
site/school/api-rodrigoribeiro.html
Normal 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>
|
||||
88
site/school/guia-ifc-novatos.html
Normal file
88
site/school/guia-ifc-novatos.html
Normal 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
5
site/school/school.json
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"layout": "base.njk",
|
||||
"title": "Adrian Victor:Trabalhos",
|
||||
"langKey": "pt"
|
||||
}
|
||||
102
site/school/telnet-pt.html
Normal file
102
site/school/telnet-pt.html
Normal 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>
|
||||
Loading…
Reference in a new issue