CodeNight é um grupo aberto de desenvolvimento de software livre que se reune periodicamente (às quintas-feiras, às vezes quinzenalmente, a partir das 19 horas) no WikiLab.

A ideia é escolher um projeto de software livre existente e trabalhar sobre ele, contribuindo com código e de outras formas.

Inicialmente estamos trabalhando no FreeCAD mas posteriormente podemos trabalhar com outros projetos.

Memória das reuniões [ editar ]

CodeNight #00: 19/04/2018 [ editar ]

Link do evento no Facebook: https://www.facebook.com/events/359315651240777/

Se reuniram cerca de 10 pessoas para um bate-papo inicial e apresentar a proposta de evento: escolher, inicialmente, um projeto de software livre e se dedicar a ele nos próximos meses. Além dos frequentadores de Wikilab e do ABC Makerspace apareceram cerca de 10 alunos da UFABC com históricos diversos.

Criou-se um grupo no Telegram com aqueles que participaram da reunião. Link do grupo: https://t.me/joinchat/FuX9wEMsDsjcKoJNflhCkA

Foram levantados os seguintes projetos:

Blender - http://www.blender.org

Scribus - http://www.scribus.net

LibreOffice - http://www.libreoffice.or

Editores de vídeo - Temos que escolher um (talvez o mais famoso seja o OpenShot - http://www.openshot.org)

Zulip - http://www.zulip.org

FreeCAD - http://www.freecadweb.org

Logisin - http://www.cburch.com/logisim/

GHDL - https://github.com/ghdl/ghdl

PostgreSQL - http://www.postgresql.org

GNU Octave - https://www.gnu.org/software/octave/

Scilab - http://www.scilab.og

Gimp - http://www.gimp.org

R - http://www.r-project.org

Inkscape - http://www.inkscape.org

Mastodon - https://joinmastodon.org/

Wine - http://winehq.org

Posteriormente, no grupo do Telegram, foram sugeridos de incluir os seguintes projetos:

Próxima reunião: 03/05/2018

CodeNight #01: 03/05/2018 [ editar ]

Link do evento no Facebook: https://www.facebook.com/events/203678533772513/

Além do Victor e do Silas, apareceram três alunos, um de engenharia aeroespacial, outro de IAR e outro de ciência da computação. Silas apresentou o projeto que se comprometeu a apresentar, o FreeCAD. Depois decidiu-se que podia ser o FreeCAD o primeiro projeto do GDSL/Wikilab, considerando os seguintes motivos:

O projeto pode ter aplicação na UFABC, uma vez que já usa programas proprietários que fazem a mesma coisa, como o SolidWorks

O projeto possiu um desenvolvedor em São Paulo (Yorik)

Podemos usar o FreeCAD para projetar as peças que depois serão impressas nas impressoras 3D

Encaminhamentos da reunião:

Victor e Silas irão elaborar um comunicado para mandar no grupo do Telegram

Ficamos de pensar uma forma de documentação para guardar as memórias da reunião (atas) e também a documentação do que formos aprender. O Everaldo disse que poderá disponibilizar a área de hospedagem do Wikilab, e aí podemos instalar o Mediawiki no servidor e usá-lo para gerar nossa documentação.

Para a próxima reunião combinamos de:

Baixar o FreeCAD e compilá-lo: https://freecadweb.org/wiki/Compiling

Ler a documentação de desenvolvimento em: https://freecadweb.org/wiki/

Pensar um "roadmap" para termos uma referência de como evoluirá o desenvolvimento do projeto no GDSL/Wikilab

Próxima reunião: 17/05/2018

CodeNight #02: 17/05/2018 [ editar ]

Link do evento no Facebook: https://www.facebook.com/events/368523010335340/

Além de Victor e Silas, apareceram Celina, Felipe e Danilo. Seguimos o guia em: https://freecadweb.org/wiki/CompileOnUnix

Em resumo, os comandos que executamos no GNU/Linux, Ubuntu, foram:

sudo apt install build-essential cmake python python-matplotlib libtool libcoin80-dev libsoqt4-dev libxerces-c-dev libboost-dev libboost-filesystem-dev libboost-regex-dev libboost-program-options-dev libboost-signals-dev libboost-thread-dev libboost-python-dev libqt4-dev libqt4-opengl-dev qt4-dev-tools python-dev python-pyside pyside-tools libeigen3-dev libqtwebkit-dev libshiboken-dev libpyside-dev libode-dev swig libzipios++-dev libfreetype6-dev liboce-foundation-dev liboce-modeling-dev liboce-ocaf-dev liboce-visualization-dev liboce-ocaf-lite-dev libsimage-dev checkinstall python-pivy python-qt4 doxygen libspnav-dev oce-draw liboce-foundation-dev liboce-modeling-dev liboce-ocaf-dev liboce-ocaf-lite-dev liboce-visualization-dev libmedc-dev libvtk6-dev libproj-dev sudo apt install git git clone https://github.com/FreeCAD/FreeCAD.git free-cad-code cd free-cad-code cmake -DFREECAD_USE_EXTERNAL_PIVY=1 -DCMAKE_BUILD_TYPE=Release . make -j$(nproc)

Isso fez com que o FreeCAD fosse compilado. Pode demorar bastante, a depender do computador que está sendo utilizado. Para executá-lo, fizemos:

./bin/FreeCAD

E fizemos alguns testes no programa.

Em seguida, fizemos um exercício para alterar o título da janela principal. Após investigar o código-fonte com o grep (onde procurávamos por "MainWindow" ou "setWindowTitle") achamos o arquivo "src/Gui/Annotation.cpp" e alteramos a linha 1725 que estava:

mw.setWindowTitle(mainApp.applicationName());

para

mw.setWindowTitle(QString::fromLatin1("teste"));

Em seguida, compilamos e executamos o FreeCAD novamente:

make ./bin/FreeCAD

E foi possível ver que o título foi alterado.

Não marcamos ainda a data da próxima reunião, mas provavelmente será no dia 07/06.

CodeNight #03: 07/06/2018 [ editar ]

Link do evento no Facebook: https://www.facebook.com/events/390725574760980/

Alguns dias antes do Code Night Silas iniciou uma thread no fórum do FreeCAD pedindo sugestões de desenvolvimento. A link para a thread é essa: https://forum.freecadweb.org/viewtopic.php?f=10&p=237598&sid=f8e4b77a429689c4bb4e34419a3b40c4

Alguns desenvolvedores responderam. Yorik respondeu sugerindo que fizéssemos alguns testes com a API em Python, o que foi feito neste CodeNight.

Neste CodeNight compareceram Danilo, Victor, Silas e outro visitante. Seguimos a página https://www.freecadweb.org/wiki/Python_scripting_tutorial para desenhar uma caixa. Em seguida usamos o editor de macros para iniciar um código que desenhasse uma cadeira (é só desenhar 6 caixas). Em seguida, usamos a página https://www.freecadweb.org/wiki/PySide_Medium_Examples para elaborar uma janela que pudesse perguntar ao usuário as medidas da cadeira e, então, desenhar a cadeira.

Para o próximo CodeNight (dia 14/06) ficamos de ter uma conversa pessoal com o Yorik sobre coisas que são possíveis fazer no FreeCAD.

CodeNight #04: 17/06/2018 [ editar ]

Link do evento no Facebook: https://www.facebook.com/events/827554320771060/

No CodeNight #04 fizemos uma reunião presencial com o Yorik, desenvolvedor do FreeCAD residente em São Paulo, que foi até o Wikilab conversar conosco. Nessa reunião, Yorik fez uma introdução do desenvolvimento do FreeCAD, mostrando alguns módulos desenvolvidos em Python. Também fizemos uma busca dos problemas do FreeCAD em seu tracking system: https://freecadweb.org/tracker/my_view_page.php

Elencamos os seguintes bugs/melhorias para serem corrigidos/desenvolvidos:

Descrição; Linguagem; #Número no Bug Tracking System

Colocar versão na barra de título; C++; #3499

Melhorar o export de WebGL; Python

Implementar um Resource Manager (biblioteca com peças prontas para serem usadas)

Implementar a funcionalidade de Assembly; C++

Calculadora CNC (sugestão do sliptonic); Python

Ter integração com IoT (com MQTT); Python

Implementar import e export de JSON; Python; #1558

Implementar detecção de colisão em simulações robóticas; C++

Fazer uma lista de materiais (bill of materials); Python; #3378

Implementar a funcionalidade de X-Ray (Raio-X); C++; #3414

Implementar um configuration wizard para novos usuários; Python; #3393

Melhorar a aplicação de constrants (restrições) quando importar SVG; Python

Modo "Primeira pessoa"; Python; #2688

Decidimos que vamos atacar as issues 3499, 3414 e 3393.

Próxima reunião: 21/06/2018

CodeNight #05: 21/06/2018 [ editar ]

Presentes: Danilo, Victor e Silas.

Nesta reunião começamos a atacar a issue 3499. Primeiro olhamos na janela de about (arquivo src/Gui/AboutApplication.ui ) que contém a informação da versão. Vimos que a janela de about contem a label chamada labelBuildVersion . Procurando com o comando grep na árvore do FreeCAD, descobrimos as seguintes entradas:

src/Gui/AboutApplication.ui: <widget class="QLabel" name="labelBuildVersion"> src/Gui/Splashscreen.cpp: QString version = ui->labelBuildVersion->text(); src/Gui/Splashscreen.cpp: ui->labelBuildVersion->setText(version);

Apesar de não achar o código correspondente que altera a janela de About, vimos que a mesma informação encontra-se na janela de SplashScreen, arquivo, arquivo src/Gui/Splashscreen.cpp .

Estudamos o conteúdo do arquivo no que diz respeito a parte de obtenção do número de versão e, em seguida, fizemos a alteração na janela principal (arquivo src/Gui/Splashscreen.cpp ). Faremos commit na próxima reunião.

Próxima reunião: 05/07/2018

CodeNight #06: 05/07/2018 [ editar ]

Evento no Facebook: https://www.facebook.com/events/216619065635220/

Album de fotos no evento do Facebook

Presentes: Danilo, Victor, Sickeira e Silas.

A primeira coisa que fizemos foi ter criado o github do WikiLab (https://github.com/wikilab-abc) e feito fork do projeto no FreeCAD para o nosso github. Em seguida fizemos dois commits:

8192739baf75845e4d8dad637bbb4cb0ed476b73 - Adiciona a versão de informação à janela de título (issue 3499).

f5efa2ac00cfa088544cab518ecd309e307e445f - Adiciona um comentário para ficar mais nítido a intenção do código abaixo, na janela de SplashScreen.

Em seguida fizemos commit no repositório presente na página do WikiLab.

Essas alterações foram enviadas para o projeto oficial do FreeCAD e consolidadas no pull request 1539

CodeNight #07: 26/07/2018 [ editar ]

Evento no Facebook: https://www.facebook.com/events/185240912342721/

Nesta edição iniciamos alguns experimentos para ver se era possível realizar a implementação da funcionalidade 3393 em Python. Não foi feito nenhum commit. Após a atividade, foi aberta uma pergunta no fórum do FreeCAD (aqui) para verificar se seria melhor implementar em Python ou C++.

CodeNight #08: 02/08/2018 [ editar ]

Evento no Facebook: https://www.facebook.com/events/2321820197844768/

Iniciamos a implementação do Assistente de Configuração em C++, focando apenas em aparecer a janela. Foi gerado o commit 96698adcceb0a8853d1f945a0e52efdbdf17f4bb. Estamos trabalhando em uma branch separada no github do WikiLab.

CodeNight #09: 09/08/2018 [ editar ]

Evento no Facebook: https://www.facebook.com/events/436980496821916/

Aprendemos a usar os sinais e slots da Qt. Adicionamos a funcionalidade de fechar a janela, acionando-se o botão "Cancel". Geramos o commit d33b46cbf81fbe80599e40608bf0ce721fd181d2.

CodeNight #10: 23/08/2018 [ editar ]

Evento no Facebook: https://www.facebook.com/events/338918976650923/

Ficamos duas semanas sem nos reunir porque estávamos configurando o nosso cluster de compilação com o icecream. Agora conseguimos compilar o FreeBSD em cerca de 1/4 do tempo que antes precisávamos.

Algumas observações importantes:

O daemon iceccd deve estar rodando em todas as máquinas; O daemon icecc-scheduler -d deve estar rodando em apenas uma máquina; Todas as máquinas envolvidas devem estar na mesma rede local.

Após essas configurações, deve-se configurar o sistema de compilação do FreeCAD com o seguinte comando:

cmake -DCMAKE_CXX_COMPILER=/usr/lib/icecc/bin/c++ -DFREECAD_USE_EXTERNAL_PIVY=1 -DCMAKE_BUILD_TYPE=Debug .

E, para compilar, rodar o comando make com o número de jobs que seja o dobro do número de cores envolvidos. Por exemplo, o nosso cluster tem 4 computadores, cada um com 2 cores. Como são 8 cores no total, rodamos com 16 jobs:

make -j 16

Trabalhando com esse cluster, já implementamos a funcionalidade de mostrar os idiomas na janela do assistente de configuração. Isso gerou o commit b30629a99284b394e1f322141ed3a191cd69770a. O código foi inspirado no código presente no arquivo src/Gui/DlgGeneralImp.cpp

CodeNight #12: 30/08/2018 [ editar ]

Evento no Facebook: https://www.facebook.com/events/2182304345380548/

Neste encontro já começamos a implementar as unidades de medida básicas (mm, polegadas, etc.) conforme também está na aba de configuração da janela de preferências (arquivos DlgSettingsUnits.ui e DlgSettingsUnitsImp.cpp ).

Foi feito o commit b937512ea97e9cb4e20c1c0d9ee3cec8059d71b3.

Um problema que identificamos é que as unidades estão "hard-coded" no arquivo DlgSettingsUnits.ui, ou seja, não há uma forma centralizada para mudança e manipulação dos padrões de unidade. Devemos simplesmente copiar como está na janela DlgSettingsUnits para a janela DlgConfigurationWizard? Funcionará, mas isso gerará código duplicado, o que não é uma boa prática.

CodeNight #13: 20/12/2018 [ editar ]

Evento no Facebook: https://www.facebook.com/events/560943551036722/

Infelizmente não conseguimos avançar muito, pois as alterações que faríamos se baseavam em um trecho da DlgSettingsUnitsImp.cpp que apresentava um bug. Posteriormente o bug foi corrigido (veja https://github.com/FreeCAD/FreeCAD/commit/5aed8bc8db90acdbdd6921f3670f79c9a8dcfd63) e na próxima reunião conseguimos implementar a solução.

CodeNight #14: 07/02/2019 [ editar ]

Evento no Facebook: https://www.facebook.com/events/293484108022958/

Conseguimos copiar as partes relevantes da DlgSettingsUnitsImp.cpp para a DlgConfigurationWizard.cpp, gerando o commit https://github.com/wikilab-abc/FreeCAD/commit/f15ffa378bbfce3735e955f221c2a987e3960e49. O mesmo commit erroneamente altera o arquivo src/Gui/DlgPreferencesImp.cpp , que acabou indo com comentários que usamos para fazer testes. Posteriormente, é só reverter.

Discutimos na reunião de finalizar esse trabalho com o FreeCAD. O restante das alterações serão feitas pelo Silas para que haja o merge no projeto e, a partir do próximo encontro, trabalharemos fazendo um software em Python para aprender mais do início.

CodeNight #15: 21/02/2019 [ editar ]

Evento no Facebook: https://www.facebook.com/events/293484108022958/

Instalamos as ferramentas necessárias em para o desenvolvimento em Python + Qt5. Os comandos foram o seguinte:

# apt-get install python3-pyqt5 pyqt5-dev-tools qttools5-dev-tools

Também criamos um arquivo *.ui , com a interface gráfica da janela inicial criada no QtDesigner, um Makefile para automatizar a conversão do arquivo mainwindow.ui em ui_mainwindow.py e criamos a aplicação no arquivo mainwindow.py . Foi criado o repositório https://github.com/wikilab-abc/EspacoFisico.

CodeNight #16: 13/03/2019 [ editar ]

Presentes: Danilo, Victor e Silas.

Alem da MainWindow, foram iniciados o desenvolvimento das janelas de cadastro de pessoas e locais.

Foram gerados os seguintes commits: