SolveSpace extrude limitation
I posted about examining script-based 3D CAD apps, then returing to SolveSpace:
- Scripted 3D CAD applications for Linux — February 12, 2025
previously, I have only done wire-constructions, both 2D and 3D; now learning how to do extrusions, so as to get a proper-looking 3D object. I designed the upper-swing-arm of my trike, using knowledge from the SolveSpace getting-started tutorial here:
https://solvespace.com/bracket.pl
It was OK, designed the swing arm and exported a PNG image:
Nice, but there is a problem. Notice the ends of the swing-arm; sharp corners. I was unable to get rounded corners. The extrude feature does not support it. The holes were created by punching-through circles, and I thought that the same technique could be used on the corners. But no-go. I tried triangles and arcs, but it seems that the punch-through only works for circles.
I came across some discussion; the developers are aware of this limitiation, and there is a hint that SolveSpace v4 might tackle it.
It's not a deal-breaker. For anyone interested, the SolveSpace
file is here.
Tags: linux
Scripted 3D CAD applications for Linux
EasyOS has SolveSpace builtin, that I have been using for years. It is very powerful, and relatively easy to use; however, recently I have been wondering about the script-based CAD apps.
Reason is, the precision of defining a 3D design in code, appeals, as opposed to sketching on a GUI work surface. Basically, you write code in an editor, click on a "Render" button and another window shows the generated 3D image.
Started off looking at OpenSCAD, then some others, such as
PyMADCAD and ZenCAD. But then started to wonder about limitations.
In a forum, someone who was using OpenSCAD, asked, how to measure
the distance between two arbitrary points on the rendered 3D
image? He commented that he often needs to be able to do that, and
I thought, me too. But you can't; that is going "backwards". The
3D image is just a render, and seems that none of the script-based
3D CAD apps support measuring distance between arbitrary points?
This page has links to lots of script-based CAD apps:
https://www.reddit.com/r/openscad/comments/135dllm/better_openscad/
That is not a complete list. For example PyMADCAD:
https://github.com/jimy-byerley/pymadcad
There are so many to investigate, it just goes on and on. But for me, wanting to be able to experiment with adjusting linkages directly on the 3D image in the custom trike project, SolveSpace does it beautifully. So, I've been working through some SolveSpace tutorials, learning more how to use it.
SolveSpace homepage:
https://solvespace.com/index.pl
...there are tutorials, here are more:
https://www.farwire.net/SolveSpace-LearningGuide.htm
https://www.youtube.com/watch?v=dHnVAw7fCPg
https://www.youtube.com/watch?v=IlY1YFid8HA
...there are heaps more on YouTube.
So despite the title, I am back on SolveSpace. It was an
entertaining diversion for awhile, and I might even look at a
couple more.
Tags: linux
The Zig language
Back in 2022 when I was looking around for alternatives to BaCon, did briefly look at Zig, but decided on Nim. Here are introductions to BaCon and Nim:
"The BaCon programming language"
https://easyos.org/dev/bacon/index.html
"The Nim language"
https://easyos.org/dev/nim/index.html
Last couple of days, took another look at Zig; it has grown enormously in popularity since 2022. Why?...
Zig is a relativitely young language, started by Andrew Kelley in 2015. It is a complete compiler, generating binary executables, unlike BaCon and Nim that generate C code and then require a C compiler such as gcc to generate the binaries. I've been "kicking the tyres" of Zig...
I compiled the traditional "Hello World" CLI program, and it is only 3KB. Furthermore, that binary is statically-linked. First impression, that is incredible.
But it gets better; out of the box, the Zig compiler cross-compiles. You can choose any target you want, x86_64 or aarch64 for example. Furthermore, you can specify specific CPUs. I specified the Intel "nocona" CPU for my "Hello World".
Right off, I see why this will appeal to people who code for embedded systems.
The Wikipedia has an overview:
https://en.wikipedia.org/wiki/Zig_(programming_language)
The Zig website:
There are some great getting-started websites:
"Introduction to Zig"
https://pedropark99.github.io/zig-book/
...online, also available as an ebook or printed.
"Zig Guide"
https://zig.guide/
"Getting started with the Zig programming labguage"
https://blog.logrocket.com/getting-started-zig-programming-language/
I have a particular like for associative arrays, and yes, Zig has them in the standard-library; they are called "hash tables". I also want the language to support regular expressions; it seems need an external library for that.
I have a need to create small statically-linked binaries, for use in the initrd. But they are useful anywhere, as no reliance on glibc or any libc library. Developers will have encountered this problem, when linked against a particular version of glibc, the binary won't work with a different version of glibc. Yes, you can statically-link with glibc when compiling, but the binary is enormous. So, I have used musl. Up until now.
Another thing I like is to write little programs with GUI, that is, Graphical User Interface. Most commonly I do this with shell scripting and one of the GUI tools, such as gtkdialog, xdialog and xmessage. BaCon and Nim also have GUI toolkits; I have used HUG with BaCon.
What about GUI toolkits for Zig? There is a website with links to all-things-Zig:
"Awesome Zig"
https://github.com/zigcc/awesome-zig
I like the look of "capy":
https://github.com/capy-ui/capy
Here is another GUI toolkit, not in the Awesome-Zig list:
https://github.com/desttinghim/zig-libui-ng
...awhile back, in 2022, did look at the Nim binding for libui-ng and liked its simplicity.
Finally, some Zig reviews:From the perspective of a Rust programmer:
https://blog.lohr.dev/after-a-day-of-programming-in-zig
This looks like a sales-pitch:
https://leaddev.com/tech/why-zig-one-hottest-programming-languages-learn
From the perspective of a Go programmer:
https://medium.com/@vladimirvivien/things-i-like-about-zig-as-a-go-programmer-75eb02aab00f
Looks good. The intention is that once Easy Daedalus 6.4 is released, will take some time out from Easy development and play with Zig. As an exercise, might rewrite 'debdb2pupdb' in Zig, see how it compares with the Nim code.
EDIT:
Here is another Zig tutorial, very recent:
"Programming with Zig: from basics to
mastery"
https://gencmurat.com/en/pages/programming-with-zig/
Tags: linux
BookwormDog build script
A very great thing about the Puppy Linux Forum is that it has been the home to incredible creativity. There are many derivatives of Puppy Linux, including the *Dog distributions. I use the word "derivative" rather loosely; The *Dog distros are really Debian or Ubuntu or Devuan distributions made to look like Puppy Linux. Which they do very well.
I want to checkout the latest offerings on the Puppy Forum. Apart from the *Dog distros, there are others including FatDog (nothing to do with the *Dogs; a different pedigree), the KL* distros, VanillaDpup. etc.
Starting with DebianDog, there is a build script for Bookworm:
https://forum.puppylinux.com/viewtopic.php?t=5069
I ran the script:
# ./mklive-bookworm -gui
A huge selection to choose from:
...I chose the Jwm minimal. Next-up, ticked some checkboxes:
First error:
...however, the script did download the deboostrap deb and I was able to install it. Had to run the script again from the start. Then it put up another message that package dpkg is missing. I installed that from PKGget, and it required starting the script from start again.
A few more windows came up, all good, and packages got downloaded. I did see some errors flash by on the terminal:
Preparing to unpack debootstrap_1.0.134_all.deb ...
Unpacking debootstrap (1.0.134) ...
dpkg: dependency problems prevent configuration of debootstrap:
debootstrap depends on wget; however:
Package wget is not installed.
dpkg: error processing package debootstrap (--install):
dependency problems - leaving unconfigured
Errors were encountered while processing:
debootstrap
Setting up debootstrap in bookworm/chroot
...note, wget is installed. Another error:
Reading package lists... Done
W: GPG error: http://dl.google.com/linux/chrome/deb stable InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY E88979FB9B30ACF2
E: The repository 'http://dl.google.com/linux/chrome/deb stable InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
Hit:1 http://deb.debian.org/debian bookworm InRelease
Hit:2 http://security.debian.org bookworm-security InRelease
Hit:3 http://deb.debian.org/debian bookworm-updates InRelease
Hit:4 http://deb.debian.org/debian bookworm-proposed-updates InRelease
Get:6 http://dl.google.com/linux/chrome/deb stable InRelease [1825 B]
Get:5 https://github.com/doglinux/book-worm/raw/master/amd64 ./ InRelease [2304 B]
Err:6 http://dl.google.com/linux/chrome/deb stable InRelease
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY E88979FB9B30ACF2
Reading package lists... Done
W: GPG error: http://dl.google.com/linux/chrome/deb stable InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY E88979FB9B30ACF2
E: The repository 'http://dl.google.com/linux/chrome/deb stable InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
The script asked a question about squashfs compression and I chose "xz":
Now we will create compressed kernel: k-6.1.0-25-amd64.squashfs and filesystem: '01-filesystem.squashfs'
Please enter your choice, xz compression will give smaller size than gzip,
but xz takes much longer time to compress
Type gzip or xz :
This is where things went wrong, or so it seems. Lots of error messages flashed by, captured some of them:
[===/ ] 690/21205 3%Failed to read file chroot/proc/irq/6/node, creating empty file
[===/ ] 690/21205 3%Failed to read file chroot/proc/irq/6/smp_affinity, creating empty file
[===/ ] 690/21205 3%Failed to read file chroot/proc/irq/6/smp_affinity_list, creating empty file
[===/ ] 690/21205 3%Failed to read file chroot/proc/irq/6/spurious, creating empty file
[===/ ] 690/21205 3%Failed to read file chroot/proc/irq/7/affinity_hint, creating empty file
[===/ ] 690/21205 3%Failed to read file chroot/proc/irq/7/effective_affinity, creating empty file
[===/ ] 690/21205 3%Failed to read file chroot/proc/irq/7/effective_affinity_list, creating empty file
[===/ ] 690/21205 3%Failed to read file chroot/proc/irq/7/node, creating empty file
[===/ ] 690/21205 3%Failed to read file chroot/proc/irq/7/smp_affinity, creating empty file
[===/ ] 690/21205 3%Failed to read file chroot/proc/irq/7/smp_affinity_list, creating empty file
[===/ ] 690/21205 3%Failed to read file chroot/proc/irq/7/spurious, creating empty file
Then it seemed to be stopped, though the hard drive remained very busy. After about 15 minutes, I typed CTRL-C to quit:
[===/ ] 690/21205 3%Failed to read file chroot/proc/keys, creating empty file
[===| ] 690/21205 3%^CUnmounting mount binds in chroot
#
Should I have waited longer? I will ask on the forum.
EDIT:
Forum member fredx181, the creator of the BookwormDog build
script, has fixed it for EasyOS:
https://forum.puppylinux.com/viewtopic.php?p=131626#p131626
That's great!
Tags: linux
Doubts about Linux rolling releases
I have stayed away from rolling releases as I consider them to be
inherently unstable, or prone to unexpected side-effects. However, have
ventured into playing with Void Linux, see post a couple of days ago:
https://bkhome.org/news/202309/first-experiment-creating-a-void-rootfs.html
I even built "easyVoid"; EasyOS built from Void packages, and it
works, with some issues. Installed LibreOffice from the Void package
repository; works. However, installed Shotcut video editor, and at
startup there was a popup window informing that "libjack0" package is
missing.
Well, the version of libjack that it wants isn't in the repository. I had to get it from the Debian repo. Then Shotcut worked.
This has reminded me why I don't like rolling releases. Dependency
management has to be very rigorous to work properly in a rolling
release, and I have just got an indication that it isn't up to scratch
in Void Linux. Unless I hit one very rare example.
But other, very serious, problems can occur, that versioned releases
avoid. For example, a couple of years ago there was a version bump of
the 'pango' package that caused many applications to misbehave. The
misbehaviour might only get noticed sometime later, when users complain.
A versioned Linux release might not eliminate that particular problem,
but will greatly reduce its likelihood of occurrence or the
severity.
Tags: linux
Apps running as spot extra secure in Puppy
I watch what Dima (dimkr in the forum) is doing on woof-CE with great interest. In particular, the steps that he has implemented to enhance security for applications running as user 'spot'.
See his summary here:
https://forum.puppylinux.com/viewtopic.php?p=70405#p70405
Tags: linux
Puppy Linux S15Pup 64- and 32-bit 22.12 released
It is over two years since the last official release of Puppy was
announced on Distrowatch. There have been plenty of releases since
then, and derivatives; however, none has been presented to
Distrowatch as the latest "official" Puppy.
There has been lengthy discussion about what will be the next official pup, and finally, peebee's S15Pup was chosen. The discussion thread is here:
https://forum.puppylinux.com/viewtopic.php?t=7204
Here is the announcement on Distrowatch:
https://distrowatch.com/?newsid=11706
Announcement thread, also for feedback:
https://forum.puppylinux.com/viewtopic.php?t=7464
Snapshot:
Feedback is very positive!
Tags: linux