Semana 49 de 2024

This is an old revision of the document!


Semana 49 de 2024

Capacitação

  • AWS
    • Início do curso “AWS Cloud Technical Essentials”.
    • Criação de conta no https://repost.aws. O re:Post é um fórum para perguntas sobre o AWS.

Pesquisa

  • Correção automática de programas
    • Um problema que tive recentemente foi quanto a redefinição de módulos e funções da biblioteca básica do Python.
    • Normalmente, poderíamos usar dublês (mocks) para sobrepor o comportamento de alguma função ou método de uma classe. No entanto, isso não é tecnicamente possível (ao menos com as ferramentas atuais) para os módulos e funções da biblioteca básica/padrão do Python (builtin).
    • Mais especificamente, eu precisava sobreescrever o comportamento da função 'time' do módulo 'time'.
    • Existe mais um adendo de que, por ser para uma disciplina introdutório, eu não queria criar um objeto ou forçar uma abstração além daquilo que os estudantes, que estão aprendendo o básico da programação, precisam.
    • Em tese, seria suficiente criar um arquivo 'time.py' com a função em questão. Isso seria verdade se, no ambiente de avaliação automática que utilizo, o CodeRunner do Moodle, isso fosse permitido.
    • Assim, resolvi ser criativo e verificar como ocorre o carregamento dos módulos e se existia algo que eu pudesse trabalhar naquele nível. Eis que os problemas surgem :-)
    • A implementação padrão do Python, CPython, está disponível de forma aberta em https://github.com/python/cpython. Outro aspecto positivo é que, ao contrário da expectativa, o carregamento de módulos é realizado por código escrito em Python ao invés de código C. O módulo 'importlib' possui tudo que é necessário: https://github.com/python/cpython/blob/main/Lib/importlib/. Não é um módulo bonito e fácil de ler, mas servirá como inspiração para uma solução.
    • Um desenvolvedor criou um módulo '''module-found'' que, usando o 'importlib', faz algo bem legal: ele utiliza uma aplicação de modelo de linguagem (LLM), mais precisamente um modelo da OpenAI, para gerar automaticamente o código em Python, considerando uma descrição informada como parâmetro, referente a uma função de um módulo que não existem em Python. Ou seja, ao invés de lançar uma exceção de que o módulo ou função não foi encontrado, ele cria automaticamente o módulo e a função necessários. No caso, eu não preciso gerar automaticamente código, dado que eu sei exatamente o que eu preciso. No entanto, o mecanismo é o mesmo (com a diferença que eu quero sobreescrever um módulo ou função existente).
    • Bom, nem tudo são flores. Por algum motivo muito estranho, alguns módulos builtins do Python não podem ser sobreescritos por esse mecanismo. Mais especificamente o módulo 'time' não pode.
work/2024-49.1734138587.txt.gz · Last modified: 2024/12/14 01:09 by magsilva