Category: Code

Python27, protobuf, py2exe e build_exe

Jul 14, 2018 4 min.

Para quem está tentando compilar um executável usando py2exe e protobuf, #ficadica: desista. Ele não vai funcionar ou se funcionar vai dar trabalho. Em vez disso melhor usar build_exe (através do pacote cx_freeze), que é um esquema marotinho que permite configurar tudo e há apenas um patchzinho que precisa ser feito. Para entender como as coisas dão errado primeiro vamos instalar os requisitos de um pacote fictício em um ambiente virtualizado do Python (para evitar mexer na instalação padrão):

Vcpkg: gerenciador de libs c++ para Linux, Mac OS... e Windows!

Jul 14, 2018 3 min.

O ambiente padronizado de bibliotecas C/C++ dos sistemas *nix é motivo de inveja dos programadores Windows por séculos. Mas, finalmente, a Microsoft tem acordado diante da ressurreição do C++, com seus novos bug fixes e new deprecated features. E com isso uma série de atividades têm permeada a evolução da ferramenta de desenvolvimento da Microsoft, o Visual Studio: Updates frequentes Projetos internos lançados como open source no GitHub Compra do GitHub Suporte a mais de um compilador (como clang) Depuração Linux (Ubuntu) dentro do Windows Ambiente Linux (Ubuntu) dentro do Windows Pesado suporte ao CMake Ambiente padronizado de bibliotecas para Windows, Linux e Mac OS (vcpkg) Suporte à compilação de bibliotecas clássicas dos ambientes *nix via vcpkg Deploy de suas próprias bibliotecas padronizadas via vcpkg Usar o vcpkg no Windows é tão simples que parece mágica.

Manipulando Mouse e Teclado no Windows

Jul 4, 2018 1 min.

Uma forma extremamente bem comportada que o Windows tem para manipular entrada de mouse e teclado são as funções API BlockInput/SendInput. Enquanto uma bloqueia todos os eventos de input vindo de todos os lugares do sistema, o outro consegue enviar inputs apenas por software. Imagine a peça que você pode pregar em seus amigos. No entanto, estas funções não são para amadores. É preciso entender o que são threads, por exemplo, pois apenas a thread que chamou BlockInput pode depois chamar SendInput com sucesso.

SSL e seu limite de pacote

May 22, 2018 2 min.

O protocolo TLS/SSL tem por objetivo criar uma camada de criptografia assimétrica para a aplicação. E quando eu falo em camada não estou me referindo às camadas OSI. Nem às camadas TCP/IP. Isso porque o SSL não se encaixa em nenhuma das duas. Ele interfere com muitas, inclusive a aplicação. E aprendi isso a duras penas: na ponta do depurador. O pacote SSL tem um limite de 16 KB, ou 16384 bytes.

Boost Meta State Machine

May 21, 2018 4 min.

O Boost Meta State Machine (MSM for short) é uma das duas bibliotecas mais famosinhas de state machine do Boost. Ela é uma versão estática que permite incluir chamadas para as entradas e saídas de um estado baseado em eventos. A sua principal vantagem é poder visualizar toda a máquina de estado em um só lugar, e sua principal desvantagem é pertecer ao Boost, o que quer dizer que você vai precisar fazer seu terceiro doutorado e ler uma documentação imensa sobre UML antes de conseguir produzir alguma coisa.

Lista Ligada; tá ligado?

Apr 24, 2018 3 min.

Uma lista ligada é uma lista de alguma coisa. Essa alguma coisa podem ser inteiros, strings ou estruturas inteiras. Independente do que for, você vai precisar de uma estrutura. Sabe por quê? Porque existe além dos dados em si mais uma informação que você precisará guardar em cada elemento de sua lista: o próximo elemento. Sua estrutura pode ser simples e direta. Digamos uma lista ligada de idades vai ter o endereço do próximo elemento e o dado propriamente dito deste elemento (a idade):

Projeto Aluno

Mar 21, 2018 2 min.

Observar um estudante de computação (qualquer curso) lutando nos primeiros meses para conseguir fazer seus programas compilarem em C é um misto de emoções. É uma mistura entre risos, risadas e gargalhadas. Há vários motivos para isso, mas o principal, o que vem à minha mente sempre que isso acontece, é a eterna questão: por que a pessoa encontra fórum de programação para perguntar sobre variável mas não consegue ler duas páginas de um livro?

Contra o 'Array de 100 bytes é suficiente'

Mar 11, 2018 2 min.

Desde o C++ moderno (pós-03) o uso de arrays de tamanho fixo estão se tornando depreciados. E por um bom motivo: você nunca sabe realmente qual o tamanho que você precisa para um array de bytes até você saber. Daí a próxima grande questão é: “como gerenciar essa memória dinâmica de forma efetiva?”. E a resposta moderna sempre é: “não faça isso você mesmo”. Eis o porquê: #include <string.h> #include <iostream> char* LegacyFunction() { char* ret = (char*) malloc(100); strcpy(ret, "old old string"); return ret; } void WideStringFunction(wchar_t* mbString) { std::wcout << mbString << L'\n'; } int main() { char* legacyString = LegacyFunction(); size_t legacyLen = strlen(legacyString); wchar_t* convertedString = new wchar_t[legacyLen+1]; // espalhando a merda de alocar dinamicamente mbstowcs(convertedString, legacyString, legacyLen+1); WideStringFunction(convertedString); free(legacyString); free(convertedString); // espalhando a merda de desalocar manualmente } Quando lidamos com funções legadas elas se misturam de tal maneira com código novo que a merda da alocação/desalocação dinâmica manual vai se espalhando também.

PHP Experience 2018 Dia 2: Críticas

Mar 7, 2018 3 min.

Grades decepcionantes. O segundo dia do PHP Experience demonstrou pela qualidadade e teor das palestras pelo menos duas coisas: 1) a comunidade parece interessada em boas práticas e arquitetura (o que é ruim), 2) a comunidade parece mais interessada em “diversidade” que qualidade (o que é duplamente ruim). As palestras que frequentei foram: Construindo aplicações PHP com Twelve-Factor App Uma lenta e dolorosa peregrinação teórica sobre boas práticas de como desenvolver e entregar software… até esqueci sobre que tipo de software.

iMasters PHP Experience

Mar 5, 2018 2 min.

Meu primeiro post no blog sobre PHP. Já programei alguma coisinha no passado e meu amigo Strauss fez o blogue dele todo em php, do zero. Sim. Programador de verdade ele. Mas hoje quero falar sobre o iMasters PHP Experience, que tive a oportunidade de frequentar graças ao meu amigo T@z. Hoje foi o keynote e amanhã serão as trilhas. Este é um evento muito bem organizado e frequentado por centenas de pessoas.