Feb 22, 2019

Aprendendo Mono.Cecil de uma maneira mais fácil

Read this post in english

A muito tempo atrás eu trabalhava com uma biblioteca para manipulação de bytecode Java chamada ASM. Um dos grandes diferenciais da mesma era sua excelente documentação bem como um aplicativo (asmifier) que, dado um trecho de código Java gerava um um programa com chamadas a API da biblioteca ASM que produzem bytecode equivalente ao do trecho de código usado.

Algum tempo depois (por volta de 2010 ~ 2011) o foco da minha carreira mudou para dotnet e eu comecei a usar uma biblioteca para manipulação de assemblies .NET (equivalente ao ASM) chamada Mono.Cecil e não demorou muito para eu entender que uma ferramente similar ao asmifier para o mundo .Net seria de grande valor.

Dada a complexidade inerente do problema (manipulação de MS IL), a documentação disponível precária do Mono.Cecil e meu interesse em aprender uma tecnologia emergente (naquela época) chamada MS Roslyn e assim nasceu Cecilifier.

Por razões que não são importantes agora eu acabei por diminuir o ritmo do mesmo algumas vezes mas nunca o abandonei por completo; ao contrário, o projeto progrediu de uma forma muito, muito, muito lenta com algumas paradas durante este período (veja o diagrama abaixo de você estiver curioso):


A boa notícia é que ano passado eu retomei o mesmo, adicionando algumas funcionalidades, corrigindo bugs, reorganizando o código, etc. Com isso eu planejava esperar até que o código atingisse um nível maior de qualidade antes de torná-lo open source mas eu concluí que mesmo no estado atual ele pode ser bastante útil; dessa forma tornei o repositório git público e implementei/configurei um site web.

Mesmo entendendo que este site torne o projeto mais acessível e útil atualmente o mesmo esta hospedado no gcp consumindo créditos gratuitos oferecidos pelo Google. Infelizmente estes créditos se esgotarão rapidamente, assim sendo, para permitir que o site continue disponível eu lancei uma campanha no Patreon com o objetivo de cobrir os custos de hospedagem, obter um domínio, etc. Outra formade contribuir é enviando bitcoins para 34e55WVni9nMFCiugo8d1bfwu9pLNzPH6n :)

Caso o montante mensal arrecadado não seja suficiente para cobrir tais custos eu irei remover o site mas o desenvolvimento deverá continuará, dependendo apenas do interesse tanto da comunidade como o meu :)

Se você gostou do projeto e vê o site como uma parte importante considere tornar-se um patrão. É claro que toda e qualquer forma de contribuição é bem vinda. Sinta-se a vontade em reportar problemas, enviar Merge Requests, ajudar outros usuários, adicionar mais testes, etc.

Certamente o site é uma das partes que eu dediquei menor esforço (mesmo porque este foi o recurso adicionado mais recentemente). Assim sendo esta é uma parte do projeto que se beneficiaria muito de desenvolvedores web com mais experiência.
Se desejar você pode ler mais detalhes a respeito do projeto (incluindo lista de  funcionalidades, limitações entre outras) no README incluso no repositório.

Finalizando envie-me uma mensagem no twitter contando se você esta utilizando o projeto, o que você acha, sugestões, comentários, etc (é sempre bom saber que o meu esforço esta sendo útil).

Espero que o mesmo seja útil.

Divirtam-se.

Adriano

No comments: