Postagens

Mostrando postagens de 2022

Postagem em destaque

Assinando arquivos PDF com certificado digital em Go

Imagem
Desenvolver uma solução para assinar PDFs com certificado digital (PFX) em Go se mostrou um desafio considerável, apesar do escopo inicial parecer simples. Após a conclusão, a implementação aparenta ser direta (são apenas 180 linhas), mas o processo exigiu várias iterações e entendimento detalhado sobre as limitações das ferramentas e bibliotecas disponíveis. A primeira abordagem consistiu em tentar, de forma monolítica, ler o PDF, aplicar o carimbo visual e assinar digitalmente em uma única etapa. No entanto, surgiram diversos entraves — em especial, a perda da assinatura digital após a inserção do carimbo, e erros decorrentes da manipulação do documento. Adicionalmente, muitas soluções baseadas em IA indicavam bibliotecas pagas ou APIs externas, ou ainda métodos inexistentes nas bibliotecas, tornando a busca por alternativas viáveis um processo repetitivo e pouco produtivo. O fluxo mais robusto — e funcional — consolidou-se apenas após dividir o processo em etapas claras, conforme ob...

Falha ao acessar a API da Binance

De uns tempos pra cá, meu programa que monitora o preço de ações e criptomoedas (tenho um post sobre isso), passou a receber a mensagem:  "Service unavailable from a restricted location according to 'b. Eligibility' in https://www.binance.com/en/terms. Please contact customer service if you believe you received this message in error."  Depois de muito pesquisar, descobri o problema: meu programa fica hospedado nos EUA, e eu uso o endereço base https://api.binance.com . A solução é bem simples, troque o endereço base por https://api.binance.us . O único porém é que alguns assets não existem no novo endereço. Por exemplo:  https://api.binance.us/api/v3/ticker/24hr?symbol=ETHBRL . Nesse caso, a única solução é trocar o ETHBRL por ETHUSD.

VSCode não roda?

Esses dias fiz uma atualização do VSCode (gosto de manter os softwares atualizados) e ele simplesmente não abriu mais. Clicava no ícone e ele abria e já fechava em seguida. Depois de muita pesquisa, não descobri o problema. Daí comecei a operar em modo desespero: Primeiro, tentei acessar sem nenhum extensão, pois imaginei que poderia ser um problema de compatibilidade de uma extensão com a nova versão do VSCode. Para isso rodei o comando: code --disable-extensions E nada. Ele simplesmente não dava sinal de vida. Em tempo: se precisar desinstalar uma extensão problemática via linha de comando use: code --uninstall-extersion <ext-id> O <ext-id> você consegue com o comando: code --list-extensions Depois, tentei baixar versões mais antigas, mas também não adiantou. https://code.visualstudio.com/updates Nessas horas a experiência conta muito: resolvi renomear o arquivo settings.json, e deu certo. Ele estava corrompido. Daí foi fácil descobrir o problema do arquivo e corrigir. Es...

Paradoxo Final: sem anúncios

Quando comecei o blog, em 2009, nunca pensei em ganhar dinheiro. Mas como alguns posts fizeram sucesso e tive meses que alcancei mais de 34 mil visualizações, o dinheiro começou a entrar. Quer dizer, os trocados, pois em 13 anos ganhei menos de 130 dólares.  De todo modo, em virtude disso, mantive os anúncios. E como somos acomodados por natureza, e mesmo o blog tendo muito menos visualizações, mantive os anúncios. Mas esse final de semana resolvi removê-los, afinal, não escrevo para ganhar dinheiro (até que gostaria, mas não tenho tempo), escrevo porque eu gosto. Então, espero que aproveitem a nova cara do Paradoxo Final.

Como traduzir (legendar) qualquer vídeo do Youtube

Imagem
Às vezes você encontra um vídeo no Youtube com a solução do seu problema, mas ele está em uma língua que você não domina. Normalmente, você olha se tem legenda, e na maioria dos casos ou não tem, ou só tem na própria língua do vídeo Aí você abandona o caso, certo? O que muita gente não sabe é que o próprio Youtube permite você legendar em qualquer língua (que ele tenha disponível).  O segredo é clicar em Legendas primeiro, e depois em Configurações. Assim, aparecerá a opção "Traduzir automaticamente". Ao clicar nessa opção, basta escolher o idioma da tradução. Clique no ícone Legendas e no item de menu Legendas Clique em Traduzir automaticamente Selecione o idioma Voilá! Infelizmente se você fechar o vídeo será preciso executar o processo novamente.

Dicas Go - #1 - Goroutines

Imagem
Já falei um pouco sobre concorrência em Go , mas percebi que não fui muito esclarecedor, por isso vou fazer uma outra abordagem, mais detalhada, sobre esse assunto. O código completo dos programas está no final do texto. Vamos imaginar que você queira fazer um programa que faça acesso à uma API algumas vezes e retorne o resultado como string. Para não tornar o programa muito complexo, utilizei uma pesquisa fake, que simula um retorno e gasta  100 milissegundos. Ao rodar o programa sequencial.go, vemos na tela uma saída como a abaixo: Como esperado, os resultados são listados em ordem, de "golang 0" à "golang 19". E o tempo gasto, pouco mais de 2s, também não é nenhuma surpresa (20 vezes 100 milissegundos mais algum tempo do resto do código). A coisa começa a melhorar quando rodamos o programa concorrente.go. O tempo gasto reduziu de 2s para 100ms. Qual é a mágica? São as goroutines! Se reparar bem, são poucas mudanças em relação ao código original (na verdade, essa ...

Iniciando o Windows Terminal com layout pré-definido (4 janelas)

Imagem
Se você gosta ou precisa usar o Windows Terminal (WT), talvez já tenha sentido a necessidade de abrir várias abas. Mas dependendo do que você faz, várias abas não são assim tão confortáveis para trabalhar, . Por exemplo: você sobe um servidor numa aba e em outro dispara comandos CURL para verificar se sua API está respondendo a contento. Nesse caso, você precisa ficar alternando entre as abas para ver o resultado. E se desse para ver tudo de uma só vez?  O melhor é que dá sim. E é fácil! Basicamente, você chama o executável do WT (wt.exe) passando alguns argumentos. Nesse link , tem uma descrição completa dos argumentos. Uma janela como a de cima, pode ser obtida com o comando: wt.exe -M -d d:\temp ; sp wsl.exe ~ ; mf left ; sp -d d:\dev ; mf right; sp -d d:\bin\monitor Uma breve descrição dos argumentos utilizados acima: -M maximiza a tela -d abre a janela em um determinado diretório sp (split-panel) divide uma janela/painel mf (move-focus) move o foco numa direção (...

Upload com PHP+JQUERY em AJAX e na mesma página

Se você já perdeu horas procurando um código em PHP que funcionasse para fazer o upload de imagens mas que fizesse isso com AJAX e ainda por cima na mesma página, espero que esse post te ajude! Crie uma pasta para armazenar as imagens que aqui chamo de upload. Copie e cole o código abaixo (testado com XAMPP localmente): <?php if(isset($_FILES['file']['name'])){    /* Pega o nome do arquivo*/    $filename = $_FILES['file']['name'];    /* Local onde sera salvo o arquivo*/    $location = "upload/".$filename;    $imageFileType = pathinfo($location,PATHINFO_EXTENSION);    $imageFileType = strtolower($imageFileType);    /* Extensoes validas */    $valid_extensions = array("jpg","jpeg","png");    /* Checa a extensao do arquivo */    if(in_array(strtolower($imageFileType), $valid_extensions)) {       /* Faz o upload */       move_uploaded_file($_FILES['file']['...

O dia que o Australian Crawl chegou à Balneário Camboriú

Imagem
Já falei um pouco do Australian Crawl aqui . O que não contei é que fui um dos primeiros a ouvir a banda em Balneário Camboriú. Como diz o Lito, do Aviões e Músicas: "Senta que lá vem história" (pequena, mas é uma história).  Estamos falando do início dos anos 80, e naquela época para ouvir alguma música nova, era só através de fitas. E eu dia, na casa de um primo de Florianópolis, ouvi essa banda. Claro que fiz uma cópia. Mas gostei tanto que fui atrás da história de como ela chegou no Brasil: um amigo dele tinha ido à Indonésia e parece que ele conseguiu através de um australiano que estava ou morava lá. Não sei se é verdade ou não, mas é o que me contaram.  Quando voltei para casa, em Balneário Camboriú, passei a ouvir a fita diariamente (e várias vezes ao dia). E não deu outra: alguns amigos ouviram, gostaram, copiaram e daí viralizou. Tinha um amigo que falava: "Xande, tu é o primeiro cara que ouviu Australian aqui!".

Huguinho, surfe e tubarões

Imagem
Certa vez, após voltar da Oktoberfest, Huguinho decidiu surfar para curar a ressaca, pois todos sabem que Coca-Cola não cura ressaca:  Huguinho, Oktober e Coca-Cola.   Só que aquele dia, o mar estava grande e quebrando bem longe da areia.  Talvez não estivesse tão grande... Depois de pegar algumas (boas) ondas, Huguinho vai um pouco mais para outside para descansar um pouco. Não demorou muito e apareceram vários golfinhos em sua volta.  O que era Mas na hora, ainda meio grogue, a centenas de metros da areia, sozinho na imensidão do oceano, ele achou que fossem tubarões.  Até hoje não se sabe de ninguém que saiu tão rápido da água! O que Huguinho achou que era