Halloween Update for FreeCAD & Debian Science Work

There's been a spooky amount of activity in the FreeCAD & Debian Science world since I last wrote! Because this update covers August, September, and October, I'll try to be brief and only touch on the key points.

FreeCAD Python 2 removal in Debian Testing

The Python 2 removal in Debian Testing continues, and with it, FreeCAD's Python 2 package is gone. However, upon upload, several new build failures appeared on the i386, mipsel, and s390x platforms. Turns out there was a regression in dwz, a software I had never heard of before. I tried troubleshooting but unfortunately had FreeCAD drop out of testing due to the Python 2 removal bug filed against it.

Luckily, when I filed a bug against dwz, Matthias Klose and Tom de Vries helped isolate and upstream the problem, with Tom even bisecting the regressing commit in the upstream bug. Thank you, you two!

After adding a workaround to fix those build failures, the new Python 3-only FreeCAD package is on its way to Debian Testing.

FreeCAD Python 3 support added for Ubuntu 16.04

Qt 5 & Python 3 builds for FreeCAD have been available on Ubuntu 18.04 and newer and Debian 10 and newer platforms for some time now. However, Ubuntu 16.04 was problematic due to its old Qt version, which meant a Qt 4, Python 3 build had to be produced. This had been on the back burner for a while because when I initially attempted backporting the necessary packages, I encountered some friction.

However, since it's the last holdout Python 2 platform, I took another look at things to try to speed up the "py2ectomy". It turns out that the missing package needed for a Python 3 build, pivy, was failing to build because of "PIE hardening", a Debian security hardening flag. I had all such flags turned on, so I just had to disable that particular one to get things going.

So, Python 3 builds are now available for Ubuntu 16.04 in the FreeCAD Daily Builds PPA, and they will be coming soon to the stable PPA as well. A new bugfix release has been made for stable, 0.18.4, so I am working on that first, and the Python 3 package will come with it.

Netgen and Pybind11 Builds

Good news for users of FreeCAD's finite element modeling workbench!

Integration with Netgen, a mesh generator, has long been an optional but off-by-default build option for FreeCAD, due to packaging difficulties. However, since I have taken over things in recent years, I have finally gotten things to the state where we can turn this back on by default. As part of this change, I am also building FreeCAD with Pybind11 instead of Boost.Python, marking another milestone in managing FreeCAD's dependencies.

Since this may introduce bugs, I've started by making this change for all of FreeCAD's daily builds in the Ubuntu PPA, as well as the package currently in Debian Unstable. Eventually, this change may come to the stable PPA.

OpenCASCADE 7.4.0

OCCT performance improvement example

An assembly of a single solid box replicated ~93,000 times. This test case is more than 10x faster in OCCT 7.4.0.

After more than a year of development (PDF warning), a new minor version of OpenCASCADE Technology (OCCT) has been released.

OCCT is the geometry & topology kernel of FreeCAD, and it is also a dependency for several related projects including Gmsh, IFCOpenShell, Netgen, and OpenCAMLib. New releases in OCCT generally herald stability and performance upgrades for core behavior. However, there are some breaking changes and so these improvements are yet to be seen.

For the time being, OCCT 7.4.0 packages are available in my OpenCASCADE PPA and by building the package directly from https://salsa.debian.org/science-team/opencascade.

OpenFOAM 1906

I uploaded the latest version of OpenFOAM, the toolbox for computational fluid dynamics. It's now available in Ubuntu 19.10, Debian Testing, and via the FreeCAD Community Extras PPA.

Gmsh 4.4.1

The latest version of Gmsh, a 3D finite element mesh generator, is also in Ubuntu 19.10, Debian Testing, and the Community Extras PPA. Thanks to Nico Schlömer for helping maintain this package.

Netgen 6.2.1905

This version of Netgen is only available via the FreeCAD Daily and Community Extras PPAs. Unfortunately Netgen has been stuck in the Debian NEW queue for over 8 months now.

GitHub Sponsors Program

I was accepted into the GitHub Sponsors program! GitHub is matching donations for the first year. Hopefully this helps fund my FOSS work, and FOSS work in general.

Thanks for your support

I appreciate any feedback you might have.

You can get in touch with me via Twitter @thekurtwk.

If you'd like to donate to help support my work, there are several methods available on my site.

Summer Update for FreeCAD & Debian Science Work

Hello, and welcome to my "summer update" on my free software work on FreeCAD and the Debian Science team. I call it a summer update because it was winter when I last wrote, and quite some time has elapsed since I fell out of the monthly update habit. This is a high-level summary of what I've been working on since March.

FreeCAD 0.18 Release & Debian 10 Full Freeze Timing

/images/freecadsplash.png


The official release date of FreeCAD 0.18 ( release notes ) is March 12, 2019, although the git tag for it wasn't pushed until March 14th. This timing was a bit unfortunate as the full freeze for Debian 10 went into effect March 12th, with a de-facto freeze date of March 2nd due to the 10 day testing migration period. To compound things, since this was my first Debian release as a packaging contributor, I didn't do things quite right such that while I probably could have gotten FreeCAD 0.18 into Debian 10, I didn't. Instead, what's available is a pre-release version from about a month before the release which is missing a few bugfixes and refinements.

On the positive side, this is an impetus for me to learn about Debian Backports, a way to provide non-bugfix updates to Debian Stable users. The 0.18 release line has already had several bugfix releases; I've currently got Debian Testing/Unstable as well as the Ubuntu Stable PPA up-to-date with version 0.18.3. As soon as I'm able, I'll get this version into Debian Backports, too.

FreeCAD PPA Improvements

Another nice improvement I've recently made is migrating the packaging for the Ubuntu Stable and Daily PPAs to Debian's GitLab instance at https://salsa.debian.org/science-team/freecad by creating the ppa/master and ppa/daily branches. Having all the Debian and Ubuntu packaging in one place means that propagating updates has become a matter of git merging and pushing. Once any changes are in place, I simply have to trigger an import and build on Launchpad for the stable releases. For the daily builds, changes are automatically synced and the debian directory from Salsa is combined with the latest synced upstream source from GitHub, so daily builds no longer have to be triggered manually. However, this has uncovered another problem in our process which being worked on at the FreeCAD forums. (Thread: Finding a solution for the 'version.h' issue

Science Team Package Updates

/images/bunny.png


The main Science Team packages I've been working on recently have been OpenCASCADE, Netgen, Gmsh, and OpenFOAM.

For OpenCASCADE, I have uploaded the third bugfix release in the 7.3.0 series. Unfortunately, their versioning scheme is a bit unusual, so this version is tagged 7.3.0p3. This is unfortunate because dpkg --compare-versions 7.3.0p3+dfsg1 gt 7.3.0+dfsg1 evaluates to false. As such, I've uploaded this package as 7.3.3, with plans to contact upstream to discuss their bugfix release versioning scheme. Currently, version 7.4.0 has an upstream target release date for the end of August, so there will be an opportunity to convince them to release 7.4.1 instead of 7.4.0p1. If you're interested in the changes contained in this upload, you can refer to the upstream git log for more information.

In collaboration with Nico Schlömer and Anton Gladky, the newest Gmsh, version 4.4.1, has been uploaded to wait in the Debian NEW queue. See the upstream changelog for more information on what's new.

I've also prepared the package for the newest version of Netgen, 6.2.1905. Unfortunately, uploading this is blocked because 6.2.1810 is still in Debian NEW. However, I've tested compiling FreeCAD against Netgen, and I've been able to get the integration with it working again, so once I'm able to do this upload, I'll be able to upload a new and improved FreeCAD with the power of Netgen meshing.

I've also begun working on packaging the latest OpenFOAM release, 1906. I've gotten a little sidetracked, though, as a pecularity in the way upstream prepares their tarballs seems to be triggering a bug in GNU tar. I should have this one uploaded soon. For a preview in what'll be coming, see the release notes for version 1906.

GitLab CI Experimentation with salsa.debian.org

Some incredibly awesome Debian contributors have set up the ability to use GitLab CI to automate the testing of Debian packages (see documentation.)

I did a bit of experimentation with it. Unfortunately, both OpenCASCADE and FreeCAD exceeded the 2 hour time limit. There's a lot of promise in it for smaller packages, though!

Python 2 Removal in Debian Underway

/images/deadsnakes.jpeg


Per pythonclock.org, Python 2 has less than 5 months until it's end-of-life, so the task of removing it for the next version of Debian has begun. For now, it's mainly limited to leaf packages with nothing depending on them. As such, I've uploaded Python 3-only packages for new upstream releases of python-fluids (a fluid dynamics engineering & design library) and python-ulmo (provides clean & simple access to public hydrology and climatology data).

Debian Developer Application

I've finally applied to become a full Debian Developer, which is an exciting prospect. I'll be more able to enact improvements without having to bug, well, mostly Anton, Andreas, and Tobias. (Thanks!) I'm also looking forward to having access to more resources to improve my packages on other architectures, particularly arm64 now that the Raspberry Pi 4 is out and potentially a serious candidate for a low-powered FreeCAD workstation.

The process is slow and calculating, as it should be, so it'll be some time before I'm officially in, but it sure will be cause for celebration.

Google Summer of Code Mentoring

/images/gsoc.png

CC-BY-SA-4.0, Aswinshenoy.


I'm mentoring a Google Summer of Code project for FreeCAD this year! (See forum thread.) My student is quite new to FreeCAD and Debian/Ubuntu, so the first half of the project has involved relatively the deep-end topics of using Debian packaging to distribute bugfixes for FreeCAD and to learn by exploring related packages in its ecosystem. In particular, focus was given to OpenCAMLib, since there is a lot of user and developer interest in FreeCAD's potential for generating toolpaths for machining and manufacturing the models created in the program.

Now that he's officially swimming and not sinking, the next phase is working on making development and packaging-related improvements for FreeCAD on Windows, which is in even rougher shape than Debian/Ubuntu, but more his area of familiarity. Stay tuned for the final results!

Thanks to my sponsors

This work is made possible in part by contributions from readers like you! You can send moral support my way via Twitter @thekurtwk. Financial support is also appreciated at any level and possible on several platforms: Patreon, Liberapay, and PayPal.

My Free Software Activities in January & February 2019

Intro

Hello all and welcome again to another of my monthly summary posts on my work in free software, with a focus on open engineering in Debian & Ubuntu. I'm fortunate to have the February 12th Debian 10 soft freeze deadline to scapegoat for my missed January update, and thanks too to February for being short enough to postpone it further and combine the two updates.

I've decided to go with a bit of a dryer chronological approach to this update as there's lots to cover. Worth highlighting, however:

Highlights

  • New Debian upload for a FreeCAD 0.18 pre-release
  • New Debian upload for OpenFOAM. An upstream switch from openfoam.org to openfoam.com and a different versioning scheme results in a massive version bump, 4.1 to 1812. That's over 1800 versions better. (Seriously though, it's about a 2 year bump in changes.)
  • New Debian uploads for mesh generation softwares Gmsh 4.1.3 and Netgen 6.2.1810 -- though Netgen might miss Debian 10? It's stuck in the NEW queue.
  • FreeCAD is participating in Google Summer of Code and I'm looking for a student to mentor

Timeline

January

  • Jan 6: Updated the FreeCAD bug tracker to the latest version.
  • Jan 12: Completed transition of FreeCAD PPAs to new versions of Coin3D & its Python bindings package Pivy, which resolved a major breakage caused by me on Dec 29 but was a necessary precursor to a FreeCAD 0.18 release; I just didn't execute it as well as I should have
  • Jan 16: Upload of OpenFOAM 1812.
  • Jan 18: Discussed on GitHub with the upstream of OpenCAMLib about release plans now that it is Python 3 compatible
  • Jan 19: Contact via GitHub issue with libMesh upstream about Debian packaging, with enthusiastic response.
  • Jan 19: FreeCAD pull request to fix Start Workbench behavior in Debian/Ubuntu since we can't include binary .FCStd examples, even though they're glorified ZIPs, for Debian Free Software Guidelines reasons (or can we? please contact me if you know otherwise)
  • Jan 25-27: Hosted Austin Debian Bug Squashing Party. Unfortunately, it wasn't very successful in drawing in people besides those already interested in Debian at the host venue, the ATX Hackerspace. I didn't want to over-advertise it since the venue was limited in capacity, which in retrospect was a mistake. Oh well, there was also plenty to learn for the next one. The following bugs were closed: 918479, 888026, 884092, 886538, 882510, 899099, 920525, 919711.
  • Jan 26: Announced the experimental staging.freecad.io, an instance of FreeCAD's homepage designed to test possible improvements to be had by moving away from shared hosting
  • Jan 28: Contact via GitHub issue with sfepy upstream about it failing to build from source to try to get help on issue potentially preventing it from being included in Debian 10.

February

  • Feb 4: Sponsored uploads of FreeCAD 0.18 pre-release and Gmsh 4.1.3 into Unstable, thanks Anton Gladky.
  • Feb 4: Announced tracker.freecad.io, an experimental instance of FreeCAD's bug tracker designed to test possible improvements to be had from moving away from shared hosting
  • Feb 5: Regained control of abandoned FreeCAD Snap, which was a pre-release of 0.17, by way of the uploader returning from MIA and adding me.
  • Feb 9: Merge PR for FreeCAD-Homepage repo to add Expires headers and unset ETags to try to get better performance
  • Feb 13: Confirmed sfepy upstream fix resolved the issue, but it came a day after the soft freeze preventing re-entry to Testing.
  • Feb 23: Upload of python-fluids 0.1.73, experiment with Salsa GitLab CI.
  • Feb 25: Google Summer of Code organizations announced. FreeCAD participating under umbrella organization OpenCAx led by BRL-CAD. I created a GitHub issue for the project I'd like to mentor. I'm looking for a student interested in improving the state of Debian & Ubuntu packaging for FreeCAD and its ecosystem of packages. Particularly -- not everyone's first encounter with FreeCAD is with the latest and greatest version. If someone installs an old version and has a bad experience with an easily fixable packaging bug, we should try to tackle that issue to not drive away people who are already interested, but get a bad impression.
  • Feb 25: Sponsored upload of Netgen to Unstable, thanks Anton Gladky. Netgen had to re-enter NEW because I made a mistake in the naming of the binary package, so I had to revise the package to make libnglib-6.2 (for the .1810 release) replace libnglib-6.2.1804.
  • Feb 25: Sponsored upload of pycollada which adds Python 3 support and a python3- package, so it has to pass through NEW again.
  • Feb 28: Upload of OpenCASCADE, revising the package to revert to the default 'opencascade' installation paths instead of 'occt' (a not-so-great packaging decision as OpenCASCADE was my 2nd ever Debian package)

Sponsorship

Verbal support by way of my contact info below is greatly appreciated, but if you want to help support my free software & open engineering work financially, I've made it easy with several options:

Any level of support is appreciated!

Contact

You can follow me on Twitter @thekurtwk.

I'm also now on Matrix, an open network for secure, decentralized communication, @kkremitzki:matrix.org.

Free Software Activities in December 2018

Hello again for another of my monthly updates on my work on Debian Science and the FreeCAD ecosystem.

There's only a few announcement items since I was mostly enjoying my holidays, but several important things were accomplished this month. Also, since there's not much time left before the release of Debian 10, there's some consideration to be done towards what I'll be working on in the next few months.

gmsh bugfix; no gmsh 4 yet

/images/dec18-gmsh.png

At the beginning of the month, I uploaded gmsh 3.0.6+dfsg1-4. This had a patch submitted by Joost van Zwieten (thanks!) to fix Debian bug #904946 which was preventing gmsh usage in FreeCAD, as well as adding an autopkgtest to make sure that behavior remains.

New Coin3D transition; Pivy uploaded!

/images/dec18-coin3d.jpeg

Near the middle of the month, Leo Palomo-Avellaneda, Anton Gladky, and I finished the transition for the coin3 package, which is a scene graph library and high-level wrapper of OpenGL. The new version is a pre-release coin3 4.0.0 which adds CMake support. It also fixes Debian bug #874727 which caused FreeCAD to segfault when importing an SVG. FreeCAD also uses pivy, a Python wrapper for coin, as a runtime dependency, and completing this transition has finished the last blocker for a Python 3 FreeCAD package, so thanks to Leo and Anton!

New release for med-fichier (not by me)

/images/dec18-HDF.svg

Another FreeCAD dependency had a new release this month, med-fichier 4.0.0. This software is developed by Électricité de France and built on the HDF5 library and file format but is specialized for mesh data. It is also a dependency of gmsh which introduced some difficulty for the gmsh package.

OpenFOAM upstream switch; from openfoam.org to openfoam.com

/images/dec18-openfoam.jpg

The final noteworthy item for this month was an interesting bit of correspondence I received concerning the OpenFOAM package. As I had mentioned in previous posts, the current OpenFOAM version in Debian is 4.x, and I had worked on updating the package for OpenFOAM 6.x. My packaging was working and complete last summer, but for an inexplicable reason it stopped building late summer, started building again for about a week in September, and then stopped again. I would really like an up-to-date OpenFOAM in Debian 10, and so when I received an email from the people at openfoam.com about packaging their version, I was very intrigued. You see, the version in Debian is currently from openfoam.org. Besides the TLD difference, there is a bit of history between the two versions, but for end users there should major difference. If you're interested in more background, you can consult this video by József Nagy.

Similarly, it seems likely that the OpenFOAM package will be changing over to the openfoam.com version soon. I've already succesfully built the latest OpenFOAM from this source, version 1812, and plan to submit it soon.

Thanks to my sponsors

This work is made possible in part by contributions from readers like you! You can send moral support my way via Twitter @thekurtwk. Financial support is also appreciated at any level and possible on several platforms: Patreon, Liberapay, and PayPal.

Free Software Activities in November 2018

Intro

Welcome to another of my monthly summaries on my work in the free software world. My mission is to make engineering and science available for everyone, and Debian, the Universal Operating System, is my weapon of choice.

I received some feedback on my last post that I made it seem I would be stepping away from my role maintaining FreeCAD and other packages on the Debian Science Team, which was an unfortunate miscommunication on my part. Mainly, I just would like to reduce the proportion of my overall free software time on it, from its current amount, nearly 100%, to a roughly even 1/3rd split between Debian Science, FreeCAD, and PostCAD. The latter is a promising personal project to make an OpenCASCADE-powered CAD extension for PostgreSQL, bringing support for CAD file formats, datatypes, and algorithms to the powerful Postgres ecosystem, similar to what PostCAD has done for geospatial analysis. This could serve as a backend for both FreeCAD in the short term, and in the long term, it could power a web-based version of FreeCAD, perhaps with some Django-powered middleware serving a REST API for some WebGL-based frontend.

So, besides summarizing my work this month, I also plan to give a synopsis on my Debian packaging, for both what's in-progress and on my wishlist. As you'll see, it's quite extensive. My hope is that by whittling away at both lists, my Debian Science work can focus more on maintenance of existing packages, and free up some time for other things.

Sponsors

My work on Debian Science, FreeCAD, and PostCAD is supported by my patrons on Patreon <https://patreon.com/kkremitzki>. While I had created a Liberapay a while back, I never got any traction with it, and I found out recently that it was because I had not set it up to actually receive payments. So, if you don't like Patreon for whatever reason, you can also support me on Liberapay. Just to round things out, if you don't like either of those platforms, you can also help support my work via PayPal.

Transition for coin3

Coin3D is a scene graph library and a fundamental part of FreeCAD. Unfortunately, it hasn't had a release since 2011, but development has been picking up recently, so it's likely that a release is not too far off. Even without a formal release, several improvements have been made including CMake support, so it's time to prepare a transition in advance of the Debian 10 release. Luckily, Leo Palomo-Avellaneda has taken the initiative of getting this transition started.

Currently, the new Coin3D package is available in Debian Experimental as we prepare the reverse-dependencies to build against it. For FreeCAD, we directly depend on Pivy, which are Python bindings for Coin. Pivy, in turn, depends on Coin and SoQt, which is a Qt GUI component toolkit library for Coin. A pre-release version of SoQt is also being packaged since, like Coin, CMake support has been added, as well as support for Qt 5.

Unfortunately, I've been grinding my gears on building Pivy against the new Coin and SoQt for a good part of this month, which is especially troublesome since FreeCAD's transition to Python 3 is blocked by the upload of a new Pivy, which I prepared earlier this year.

With any luck, I'll be able to help Leo finish the Coin and SoQt transition and have Pivy prepared in December.

Gmsh Update

Gmsh is a 3D finite element mesh generator with built-in pre- and post-processing facilities. It's also one of the main meshers used by FreeCAD's Finite Element Modeling Workbench, besides Netgen.

Currently Debian has Gmsh 3.0.6, but a new major version was released in August. I've already prepared this new major version for testing in FreeCAD's Community Extras PPA, but I hadn't cleaned up the packaging yet to submit to Debian. However, in November, there were two point releases, 4.0.5 and 4.0.6, so I wasn't able to complete this work this month, but I'm sure it'll be done in early December.

One major piece of information regarding Gmsh 4 is a change in the API: the libjava-gmsh3 package in Debian was never meant to be a public API, and so Gmsh upstream has requested that we no longer ship it. To offset this, there have been refinements for the actual public API, which officially comes in C, Python 3 and (new) Julia flavors. However, I haven't found much information on Julia packaging in Debian, so I'll likely hold off on that package.

PySide 2 Rebuild & PPA Plans

Since FreeCAD is an LGPL-licensed Qt project, we must use PySide and not PyQt to do Qt things with Python. Because of this, the FreeCAD migration to Qt 5 on Debian was blocked by the packaging of PySide 2, which was completed by Freexian SARL over the summer. In Debian, we now have a Qt 5-enabled FreeCAD, although our daily builds PPA is still using Qt 4.

Besides the Qt 4->5 transition, we're also finishing up a Python 2->3 transition. At the end of the summer I published a freecad-python3 package in the PPA which also used Qt 5. However, it wasn't really fully usable, moreso a proof-of-concept that such a build indeed buildable.

At this point, the Debian FreeCAD package has begun to diverge from the FreeCAD PPAs; besides Qt 5 builds not being available currently, the Debian package has also been split into several packages (e.g. libfreecad, freecad-common, etc. packages) in order to better comply with Debian Policy and the Filesystem Hierarchy Standard.

So, there's a bit of work to do to catch the PPAs up. First, the package split needs to be done. Then, I need to upload an alternative freecad-daily package for Qt 5 builds, separate from Python 3. Once that is done and has undergone some testing, freecad-daily can be replaced by it, and it in turn can be replaced by a freecad-python3 package for further testing. Since FreeCAD's 0.18 release is imminent, I'll need to get this taken care of during December, so stay tuned.

Packaging in Progress

My first packaging list is all the software I've already started packaging. For some, it's almost complete, and for others, I've only just begun.

The purpose of these lists is not to give status updates, but to announce what all I'm interested in to anyone reading this, and to give an idea of how much packaging work I have in mind to improve this usage of Debian.

cantera

Homepage, GitHub

Cantera is an open-source suite of tools for problems involving chemical kinetics, thermodynamics, and transport processes.

I had this package working and waiting to be sponsored, but it looks like it currently fails to build from source, so this just requires some maintenance.

coolprop

Homepage, GitHub

CoolProp is a thermophysical property database and wrappers for a selection of programming environments. It offers similar functionality to REFPROP, although CoolProp is open-source and free.

This package was previously building completely, but failing when one would attempt to do an import coolprop. Now that it's been a while since I worked with it, it seems to be failing to build.

elmerfem

Homepage, GitHub

Elmer is a finite element software for numerical solution of partial differential equations. Elmer is capable of handling any number of equations and is therefore ideally suited for the simulation of multiphysical problems. It includes models, for example, of structural mechanics, fluid dynamics, heat transfer and electromagnetics. Users can also write their own equations that can be dynamically linked with the main program.

This was previously in Debian but removed due to abandonment, so a great deal of the work is already done, but it also requires quite a bit of updating to current Debian standards.

if97

PDF Standard, GitHub

Open-source C++ implementation of the IAPWS-IF97 equations to calculate properties of the pure water substance.

This is a dependency of CoolProp, and I already have it packaged and waiting for sponsorship at https://salsa.debian.org/science-team/if97.

ifcopenshell

Homepage, GitHub

IfcOpenShell is an open source (LGPL) software library that helps users and software developers to work with the IFC file format. The IFC file format can be used to describe building and construction data. The format is commonly used for Building Information Modelling. IfcOpenShell uses OpenCASCADE internally to convert the implicit geometry in IFC files into explicit geometry that any software CAD or modelling package can understand.

I already have this packaged and awaiting sponsorship at https://salsa.debian.org/kkremitzki-guest/ifcopenshell.

It's also available on the FreeCAD Community Extras PPA.

ifcplusplus

Homepage, GitHub

IfcPlusPlus is an open source C++ class model, as well as a reader and writer for IFC files in STEP format. It features easy and efficient memory management using smart pointers, a parallel reader for fast parsing on multi-core CPU's, and a simple IFC viewer application using Qt and OpenSceneGraph.

I already have this packaged and awaiting sponsorship at https://salsa.debian.org/kkremitzki-guest/ifcplusplus.

It's also available on the FreeCAD Community Extras PPA.

opencamlib

Homepage, GitHub

OpenCAMLib (OCL) is a C++ library with Python bindings for creating 3D toolpaths for CNC-machines such as mills and lathes.

I already have this packaged and awaiting sponsorship at https://salsa.debian.org/science-team/opencamlib.

It's also available on the FreeCAD Community Extras PPA.

openvoronoi

Homepage, GitHub

2D voronoi diagram for point and line-segment sites using incremental topology-oriented algorithm. C++ with Python bindings.

I already have this packaged and awaiting sponsorship at https://salsa.debian.org/kkremitzki-guest/openvoronoi.

It's also available on the FreeCAD Community Extras PPA.

projectchrono

Homepage, GitHub

C++ library for multi-physics simulation. The applications areas in which Chrono is most often used are vehicle dynamics, robotics, and machine design. In vehicle dynamics, Chrono has mature support for tire/terrain interaction modeling and simulation.

I've only roughly begun packaging this, and I'm already tired of typing libprojectchrono. Anyway, it's a rather large set of components which will be broken up into several packages. Luckily, things are done in a pretty normal way so I don't imagine this will be difficult to finish packaging, just a little time-costly.

smesh

GitHub

A stand-alone library of the mesh framework from the Salome Platform

I've gotten this standalone version of SMESH packaged and awaiting sponsorship at https://salsa.debian.org/kkremitzki-guest/salome-smesh. Eventually, I want to package the entire Salome Platform, but it's extremely large and really several source packages. Packaging this as an intermediate step allows us to remove SMESH from FreeCAD's included sources.

It's also available on the FreeCAD Community Extras PPA.

xcfem

Homepage, GitHub

XC is an open source FEA program designed to solve structural analysis problems.

This library is supposed to be an alternative to the not-quite-freely licensed OpenSees, which is used in seismic research and analysis. There has been some interest in the FreeCAD forums about using this, so I'm beginning packaging it in advance. However, it seems a bit complicated as it requires multiple sources, the GitHub xcfem/xc repo as well as xcfem/xc_utils.

Wishlist Packages

2geom

Homepage, GitLab

lib2geom (2Geom in private life) was initially a library developed for Inkscape but will provide a robust computational geometry framework for any application. It is not a rendering library, instead concentrating on high level algorithms such as computing arc length.

I looked at this package and it seemed like it will be straightforward to package, and with the parent project's popularity, someone else may get to it first.

bimserver

Homepage, GitHub

The Building Information Model server (short: BIMserver) enables you to store and manage the information of a construction (or other building related) project. Data is stored in the open standard IFC. The BIMserver is not a fileserver, but it uses a model-driven architecture approach. This means that IFC data is stored in an underlying database. The main advantage of this approach is the ability to query, merge and filter the BIM-model and generate IFC files on the fly.

The integration of BIM with FreeCAD is a very promising endeavor, and letting FreeCAD be the client in a client-server model provides many potential benefits. (This is the reason I'm working on PostCAD.) Packaging BIMserver is a natural decision, then. However, it's a Java application, which I have little experience with language-wise and none in terms of packaging it in Debian, so this one has a bit of a difficulty associated with it.

cadquery

Homepage, GitHub

CadQuery is an intuitive, easy-to-use python based language for building parametric 3D CAD models. CadQuery is for 3D CAD what jQuery is for javascript. Imagine selecting Faces of a 3d object the same way you select DOM objects with JQuery!

CadQuery is an interesting project which actually makes use of FreeCAD, and indeed FreeCAD even has a CadQuery Workbench. This would be nice to package as a way of extending the FreeCAD ecosystem on Debian.

Unfortunately, CadQuery 2 is planning on moving away from FreeCAD to PythonOCC, which is based on the now behind-the-times OpenCASCADE Community Edition fork, based on OpenCASCADE 6.9.1; FreeCAD and other projects are moving back to the mainline OpenCASCADE Technology project which is about to release version 7.4.0. It would be nice if both CadQuery and FreeCAD could instead move to use PyOCCT as a middle-layer between itself and OpenCASCADE.

libreoffice-code-highlighter

Homepage, GitHub

This extension highlights the code snippets for over 350 languages in LibreOffice.

I have packaged a LibreOffice extension before, and it was fairly easy, so I expect this one will be too. However its priority is rather low.

lib3mf

Homepage, GitHub

Lib3MF is a C++ implementation of the 3D Manufacturing Format file standard.

This seems like a straightforward library to package, but there is no pressing need as FreeCAD does not support it yet.

muesli

Homepage, BitBucket

MUESLI, a Material UnivErSal LIbrary, is a collection of C++ classes and functions designed to model material behavior at the continuum level. Developed at IMDEA Materials, it is available to the material science and computational mechanics community as a suite of standard models and as a platform for developing new ones.

This seems like a great candidate package for Debian Science but I have had some difficulty building it, which I need to conquer before packaging can begin.

cling

Homepage, GitHub

Cling is an interactive C++ interpreter, built on top of Clang and LLVM compiler infrastructure. Cling realizes the read-eval-print loop (REPL) concept, in order to leverage rapid application development. Implemented as a small extension to LLVM and Clang, the interpreter reuses their strengths such as the praised concise and expressive compiler diagnostics.

cling is an incredible project which should have been packaged already. Hopefully someone else gets to it first.

dpkg-licenses

GitHub

A command line tool which lists the licenses of all installed packages in a Debian-based system (like Ubuntu)

This is a small script which gives a summary of the licenses used by the installed packages on your system--a good way to audit packages, e.g. forbidding AGPL.

landlab

Homepage, GitHub

Landlab is a Python-based modeling environment that allows scientists and students to build numerical landscape models. Designed for disciplines that quantify earth surface dynamics such as geomorphology, hydrology, glaciology, and stratigraphy, it can also be used in related fields.

Landlab provides components to compute flows (such as water, sediment, glacial ice, volcanic material, or landslide debris) across a gridded terrain. With its robust, reusable components, Landlab allows scientists to quickly build landscape model experiments and compute mass balance across scales.

Landlab is another interesting Debian Science candidate but I have no pressing need to package it.

nikola

Homepage, GitHub

A static website and blog generator, written in Python.

Nikola is what I use to create this blog, but it's somewhat fast moving and a slow maintainer in Debian previously caused problems, so I don't want to pick this up until I've leveled up my package maintenance.

osifont

Homepage, GitHub

In some European countries, CAD projects must have font which conform to IS0 3O98 specification. Commercial CADs has this font, but free CADs not. There is no available free font yet, so this project will fix this. This font will be created completely from the scratch. Font is created with free tools like FontForge, Inkscape, Gimp. Font is available under 3 licences: GNU GPL licence version 3 with GPL font exception, GNU GPL licence version 2 with GPL font exception, GNU LGPL licence version 3 with GPL font exception.

This is a bundled font with FreeCAD, so I'd like to separate into its own package. However, the need to package it is not pressing, so I haven't picked it up.

pigpio

Homepage, GitHub

pigpio is a C library for the Raspberry which allows control of the General Purpose Input Outputs (GPIO).

This is an important tool for teaching with Raspberry Pi's and should be packaged as soon as possible, I've just had more pressing concerns.

piscope

Homepage, GitHub

A logic analyser (digital waveform viewer). piscope uses the services of the pigpio library. pigpio needs to be running on the Pi whose gpios are to be monitored.

Being able to see the waveform of a GPIO pin on a Raspberry Pi is incredibly useful for teaching robotics and electrical engineering classes with them. This also needs to be packaged.

pyocct

GitHub

The pyOCCT project provides Python bindings to the OpenCASCADE 7.2.0 geometry kernel and SMESH 8.3.0 meshing library via pybind11. Together, this technology stack enables rapid CAD/CAE application development in the popular Python programming language.

This is a very promising library for Python OpenCASCADE development, so I'd like to get it packaged, but it's blocked by getting SMESH packaged.

pyray

GitHub

A 3D rendering library written completely in Python.

A promising library for integrating raytracing functionality directly into FreeCAD, and for general raytracing in Python.

quarter

BitBucket

Quarter is a light-weight glue library that provides seamless integration between the Coin high-level 3D visualization library and Qt's 2D user interface library. The functionality in Quarter revolves around QuarterWidget, a subclass of QGLWidget. This widget provides functionality for rendering of Coin scenegraphs and translation of QEvents into SoEvents. Using this widget is as easy as using any other QWidget.

FreeCAD already uses an included (and slightly modified) copy of Quarter in its source, so I'd like to package Quarter in a standalone fashion as part of moving FreeCAD away from bundled copies in its source.

rebound

Homepage, GitHub

REBOUND is an N-body integrator, i.e. a software package that can integrate the motion of particles under the influence of gravity. The particles can represent stars, planets, moons, ring or dust particles. REBOUND is very flexible and can be customized to accurately and efficiently solve many problems in astrophysics.

This seems like a really great library to have in Debian Science, but it's not a priority.

sqlint

GitHub

SQLint is a simple command-line linter which reads your SQL files and reports any syntax errors or warnings it finds.

At this stage, SQLint checks SQL against the ANSI syntax, and uses the PostgreSQL SQL parser to achieve this. In time, we hope to add support for non-standard SQL variants (e.g. MySQL). Contributions are welcome.

This would be a very useful utility to have in Debian, but I always write SQL without flaw the first try. (wink)

swatmodel

Homepage, GitHub

The Soil & Water Assessment Tool is a small watershed to river basin-scale model used to simulate the quality and quantity of surface and ground water and predict the environmental impact of land use, land management practices, and climate change. SWAT is widely used in assessing soil erosion prevention and control, non-point source pollution control and regional management in watersheds.

SWAT is a powerful research tool in agricultural engineering, among several others I'm interested in eventually packaging for Debian. The planned package will be based on a CMake-enabled fork of the upstream source, which is built with Intel's Fortran compiler by default and also had to be adapted for gfortran.

wger

Homepage, GitHub

Self hosted FLOSS fitness/workout and weight tracker written with Django

This is a very promising application which could be used as both a fitness tracker as well as a weight/nutrition tracker, something along the lines of a self-hosted MyFitnessPal. However, my other packaging priorities outweigh this at the moment.

Conclusion

So, there you have it! My mostly complete list of in-progress and wishlist items for Debian packaging. If you have any feedback on packages on the list, or want to get in touch with me, you can find me on Twitter or send me an email at kurt at kwk.systems. I'll also be starting to stream my Debian & FreeCAD work very soon, subscribe to me on Twitch to get notified when I go live.

Free Software Activities in October 2018

Intro

Welcome to another monthly summary of my free software work. Currently I'm focusing on improving the state of packaging for FreeCAD and its ecosystem of dependencies and related packages in Debian Science. Additionally, I recently revived the FreeCAD Community Extras PPA as a way of staging these packages out to users for testing. If you are a FreeCAD user, developer, or simply a user of one of these packages, I would greatly appreciate your feedback and testing to identify bugs while my packages wait to make it into the Debian archive.

However, in the long-term, I plan to move away from spending so much time on Debian packaging and returning to FreeCAD core development, and a special not-so-secret related project: PostCAD, providing OpenCASCADE geometry & topology bindings plus CAD data and filetype format support for PostgreSQL, a la PostGIS. The goal is to build this out as a rich backend which FreeCAD can talk to about neat CAD stuff. It's a heaping of work, though, so I don't expect to have a public release until mid or late 2019.

I would like to find others who are interested in contributing to FreeCAD ecosystem packaging for mentorship. That way, my efforts are maintained by the community and the quality and availability of packages won't wane with my attention on them. Since FreeCAD participates in Google Summer of Code, this would be a great opportunity for interested university students to learn Debian packaging and improve the state of science & engineering software on Debian.

Anyway, on to my summary!

Debian News

This month, I officially became a Debian Maintainer. This is a basic level of formal membership in the Debian project, and it comes with limited upload rights to the archive. I can only upload packages for which I am marked as a maintainer, for example FreeCAD.

I took advantage of this to upload some improvements for FreeCAD which I had been sitting on. After a few tweaks, the package was ready for an upgraded upload from Experimental to Unstable, which begins the process of candidacy for Testing, the release pocket for the upcoming Debian 10.

Debian FreeCAD Gets Qt 5

/images/freecad-qt5.png

Most important about this upload, though was that FreeCAD is finally being built with Qt 5 support. While Qt 5 had been working for quite a while, we were waiting on a dependency to be uploaded to Debian, PySide 2, which finally was uploaded this summer. Because this is a big switch to flip, any testing and reporting of bugs for this Debian package would be appreciated!

FreeCAD Package Structure Reorganization

One of the other major packaging changes for FreeCAD 0.17 is that the package is no longer a single, monolithic freecad package. We now have:

  • a freecad metapackage, which installs the other packages
  • common files and resources (e.g. images) in freecad-common
  • freecad-runtime contains Python 2/3 compatible runtime files
  • the executable built against Python 2, freecad-python2
  • and the library files used by the executable, libfreecad-python2-0.17

There are several advantages to this approach. The first is that since freecad-common and freecad-runtime are just pictures, Python scripts, and the like, we can save space in the archive by only needing one copy of the package, instead of one for each supported architecture. For freecad-python2 and libfreecad-python2-0.17, one can see the advantage in the name: since these are Python 2 specific, we will soon be able to provide their Python 3 counterparts.

Ideally, by the time of the Debian 10 release, the FreeCAD 0.17 package will provide both Python 2 and 3 supported versions, and which one you want to use can be switched between using the alternatives system, which I will explain later in this post.

FreeCAD Python 3 Imminent

Like Qt 5, FreeCAD has supported Python 3 for quite some time. (Workbenches and 3rd party code are another story.) However, in Debian, a Python 3-enabled FreeCAD package is blocked by the pending upload of pivy 0.6. I helped coordinate the upstream release of this package but due to issues with its dependency Coin3D the upload is stalled until those issues are resolved.

Community Extras PPA - Early Packge Previews

Now that we have the Community Extras PPA, it serves as a convenient location for me to upload packages as soon as I have one completed and ready for testing. Here are my uploads this month.

Gmsh 4

/images/gmsh-airplane.png

Gmsh has released a major version upgrade, which includes removing the experimental Java API and introducing Julia bindings, although this package doesn't do anything with them. The current version in the Debian archives is 3.0.6.

This package is only available on Bionic (Ubuntu 18.04) due to its dependencies. I hadn't tried on Cosmic (Ubuntu 18.10) since I worked on this in the beginning of October and it wasn't released yet.

Calculix 2.14

/images/calculix-turbocharger.jpeg

CalculiX in Debian is currently several versions behind (2.11) so I got a request to package this. However, CalculiX actually spans several packages, but calculix-ccx, the solver, is the only one used by FreeCAD, so unlike the other packages, this one is not quite ready for Debian until the other ones are done as well, since they are separate source packages.

This package is available on Bionic and Xenial (Ubuntu 16.04).

Translated FreeCAD-Doc Packages

One of the big areas for improvement in FreeCAD is the state of its documentation, and I'm glad to announce that one big improvement is on its way. I have been working on a standalone freecad-doc package, since it was removed from the Debian archive for being derived from pre-compiled binary files. This package involves using a local synced copy of the FreeCAD Wiki text and images, and using the script that was used to generate the aforementioned binary files.

The main improvement my package offers is support for the two most complete translations of the FreeCAD wiki, French and Italian. This is accomplished by making freecad-doc a metapackage which depends on any one of freecad-doc-en, -it, or -fr being installed. Then, the relevant files in freecad-doc upon which freecad will call are in fact managed symlinks to the appropriate translations. The symlinks are managed by the DebianAlternatives system (see update-alternatives(1).)

In order to switch between translations if more than one is installed, you can run sudo update-alternatives --config freecad-doc. This will control the in-program help for FreeCAD, so when you click the "What's this?" button, the resultant help page will be the translated version.

Additionally, compiled PDFs of the FreeCAD help are provided for all three languages.

One result of the nature of this package is that it is quite large: each freecad-doc translated package weighs in about 300 MB so the combined size is about 1.2 GB, per Ubuntu distribution.

As a result, this package is only available on Bionic and Xenial.

PyCOLLADA 0.6, now with Python 3!

/images/collada.jpeg

Another package which is fairly out of date in Debian (version 0.4 present), I decided to update it since pycollada is a dependency of FreeCAD and I am intrigued by the possibilities of the COLLADA (COLLAborative Design Activity) format. This allows for interchange with interactive 3D applications like Blender.

The big news with this package is that Python 3 support is now available, so I updated the source packaging to provide both Python 2 and 3 packages.

Again due to dependencies, it's only available on Cosmic and Bionic.

Sponsors

My work on Debian Science and FreeCAD is supported by my patrons at https://patreon.com/kkremitzki. Thank you all very much!

If you appreciate my work as described in this post, any level of support is greatly appreciated, including moral support!

Social Media

You can follow me on Twitter at @thekurtwk. I'm also currently working on a Twitch streaming setup, which I hope to have ready by the end of the year! I'll be trying out some live programming, engineering, and Linux gaming. You can find me at twitch.tv/kkremitzki.

Free Software Activities in September 2018

Hello all, unfortunately my update comes late again this month, although I have good reason! I just finished landing a job as a scientific software developer. From the looks of it, I'll mostly be working on things from a systems engineering perspective, but it'll be in the context of the scientific Python ecosystem as well as involving Qt. This is nice in that while I will have less free time to spend on FreeCAD, it will almost certainly be of increasingly higher quality.

Another interesting benefit of the job is that it will allow me to move back to Austin, which has the very well-equipped hackerspace ATX Hackerspace. I look forward to joining and having a chance to finally experiment with FreeCAD's CNC integrations, and to have a great space to hack on hardware and software.

Now, finally, to summarize what I've worked on in the month of September.

  • I created a thread on the FreeCAD forums to announce the revival of the FreeCAD Community Extras PPA. This will be used to host packages of interest to the FreeCAD community, and things that need testing for possible future inclusion in FreeCAD. In retrospect, I should have used this PPA to get testers for the packages I was working on during my last Google Summer of Code.
  • To this FreeCAD Community Extras PPA, I uploaded packages for:
    • OpenCAMLIB, a C++ library with Python bindings for creating 3D toolpaths for CNC machines such as mills and lathes.
    • OpenVoronoi, another C++/Python library for 2D Voronoi diagrams for point and line-segment sites.
    • Laughlin Research's standalone SMESH, the Salome meshing framework.
    • Netgen's latest release, 6.2.1807, a 3D tetrahedral mesh generator.
    • IfcOpenShell, an open source Python IFC library and geometry engine.
    • IfcPlusPlus, an open source C++ class model, reader, and writer for IFC files with simple Qt/OpenSceneGraph viewer application.
  • I have long been interested in having CAD database support, and I spent quite a bit of September working with my friend on research and initial work for this. From what we've found, we can feasibly have a PostgreSQL extension similar to PostGIS, but for CAD: PostCAD. This would mainly involve a marriage between OpenCASCADE, the C++ geometry and topology kernel of FreeCAD, and libpqxx, the official C++ client library for PostgreSQL. The potential for such an extension would be huge, with all the power and features of PostgreSQL with an understanding of CAD data and geometry. For example, FreeCAD could interface with this database, and have the database take care of things like editing locks for models, permissions for readingn and writing of models, and so forth. Furthermore, by creating a database-level abstraction for CAD, that opens the way for web abstractions for CAD, similar to GeoDjango's GIS extensions for Django. That work could one day pave the way for a web interface for FreeCAD.

As always, if you appreciate the work I do with FreeCAD, the Debian Science Team, and Open Engineering on Linux, any level of support would be appreciated on my Patreon! Currently this money helps offset server costs for some of the experimental FreeCAD community stuff. I would like to continue to use it to offset my costs for FreeCAD development and equipment. If I can reach my current goal of $100/month, I'd like to use it to purchase a Pinebook, a $99 ARM64 laptop which I could use for FreeCAD & Debian ARM development. I'd really like FreeCAD to be usable (and not painfully slow) on ARM since its low-cost nature means it is highly available for educational institutions. Maybe one day I'll even be able to afford milling/CNC equipment so I can see just how far FreeCAD integration can take us!

Free Software Activities in August 2018

Hello all! After reading some of the nice activity logs published by members of the Debian Project at https://planet.debian.org, I've decided to publish my own version. This will mostly be my work on FreeCAD and Debian, but will also include other points of note from my many interests. I'll also include relevant activities for my supporters on Patreon

As covered in my previous post, most of the first half of August was spent finishing my Google Summer of Code project for FreeCAD, which largely turned into "packaging for the Debian Science Team" since FreeCAD's dependency chain and options for integration are so vast. However, the nature of the work is highly parallel. For example, when packaging, most issues occur either almost immediately into the build, or after the build has finished. This means that after an initial bit of packaging work that allows a build to actually proceed, one then has to launch the build and wait anywhere from a few minutes to a few hours to see the next issue arise. So, as a result, I worked on many packages in parallel. A negative consequence of this was that I somewhat overloaded my plate in terms of things I can handle, so in actuality this meant I would work on a handful of packages on several machines at once, and then once those issues were largely resolved I would move onto another handful, rather than really juggling them all at once.

After finishing GSoC, I first turned my attention to two of the packages I had worked on in parallel, python-fluids and python-ulmo.

python-fluids

I made a new upload for this package to correct several issues. Here's an excerpt from the changelog:

* [1215102] Make python-fluids-doc Multi-Arch: foreign
* [eb610fd] Correct Vcs-* fields
* [62570cd] Updated to Standards-Version 4.2.0, no change required
* [29e96a7] Correct debian/watch
* [3e90d05] Add missing scipy dependency
* [cd776a2] Add lintian override for
  package-contains-documentation-outside-usr-share-doc

The package still fails some reproducibility tests on i386 and could use a standards version bump, but other than that, this package is almost completely clean now! It's quite satisfying cleaning up these packages.

python-ulmo

I made an upload for this package as well:

* [7150daa] Correct Vcs-* fields
* [027b50b] Mark python-ulmo-doc as Multi-Arch: foreign
* [d72b6f6] Add patch to fix FutureWarning

The package was failing its autopkgtests because Python was emitting a FutureWarning onto stderr. This package is actually fully reproducible, and only needs a standards version bump to be fully clean.

gmsh

On August 22nd, Gmsh 4.0.0 was released! The Java API was removed and a Julia one added. This is a nice release because in Debian bug #904946 it was found that the Gmsh package, after being updated to be built against OCCT instead of OCE, actually no longer worked when used in FreeCAD, giving the error:

Error   : Gmsh requires OpenCASCADE to import shape

My hope was that by updating to the new Gmsh version, this problem would resolve itself. However, I ran into a few problems and had to postpone finishing up.

netgen

On August 19th, Debian bug #906619 was reported against Netgen, which was an occasion to look at the state of the package. I noticed that upstream had released version 6.2.1807 (versus the current .1804) but it was not tagged in the Netgen repository, only as a submodule of the Ngsolve repository.

On August 31st, I packaged the new version and resolved the bug in science-team/netgen PR #9.

salome-smesh

Although technically not August, on September 3rd I pushed the nearly finished package for a standalone salome-smesh on Salsa which is fully functional except for an issue with the CMake config file. I submitted a pull request to support multi-arch for the package but forgot to update the path in the CMake config file, so the variables therein have to be manually set, or the file edited.

cantera

On August 24th, Cantera 2.4.0 was released:

Cantera is an open-source suite of tools for problems involving chemical kinetics, thermodynamics, and transport processes.

Previously there had been an issue with the build, where the packages would be made successfully, but attempting to import cantera in Python would error out, presumably due to the way an included copy of libfmt was handled during the build. However, the issue is no longer present, so I now have a working Cantera 2.4.0 package! The only shortcoming is that I don't have working docs build yet, so this package didn't make it in time for August.

openfoam

Previously I had submitted a pull request for OpenFOAM 6 to the Debian Science Team, but spontaneously the package began to fail, presumably due to some change in a dependency. I spent some time troubleshooting this issue but haven't found a resolution yet. Here's a snippet of the build failure:

Allwmake src/Pstream
wmake dummy
wmakeLnIncludeAll: running wmakeLnInclude on dependent libraries:
    wmakeLnInclude: linking include files to /build/openfoam-6.20180805+dfsg1/src/OpenFOAM/lnInclude
    wmakeLnInclude: linking include files to /build/openfoam-6.20180805+dfsg1/src/OSspecific/POSIX/lnInclude
make[2]: Entering directory '/build/openfoam-6.20180805+dfsg1/src/Pstream/dummy'
wmakeLnInclude: linking include files to ./lnInclude
make[2]: Leaving directory '/build/openfoam-6.20180805+dfsg1/src/Pstream/dummy'
make[2]: Entering directory '/build/openfoam-6.20180805+dfsg1/src/Pstream/dummy'
Making dependency list for source file UOPwrite.C
realloc(): invalid next size
make[2]: *** Deleting file '/build/openfoam-6.20180805+dfsg1/platforms/linux64GccDPInt32Opt/src/Pstream/dummy/UOPwrite.C.dep'
Making dependency list for source file UIPread.C
realloc(): invalid next size
make[2]: *** Deleting file '/build/openfoam-6.20180805+dfsg1/platforms/linux64GccDPInt32Opt/src/Pstream/dummy/UIPread.C.dep'
Making dependency list for source file UPstream.C
realloc(): invalid next size
make[2]: *** Deleting file '/build/openfoam-6.20180805+dfsg1/platforms/linux64GccDPInt32Opt/src/Pstream/dummy/UPstream.C.dep'

I'll have to continue investigating this one.

pyside2

I reported Debian bug #906020 about missing Python 3 CMake config files, which was fixed Aug 28th. I began investigating how this would Pivy builds, but got sidetracked by a problem with the med-fichier package.

freecad

I ran into some build issues trying to update the package now that my Debian Unstable workstation is running Qt 5.11:

error: invalid use of incomplete type ‘class QAction’
     QAction* action = new QAction(tr("Remove"), this);

There are several instances of this throughout the codebase that can basically be fixed with by adding some #include s.

projectchrono

There was a bit of discussion about utilization of Project Chrono, an open source multi-physics simulation engine, in FreeCAD. One problem with pursuing this is that it isn't packaged at all for Debian, which is rather surprising! It seems like high-quality software. I began looking at packaging it and it actually doesn't seem that bad. One of the main issues is actually the naming: it's really long! There's also a bit of worry about naming collisions I'll have to look into. As of now, I have a working package except for the Python bindings. Enabling them results in this failure in the build process:

[ 53%] Building CXX object src/demos/irrlicht/CMakeFiles/demo_IRR_soilbin.dir/demo_IRR_soilbin.cpp.o
cd /build/project-chrono-3.0.0/obj-x86_64-linux-gnu/src/demos/irrlicht && /usr/lib/ccache/c++  -DBP_USE_FIXEDPOINT_INT_32 -I/build/project-chrono-3.0.0/src -I/build/project-chrono-3.0.0/obj-x86_64-linux-gnu -I/build/project-chrono-3.0.0/src/chrono -I/build/project-chrono-3.0.0/src/chrono/collision/bullet -I/build/project-chrono-3.0.0/src/chrono/collision/gimpact -I/build/project-chrono-3.0.0/src/chrono/collision/convexdecomposition/HACD -I/usr/include/irrlicht  -g -O2 -fdebug-prefix-map=/build/project-chrono-3.0.0=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -fopenmp  -march=native -msse4.2 -mfpmath=sse  -march=native -mavx2  -march=native -mfma  -std=c++14 -pthread -fopenmp  -march=native -msse4.2 -mfpmath=sse  -march=native -mavx2  -march=native -mfma    -std=c++14 -pthread -fopenmp  -march=native -msse4.2 -mfpmath=sse  -march=native -mavx2  -march=native -mfma  -o CMakeFiles/demo_IRR_soilbin.dir/demo_IRR_soilbin.cpp.o -c /build/project-chrono-3.0.0/src/demos/irrlicht/demo_IRR_soilbin.cpp
/build/project-chrono-3.0.0/obj-x86_64-linux-gnu/swig/ChModuleCorePYTHON_wrap.cxx: In member function 'virtual void chrono::ChLogPython::Output(const char*, size_t)':
/build/project-chrono-3.0.0/obj-x86_64-linux-gnu/swig/ChModuleCorePYTHON_wrap.cxx:7610:23: error: format not a string literal and no format arguments [-Werror=format-security]
     PySys_WriteStdout(buffer);
                       ^~~~~~

opencamlib

There was a problem with this package's doc depends, which I fixed at the end of August. However, it's still awaiting sponsorship to be uploaded into the Debian archives.

med-fichier

The med-fichier package in Debian currently is built with autotools but somewhat supports CMake builds, which would be nice to switch to as it would provide CMake configuration files in libmedc-dev. I worked on updating the package, but currently building docs is broken, and for some reason, the Fortran library is being statically linked.

Planet FreeCAD

The planet-venus package in Debian is available for running your own RSS feed aggregation service. I wanted to set up a planet.freecad.io to provide exactly that. However, the current version of the package is broken, and it only works in Debian 7, a.k.a. old-old-stable.

I spent some time researching the state of the package, but it's fairly rough, and most importantly, upstream is far from active. I'd like to run the RSS service but fixing the package seems like a tall order.

freecad.io

We previously had two servers available to run some of the web services for the FreeCAD project, but sadly they rebooted but never came back online.

I'm now paying for a VPS in Frankfurt using the money from my Patreon. Unfortunately, it's a bit resource-strained from the FreeIPA server hogging things.

If you like my work as described above and would like to support me continuing to improve the state of open engineering on Linux, please contribute to my Patreon!

Google Summer of Code 2018 with FreeCAD

Hello all! This post is my final work product for GSoC 2018 for the FreeCAD project. The main center for communication for FreeCAD is the forums, but we also coordinated things through the #freecad channel on Freenode. The main thread for my project was here.

To summarize my project: FreeCAD is a complex application with an extensive dependency tree. The packaging situation has always trailed the tip of development, which means users don't get to see the best FreeCAD has to offer, and people trying to help new users have to deal with sometimes years-old bugs. The goal was to improve the general ecosystem of the FreeCAD stack, and to cut down on technical debt to make things easier moving forward. After some consideration it was decided to focus on Debian packaging since that would be the most 'ecologically good'.

I began with a rough knowledge of Debian packaging, but now feel competent enough to want to take over the maintenance of Debian packaging for FreeCAD and several other packages within the Debian Science Team, which will improve the free software engineering experience in Debian as well as its derivatives such as Ubuntu and Linux Mint. In fact, I plan on trying to offically become a Debian Maintainer and then Debian Developer. On the 4th of July during the middle of the project I drove to Houston for a GPG keysigning, so the wheels are already in motion.

This post will summarize my work throughout the summer chronologically, mostly linking to emails in the Debian Science mailing list, pull requests on Debian's Gitlab instance or Github, and to some repositories.

More detailed information can be found at https://salsa.debian.org/users/kkremitzki-guest.

Coding Period 0, Community Bonding Period (April 23 - May 14)

Coding Period 1 (May 14 - June 15)

  • Most of the first coding period was spent working on FreeCAD 0.17 packaging, as well as packaging Netgen 6.2.1804 and updating Gmsh to use OCCT, which I packaged prior to GSoC. I didn't finish them quite in time for submission within the first coding period. I also spent time working on packaging PySide 2, which is a dependency for FreeCAD's transition to Qt 5 & Python 3, but backed away after finding it was being worked on by others.
  • May 17: Netgen PR (Remove unnecessary backup files): https://github.com/NGSolve/netgen/pull/15
    • Preparation work for packaging Netgen, which is used as a mesher by FreeCAD.
  • May 25: Discussion of Netgen 6.2.1804 work: https://lists.debian.org/debian-science/2018/05/msg00101.html
    • This was just me announcing that I was working on this so as to help not duplicate work.

Coding Period 2 (June 15 - July 13)

Coding Period 3 (July 13 - Aug 14)

Now that GSoC is done I am excited to continue working within the Debian Science Team. Besides an upcoming FreeCAD 0.18 release, I have several packages I plan to make improvements to and to package for Debian, and ultimately to integrate into future FreeCAD workbenches as part of my plan to make it the ultimate 3D engineering toolbox!

Therefore, I must say thanks to the FreeCAD and Debian communities for working with me, and to my GSoC mentors and GSoC itself for providing me this wonderful opportunity. May it continue providing valuable opportunities for others for many years to come.

Looking Back on 2017

2017 has been an incredible year for me with lots of opportunities, but many challenges as well. In the spring, I got a (lab) teaching opportunity for a 50-student Measurement & Control of Biological Systems course, culminating in 17 teams making maze-solving autonomous robots. There's a higher level of mastery to be attained by teaching others, and in that regard, it was an incredible experience. Teaching, however, is well outside my comfort zone, and in that regard it had some difficulties.

In the summer, I was able to work on a Google Summer of Code project/pseudo-internship. Working in a mix of Python and C++ was again an interesting challenge since I'm much more familiar with the former than the latter, and even my experience with other languages lies on the Python side of the interpreted/compiled, dynamic/static typing divide. Still, it was an invaluable experience since C++ rules the domain of finite element analysis and computational fluid dynamics, which I want to explore further. Particularly, FreeCAD is the perfect vehicle for engineering computer modeling, so I have high hopes for my future with the project.

At the end of the summer, I passed the exam for the Linux Foundation Certified System Administrator. This was an opportunity provided by a scholarship given in part because of my work using Python to analyze the efficiency of backyard irrigation systems in the Yucatán back in early 2016, so it was great to finally see the culmination of that work. As a little celebration project, I decided to begin running my own Linux mail server, which has been a great success. There were a few hiccups with blacklists on Yahoo and Outlook, but I was ultimately able to get it working with all the major email providers.

I also embarked on a project I've been wanting to do for a long time: running my own Linux router. I found a great series of tutorials on setting up such a router using Ubuntu and the Pine64 board, and have had excellent results since.

I have also been spending time here and there researching a really promising project, FreeIPA. It's a sort of competitor to Active Directory in the identity management space, mostly made up of a combination of an LDAP, Kerberos, and certificate server. I'm running a sort of pseudo-small business in my home network using my FreeIPA server as a centralized authentication, authorization, and identity server, and it's been a great experience so far; I hope to apply it in reality with the FreeCAD project one day. Look out for future posts on the topic.

In the fall, I began my final year at Texas A&M. My capstone project and team was assigned. Our project involves analyzing the flood resiliency of the Houston area and proposing an ecological engineering design to improve that resiliency and mitigate the effects of future extreme flood events such as was seen during Hurricane Harvey. We are using an open-source toolchain involving PostGIS, Python, and QGIS, and the project is really quite exciting since our analysis could be applied to other coastal cities and regions facing extreme weather events in the future.

Altogether, it's been a great year, but I foresee 2018 being even better. If you're reading this, I want to wish you a happy new year with hope for the same!