Código aberto no laboratório de modelagem da cidade

Mar 22 2023
Por que e como consumimos e publicamos software de código aberto
No City Modeling Lab, somos grandes fãs de software de código aberto. MATSim, a ferramenta central de nossos Modelos Baseados em Agentes, é um projeto de código aberto lançado sob a licença GNU GPL.

No City Modeling Lab, somos grandes fãs de software de código aberto.

MATSim , a ferramenta central de nossos Modelos Baseados em Agentes , é um projeto de código aberto lançado sob a licença GNU GPL . Usamos muitas estruturas e bibliotecas de código aberto para Python e Java, estamos usando o Ubuntu em nossas máquinas virtuais em nuvem e geralmente criamos nossas próprias imagens do Docker estendendo as imagens de código aberto do Docker Hub .

É justo dizer que o software de código aberto é essencial para o nosso trabalho.

Imagens de estoque alfa — http://alphastockimages.com

Por que usar software de código aberto?

Obtemos vários benefícios práticos do uso de software de código aberto:

  • O software que usamos e do qual dependemos é muito bem revisado por pares e testado na estrada; MATSim tem mais de 300 forks e quase 100 contribuidores e pytest, por exemplo, é usado por mais de meio milhão de outros projetos públicos no GitHub
  • Podemos nos aprofundar no código para aprofundar nossa compreensão do espaço do problema
  • Podemos fazer nossas próprias alterações no software
  • Economizamos dinheiro em taxas de licença (embora isso deva ser compensado pelos custos de desenvolvimento)

Não queremos apenas ser consumidores de software de código aberto; também nos esforçamos para contribuir com a comunidade sempre que possível. Essas contribuições assumem várias formas. Por exemplo, se encontrarmos um bug em uma ferramenta de código aberto que estamos usando, tentamos contribuir com uma correção . Mas também lançamos nosso próprio software sob licenças de código aberto sempre que possível. Fazemos isso por razões filosóficas e práticas.

Filosoficamente, uma vez que extraímos tanto valor dos esforços de código aberto de outras pessoas, sentimos que é justo tentar retribuir isso de alguma forma. Além disso, reconhecemos que as soluções para muitos dos grandes problemas de nossa era - mudança climática e desigualdade, para citar dois que nosso trabalho aborda - exigem colaboração em vários domínios.

Acreditamos que a colaboração é mais eficaz quando é aberta e transparente e que credibilidade, responsabilidade e transparência são vitais, pois usamos modelos cada vez mais complexos e poderosos para tomar decisões no espaço público. Com mais poder vem mais responsabilidade...

Na prática, quando lançamos nosso código publicamente sob uma licença de código aberto, além de retribuir à comunidade, também ganhamos algumas coisas úteis:

  • Nossos clientes apreciam a transparência e a falta de potencial bloqueio do fornecedor
  • Convidamos a revisão por pares da comunidade; mais olhos no código é uma coisa boa
  • Somos forçados a pensar como usuários de nosso próprio software, e não apenas como desenvolvedores; essa perspectiva focada no usuário incentiva algumas boas práticas que, de outra forma, podem ser negligenciadas
  • Criamos o potencial para recrutar novos colaboradores, dando-nos acesso a talentos, conhecimentos e informações de todo o mundo
  • Aumentamos nosso perfil nas comunidades de modelagem de transporte e planejamento urbano, ajudando-nos a construir relacionamentos com pessoas que pensam da mesma forma que fazem trabalhos semelhantes

Queremos dar aos nossos usuários a melhor experiência possível ao usar nosso software. Nosso objetivo é minimizar o tempo e o esforço necessários para que um novo usuário entenda, instale e use nossas ferramentas.

Para isso, seguimos um processo baseado em um ciclo de vida ágil de software adaptado do Manual de Entrega Agile de Serviços Digitais do Governo do Reino Unido . À medida que um componente de software se move pelas diferentes fases do ciclo de vida, da descoberta ao ativo , devemos marcar mais caixas em nossa lista de verificação. No momento em que lançamos publicamente um repositório, ele segue todas as nossas práticas recomendadas.

Nossa lista de verificação do ciclo de vida/portões de qualidade do software

O resultado é que todos os nossos repositórios do GitHub são muito semelhantes em alguns aspectos:

  • Acreditamos em uma boa documentação, então você sempre encontrará um README.mdarquivo abrangente na raiz do projeto (veja este exemplo do PAM)
  • Para bibliotecas, gostamos de tutoriais executáveis ​​que ensinam nossos usuários a usar a API, como você pode ver em PAM e GeNet
  • Deixamos claro como nossos usuários podem contribuir por meio de um CONTRIBUTING.mdarquivo e um código de conduta claramente definido, como evidenciado em GeNet
  • Tornamos a correção funcional do nosso código verificável por meio de um conjunto robusto de testes de unidade, além de incluirmos frequentemente outros testes automatizados, como esses testes de fumaça para os exemplos de notebook Jupyter da GeNet
  • Gostamos da licença MIT de código aberto permissiva , que você encontrará na frente e no centro LICENSE.md, tornando claras todas as condições e limitações de uso
  • Licença MIT do PAM
    Testes de fumaça automatizados para notebooks Jupyter do PAM

Marcamos todos os nossos repositórios do GitHub com o tópico CML para que você possa encontrá-los no URL https://github.com/search?q=org:arup-group+topic:cml&type=repositories e partir daí.

Todos os projetos de código aberto da CML no GitHub

Todas as coisas que lançamos até agora estão relacionadas ao nosso trabalho com modelos baseados em agente , de uma forma ou de outra. Um resumo rápido:

  • PAM : Ferramentas para gerar e modificar programaticamente cenários de demanda de transporte
  • GeNet : Ferramentas para manipular programaticamente representações baseadas em gráficos de redes de transporte público, como as usadas como entrada para MATSim
  • OSMOX : Um utilitário de linha de comando para extrair locais e recursos de instalações de dados OpenStreetMap (OSM)
  • Elara : Um utilitário de linha de comando para analisar grandes dados de saída MATSim semiestruturados e calibrar/validar modelos
  • MC : Um utilitário de linha de comando para tornar a configuração do MATSim menos dolorosa
  • Londinium : Um conjunto de dados MATSim semi-sintético para criar modelos realistas, mas ainda pequenos o suficiente para serem executados em um tempo razoável em um laptop de desenvolvedor típico

Certamente somos um bando de cabeças de ABM, mas nem tudo que construímos é relacionado a ABM.

Um exemplo de software genericamente útil que criamos é um aplicativo AWS Lambda chamado AEMon que transforma eventos em uma conta da AWS em notificações no Slack , nosso sistema interno de mensagens e colaboração preferido. Temos usado o AEMon com bons resultados em várias equipes da Arup há alguns anos, e ele já marca todas as caixas necessárias em nossa lista de verificação de qualidade. Em breve o divulgaremos publicamente.

Embora não possamos divulgar publicamente tudo o que construímos, definitivamente ainda não terminamos de fazer contribuições de código aberto, então… fique ligado!